silvery 0.18.2 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{animation-DhINOJk8.mjs → animation-Cn64yepo.mjs} +1 -1
- package/dist/{animation-DhINOJk8.mjs.map → animation-Cn64yepo.mjs.map} +1 -1
- package/dist/{ansi-C6Qs1Wn2.mjs → ansi-CLOitHKx.mjs} +1 -1
- package/dist/ansi-CLOitHKx.mjs.map +1 -0
- package/dist/{ansi-CsjnZtAw.d.mts → ansi-Cc33mW54.d.mts} +1 -1
- package/dist/{ansi-CsjnZtAw.d.mts.map → ansi-Cc33mW54.d.mts.map} +1 -1
- package/dist/{chunk-BSw8zbkd.mjs → chunk-Vs_PY4HZ.mjs} +1 -1
- package/dist/cli-BKp0YtBD.mjs +4 -0
- package/dist/{context-BjWgrikx.mjs → context-BU5LkkIy.mjs} +8 -7
- package/dist/context-BU5LkkIy.mjs.map +1 -0
- package/dist/devtools-9QY4teqI.mjs +2 -0
- package/dist/{devtools-CeO9X_uv.mjs → devtools-DxkSLXDA.mjs} +4 -5
- package/dist/devtools-DxkSLXDA.mjs.map +1 -0
- package/dist/{eta-BnQSZcWf.mjs → eta-Bb3RH3wh.mjs} +1 -1
- package/dist/{eta-BnQSZcWf.mjs.map → eta-Bb3RH3wh.mjs.map} +1 -1
- package/dist/{flexily-zero-adapter-BOM0cl8R.mjs → flexily-zero-adapter-BlQa46nr.mjs} +21 -64
- package/dist/flexily-zero-adapter-BlQa46nr.mjs.map +1 -0
- package/dist/{flexily-zero-adapter-V8R3HQtK.mjs → flexily-zero-adapter-CMxXhdOL.mjs} +1 -1
- package/dist/{image-B0zMbVUr.mjs → image-CTII5QWI.mjs} +3 -3
- package/dist/image-CTII5QWI.mjs.map +1 -0
- package/dist/{index-Bh3U1K09.d.mts → index-BXslOebb.d.mts} +547 -137
- package/dist/index-BXslOebb.d.mts.map +1 -0
- package/dist/{index-C4vrhbud.d.mts → index-BnA7mNpo.d.mts} +1 -1
- package/dist/{index-C4vrhbud.d.mts.map → index-BnA7mNpo.d.mts.map} +1 -1
- package/dist/index-D3saHouR.d.mts +1392 -0
- package/dist/index-D3saHouR.d.mts.map +1 -0
- package/dist/index.d.mts +5 -33
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +13 -13
- package/dist/{layout-engine--drvrWjD.mjs → layout-engine-B6Cdz1yZ.mjs} +1 -1
- package/dist/{layout-engine-Dr3cY5U4.mjs → layout-engine-ClUgv6jB.mjs} +3 -3
- package/dist/{layout-engine-Dr3cY5U4.mjs.map → layout-engine-ClUgv6jB.mjs.map} +1 -1
- package/dist/{multi-progress-CcdqJFlf.mjs → multi-progress-Bq9Oi_WI.mjs} +3 -3
- package/dist/{multi-progress-CcdqJFlf.mjs.map → multi-progress-Bq9Oi_WI.mjs.map} +1 -1
- package/dist/{multi-progress-DQ-uUzLf.d.mts → multi-progress-DAQC7eap.d.mts} +2 -2
- package/dist/{multi-progress-DQ-uUzLf.d.mts.map → multi-progress-DAQC7eap.d.mts.map} +1 -1
- package/dist/{node-CP5WChgr.mjs → node-BeWlnCPY.mjs} +4 -4
- package/dist/node-BeWlnCPY.mjs.map +1 -0
- package/dist/{progress-bar-IrUjkLfU.mjs → progress-bar-CXE5Qfkd.mjs} +4 -4
- package/dist/progress-bar-CXE5Qfkd.mjs.map +1 -0
- package/dist/reconciler-Cwgm8hRR.mjs +8459 -0
- package/dist/reconciler-Cwgm8hRR.mjs.map +1 -0
- package/dist/{render-string-BwLG7rIX.mjs → render-string-0mN37DLf.mjs} +1 -1
- package/dist/{render-string-DVfgc8xr.mjs → render-string-X-CxpTdZ.mjs} +935 -136
- package/dist/render-string-X-CxpTdZ.mjs.map +1 -0
- package/dist/runtime.d.mts +2 -2
- package/dist/runtime.mjs +3 -3
- package/dist/{spinner-BRkaJI0N.d.mts → spinner-CGo34vyR.d.mts} +2 -2
- package/dist/{spinner-BRkaJI0N.d.mts.map → spinner-CGo34vyR.d.mts.map} +1 -1
- package/dist/{spinner-BmldKx0M.mjs → spinner-CeOmcuw_.mjs} +3 -3
- package/dist/spinner-CeOmcuw_.mjs.map +1 -0
- package/dist/src-B5GjfG7g.mjs +4305 -0
- package/dist/src-B5GjfG7g.mjs.map +1 -0
- package/dist/{src-CJPXf3fC.mjs → src-Bd7ezSgG.mjs} +7560 -6474
- package/dist/src-Bd7ezSgG.mjs.map +1 -0
- package/dist/{src-D8kLrQBT.mjs → src-CChwjk0Z.mjs} +8 -86
- package/dist/src-CChwjk0Z.mjs.map +1 -0
- package/dist/{src-D_BS-as7.mjs → src-NCKb8kE5.mjs} +777 -776
- package/dist/src-NCKb8kE5.mjs.map +1 -0
- package/dist/theme.d.mts +2 -130
- package/dist/theme.mjs +3 -8
- package/dist/{types-B4A8Ebba.d.mts → types-BH_v3iMT.d.mts} +1 -1
- package/dist/{types-B4A8Ebba.d.mts.map → types-BH_v3iMT.d.mts.map} +1 -1
- package/dist/{types-e4dpfbSa.mjs → types-Bk2yw9Qj.mjs} +3 -3
- package/dist/types-Bk2yw9Qj.mjs.map +1 -0
- package/dist/ui/animation.d.mts +1 -1
- package/dist/ui/animation.mjs +1 -1
- package/dist/ui/ansi.d.mts +1 -1
- package/dist/ui/ansi.mjs +1 -1
- package/dist/ui/cli.d.mts +3 -3
- package/dist/ui/cli.mjs +5 -5
- package/dist/ui/display.d.mts +1 -1
- package/dist/ui/display.mjs.map +1 -1
- package/dist/ui/image.d.mts +1 -1
- package/dist/ui/image.mjs +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/input.d.mts.map +1 -1
- package/dist/ui/input.mjs +2 -4
- package/dist/ui/input.mjs.map +1 -1
- package/dist/ui/progress.d.mts +3 -3
- package/dist/ui/progress.d.mts.map +1 -1
- package/dist/ui/progress.mjs +3 -3
- package/dist/ui/progress.mjs.map +1 -1
- package/dist/ui/react.d.mts +1 -1
- package/dist/ui/react.d.mts.map +1 -1
- package/dist/ui/react.mjs +2 -2
- package/dist/ui/react.mjs.map +1 -1
- package/dist/ui/utils.mjs +1 -1
- package/dist/ui/wrappers.d.mts +2 -2
- package/dist/ui/wrappers.mjs +1 -1
- package/dist/ui.d.mts +5 -5
- package/dist/ui.mjs +6 -6
- package/dist/{useLatest-6xqnGIU6.d.mts → useLatest-Bg2x4bfP.d.mts} +1 -1
- package/dist/{useLatest-6xqnGIU6.d.mts.map → useLatest-Bg2x4bfP.d.mts.map} +1 -1
- package/dist/{with-text-input-lUh9gYAG.d.mts → with-text-input-CRfoiFFG.d.mts} +3 -3
- package/dist/with-text-input-CRfoiFFG.d.mts.map +1 -0
- package/dist/{wrappers-JrEYTuKA.mjs → wrappers-UTADQkSY.mjs} +4 -4
- package/dist/wrappers-UTADQkSY.mjs.map +1 -0
- package/dist/{yoga-adapter-Bc8XT9cN.mjs → yoga-adapter-8oRGRw8V.mjs} +2 -2
- package/dist/{yoga-adapter-Bc8XT9cN.mjs.map → yoga-adapter-8oRGRw8V.mjs.map} +1 -1
- package/dist/yoga-adapter-D_CcxSt5.mjs +2 -0
- package/package.json +3 -3
- package/dist/UPNG-DvKjM6wE.mjs +0 -5076
- package/dist/UPNG-DvKjM6wE.mjs.map +0 -1
- package/dist/__vite-browser-external-2447137e-DPKHHqQK.mjs +0 -6
- package/dist/__vite-browser-external-2447137e-DPKHHqQK.mjs.map +0 -1
- package/dist/ansi-C6Qs1Wn2.mjs.map +0 -1
- package/dist/apng-CvSlLBtc.mjs +0 -3
- package/dist/apng-DFFVOItr.mjs +0 -70
- package/dist/apng-DFFVOItr.mjs.map +0 -1
- package/dist/assets/resvgjs.darwin-arm64-BtufyGW1.node +0 -0
- package/dist/backend-DU0Y938U.mjs +0 -13396
- package/dist/backend-DU0Y938U.mjs.map +0 -1
- package/dist/backends-BihMKFY_.mjs +0 -1181
- package/dist/backends-BihMKFY_.mjs.map +0 -1
- package/dist/backends-Dk_5G_gC.mjs +0 -3
- package/dist/cli-GwJ0S2In.mjs +0 -4
- package/dist/context-BjWgrikx.mjs.map +0 -1
- package/dist/derive-O_Kb1Bk_.d.mts +0 -28
- package/dist/derive-O_Kb1Bk_.d.mts.map +0 -1
- package/dist/devtools-CeO9X_uv.mjs.map +0 -1
- package/dist/devtools-nX4tj6OH.mjs +0 -2
- package/dist/flexily-zero-adapter-BOM0cl8R.mjs.map +0 -1
- package/dist/gif-B9Uq4qZA.mjs +0 -73
- package/dist/gif-B9Uq4qZA.mjs.map +0 -1
- package/dist/gif-BdrLRBmM.mjs +0 -3
- package/dist/gifenc-DfhOb4xr.mjs +0 -730
- package/dist/gifenc-DfhOb4xr.mjs.map +0 -1
- package/dist/image-B0zMbVUr.mjs.map +0 -1
- package/dist/index-Bh3U1K09.d.mts.map +0 -1
- package/dist/index-dehZ18K-.d.mts +0 -679
- package/dist/index-dehZ18K-.d.mts.map +0 -1
- package/dist/key-mapping-7k2ufK2b.mjs +0 -3
- package/dist/key-mapping-WLUmxjx1.mjs +0 -132
- package/dist/key-mapping-WLUmxjx1.mjs.map +0 -1
- package/dist/node-CP5WChgr.mjs.map +0 -1
- package/dist/progress-bar-IrUjkLfU.mjs.map +0 -1
- package/dist/reconciler-B8uxQxaU.mjs +0 -16482
- package/dist/reconciler-B8uxQxaU.mjs.map +0 -1
- package/dist/render-string-DVfgc8xr.mjs.map +0 -1
- package/dist/resvg-js-Cwipz-_J.mjs +0 -203
- package/dist/resvg-js-Cwipz-_J.mjs.map +0 -1
- package/dist/spinner-BmldKx0M.mjs.map +0 -1
- package/dist/src-C0sOQW-t.mjs +0 -3866
- package/dist/src-C0sOQW-t.mjs.map +0 -1
- package/dist/src-CJPXf3fC.mjs.map +0 -1
- package/dist/src-D8kLrQBT.mjs.map +0 -1
- package/dist/src-D_BS-as7.mjs.map +0 -1
- package/dist/theme.d.mts.map +0 -1
- package/dist/theme.mjs.map +0 -1
- package/dist/types-e4dpfbSa.mjs.map +0 -1
- package/dist/with-text-input-lUh9gYAG.d.mts.map +0 -1
- package/dist/wrapper-CE6GQ27z.mjs +0 -3527
- package/dist/wrapper-CE6GQ27z.mjs.map +0 -1
- package/dist/wrappers-JrEYTuKA.mjs.map +0 -1
- package/dist/yoga-adapter-B8LZpQcE.mjs +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconciler-B8uxQxaU.mjs","names":["splitRawInput","ST","stripAnsi","keyToAnsi","formatRgb","formatRgb","diffBuffers","escapeXml","parseSvgDimensions","DEFAULT_COLS","DEFAULT_ROWS","xterm","resolve","Ghostty","CellFlags","log","DEBUG_OUTPUT","log","splitRawInput","log","_createTerm","collectNodeTextContent"],"sources":["../packages/ag/src/keys.ts","../packages/ag-term/src/ansi/sgr-codes.ts","../packages/ag-term/src/buffer.ts","../packages/ag-term/src/text-sizing.ts","../packages/ag-term/src/unicode.ts","../packages/ag-term/src/errors.ts","../../termless/src/types.ts","../../termless/src/key-encoding.ts","../../termless/src/assertions.ts","../../termless/src/jest-matchers.ts","../../termless/src/diff.ts","../../termless/src/recording.ts","../../termless/src/timer.ts","../../termless/src/warnings.ts","../../termless/src/tape/parser.ts","../../termless/src/tape/themes.ts","../../termless/src/tape/executor.ts","../../termless/src/tape/compare.ts","../../termless/src/tape/overlay.ts","../../termless/src/animation/animated-svg.ts","../../termless/src/animation/index.ts","../../termless/src/asciicast/reader.ts","../../termless/src/asciicast/writer.ts","../../termless/src/asciicast/convert.ts","../../termless/src/index.ts","../../../node_modules/.bun/@xterm+headless@5.5.0/node_modules/@xterm/headless/lib-headless/xterm-headless.js","../../termless/packages/xtermjs/src/backend.ts","../../termless/packages/xtermjs/src/index.ts","../../../node_modules/.bun/ghostty-web@0.4.0/node_modules/ghostty-web/dist/ghostty-web.js","../../termless/packages/ghostty/src/backend.ts","../../termless/packages/ghostty/src/index.ts","../packages/ag-term/src/pipeline/output-verify.ts","../packages/ag-term/src/pipeline/diff-buffers.ts","../packages/ag-term/src/pipeline/output-phase.ts","../packages/ag-term/src/ansi/detection.ts","../packages/ag-term/src/mouse.ts","../packages/ag-term/src/bracketed-paste.ts","../packages/ag-term/src/focus-reporting.ts","../packages/ag-term/src/runtime/term-provider.ts","../packages/ag-term/src/ansi/term.ts","../packages/ag-term/src/ansi/patch-console.ts","../packages/ag-term/src/ansi/output-guard.ts","../packages/ag-term/src/ansi/utils.ts","../packages/ag-term/src/ansi/underline.ts","../packages/ag-term/src/ansi/hyperlink.ts","../packages/ag-term/src/ansi/ansi.ts","../packages/ag-term/src/ansi/advanced-clipboard.ts","../packages/ag-term/src/ansi/index.ts","../packages/ag/src/epoch.ts","../packages/ag-term/src/pipeline/collect-text.ts","../packages/ag-term/src/pipeline/measure-stats.ts","../packages/ag/src/dirty-tracking.ts","../packages/ag-react/src/reconciler/helpers.ts","../packages/ag-react/src/reconciler/nodes.ts","../packages/ag-react/src/reconciler/host-config.ts","../packages/ag-react/src/reconciler/index.ts"],"sourcesContent":["/**\n * Keyboard Constants and Utilities\n *\n * Single source of truth for all key parsing, mapping, and matching in silvery.\n *\n * ## Two-Layer Input Architecture\n *\n * parseKey() returns `[input, key]` where these serve DIFFERENT purposes:\n *\n * - `input` is **normalized for keybinding matching**. Shifted punctuation is\n * decomposed: '#' becomes input='3' with key.shift=true, so keybindings\n * like 'shift-3' can match. Uppercase letters become lowercase + shift.\n *\n * - `key.text` is the **actual typed character** (pre-normalization). For text\n * insertion, always use `key.text ?? input` — this ensures Shift+3 inserts\n * '#', opt+e inserts '´', and IME output inserts the composed string.\n *\n * Rule: keybinding resolution uses `input`. Text insertion uses `key.text`.\n * Never reconstruct characters from key codes — trust what the terminal sent.\n *\n * - KEY_MAP: Playwright key names -> ANSI sequences (for sending input)\n * - CODE_TO_KEY: ANSI escape suffixes -> key names (for parsing input)\n * - Key interface: structured key object with boolean flags\n * - parseKeypress(): raw terminal input -> ParsedKeypress\n * - parseKey(): raw terminal input -> [input, Key]\n * - keyToAnsi(): Playwright key string -> ANSI sequence\n * - keyToName(): Key object -> named key string\n * - keyToModifiers(): Key object -> modifier flags\n * - parseHotkey(): \"ctrl+shift+a\" -> ParsedHotkey\n * - matchHotkey(): match ParsedHotkey against Key\n *\n * @example\n * ```tsx\n * import { keyToAnsi } from '@silvery/test'\n *\n * // Convert key names to ANSI\n * keyToAnsi('Enter') // '\\r'\n * keyToAnsi('ArrowUp') // '\\x1b[A'\n * keyToAnsi('Control+c') // '\\x03'\n * keyToAnsi('a') // 'a'\n * ```\n */\n\nimport { createLogger } from \"loggily\"\n\nconst log = createLogger(\"silvery:keys\")\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Key object describing which special keys/modifiers were pressed.\n */\nexport interface Key {\n /** Up arrow key was pressed */\n upArrow: boolean\n /** Down arrow key was pressed */\n downArrow: boolean\n /** Left arrow key was pressed */\n leftArrow: boolean\n /** Right arrow key was pressed */\n rightArrow: boolean\n /** Page Down key was pressed */\n pageDown: boolean\n /** Page Up key was pressed */\n pageUp: boolean\n /** Home key was pressed */\n home: boolean\n /** End key was pressed */\n end: boolean\n /** Return (Enter) key was pressed */\n return: boolean\n /** Escape key was pressed */\n escape: boolean\n /** Ctrl key was pressed */\n ctrl: boolean\n /** Shift key was pressed */\n shift: boolean\n /** Tab key was pressed */\n tab: boolean\n /** Backspace key was pressed */\n backspace: boolean\n /** Delete key was pressed */\n delete: boolean\n /** Meta key (Alt/Option on macOS, Alt on other platforms) was pressed */\n meta: boolean\n /** Super key (Cmd on macOS, Win on Windows) was pressed. Requires Kitty protocol. */\n super: boolean\n /** Hyper key was pressed. Requires Kitty protocol. */\n hyper: boolean\n /** CapsLock is active. Requires Kitty protocol. */\n capsLock: boolean\n /** NumLock is active. Requires Kitty protocol. */\n numLock: boolean\n /** Kitty event type. Only set with Kitty flag 2 (report events). */\n eventType?: \"press\" | \"repeat\" | \"release\"\n /** The actual text character typed (pre-normalization). For text insertion,\n * use this instead of the normalized `input` which maps shifted chars to base keys. */\n text?: string\n /** True when the key is a modifier pressed alone (Shift, Ctrl, Alt, Super, Hyper, Meta).\n * Set during parsing for Kitty protocol modifier-only events. */\n isModifierOnly?: boolean\n}\n\n/**\n * Input handler callback type.\n * Return 'exit' to exit the app.\n */\nexport type InputHandler = (input: string, key: Key) => void | \"exit\"\n\n/**\n * Detect modifier-only key events (Cmd, Shift, Ctrl, Alt pressed alone).\n * With Kitty REPORT_ALL_KEYS, these fire as key events with empty input\n * and no actionable key flags — only modifier flags are set.\n *\n * The flag is set during parsing by `parseKey()`. This function checks it.\n * Shared by useInput (filters these out) and create-app (filters for app handlers).\n */\nexport function isModifierOnlyEvent(_input: string, key: Key): boolean {\n return key.isModifierOnly === true\n}\n\n/**\n * Parsed hotkey from a string like \"ctrl+shift+a\" or \"Control+ArrowUp\".\n */\nexport interface ParsedHotkey {\n key: string\n ctrl: boolean\n meta: boolean\n shift: boolean\n alt: boolean\n super: boolean\n hyper: boolean\n}\n\n// ============================================================================\n// Key -> ANSI Mapping (for sending input)\n// ============================================================================\n\n/**\n * Playwright-compatible key names -> ANSI sequences.\n * Keys that are modifier-only (Control, Shift, etc.) are null.\n */\nconst KEY_MAP: Record<string, string | null> = {\n // Navigation (Playwright names)\n ArrowUp: \"\\x1b[A\",\n ArrowDown: \"\\x1b[B\",\n ArrowLeft: \"\\x1b[D\",\n ArrowRight: \"\\x1b[C\",\n Home: \"\\x1b[H\",\n End: \"\\x1b[F\",\n PageUp: \"\\x1b[5~\",\n PageDown: \"\\x1b[6~\",\n\n // Editing\n Enter: \"\\r\",\n Tab: \"\\t\",\n Backspace: \"\\x7f\",\n Delete: \"\\x1b[3~\",\n Escape: \"\\x1b\",\n Space: \" \",\n\n // Modifiers (prefix only, not standalone sequences)\n Control: null,\n Shift: null,\n Alt: null,\n Meta: null,\n Super: null,\n Hyper: null,\n}\n\nconst MODIFIER_ALIASES: Record<string, string> = {\n ctrl: \"Control\",\n control: \"Control\",\n \"⌃\": \"Control\",\n shift: \"Shift\",\n \"⇧\": \"Shift\",\n alt: \"Alt\",\n meta: \"Meta\",\n opt: \"Alt\",\n option: \"Alt\",\n \"⌥\": \"Alt\",\n cmd: \"Super\",\n command: \"Super\",\n super: \"Super\",\n \"⌘\": \"Super\",\n hyper: \"Hyper\",\n \"✦\": \"Hyper\",\n}\n\n/** Modifier symbols that can be used as prefixes without + separator (e.g. ⌘J, ⌃⇧J) */\nconst MODIFIER_SYMBOLS = new Set([\"⌃\", \"⇧\", \"⌥\", \"⌘\", \"✦\"])\n\nfunction normalizeModifier(mod: string): string {\n return MODIFIER_ALIASES[mod.toLowerCase()] ?? mod\n}\n\n/**\n * Convert Playwright-style key string to ANSI sequence.\n *\n * Supports:\n * - Single characters: 'a', 'A', '1', etc.\n * - Named keys: 'Enter', 'ArrowUp', 'Escape', etc.\n * - Modifier combos: 'Control+c', 'Shift+Tab', 'Control+Shift+a'\n * - Lowercase modifier aliases: 'ctrl+c', 'shift+Tab', 'alt+x'\n *\n * @example\n * ```tsx\n * keyToAnsi('Enter') // '\\r'\n * keyToAnsi('ArrowUp') // '\\x1b[A'\n * keyToAnsi('Control+c') // '\\x03'\n * keyToAnsi('j') // 'j'\n * ```\n */\nexport function keyToAnsi(key: string): string {\n // Split on + for combos: 'Control+Shift+a' -> ['Control', 'Shift', 'a']\n const parts = key.split(\"+\")\n const mainKey = parts.pop()!\n // Normalize modifier aliases: ctrl->Control, shift->Shift, alt->Alt, meta->Meta\n const modifiers = parts.map(normalizeModifier)\n\n // Super/Hyper modifiers require Kitty keyboard protocol encoding\n // (standard ANSI cannot represent Cmd/Super)\n if (modifiers.includes(\"Super\") || modifiers.includes(\"Hyper\")) {\n return keyToKittyAnsi(key)\n }\n\n // Single char without modifiers\n if (!modifiers.length && mainKey.length === 1) {\n return mainKey\n }\n\n // Ctrl+letter -> control code (ASCII 1-26)\n if (modifiers.includes(\"Control\") && mainKey.length === 1) {\n const code = mainKey.toLowerCase().charCodeAt(0) - 96\n if (code >= 1 && code <= 26) return String.fromCharCode(code)\n }\n\n // Ctrl+/ -> \\x1f (Unit Separator, standard terminal convention)\n if (modifiers.includes(\"Control\") && mainKey === \"/\") {\n return \"\\x1f\"\n }\n\n // Ctrl+Enter -> \\n (legacy terminal: \\r = Enter, \\n = Ctrl+Enter/Ctrl+J)\n if (modifiers.includes(\"Control\") && mainKey === \"Enter\") {\n return \"\\n\"\n }\n\n // Alt+key -> ESC prefix (standard terminal convention)\n // Alt/Meta/Option keys send ESC followed by the key\n if ((modifiers.includes(\"Alt\") || modifiers.includes(\"Meta\")) && mainKey.length === 1) {\n return `\\x1b${mainKey}`\n }\n\n // Shift+Tab -> backtab (universally \\x1b[Z across all terminal emulators)\n if (modifiers.includes(\"Shift\") && mainKey === \"Tab\") {\n return \"\\x1b[Z\"\n }\n\n // Shift+key for legacy ANSI encoding (no CSI sequence available)\n // Legacy terminals send the shifted character directly: Shift+a → 'A', Shift+/ → '?'\n if (modifiers.length === 1 && modifiers[0] === \"Shift\" && mainKey.length === 1) {\n // Shift+letter → uppercase\n if (mainKey >= \"a\" && mainKey <= \"z\") return mainKey.toUpperCase()\n // Shift+punct → shifted character (US QWERTY)\n const shifted = BASE_TO_SHIFTED_PUNCT[mainKey]\n if (shifted) return shifted\n }\n\n // Modified arrow/function keys -> xterm-style CSI 1;modifier sequences\n // E.g. Shift+ArrowUp -> \\x1b[1;2A, Ctrl+ArrowDown -> \\x1b[1;5B\n const ARROW_SUFFIX: Record<string, string> = {\n ArrowUp: \"A\",\n ArrowDown: \"B\",\n ArrowRight: \"C\",\n ArrowLeft: \"D\",\n Home: \"H\",\n End: \"F\",\n }\n if (modifiers.length > 0 && mainKey in ARROW_SUFFIX) {\n let mod = 1\n if (modifiers.includes(\"Shift\")) mod += 1\n if (modifiers.includes(\"Alt\") || modifiers.includes(\"Meta\")) mod += 2\n if (modifiers.includes(\"Control\")) mod += 4\n if (modifiers.includes(\"Super\")) mod += 8\n if (modifiers.includes(\"Hyper\")) mod += 16\n return `\\x1b[1;${mod}${ARROW_SUFFIX[mainKey]}`\n }\n\n // Look up base key in map\n const base = KEY_MAP[mainKey]\n if (base !== undefined && base !== null) return base\n\n // Fallback: return as-is (single char or unknown key)\n return mainKey\n}\n\n// ============================================================================\n// ANSI -> Key Mapping (for parsing input)\n// ============================================================================\n\n/**\n * ANSI escape code suffix -> key name mapping.\n * Used by useInput to parse incoming key sequences.\n *\n * The key is the escape sequence suffix (after ESC or ESC[).\n * Multiple terminal emulators may use different sequences for the same key.\n */\nexport const CODE_TO_KEY: Record<string, string> = {\n // Arrow keys (xterm ESC [ letter)\n \"[A\": \"up\",\n \"[B\": \"down\",\n \"[C\": \"right\",\n \"[D\": \"left\",\n \"[E\": \"clear\",\n \"[F\": \"end\",\n \"[H\": \"home\",\n\n // Arrow keys (xterm/gnome ESC O letter)\n OA: \"up\",\n OB: \"down\",\n OC: \"right\",\n OD: \"left\",\n OE: \"clear\",\n OF: \"end\",\n OH: \"home\",\n\n // Function keys (xterm/gnome ESC O letter)\n OP: \"f1\",\n OQ: \"f2\",\n OR: \"f3\",\n OS: \"f4\",\n\n // Function keys (xterm/rxvt ESC [ number ~)\n \"[11~\": \"f1\",\n \"[12~\": \"f2\",\n \"[13~\": \"f3\",\n \"[14~\": \"f4\",\n \"[15~\": \"f5\",\n \"[17~\": \"f6\",\n \"[18~\": \"f7\",\n \"[19~\": \"f8\",\n \"[20~\": \"f9\",\n \"[21~\": \"f10\",\n \"[23~\": \"f11\",\n \"[24~\": \"f12\",\n\n // Function keys (Cygwin/libuv)\n \"[[A\": \"f1\",\n \"[[B\": \"f2\",\n \"[[C\": \"f3\",\n \"[[D\": \"f4\",\n \"[[E\": \"f5\",\n\n // Navigation keys (xterm/rxvt ESC [ number ~)\n \"[1~\": \"home\",\n \"[2~\": \"insert\",\n \"[3~\": \"delete\",\n \"[4~\": \"end\",\n \"[5~\": \"pageup\",\n \"[6~\": \"pagedown\",\n\n // Navigation keys (putty)\n \"[[5~\": \"pageup\",\n \"[[6~\": \"pagedown\",\n\n // Navigation keys (rxvt)\n \"[7~\": \"home\",\n \"[8~\": \"end\",\n\n // Arrow keys with shift (rxvt lowercase)\n \"[a\": \"up\",\n \"[b\": \"down\",\n \"[c\": \"right\",\n \"[d\": \"left\",\n \"[e\": \"clear\",\n\n // Navigation keys with shift (rxvt $)\n \"[2$\": \"insert\",\n \"[3$\": \"delete\",\n \"[5$\": \"pageup\",\n \"[6$\": \"pagedown\",\n \"[7$\": \"home\",\n \"[8$\": \"end\",\n\n // Arrow keys with ctrl (rxvt O lowercase)\n Oa: \"up\",\n Ob: \"down\",\n Oc: \"right\",\n Od: \"left\",\n Oe: \"clear\",\n\n // Navigation keys with ctrl (rxvt ^)\n \"[2^\": \"insert\",\n \"[3^\": \"delete\",\n \"[5^\": \"pageup\",\n \"[6^\": \"pagedown\",\n \"[7^\": \"home\",\n \"[8^\": \"end\",\n\n // Shift+Tab\n \"[Z\": \"tab\",\n}\n\n// ============================================================================\n// Key Parsing Constants\n// ============================================================================\n\nconst NON_ALPHANUMERIC_KEYS = [\n ...Object.values(CODE_TO_KEY),\n \"backspace\",\n \"tab\",\n \"delete\",\n // Note: 'return', 'enter', 'escape', and 'space' are intentionally NOT included.\n // Users may need the raw character as input ('\\r' for return, '\\x1b' for escape).\n // Use key.return / key.escape boolean flags to detect these keys.\n]\n\nconst SHIFT_CODES = new Set([\"[a\", \"[b\", \"[c\", \"[d\", \"[e\", \"[2$\", \"[3$\", \"[5$\", \"[6$\", \"[7$\", \"[8$\", \"[Z\"])\n\nconst CTRL_CODES = new Set([\"Oa\", \"Ob\", \"Oc\", \"Od\", \"Oe\", \"[2^\", \"[3^\", \"[5^\", \"[6^\", \"[7^\", \"[8^\"])\n\nconst META_KEY_CODE_RE = /^(?:\\x1b)([a-zA-Z0-9])$/\nconst FN_KEY_RE = /^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/\n\n/**\n * US QWERTY shifted punctuation → base key map.\n *\n * Legacy terminals send the result character (e.g. `?`) without a shift modifier flag.\n * Kitty protocol sends the base codepoint + shift modifier. This map lets us normalize\n * legacy input so that keybindings like `shift-/` match on both protocols.\n */\nconst SHIFTED_PUNCT_MAP: Record<string, string> = {\n \"!\": \"1\",\n \"@\": \"2\",\n \"#\": \"3\",\n $: \"4\",\n \"%\": \"5\",\n \"^\": \"6\",\n \"&\": \"7\",\n \"*\": \"8\",\n \"(\": \"9\",\n \")\": \"0\",\n _: \"-\",\n \"+\": \"=\",\n \"~\": \"`\",\n \"{\": \"[\",\n \"}\": \"]\",\n \"|\": \"\\\\\",\n \":\": \";\",\n '\"': \"'\",\n \"<\": \",\",\n \">\": \".\",\n \"?\": \"/\",\n}\n\n/** Reverse of SHIFTED_PUNCT_MAP: base key → shifted character (US QWERTY) */\nconst BASE_TO_SHIFTED_PUNCT: Record<string, string> = Object.fromEntries(\n Object.entries(SHIFTED_PUNCT_MAP).map(([shifted, base]) => [base, shifted]),\n)\n\n// ============================================================================\n// Kitty Keyboard Protocol\n// ============================================================================\n\n/**\n * Matches Kitty keyboard protocol sequences:\n * CSI codepoint[:shifted[:base]][;modifiers[:event_type][;text_codepoints]] u\n *\n * Groups:\n * 1: codepoint\n * 2: shifted_codepoint (optional)\n * 3: base_layout_key (optional)\n * 4: modifiers (optional, defaults to 1)\n * 5: event_type (optional)\n * 6: text_codepoints (colon-separated, optional — requires REPORT_TEXT flag)\n */\nconst KITTY_RE = /^\\x1b\\[(\\d+)(?::(\\d+))?(?::(\\d+))?(?:;(\\d+)(?::(\\d+))?(?:;([\\d:]+))?)?u$/\n\n/** Emit the missing-shifted-codepoint warning only once per process. */\nlet _shiftWarningEmitted = false\n\n/** Reset warning state (for testing). */\nexport function _resetShiftWarning(): void {\n _shiftWarningEmitted = false\n}\n\n/** Matches xterm modifyOtherKeys format: CSI 27 ; modifier ; keycode ~ */\nconst MODIFY_OTHER_KEYS_RE = /^\\x1b\\[27;(\\d+);(\\d+)~$/\n\n/**\n * Kitty-enhanced special key sequences:\n * CSI number ; modifiers : eventType {letter|~}\n * These are legacy CSI sequences enhanced with the :eventType field.\n * Examples: \\x1b[1;1:1A (up arrow press), \\x1b[3;1:3~ (delete release)\n */\nconst KITTY_SPECIAL_RE = /^\\x1b\\[(\\d+);(\\d+):(\\d+)([A-Za-z~])$/\n\n/** Letter-terminated special key names (CSI 1 ; mods letter) */\nconst KITTY_SPECIAL_LETTER_KEYS: Record<string, string> = {\n A: \"up\",\n B: \"down\",\n C: \"right\",\n D: \"left\",\n E: \"clear\",\n F: \"end\",\n H: \"home\",\n P: \"f1\",\n Q: \"f2\",\n R: \"f3\",\n S: \"f4\",\n}\n\n/** Number-terminated special key names (CSI number ; mods ~) */\nconst KITTY_SPECIAL_NUMBER_KEYS: Record<number, string> = {\n 2: \"insert\",\n 3: \"delete\",\n 5: \"pageup\",\n 6: \"pagedown\",\n 7: \"home\",\n 8: \"end\",\n 11: \"f1\",\n 12: \"f2\",\n 13: \"f3\",\n 14: \"f4\",\n 15: \"f5\",\n 17: \"f6\",\n 18: \"f7\",\n 19: \"f8\",\n 20: \"f9\",\n 21: \"f10\",\n 23: \"f11\",\n 24: \"f12\",\n}\n\n/** Valid Unicode codepoint range, excluding surrogates */\nfunction isValidCodepoint(cp: number): boolean {\n return cp >= 0 && cp <= 0x10_ffff && !(cp >= 0xd8_00 && cp <= 0xdf_ff)\n}\n\n/** Safely convert codepoint to string, returning '?' for invalid values */\nfunction safeFromCodePoint(cp: number): string {\n return isValidCodepoint(cp) ? String.fromCodePoint(cp) : \"?\"\n}\n\n/** Maps Kitty codepoints to key names for non-printable/functional keys */\nconst KITTY_CODEPOINT_MAP: Record<number, string> = {\n // Standard control keys\n // Note: Kitty protocol sends Backspace as codepoint 127 (CSI 127 u).\n // Codepoint 8 (BS) is kept as a fallback. Delete uses legacy CSI 3 ~ format\n // (handled by KITTY_SPECIAL_NUMBER_KEYS), not the CSI u format.\n 8: \"backspace\",\n 9: \"tab\",\n 13: \"return\",\n 27: \"escape\",\n 127: \"backspace\",\n // Function keys F13-F35 (F1-F12 use legacy CSI sequences in Kitty mode)\n 57376: \"f13\",\n 57377: \"f14\",\n 57378: \"f15\",\n 57379: \"f16\",\n 57380: \"f17\",\n 57381: \"f18\",\n 57382: \"f19\",\n 57383: \"f20\",\n 57384: \"f21\",\n 57385: \"f22\",\n 57386: \"f23\",\n 57387: \"f24\",\n 57388: \"f25\",\n 57389: \"f26\",\n 57390: \"f27\",\n 57391: \"f28\",\n 57392: \"f29\",\n 57393: \"f30\",\n 57394: \"f31\",\n 57395: \"f32\",\n 57396: \"f33\",\n 57397: \"f34\",\n 57398: \"f35\",\n // Lock/misc keys\n 57358: \"capslock\",\n 57359: \"scrolllock\",\n 57360: \"numlock\",\n 57361: \"printscreen\",\n 57362: \"pause\",\n 57363: \"menu\",\n // Keypad keys\n 57399: \"kp0\",\n 57400: \"kp1\",\n 57401: \"kp2\",\n 57402: \"kp3\",\n 57403: \"kp4\",\n 57404: \"kp5\",\n 57405: \"kp6\",\n 57406: \"kp7\",\n 57407: \"kp8\",\n 57408: \"kp9\",\n 57409: \"kpdecimal\",\n 57410: \"kpdivide\",\n 57411: \"kpmultiply\",\n 57412: \"kpsubtract\",\n 57413: \"kpadd\",\n 57414: \"kpenter\",\n 57415: \"kpequal\",\n 57416: \"kpseparator\",\n 57417: \"kpleft\",\n 57418: \"kpright\",\n 57419: \"kpup\",\n 57420: \"kpdown\",\n 57421: \"kppageup\",\n 57422: \"kppagedown\",\n 57423: \"kphome\",\n 57424: \"kpend\",\n 57425: \"kpinsert\",\n 57426: \"kpdelete\",\n 57427: \"kpbegin\",\n // Media keys\n 57428: \"mediaplay\",\n 57429: \"mediapause\",\n 57430: \"mediaplaypause\",\n 57431: \"mediareverse\",\n 57432: \"mediastop\",\n 57433: \"mediafastforward\",\n 57434: \"mediarewind\",\n 57435: \"mediatracknext\",\n 57436: \"mediatrackprevious\",\n 57437: \"mediarecord\",\n 57438: \"lowervolume\",\n 57439: \"raisevolume\",\n 57440: \"mutevolume\",\n // Modifier-only keys\n 57441: \"leftshift\",\n 57442: \"leftcontrol\",\n 57443: \"leftalt\",\n 57444: \"leftsuper\",\n 57445: \"lefthyper\",\n 57446: \"leftmeta\",\n 57447: \"rightshift\",\n 57448: \"rightcontrol\",\n 57449: \"rightalt\",\n 57450: \"rightsuper\",\n 57451: \"righthyper\",\n 57452: \"rightmeta\",\n 57453: \"isoLevel3Shift\",\n 57454: \"isoLevel5Shift\",\n}\n\n/** Key names that represent modifier-only events (Kitty codepoints 57441–57454). */\nconst MODIFIER_ONLY_NAMES = new Set([\n \"leftshift\",\n \"leftcontrol\",\n \"leftalt\",\n \"leftsuper\",\n \"lefthyper\",\n \"leftmeta\",\n \"rightshift\",\n \"rightcontrol\",\n \"rightalt\",\n \"rightsuper\",\n \"righthyper\",\n \"rightmeta\",\n \"isoLevel3Shift\",\n \"isoLevel5Shift\",\n])\n\n/** Lookup a Kitty codepoint to a key name */\nfunction kittyCodepointToName(cp: number): string | undefined {\n return KITTY_CODEPOINT_MAP[cp]\n}\n\n/** Convert numeric Kitty event type (1/2/3) to string. */\nfunction numericToEventType(n: number): \"press\" | \"repeat\" | \"release\" | undefined {\n if (n === 1) return \"press\"\n if (n === 2) return \"repeat\"\n if (n === 3) return \"release\"\n return undefined\n}\n\n// ============================================================================\n// Key Parsing\n// ============================================================================\n\nexport interface ParsedKeypress {\n name: string\n ctrl: boolean\n meta: boolean\n shift: boolean\n option: boolean\n super: boolean\n hyper: boolean\n /** Kitty event type. Only set with Kitty flag 2 (report events). */\n eventType?: \"press\" | \"repeat\" | \"release\"\n /** The character when Shift is held. From Kitty shifted_codepoint. */\n shiftedKey?: string\n /** The key on a standard US layout (for non-Latin keyboards). From Kitty base_layout_key. */\n baseLayoutKey?: string\n /** CapsLock is active. Kitty modifier bit 6. */\n capsLock?: boolean\n /** NumLock is active. Kitty modifier bit 7. */\n numLock?: boolean\n /** Decoded text from Kitty REPORT_TEXT mode. */\n associatedText?: string\n sequence: string\n /** Raw input string, identical to sequence for most keys. */\n raw?: string\n code?: string\n /** Whether this key was parsed from the Kitty keyboard protocol. */\n isKittyProtocol?: boolean\n /**\n * Whether this key represents printable text input.\n * When false, the key is a control/function/modifier key that should not\n * produce text input (e.g., arrows, function keys, capslock, media keys).\n * Only set by the kitty protocol parser.\n */\n isPrintable?: boolean\n /**\n * Text associated with the key.\n * For printable kitty keys, defaults to the character from the codepoint.\n * When REPORT_TEXT flag is active, contains the decoded text-as-codepoints.\n */\n text?: string\n}\n\n/**\n * Parse a raw input sequence into a structured keypress object.\n * Accepts string or Buffer (Buffer support for stdin compatibility).\n */\nexport function parseKeypress(s: string | Buffer): ParsedKeypress {\n let input: string\n\n if (typeof Buffer !== \"undefined\" && Buffer.isBuffer(s)) {\n if (s[0] !== undefined && s[0]! > 127 && s[1] === undefined) {\n const buf = Buffer.from(s)\n buf[0]! -= 128\n input = `\\x1b${buf.toString()}`\n } else {\n input = s.toString()\n }\n } else {\n input = typeof s === \"string\" ? (s ?? \"\") : String(s)\n }\n\n const key: ParsedKeypress = {\n name: \"\",\n ctrl: false,\n meta: false,\n shift: false,\n option: false,\n super: false,\n hyper: false,\n sequence: input,\n }\n\n if (input === \"\\r\") {\n key.name = \"return\"\n } else if (input === \"\\n\") {\n // In legacy terminal mode, Enter sends \\r. The only way to get \\n is\n // Ctrl+Enter (or Ctrl+J, same byte). Treat it as ctrl+return so\n // TextArea's submitKey=\"ctrl+enter\" works without Kitty protocol.\n key.name = \"return\"\n key.ctrl = true\n } else if (input === \"\\t\") {\n key.name = \"tab\"\n } else if (input === \"\\b\" || input === \"\\x1b\\b\") {\n key.name = \"backspace\"\n key.meta = input.charAt(0) === \"\\x1b\"\n } else if (input === \"\\x7f\" || input === \"\\x1b\\x7f\") {\n // Modern terminals send \\x7f for Backspace key (not \\x08).\n // The actual Delete key sends \\x1b[3~ (handled by CODE_TO_KEY).\n key.name = \"backspace\"\n key.meta = input.charAt(0) === \"\\x1b\"\n } else if (input === \"\\x1b\\r\") {\n // Meta + Return (Alt+Enter / Option+Return on macOS)\n key.name = \"return\"\n key.meta = true\n } else if (input === \"\\x1b\" || input === \"\\x1b\\x1b\") {\n key.name = \"escape\"\n key.meta = input.length === 2\n } else if (input === \" \" || input === \"\\x1b \") {\n key.name = \"space\"\n key.meta = input.length === 2\n } else if (input.length === 1 && input <= \"\\x1a\") {\n // ctrl+letter\n key.name = String.fromCharCode(input.charCodeAt(0) + \"a\".charCodeAt(0) - 1)\n key.ctrl = true\n } else if (input === \"\\x1f\") {\n // Ctrl+/ sends 0x1F (Unit Separator) in terminals\n key.name = \"/\"\n key.ctrl = true\n } else if (input.length === 1 && input >= \"0\" && input <= \"9\") {\n key.name = \"number\"\n } else if (input.length === 1 && input >= \"a\" && input <= \"z\") {\n key.name = input\n } else if (input.length === 1 && input >= \"A\" && input <= \"Z\") {\n key.name = input.toLowerCase()\n key.shift = true\n } else {\n // Try Kitty keyboard protocol first (CSI codepoint ; modifiers u)\n // Must be checked before FN_KEY_RE because 'u' matches [a-zA-Z]\n const kittyParts = KITTY_RE.exec(input)\n // Kitty-enhanced special keys: CSI number ; modifiers : eventType {letter|~}\n const kittySpecialParts = !kittyParts && KITTY_SPECIAL_RE.exec(input)\n // xterm modifyOtherKeys format: CSI 27 ; modifier ; keycode ~\n // Sent by Ghostty, xterm, and others for modified keys like Ctrl+Enter\n const modifyOtherKeysParts = !kittyParts && !kittySpecialParts && MODIFY_OTHER_KEYS_RE.exec(input)\n\n if (kittySpecialParts) {\n // Kitty-enhanced special key: CSI number ; modifiers : eventType {letter|~}\n const number = Number(kittySpecialParts[1])\n const modifier = Math.max(0, Number(kittySpecialParts[2]) - 1)\n const eventType = Number(kittySpecialParts[3])\n const terminator = kittySpecialParts[4]!\n\n const name = terminator === \"~\" ? KITTY_SPECIAL_NUMBER_KEYS[number] : KITTY_SPECIAL_LETTER_KEYS[terminator]\n\n key.isKittyProtocol = true\n key.isPrintable = false\n key.raw = input\n key.name = name ?? \"\"\n\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2) // alt\n key.ctrl = !!(modifier & 4)\n key.super = !!(modifier & 8)\n key.hyper = !!(modifier & 16)\n key.meta = !!(modifier & 32)\n key.capsLock = !!(modifier & 64)\n key.numLock = !!(modifier & 128)\n\n const eventTypeStr = numericToEventType(eventType)\n if (eventTypeStr) {\n key.eventType = eventTypeStr\n }\n } else if (kittyParts || modifyOtherKeysParts) {\n let codepoint: number\n let modifier: number\n if (kittyParts) {\n codepoint = Number(kittyParts[1])\n modifier = Math.max(0, Number(kittyParts[4] || 1) - 1)\n } else {\n const mokParts = modifyOtherKeysParts as RegExpExecArray\n modifier = Math.max(0, Number(mokParts[1]) - 1)\n codepoint = Number(mokParts[2])\n }\n\n // Mark as kitty protocol\n if (kittyParts) {\n key.isKittyProtocol = true\n key.raw = input\n\n // Handle invalid codepoints (above U+10FFFF or surrogates)\n if (!isValidCodepoint(codepoint)) {\n key.name = \"\"\n key.isPrintable = false\n return key\n }\n }\n\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2) // alt (in kitty protocol, bit 2 = alt/option)\n key.ctrl = !!(modifier & 4)\n key.super = !!(modifier & 8) // super (Cmd on macOS)\n key.hyper = !!(modifier & 16) // hyper\n key.meta = !!(modifier & 32) // meta (kitty distinguishes meta from alt)\n key.capsLock = !!(modifier & 64)\n key.numLock = !!(modifier & 128)\n\n // Event type from Kitty protocol (group 5): 1=press, 2=repeat, 3=release\n if (kittyParts?.[5]) {\n const et = numericToEventType(Number(kittyParts[5]))\n if (et) key.eventType = et\n }\n\n // Shifted codepoint (group 2)\n if (kittyParts?.[2]) {\n key.shiftedKey = String.fromCodePoint(Number(kittyParts[2]))\n }\n\n // Base layout key (group 3)\n if (kittyParts?.[3]) {\n key.baseLayoutKey = String.fromCodePoint(Number(kittyParts[3]))\n }\n\n // Text-as-codepoints (group 6) — requires REPORT_TEXT flag\n let textFromProtocol: string | undefined\n if (kittyParts?.[6]) {\n textFromProtocol = kittyParts[6]\n .split(\":\")\n .map((cp) => safeFromCodePoint(Number(cp)))\n .join(\"\")\n key.associatedText = textFromProtocol\n key.text = textFromProtocol\n }\n\n // Map codepoint to key name and determine printability\n if (codepoint === 32) {\n key.name = \"space\"\n key.isPrintable = true\n } else if (codepoint === 13) {\n key.name = \"return\"\n key.isPrintable = true\n } else {\n const mapped = kittyCodepointToName(codepoint)\n if (mapped) {\n key.name = mapped\n key.isPrintable = false\n } else if (codepoint >= 1 && codepoint <= 26) {\n // Ctrl+letter comes as codepoint 1-26\n key.name = String.fromCodePoint(codepoint + 96) // 'a' is 97\n key.isPrintable = false\n } else if (codepoint >= 32 && codepoint <= 126) {\n // Printable ASCII\n key.name = String.fromCharCode(codepoint).toLowerCase()\n if (codepoint >= 65 && codepoint <= 90) {\n key.shift = true\n key.name = String.fromCharCode(codepoint + 32)\n }\n key.isPrintable = true\n } else if (isValidCodepoint(codepoint)) {\n key.name = safeFromCodePoint(codepoint)\n key.isPrintable = true\n } else {\n key.name = \"\"\n key.isPrintable = false\n }\n }\n\n // Default text to the character from the codepoint when not explicitly\n // provided by the protocol, so keys like space and return produce their\n // expected text input (' ' and '\\r' respectively).\n // With REPORT_ALL_KEYS, Shift+key sends base codepoint + shift modifier\n // plus shifted_codepoint. Use it for correct text (Shift+1 → '!').\n if (kittyParts && key.isPrintable && !textFromProtocol) {\n if (key.shift && key.shiftedKey) {\n key.text = key.shiftedKey // Shift+1→'!', Shift+;→':'\n } else if (key.shift && codepoint >= 97 && codepoint <= 122) {\n key.text = String.fromCharCode(codepoint - 32) // 'a'→'A'\n } else if (key.shift && codepoint >= 65 && codepoint <= 90) {\n key.text = String.fromCharCode(codepoint) // Already uppercase — 'A' stays 'A'\n } else if (key.shift && key.isPrintable && !key.shiftedKey && codepoint >= 32 && codepoint <= 126) {\n // Kitty protocol with Shift held on a non-letter key but no shifted_codepoint.\n // The terminal is using DISAMBIGUATE flag only (missing REPORT_ALL_KEYS flag 8).\n //\n // What goes wrong: key.text will be the base character ('1' instead of '!',\n // ';' instead of ':', '=' instead of '+', etc.). This means:\n // - Hotkey bindings like \"!\" won't match when the user types Shift+1\n // - TextInput will insert '1' instead of '!' when the user types Shift+1\n // - Any shifted punctuation produces the wrong character\n //\n // Fix: enable REPORT_ALL_KEYS when requesting the Kitty keyboard protocol.\n // Silvery defaults to this (flag 11 = DISAMBIGUATE|REPORT_EVENTS|REPORT_ALL_KEYS).\n // If you see this warning, your app or framework is overriding the default flags.\n //\n // See: https://terminfo.dev/extensions/kitty-keyboard-report-all-keys\n // https://sw.kovidgoyal.net/kitty/keyboard-protocol/#progressive-enhancement\n // Best-effort recovery: use US QWERTY shifted punct map as fallback.\n // Not perfect for non-US layouts, but better than inserting '1' for '#'.\n const baseChar = safeFromCodePoint(codepoint)\n const shifted = BASE_TO_SHIFTED_PUNCT[baseChar]\n key.text = shifted ?? baseChar\n } else {\n key.text = safeFromCodePoint(codepoint)\n }\n }\n } else if (KITTY_RE.test(input)) {\n // Matched kitty pattern but was rejected (e.g., invalid codepoint in the\n // parseKittyKeypress path above returned early). Return safe empty keypress.\n key.isKittyProtocol = true\n key.isPrintable = false\n key.raw = input\n return key\n } else {\n let parts = META_KEY_CODE_RE.exec(input)\n if (parts) {\n key.meta = true\n key.shift = /^[A-Z]$/.test(parts[1] ?? \"\")\n } else {\n parts = FN_KEY_RE.exec(input)\n if (parts) {\n const segs = input.split(\"\")\n if (segs[0] === \"\\u001b\" && segs[1] === \"\\u001b\") {\n key.option = true\n }\n\n // Reassemble key code\n const code = [parts[1], parts[2], parts[4], parts[6]].filter(Boolean).join(\"\")\n const modifier = (Number(parts[3] || parts[5] || 1) - 1) as number\n\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 2) // alt\n key.super = !!(modifier & 8) // super (Cmd on macOS)\n key.hyper = !!(modifier & 16) // hyper\n key.shift = !!(modifier & 1)\n key.capsLock = !!(modifier & 64)\n key.numLock = !!(modifier & 128)\n key.code = code\n key.name = CODE_TO_KEY[code] ?? \"\"\n key.shift = SHIFT_CODES.has(code) || key.shift\n key.ctrl = CTRL_CODES.has(code) || key.ctrl\n }\n }\n }\n }\n\n return key\n}\n\n/**\n * Parse raw terminal input into a Key object and cleaned input string.\n *\n * @param rawInput Raw terminal input (string or Buffer)\n * @returns Tuple of [cleanedInput, Key]\n */\nexport function parseKey(rawInput: string | Buffer): [string, Key] {\n const keypress = parseKeypress(rawInput)\n\n const key: Key = {\n upArrow: keypress.name === \"up\",\n downArrow: keypress.name === \"down\",\n leftArrow: keypress.name === \"left\",\n rightArrow: keypress.name === \"right\",\n pageDown: keypress.name === \"pagedown\",\n pageUp: keypress.name === \"pageup\",\n home: keypress.name === \"home\",\n end: keypress.name === \"end\",\n return: keypress.name === \"return\",\n escape: keypress.name === \"escape\",\n ctrl: keypress.ctrl,\n shift: keypress.shift,\n tab: keypress.name === \"tab\",\n backspace: keypress.name === \"backspace\",\n delete: keypress.name === \"delete\",\n meta: keypress.name !== \"escape\" && (keypress.meta || keypress.option),\n super: keypress.super,\n hyper: keypress.hyper,\n capsLock: keypress.capsLock ?? false,\n numLock: keypress.numLock ?? false,\n eventType: keypress.eventType,\n }\n\n let input: string\n\n if (keypress.isKittyProtocol) {\n // Kitty protocol: use base key name for keybinding resolution.\n // key.text (set by parseKeypress) has the shifted character for text insertion,\n // but input must be the base key so keybindings like \"shift-/\" match correctly.\n //\n // Exception: shifted letters get uppercase input to match legacy terminal behavior\n // (legacy terminals send \"G\" for Shift+g). This matters because many components\n // check `input === \"G\"` directly. The km command system normalizes via keyToString\n // so uppercase vs lowercase doesn't affect keybinding resolution for letters.\n if (keypress.isPrintable) {\n if (keypress.shift && keypress.name.length === 1 && keypress.name >= \"a\" && keypress.name <= \"z\") {\n input = keypress.name.toUpperCase()\n } else if (keypress.name === \"space\") {\n input = \" \"\n } else if (keypress.name === \"return\") {\n input = \"\\r\"\n } else {\n input = keypress.name\n }\n } else if (keypress.ctrl && keypress.name.length === 1) {\n // Ctrl+letter via codepoint 1-26: provide the letter name so handlers\n // (e.g., exitOnCtrlC checking input === 'c' && key.ctrl) still work.\n input = keypress.name\n } else {\n input = \"\"\n }\n } else {\n input = keypress.ctrl ? keypress.name : keypress.sequence\n\n if (NON_ALPHANUMERIC_KEYS.includes(keypress.name)) {\n input = \"\"\n }\n\n // Strip meta prefix if remaining\n if (input.startsWith(\"\\u001b\")) {\n input = input.slice(1)\n }\n\n // Filter out escape sequence fragments that leak through\n // e.g., \"[2~\" from Insert key, \"[A\" from arrows when not fully parsed\n // Single \"[\" and \"]\" are allowed — they're valid key bindings\n if ((input.startsWith(\"[\") && input.length > 1) || (input.startsWith(\"O\") && input.length > 1)) {\n // For Kitty-encoded keys (Super/Hyper modifiers), preserve the key name\n // since the raw sequence was CSI codepoint;modifiers u\n if (keypress.super || keypress.hyper) {\n input = keypress.name\n } else {\n input = \"\"\n }\n }\n }\n\n // Preserve the actual typed character for text insertion.\n // For Kitty: keypress.text has the shifted char ('?' for Shift+/), input has the base key ('/').\n // For legacy: input has the shifted char ('#' for Shift+3), which gets normalized below.\n if (keypress.isKittyProtocol) {\n key.text = keypress.text ?? input\n } else if (input.length >= 1) {\n key.text = input\n }\n\n // Legacy terminals: normalize shifted punctuation → base key + shift\n // Kitty protocol already provides base codepoint + shift modifier\n if (!keypress.isKittyProtocol && input.length === 1 && !key.shift) {\n const base = SHIFTED_PUNCT_MAP[input]\n if (base) {\n input = base\n key.shift = true\n }\n }\n\n // Detect shift for uppercase letters\n if (input.length === 1 && typeof input[0] === \"string\" && /[A-Z]/.test(input[0])) {\n key.shift = true\n }\n\n // Flag modifier-only events (Kitty protocol sends Shift/Ctrl/Alt/Super/Hyper/Meta as keys)\n if (input === \"\" && MODIFIER_ONLY_NAMES.has(keypress.name)) {\n key.isModifierOnly = true\n }\n\n return [input, key]\n}\n\n/**\n * Create an empty Key object (all fields false).\n */\nexport function emptyKey(): Key {\n return {\n upArrow: false,\n downArrow: false,\n leftArrow: false,\n rightArrow: false,\n pageDown: false,\n pageUp: false,\n home: false,\n end: false,\n return: false,\n escape: false,\n ctrl: false,\n shift: false,\n tab: false,\n backspace: false,\n delete: false,\n meta: false,\n super: false,\n hyper: false,\n capsLock: false,\n numLock: false,\n }\n}\n\n// ============================================================================\n// Key Utility Functions\n// ============================================================================\n\n/**\n * Convert a Key object to a named key string.\n *\n * Returns the Playwright-compatible name for special keys (ArrowUp, Enter, etc.)\n * or \"\" if no special key is pressed.\n */\nexport function keyToName(key: Key): string {\n if (key.upArrow) return \"ArrowUp\"\n if (key.downArrow) return \"ArrowDown\"\n if (key.leftArrow) return \"ArrowLeft\"\n if (key.rightArrow) return \"ArrowRight\"\n if (key.return) return \"Enter\"\n if (key.escape) return \"Escape\"\n if (key.backspace) return \"Backspace\"\n if (key.delete) return \"Delete\"\n if (key.tab) return \"Tab\"\n if (key.pageUp) return \"PageUp\"\n if (key.pageDown) return \"PageDown\"\n if (key.home) return \"Home\"\n if (key.end) return \"End\"\n return \"\"\n}\n\n/**\n * Extract modifier flags from a Key object.\n * `alt` is always false (terminals cannot distinguish alt from meta).\n */\nexport function keyToModifiers(key: Key): {\n ctrl: boolean\n meta: boolean\n shift: boolean\n alt: boolean\n super: boolean\n hyper: boolean\n} {\n return {\n ctrl: !!key.ctrl,\n meta: !!key.meta,\n shift: !!key.shift,\n alt: false,\n super: !!key.super,\n hyper: !!key.hyper,\n }\n}\n\n/**\n * Parse a hotkey string into base key and modifiers.\n *\n * Supports Playwright-style (\"Control+c\", \"Shift+ArrowUp\") and\n * lowercase aliases (\"ctrl+c\", \"shift+tab\", \"cmd+a\").\n *\n * @example\n * ```tsx\n * parseHotkey('j') // { key: 'j', ctrl: false, meta: false, shift: false, alt: false }\n * parseHotkey('Control+c') // { key: 'c', ctrl: true, ... }\n * parseHotkey('Shift+ArrowUp') // { key: 'ArrowUp', shift: true, ... }\n * parseHotkey('⌘j') // { key: 'j', super: true, ... } (macOS symbol prefix)\n * parseHotkey('⌃⇧a') // { key: 'a', ctrl: true, shift: true, ... }\n * ```\n */\nexport function parseHotkey(keyStr: string): ParsedHotkey {\n // Support macOS symbol prefix format: ⌘J, ⌃⇧J, ✦⌘J\n let remaining = keyStr\n const symbolMods = new Set<string>()\n for (const char of remaining) {\n if (MODIFIER_SYMBOLS.has(char)) {\n symbolMods.add(char)\n } else {\n break\n }\n }\n\n if (symbolMods.size > 0) {\n remaining = remaining.slice(symbolMods.size)\n if (remaining.startsWith(\"+\")) remaining = remaining.slice(1)\n }\n\n const parts = remaining.split(\"+\")\n const key = parts.pop() || keyStr\n const modifiers = new Set([...parts.map((p) => p.toLowerCase()), ...symbolMods])\n\n return {\n key,\n ctrl: modifiers.has(\"control\") || modifiers.has(\"ctrl\") || modifiers.has(\"⌃\"),\n meta:\n modifiers.has(\"meta\") ||\n modifiers.has(\"alt\") ||\n modifiers.has(\"opt\") ||\n modifiers.has(\"option\") ||\n modifiers.has(\"⌥\"),\n shift: modifiers.has(\"shift\") || modifiers.has(\"⇧\"),\n alt: false, // alt and meta are indistinguishable in terminals; use meta\n super: modifiers.has(\"super\") || modifiers.has(\"cmd\") || modifiers.has(\"command\") || modifiers.has(\"⌘\"),\n hyper: modifiers.has(\"hyper\") || modifiers.has(\"✦\"),\n }\n}\n\n/**\n * Match a parsed hotkey against a Key object and input string.\n *\n * @param hotkey Parsed hotkey to match\n * @param key Key object from input event\n * @param input Optional input string (for matching character keys)\n * @returns true if the hotkey matches the key event\n */\nexport function matchHotkey(hotkey: ParsedHotkey, key: Key, input?: string): boolean {\n // Check modifiers\n if (!!hotkey.ctrl !== !!key.ctrl) return false\n if (!!hotkey.meta !== !!key.meta) return false\n if (!!hotkey.super !== !!key.super) return false\n if (!!hotkey.hyper !== !!key.hyper) return false\n if (!!hotkey.alt !== false) return false // terminals can't distinguish alt from meta\n\n // For single-character hotkeys without explicit Shift (e.g., \"!\", \"J\", \"@\"),\n // skip the shift check — match against the input string directly.\n // The character itself encodes shift intent regardless of keyboard layout.\n // This is layout-independent: French \"!\" (unshifted) and US \"!\" (Shift+1) both match.\n const isCharacterHotkey = hotkey.key.length === 1 && !hotkey.shift\n if (!isCharacterHotkey && !!hotkey.shift !== !!key.shift) return false\n\n // Check key name against Key boolean fields\n const name = keyToName(key)\n if (name && name === hotkey.key) return true\n\n // Check against input string (base key for keybinding resolution)\n if (input !== undefined && input === hotkey.key) return true\n\n // Check against key.text (actual typed character for text insertion).\n // Kitty protocol: input is the base key (\"1\") but key.text is the shifted char (\"!\").\n // Character hotkeys like \"!\" should match against key.text so they work across protocols.\n if (key.text !== undefined && key.text === hotkey.key) return true\n\n return false\n}\n\n// ============================================================================\n// Kitty Protocol Output\n// ============================================================================\n\n/** Reverse map: key name → Kitty codepoint */\nconst NAME_TO_KITTY_CODEPOINT: Record<string, number> = {}\nfor (const [cp, name] of Object.entries(KITTY_CODEPOINT_MAP)) {\n NAME_TO_KITTY_CODEPOINT[name] = Number(cp)\n}\n\n/**\n * Implicit modifier bits for modifier-only keys.\n * When a modifier key is pressed by itself, real terminals include the\n * corresponding modifier bit in the CSI u sequence. E.g., pressing Cmd alone\n * sends `\\x1b[57444;9u` (codepoint 57444, modifier 9 = super(8) + 1).\n * This map ensures keyToKittyAnsi produces the same encoding.\n */\nconst MODIFIER_KEY_IMPLICIT_BITS: Record<string, number> = {\n leftshift: 1,\n rightshift: 1,\n leftcontrol: 4,\n rightcontrol: 4,\n leftalt: 2,\n rightalt: 2,\n leftsuper: 8,\n rightsuper: 8,\n lefthyper: 16,\n righthyper: 16,\n leftmeta: 32,\n rightmeta: 32,\n}\n\n/** Playwright-style key name → CSI u codepoint for keys using CSI u format */\nconst PLAYWRIGHT_TO_KITTY_CSI_U: Record<string, number> = {\n Enter: 13,\n Escape: 27,\n Backspace: 127,\n Tab: 9,\n Space: 32,\n}\n\n/** Playwright-style key name → Kitty enhanced special key suffix (letter-terminated) */\nconst PLAYWRIGHT_TO_KITTY_SPECIAL_LETTER: Record<string, string> = {\n ArrowUp: \"A\",\n ArrowDown: \"B\",\n ArrowRight: \"C\",\n ArrowLeft: \"D\",\n Home: \"H\",\n End: \"F\",\n F1: \"P\",\n F2: \"Q\",\n F3: \"R\",\n F4: \"S\",\n}\n\n/** Playwright-style key name → Kitty enhanced special key number (tilde-terminated) */\nconst PLAYWRIGHT_TO_KITTY_SPECIAL_TILDE: Record<string, number> = {\n Insert: 2,\n Delete: 3,\n PageUp: 5,\n PageDown: 6,\n F5: 15,\n F6: 17,\n F7: 18,\n F8: 19,\n F9: 20,\n F10: 21,\n F11: 23,\n F12: 24,\n}\n\n/**\n * Convert a Playwright-style key string to a Kitty keyboard protocol ANSI sequence.\n *\n * Uses the appropriate Kitty format for each key type:\n * - Regular keys: CSI codepoint ; modifiers u\n * - Arrow/nav keys: CSI 1 ; modifiers letter (enhanced special key format)\n * - Tilde keys: CSI number ; modifiers ~ (enhanced special key format)\n *\n * @example\n * ```tsx\n * keyToKittyAnsi('a') // '\\x1b[97u' (no modifiers → bare)\n * keyToKittyAnsi('Enter') // '\\x1b[13u'\n * keyToKittyAnsi('Control+c') // '\\x1b[99;5u' (ctrl = 4, modifier = 5)\n * keyToKittyAnsi('Shift+Enter') // '\\x1b[13;2u' (shift = 1, modifier = 2)\n * keyToKittyAnsi('ArrowUp') // '\\x1b[1;1A' (enhanced special key)\n * ```\n */\nexport function keyToKittyAnsi(key: string): string {\n const parts = key.split(\"+\")\n const mainKey = parts.pop()!\n const modifiers = parts.map(normalizeModifier)\n\n // Calculate modifier bitfield\n let mod = 0\n if (modifiers.includes(\"Shift\")) mod |= 1\n if (modifiers.includes(\"Alt\") || modifiers.includes(\"Meta\")) mod |= 2\n if (modifiers.includes(\"Control\")) mod |= 4\n if (modifiers.includes(\"Super\")) mod |= 8\n if (modifiers.includes(\"Hyper\")) mod |= 16\n\n // Check for letter-terminated special keys (arrow keys, home, end, F1-F4)\n const specialLetter = PLAYWRIGHT_TO_KITTY_SPECIAL_LETTER[mainKey]\n if (specialLetter) {\n return `\\x1b[1;${mod + 1}${specialLetter}`\n }\n\n // Check for tilde-terminated special keys (insert, delete, pageup, F5-F12)\n const specialNumber = PLAYWRIGHT_TO_KITTY_SPECIAL_TILDE[mainKey]\n if (specialNumber !== undefined) {\n return `\\x1b[${specialNumber};${mod + 1}~`\n }\n\n // Check CSI u format keys\n const csiUCodepoint = PLAYWRIGHT_TO_KITTY_CSI_U[mainKey]\n if (csiUCodepoint !== undefined) {\n if (mod > 0) {\n return `\\x1b[${csiUCodepoint};${mod + 1}u`\n }\n return `\\x1b[${csiUCodepoint}u`\n }\n\n // Single character — use Unicode codepoint in CSI u format\n if (mainKey.length === 1) {\n const codepoint = mainKey.charCodeAt(0)\n if (mod > 0) {\n // Include shifted_codepoint for Shift+key so parseKey can recover the actual character.\n // Format: CSI codepoint:shifted_codepoint;modifiers u\n if ((mod & 1) !== 0) {\n // Shift is held — check if there's a shifted character to include\n const shifted = BASE_TO_SHIFTED_PUNCT[mainKey]\n if (shifted) {\n return `\\x1b[${codepoint}:${shifted.charCodeAt(0)};${mod + 1}u`\n }\n // Shift+letter: include uppercase codepoint\n if (codepoint >= 97 && codepoint <= 122) {\n return `\\x1b[${codepoint}:${codepoint - 32};${mod + 1}u`\n }\n }\n return `\\x1b[${codepoint};${mod + 1}u`\n }\n return `\\x1b[${codepoint}u`\n }\n\n // Try lowercase as direct kitty name (e.g., \"return\", \"escape\")\n const cp = NAME_TO_KITTY_CODEPOINT[mainKey.toLowerCase()]\n if (cp !== undefined) {\n // Modifier-only keys: include the implicit modifier bit.\n // When the key IS a modifier (leftsuper, leftshift, etc.), real terminals\n // include the corresponding modifier bit in the sequence. E.g., pressing\n // Cmd sends codepoint 57444 with super bit (8), so modifier = 9.\n const implicitMod = MODIFIER_KEY_IMPLICIT_BITS[mainKey.toLowerCase()]\n if (implicitMod !== undefined) {\n mod |= implicitMod\n }\n if (mod > 0) {\n return `\\x1b[${cp};${mod + 1}u`\n }\n return `\\x1b[${cp}u`\n }\n\n // Fallback: return as-is (not a kitty key)\n return keyToAnsi(key)\n}\n\n// ============================================================================\n// Raw Input Splitting\n// ============================================================================\n\n/** Grapheme segmenter for splitting non-escape text into visual characters */\nconst graphemeSegmenter = new Intl.Segmenter(\"en\", { granularity: \"grapheme\" })\n\n/**\n * Split raw terminal input into individual keypresses.\n *\n * When stdin.read() returns multiple characters buffered together (e.g., rapid\n * typing, paste, or auto-repeat during heavy renders), this tokenizer splits\n * them into individual keypresses so each can be parsed and handled separately.\n *\n * Uses grapheme segmentation for non-escape text, so emoji with variation\n * selectors (❤️), ZWJ sequences (👨👩👧👦), and combining marks stay intact.\n *\n * Handles:\n * - CSI sequences: ESC [ ... (arrow keys, function keys, Kitty protocol)\n * - SS3 sequences: ESC O + letter\n * - Meta sequences: ESC + single char\n * - Double ESC\n * - Grapheme clusters (emoji, combining marks, CJK)\n */\nexport function* splitRawInput(data: string): Generator<string> {\n // Single character fast path (most common case in real terminal I/O)\n if (data.length <= 1) {\n if (data.length === 1) yield data\n return\n }\n\n let i = 0\n let textStart = -1 // start of accumulated non-escape text\n\n while (i < data.length) {\n if (data.charCodeAt(i) === 0x1b) {\n // Flush accumulated text before this escape sequence\n if (textStart >= 0) {\n yield* splitNonEscapeText(data.slice(textStart, i))\n textStart = -1\n }\n\n // ESC — start of escape sequence\n if (i + 1 >= data.length) {\n // Bare ESC at end of chunk\n yield \"\\x1b\"\n i++\n continue\n }\n\n const next = data.charCodeAt(i + 1)\n\n if (next === 0x5b) {\n // CSI sequence: ESC [ params final-byte\n // Final byte is in range 0x40-0x7E (@A-Z[\\]^_`a-z{|}~)\n let j = i + 2\n while (j < data.length) {\n const c = data.charCodeAt(j)\n if (c >= 0x40 && c <= 0x7e) {\n j++ // include the final byte\n break\n }\n j++\n }\n yield data.slice(i, j)\n i = j\n } else if (next === 0x4f) {\n // SS3 sequence: ESC O + one letter\n const end = Math.min(i + 3, data.length)\n yield data.slice(i, end)\n i = end\n } else if (next === 0x1b) {\n // Double ESC: meta + escape, OR meta + CSI/SS3 sequence\n // Check if a control sequence follows the double ESC\n if (i + 2 < data.length) {\n const third = data.charCodeAt(i + 2)\n if (third === 0x5b) {\n // Meta + CSI: ESC ESC [ params final-byte (e.g., meta+arrow)\n let j = i + 3\n while (j < data.length) {\n const c = data.charCodeAt(j)\n if (c >= 0x40 && c <= 0x7e) {\n j++ // include the final byte\n break\n }\n j++\n }\n yield data.slice(i, j)\n i = j\n } else if (third === 0x4f) {\n // Meta + SS3: ESC ESC O letter\n const end = Math.min(i + 4, data.length)\n yield data.slice(i, end)\n i = end\n } else {\n // Plain double ESC (meta+escape)\n yield \"\\x1b\\x1b\"\n i += 2\n }\n } else {\n // Double ESC at end of chunk\n yield \"\\x1b\\x1b\"\n i += 2\n }\n } else {\n // Meta + single char (Alt+key)\n yield data.slice(i, i + 2)\n i += 2\n }\n } else {\n // Non-escape: accumulate into text run\n if (textStart < 0) textStart = i\n i++\n }\n }\n\n // Flush final text run\n if (textStart >= 0) {\n yield* splitNonEscapeText(data.slice(textStart))\n }\n}\n\n/**\n * Split non-escape text, keeping most characters together as one chunk.\n *\n * Only delete (0x7F) and backspace (0x08) are split out individually because\n * they can arrive as rapid repeats in a single stdin chunk. Other control\n * characters like \\r and \\t may legitimately appear inside pasted text and\n * should NOT be split out (matching Ink's input-parser behavior).\n */\nfunction* splitNonEscapeText(text: string): Generator<string> {\n let segmentStart = 0\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i)\n if (ch === 0x7f || ch === 0x08) {\n // Flush text before this delete/backspace\n if (i > segmentStart) {\n yield text.slice(segmentStart, i)\n }\n yield text[i]!\n segmentStart = i + 1\n }\n }\n // Flush remaining text\n if (segmentStart < text.length) {\n yield text.slice(segmentStart)\n }\n}\n\n/** Split a non-escape text run into grapheme clusters */\nfunction* splitGraphemes(text: string): Generator<string> {\n for (const { segment } of graphemeSegmenter.segment(text)) {\n yield segment\n }\n}\n","export { fgColorCode, bgColorCode } from \"@silvery/ansi\"\n","/**\n * Terminal buffer implementation for Silvery.\n *\n * Uses packed Uint32Array for efficient cell metadata storage,\n * with separate string array for character storage (needed for\n * multi-byte Unicode graphemes and combining characters).\n */\n\nimport { fgColorCode, bgColorCode } from \"./ansi/sgr-codes\"\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Underline style variants (SGR 4:x codes).\n * - false: no underline\n * - 'single': standard underline (SGR 4 or 4:1)\n * - 'double': double underline (SGR 4:2)\n * - 'curly': curly/wavy underline (SGR 4:3)\n * - 'dotted': dotted underline (SGR 4:4)\n * - 'dashed': dashed underline (SGR 4:5)\n */\nexport type UnderlineStyle = false | \"single\" | \"double\" | \"curly\" | \"dotted\" | \"dashed\"\n\n/**\n * Text attributes that can be applied to a cell.\n */\nexport interface CellAttrs {\n bold?: boolean\n dim?: boolean\n italic?: boolean\n /** Simple underline flag (for backwards compatibility) */\n underline?: boolean\n /**\n * Underline style: 'single' | 'double' | 'curly' | 'dotted' | 'dashed'.\n * When set, takes precedence over the underline boolean.\n */\n underlineStyle?: UnderlineStyle\n blink?: boolean\n inverse?: boolean\n hidden?: boolean\n strikethrough?: boolean\n}\n\n/**\n * Color representation.\n * - number: 256-color index (0-255)\n * - RGB object: true color\n * - null: default/inherit\n * - DEFAULT_BG: terminal's default background (SGR 49), opaque but uses terminal's own bg color\n */\nexport type Color = number | { r: number; g: number; b: number } | null\n\n/**\n * Sentinel color representing the terminal's default background (SGR 49).\n * Unlike `null` (transparent/inherit), this actively fills cells with the\n * terminal's configured background, making the element opaque.\n */\nexport const DEFAULT_BG: Color = Object.freeze({ r: -1, g: -1, b: -1 })\n\n/** Check if a color is the default bg sentinel. */\nexport function isDefaultBg(color: Color): boolean {\n return color !== null && typeof color === \"object\" && color.r === -1\n}\n\n/**\n * A single cell in the terminal buffer.\n */\nexport interface Cell {\n /** The character/grapheme in this cell */\n char: string\n /** Foreground color */\n fg: Color\n /** Background color */\n bg: Color\n /**\n * Underline color (independent of fg).\n * Uses SGR 58. If null, underline uses fg color.\n */\n underlineColor: Color\n /** Text attributes */\n attrs: CellAttrs\n /** True if this is a wide character (CJK, emoji, etc.) */\n wide: boolean\n /** True if this is the continuation cell after a wide character */\n continuation: boolean\n /**\n * OSC 8 hyperlink URL.\n * When set, the cell is part of a clickable hyperlink in supporting terminals.\n */\n hyperlink?: string\n}\n\n/**\n * Style information for a cell (excludes char and position flags).\n */\nexport interface Style {\n fg: Color\n bg: Color\n /**\n * Underline color (independent of fg).\n * Uses SGR 58. If null, underline uses fg color.\n */\n underlineColor?: Color\n attrs: CellAttrs\n /**\n * OSC 8 hyperlink URL.\n * When set, the cell is part of a clickable hyperlink in supporting terminals.\n */\n hyperlink?: string\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n// Bit packing layout for cell metadata in Uint32Array:\n// [0-7]: foreground color index (8 bits)\n// [8-15]: background color index (8 bits)\n// [16-23]: attributes (8 bits): bold, dim, italic, blink, inverse, hidden, strikethrough + 1 spare\n// [24-26]: underline style (3 bits): 0=none, 1=single, 2=double, 3=curly, 4=dotted, 5=dashed\n// [27-31]: flags (5 bits): wide, continuation, true_color_fg, true_color_bg + 1 spare\n\n// Attribute bit positions (within bits 16-23)\nconst ATTR_BOLD = 1 << 16\nconst ATTR_DIM = 1 << 17\nconst ATTR_ITALIC = 1 << 18\nconst ATTR_BLINK = 1 << 19\nconst ATTR_INVERSE = 1 << 20\nconst ATTR_HIDDEN = 1 << 21\nconst ATTR_STRIKETHROUGH = 1 << 22\n// bit 23 spare\n\n// Underline style (3 bits in positions 24-26)\n// 0 = no underline, 1 = single, 2 = double, 3 = curly, 4 = dotted, 5 = dashed\nconst UNDERLINE_STYLE_SHIFT = 24\nconst UNDERLINE_STYLE_MASK = 0x7 << UNDERLINE_STYLE_SHIFT // 3 bits\n\n// Flag bit positions (in bits 27-31)\nconst WIDE_FLAG = 1 << 27\nconst CONTINUATION_FLAG = 1 << 28\nconst TRUE_COLOR_FG_FLAG = 1 << 29\nconst TRUE_COLOR_BG_FLAG = 1 << 30\n/**\n * Selection mask flag — bit 31 in the packed cell metadata.\n * Set during render phase based on resolved `userSelect` prop.\n * Read during selection to determine which cells participate.\n *\n * Uses `>>> 0` to avoid JS signed 32-bit integer issues.\n */\nexport const SELECTABLE_FLAG = 0x80000000 >>> 0\n\n/**\n * Check if a cell is selectable (SELECTABLE_FLAG is set in packed metadata).\n */\nexport function isCellSelectable(packed: number): boolean {\n return ((packed >>> 0) & SELECTABLE_FLAG) !== 0\n}\n\n/**\n * Set the SELECTABLE_FLAG on a packed cell value.\n */\nexport function setSelectableFlag(packed: number): number {\n return (packed | SELECTABLE_FLAG) >>> 0\n}\n\n/**\n * Clear the SELECTABLE_FLAG on a packed cell value.\n */\nexport function clearSelectableFlag(packed: number): number {\n return (packed & ~SELECTABLE_FLAG) >>> 0\n}\n\n/**\n * Packed attribute bits that make a space character visually meaningful.\n * Inverse makes spaces visible (block of color), underline draws a line under spaces,\n * strikethrough draws a line through spaces. Other attrs (bold, dim, italic) don't\n * visually affect space characters.\n */\nexport const VISIBLE_SPACE_ATTR_MASK = ATTR_INVERSE | ATTR_STRIKETHROUGH | UNDERLINE_STYLE_MASK\n\n// Default empty cell\nconst EMPTY_CELL: Cell = {\n char: \" \",\n fg: null,\n bg: null,\n underlineColor: null,\n attrs: {},\n wide: false,\n continuation: false,\n hyperlink: undefined,\n}\n\n/** Frozen empty attrs object, shared across zero-allocation reads for OOB cells */\nconst EMPTY_ATTRS: CellAttrs = Object.freeze({})\n\n// ============================================================================\n// Row Metadata\n// ============================================================================\n\n/**\n * Per-row metadata for text extraction correctness.\n * Maintained by the render phase during text rendering.\n */\nexport interface RowMetadata {\n /** True if this row continues on the next row (soft wrap, not hard break) */\n softWrapped: boolean\n /** Rightmost column with non-space content (for trailing space trimming) */\n lastContentCol: number\n}\n\n// ============================================================================\n// Packing/Unpacking Helpers\n// ============================================================================\n\n/**\n * Map UnderlineStyle to numeric value for bit packing.\n */\nfunction underlineStyleToNumber(style: UnderlineStyle | undefined): number {\n switch (style) {\n case false:\n return 0\n case \"single\":\n return 1\n case \"double\":\n return 2\n case \"curly\":\n return 3\n case \"dotted\":\n return 4\n case \"dashed\":\n return 5\n default:\n return 0 // undefined or unknown = no underline\n }\n}\n\n/**\n * Map numeric value back to UnderlineStyle.\n */\nfunction numberToUnderlineStyle(n: number): UnderlineStyle | undefined {\n switch (n) {\n case 0:\n return undefined // No underline\n case 1:\n return \"single\"\n case 2:\n return \"double\"\n case 3:\n return \"curly\"\n case 4:\n return \"dotted\"\n case 5:\n return \"dashed\"\n default:\n return undefined\n }\n}\n\n/**\n * Convert CellAttrs to bits for packing (used internally by packCell).\n * Note: This packs into the full 32-bit word, not just the attrs byte.\n */\nexport function attrsToNumber(attrs: CellAttrs): number {\n let n = 0\n if (attrs.bold) n |= ATTR_BOLD\n if (attrs.dim) n |= ATTR_DIM\n if (attrs.italic) n |= ATTR_ITALIC\n if (attrs.blink) n |= ATTR_BLINK\n if (attrs.inverse) n |= ATTR_INVERSE\n if (attrs.hidden) n |= ATTR_HIDDEN\n if (attrs.strikethrough) n |= ATTR_STRIKETHROUGH\n\n // Pack underline style (3 bits)\n // If underlineStyle is set, use it. Otherwise, check underline boolean.\n const ulStyle = attrs.underlineStyle ?? (attrs.underline ? \"single\" : undefined)\n n |= underlineStyleToNumber(ulStyle) << UNDERLINE_STYLE_SHIFT\n\n return n\n}\n\n/**\n * Convert a number back to CellAttrs.\n */\nexport function numberToAttrs(n: number): CellAttrs {\n const attrs: CellAttrs = {}\n if (n & ATTR_BOLD) attrs.bold = true\n if (n & ATTR_DIM) attrs.dim = true\n if (n & ATTR_ITALIC) attrs.italic = true\n if (n & ATTR_BLINK) attrs.blink = true\n if (n & ATTR_INVERSE) attrs.inverse = true\n if (n & ATTR_HIDDEN) attrs.hidden = true\n if (n & ATTR_STRIKETHROUGH) attrs.strikethrough = true\n\n // Unpack underline style\n const ulStyleNum = (n & UNDERLINE_STYLE_MASK) >> UNDERLINE_STYLE_SHIFT\n const ulStyle = numberToUnderlineStyle(ulStyleNum)\n if (ulStyle) {\n attrs.underlineStyle = ulStyle\n attrs.underline = true\n }\n\n return attrs\n}\n\n/**\n * Convert a color to an index value for packing.\n * Returns 0 for null (default), or (index + 1) for 256-color.\n * This +1 offset allows distinguishing null from black (color index 0).\n * True color is handled separately via flags and auxiliary storage.\n */\nfunction colorToIndex(color: Color): number {\n if (color === null) return 0\n if (typeof color === \"number\") return (color & 0xff) + 1 // +1 to distinguish from null\n // True color - return 0, handle via flag\n return 0\n}\n\n/**\n * Check if a color is true color (RGB).\n */\nfunction isTrueColor(color: Color): color is { r: number; g: number; b: number } {\n return color !== null && typeof color === \"object\"\n}\n\n/**\n * Pack cell metadata into a 32-bit number.\n */\nexport function packCell(cell: Cell): number {\n let packed = 0\n\n // Foreground color index (bits 0-7)\n packed |= colorToIndex(cell.fg) & 0xff\n\n // Background color index (bits 8-15)\n packed |= (colorToIndex(cell.bg) & 0xff) << 8\n\n // Attributes (bits 16-22) and underline style (bits 24-26)\n // attrsToNumber returns bits already in their final positions\n packed |= attrsToNumber(cell.attrs)\n\n // Flags (bits 27-30)\n if (cell.wide) packed |= WIDE_FLAG\n if (cell.continuation) packed |= CONTINUATION_FLAG\n if (isTrueColor(cell.fg)) packed |= TRUE_COLOR_FG_FLAG\n if (isTrueColor(cell.bg)) packed |= TRUE_COLOR_BG_FLAG\n\n return packed\n}\n\n/**\n * Unpack foreground color index from packed value.\n */\nfunction unpackFgIndex(packed: number): number {\n return packed & 0xff\n}\n\n/**\n * Unpack background color index from packed value.\n */\nfunction unpackBgIndex(packed: number): number {\n return (packed >> 8) & 0xff\n}\n\n/**\n * Unpack attributes from packed value.\n * Extracts both the boolean attrs (bits 16-22) and underline style (bits 24-26).\n */\nfunction unpackAttrs(packed: number): CellAttrs {\n // numberToAttrs expects the full packed value with attrs in bits 16-22\n // and underline style in bits 24-26\n return numberToAttrs(packed)\n}\n\n/**\n * Check if wide flag is set.\n */\nfunction unpackWide(packed: number): boolean {\n return (packed & WIDE_FLAG) !== 0\n}\n\n/**\n * Check if continuation flag is set.\n */\nfunction unpackContinuation(packed: number): boolean {\n return (packed & CONTINUATION_FLAG) !== 0\n}\n\n/**\n * Check if true color foreground flag is set.\n */\nfunction unpackTrueColorFg(packed: number): boolean {\n return (packed & TRUE_COLOR_FG_FLAG) !== 0\n}\n\n/**\n * Check if true color background flag is set.\n */\nfunction unpackTrueColorBg(packed: number): boolean {\n return (packed & TRUE_COLOR_BG_FLAG) !== 0\n}\n\n// ============================================================================\n// TerminalBuffer Class\n// ============================================================================\n\n/**\n * Efficient terminal cell buffer.\n *\n * Uses packed Uint32Array for cell metadata and separate string array\n * for characters. This allows efficient diffing while supporting\n * full Unicode grapheme clusters.\n */\nexport class TerminalBuffer {\n /** Packed cell metadata */\n private cells: Uint32Array\n /** Character storage (one per cell, may be multi-byte grapheme) */\n private chars: string[]\n /** True color foreground storage (only for cells with true color fg) */\n private fgColors: Map<number, { r: number; g: number; b: number }>\n /** True color background storage (only for cells with true color bg) */\n private bgColors: Map<number, { r: number; g: number; b: number }>\n /** Underline color storage (independent of fg, for SGR 58) */\n private underlineColors: Map<number, Color>\n /** OSC 8 hyperlink URL storage (only for cells that are part of a hyperlink) */\n private hyperlinks: Map<number, string>\n /**\n * Per-row dirty tracking for diff optimization.\n * When set, diffBuffers() can skip clean rows entirely.\n * 0 = clean (unchanged since last resetDirtyRows), 1 = dirty (modified).\n */\n private _dirtyRows: Uint8Array\n /** Bounding box: first dirty row (inclusive). -1 when no rows are dirty. */\n private _minDirtyRow: number\n /** Bounding box: last dirty row (inclusive). -1 when no rows are dirty. */\n private _maxDirtyRow: number\n /**\n * Per-row metadata for text extraction (soft wrap, last content column).\n * Set by the render phase, read by extractText.\n */\n private _rowMetadata: RowMetadata[]\n /**\n * When true, setCell and fill automatically stamp SELECTABLE_FLAG on written cells.\n * Set/cleared by the render phase as it traverses nodes with different userSelect values.\n * This avoids modifying every individual setCell call — zero overhead (single OR per cell).\n */\n private _selectableMode = false\n /**\n * Snapshots of cells underlying outlines drawn on this buffer.\n *\n * The decoration phase (outlines draw OUTSIDE owning nodes into parent\n * pixel space) uses these to restore pre-outline state before the next\n * frame's content render. Travels with the buffer via clone() so the\n * prev-buffer cascade naturally carries them forward.\n *\n * Written by `renderDecorationPass`, read/cleared by `clearPreviousOutlines`.\n * Uses `any[]` here to avoid circular typing — see `decoration-phase.ts`\n * for the `OutlineCellSnapshot` shape.\n */\n outlineSnapshots: Array<{ x: number; y: number; cell: Cell }> = []\n\n readonly width: number\n readonly height: number\n\n constructor(width: number, height: number) {\n this.width = width\n this.height = height\n const size = width * height\n this.cells = new Uint32Array(size)\n this.chars = new Array<string>(size).fill(\" \")\n this.fgColors = new Map()\n this.bgColors = new Map()\n this.underlineColors = new Map()\n this.hyperlinks = new Map()\n // All rows start dirty (fresh buffer needs full diff on first comparison)\n this._dirtyRows = new Uint8Array(height).fill(1)\n this._minDirtyRow = 0\n this._maxDirtyRow = height - 1\n // Row metadata: default to not soft-wrapped, no content\n this._rowMetadata = Array.from({ length: height }, () => ({ softWrapped: false, lastContentCol: -1 }))\n }\n\n /**\n * Get the index for a cell position.\n */\n private index(x: number, y: number): number {\n return y * this.width + x\n }\n\n /**\n * Check if coordinates are within bounds.\n */\n inBounds(x: number, y: number): boolean {\n return x >= 0 && x < this.width && y >= 0 && y < this.height\n }\n\n /**\n * Get a cell at the given position.\n */\n getCell(x: number, y: number): Cell {\n if (!this.inBounds(x, y)) {\n return { ...EMPTY_CELL }\n }\n\n const idx = this.index(x, y)\n const packed = this.cells[idx]\n const char = this.chars[idx]\n\n // Determine foreground color\n // Color indices are stored with +1 offset (0=null, 1=black, 2=red, etc.)\n let fg: Color = null\n if (unpackTrueColorFg(packed!)) {\n fg = this.fgColors.get(idx) ?? null\n } else {\n const fgIndex = unpackFgIndex(packed!)\n fg = fgIndex > 0 ? fgIndex - 1 : null // -1 to restore actual color index\n }\n\n // Determine background color\n let bg: Color = null\n if (unpackTrueColorBg(packed!)) {\n bg = this.bgColors.get(idx) ?? null\n } else {\n const bgIndex = unpackBgIndex(packed!)\n bg = bgIndex > 0 ? bgIndex - 1 : null // -1 to restore actual color index\n }\n\n const hyperlink = this.hyperlinks.get(idx)\n return {\n char: char!,\n fg,\n bg,\n underlineColor: this.underlineColors.get(idx) ?? null,\n attrs: unpackAttrs(packed!),\n wide: unpackWide(packed!),\n continuation: unpackContinuation(packed!),\n ...(hyperlink !== undefined ? { hyperlink } : {}),\n }\n }\n\n // --------------------------------------------------------------------------\n // Zero-allocation cell accessors for hot paths\n // --------------------------------------------------------------------------\n\n /**\n * Get just the character at a cell position (no object allocation).\n * Returns \" \" for out-of-bounds positions.\n */\n getCellChar(x: number, y: number): string {\n if (!this.inBounds(x, y)) return \" \"\n return this.chars[this.index(x, y)]!\n }\n\n /**\n * Get just the background color at a cell position (no object allocation).\n * Returns null for out-of-bounds positions.\n */\n getCellBg(x: number, y: number): Color {\n if (!this.inBounds(x, y)) return null\n const idx = this.index(x, y)\n const packed = this.cells[idx]!\n if (unpackTrueColorBg(packed)) {\n return this.bgColors.get(idx) ?? null\n }\n const bgIndex = unpackBgIndex(packed)\n return bgIndex > 0 ? bgIndex - 1 : null\n }\n\n /**\n * Get just the foreground color at a cell position (no object allocation).\n * Returns null for out-of-bounds positions.\n */\n getCellFg(x: number, y: number): Color {\n if (!this.inBounds(x, y)) return null\n const idx = this.index(x, y)\n const packed = this.cells[idx]!\n if (unpackTrueColorFg(packed)) {\n return this.fgColors.get(idx) ?? null\n }\n const fgIndex = unpackFgIndex(packed)\n return fgIndex > 0 ? fgIndex - 1 : null\n }\n\n /**\n * Get the raw packed metadata at a cell position (no unpackAttrs allocation).\n * Returns 0 for out-of-bounds positions. The packed value contains color\n * indices, attr bits, underline style, and flags in a single Uint32.\n */\n getCellAttrs(x: number, y: number): number {\n if (!this.inBounds(x, y)) return 0\n return this.cells[this.index(x, y)]!\n }\n\n /**\n * Check if a cell is a wide character (no object allocation).\n * Returns false for out-of-bounds positions.\n */\n isCellWide(x: number, y: number): boolean {\n if (!this.inBounds(x, y)) return false\n return unpackWide(this.cells[this.index(x, y)]!)\n }\n\n /**\n * Check if a cell is a continuation of a wide character (no object allocation).\n * Returns false for out-of-bounds positions.\n */\n isCellContinuation(x: number, y: number): boolean {\n if (!this.inBounds(x, y)) return false\n return unpackContinuation(this.cells[this.index(x, y)]!)\n }\n\n /**\n * Check if a cell is selectable (SELECTABLE_FLAG is set, no object allocation).\n * Returns false for out-of-bounds positions.\n */\n isCellSelectable(x: number, y: number): boolean {\n if (!this.inBounds(x, y)) return false\n return ((this.cells[this.index(x, y)]! >>> 0) & SELECTABLE_FLAG) !== 0\n }\n\n // --------------------------------------------------------------------------\n // Row Metadata (for text extraction)\n // --------------------------------------------------------------------------\n\n /**\n * Set metadata for a row (soft wrap, last content column).\n * Called by the render phase during text rendering.\n */\n setRowMeta(row: number, meta: Partial<RowMetadata>): void {\n if (row < 0 || row >= this.height) return\n const existing = this._rowMetadata[row]!\n if (meta.softWrapped !== undefined) existing.softWrapped = meta.softWrapped\n if (meta.lastContentCol !== undefined) existing.lastContentCol = meta.lastContentCol\n }\n\n /**\n * Get metadata for a row. Returns default values for out-of-bounds rows.\n */\n getRowMeta(row: number): RowMetadata {\n if (row < 0 || row >= this.height) return { softWrapped: false, lastContentCol: -1 }\n return this._rowMetadata[row]!\n }\n\n /**\n * Get the full row metadata array (for bulk access during text extraction).\n */\n getRowMetadataArray(): readonly RowMetadata[] {\n return this._rowMetadata\n }\n\n // --------------------------------------------------------------------------\n // Selectable Mode (for render-phase SELECTABLE_FLAG stamping)\n // --------------------------------------------------------------------------\n\n /**\n * Enable/disable automatic SELECTABLE_FLAG stamping on cell writes.\n * When true, all setCell/fill calls stamp SELECTABLE_FLAG on the packed metadata.\n * Zero overhead: a single OR per cell when enabled.\n */\n setSelectableMode(selectable: boolean): void {\n this._selectableMode = selectable\n }\n\n /**\n * Get the current selectable mode.\n */\n getSelectableMode(): boolean {\n return this._selectableMode\n }\n\n /**\n * Read cell data into a caller-provided Cell object (zero-allocation).\n * For hot loops that need the full Cell, reuse a single object:\n *\n * const cell = createMutableCell()\n * for (...) { buffer.readCellInto(x, y, cell) }\n *\n * Returns the same `out` object for chaining convenience.\n */\n readCellInto(x: number, y: number, out: Cell): Cell {\n if (!this.inBounds(x, y)) {\n out.char = \" \"\n out.fg = null\n out.bg = null\n out.underlineColor = null\n out.attrs = EMPTY_ATTRS\n out.wide = false\n out.continuation = false\n out.hyperlink = undefined\n return out\n }\n\n const idx = this.index(x, y)\n const packed = this.cells[idx]!\n\n out.char = this.chars[idx]!\n\n // Foreground color\n if (unpackTrueColorFg(packed)) {\n out.fg = this.fgColors.get(idx) ?? null\n } else {\n const fgIndex = unpackFgIndex(packed)\n out.fg = fgIndex > 0 ? fgIndex - 1 : null\n }\n\n // Background color\n if (unpackTrueColorBg(packed)) {\n out.bg = this.bgColors.get(idx) ?? null\n } else {\n const bgIndex = unpackBgIndex(packed)\n out.bg = bgIndex > 0 ? bgIndex - 1 : null\n }\n\n out.underlineColor = this.underlineColors.get(idx) ?? null\n\n // Unpack attrs inline to avoid allocating a new CellAttrs object.\n // We reuse the existing out.attrs object when possible.\n const attrs = out.attrs === EMPTY_ATTRS ? ((out.attrs = {}), out.attrs) : out.attrs\n attrs.bold = (packed & ATTR_BOLD) !== 0 ? true : undefined\n attrs.dim = (packed & ATTR_DIM) !== 0 ? true : undefined\n attrs.italic = (packed & ATTR_ITALIC) !== 0 ? true : undefined\n attrs.blink = (packed & ATTR_BLINK) !== 0 ? true : undefined\n attrs.inverse = (packed & ATTR_INVERSE) !== 0 ? true : undefined\n attrs.hidden = (packed & ATTR_HIDDEN) !== 0 ? true : undefined\n attrs.strikethrough = (packed & ATTR_STRIKETHROUGH) !== 0 ? true : undefined\n\n const ulStyleNum = (packed & UNDERLINE_STYLE_MASK) >> UNDERLINE_STYLE_SHIFT\n const ulStyle = numberToUnderlineStyle(ulStyleNum)\n if (ulStyle) {\n attrs.underlineStyle = ulStyle\n attrs.underline = true\n } else {\n attrs.underlineStyle = undefined\n attrs.underline = undefined\n }\n\n out.wide = (packed & WIDE_FLAG) !== 0\n out.continuation = (packed & CONTINUATION_FLAG) !== 0\n out.hyperlink = this.hyperlinks.get(idx)\n\n return out\n }\n\n /**\n * Set a cell at the given position.\n *\n * Optimized: resolves defaults and packs metadata inline to avoid\n * allocating an intermediate Cell object.\n */\n setCell(x: number, y: number, cell: Partial<Cell>): void {\n if (!this.inBounds(x, y)) {\n return\n }\n\n // Write trap for SILVERY_STRICT mismatch diagnosis\n const trap = (globalThis as any).__silvery_write_trap\n if (trap && x === trap.x && y === trap.y) {\n const char = cell.char ?? \" \"\n const stack = new Error().stack?.split(\"\\n\").slice(1, 6).join(\"\\n\") ?? \"\"\n trap.log.push(\n ` char=\"${char}\" fg=${cell.fg ?? \"null\"} bg=${cell.bg ?? \"null\"} dim=${cell.attrs?.dim} ul=${cell.attrs?.underline}\\n${stack}`,\n )\n }\n\n this._dirtyRows[y] = 1\n if (this._minDirtyRow === -1 || y < this._minDirtyRow) this._minDirtyRow = y\n if (y > this._maxDirtyRow) this._maxDirtyRow = y\n\n const idx = this.index(x, y)\n\n // Wide character consistency: when overwriting a continuation cell (second\n // half of a wide char), the leading main cell at x-1 must be replaced with\n // a space (matching Ink's overlay boundary clearing — see ink/output.ts).\n // Otherwise the buffer would have a wide-char glyph with no continuation,\n // and the terminal would render a half-visible wide character past the\n // overlay. When overwriting a wide char's main cell with a non-wide char,\n // clear the continuation cell at x+1 the same way.\n if (!(cell.continuation ?? false)) {\n const prevPacked = this.cells[idx]\n if (prevPacked !== undefined && (prevPacked & CONTINUATION_FLAG) !== 0 && x > 0) {\n // Overwriting a continuation cell — replace the leading wide-char cell\n // at x-1 with a space and clear its wide flag. This matches Ink's\n // pre-write boundary cleanup (ink/output.ts: currentLine[offsetX-1] = spaceCell).\n const prevIdx = idx - 1\n this.cells[prevIdx] = this.cells[prevIdx]! & ~WIDE_FLAG\n this.chars[prevIdx] = \" \"\n }\n }\n if (!(cell.wide ?? false)) {\n const prevPacked = this.cells[idx]\n if (prevPacked !== undefined && (prevPacked & WIDE_FLAG) !== 0 && x + 1 < this.width) {\n // Overwriting a wide cell with a non-wide char — clear continuation at x+1\n const nextIdx = idx + 1\n this.cells[nextIdx] = this.cells[nextIdx]! & ~CONTINUATION_FLAG\n this.chars[nextIdx] = \" \"\n }\n }\n\n // Resolve properties with defaults (no intermediate object)\n const char = cell.char ?? \" \"\n const fg = cell.fg ?? null\n const bg = cell.bg ?? null\n const underlineColor = cell.underlineColor ?? null\n const attrs = cell.attrs ?? EMPTY_ATTRS\n const wide = cell.wide ?? false\n const continuation = cell.continuation ?? false\n\n // Store character\n this.chars[idx] = char\n\n // Handle true color storage\n if (isTrueColor(fg)) {\n this.fgColors.set(idx, fg)\n } else {\n this.fgColors.delete(idx)\n }\n\n if (isTrueColor(bg)) {\n this.bgColors.set(idx, bg)\n } else {\n this.bgColors.delete(idx)\n }\n\n // Handle underline color storage\n if (underlineColor !== null) {\n this.underlineColors.set(idx, underlineColor)\n } else {\n this.underlineColors.delete(idx)\n }\n\n // Handle hyperlink storage\n const hyperlink = cell.hyperlink\n if (hyperlink !== undefined && hyperlink !== \"\") {\n this.hyperlinks.set(idx, hyperlink)\n } else {\n this.hyperlinks.delete(idx)\n }\n\n // Pack metadata inline (avoids packCell's fullCell parameter overhead)\n let packed = 0\n packed |= colorToIndex(fg) & 0xff\n packed |= (colorToIndex(bg) & 0xff) << 8\n packed |= attrsToNumber(attrs)\n if (wide) packed |= WIDE_FLAG\n if (continuation) packed |= CONTINUATION_FLAG\n if (isTrueColor(fg)) packed |= TRUE_COLOR_FG_FLAG\n if (isTrueColor(bg)) packed |= TRUE_COLOR_BG_FLAG\n if (this._selectableMode) packed = (packed | SELECTABLE_FLAG) >>> 0\n this.cells[idx] = packed\n }\n\n /**\n * Fill a region with a cell.\n *\n * Optimized: packs cell metadata once and assigns directly to arrays,\n * avoiding O(width*height) intermediate object allocations from setCell().\n */\n fill(x: number, y: number, width: number, height: number, cell: Partial<Cell>): void {\n const endX = Math.min(x + width, this.width)\n const endY = Math.min(y + height, this.height)\n const startX = Math.max(0, x)\n const startY = Math.max(0, y)\n\n if (startX >= endX || startY >= endY) return\n\n // Resolve cell properties once (instead of per-cell in setCell)\n const char = cell.char ?? \" \"\n const fg = cell.fg ?? null\n const bg = cell.bg ?? null\n const underlineColor = cell.underlineColor ?? null\n const attrs = cell.attrs ?? {}\n const wide = cell.wide ?? false\n const continuation = cell.continuation ?? false\n\n // Pack metadata once for the entire fill region\n const fullCell: Cell = {\n char,\n fg,\n bg,\n underlineColor,\n attrs,\n wide,\n continuation,\n }\n let packed = packCell(fullCell)\n if (this._selectableMode) packed = (packed | SELECTABLE_FLAG) >>> 0\n\n // Determine true color values once\n const hasTrueColorFg = isTrueColor(fg)\n const hasTrueColorBg = isTrueColor(bg)\n const trueColorFg = hasTrueColorFg ? (fg as { r: number; g: number; b: number }) : null\n const trueColorBg = hasTrueColorBg ? (bg as { r: number; g: number; b: number }) : null\n const hasUnderlineColor = underlineColor !== null\n const hyperlink = cell.hyperlink\n const hasHyperlink = hyperlink !== undefined && hyperlink !== \"\"\n\n // Mark affected rows dirty + update bounding box\n for (let cy = startY; cy < endY; cy++) {\n this._dirtyRows[cy] = 1\n }\n if (startY < endY) {\n if (this._minDirtyRow === -1 || startY < this._minDirtyRow) this._minDirtyRow = startY\n if (endY - 1 > this._maxDirtyRow) this._maxDirtyRow = endY - 1\n }\n\n // Determine which Map operations are actually needed.\n // Skip delete() calls when the map is already empty (common case: no true colors).\n const needFgDelete = !hasTrueColorFg && this.fgColors.size > 0\n const needBgDelete = !hasTrueColorBg && this.bgColors.size > 0\n const needUlDelete = !hasUnderlineColor && this.underlineColors.size > 0\n const needHlDelete = !hasHyperlink && this.hyperlinks.size > 0\n\n for (let cy = startY; cy < endY; cy++) {\n const rowBase = cy * this.width\n for (let cx = startX; cx < endX; cx++) {\n const idx = rowBase + cx\n\n // Direct array assignment (no setCell overhead)\n this.cells[idx] = packed\n this.chars[idx] = char\n\n // Handle true color maps — skip delete when map is empty\n if (hasTrueColorFg) {\n this.fgColors.set(idx, trueColorFg!)\n } else if (needFgDelete) {\n this.fgColors.delete(idx)\n }\n\n if (hasTrueColorBg) {\n this.bgColors.set(idx, trueColorBg!)\n } else if (needBgDelete) {\n this.bgColors.delete(idx)\n }\n\n if (hasUnderlineColor) {\n this.underlineColors.set(idx, underlineColor)\n } else if (needUlDelete) {\n this.underlineColors.delete(idx)\n }\n\n if (hasHyperlink) {\n this.hyperlinks.set(idx, hyperlink!)\n } else if (needHlDelete) {\n this.hyperlinks.delete(idx)\n }\n }\n }\n }\n\n /**\n * Restyle a rectangular region — update fg, bg, and attrs on existing cells\n * without changing character content (char, wide, continuation, hyperlink).\n *\n * This is the style-only fast path: when only visual props changed (color,\n * bold, dim, inverse, etc.) but text content and layout are identical, we\n * can skip text collection/formatting and just update the style metadata.\n *\n * @param x Left column (inclusive)\n * @param y Top row (inclusive)\n * @param width Region width\n * @param height Region height\n * @param style New style to apply (fg, bg, attrs, underlineColor)\n */\n restyleRegion(x: number, y: number, width: number, height: number, style: Style): void {\n const endX = Math.min(x + width, this.width)\n const endY = Math.min(y + height, this.height)\n const startX = Math.max(0, x)\n const startY = Math.max(0, y)\n\n if (startX >= endX || startY >= endY) return\n\n // Pre-compute style-related packed bits\n const fgIndex = colorToIndex(style.fg) & 0xff\n const bgIndex = (colorToIndex(style.bg) & 0xff) << 8\n const attrBits = attrsToNumber(style.attrs)\n const hasTrueColorFg = isTrueColor(style.fg)\n const hasTrueColorBg = isTrueColor(style.bg)\n const trueColorFgFlag = hasTrueColorFg ? TRUE_COLOR_FG_FLAG : 0\n const trueColorBgFlag = hasTrueColorBg ? TRUE_COLOR_BG_FLAG : 0\n const trueColorFg = hasTrueColorFg ? (style.fg as { r: number; g: number; b: number }) : null\n const trueColorBg = hasTrueColorBg ? (style.bg as { r: number; g: number; b: number }) : null\n const underlineColor = style.underlineColor ?? null\n const hasUnderlineColor = underlineColor !== null\n\n // Style bits to apply (everything except char position flags)\n const styleBits = fgIndex | bgIndex | attrBits | trueColorFgFlag | trueColorBgFlag\n\n // Mask to preserve: wide, continuation, selectable\n // Clear: fg index (0-7), bg index (8-15), attrs (16-26), true color flags (29-30)\n const PRESERVE_MASK = WIDE_FLAG | CONTINUATION_FLAG | SELECTABLE_FLAG\n const needFgDelete = !hasTrueColorFg && this.fgColors.size > 0\n const needBgDelete = !hasTrueColorBg && this.bgColors.size > 0\n const needUlDelete = !hasUnderlineColor && this.underlineColors.size > 0\n\n // Mark affected rows dirty\n for (let cy = startY; cy < endY; cy++) {\n this._dirtyRows[cy] = 1\n }\n if (this._minDirtyRow === -1 || startY < this._minDirtyRow) this._minDirtyRow = startY\n if (endY - 1 > this._maxDirtyRow) this._maxDirtyRow = endY - 1\n\n for (let cy = startY; cy < endY; cy++) {\n const rowBase = cy * this.width\n for (let cx = startX; cx < endX; cx++) {\n const idx = rowBase + cx\n\n // Preserve char position flags, replace style bits\n const oldPacked = this.cells[idx]!\n this.cells[idx] = ((oldPacked & PRESERVE_MASK) >>> 0) | styleBits\n\n // Handle true color maps\n if (hasTrueColorFg) {\n this.fgColors.set(idx, trueColorFg!)\n } else if (needFgDelete) {\n this.fgColors.delete(idx)\n }\n\n if (hasTrueColorBg) {\n this.bgColors.set(idx, trueColorBg!)\n } else if (needBgDelete) {\n this.bgColors.delete(idx)\n }\n\n if (hasUnderlineColor) {\n this.underlineColors.set(idx, underlineColor)\n } else if (needUlDelete) {\n this.underlineColors.delete(idx)\n }\n }\n }\n }\n\n /**\n * Fill only the background color of a region — update bg on existing cells\n * without changing character content, foreground, or attributes.\n *\n * Unlike fill() which writes space characters, this preserves existing chars.\n * Used by the style-only fast path: when a Box's backgroundColor changes but\n * children are unchanged, fillBg() paints the new bg without destroying child\n * chars. Clean children can then be skipped (their chars are correct from the\n * clone, their bg was updated by fillBg).\n *\n * @param x Left column (inclusive)\n * @param y Top row (inclusive)\n * @param width Region width\n * @param height Region height\n * @param bg New background color\n */\n fillBg(x: number, y: number, width: number, height: number, bg: Color): void {\n const endX = Math.min(x + width, this.width)\n const endY = Math.min(y + height, this.height)\n const startX = Math.max(0, x)\n const startY = Math.max(0, y)\n\n if (startX >= endX || startY >= endY) return\n\n const bgIndex = (colorToIndex(bg) & 0xff) << 8\n const hasTrueColorBg = isTrueColor(bg)\n const trueColorBg = hasTrueColorBg ? (bg as { r: number; g: number; b: number }) : null\n const needBgDelete = !hasTrueColorBg && this.bgColors.size > 0\n\n // Mask to clear: bg index (bits 8-15) and TRUE_COLOR_BG_FLAG (bit 30)\n const BG_CLEAR_MASK = ~((0xff << 8) | TRUE_COLOR_BG_FLAG)\n const trueColorBgFlag = hasTrueColorBg ? TRUE_COLOR_BG_FLAG : 0\n\n // Mark affected rows dirty\n for (let cy = startY; cy < endY; cy++) {\n this._dirtyRows[cy] = 1\n }\n if (startY < endY) {\n if (this._minDirtyRow === -1 || startY < this._minDirtyRow) this._minDirtyRow = startY\n if (endY - 1 > this._maxDirtyRow) this._maxDirtyRow = endY - 1\n }\n\n for (let cy = startY; cy < endY; cy++) {\n const rowBase = cy * this.width\n for (let cx = startX; cx < endX; cx++) {\n const idx = rowBase + cx\n\n // Clear old bg bits, set new bg bits (preserve everything else)\n const oldPacked = this.cells[idx]!\n this.cells[idx] = ((oldPacked & BG_CLEAR_MASK) >>> 0) | bgIndex | trueColorBgFlag\n\n // Handle true color bg map\n if (hasTrueColorBg) {\n this.bgColors.set(idx, trueColorBg!)\n } else if (needBgDelete) {\n this.bgColors.delete(idx)\n }\n }\n }\n }\n\n /**\n * Clear the buffer (fill with empty cells).\n */\n clear(): void {\n this.cells.fill(0)\n this.chars.fill(\" \")\n this.fgColors.clear()\n this.bgColors.clear()\n this.underlineColors.clear()\n this.hyperlinks.clear()\n this._dirtyRows.fill(1)\n this._minDirtyRow = 0\n this._maxDirtyRow = this.height - 1\n }\n\n /**\n * Copy a region from another buffer.\n */\n copyFrom(\n source: TerminalBuffer,\n srcX: number,\n srcY: number,\n destX: number,\n destY: number,\n width: number,\n height: number,\n ): void {\n const cell = createMutableCell()\n for (let dy = 0; dy < height; dy++) {\n const dstY = destY + dy\n if (dstY >= 0 && dstY < this.height) {\n this._dirtyRows[dstY] = 1\n if (this._minDirtyRow === -1 || dstY < this._minDirtyRow) this._minDirtyRow = dstY\n if (dstY > this._maxDirtyRow) this._maxDirtyRow = dstY\n }\n for (let dx = 0; dx < width; dx++) {\n const sx = srcX + dx\n const sy = srcY + dy\n const dX = destX + dx\n\n if (source.inBounds(sx, sy) && this.inBounds(dX, dstY)) {\n source.readCellInto(sx, sy, cell)\n this.setCell(dX, dstY, cell)\n }\n }\n }\n }\n\n /**\n * Shift content within a rectangular region vertically by `delta` rows.\n * Positive delta = shift content UP (scroll down), negative = shift DOWN (scroll up).\n * Exposed rows (at the bottom for positive delta, top for negative) are filled\n * with the given background cell.\n *\n * Uses Uint32Array.copyWithin for the packed cells (native memcpy) and\n * Array splice for the character array.\n */\n scrollRegion(\n x: number,\n y: number,\n regionWidth: number,\n regionHeight: number,\n delta: number,\n clearCell: Partial<Cell> = {},\n ): void {\n if (delta === 0 || regionHeight <= 0 || regionWidth <= 0) return\n\n const startX = Math.max(0, x)\n const endX = Math.min(x + regionWidth, this.width)\n const startY = Math.max(0, y)\n const endY = Math.min(y + regionHeight, this.height)\n const clampedWidth = endX - startX\n const clampedHeight = endY - startY\n\n if (clampedWidth <= 0 || clampedHeight <= 0) return\n\n // Mark all rows in the scroll region dirty + update bounding box\n for (let r = startY; r < endY; r++) {\n this._dirtyRows[r] = 1\n }\n if (this._minDirtyRow === -1 || startY < this._minDirtyRow) this._minDirtyRow = startY\n if (endY - 1 > this._maxDirtyRow) this._maxDirtyRow = endY - 1\n\n if (Math.abs(delta) >= clampedHeight) {\n // Scroll amount exceeds region — just clear everything\n this.fill(startX, startY, clampedWidth, clampedHeight, {\n char: clearCell.char ?? \" \",\n bg: clearCell.bg ?? null,\n })\n return\n }\n\n const absDelta = Math.abs(delta)\n const w = this.width\n\n if (delta > 0) {\n // Shift content UP: copy rows [startY + delta .. endY) to [startY .. endY - delta)\n for (let row = startY; row < endY - absDelta; row++) {\n const dstBase = row * w\n const srcBase = (row + absDelta) * w\n // Copy cells and chars for the region columns\n this.cells.copyWithin(dstBase + startX, srcBase + startX, srcBase + endX)\n for (let cx = startX; cx < endX; cx++) {\n this.chars[dstBase + cx] = this.chars[srcBase + cx]!\n // Move true color maps\n const srcIdx = srcBase + cx\n const dstIdx = dstBase + cx\n const fgc = this.fgColors.get(srcIdx)\n if (fgc) {\n this.fgColors.set(dstIdx, fgc)\n this.fgColors.delete(srcIdx)\n } else {\n this.fgColors.delete(dstIdx)\n }\n const bgc = this.bgColors.get(srcIdx)\n if (bgc) {\n this.bgColors.set(dstIdx, bgc)\n this.bgColors.delete(srcIdx)\n } else {\n this.bgColors.delete(dstIdx)\n }\n const ulc = this.underlineColors.get(srcIdx)\n if (ulc) {\n this.underlineColors.set(dstIdx, ulc)\n this.underlineColors.delete(srcIdx)\n } else {\n this.underlineColors.delete(dstIdx)\n }\n const hl = this.hyperlinks.get(srcIdx)\n if (hl) {\n this.hyperlinks.set(dstIdx, hl)\n this.hyperlinks.delete(srcIdx)\n } else {\n this.hyperlinks.delete(dstIdx)\n }\n }\n }\n // Clear exposed rows at bottom\n this.fill(startX, endY - absDelta, clampedWidth, absDelta, {\n char: clearCell.char ?? \" \",\n bg: clearCell.bg ?? null,\n })\n } else {\n // Shift content DOWN: copy rows [startY .. endY - absDelta) to [startY + absDelta .. endY)\n for (let row = endY - 1; row >= startY + absDelta; row--) {\n const dstBase = row * w\n const srcBase = (row - absDelta) * w\n this.cells.copyWithin(dstBase + startX, srcBase + startX, srcBase + endX)\n for (let cx = startX; cx < endX; cx++) {\n this.chars[dstBase + cx] = this.chars[srcBase + cx]!\n const srcIdx = srcBase + cx\n const dstIdx = dstBase + cx\n const fgc = this.fgColors.get(srcIdx)\n if (fgc) {\n this.fgColors.set(dstIdx, fgc)\n this.fgColors.delete(srcIdx)\n } else {\n this.fgColors.delete(dstIdx)\n }\n const bgc = this.bgColors.get(srcIdx)\n if (bgc) {\n this.bgColors.set(dstIdx, bgc)\n this.bgColors.delete(srcIdx)\n } else {\n this.bgColors.delete(dstIdx)\n }\n const ulc = this.underlineColors.get(srcIdx)\n if (ulc) {\n this.underlineColors.set(dstIdx, ulc)\n this.underlineColors.delete(srcIdx)\n } else {\n this.underlineColors.delete(dstIdx)\n }\n const hl = this.hyperlinks.get(srcIdx)\n if (hl) {\n this.hyperlinks.set(dstIdx, hl)\n this.hyperlinks.delete(srcIdx)\n } else {\n this.hyperlinks.delete(dstIdx)\n }\n }\n }\n // Clear exposed rows at top\n this.fill(startX, startY, clampedWidth, absDelta, {\n char: clearCell.char ?? \" \",\n bg: clearCell.bg ?? null,\n })\n }\n }\n\n /**\n * Clone this buffer.\n */\n clone(): TerminalBuffer {\n const copy = new TerminalBuffer(this.width, this.height)\n copy.cells.set(this.cells)\n copy.chars = [...this.chars]\n copy.fgColors = new Map(this.fgColors)\n copy.bgColors = new Map(this.bgColors)\n copy.underlineColors = new Map(this.underlineColors)\n copy.hyperlinks = new Map(this.hyperlinks)\n // Clone starts with all rows CLEAN. The render phase will mark only\n // the rows it modifies as dirty. diffBuffers() then skips clean rows,\n // which are guaranteed identical to the prev buffer (since this is a clone).\n copy._dirtyRows.fill(0)\n copy._minDirtyRow = -1\n copy._maxDirtyRow = -1\n // Deep-copy row metadata\n copy._rowMetadata = this._rowMetadata.map((m) => ({ ...m }))\n // Carry outline snapshots forward so the decoration phase can restore\n // previous outline positions before drawing new ones on the next frame.\n // Shallow copy is fine — snapshot entries are immutable once captured.\n copy.outlineSnapshots = [...this.outlineSnapshots]\n return copy\n }\n\n /**\n * Check if a row has been modified since the last resetDirtyRows() call.\n * Used by diffBuffers() to skip unchanged rows.\n */\n isRowDirty(y: number): boolean {\n if (y < 0 || y >= this.height) return false\n return this._dirtyRows[y] !== 0\n }\n\n /** First dirty row (inclusive), or -1 if no rows are dirty. */\n get minDirtyRow(): number {\n return this._minDirtyRow\n }\n\n /** Last dirty row (inclusive), or -1 if no rows are dirty. */\n get maxDirtyRow(): number {\n return this._maxDirtyRow\n }\n\n /**\n * Reset all dirty row flags to clean.\n * Call after diffing to prepare for the next frame's modifications.\n */\n resetDirtyRows(): void {\n this._dirtyRows.fill(0)\n this._minDirtyRow = -1\n this._maxDirtyRow = -1\n }\n\n /**\n * Mark all rows as dirty.\n * Used when the buffer's dirty rows may not cover all changes relative\n * to a different prev buffer (e.g., after multiple doRender calls where\n * the runtime's prevBuffer skipped intermediate buffers).\n */\n markAllRowsDirty(): void {\n this._dirtyRows.fill(1)\n this._minDirtyRow = 0\n this._maxDirtyRow = this.height - 1\n }\n\n /**\n * Check if two cells at given positions are equal.\n * Used for diffing.\n */\n cellEquals(x: number, y: number, other: TerminalBuffer): boolean {\n if (!this.inBounds(x, y) || !other.inBounds(x, y)) {\n return false\n }\n\n const idx = this.index(x, y)\n const otherIdx = other.index(x, y)\n\n // Quick check: packed metadata must match (mask out SELECTABLE_FLAG — it's\n // selection metadata, not visual output, and must not trigger output diffs)\n const mask = ~SELECTABLE_FLAG\n if ((this.cells[idx]! & mask) !== (other.cells[otherIdx]! & mask)) {\n return false\n }\n\n // Character must match\n if (this.chars[idx] !== other.chars[otherIdx]) {\n return false\n }\n\n // If true color flags are set, check the color values\n const packed = this.cells[idx]!\n if (unpackTrueColorFg(packed)) {\n const a = this.fgColors.get(idx)\n const b = other.fgColors.get(otherIdx)\n if (!colorEquals(a, b)) return false\n }\n if (unpackTrueColorBg(packed!)) {\n const a = this.bgColors.get(idx)\n const b = other.bgColors.get(otherIdx)\n if (!colorEquals(a, b)) return false\n }\n\n // Check underline colors\n const ulA = this.underlineColors.get(idx) ?? null\n const ulB = other.underlineColors.get(otherIdx) ?? null\n if (!colorEquals(ulA, ulB)) return false\n\n // Check hyperlinks\n const hlA = this.hyperlinks.get(idx)\n const hlB = other.hyperlinks.get(otherIdx)\n if (hlA !== hlB) return false\n\n return true\n }\n\n /**\n * Fast check: are all packed metadata values identical for a row?\n * This is a bulk pre-check before per-cell comparison. If metadata differs,\n * we still need per-cell diffing. If metadata matches, we only need to\n * check chars, true color maps, underline colors, and hyperlinks.\n * Returns true if all packed 32-bit values in the row are identical.\n */\n rowMetadataEquals(y: number, other: TerminalBuffer): boolean {\n if (y < 0 || y >= this.height || y >= other.height) return false\n const start = y * this.width\n const otherStart = y * other.width\n const w = Math.min(this.width, other.width)\n // Mask out SELECTABLE_FLAG — it's selection metadata, not visual output\n const mask = ~SELECTABLE_FLAG\n for (let i = 0; i < w; i++) {\n if ((this.cells[start + i]! & mask) !== (other.cells[otherStart + i]! & mask)) return false\n }\n return true\n }\n\n /**\n * Fast check: are all characters identical for a row?\n * Companion to rowMetadataEquals for a two-phase row comparison.\n */\n rowCharsEquals(y: number, other: TerminalBuffer): boolean {\n if (y < 0 || y >= this.height || y >= other.height) return false\n const start = y * this.width\n const otherStart = y * other.width\n const w = Math.min(this.width, other.width)\n for (let i = 0; i < w; i++) {\n if (this.chars[start + i] !== other.chars[otherStart + i]) return false\n }\n return true\n }\n\n /**\n * Check Map-based extras for a row: true color fg/bg, underline colors, hyperlinks.\n * Must be called AFTER rowMetadataEquals confirms packed metadata matches.\n * Only checks cells that have true color flags set (the Maps are only populated\n * for those cells). Also checks underline colors and hyperlinks for all cells.\n */\n rowExtrasEquals(y: number, other: TerminalBuffer): boolean {\n if (y < 0 || y >= this.height || y >= other.height) return false\n const start = y * this.width\n const w = Math.min(this.width, other.width)\n const otherStart = y * other.width\n for (let i = 0; i < w; i++) {\n const idx = start + i\n const otherIdx = otherStart + i\n const packed = this.cells[idx]!\n\n // Check true color fg values\n if ((packed & TRUE_COLOR_FG_FLAG) !== 0) {\n const a = this.fgColors.get(idx)\n const b = other.fgColors.get(otherIdx)\n if (!colorEquals(a, b)) return false\n }\n\n // Check true color bg values\n if ((packed & TRUE_COLOR_BG_FLAG) !== 0) {\n const a = this.bgColors.get(idx)\n const b = other.bgColors.get(otherIdx)\n if (!colorEquals(a, b)) return false\n }\n\n // Check underline colors\n const ulA = this.underlineColors.get(idx) ?? null\n const ulB = other.underlineColors.get(otherIdx) ?? null\n if (!colorEquals(ulA, ulB)) return false\n\n // Check hyperlinks\n const hlA = this.hyperlinks.get(idx)\n const hlB = other.hyperlinks.get(otherIdx)\n if (hlA !== hlB) return false\n }\n return true\n }\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Compare two colors for equality.\n */\nexport function colorEquals(a: Color | undefined, b: Color | undefined): boolean {\n if (a === b) return true\n if (a === null || a === undefined) return b === null || b === undefined\n if (b === null || b === undefined) return false\n if (typeof a === \"number\") return a === b\n if (typeof b === \"number\") return false\n return a.r === b.r && a.g === b.g && a.b === b.b\n}\n\n/**\n * Compare two cells for equality.\n */\nexport function cellEquals(a: Cell, b: Cell): boolean {\n return (\n a.char === b.char &&\n colorEquals(a.fg, b.fg) &&\n colorEquals(a.bg, b.bg) &&\n colorEquals(a.underlineColor, b.underlineColor) &&\n a.wide === b.wide &&\n a.continuation === b.continuation &&\n attrsEquals(a.attrs, b.attrs) &&\n (a.hyperlink ?? undefined) === (b.hyperlink ?? undefined)\n )\n}\n\n/**\n * Compare two CellAttrs for equality.\n */\nexport function attrsEquals(a: CellAttrs, b: CellAttrs): boolean {\n return (\n Boolean(a.bold) === Boolean(b.bold) &&\n Boolean(a.dim) === Boolean(b.dim) &&\n Boolean(a.italic) === Boolean(b.italic) &&\n Boolean(a.underline) === Boolean(b.underline) &&\n (a.underlineStyle ?? false) === (b.underlineStyle ?? false) &&\n Boolean(a.blink) === Boolean(b.blink) &&\n Boolean(a.inverse) === Boolean(b.inverse) &&\n Boolean(a.hidden) === Boolean(b.hidden) &&\n Boolean(a.strikethrough) === Boolean(b.strikethrough)\n )\n}\n\n/**\n * Compare two styles for equality.\n */\nexport function styleEquals(a: Style | null, b: Style | null): boolean {\n if (a === b) return true\n if (!a || !b) return false\n return (\n colorEquals(a.fg, b.fg) &&\n colorEquals(a.bg, b.bg) &&\n colorEquals(a.underlineColor, b.underlineColor) &&\n attrsEquals(a.attrs, b.attrs) &&\n (a.hyperlink ?? undefined) === (b.hyperlink ?? undefined)\n )\n}\n\n/**\n * Create a mutable Cell object for use with readCellInto().\n * The returned object is reusable -- readCellInto() overwrites all fields.\n */\nexport function createMutableCell(): Cell {\n return {\n char: \" \",\n fg: null,\n bg: null,\n underlineColor: null,\n attrs: {},\n wide: false,\n continuation: false,\n hyperlink: undefined,\n }\n}\n\n/**\n * Create a buffer initialized with a specific character.\n */\nexport function createBuffer(width: number, height: number, char = \" \"): TerminalBuffer {\n const buffer = new TerminalBuffer(width, height)\n if (char !== \" \") {\n buffer.fill(0, 0, width, height, { char })\n }\n return buffer\n}\n\n// ============================================================================\n// Buffer Conversion Utilities\n// ============================================================================\n\n/**\n * Convert a terminal buffer to plain text (no ANSI codes).\n * Useful for snapshot testing and text-based assertions.\n *\n * @param buffer The buffer to convert\n * @param options.trimTrailingWhitespace Remove trailing spaces from each line (default: true)\n * @param options.trimEmptyLines Remove trailing empty lines (default: true)\n * @returns Plain text representation of the buffer\n */\nexport function bufferToText(\n buffer: TerminalBuffer,\n options: {\n trimTrailingWhitespace?: boolean\n trimEmptyLines?: boolean\n } = {},\n): string {\n const { trimTrailingWhitespace = true, trimEmptyLines = true } = options\n\n const lines: string[] = []\n\n for (let y = 0; y < buffer.height; y++) {\n let line = \"\"\n // Track string offset for each column (needed because continuation cells\n // are skipped, making string length != column count for wide chars)\n let strOffset = 0\n let contentEdgeStrOffset = 0\n const contentEdge = trimTrailingWhitespace ? getContentEdge(buffer, y) : 0\n for (let x = 0; x < buffer.width; x++) {\n // Use zero-allocation accessors instead of getCell()\n if (buffer.isCellContinuation(x, y)) continue\n line += buffer.getCellChar(x, y)\n strOffset++\n // Track the string offset corresponding to the content edge column\n if (x < contentEdge) {\n contentEdgeStrOffset = strOffset\n }\n }\n if (trimTrailingWhitespace) {\n // Smart trim: use content edge to preserve styled trailing spaces\n // while removing unstyled buffer padding.\n const trimmed = line.trimEnd()\n line = trimmed.length >= contentEdgeStrOffset ? trimmed : line.substring(0, contentEdgeStrOffset)\n }\n lines.push(line)\n }\n\n let result = lines.join(\"\\n\")\n if (trimEmptyLines) {\n // Remove trailing empty lines without stripping spaces from last content line\n while (lines.length > 0 && lines[lines.length - 1]!.length === 0) {\n lines.pop()\n }\n result = lines.join(\"\\n\")\n }\n return result\n}\n\n/**\n * Find the rightmost column with non-default cell content on a row.\n * A default cell has packed metadata === 0 (no fg, bg, attrs) AND char === ' '.\n * Returns the column count (1-indexed), so the content edge for trimming.\n */\nfunction getContentEdge(buffer: TerminalBuffer, y: number): number {\n // Mask out structural flags (wide, continuation) that don't indicate actual content.\n // Also mask SELECTABLE_FLAG (bit 31) — it's selection metadata, not styling.\n // True-color flags DO indicate styled content (they mean fg/bg is set in Maps).\n const FLAG_MASK = ~(WIDE_FLAG | CONTINUATION_FLAG | SELECTABLE_FLAG)\n for (let x = buffer.width - 1; x >= 0; x--) {\n // Skip continuation cells (trailing half of wide chars) — the main cell covers them\n if (buffer.isCellContinuation(x, y)) continue\n // Check if cell has any actual styling (fg, bg, text attrs) after masking structural flags\n const attrs = buffer.getCellAttrs(x, y) & FLAG_MASK\n if (attrs !== 0) return x + 1\n // Check if cell has a non-space character\n if (buffer.getCellChar(x, y) !== \" \") return x + 1\n }\n return 0\n}\n\n/**\n * Convert a terminal buffer to styled ANSI text.\n * Unlike bufferToAnsi, this doesn't include cursor control sequences,\n * making it suitable for displaying in terminals or saving to files.\n *\n * @param buffer The buffer to convert\n * @param options.trimTrailingWhitespace Remove trailing spaces from each line (default: true)\n * @param options.trimEmptyLines Remove trailing empty lines (default: true)\n * @returns ANSI-styled text (no cursor control)\n */\nexport function bufferToStyledText(\n buffer: TerminalBuffer,\n options: {\n trimTrailingWhitespace?: boolean\n trimEmptyLines?: boolean\n } = {},\n): string {\n const { trimTrailingWhitespace = true, trimEmptyLines = true } = options\n\n const lines: string[] = []\n let currentStyle: Style | null = null\n let currentHyperlink: string | undefined\n\n for (let y = 0; y < buffer.height; y++) {\n let line = \"\"\n\n for (let x = 0; x < buffer.width; x++) {\n // getCell allocates a fresh object each call, which is fine here since\n // bufferToStyledText is a utility function, not a hot render path.\n const cell = buffer.getCell(x, y)\n // Skip continuation cells (part of wide character)\n if (cell.continuation) continue\n\n // Check if hyperlink changed (OSC 8 is separate from SGR)\n const cellHyperlink = cell.hyperlink\n if (cellHyperlink !== currentHyperlink) {\n if (currentHyperlink) {\n // Close previous hyperlink using the same format as the open\n line += emitHyperlinkClose(currentHyperlink)\n }\n if (cellHyperlink) {\n line += emitHyperlinkOpen(cellHyperlink)\n }\n currentHyperlink = cellHyperlink\n }\n\n // Check if style changed — emit minimal transition (chalk-compatible)\n const cellStyle: Style = {\n fg: cell.fg,\n bg: cell.bg,\n underlineColor: cell.underlineColor,\n attrs: cell.attrs,\n }\n if (!styleEquals(currentStyle, cellStyle)) {\n line += styleTransitionCodes(currentStyle, cellStyle)\n currentStyle = cellStyle\n }\n\n line += cell.char\n }\n\n // Close any open hyperlink at end of line\n if (currentHyperlink) {\n line += emitHyperlinkClose(currentHyperlink)\n currentHyperlink = undefined\n }\n\n // Reset style at end of line using per-attribute resets (chalk-compatible)\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n line += styleResetCodes(currentStyle)\n currentStyle = null\n }\n\n if (trimTrailingWhitespace) {\n // Need to be careful not to strip ANSI codes\n // Only trim actual whitespace at the end\n line = trimTrailingWhitespacePreservingAnsi(line)\n }\n lines.push(line)\n }\n\n // Final per-attribute reset (chalk-compatible)\n let result = lines.join(\"\\n\")\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n result += styleResetCodes(currentStyle)\n }\n\n if (trimEmptyLines) {\n // Remove empty lines at the end (but preserve ANSI resets)\n result = result.replace(/\\n+$/, \"\")\n }\n\n return result\n}\n\n// ============================================================================\n// Hyperlink Format Helpers\n// ============================================================================\n\n/**\n * Decode hyperlink format metadata from URL prefix.\n * parseAnsiText encodes the original OSC format (C1 vs ESC, BEL vs ST)\n * as a prefix: \\x01<tag>\\x02<url>\n *\n * Tags:\n * c1b = C1 OSC (\\x9d) + BEL (\\x07) terminator\n * c1s = C1 OSC (\\x9d) + ST (\\x1b\\\\) terminator\n * e7b = ESC OSC (\\x1b]) + BEL (\\x07) terminator\n * (no prefix) = ESC OSC + ST (default)\n */\nfunction decodeHyperlinkFormat(encoded: string): {\n url: string\n oscIntro: string\n oscClose: string\n closeIntro: string\n closeTerminator: string\n} {\n if (encoded.charCodeAt(0) === 1) {\n const sepIdx = encoded.indexOf(\"\\x02\")\n if (sepIdx > 0) {\n const tag = encoded.slice(1, sepIdx)\n const url = encoded.slice(sepIdx + 1)\n if (tag === \"c1b\") {\n return {\n url,\n oscIntro: \"\\x9d\",\n oscClose: \"\\x9d\",\n closeIntro: \"\\x9d\",\n closeTerminator: \"\\x07\",\n }\n }\n if (tag === \"c1s\") {\n return {\n url,\n oscIntro: \"\\x9d\",\n oscClose: \"\\x9d\",\n closeIntro: \"\\x9d\",\n closeTerminator: \"\\x1b\\\\\",\n }\n }\n if (tag === \"e7b\") {\n return {\n url,\n oscIntro: \"\\x1b]\",\n oscClose: \"\\x1b]\",\n closeIntro: \"\\x1b]\",\n closeTerminator: \"\\x07\",\n }\n }\n }\n }\n // Default: ESC OSC + ST\n return {\n url: encoded,\n oscIntro: \"\\x1b]\",\n oscClose: \"\\x1b]\",\n closeIntro: \"\\x1b]\",\n closeTerminator: \"\\x1b\\\\\",\n }\n}\n\n/** Emit OSC 8 hyperlink open sequence, respecting format metadata in URL. */\nfunction emitHyperlinkOpen(encoded: string): string {\n const fmt = decodeHyperlinkFormat(encoded)\n return `${fmt.oscIntro}8;;${fmt.url}${fmt.closeTerminator}`\n}\n\n/** Emit OSC 8 hyperlink close sequence, respecting format metadata in URL. */\nfunction emitHyperlinkClose(encoded: string): string {\n const fmt = decodeHyperlinkFormat(encoded)\n return `${fmt.closeIntro}8;;${fmt.closeTerminator}`\n}\n\n// ============================================================================\n// xterm-256 Color Palette\n// ============================================================================\n\n/** Standard xterm-256 color palette as hex strings. */\nconst XTERM_256_PALETTE: string[] = (() => {\n const palette: string[] = new Array(256)\n\n // Colors 0-7: standard colors\n const standard = [\"#000000\", \"#cd0000\", \"#00cd00\", \"#cdcd00\", \"#0000ee\", \"#cd00cd\", \"#00cdcd\", \"#e5e5e5\"]\n // Colors 8-15: bright colors\n const bright = [\"#7f7f7f\", \"#ff0000\", \"#00ff00\", \"#ffff00\", \"#5c5cff\", \"#ff00ff\", \"#00ffff\", \"#ffffff\"]\n for (let i = 0; i < 8; i++) {\n palette[i] = standard[i]!\n palette[i + 8] = bright[i]!\n }\n\n // Colors 16-231: 6x6x6 RGB cube\n const cubeValues = [0, 95, 135, 175, 215, 255]\n for (let i = 0; i < 216; i++) {\n const r = cubeValues[Math.floor(i / 36)]!\n const g = cubeValues[Math.floor((i % 36) / 6)]!\n const b = cubeValues[i % 6]!\n palette[16 + i] =\n \"#\" + r.toString(16).padStart(2, \"0\") + g.toString(16).padStart(2, \"0\") + b.toString(16).padStart(2, \"0\")\n }\n\n // Colors 232-255: grayscale ramp\n for (let i = 0; i < 24; i++) {\n const v = 8 + i * 10\n const hex = v.toString(16).padStart(2, \"0\")\n palette[232 + i] = \"#\" + hex + hex + hex\n }\n\n return palette\n})()\n\n/**\n * Convert a Color value to a CSS color string.\n * Returns null for default/inherit colors.\n */\nfunction colorToCSS(color: Color): string | null {\n if (color === null) return null\n if (typeof color === \"number\") {\n return XTERM_256_PALETTE[color] ?? null\n }\n // DEFAULT_BG sentinel → no CSS color (use inherited/default)\n if (color.r === -1) return null\n return `rgb(${color.r},${color.g},${color.b})`\n}\n\n// ============================================================================\n// Buffer to HTML Conversion\n// ============================================================================\n\n/**\n * Convert a terminal buffer to a full HTML document.\n * Suitable for rendering as a screenshot via headless browser.\n *\n * @param buffer The buffer to convert\n * @param options.fontFamily CSS font-family (default: 'JetBrains Mono, Menlo, monospace')\n * @param options.fontSize CSS font-size in px (default: 14)\n * @param options.theme Color scheme (default: 'dark')\n * @returns Complete HTML document string\n */\nexport function bufferToHTML(\n buffer: TerminalBuffer,\n options: {\n fontFamily?: string\n fontSize?: number\n theme?: \"dark\" | \"light\"\n } = {},\n): string {\n const { fontFamily = \"JetBrains Mono, Menlo, monospace\", fontSize = 14, theme = \"dark\" } = options\n\n const defaultFg = theme === \"dark\" ? \"#d4d4d4\" : \"#1e1e1e\"\n const defaultBg = theme === \"dark\" ? \"#1e1e1e\" : \"#ffffff\"\n\n const htmlLines: string[] = []\n\n for (let y = 0; y < buffer.height; y++) {\n let lineHTML = \"\"\n let currentStyle: Style | null = null\n let spanOpen = false\n let linkOpen = false\n let currentHyperlink: string | undefined\n\n for (let x = 0; x < buffer.width; x++) {\n const cell = buffer.getCell(x, y)\n if (cell.continuation) continue\n\n // Handle hyperlink transitions\n const cellHyperlink = cell.hyperlink\n if (cellHyperlink !== currentHyperlink) {\n if (linkOpen) {\n if (spanOpen) {\n lineHTML += \"</span>\"\n spanOpen = false\n }\n lineHTML += \"</a>\"\n linkOpen = false\n }\n if (cellHyperlink) {\n lineHTML += `<a href=\"${escapeHTML(cellHyperlink)}\">`\n linkOpen = true\n }\n currentHyperlink = cellHyperlink\n }\n\n const cellStyle: Style = {\n fg: cell.fg,\n bg: cell.bg,\n underlineColor: cell.underlineColor,\n attrs: cell.attrs,\n }\n\n if (!styleEquals(currentStyle, cellStyle)) {\n if (spanOpen) {\n lineHTML += \"</span>\"\n spanOpen = false\n }\n const css = styleToCSSProperties(cellStyle, defaultFg, defaultBg)\n if (css) {\n lineHTML += `<span style=\"${css}\">`\n spanOpen = true\n }\n currentStyle = cellStyle\n }\n\n lineHTML += escapeHTML(cell.char)\n }\n\n if (spanOpen) {\n lineHTML += \"</span>\"\n }\n if (linkOpen) {\n lineHTML += \"</a>\"\n currentHyperlink = undefined\n }\n\n htmlLines.push(`<div>${lineHTML}</div>`)\n }\n\n return `<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"margin:0;padding:0;background:${defaultBg};color:${defaultFg};font-family:${fontFamily};font-size:${fontSize}px;line-height:1.2;white-space:pre\">\n${htmlLines.join(\"\\n\")}\n</body>\n</html>`\n}\n\n/**\n * Convert a Style to CSS inline style properties.\n * Returns null if the style is entirely default.\n */\nfunction styleToCSSProperties(style: Style, defaultFg: string, defaultBg: string): string | null {\n const parts: string[] = []\n\n // Handle inverse: swap fg/bg\n let fgColor: string | null\n let bgColor: string | null\n if (style.attrs.inverse) {\n fgColor = colorToCSS(style.bg) ?? defaultBg\n bgColor = colorToCSS(style.fg) ?? defaultFg\n } else {\n fgColor = colorToCSS(style.fg)\n bgColor = colorToCSS(style.bg)\n }\n\n if (fgColor) parts.push(`color:${fgColor}`)\n if (bgColor) parts.push(`background:${bgColor}`)\n if (style.attrs.bold) parts.push(\"font-weight:bold\")\n if (style.attrs.dim) parts.push(\"opacity:0.5\")\n if (style.attrs.italic) parts.push(\"font-style:italic\")\n if (style.attrs.hidden) parts.push(\"visibility:hidden\")\n\n // Text decoration: underline and/or strikethrough\n const decorations: string[] = []\n const underlineStyle = style.attrs.underlineStyle\n if (typeof underlineStyle === \"string\") {\n const cssStyleMap: Record<string, string> = {\n single: \"solid\",\n double: \"double\",\n curly: \"wavy\",\n dotted: \"dotted\",\n dashed: \"dashed\",\n }\n decorations.push(\"underline\")\n const cssStyle = cssStyleMap[underlineStyle]\n if (cssStyle) parts.push(`text-decoration-style:${cssStyle}`)\n const ulColor = colorToCSS(style.underlineColor ?? null)\n if (ulColor) parts.push(`text-decoration-color:${ulColor}`)\n } else if (style.attrs.underline) {\n decorations.push(\"underline\")\n }\n if (style.attrs.strikethrough) decorations.push(\"line-through\")\n if (decorations.length > 0) parts.push(`text-decoration:${decorations.join(\" \")}`)\n\n return parts.length > 0 ? parts.join(\";\") : null\n}\n\n/** Escape special HTML characters. */\nfunction escapeHTML(str: string): string {\n if (str === \" \" || str.length === 0) return str\n return str.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\").replaceAll('\"', \""\")\n}\n\n/**\n * Check if any text attributes are active.\n */\nexport function hasActiveAttrs(attrs: CellAttrs): boolean {\n return !!(\n attrs.bold ||\n attrs.dim ||\n attrs.italic ||\n attrs.underline ||\n attrs.underlineStyle ||\n attrs.blink ||\n attrs.inverse ||\n attrs.hidden ||\n attrs.strikethrough\n )\n}\n\n/**\n * Convert style to ANSI escape sequence.\n *\n * Uses SGR 7 for inverse so terminals correctly swap fg/bg\n * (including default terminal colors that have no explicit ANSI code).\n */\n// =============================================================================\n// Color code helpers (imported from ansi/sgr-codes.ts)\n// =============================================================================\n\n/**\n * Convert style to ANSI escape sequence (chalk-compatible format).\n *\n * Emits only non-default attributes with no reset prefix. Called when there\n * is no previous style context (first cell), so the terminal is already in\n * reset state. Each attribute gets its own \\x1b[Xm sequence.\n */\nexport function styleToAnsiCodes(style: Style): string {\n const fg = style.fg\n const bg = style.bg\n\n let result = \"\"\n\n // Foreground color\n if (fg !== null) {\n result += `\\x1b[${fgColorCode(fg)}m`\n }\n\n // Background color (DEFAULT_BG sentinel = terminal default, skip)\n if (bg !== null && !isDefaultBg(bg)) {\n result += `\\x1b[${bgColorCode(bg)}m`\n }\n\n // Attributes\n if (style.attrs.bold) result += \"\\x1b[1m\"\n if (style.attrs.dim) result += \"\\x1b[2m\"\n if (style.attrs.italic) result += \"\\x1b[3m\"\n\n // Underline: use SGR 4:x if style specified, otherwise simple SGR 4\n const underlineStyle = style.attrs.underlineStyle\n if (typeof underlineStyle === \"string\") {\n const styleMap: Record<string, number> = {\n single: 1,\n double: 2,\n curly: 3,\n dotted: 4,\n dashed: 5,\n }\n const subparam = styleMap[underlineStyle]\n if (subparam !== undefined && subparam !== 0) {\n result += `\\x1b[4:${subparam}m`\n }\n } else if (style.attrs.underline) {\n result += \"\\x1b[4m\" // Simple underline\n }\n\n // Use SGR 7 for inverse — lets the terminal correctly swap fg/bg\n if (style.attrs.inverse) result += \"\\x1b[7m\"\n if (style.attrs.strikethrough) result += \"\\x1b[9m\"\n\n // Underline color (SGR 58)\n if (style.underlineColor !== null && style.underlineColor !== undefined) {\n if (typeof style.underlineColor === \"number\") {\n result += `\\x1b[58;5;${style.underlineColor}m`\n } else {\n result += `\\x1b[58;2;${style.underlineColor.r};${style.underlineColor.g};${style.underlineColor.b}m`\n }\n }\n\n return result\n}\n\n/**\n * Compute the minimal SGR transition between two styles (chalk-compatible).\n *\n * When oldStyle is null (first cell or after reset), falls through to\n * full generation via styleToAnsiCodes. Otherwise, diffs attribute\n * by attribute and emits only changed SGR codes as individual \\x1b[Xm sequences.\n */\nexport function styleTransitionCodes(oldStyle: Style | null, newStyle: Style): string {\n // First cell or after reset — full generation\n if (!oldStyle) return styleToAnsiCodes(newStyle)\n\n // Same style — nothing to emit\n if (styleEquals(oldStyle, newStyle)) return \"\"\n\n let result = \"\"\n const oa = oldStyle.attrs\n const na = newStyle.attrs\n\n // Bold and dim share SGR 22 as their off-code\n const boldChanged = Boolean(oa.bold) !== Boolean(na.bold)\n const dimChanged = Boolean(oa.dim) !== Boolean(na.dim)\n if (boldChanged || dimChanged) {\n const boldOff = boldChanged && !na.bold\n const dimOff = dimChanged && !na.dim\n if (boldOff || dimOff) {\n result += \"\\x1b[22m\"\n if (na.bold) result += \"\\x1b[1m\"\n if (na.dim) result += \"\\x1b[2m\"\n } else {\n if (boldChanged && na.bold) result += \"\\x1b[1m\"\n if (dimChanged && na.dim) result += \"\\x1b[2m\"\n }\n }\n if (Boolean(oa.italic) !== Boolean(na.italic)) {\n result += na.italic ? \"\\x1b[3m\" : \"\\x1b[23m\"\n }\n\n // Underline\n const oldUl = Boolean(oa.underline)\n const newUl = Boolean(na.underline)\n const oldUlStyle = oa.underlineStyle ?? false\n const newUlStyle = na.underlineStyle ?? false\n if (oldUl !== newUl || oldUlStyle !== newUlStyle) {\n if (typeof na.underlineStyle === \"string\") {\n const styleMap: Record<string, number> = {\n single: 1,\n double: 2,\n curly: 3,\n dotted: 4,\n dashed: 5,\n }\n const sub = styleMap[na.underlineStyle]\n if (sub !== undefined && sub !== 0) {\n result += `\\x1b[4:${sub}m`\n } else if (newUl) {\n result += \"\\x1b[4m\"\n } else {\n result += \"\\x1b[24m\"\n }\n } else if (newUl) {\n result += \"\\x1b[4m\"\n } else {\n result += \"\\x1b[24m\"\n }\n }\n\n if (Boolean(oa.inverse) !== Boolean(na.inverse)) {\n result += na.inverse ? \"\\x1b[7m\" : \"\\x1b[27m\"\n }\n if (Boolean(oa.strikethrough) !== Boolean(na.strikethrough)) {\n result += na.strikethrough ? \"\\x1b[9m\" : \"\\x1b[29m\"\n }\n\n // Foreground color\n if (!colorEquals(oldStyle.fg, newStyle.fg)) {\n if (newStyle.fg === null) {\n result += \"\\x1b[39m\"\n } else {\n result += `\\x1b[${fgColorCode(newStyle.fg)}m`\n }\n }\n\n // Background color\n if (!colorEquals(oldStyle.bg, newStyle.bg)) {\n if (newStyle.bg === null) {\n result += \"\\x1b[49m\"\n } else {\n result += `\\x1b[${bgColorCode(newStyle.bg)}m`\n }\n }\n\n // Underline color (SGR 58/59)\n if (!colorEquals(oldStyle.underlineColor, newStyle.underlineColor)) {\n if (newStyle.underlineColor === null || newStyle.underlineColor === undefined) {\n result += \"\\x1b[59m\"\n } else if (typeof newStyle.underlineColor === \"number\") {\n result += `\\x1b[58;5;${newStyle.underlineColor}m`\n } else {\n result += `\\x1b[58;2;${newStyle.underlineColor.r};${newStyle.underlineColor.g};${newStyle.underlineColor.b}m`\n }\n }\n\n return result\n}\n\n/**\n * Emit per-attribute reset codes for all active attributes in a style.\n * Returns empty string if no attributes are active.\n * Uses individual \\x1b[Xm sequences to match chalk's format.\n */\nexport function styleResetCodes(style: Style): string {\n let result = \"\"\n // Attributes (order: underline, bold/dim, italic, strikethrough, inverse — matches chalk close order)\n if (style.attrs.underline || style.attrs.underlineStyle) result += \"\\x1b[24m\"\n if (style.attrs.bold || style.attrs.dim) result += \"\\x1b[22m\"\n if (style.attrs.italic) result += \"\\x1b[23m\"\n if (style.attrs.strikethrough) result += \"\\x1b[29m\"\n if (style.attrs.inverse) result += \"\\x1b[27m\"\n // Colors\n if (style.bg !== null && !isDefaultBg(style.bg)) result += \"\\x1b[49m\"\n if (style.fg !== null) result += \"\\x1b[39m\"\n // Underline color\n if (style.underlineColor !== null && style.underlineColor !== undefined) result += \"\\x1b[59m\"\n return result\n}\n\n/**\n * Trim trailing whitespace from a string while preserving ANSI codes.\n */\nexport function trimTrailingWhitespacePreservingAnsi(str: string): string {\n // Find the last non-whitespace character or ANSI escape\n let lastContentIndex = -1\n let i = 0\n\n while (i < str.length) {\n if (str[i] === \"\\x1b\") {\n // Check for OSC sequence (ESC ] ... ST or BEL)\n if (str[i + 1] === \"]\") {\n // Find the terminator: ST (\\x1b\\\\) or BEL (\\x07)\n let end = -1\n for (let j = i + 2; j < str.length; j++) {\n if (str[j] === \"\\x07\") {\n end = j\n break\n }\n if (str[j] === \"\\x1b\" && str[j + 1] === \"\\\\\") {\n end = j + 1\n break\n }\n }\n if (end !== -1) {\n lastContentIndex = end\n i = end + 1\n continue\n }\n }\n // Found SGR escape - skip the entire sequence\n const end = str.indexOf(\"m\", i)\n if (end !== -1) {\n lastContentIndex = end\n i = end + 1\n continue\n }\n }\n if (str[i] !== \" \" && str[i] !== \"\\t\") {\n lastContentIndex = i\n }\n i++\n }\n\n return str.slice(0, lastContentIndex + 1)\n}\n\n// ============================================================================\n// TextFrame — Immutable Snapshot\n// ============================================================================\n\nimport type { TextFrame, FrameCell, RGB } from \"@silvery/ag/text-frame\"\n\n/**\n * Standard ANSI 256-color palette → RGB lookup.\n * Colors 0-15: standard + bright colors (approximate).\n * Colors 16-231: 6×6×6 color cube.\n * Colors 232-255: grayscale ramp.\n *\n * Exported for the backdrop-fade pipeline pass, which needs to resolve\n * palette-indexed cells to RGB before blending via `@silvery/color`.\n */\nexport function ansi256ToRgb(idx: number): RGB {\n if (idx < 16) {\n // Standard 16 colors (same values used by xterm)\n const table: [number, number, number][] = [\n [0, 0, 0],\n [128, 0, 0],\n [0, 128, 0],\n [128, 128, 0],\n [0, 0, 128],\n [128, 0, 128],\n [0, 128, 128],\n [192, 192, 192],\n [128, 128, 128],\n [255, 0, 0],\n [0, 255, 0],\n [255, 255, 0],\n [0, 0, 255],\n [255, 0, 255],\n [0, 255, 255],\n [255, 255, 255],\n ]\n const [r, g, b] = table[idx]!\n return { r, g, b }\n }\n if (idx < 232) {\n // 6×6×6 color cube (indices 16-231)\n const i = idx - 16\n const r = Math.floor(i / 36)\n const g = Math.floor((i % 36) / 6)\n const b = i % 6\n return {\n r: r ? r * 40 + 55 : 0,\n g: g ? g * 40 + 55 : 0,\n b: b ? b * 40 + 55 : 0,\n }\n }\n // Grayscale ramp (indices 232-255)\n const v = (idx - 232) * 10 + 8\n return { r: v, g: v, b: v }\n}\n\n/** Resolve a buffer Color (number | RGB | null) to FrameCell RGB (RGB | null). */\nfunction resolveColor(color: Color): RGB | null {\n if (color === null) return null\n if (typeof color === \"number\") return ansi256ToRgb(color)\n // RGB object — check for DEFAULT_BG sentinel\n if (color.r === -1) return null\n return color\n}\n\n/** Convert a buffer Cell to an immutable FrameCell with resolved RGB colors. */\nexport function cellToFrameCell(c: Cell): FrameCell {\n const ulStyle = c.attrs.underlineStyle ?? (c.attrs.underline ? (\"single\" as const) : (false as const))\n return {\n char: c.char,\n fg: resolveColor(c.fg),\n bg: resolveColor(c.bg),\n bold: c.attrs.bold ?? false,\n dim: c.attrs.dim ?? false,\n italic: c.attrs.italic ?? false,\n underline: ulStyle,\n underlineColor: resolveColor(c.underlineColor ?? null),\n strikethrough: c.attrs.strikethrough ?? false,\n inverse: c.attrs.inverse ?? false,\n blink: c.attrs.blink ?? false,\n hidden: c.attrs.hidden ?? false,\n wide: c.wide,\n continuation: c.continuation,\n hyperlink: c.hyperlink ?? null,\n }\n}\n\n/** Empty FrameCell returned for out-of-bounds access. */\nexport const EMPTY_FRAME_CELL: FrameCell = Object.freeze({\n char: \" \",\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false as const,\n underlineColor: null,\n strikethrough: false,\n inverse: false,\n blink: false,\n hidden: false,\n wide: false,\n continuation: false,\n hyperlink: null,\n})\n\n/**\n * Create an immutable TextFrame snapshot from a TerminalBuffer.\n *\n * The snapshot is detached from the source buffer — mutations to the buffer\n * after this call do not affect the frame. Text and ANSI are lazily computed\n * on first access.\n *\n * This is the primary public read API for rendered output. Internal pipeline\n * code (diff-buffers, render phases) continues to use TerminalBuffer directly.\n */\nexport function createTextFrame(buffer: TerminalBuffer): TextFrame {\n const width = buffer.width\n const height = buffer.height\n\n // Snapshot: clone the buffer lazily — only when text/ansi/cell is accessed.\n // The clone ensures lazy computation is safe from mutations to the original.\n // At 400x200 (80K cells), eager clone + cellData construction costs ~10ms.\n // Lazy: O(1) frame creation, clone on first access.\n let _snapshot: TerminalBuffer | undefined\n function getSnapshot(): TerminalBuffer {\n if (!_snapshot) _snapshot = buffer.clone()\n return _snapshot\n }\n\n // Cell data: lazy — only built on first cell() access.\n // At 400x200, eager construction creates 80,000 Cell objects (~10ms).\n // Most frames only access .text or .ansi, never individual cells.\n let _cellData: Cell[] | undefined\n function getCellData(): Cell[] {\n if (!_cellData) {\n const snap = getSnapshot()\n _cellData = new Array(width * height)\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n _cellData[y * width + x] = snap.getCell(x, y)\n }\n }\n }\n return _cellData\n }\n\n // Lazy caches\n let _text: string | undefined\n let _ansi: string | undefined\n let _lines: string[] | undefined\n\n const frame: TextFrame = {\n width,\n height,\n\n get text(): string {\n if (_text === undefined) _text = bufferToText(getSnapshot())\n return _text\n },\n\n get ansi(): string {\n if (_ansi === undefined) _ansi = bufferToStyledText(getSnapshot())\n return _ansi\n },\n\n get lines(): string[] {\n if (_lines === undefined) _lines = frame.text.split(\"\\n\")\n return _lines\n },\n\n cell(col: number, row: number): FrameCell {\n if (col < 0 || col >= width || row < 0 || row >= height) {\n return EMPTY_FRAME_CELL\n }\n return cellToFrameCell(getCellData()[row * width + col]!)\n },\n\n containsText(text: string): boolean {\n return frame.text.includes(text)\n },\n }\n\n return frame\n}\n","/**\n * Text Sizing Protocol (OSC 66) -- Kitty v0.40+\n *\n * Lets the app specify how many cells a character should occupy.\n * This solves the measurement/rendering mismatch for Private Use Area (PUA)\n * characters (nerdfont icons, powerline symbols) that `string-width` reports\n * as 1-cell but terminals render as 2-cell.\n *\n * When OSC 66 is used with w=2, both the app's layout engine and the terminal\n * agree on the character width, eliminating truncation and misalignment.\n *\n * Protocol format:\n * ESC ] 66 ; w=<width> ; <text> BEL\n *\n * @see https://sw.kovidgoyal.net/kitty/text-sizing-protocol/\n */\n\nconst OSC = \"\\x1b]\"\nconst ST = \"\\x07\" // BEL terminator (more compatible than ESC \\)\n\n/**\n * Wrap text in an OSC 66 sequence that tells the terminal to render it\n * in exactly `width` cells.\n */\nexport function textSized(text: string, width: number): string {\n return `${OSC}66;w=${width};${text}${ST}`\n}\n\n// ============================================================================\n// Text Scale (font size multiplier) — OSC 66 s= parameter\n// ============================================================================\n\n/**\n * Generate an OSC 66 escape sequence to set the text scale (font size).\n *\n * The scale is a floating-point multiplier:\n * - 2.0 = double size (headings)\n * - 1.0 = normal\n * - 0.5 = half size (small print, annotations)\n *\n * The scale applies to all subsequent text until reset or changed.\n * Only supported in Kitty v0.40+.\n *\n * @param scale - Font size multiplier (e.g. 2.0 for double, 0.5 for half)\n */\nexport function textScaled(scale: number): string {\n return `${OSC}66;s=${scale}${ST}`\n}\n\n/**\n * Generate an OSC 66 escape sequence to reset text scale to default (1.0).\n */\nexport function resetTextScale(): string {\n return `${OSC}66;s=1${ST}`\n}\n\n/**\n * Check if a code point is in the Private Use Area (PUA).\n * Covers BMP PUA (U+E000-U+F8FF) and Supplementary PUA-A/B.\n */\nexport function isPrivateUseArea(cp: number): boolean {\n return (\n (cp >= 0xe000 && cp <= 0xf8ff) || // BMP PUA\n (cp >= 0xf0000 && cp <= 0xffffd) || // Supplementary PUA-A\n (cp >= 0x100000 && cp <= 0x10fffd) // Supplementary PUA-B\n )\n}\n\n/**\n * Check if text sizing is likely supported based on environment variables.\n * This is a fast synchronous check -- use detectTextSizingSupport() for\n * definitive detection via cursor position reports.\n */\nexport function isTextSizingLikelySupported(): boolean {\n const termProgram = process.env.TERM_PROGRAM?.toLowerCase() ?? \"\"\n const termVersion = process.env.TERM_PROGRAM_VERSION ?? \"\"\n\n // Kitty v0.40+ supports OSC 66\n if (termProgram === \"kitty\") {\n const parts = termVersion.split(\".\")\n const major = Number(parts[0]) || 0\n const minor = Number(parts[1]) || 0\n if (major > 0 || (major === 0 && minor >= 40)) return true\n }\n\n // Ghostty parses OSC 66 but does NOT render it (as of v1.3.0, March 2026).\n // Wrapping text in OSC 66 causes Ghostty to swallow the content silently.\n // Re-enable when Ghostty ships actual text sizing GUI support.\n // if (termProgram === \"ghostty\") return true\n\n return false\n}\n\n/** Result of text sizing probe */\nexport interface TextSizingProbeResult {\n supported: boolean\n widthOnly: boolean\n}\n\n/**\n * Cache of probe results by terminal fingerprint.\n * Persists across app instances in the same process so the probe\n * only runs once per terminal type.\n */\nconst probeCache = new Map<string, TextSizingProbeResult>()\n\n/**\n * Get a terminal fingerprint for cache keying.\n * Combines TERM_PROGRAM + TERM_PROGRAM_VERSION to uniquely identify\n * the terminal type. Different versions may add/remove OSC 66 support.\n */\nexport function getTerminalFingerprint(): string {\n const program = process.env.TERM_PROGRAM ?? \"unknown\"\n const version = process.env.TERM_PROGRAM_VERSION ?? \"unknown\"\n return `${program}@${version}`\n}\n\n/**\n * Get a cached probe result for the current terminal, if available.\n */\nexport function getCachedProbeResult(): TextSizingProbeResult | undefined {\n return probeCache.get(getTerminalFingerprint())\n}\n\n/**\n * Store a probe result in the cache for the current terminal.\n */\nexport function setCachedProbeResult(result: TextSizingProbeResult): void {\n probeCache.set(getTerminalFingerprint(), result)\n}\n\n/**\n * Clear the probe cache. Useful for testing.\n */\nexport function clearProbeCache(): void {\n probeCache.clear()\n}\n\n/**\n * Detect terminal support for the text sizing protocol.\n * Uses cursor position reports (CPR) to check if OSC 66 advances the cursor\n * by the specified width.\n *\n * Results are cached by terminal fingerprint so the probe only runs once\n * per terminal type per process.\n *\n * @returns Object with `supported` and `widthOnly` flags:\n * - supported=true, widthOnly=false: full support (scale + width)\n * - supported=true, widthOnly=true: width mode only\n * - supported=false: no support\n */\nexport async function detectTextSizingSupport(\n write: (data: string) => void,\n read: () => Promise<string>,\n timeout = 1000,\n): Promise<TextSizingProbeResult> {\n // Check cache first\n const cached = getCachedProbeResult()\n if (cached !== undefined) return cached\n\n // Detection sequence:\n // 1. CR to column 0\n // 2. OSC 66 w=2 with a space character\n // 3. Request CPR (cursor position report)\n // If cursor is at column 3 (1-indexed), w=2 worked\n const testSequence = \"\\r\" + textSized(\" \", 2) + \"\\x1b[6n\" + \"\\r\\x1b[K\"\n write(testSequence)\n\n try {\n const response = await Promise.race([\n read(),\n new Promise<string>((_resolve, reject) => setTimeout(() => reject(new Error(\"timeout\")), timeout)),\n ])\n\n // Parse CPR response: ESC [ row ; col R\n const match = response.match(/\\x1b\\[(\\d+);(\\d+)R/)\n if (match) {\n const col = Number(match[2])\n // Column 3 means the space occupied 2 cells (col is 1-indexed, started at 1)\n if (col === 3) {\n const result: TextSizingProbeResult = { supported: true, widthOnly: false }\n setCachedProbeResult(result)\n return result\n }\n }\n\n const result: TextSizingProbeResult = { supported: false, widthOnly: false }\n setCachedProbeResult(result)\n return result\n } catch {\n const result: TextSizingProbeResult = { supported: false, widthOnly: false }\n setCachedProbeResult(result)\n return result\n }\n}\n","/**\n * Unicode handling for Silvery.\n *\n * Uses Intl.Segmenter for proper grapheme cluster segmentation and\n * string-width for accurate terminal width calculation.\n *\n * Key concepts:\n * - Grapheme: A user-perceived character (may be multiple code points)\n * - Display width: How many terminal columns a character occupies (0, 1, or 2)\n * - Wide characters: CJK ideographs, emoji, etc. that take 2 columns\n * - Combining characters: Diacritics, emoji modifiers that take 0 columns\n */\n\nimport { BG_OVERRIDE_CODE } from \"./ansi/index\"\nimport sliceAnsi from \"slice-ansi\"\nimport stringWidth from \"string-width\"\nimport { type Cell, type Style, type TerminalBuffer, type UnderlineStyle, createMutableCell } from \"./buffer\"\nimport { isPrivateUseArea } from \"./text-sizing\"\n\n// Re-export for consumers of silvery\nexport { BG_OVERRIDE_CODE }\n\n// ============================================================================\n// Grapheme Segmentation\n// ============================================================================\n\n// Singleton Intl.Segmenter instance (stateless, reusable)\nconst segmenter = new Intl.Segmenter(undefined, { granularity: \"grapheme\" })\n\n// ============================================================================\n// Performance: LRU Cache for displayWidth\n// ============================================================================\n\n/**\n * Simple LRU cache for displayWidth results.\n * String width calculation is expensive (~8us for ASCII text),\n * but the same strings are often measured repeatedly.\n */\nclass DisplayWidthCache {\n private cache = new Map<string, number>()\n private maxSize: number\n\n constructor(maxSize = 1000) {\n this.maxSize = maxSize\n }\n\n get(text: string): number | undefined {\n const cached = this.cache.get(text)\n if (cached !== undefined) {\n // Move to end (most recently used)\n this.cache.delete(text)\n this.cache.set(text, cached)\n }\n return cached\n }\n\n set(text: string, width: number): void {\n // Evict oldest if at capacity\n if (this.cache.size >= this.maxSize) {\n const firstKey = this.cache.keys().next().value\n if (firstKey !== undefined) {\n this.cache.delete(firstKey)\n }\n }\n this.cache.set(text, width)\n }\n\n clear(): void {\n this.cache.clear()\n }\n}\n\n// Cache size: 10K entries should be enough for most TUI apps\n// Each entry is a string key + number value, ~100 bytes, so 10K = ~1MB\nconst displayWidthCache = new DisplayWidthCache(10000)\n\n// ============================================================================\n// Text Sizing Protocol (OSC 66) State\n// ============================================================================\n\n/**\n * Default text-presentation emoji width: true (modern terminal assumption).\n * Modern terminals (Ghostty, iTerm, Kitty) render text-presentation emoji\n * as 2-wide. Terminal.app renders them as 1-wide.\n */\nconst DEFAULT_TEXT_EMOJI_WIDE = true\n\n/**\n * Default text sizing mode: false.\n * When enabled via a Measurer, PUA characters are treated as 2-wide.\n */\nconst DEFAULT_TEXT_SIZING_ENABLED = false\n\n// ============================================================================\n// Scoped Measurer (pipeline execution context)\n// ============================================================================\n\n/**\n * Active measurer for the current pipeline execution.\n * Set by runWithMeasurer() during pipeline execution, restored after.\n * When null, module-level functions use the lazy default measurer.\n */\nlet _scopedMeasurer: WidthMeasurer | null = null\n\n/**\n * Run a function with a specific measurer as the active scope.\n * Module-level convenience functions (graphemeWidth, displayWidth, etc.)\n * will use this measurer instead of the lazy default for the duration.\n */\nexport function runWithMeasurer<T>(measurer: WidthMeasurer, fn: () => T): T {\n const prev = _scopedMeasurer\n _scopedMeasurer = measurer\n try {\n return fn()\n } finally {\n _scopedMeasurer = prev\n }\n}\n\n/**\n * @deprecated Use createWidthMeasurer() with { textEmojiWide } instead.\n * Kept for backward compatibility but is a no-op.\n */\nexport function setTextEmojiWide(_wide: boolean): void {\n // No-op: use createWidthMeasurer() with { textEmojiWide } instead\n}\n\n/**\n * @deprecated Use createWidthMeasurer() with { textSizingEnabled } instead.\n * Kept for backward compatibility but is a no-op.\n */\nexport function setTextSizingEnabled(_enabled: boolean): void {\n // No-op: use createWidthMeasurer() with { textSizingEnabled } instead\n}\n\n/**\n * Check if text sizing mode is currently enabled.\n * Returns the default (false) since globals have been removed.\n * Use measurer.textSizingEnabled for scoped queries.\n */\nexport function isTextSizingEnabled(): boolean {\n if (_scopedMeasurer) return _scopedMeasurer.textSizingEnabled\n return DEFAULT_TEXT_SIZING_ENABLED\n}\n\n// ============================================================================\n// Width Measurer (per-term instance, no globals)\n// ============================================================================\n\n/**\n * Width measurement functions scoped to specific terminal capabilities.\n * Created by createWidthMeasurer() from TerminalCaps.\n */\nexport interface Measurer {\n readonly textEmojiWide: boolean\n readonly textSizingEnabled: boolean\n /** Height of one line in measurement units. Terminal: 1 (one cell row). Canvas pixel: e.g. 20. */\n readonly lineHeight: number\n displayWidth(text: string): number\n displayWidthAnsi(text: string): number\n graphemeWidth(grapheme: string): number\n wrapText(text: string, width: number, trim?: boolean, hard?: boolean): string[]\n sliceByWidth(text: string, maxWidth: number): string\n sliceByWidthFromEnd(text: string, maxWidth: number): string\n}\n\n/** Backward-compatible alias for Measurer. */\nexport type WidthMeasurer = Measurer\n\n/**\n * Strip OSC 8 hyperlink sequences before passing to slice-ansi.\n * slice-ansi doesn't understand OSC sequences and corrupts them.\n */\nconst OSC8_RE = /\\x1b\\]8;;[^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)/g\nfunction stripOsc8ForSlice(text: string): string {\n return text.replace(OSC8_RE, \"\")\n}\n\n/**\n * Create a width measurer scoped to terminal capabilities.\n * Each measurer has its own caches (no shared global state).\n */\nexport function createWidthMeasurer(caps: { textEmojiWide?: boolean; textSizingEnabled?: boolean } = {}): Measurer {\n const textEmojiWide = caps.textEmojiWide ?? true\n const textSizingEnabled = caps.textSizingEnabled ?? false\n const cache = new DisplayWidthCache(10000)\n\n function measuredGraphemeWidth(grapheme: string): number {\n const width = stringWidth(grapheme)\n if (width !== 1) return width\n if (textEmojiWide && isTextPresentationEmoji(grapheme)) return 2\n if (textSizingEnabled) {\n const cp = grapheme.codePointAt(0)\n if (cp !== undefined && isPrivateUseArea(cp)) return 2\n }\n return width\n }\n\n function measuredDisplayWidth(text: string): number {\n const cached = cache.get(text)\n if (cached !== undefined) return cached\n\n let width: number\n const needsSlowPath = MAY_CONTAIN_TEXT_EMOJI.test(text) || (textSizingEnabled && MAY_CONTAIN_PUA.test(text))\n if (!needsSlowPath) {\n width = stringWidth(text)\n } else {\n const stripped = stripAnsi(text)\n width = 0\n for (const grapheme of splitGraphemes(stripped)) {\n width += measuredGraphemeWidth(grapheme)\n }\n }\n cache.set(text, width)\n return width\n }\n\n function measuredDisplayWidthAnsi(text: string): number {\n return measuredDisplayWidth(stripAnsi(text))\n }\n\n function measuredSliceByWidth(text: string, maxWidth: number): string {\n if (hasAnsi(text)) {\n return sliceAnsi(stripOsc8ForSlice(text), 0, maxWidth)\n }\n let width = 0\n let result = \"\"\n const graphemes = splitGraphemes(text)\n for (const grapheme of graphemes) {\n const gWidth = measuredGraphemeWidth(grapheme)\n if (width + gWidth > maxWidth) break\n result += grapheme\n width += gWidth\n }\n return result\n }\n\n function measuredSliceByWidthFromEnd(text: string, maxWidth: number): string {\n const totalWidth = measuredDisplayWidthAnsi(text)\n if (totalWidth <= maxWidth) return text\n if (hasAnsi(text)) {\n const cleaned = stripOsc8ForSlice(text)\n const cleanedWidth = measuredDisplayWidthAnsi(cleaned)\n const startIndex = cleanedWidth - maxWidth\n return sliceAnsi(cleaned, startIndex)\n }\n const graphemes = splitGraphemes(text)\n let width = 0\n let startIdx = graphemes.length\n for (let i = graphemes.length - 1; i >= 0; i--) {\n const gWidth = measuredGraphemeWidth(graphemes[i]!)\n if (width + gWidth > maxWidth) break\n width += gWidth\n startIdx = i\n }\n return graphemes.slice(startIdx).join(\"\")\n }\n\n function measuredWrapText(text: string, width: number, trim?: boolean, hard?: boolean): string[] {\n return wrapTextWithMeasurer(text, width, measurer, trim ?? false, hard ?? false)\n }\n\n const measurer: Measurer = {\n textEmojiWide,\n textSizingEnabled,\n lineHeight: 1,\n displayWidth: measuredDisplayWidth,\n displayWidthAnsi: measuredDisplayWidthAnsi,\n graphemeWidth: measuredGraphemeWidth,\n wrapText: measuredWrapText,\n sliceByWidth: measuredSliceByWidth,\n sliceByWidthFromEnd: measuredSliceByWidthFromEnd,\n }\n\n return measurer\n}\n\n/** Alias for createWidthMeasurer. */\nexport const createMeasurer = createWidthMeasurer\n\n// ============================================================================\n// Default Measurer (lazy singleton for module-level convenience functions)\n// ============================================================================\n\nlet _defaultMeasurer: Measurer | undefined\n\n/** Get the default measurer (lazy init, uses default caps). */\nfunction getDefaultMeasurer(): Measurer {\n if (!_defaultMeasurer) {\n _defaultMeasurer = createWidthMeasurer()\n }\n return _defaultMeasurer\n}\n\n/**\n * @deprecated Use createWidthMeasurer() and pass the measurer explicitly.\n * Kept as a no-op for backward compatibility.\n */\nexport function withMeasurer<T>(_measurer: WidthMeasurer, fn: () => T): T {\n return fn()\n}\n\n/**\n * Split a string into grapheme clusters.\n * Each grapheme is a user-perceived character that may consist of\n * multiple Unicode code points.\n *\n * Examples:\n * - \"cafe\\u0301\" (café with combining accent) -> [\"c\", \"a\", \"f\", \"e\\u0301\"]\n * - \"👨👩👧\" (family emoji) -> [\"👨👩👧\"]\n * - \"한국어\" -> [\"한\", \"국\", \"어\"]\n */\nexport function splitGraphemes(text: string): string[] {\n return [...segmenter.segment(text)].map((s) => s.segment)\n}\n\n/**\n * Count the number of graphemes in a string.\n */\nexport function graphemeCount(text: string): number {\n let count = 0\n for (const _ of segmenter.segment(text)) count++\n return count\n}\n\n// ============================================================================\n// Emoji Width Correction\n// ============================================================================\n\n/**\n * Regex for Extended_Pictographic characters that have default text presentation.\n * These characters are reported as width 1 by string-width (per Unicode EAW),\n * but most modern terminals render them as 2 columns wide using emoji glyphs.\n *\n * Specifically: Extended_Pictographic AND NOT Emoji_Presentation.\n * Examples: ⚠ (U+26A0), ☑ (U+2611), ✈ (U+2708), ❤ (U+2764)\n * Counter-examples: 📁 (U+1F4C1) has Emoji_Presentation so string-width is correct.\n *\n * Uses the RGI_Emoji regex with VS16 to detect characters that support\n * emoji presentation -- if char+VS16 is RGI emoji, the terminal likely\n * renders the bare char as 2-wide.\n */\nconst TEXT_PRESENTATION_EMOJI_REGEX = /^\\p{Extended_Pictographic}$/u\nconst EMOJI_PRESENTATION_REGEX = /^\\p{Emoji_Presentation}$/u\nconst RGI_EMOJI_REGEX = /^\\p{RGI_Emoji}$/v\n\n/**\n * Cache for isTextPresentationEmoji results.\n * Maps first code point to boolean.\n */\nconst textPresentationEmojiCache = new Map<number, boolean>()\n\n/**\n * Check if a grapheme is a text-presentation emoji that terminals render wide.\n *\n * Returns true for characters that are Extended_Pictographic, do NOT have\n * the Emoji_Presentation property, but become RGI emoji when followed by\n * VS16 (U+FE0F). These characters are rendered as 2 columns in most\n * modern terminals despite string-width reporting width 1.\n */\nexport function isTextPresentationEmoji(grapheme: string): boolean {\n const cp = grapheme.codePointAt(0)\n if (cp === undefined) return false\n\n // Check cache\n const cached = textPresentationEmojiCache.get(cp)\n if (cached !== undefined) return cached\n\n // Multi-codepoint graphemes (with VS16, ZWJ, etc.) are already handled\n // correctly by string-width. Only check single-codepoint graphemes.\n const singleChar = String.fromCodePoint(cp)\n if (singleChar.length !== grapheme.length) {\n textPresentationEmojiCache.set(cp, false)\n return false\n }\n\n // Must be Extended_Pictographic but NOT Emoji_Presentation\n const isExtPict = TEXT_PRESENTATION_EMOJI_REGEX.test(grapheme)\n const isEmojiPres = EMOJI_PRESENTATION_REGEX.test(grapheme)\n if (!isExtPict || isEmojiPres) {\n textPresentationEmojiCache.set(cp, false)\n return false\n }\n\n // Check if adding VS16 makes it an RGI emoji sequence\n const withVs16 = grapheme + \"\\uFE0F\"\n const result = RGI_EMOJI_REGEX.test(withVs16)\n textPresentationEmojiCache.set(cp, result)\n return result\n}\n\n// ============================================================================\n// Private Use Area (PUA) — Nerdfont / Powerline Icons\n// ============================================================================\n\n/**\n * Append VS16 (U+FE0F) to emoji characters that have default text presentation.\n *\n * Use this to normalize icon characters for consistent terminal rendering.\n * Characters that already have emoji presentation or VS16 are returned unchanged.\n *\n * @example\n * ```ts\n * ensureEmojiPresentation('⚠') // '⚠\\uFE0F' (⚠️)\n * ensureEmojiPresentation('☑') // '☑\\uFE0F' (☑️)\n * ensureEmojiPresentation('☐') // '☐' (unchanged, not an emoji)\n * ensureEmojiPresentation('📁') // '📁' (unchanged, already emoji presentation)\n * ```\n */\nexport function ensureEmojiPresentation(char: string): string {\n if (char.includes(\"\\uFE0F\")) return char // Already has VS16\n if (isTextPresentationEmoji(char)) return char + \"\\uFE0F\"\n return char\n}\n\n// ============================================================================\n// Display Width Calculation\n// ============================================================================\n\n/**\n * Regex to detect strings that MAY contain text-presentation emoji.\n * Used as a fast pre-check before the more expensive grapheme-based calculation.\n * Covers the Unicode blocks where Extended_Pictographic characters live:\n * - Miscellaneous Technical (U+2300-U+23FF)\n * - Miscellaneous Symbols (U+2600-U+26FF)\n * - Dingbats (U+2700-U+27BF)\n * - Miscellaneous Symbols and Arrows (U+2B00-U+2BFF)\n * - Other scattered ranges\n */\nconst MAY_CONTAIN_TEXT_EMOJI =\n /[\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]/\n\n/**\n * Fast pre-check regex for BMP Private Use Area characters (U+E000-U+F8FF).\n * Used to gate the slow grapheme-by-grapheme path when text sizing is enabled.\n */\nconst MAY_CONTAIN_PUA = /[\\uE000-\\uF8FF]/\n\n/**\n * Get the display width of a string (number of terminal columns).\n * Uses string-width which handles:\n * - Wide characters (CJK) -> 2 columns\n * - Regular ASCII -> 1 column\n * - Zero-width characters (combining, ZWJ) -> 0 columns\n * - Emoji -> varies (1 or 2)\n * - ANSI escape sequences -> 0 columns (stripped)\n *\n * Corrects string-width for text-presentation emoji characters\n * (e.g., ⚠ U+26A0) that terminals render as 2 columns wide.\n *\n * Results are cached for performance.\n */\nexport function displayWidth(text: string): number {\n if (_scopedMeasurer) return _scopedMeasurer.displayWidth(text)\n // Check cache first\n const cached = displayWidthCache.get(text)\n if (cached !== undefined) {\n return cached\n }\n\n let width: number\n // Fast path: if text cannot contain text-presentation emoji, use string-width directly.\n // Default measurer does not enable text sizing, so PUA check uses the constant default.\n const needsSlowPath = MAY_CONTAIN_TEXT_EMOJI.test(text) || (DEFAULT_TEXT_SIZING_ENABLED && MAY_CONTAIN_PUA.test(text))\n if (!needsSlowPath) {\n width = stringWidth(text)\n } else {\n // Slow path: strip ANSI codes first (they'd inflate the grapheme count),\n // then split into graphemes and sum corrected widths\n const stripped = stripAnsi(text)\n width = 0\n for (const grapheme of splitGraphemes(stripped)) {\n width += graphemeWidth(grapheme)\n }\n }\n\n displayWidthCache.set(text, width)\n return width\n}\n\n/**\n * Get the display width of a single grapheme.\n *\n * Overrides string-width for characters that are Extended_Pictographic with\n * default text presentation. These characters (e.g., ⚠ U+26A0, ☑ U+2611)\n * are reported as width 1 by string-width (per Unicode EAW tables), but most\n * modern terminals render them as 2 columns wide using emoji glyphs.\n *\n * The mismatch causes text after these characters to be placed at the wrong\n * column, leading to truncation or overlap.\n */\nexport function graphemeWidth(grapheme: string): number {\n if (_scopedMeasurer) return _scopedMeasurer.graphemeWidth(grapheme)\n const width = stringWidth(grapheme)\n // If string-width already says 2 (or 0), trust it\n if (width !== 1) return width\n // Check if this is a text-presentation emoji that terminals render wide.\n // Uses DEFAULT_TEXT_EMOJI_WIDE (true) — assumes modern terminal.\n if (DEFAULT_TEXT_EMOJI_WIDE && isTextPresentationEmoji(grapheme)) return 2\n // Default module-level function does not enable text sizing.\n // Scoped measurers handle PUA via their own graphemeWidth.\n if (DEFAULT_TEXT_SIZING_ENABLED) {\n const cp = grapheme.codePointAt(0)\n if (cp !== undefined && isPrivateUseArea(cp)) return 2\n }\n return width\n}\n\n/**\n * Check if a grapheme is a wide character (takes 2 columns).\n */\nexport function isWideGrapheme(grapheme: string): boolean {\n return graphemeWidth(grapheme) === 2\n}\n\n/**\n * Check if a grapheme is zero-width (combining character, ZWJ, etc.).\n */\nexport function isZeroWidthGrapheme(grapheme: string): boolean {\n return stringWidth(grapheme) === 0\n}\n\n// ============================================================================\n// Text Manipulation\n// ============================================================================\n\n/**\n * Truncate a string to fit within a given display width.\n * Handles wide characters and ANSI escape sequences (including OSC 8 hyperlinks) correctly.\n *\n * @param text - The text to truncate (may contain ANSI escape sequences)\n * @param maxWidth - Maximum display width\n * @param ellipsis - Ellipsis to append if truncated (default: \"...\")\n * @returns Truncated string\n */\nexport function truncateText(\n text: string,\n maxWidth: number,\n ellipsis = \"\\u2026\", // Unicode ellipsis (single character)\n): string {\n const textWidth = displayWidth(text)\n\n // No truncation needed\n if (textWidth <= maxWidth) {\n return text\n }\n\n const ellipsisWidth = displayWidth(ellipsis)\n const targetWidth = maxWidth - ellipsisWidth\n\n if (targetWidth <= 0) {\n // Not enough space for even the ellipsis\n return maxWidth > 0 ? ellipsis.slice(0, maxWidth) : \"\"\n }\n\n // Use ANSI-aware grapheme splitting when text contains escape sequences\n // (including OSC 8 hyperlinks) to avoid counting escape bytes as visible width.\n const graphemes = hasAnsi(text) ? splitGraphemesAnsiAware(text) : splitGraphemes(text)\n let result = \"\"\n let currentWidth = 0\n\n for (const grapheme of graphemes) {\n const gWidth = graphemeWidth(grapheme)\n if (currentWidth + gWidth > targetWidth) {\n break\n }\n result += grapheme\n currentWidth += gWidth\n }\n\n return result + ellipsis\n}\n\n/**\n * Pad a string to a given display width.\n *\n * @param text - The text to pad\n * @param width - Target display width\n * @param align - Alignment: 'left', 'right', or 'center'\n * @param padChar - Character to use for padding (default: space)\n * @returns Padded string\n */\nexport function padText(\n text: string,\n width: number,\n align: \"left\" | \"right\" | \"center\" = \"left\",\n padChar = \" \",\n): string {\n const textWidth = displayWidth(text)\n const padWidth = width - textWidth\n\n if (padWidth <= 0) {\n return text\n }\n\n const padCharWidth = displayWidth(padChar)\n if (padCharWidth === 0) {\n // Can't pad with zero-width characters\n return text\n }\n\n // Calculate number of pad characters needed\n const padCount = Math.floor(padWidth / padCharWidth)\n\n switch (align) {\n case \"left\":\n return text + padChar.repeat(padCount)\n case \"right\":\n return padChar.repeat(padCount) + text\n case \"center\": {\n const leftPad = Math.floor(padCount / 2)\n const rightPad = padCount - leftPad\n return padChar.repeat(leftPad) + text + padChar.repeat(rightPad)\n }\n }\n}\n\n/**\n * Constrain text to width and height limits.\n * Combines wrapping and truncation to fit text in a box.\n *\n * @param text - Text to constrain (may contain ANSI codes)\n * @param width - Maximum display width per line\n * @param maxLines - Maximum number of lines\n * @param pad - If true, pad lines to full width\n * @param ellipsis - Custom ellipsis character (default: \"…\")\n * @returns Object with lines array and truncated flag\n */\nexport function constrainText(\n text: string,\n width: number,\n maxLines: number,\n pad = false,\n ellipsis = \"…\",\n): { lines: string[]; truncated: boolean } {\n const allLines = wrapText(text, width)\n const truncated = allLines.length > maxLines\n let lines = allLines.slice(0, maxLines)\n\n if (truncated && lines.length > 0) {\n const lastIdx = lines.length - 1\n const lastLine = lines[lastIdx]\n if (lastLine) {\n const ellipsisLen = displayWidth(ellipsis)\n const lastLineLen = displayWidth(lastLine)\n if (lastLineLen + ellipsisLen <= width) {\n lines[lastIdx] = lastLine + ellipsis\n } else {\n lines[lastIdx] = truncateText(lastLine, width, ellipsis)\n }\n }\n }\n\n if (pad) {\n lines = lines.map((line) => padText(line, width))\n }\n\n return { lines, truncated }\n}\n\n/**\n * Check if a grapheme is a word boundary character (space, hyphen, etc.)\n */\nexport function isWordBoundary(grapheme: string): boolean {\n // Common word boundary characters\n return grapheme === \" \" || grapheme === \"-\" || grapheme === \"\\t\"\n}\n\n/**\n * Look ahead from a space to check if the next word is a single-character\n * operator (like +, =, *, /, etc.) followed by another space. Breaking before\n * such operators looks bad — e.g. \"$12k\\n+ $400\" — so we suppress the break\n * point to keep the operator with its left operand.\n *\n * Accepts an explicit graphemeWidth function so it works with both the\n * module-level default and per-measurer instances.\n */\nfunction isBreakBeforeOperatorWith(graphemes: string[], spaceIndex: number, gWidthFn: (g: string) => number): boolean {\n // Look for pattern: [current space] [operator] [space]\n // spaceIndex is the index of the current space in the graphemes array\n let j = spaceIndex + 1\n // Skip any zero-width characters (ANSI escapes)\n while (j < graphemes.length && gWidthFn(graphemes[j]!) === 0) j++\n if (j >= graphemes.length) return false\n const nextChar = graphemes[j]!\n // Must be a single visible character that is not alphanumeric or space\n if (gWidthFn(nextChar) !== 1) return false\n if (/^[a-zA-Z0-9\\s]$/.test(nextChar)) return false\n // Check that it's followed by a space (it's an infix operator, not a prefix)\n let k = j + 1\n while (k < graphemes.length && gWidthFn(graphemes[k]!) === 0) k++\n if (k >= graphemes.length) return false\n return graphemes[k] === \" \"\n}\n\n/**\n * Check if a grapheme can break anywhere (CJK characters).\n * CJK text doesn't use spaces between words, so any character boundary is valid.\n */\nexport function canBreakAnywhere(grapheme: string): boolean {\n return isCJK(grapheme)\n}\n\n// ANSI CSI pattern: ESC [ (params) (letter)\nconst ANSI_CSI_RE = /^\\x1b\\[[0-9;:?]*[A-Za-z]/\n// ANSI OSC pattern: ESC ] ... (BEL or ST)\nconst ANSI_OSC_RE = /^\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)/\n// Single-char escape: ESC followed by one letter\nconst ANSI_SINGLE_RE = /^\\x1b[DME78(B]/\n\n/**\n * Split text into graphemes, keeping ANSI escape sequences as single zero-width tokens.\n * Without this, `splitGraphemes` would split `\\x1b[38;5;1m` into individual characters\n * like `[`, `3`, `8`, `;`, etc., each consuming display width.\n */\nexport function splitGraphemesAnsiAware(text: string): string[] {\n if (!hasAnsi(text)) {\n return splitGraphemes(text)\n }\n\n const result: string[] = []\n let pos = 0\n\n while (pos < text.length) {\n if (text[pos] === \"\\x1b\") {\n // Try to match an ANSI sequence starting at pos\n const remaining = text.slice(pos)\n const csi = remaining.match(ANSI_CSI_RE)\n if (csi) {\n result.push(csi[0])\n pos += csi[0].length\n continue\n }\n const osc = remaining.match(ANSI_OSC_RE)\n if (osc) {\n result.push(osc[0])\n pos += osc[0].length\n continue\n }\n const single = remaining.match(ANSI_SINGLE_RE)\n if (single) {\n result.push(single[0])\n pos += single[0].length\n continue\n }\n }\n\n // Find the next ESC or end of string\n const nextEsc = text.indexOf(\"\\x1b\", pos + 1)\n const chunk = nextEsc === -1 ? text.slice(pos) : text.slice(pos, nextEsc)\n\n // Split this non-ANSI chunk into graphemes\n for (const g of splitGraphemes(chunk)) {\n result.push(g)\n }\n pos += chunk.length\n }\n\n return result\n}\n\n/**\n * Wrap text to fit within a given width.\n *\n * Implements word-boundary wrapping:\n * 1. Breaks at word boundaries (spaces, hyphens) when possible\n * 2. Falls back to character wrap only when necessary (very long words)\n * 3. Handles CJK text properly (can break anywhere since CJK has no word spaces)\n * 4. Preserves intentional line breaks\n *\n * @param text - The text to wrap (may contain ANSI escape sequences)\n * @param width - Maximum display width per line\n * @param preserveNewlines - Whether to preserve existing newlines\n * @param trim - Trim trailing spaces on broken lines and skip leading spaces on continuation lines (useful for rendering)\n * @returns Array of wrapped lines\n */\nexport function wrapText(text: string, width: number, preserveNewlines = true, trim = false): string[] {\n // When a scoped measurer with its own wrapText is active (e.g., Pretext),\n // delegate to it directly — it uses word-level measurement (layoutWithLines)\n // rather than character-by-character accumulation via wrapTextWithMeasurer.\n if (_scopedMeasurer?.wrapText) {\n return _scopedMeasurer.wrapText(text, width, trim)\n }\n return wrapTextWithMeasurer(text, width, _scopedMeasurer ?? undefined, trim, false, preserveNewlines)\n}\n\n/** Get the active line height (from scoped measurer if set, else 1). */\nexport function getActiveLineHeight(): number {\n return _scopedMeasurer?.lineHeight ?? 1\n}\n\n/**\n * Wrap text using an explicit measurer for grapheme width calculations.\n * When measurer is undefined, falls back to the module-level graphemeWidth.\n */\nexport function wrapTextWithMeasurer(\n text: string,\n width: number,\n measurer: Measurer | undefined,\n trim = false,\n _hard = false,\n preserveNewlines = true,\n): string[] {\n if (width <= 0) {\n return []\n }\n\n const gWidthFn = measurer ? measurer.graphemeWidth.bind(measurer) : graphemeWidth\n\n const lines: string[] = []\n\n // Split by newlines first if preserving\n const inputLines = preserveNewlines ? text.split(\"\\n\") : [text.replace(/\\n/g, \" \")]\n\n for (const line of inputLines) {\n // Handle empty lines\n if (line === \"\") {\n lines.push(\"\")\n continue\n }\n\n // If the line contains ANSI escape sequences, split them out so they\n // don't consume display width. We interleave visible graphemes with\n // zero-width ANSI \"tokens\" that are appended to currentLine untouched.\n const graphemes = splitGraphemesAnsiAware(line)\n let currentLine = \"\"\n let currentWidth = 0\n let isFirstLineOfParagraph = true\n\n // Track the last valid break point\n let lastBreakIndex = -1 // Index in currentLine (character position)\n let lastBreakWidth = 0 // Width at break point\n let lastBreakGraphemeIndex = -1 // Index in graphemes array\n\n for (let i = 0; i < graphemes.length; i++) {\n const grapheme = graphemes[i]!\n const gWidth = gWidthFn(grapheme)\n\n // Handle zero-width characters\n if (gWidth === 0) {\n currentLine += grapheme\n continue\n }\n\n // In trim mode, skip leading spaces on continuation lines\n if (trim && !isFirstLineOfParagraph && currentWidth === 0 && isWordBoundary(grapheme) && grapheme !== \"-\") {\n continue\n }\n\n // Check if this grapheme is a break point\n // Break AFTER spaces/hyphens, or BEFORE CJK characters\n if (isWordBoundary(grapheme)) {\n // Include the boundary character, then mark as break point\n if (currentWidth + gWidth <= width) {\n currentLine += grapheme\n currentWidth += gWidth\n // Suppress break point if the next word is a lone operator (e.g. \"+\", \"=\")\n // to avoid orphaning operators at the start of the next line.\n if (grapheme !== \" \" || !isBreakBeforeOperatorWith(graphemes, i, gWidthFn)) {\n lastBreakIndex = currentLine.length\n lastBreakWidth = currentWidth\n lastBreakGraphemeIndex = i + 1\n }\n continue\n }\n // Space/hyphen doesn't fit — break here (before the boundary char).\n // The current line is complete; the boundary char is consumed as the break.\n if (currentLine) {\n let lineToAdd = currentLine\n if (trim) lineToAdd = lineToAdd.trimEnd()\n lines.push(lineToAdd)\n isFirstLineOfParagraph = false\n }\n currentLine = \"\"\n currentWidth = 0\n lastBreakIndex = -1\n lastBreakWidth = 0\n lastBreakGraphemeIndex = -1\n continue\n } else if (canBreakAnywhere(grapheme)) {\n // CJK: can break before this character\n lastBreakIndex = currentLine.length\n lastBreakWidth = currentWidth\n lastBreakGraphemeIndex = i\n }\n\n // Would this grapheme overflow?\n if (currentWidth + gWidth > width) {\n if (lastBreakIndex > 0) {\n // We have a valid break point - use it\n let lineToAdd = currentLine.slice(0, lastBreakIndex)\n if (trim) lineToAdd = lineToAdd.trimEnd()\n lines.push(lineToAdd)\n isFirstLineOfParagraph = false\n\n // Reset and continue from break point\n currentLine = currentLine.slice(lastBreakIndex)\n currentWidth = currentWidth - lastBreakWidth\n\n // Rewind to process graphemes after the break\n i = lastBreakGraphemeIndex - 1\n currentLine = \"\"\n currentWidth = 0\n lastBreakIndex = -1\n lastBreakWidth = 0\n lastBreakGraphemeIndex = -1\n } else {\n // No break point found - must do character wrap\n if (currentLine) {\n if (trim) currentLine = currentLine.trimEnd()\n lines.push(currentLine)\n isFirstLineOfParagraph = false\n }\n currentLine = grapheme\n currentWidth = gWidth\n lastBreakIndex = -1\n lastBreakWidth = 0\n lastBreakGraphemeIndex = -1\n }\n } else {\n currentLine += grapheme\n currentWidth += gWidth\n }\n }\n\n // Push remaining content\n if (currentLine) {\n lines.push(currentLine)\n }\n }\n\n // Fix OSC 8 hyperlink state across wrapped lines — each line must be self-contained\n if (text.includes(\"\\x1b]8;;\")) {\n fixOsc8AcrossWrappedLines(lines)\n }\n\n return lines\n}\n\n/**\n * Post-process wrapped lines to ensure OSC 8 hyperlink sequences are self-contained per line.\n * When wrapping splits text containing OSC 8 sequences across lines, the open/close sequences\n * may end up on different lines. This closes unclosed hyperlinks at line ends and re-opens\n * them on continuation lines. Mutates the array in place.\n */\nfunction fixOsc8AcrossWrappedLines(lines: string[]): void {\n let activeHref: string | null = null\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i]!\n\n // Re-open hyperlink from previous line\n if (activeHref !== null) {\n line = `\\x1b]8;;${activeHref}\\x1b\\\\` + line\n }\n\n // Scan line for OSC 8 sequences to determine end-of-line state\n let lineHref: string | null = activeHref\n const osc8Matches = line.matchAll(/\\x1b\\]8;;([^\\x07\\x1b]*)(?:\\x07|\\x1b\\\\)/g)\n for (const m of osc8Matches) {\n lineHref = m[1] === \"\" ? null : m[1]!\n }\n\n // Close unclosed hyperlink at line end\n if (lineHref !== null) {\n line += \"\\x1b]8;;\\x1b\\\\\"\n }\n\n lines[i] = line\n activeHref = lineHref\n }\n}\n\n/**\n * Slice text by display width (from start).\n * Returns the first `maxWidth` columns of text.\n * Uses the default measurer for width calculations.\n * Handles both ANSI-styled and plain text.\n *\n * @param text - The text to slice\n * @param maxWidth - Maximum display width to keep from the start\n * @returns Sliced string from the start\n */\nexport function sliceByWidth(text: string, maxWidth: number): string {\n return (_scopedMeasurer ?? getDefaultMeasurer()).sliceByWidth(text, maxWidth)\n}\n\n/**\n * Slice a string by display width range.\n * Like string.slice() but works with display columns.\n *\n * @param text - The text to slice\n * @param start - Start display column (inclusive)\n * @param end - End display column (exclusive)\n * @returns Sliced string\n */\nexport function sliceByWidthRange(text: string, start: number, end?: number): string {\n const graphemes = splitGraphemes(text)\n let result = \"\"\n let currentCol = 0\n const endCol = end ?? Number.POSITIVE_INFINITY\n\n for (const grapheme of graphemes) {\n const gWidth = graphemeWidth(grapheme)\n\n // Haven't reached start yet\n if (currentCol + gWidth <= start) {\n currentCol += gWidth\n continue\n }\n\n // Past the end\n if (currentCol >= endCol) {\n break\n }\n\n // This grapheme is at least partially in range\n result += grapheme\n currentCol += gWidth\n }\n\n return result\n}\n\n/**\n * Slice text by display width from the end.\n * Returns the last `maxWidth` columns of text.\n * Uses the default measurer for width calculations.\n *\n * @param text - The text to slice\n * @param maxWidth - Maximum display width to keep from the end\n * @returns Sliced string from the end\n */\nexport function sliceByWidthFromEnd(text: string, maxWidth: number): string {\n return (_scopedMeasurer ?? getDefaultMeasurer()).sliceByWidthFromEnd(text, maxWidth)\n}\n\n// ============================================================================\n// Buffer Writing\n// ============================================================================\n\n/**\n * Write styled text to a terminal buffer.\n *\n * Handles:\n * - Multi-byte graphemes (emoji, combining characters)\n * - Wide characters (CJK) that take 2 cells\n * - Zero-width characters (appended to previous cell)\n *\n * @param buffer - The buffer to write to\n * @param x - Starting column\n * @param y - Row\n * @param text - Text to write\n * @param style - Style to apply\n * @returns The ending column (x + display_width)\n */\nexport function writeTextToBuffer(\n buffer: TerminalBuffer,\n x: number,\n y: number,\n text: string,\n style: Style = { fg: null, bg: null, attrs: {} },\n): number {\n const graphemes = splitGraphemes(text)\n let col = x\n let combineCell: Cell | null = null\n\n for (const grapheme of graphemes) {\n const width = graphemeWidth(grapheme)\n\n if (width === 0) {\n // Zero-width character: combine with previous cell.\n // Use readCellInto to avoid allocating a fresh Cell on each combine.\n if (col > 0 && buffer.inBounds(col - 1, y)) {\n // Lazy-init reusable cell (zero-width combining is uncommon)\n combineCell ??= createMutableCell()\n buffer.readCellInto(col - 1, y, combineCell)\n combineCell.char = combineCell.char + grapheme\n buffer.setCell(col - 1, y, combineCell)\n }\n } else if (width === 1) {\n // Normal single-width character\n if (buffer.inBounds(col, y)) {\n buffer.setCell(col, y, {\n char: grapheme,\n fg: style.fg,\n bg: style.bg,\n attrs: style.attrs,\n wide: false,\n continuation: false,\n })\n }\n col++\n } else if (width === 2) {\n // Wide character: takes 2 cells\n // For text-presentation emoji, add VS16 so terminals render at 2 columns\n const outputChar = ensureEmojiPresentation(grapheme)\n if (buffer.inBounds(col, y)) {\n buffer.setCell(col, y, {\n char: outputChar,\n fg: style.fg,\n bg: style.bg,\n attrs: style.attrs,\n wide: true,\n continuation: false,\n })\n }\n if (buffer.inBounds(col + 1, y)) {\n buffer.setCell(col + 1, y, {\n char: \"\",\n fg: style.fg,\n bg: style.bg,\n attrs: style.attrs,\n wide: false,\n continuation: true,\n })\n }\n col += 2\n }\n\n // Stop if we've gone past the buffer edge\n if (col >= buffer.width) {\n break\n }\n }\n\n return col\n}\n\n/**\n * Write styled text to a buffer with automatic truncation.\n *\n * @param buffer - The buffer to write to\n * @param x - Starting column\n * @param y - Row\n * @param text - Text to write\n * @param maxWidth - Maximum width (truncate if exceeded)\n * @param style - Style to apply\n * @param ellipsis - Ellipsis for truncated text\n */\nexport function writeTextTruncated(\n buffer: TerminalBuffer,\n x: number,\n y: number,\n text: string,\n maxWidth: number,\n style: Style = { fg: null, bg: null, attrs: {} },\n ellipsis = \"\\u2026\",\n): void {\n const textWidth = displayWidth(text)\n\n if (textWidth <= maxWidth) {\n writeTextToBuffer(buffer, x, y, text, style)\n } else {\n const truncated = truncateText(text, maxWidth, ellipsis)\n writeTextToBuffer(buffer, x, y, truncated, style)\n }\n}\n\n/**\n * Write multiple lines of styled text to a buffer.\n *\n * @param buffer - The buffer to write to\n * @param x - Starting column\n * @param y - Starting row\n * @param lines - Lines to write\n * @param style - Style to apply\n */\nexport function writeLinesToBuffer(\n buffer: TerminalBuffer,\n x: number,\n y: number,\n lines: string[],\n style: Style = { fg: null, bg: null, attrs: {} },\n): void {\n for (let i = 0; i < lines.length; i++) {\n if (y + i >= buffer.height) break\n writeTextToBuffer(buffer, x, y + i, lines[i]!, style)\n }\n}\n\n// ============================================================================\n// ANSI-Aware Operations\n// ============================================================================\n\n/**\n * Strip all ANSI escape codes from a string.\n *\n * Handles:\n * - CSI sequences (cursor movement, colors, SGR, etc.)\n * - OSC sequences (window titles, hyperlinks)\n * - Single-character escape sequences\n * - Character set selection\n */\nexport function stripAnsi(text: string): string {\n return text\n .replace(/\\x1b\\[[0-9;:?]*[A-Za-z]/g, \"\") // ESC CSI sequences (including SGR with colons)\n .replace(/\\x9b[0-9;:?]*[A-Za-z]/g, \"\") // C1 CSI sequences\n .replace(/\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)/g, \"\") // ESC OSC sequences\n .replace(/\\x9d[^\\x07\\x1b\\x9c]*(?:\\x07|\\x1b\\\\|\\x9c)/g, \"\") // C1 OSC sequences\n .replace(/\\x1b[DME78]/g, \"\") // Single-char sequences\n .replace(/\\x1b\\(B/g, \"\") // Character set selection\n}\n\n/**\n * Get display width of text with ANSI sequences.\n * ANSI sequences don't contribute to display width.\n */\nexport function displayWidthAnsi(text: string): number {\n return displayWidth(stripAnsi(text))\n}\n\n/**\n * Truncate text that may contain ANSI sequences.\n * Preserves ANSI codes while truncating visible characters.\n *\n * Note: This is a simplified implementation that strips ANSI before\n * truncation. For proper ANSI-aware truncation, consider using\n * slice-ansi or similar library.\n */\nexport function truncateAnsi(text: string, maxWidth: number, ellipsis = \"\\u2026\"): string {\n // Simple approach: if text has ANSI, strip and truncate\n // A more sophisticated approach would preserve styles\n const stripped = stripAnsi(text)\n return truncateText(stripped, maxWidth, ellipsis)\n}\n\n// ============================================================================\n// ANSI Parsing\n// ============================================================================\n\n// BG_OVERRIDE_CODE is imported from ansi and re-exported at top of file\n\n/** Styled text segment with associated ANSI colors/attributes */\nexport interface StyledSegment {\n text: string\n fg?: number | null // SGR color code (30-37, 90-97, or 38;5;N / 38;2;r;g;b)\n bg?: number | null // SGR color code (40-47, 100-107, or 48;5;N / 48;2;r;g;b)\n /**\n * Underline color (SGR 58).\n * Same format as fg/bg: packed RGB with 0x1000000 marker, or 256-color index.\n */\n underlineColor?: number | null\n bold?: boolean\n dim?: boolean\n italic?: boolean\n underline?: boolean\n /**\n * Underline style variant (SGR 4:x).\n * Uses UnderlineStyle from buffer.ts.\n */\n underlineStyle?: UnderlineStyle\n inverse?: boolean\n bgOverride?: boolean // Set when BG_OVERRIDE_CODE (9999) is present\n /**\n * OSC 8 hyperlink URL.\n * Set when the segment is inside an OSC 8 hyperlink sequence.\n */\n hyperlink?: string\n /**\n * True when the foreground color was specified using colon-separated SGR\n * (e.g., `38:2::255:100:0m` instead of `38;2;255;100;0m`).\n * Used to preserve the original format in round-trip output.\n */\n colonFg?: boolean\n /**\n * True when the background color was specified using colon-separated SGR.\n */\n colonBg?: boolean\n}\n\n/**\n * Map SGR 4:x subparameter to underline style.\n * 0=none, 1=single, 2=double, 3=curly, 4=dotted, 5=dashed\n */\nfunction parseUnderlineStyle(subparam: number): UnderlineStyle {\n switch (subparam) {\n case 0:\n return false\n case 1:\n return \"single\"\n case 2:\n return \"double\"\n case 3:\n return \"curly\"\n case 4:\n return \"dotted\"\n case 5:\n return \"dashed\"\n default:\n return \"single\" // Unknown, default to single\n }\n}\n\n/**\n * Parse text with ANSI escape sequences into styled segments.\n * Handles basic SGR (Select Graphic Rendition) codes including:\n * - Standard colors (30-37, 40-47, 90-97, 100-107)\n * - Extended colors (38;5;N, 48;5;N for 256-color, 38;2;r;g;b, 48;2;r;g;b for RGB)\n * - Underline styles (4:x where x = 0-5)\n * - Underline color (58;5;N for 256-color, 58;2;r;g;b for RGB)\n */\nexport function parseAnsiText(text: string): StyledSegment[] {\n const segments: StyledSegment[] = []\n\n // Step 1: Strip non-SGR CSI sequences (cursor movement, erase, etc.) that would\n // otherwise leak through as literal text. SGR sequences end in 'm'; all\n // other CSI sequences (ending in A-L, H, J, K, S, T, etc.) are stripped.\n // Handles both ESC-based CSI (\\x1b[) and C1 CSI (\\x9b).\n // This must happen BEFORE OSC 8 processing so hyperlink position tracking\n // is based on the cleaned text (no position drift from stripped sequences).\n const sanitizedText = text.replace(/\\x1b\\[[0-9;:]*[A-LN-Za-ln-z@`]/g, \"\").replace(/\\x9b[0-9;:]*[A-LN-Za-ln-z@`]/g, \"\")\n\n // Step 2: Strip OSC 8 hyperlink sequences and build a position-to-URL map.\n // OSC 8 format: \\x1b]8;;URL(\\x1b\\\\ | \\x07) for open, \\x1b]8;;(\\x1b\\\\ | \\x07) for close.\n // Also handles C1 OSC (\\x9d) form: \\x9d8;;URL(\\x1b\\\\ | \\x07 | \\x9c)\n // We strip these from the text before SGR parsing and track which character\n // positions map to which hyperlink URL.\n //\n // Hyperlink format metadata is encoded in the URL using control char prefixes:\n // \\x01c1b\\x02 = C1 OSC intro + BEL terminator\n // \\x01c1s\\x02 = C1 OSC intro + ST terminator\n // \\x01e7b\\x02 = ESC OSC intro + BEL terminator\n // (no prefix) = ESC OSC intro + ST terminator (default)\n // bufferToStyledText reads these prefixes to emit the original format.\n const oscPattern = /(?:\\x1b\\]|\\x9d)8;;([^\\x07\\x1b\\x9c]*)(?:\\x07|\\x1b\\\\|\\x9c)/g\n let currentHyperlink: string | undefined\n // Map from character index in cleaned text to hyperlink URL\n const hyperlinkRanges: Array<{ start: number; end: number; url: string }> = []\n let rangeStart = -1\n let cleaned = \"\"\n let oscMatch: RegExpExecArray | null\n let oscLastIndex = 0\n\n while ((oscMatch = oscPattern.exec(sanitizedText)) !== null) {\n // Append text between last OSC and this one (preserving SGR codes)\n cleaned += sanitizedText.slice(oscLastIndex, oscMatch.index)\n const url = oscMatch[1]!\n\n // Detect format: C1 vs ESC intro, BEL vs ST terminator\n const matchStr = oscMatch[0]\n const isC1 = matchStr.charCodeAt(0) === 0x9d\n const lastChar = matchStr.charCodeAt(matchStr.length - 1)\n const isBel = lastChar === 0x07\n const isSt9c = lastChar === 0x9c\n\n if (url === \"\") {\n // Close hyperlink — format prefix matches the open sequence\n if (currentHyperlink && rangeStart >= 0) {\n hyperlinkRanges.push({ start: rangeStart, end: cleaned.length, url: currentHyperlink })\n }\n currentHyperlink = undefined\n rangeStart = -1\n } else {\n // Open hyperlink — encode format metadata in URL prefix\n if (currentHyperlink && rangeStart >= 0) {\n // Close previous unclosed hyperlink\n hyperlinkRanges.push({ start: rangeStart, end: cleaned.length, url: currentHyperlink })\n }\n // Encode hyperlink format as a prefix on the URL:\n // \\x01c1b\\x02 = C1 intro + BEL terminator\n // \\x01c1s\\x02 = C1 intro + ST terminator (ESC \\ or C1 ST \\x9c)\n // \\x01e7b\\x02 = ESC intro + BEL terminator\n // no prefix = ESC intro + ST terminator (default)\n let encodedUrl = url\n if (isC1 && (isBel || isSt9c)) {\n encodedUrl = `\\x01c1b\\x02${url}`\n } else if (isC1) {\n encodedUrl = `\\x01c1s\\x02${url}`\n } else if (isBel) {\n encodedUrl = `\\x01e7b\\x02${url}`\n }\n // else: ESC + ST = default, no prefix needed\n currentHyperlink = encodedUrl\n rangeStart = cleaned.length\n }\n\n oscLastIndex = oscMatch.index + oscMatch[0].length\n }\n // Append remaining text after last OSC\n cleaned += sanitizedText.slice(oscLastIndex)\n // Close any still-open hyperlink\n if (currentHyperlink && rangeStart >= 0) {\n hyperlinkRanges.push({ start: rangeStart, end: cleaned.length, url: currentHyperlink })\n }\n\n // If no OSC 8 sequences found, use sanitized text for efficiency\n const processText = hyperlinkRanges.length > 0 ? cleaned : sanitizedText\n\n // Extended pattern: matches SGR with semicolons AND colons (for 4:x, 58:2::r:g:b)\n // Handles both ESC-based CSI (\\x1b[) and C1 CSI (\\x9b)\n const ansiPattern = /(?:\\x1b\\[|\\x9b)([0-9;:]*)m/g\n\n let currentStyle: Omit<StyledSegment, \"text\"> = {}\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n // Helper to find hyperlink URL for a position in the cleaned text.\n // Positions in cleaned text map directly to hyperlinkRanges since OSC 8\n // sequences were stripped but SGR sequences remain at the same indices.\n function getHyperlinkAt(pos: number): string | undefined {\n for (const range of hyperlinkRanges) {\n if (pos >= range.start && pos < range.end) return range.url\n }\n return undefined\n }\n\n while ((match = ansiPattern.exec(processText)) !== null) {\n // Add text before this escape sequence\n if (match.index > lastIndex) {\n const content = processText.slice(lastIndex, match.index)\n if (content.length > 0) {\n if (hyperlinkRanges.length > 0) {\n // Split content into runs by hyperlink URL.\n // lastIndex is the position of content[0] in processText/cleaned.\n let segStart = 0\n for (let ci = 0; ci < content.length; ci++) {\n const hl = getHyperlinkAt(lastIndex + ci)\n const prevHl = ci > 0 ? getHyperlinkAt(lastIndex + ci - 1) : undefined\n if (ci > 0 && hl !== prevHl) {\n const sub = content.slice(segStart, ci)\n if (sub.length > 0) {\n const seg: StyledSegment = { text: sub, ...currentStyle }\n if (prevHl) seg.hyperlink = prevHl\n segments.push(seg)\n }\n segStart = ci\n }\n }\n // Push remaining\n const sub = content.slice(segStart)\n if (sub.length > 0) {\n const hl = getHyperlinkAt(lastIndex + segStart)\n const seg: StyledSegment = { text: sub, ...currentStyle }\n if (hl) seg.hyperlink = hl\n segments.push(seg)\n }\n } else {\n segments.push({ text: content, ...currentStyle })\n }\n }\n }\n\n // Parse SGR codes - split by semicolon first, then handle colon subparams\n const rawParams = match[1]!\n\n // Handle colon-separated sequences (like 4:3 for curly underline, 58:2::r:g:b)\n // Split by semicolon first to get top-level params\n const params = rawParams.split(\";\")\n\n for (let i = 0; i < params.length; i++) {\n const param = params[i]!\n\n // Check if this param has colon subparameters (e.g., \"4:3\", \"58:2::255:0:0\")\n if (param.includes(\":\")) {\n const subparts = param.split(\":\").map((s) => (s === \"\" ? 0 : Number(s)))\n const mainCode = subparts[0]!\n\n if (mainCode === 4) {\n // SGR 4:x - underline style\n const styleCode = subparts[1] ?? 1\n currentStyle.underlineStyle = parseUnderlineStyle(styleCode)\n currentStyle.underline = currentStyle.underlineStyle !== false\n } else if (mainCode === 58) {\n // SGR 58 - underline color\n // Format: 58:5:N (256-color) or 58:2::r:g:b (RGB, note double colon)\n if (subparts[1] === 5 && subparts[2] !== undefined) {\n currentStyle.underlineColor = subparts[2]\n } else if (subparts[1] === 2) {\n // RGB: 58:2::r:g:b (indices 3,4,5 after the empty slot)\n // or 58:2:r:g:b (indices 2,3,4)\n // Handle both formats by looking for valid RGB values\n const r = subparts[3] ?? subparts[2] ?? 0\n const g = subparts[4] ?? subparts[3] ?? 0\n const b = subparts[5] ?? subparts[4] ?? 0\n currentStyle.underlineColor = 0x1000000 | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)\n }\n } else if (mainCode === 38) {\n // SGR 38:2::r:g:b or 38:5:N format (colon-separated)\n if (subparts[1] === 5 && subparts[2] !== undefined) {\n currentStyle.fg = subparts[2]\n currentStyle.colonFg = true\n } else if (subparts[1] === 2) {\n const r = subparts[3] ?? subparts[2] ?? 0\n const g = subparts[4] ?? subparts[3] ?? 0\n const b = subparts[5] ?? subparts[4] ?? 0\n currentStyle.fg = 0x1000000 | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)\n currentStyle.colonFg = true\n }\n } else if (mainCode === 48) {\n // SGR 48:2::r:g:b or 48:5:N format (colon-separated)\n if (subparts[1] === 5 && subparts[2] !== undefined) {\n currentStyle.bg = subparts[2]\n currentStyle.colonBg = true\n } else if (subparts[1] === 2) {\n const r = subparts[3] ?? subparts[2] ?? 0\n const g = subparts[4] ?? subparts[3] ?? 0\n const b = subparts[5] ?? subparts[4] ?? 0\n currentStyle.bg = 0x1000000 | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)\n currentStyle.colonBg = true\n }\n }\n continue\n }\n\n // Standard semicolon-separated params\n const code = Number(param)\n switch (code) {\n case 0:\n // Reset\n currentStyle = {}\n break\n case 1:\n currentStyle.bold = true\n break\n case 2:\n currentStyle.dim = true\n break\n case 3:\n currentStyle.italic = true\n break\n case 4:\n // Plain SGR 4 - simple underline (no subparam)\n currentStyle.underline = true\n currentStyle.underlineStyle = \"single\"\n break\n case 7:\n currentStyle.inverse = true\n break\n case 22:\n currentStyle.bold = false\n currentStyle.dim = false\n break\n case 23:\n currentStyle.italic = false\n break\n case 24:\n // SGR 24 - underline off\n currentStyle.underline = false\n currentStyle.underlineStyle = false\n break\n case 27:\n currentStyle.inverse = false\n break\n case 30:\n case 31:\n case 32:\n case 33:\n case 34:\n case 35:\n case 36:\n case 37:\n currentStyle.fg = code\n break\n case 38: {\n // Extended color: 38;5;N (256 color) or 38;2;r;g;b (true color)\n // Semicolon-separated — clear colonFg flag\n const nextParams = params.slice(i + 1).map(Number)\n currentStyle.colonFg = undefined\n if (nextParams[0] === 5 && nextParams[1] !== undefined) {\n currentStyle.fg = nextParams[1]\n i += 2\n } else if (nextParams[0] === 2 && nextParams[3] !== undefined) {\n // True color - store as RGB values packed\n currentStyle.fg =\n 0x1000000 | ((nextParams[1]! & 0xff) << 16) | ((nextParams[2]! & 0xff) << 8) | (nextParams[3]! & 0xff)\n i += 4\n }\n break\n }\n case 39:\n currentStyle.fg = null // Default foreground\n break\n case 40:\n case 41:\n case 42:\n case 43:\n case 44:\n case 45:\n case 46:\n case 47:\n currentStyle.bg = code\n break\n case 48: {\n // Extended color: 48;5;N (256 color) or 48;2;r;g;b (true color)\n // Semicolon-separated — clear colonBg flag\n const nextParams = params.slice(i + 1).map(Number)\n currentStyle.colonBg = undefined\n if (nextParams[0] === 5 && nextParams[1] !== undefined) {\n currentStyle.bg = nextParams[1]\n i += 2\n } else if (nextParams[0] === 2 && nextParams[3] !== undefined) {\n // True color - store as RGB values packed\n currentStyle.bg =\n 0x1000000 | ((nextParams[1]! & 0xff) << 16) | ((nextParams[2]! & 0xff) << 8) | (nextParams[3]! & 0xff)\n i += 4\n }\n break\n }\n case 49:\n currentStyle.bg = null // Default background\n break\n case 58: {\n // Underline color: 58;5;N (256 color) or 58;2;r;g;b (true color)\n const nextParams = params.slice(i + 1).map(Number)\n if (nextParams[0] === 5 && nextParams[1] !== undefined) {\n currentStyle.underlineColor = nextParams[1]\n i += 2\n } else if (nextParams[0] === 2 && nextParams[3] !== undefined) {\n // True color - store as RGB values packed\n currentStyle.underlineColor =\n 0x1000000 | ((nextParams[1]! & 0xff) << 16) | ((nextParams[2]! & 0xff) << 8) | (nextParams[3]! & 0xff)\n i += 4\n }\n break\n }\n case 59:\n currentStyle.underlineColor = null // Default underline color\n break\n case 90:\n case 91:\n case 92:\n case 93:\n case 94:\n case 95:\n case 96:\n case 97:\n currentStyle.fg = code // Bright foreground colors\n break\n case 100:\n case 101:\n case 102:\n case 103:\n case 104:\n case 105:\n case 106:\n case 107:\n currentStyle.bg = code // Bright background colors\n break\n case BG_OVERRIDE_CODE:\n // Private code: signals intentional bg override, skip conflict detection\n currentStyle.bgOverride = true\n break\n }\n }\n\n lastIndex = match.index + match[0].length\n }\n\n // Add remaining text\n if (lastIndex < processText.length) {\n const content = processText.slice(lastIndex)\n if (content.length > 0) {\n if (hyperlinkRanges.length > 0) {\n // Split remaining content by hyperlink URL\n let segStart = 0\n for (let ci = 0; ci < content.length; ci++) {\n const hl = getHyperlinkAt(lastIndex + ci)\n const prevHl = ci > 0 ? getHyperlinkAt(lastIndex + ci - 1) : undefined\n if (ci > 0 && hl !== prevHl) {\n const sub = content.slice(segStart, ci)\n if (sub.length > 0) {\n const seg: StyledSegment = { text: sub, ...currentStyle }\n if (prevHl) seg.hyperlink = prevHl\n segments.push(seg)\n }\n segStart = ci\n }\n }\n const sub = content.slice(segStart)\n if (sub.length > 0) {\n const hl = getHyperlinkAt(lastIndex + segStart)\n const seg: StyledSegment = { text: sub, ...currentStyle }\n if (hl) seg.hyperlink = hl\n segments.push(seg)\n }\n } else {\n segments.push({ text: content, ...currentStyle })\n }\n }\n }\n\n return segments\n}\n\nconst ANSI_TEST_REGEX = /\\x1b(?:\\[[0-9;:]*[A-Za-z]|\\])|\\x9b[\\x30-\\x3f]*[\\x40-\\x7e]|\\x9d/\n\n/**\n * Check if text contains ANSI escape sequences (SGR or OSC).\n * Detects both ESC-based (7-bit) and C1 (8-bit) forms:\n * - ESC [ params final (CSI)\n * - ESC ] (OSC)\n * - U+009B params final (C1 CSI)\n * - U+009D (C1 OSC)\n */\nexport function hasAnsi(text: string): boolean {\n // Use a non-global regex for testing to avoid lastIndex issues\n return ANSI_TEST_REGEX.test(text)\n}\n\n// ============================================================================\n// Measurement Utilities\n// ============================================================================\n\n/**\n * Measure the dimensions of multi-line text.\n *\n * @param text - Text to measure (may contain newlines)\n * @returns { width, height } in display columns and rows\n */\nexport function measureText(text: string): { width: number; height: number } {\n const lines = text.split(\"\\n\")\n let maxWidth = 0\n\n for (const line of lines) {\n const lineWidth = displayWidth(line)\n if (lineWidth > maxWidth) {\n maxWidth = lineWidth\n }\n }\n\n return {\n width: maxWidth,\n height: lines.length,\n }\n}\n\n/**\n * Check if a string contains any wide characters.\n */\nexport function hasWideCharacters(text: string): boolean {\n const graphemes = splitGraphemes(text)\n return graphemes.some(isWideGrapheme)\n}\n\n/**\n * Check if a string contains any combining/zero-width characters.\n */\nexport function hasZeroWidthCharacters(text: string): boolean {\n const graphemes = splitGraphemes(text)\n return graphemes.some(isZeroWidthGrapheme)\n}\n\n/**\n * Normalize string for consistent handling.\n * Applies Unicode NFC normalization.\n */\nexport function normalizeText(text: string): string {\n return text.normalize(\"NFC\")\n}\n\n// ============================================================================\n// Character Detection\n// ============================================================================\n\n/**\n * Common character ranges for quick checks.\n */\nconst CHAR_RANGES = {\n // Basic Latin (ASCII)\n isBasicLatin: (cp: number) => cp >= 0x0020 && cp <= 0x007f,\n\n // CJK Unified Ideographs\n isCJK: (cp: number) =>\n (cp >= 0x4e00 && cp <= 0x9fff) || // CJK Unified Ideographs\n (cp >= 0x3400 && cp <= 0x4dbf) || // CJK Unified Ideographs Extension A\n (cp >= 0x20000 && cp <= 0x2a6df) || // CJK Unified Ideographs Extension B\n (cp >= 0xf900 && cp <= 0xfaff) || // CJK Compatibility Ideographs\n (cp >= 0x2f800 && cp <= 0x2fa1f), // CJK Compatibility Ideographs Supplement\n\n // Japanese Hiragana/Katakana\n isJapaneseKana: (cp: number) =>\n (cp >= 0x3040 && cp <= 0x309f) || // Hiragana\n (cp >= 0x30a0 && cp <= 0x30ff), // Katakana\n\n // Korean Hangul\n isHangul: (cp: number) =>\n (cp >= 0xac00 && cp <= 0xd7a3) || // Hangul Syllables\n (cp >= 0x1100 && cp <= 0x11ff), // Hangul Jamo\n\n // Emoji ranges (simplified)\n isEmoji: (cp: number) =>\n (cp >= 0x1f600 && cp <= 0x1f64f) || // Emoticons\n (cp >= 0x1f300 && cp <= 0x1f5ff) || // Misc Symbols and Pictographs\n (cp >= 0x1f680 && cp <= 0x1f6ff) || // Transport and Map\n (cp >= 0x1f700 && cp <= 0x1f77f) || // Alchemical Symbols\n (cp >= 0x1f900 && cp <= 0x1f9ff) || // Supplemental Symbols and Pictographs\n (cp >= 0x2600 && cp <= 0x26ff) || // Misc symbols\n (cp >= 0x2700 && cp <= 0x27bf), // Dingbats\n} as const\n\n/**\n * Get the first code point of a string.\n */\nexport function getFirstCodePoint(str: string): number {\n const cp = str.codePointAt(0)\n return cp ?? 0\n}\n\n/**\n * Check if a grapheme is likely an emoji.\n * Note: This is a heuristic, not comprehensive.\n */\nexport function isLikelyEmoji(grapheme: string): boolean {\n const cp = getFirstCodePoint(grapheme)\n return CHAR_RANGES.isEmoji(cp) || grapheme.includes(\"\\u200d\") // Contains ZWJ\n}\n\n/**\n * Check if a grapheme is a CJK character.\n */\nexport function isCJK(grapheme: string): boolean {\n const cp = getFirstCodePoint(grapheme)\n return CHAR_RANGES.isCJK(cp) || CHAR_RANGES.isJapaneseKana(cp) || CHAR_RANGES.isHangul(cp)\n}\n","/**\n * Error types for silvery terminal rendering.\n *\n * Separated from scheduler.ts to allow React-free barrel imports.\n * Keep this file React-free — only plain types allowed.\n */\n\nimport type { RenderPhaseStats } from \"./pipeline/types\"\n\n/** Structured mismatch data attached to the error (mirrors MismatchDebugContext shape) */\nexport interface MismatchErrorData {\n /** Render-phase instrumentation snapshot (nodes visited/rendered/skipped, per-flag breakdown) */\n renderPhaseStats?: RenderPhaseStats\n /** Debug context for the mismatched cell (from debug-mismatch.ts) */\n mismatchContext?: unknown\n}\n\n/**\n * Error thrown when SILVERY_STRICT detects a mismatch.\n * This error should NOT be caught by general error handlers - it indicates\n * a bug in incremental rendering that needs to be fixed.\n *\n * When SILVERY_STRICT fires, the error automatically includes:\n * - Render-phase instrumentation (nodes visited/rendered/skipped, per-flag breakdown)\n * - Cell attribution (which node owns the mismatched cell, dirty flags, scroll context)\n */\nexport class IncrementalRenderMismatchError extends Error {\n /** Render-phase instrumentation snapshot */\n renderPhaseStats?: RenderPhaseStats\n /** Debug context for the mismatched cell */\n mismatchContext?: unknown\n\n constructor(message: string, data?: MismatchErrorData) {\n super(message)\n this.name = \"IncrementalRenderMismatchError\"\n this.renderPhaseStats = data?.renderPhaseStats\n this.mismatchContext = data?.mismatchContext\n }\n}\n","// ═══════════════════════════════════════════════════════\n// Core Types\n// ═══════════════════════════════════════════════════════\n\nexport interface TerminalOptions {\n cols: number\n rows: number\n scrollbackLimit?: number\n}\n\n// ── Cell ──\n\nexport interface Cell {\n char: string\n fg: RGB | null\n bg: RGB | null\n bold: boolean\n dim: boolean\n italic: boolean\n underline: UnderlineStyle\n underlineColor: RGB | null\n strikethrough: boolean\n inverse: boolean\n blink: boolean\n hidden: boolean\n wide: boolean\n continuation: boolean\n hyperlink: string | null\n}\n\nexport type UnderlineStyle = false | \"single\" | \"double\" | \"curly\" | \"dotted\" | \"dashed\"\n\nexport type RGB = { r: number; g: number; b: number }\n\n// ── Cursor ──\n\nexport interface CursorState {\n x: number\n y: number\n /** Whether the cursor is visible. `null` if the backend doesn't know. */\n visible: boolean | null\n /** Cursor shape. `null` if the backend doesn't know. */\n style: CursorStyle | null\n}\n\nexport type CursorStyle = \"block\" | \"underline\" | \"beam\"\n\n// ── Modes ──\n\nexport type TerminalMode =\n | \"altScreen\"\n | \"cursorVisible\"\n | \"bracketedPaste\"\n | \"applicationCursor\"\n | \"applicationKeypad\"\n | \"autoWrap\"\n | \"mouseTracking\"\n | \"focusTracking\"\n | \"originMode\"\n | \"insertMode\"\n | \"reverseVideo\"\n\n// ── Scrollback ──\n\nexport interface ScrollbackState {\n /**\n * Absolute row index of the viewport's top line in the buffer.\n * When at the bottom (no scrollback visible): `totalLines - screenLines`.\n * When scrolled to the very top: `0`.\n *\n * Used by region views as the start row for viewport rendering:\n * `createRegionView(readable, viewportOffset, viewportOffset + screenLines)`.\n */\n viewportOffset: number\n /**\n * Total number of lines in the buffer (scrollback history + screen).\n * Row 0 is the first line in scrollback; row `totalLines - 1` is the last screen line.\n */\n totalLines: number\n /**\n * Number of visible screen rows (the terminal's row dimension).\n * The screen occupies the last `screenLines` rows of the buffer\n * (rows `totalLines - screenLines` through `totalLines - 1`).\n */\n screenLines: number\n}\n\n// ── Key ──\n\nexport interface KeyDescriptor {\n key: string\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n super?: boolean\n}\n\n// ── Capabilities ──\n\nexport interface TerminalCapabilities {\n name: string\n version: string\n truecolor: boolean\n kittyKeyboard: boolean\n kittyGraphics: boolean\n sixel: boolean\n osc8Hyperlinks: boolean\n semanticPrompts: boolean\n unicode: string\n reflow: boolean\n extensions: Set<string>\n}\n\n// ═══════════════════════════════════════════════════════\n// View Types — composable regions for matchers\n// ═══════════════════════════════════════════════════════\n\n/** A region of the terminal that can produce text. Used with text matchers. */\nexport interface RegionView {\n getText(): string\n getLines(): string[]\n containsText(text: string): boolean\n}\n\n/** A single cell with positional context. Used with style matchers. */\nexport interface CellView {\n readonly char: string\n readonly row: number\n readonly col: number\n readonly fg: RGB | null\n readonly bg: RGB | null\n readonly bold: boolean\n readonly dim: boolean\n readonly italic: boolean\n readonly underline: UnderlineStyle\n readonly underlineColor: RGB | null\n readonly strikethrough: boolean\n readonly inverse: boolean\n readonly blink: boolean\n readonly hidden: boolean\n readonly wide: boolean\n readonly continuation: boolean\n readonly hyperlink: string | null\n}\n\n/** A row is a RegionView with positional context and cell access. */\nexport interface RowView extends RegionView {\n readonly row: number\n readonly cells: Cell[]\n cellAt(col: number): CellView\n}\n\n// ═══════════════════════════════════════════════════════\n// TerminalReadable — shared protocol for backends\n// ═══════════════════════════════════════════════════════\n\n/**\n * Shared read protocol for terminal backends.\n *\n * **Coordinate system**: All row parameters use **absolute buffer rows**.\n * Row 0 is the first line in scrollback history. The screen occupies the\n * last `screenLines` rows (from `totalLines - screenLines` to `totalLines - 1`).\n */\nexport interface TerminalReadable {\n /** Get all buffer text (scrollback + screen) as a newline-joined string. */\n getText(): string\n /**\n * Get text in a rectangular range using absolute buffer rows.\n * startCol/endCol apply to the first/last rows respectively;\n * intermediate rows return full width.\n */\n getTextRange(startRow: number, startCol: number, endRow: number, endCol: number): string\n /** Get a single cell at an absolute buffer row and column. */\n getCell(row: number, col: number): Cell\n /** Get all cells in an absolute buffer row. */\n getLine(row: number): Cell[]\n /** Get all lines as cell arrays (entire buffer: scrollback + screen). */\n getLines(): Cell[][]\n getCursor(): CursorState\n getMode(mode: TerminalMode): boolean\n getTitle(): string\n getScrollback(): ScrollbackState\n}\n\n// ═══════════════════════════════════════════════════════\n// TerminalBackend — all backends MUST implement this\n// ═══════════════════════════════════════════════════════\n\nexport interface TerminalBackend extends TerminalReadable {\n readonly name: string\n\n // Lifecycle\n init(opts: TerminalOptions): void\n destroy(): void\n\n // Data flow\n feed(data: Uint8Array): void\n resize(cols: number, rows: number): void\n reset(): void\n\n // Key encoding\n encodeKey(key: KeyDescriptor): Uint8Array\n\n /**\n * Callback invoked when the emulator generates a response that must be\n * written back to the PTY (e.g., cursor position reports, device attribute\n * responses, kitty keyboard negotiation). Set by the Terminal layer when\n * a PTY is spawned.\n */\n onResponse?: (data: Uint8Array) => void\n\n // Scrollback\n scrollViewport(delta: number): void\n\n // Capabilities\n readonly capabilities: TerminalCapabilities\n}\n\n// ═══════════════════════════════════════════════════════\n// Terminal — high-level API wrapping backend + optional PTY\n// ═══════════════════════════════════════════════════════\n\nexport interface TerminalCreateOptions {\n backend: TerminalBackend\n cols?: number\n rows?: number\n scrollbackLimit?: number\n}\n\nexport interface SpawnOptions {\n command: string[]\n env?: Record<string, string>\n cwd?: string\n}\n\nexport interface TextPosition {\n row: number\n col: number\n text: string\n}\n\n/** Modifier keys for mouse events. */\nexport interface MouseModifiers {\n ctrl?: boolean\n shift?: boolean\n alt?: boolean\n}\n\n/** Options for mouse click/press/release events. */\nexport interface MouseOptions extends MouseModifiers {\n /** Mouse button: 0=left (default), 1=middle, 2=right. */\n button?: 0 | 1 | 2\n}\n\nexport interface Terminal extends TerminalReadable {\n readonly cols: number\n readonly rows: number\n readonly backend: TerminalBackend\n\n // Region selectors (WHERE)\n readonly screen: RegionView\n readonly scrollback: RegionView\n readonly buffer: RegionView\n readonly viewport: RegionView\n row(n: number): RowView\n cell(row: number, col: number): CellView\n range(r1: number, c1: number, r2: number, c2: number): RegionView\n firstRow(): RowView\n lastRow(): RowView\n\n // Direct data feed (no PTY)\n feed(data: Uint8Array | string): void\n\n // PTY lifecycle\n spawn(command: string[], options?: Omit<SpawnOptions, \"command\">): Promise<void>\n readonly alive: boolean\n readonly exitInfo: string | null\n\n // Input — keyboard\n press(key: string): void\n type(text: string): void\n\n // Input — mouse (SGR mode 1006)\n click(x: number, y: number, options?: MouseOptions): void\n dblclick(x: number, y: number, options?: MouseOptions & { delay?: number }): Promise<void>\n mouseDown(x: number, y: number, options?: MouseOptions): void\n mouseUp(x: number, y: number, options?: MouseOptions): void\n mouseMove(x: number, y: number, options?: MouseOptions): void\n wheel(deltaX: number, deltaY: number, options?: { x?: number; y?: number } & MouseModifiers): void\n\n // Waiting\n waitFor(text: string, timeout?: number): Promise<void>\n waitForStable(stableMs?: number, timeout?: number): Promise<void>\n\n // Search\n find(text: string): TextPosition | null\n findAll(pattern: RegExp): TextPosition[]\n\n // Screenshot\n screenshotSvg(options?: SvgScreenshotOptions): string\n screenshotPng(options?: PngScreenshotOptions): Promise<Uint8Array>\n\n // Resize\n resize(cols: number, rows: number): void\n\n // Clipboard\n /** Captured OSC 52 clipboard writes (decoded text). Populated when terminal output contains OSC 52 set-clipboard sequences. */\n readonly clipboardWrites: string[]\n\n // Cleanup\n close(): Promise<void>\n [Symbol.asyncDispose](): Promise<void>\n}\n\n// ═══════════════════════════════════════════════════════\n// SVG Screenshot Options\n// ═══════════════════════════════════════════════════════\n\nexport type WindowBar = \"none\" | \"rings\" | \"colorful\"\n\nexport interface SvgScreenshotOptions {\n fontFamily?: string\n fontSize?: number\n cellWidth?: number\n cellHeight?: number\n theme?: SvgTheme\n /** Padding between terminal content and SVG edge in pixels (default: 0). */\n padding?: number\n /** Border radius for the outer SVG rect in pixels (default: 0). */\n borderRadius?: number\n /** Window bar style — macOS traffic light dots (default: \"none\"). */\n windowBar?: WindowBar\n /** Height of the window bar area in pixels (default: 40). */\n windowBarSize?: number\n /** Outer margin around the SVG in pixels (default: 0). */\n margin?: number\n /** Fill color for the outer margin area (default: transparent). */\n marginFill?: string\n /** Playback speed multiplier for Sleep durations (default: 1). */\n playbackSpeed?: number\n /** Output framerate in frames per second (default: 50). */\n framerate?: number\n}\n\nexport interface PngScreenshotOptions extends SvgScreenshotOptions {\n /** Render scale factor (default: 2 for retina-quality output). */\n scale?: number\n}\n\nexport interface SvgTheme {\n foreground?: string\n background?: string\n cursor?: string\n palette?: Record<number, string>\n}\n\n// ═══════════════════════════════════════════════════════\n// Emulator Warnings\n// ═══════════════════════════════════════════════════════\n\n/**\n * Structured warning emitted by a terminal emulator backend.\n *\n * Backends capture these instead of (or in addition to) using console.log/warn.\n * Test infrastructure checks for unexpected warnings after each test to surface\n * portability issues — e.g., an emulator saying \"unsupported OSC: 66\" is the\n * emulator telling you \"your portability assumption is false.\"\n */\nexport interface EmulatorWarning {\n /** Warning category code, e.g., \"UNSUPPORTED_OSC\", \"UNKNOWN_CSI\", \"PARSE_ERROR\" */\n code: string\n /** The raw message from the emulator */\n message: string\n /** Which backend produced this warning */\n backend: string\n}\n\n/**\n * Extension interface for backends that can capture emulator warnings.\n *\n * Backends implementing this collect warnings during feed() calls instead of\n * logging to console. Test infrastructure drains warnings after each test.\n */\nexport interface WarningExtension {\n /** Get all accumulated warnings since last drain. */\n getWarnings(): EmulatorWarning[]\n /** Clear accumulated warnings (called by test teardown). */\n clearWarnings(): void\n}\n\n// ═══════════════════════════════════════════════════════\n// Extension Interfaces (optional)\n// ═══════════════════════════════════════════════════════\n\nexport interface MouseEvent {\n x: number\n y: number\n button: \"left\" | \"middle\" | \"right\" | \"wheelUp\" | \"wheelDown\" | \"none\"\n action: \"press\" | \"release\" | \"move\"\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n}\n\nexport interface MouseEncodingExtension {\n encodeMouse(event: MouseEvent): Uint8Array | null\n}\n\nexport interface ColorPaletteExtension {\n setColorPalette(entries: Partial<Record<number, RGB>>): void\n setDefaultFg(color: RGB): void\n setDefaultBg(color: RGB): void\n}\n\nexport interface DirtyTrackingExtension {\n getDirtyRows(): Set<number>\n clearDirty(): void\n}\n\nexport interface HyperlinkExtension {\n getHyperlinkAt(row: number, col: number): string | null\n}\n\nexport interface BellExtension {\n getBellCount(): number\n clearBellCount(): void\n}\n\nexport function hasExtension<T>(backend: TerminalBackend, ext: string): backend is TerminalBackend & T {\n return backend.capabilities.extensions.has(ext)\n}\n","/**\n * Shared ANSI key encoding for terminal backends.\n *\n * All backends need to convert KeyDescriptor → Uint8Array for PTY input.\n * This module delegates to keyToAnsi() as the single source of truth for\n * ANSI key encoding, converting the string result to bytes.\n */\n\nimport type { KeyDescriptor } from \"./types.ts\"\nimport { keyToAnsi } from \"./key-mapping.ts\"\n\n// Module-level TextEncoder for efficiency (avoids per-call allocation)\nconst encoder = new TextEncoder()\n\n/**\n * Encode a KeyDescriptor to an ANSI byte sequence for PTY input.\n *\n * Delegates to keyToAnsi() for the actual encoding, then converts to bytes.\n * This is the canonical encoder — backends that don't have their own\n * protocol (e.g., kitty keyboard) should use this.\n */\nexport function encodeKeyToAnsi(key: KeyDescriptor): Uint8Array {\n const ansi = keyToAnsi(key)\n return encoder.encode(ansi)\n}\n","/**\n * Pure assertion functions for terminal testing.\n *\n * These are test-runner-agnostic: they return { pass, message } objects\n * that any matcher wrapper (vitest, jest, bun:test, node:test) can use.\n *\n * Three categories match the composable API:\n * - Region assertions: operate on RegionView (getText, getLines, containsText)\n * - Cell assertions: operate on CellView (bold, italic, fg, bg, etc.)\n * - Terminal assertions: operate on TerminalReadable (cursor, modes, scrollback)\n */\n\nimport type { CellView, CursorStyle, RegionView, RGB, TerminalMode, TerminalReadable, UnderlineStyle } from \"./types.ts\"\n\n// ═══════════════════════════════════════════════════════\n// Result Type\n// ═══════════════════════════════════════════════════════\n\nexport interface AssertionResult {\n pass: boolean\n message: string\n expected?: unknown\n actual?: unknown\n}\n\n// ═══════════════════════════════════════════════════════\n// Type Guards\n// ═══════════════════════════════════════════════════════\n\nexport function isRegionView(value: unknown): value is RegionView {\n return (\n value !== null &&\n typeof value === \"object\" &&\n \"containsText\" in value &&\n typeof (value as Record<string, unknown>).containsText === \"function\"\n )\n}\n\nexport function isCellView(value: unknown): value is CellView {\n return (\n value !== null && typeof value === \"object\" && \"bold\" in value && \"fg\" in value && \"row\" in value && \"col\" in value\n )\n}\n\nexport function isTerminalReadable(value: unknown): value is TerminalReadable {\n if (value === null || value === undefined) return false\n // Accept both objects and functions — Proxy-based wrappers (silvery Term)\n // use a function target for callability, so typeof returns \"function\"\n if (typeof value !== \"object\" && typeof value !== \"function\") return false\n return \"getCell\" in value && \"getCursor\" in value && \"getMode\" in value\n}\n\n// ═══════════════════════════════════════════════════════\n// Type Assertions (throw on wrong type)\n// ═══════════════════════════════════════════════════════\n\nexport function assertRegionView(value: unknown, matcherName: string): asserts value is RegionView {\n if (isRegionView(value)) return\n if (isTerminalReadable(value)) {\n throw new Error(\n `${matcherName} requires a region. Use term.screen, term.buffer, or term.scrollback. ` +\n `Example: expect(term.screen).${matcherName}(...)`,\n )\n }\n throw new Error(\n `${matcherName} requires a RegionView (an object with containsText, getText, getLines). ` + `Got ${typeof value}.`,\n )\n}\n\nexport function assertCellView(value: unknown, matcherName: string): asserts value is CellView {\n if (isCellView(value)) return\n throw new Error(\n `${matcherName} expects a CellView. Use term.cell(row, col). ` +\n `Example: expect(term.cell(0, 0)).${matcherName}()`,\n )\n}\n\nexport function assertTerminalReadable(value: unknown, matcherName: string): asserts value is TerminalReadable {\n if (isTerminalReadable(value)) return\n throw new Error(\n `${matcherName} expects a TerminalReadable, got ${typeof value}. ` +\n `Pass an object with getCell(), getCursor(), and getMode() methods.`,\n )\n}\n\n// ═══════════════════════════════════════════════════════\n// Color Helpers\n// ═══════════════════════════════════════════════════════\n\nexport function parseColor(color: string | RGB): RGB {\n if (typeof color === \"object\") return color\n const hex = color.replace(\"#\", \"\")\n return {\n r: parseInt(hex.slice(0, 2), 16),\n g: parseInt(hex.slice(2, 4), 16),\n b: parseInt(hex.slice(4, 6), 16),\n }\n}\n\nexport function colorsMatch(a: RGB | null, b: RGB): boolean {\n if (!a) return false\n return a.r === b.r && a.g === b.g && a.b === b.b\n}\n\nexport function formatRgb(color: RGB | null): string {\n if (!color) return \"null\"\n return `#${color.r.toString(16).padStart(2, \"0\")}${color.g.toString(16).padStart(2, \"0\")}${color.b.toString(16).padStart(2, \"0\")}`\n}\n\n// ═══════════════════════════════════════════════════════\n// Region Assertions (RegionView)\n// ═══════════════════════════════════════════════════════\n\n/** Assert region contains the given text as a substring. */\nexport function assertContainsText(region: RegionView, text: string): AssertionResult {\n const pass = region.containsText(text)\n const content = region.getText()\n return {\n pass,\n message: pass\n ? `Expected region not to contain \"${text}\"\\n\\nContent:\\n${content}`\n : `Expected region to contain \"${text}\"\\n\\nContent:\\n${content}`,\n }\n}\n\n/** Assert region text matches exactly after trimming. */\nexport function assertHasText(region: RegionView, text: string): AssertionResult {\n const actual = region.getText().trim()\n const pass = actual === text\n return {\n pass,\n message: pass\n ? `Expected region text not to be \"${text}\"`\n : `Expected region text to be \"${text}\"\\n\\nActual: \"${actual}\"`,\n expected: text,\n actual,\n }\n}\n\n/** Assert region lines match expected lines (trailing whitespace trimmed per line). */\nexport function assertMatchesLines(region: RegionView, expectedLines: string[]): AssertionResult {\n const actualLines = region.getLines().map((l) => l.trimEnd())\n\n const maxLen = Math.max(actualLines.length, expectedLines.length)\n const mismatches: string[] = []\n for (let i = 0; i < maxLen; i++) {\n const actual = actualLines[i] ?? \"\"\n const expected = expectedLines[i] ?? \"\"\n if (actual !== expected) {\n mismatches.push(` line ${i}: expected \"${expected}\" got \"${actual}\"`)\n }\n }\n\n const pass = mismatches.length === 0\n return {\n pass,\n message: pass\n ? `Expected region lines not to match the given lines`\n : `Region line mismatch:\\n${mismatches.join(\"\\n\")}`,\n expected: expectedLines,\n actual: actualLines,\n }\n}\n\n// ═══════════════════════════════════════════════════════\n// Cell Assertions (CellView)\n// ═══════════════════════════════════════════════════════\n\nfunction cellLocation(cell: CellView): string {\n return `cell (${cell.row},${cell.col}) containing '${cell.char}'`\n}\n\n/** Assert cell is bold. */\nexport function assertIsBold(cell: CellView): AssertionResult {\n const loc = cellLocation(cell)\n return {\n pass: cell.bold,\n message: cell.bold ? `Expected ${loc} not to be bold` : `Expected ${loc} to be bold`,\n }\n}\n\n/** Assert cell is italic. */\nexport function assertIsItalic(cell: CellView): AssertionResult {\n const loc = cellLocation(cell)\n return {\n pass: cell.italic,\n message: cell.italic ? `Expected ${loc} not to be italic` : `Expected ${loc} to be italic`,\n }\n}\n\n/** Assert cell is dim. */\nexport function assertIsDim(cell: CellView): AssertionResult {\n const loc = cellLocation(cell)\n return {\n pass: cell.dim,\n message: cell.dim ? `Expected ${loc} not to be dim` : `Expected ${loc} to be dim`,\n }\n}\n\n/** Assert cell has strikethrough. */\nexport function assertIsStrikethrough(cell: CellView): AssertionResult {\n const loc = cellLocation(cell)\n return {\n pass: cell.strikethrough,\n message: cell.strikethrough ? `Expected ${loc} not to be strikethrough` : `Expected ${loc} to be strikethrough`,\n }\n}\n\n/** Assert cell has inverse video. */\nexport function assertIsInverse(cell: CellView): AssertionResult {\n const loc = cellLocation(cell)\n return {\n pass: cell.inverse,\n message: cell.inverse ? `Expected ${loc} not to be inverse` : `Expected ${loc} to be inverse`,\n }\n}\n\n/** Assert cell is wide (double-width character). */\nexport function assertIsWide(cell: CellView): AssertionResult {\n const loc = cellLocation(cell)\n return {\n pass: cell.wide,\n message: cell.wide ? `Expected ${loc} not to be wide` : `Expected ${loc} to be wide`,\n }\n}\n\n/** Assert cell has underline. Optionally check specific style. */\nexport function assertHasUnderline(cell: CellView, style?: UnderlineStyle): AssertionResult {\n const loc = cellLocation(cell)\n const hasUnderline = cell.underline !== false\n const pass = style ? cell.underline === style : hasUnderline\n\n let message: string\n if (style) {\n message = pass\n ? `Expected ${loc} not to have underline style \"${style}\"`\n : `Expected ${loc} underline to be \"${style}\", got \"${cell.underline}\"`\n } else {\n message = pass\n ? `Expected ${loc} not to be underlined`\n : `Expected ${loc} to be underlined, got \"${cell.underline}\"`\n }\n\n return { pass, message, expected: style ?? \"any underline\", actual: cell.underline }\n}\n\n/** Assert cell foreground color. Accepts hex string or {r,g,b}. */\nexport function assertHasFg(cell: CellView, color: string | RGB): AssertionResult {\n const loc = cellLocation(cell)\n const expected = parseColor(color)\n const pass = colorsMatch(cell.fg, expected)\n return {\n pass,\n message: pass\n ? `Expected ${loc} not to have fg ${formatRgb(expected)}`\n : `Expected ${loc} fg to be ${formatRgb(expected)}, got ${formatRgb(cell.fg)}`,\n expected: formatRgb(expected),\n actual: formatRgb(cell.fg),\n }\n}\n\n/** Assert cell background color. Accepts hex string or {r,g,b}. */\nexport function assertHasBg(cell: CellView, color: string | RGB): AssertionResult {\n const loc = cellLocation(cell)\n const expected = parseColor(color)\n const pass = colorsMatch(cell.bg, expected)\n return {\n pass,\n message: pass\n ? `Expected ${loc} not to have bg ${formatRgb(expected)}`\n : `Expected ${loc} bg to be ${formatRgb(expected)}, got ${formatRgb(cell.bg)}`,\n expected: formatRgb(expected),\n actual: formatRgb(cell.bg),\n }\n}\n\n// ═══════════════════════════════════════════════════════\n// Composable Cell Assertion (CellView)\n// ═══════════════════════════════════════════════════════\n\n/** Partial cell attributes for composable matching. */\nexport interface CellAttrs {\n bold?: boolean\n italic?: boolean\n dim?: boolean\n strikethrough?: boolean\n inverse?: boolean\n wide?: boolean\n /** `true` matches any underline style; a string matches a specific style. */\n underline?: UnderlineStyle | boolean\n fg?: string | RGB\n bg?: string | RGB\n}\n\n/** Assert multiple cell attributes at once. Only specified fields are checked. */\nexport function assertHaveAttrs(cell: CellView, attrs: CellAttrs): AssertionResult {\n const loc = cellLocation(cell)\n const details: string[] = []\n let allMatch = true\n\n const check = (label: string, expected: unknown, actual: unknown, pass: boolean) => {\n if (pass) {\n details.push(` ${label}: matched`)\n } else {\n details.push(` ${label}: expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`)\n allMatch = false\n }\n }\n\n if (attrs.bold !== undefined) check(\"bold\", attrs.bold, cell.bold, cell.bold === attrs.bold)\n if (attrs.italic !== undefined) check(\"italic\", attrs.italic, cell.italic, cell.italic === attrs.italic)\n if (attrs.dim !== undefined) check(\"dim\", attrs.dim, cell.dim, cell.dim === attrs.dim)\n if (attrs.strikethrough !== undefined)\n check(\"strikethrough\", attrs.strikethrough, cell.strikethrough, cell.strikethrough === attrs.strikethrough)\n if (attrs.inverse !== undefined) check(\"inverse\", attrs.inverse, cell.inverse, cell.inverse === attrs.inverse)\n if (attrs.wide !== undefined) check(\"wide\", attrs.wide, cell.wide, cell.wide === attrs.wide)\n\n if (attrs.underline !== undefined) {\n if (attrs.underline === true) {\n const hasUnderline = cell.underline !== false\n check(\"underline\", true, cell.underline, hasUnderline)\n } else {\n check(\"underline\", attrs.underline, cell.underline, cell.underline === attrs.underline)\n }\n }\n\n if (attrs.fg !== undefined) {\n const expected = parseColor(attrs.fg)\n const pass = colorsMatch(cell.fg, expected)\n check(\"fg\", formatRgb(expected), formatRgb(cell.fg), pass)\n }\n\n if (attrs.bg !== undefined) {\n const expected = parseColor(attrs.bg)\n const pass = colorsMatch(cell.bg, expected)\n check(\"bg\", formatRgb(expected), formatRgb(cell.bg), pass)\n }\n\n const attrsStr = JSON.stringify(attrs)\n return {\n pass: allMatch,\n message: allMatch\n ? `Expected ${loc} not to have attrs ${attrsStr}`\n : `Expected ${loc} to have attrs ${attrsStr}\\n${details.join(\"\\n\")}`,\n }\n}\n\n// ═══════════════════════════════════════════════════════\n// Terminal Assertions (TerminalReadable)\n// ═══════════════════════════════════════════════════════\n\n/** Assert cursor is at the given position. */\nexport function assertCursorAt(term: TerminalReadable, x: number, y: number): AssertionResult {\n const cursor = term.getCursor()\n const pass = cursor.x === x && cursor.y === y\n return {\n pass,\n message: pass\n ? `Expected cursor not to be at (${x},${y})`\n : `Expected cursor at (${x},${y}), got (${cursor.x},${cursor.y})`,\n expected: { x, y },\n actual: { x: cursor.x, y: cursor.y },\n }\n}\n\n/** Assert cursor has a specific style (block, underline, beam). */\nexport function assertCursorStyle(term: TerminalReadable, style: CursorStyle): AssertionResult {\n const cursor = term.getCursor()\n if (cursor.style === null) {\n return {\n pass: false,\n message: `Expected cursor style to be \"${style}\", but backend does not report cursor style (null)`,\n expected: style,\n actual: null,\n }\n }\n const pass = cursor.style === style\n return {\n pass,\n message: pass\n ? `Expected cursor style not to be \"${style}\"`\n : `Expected cursor style to be \"${style}\", got \"${cursor.style}\"`,\n expected: style,\n actual: cursor.style,\n }\n}\n\n/** Assert cursor is visible. */\nexport function assertCursorVisible(term: TerminalReadable): AssertionResult {\n const cursor = term.getCursor()\n if (cursor.visible === null) {\n return {\n pass: false,\n message: `Expected cursor to be visible, but backend does not report cursor visibility (null)`,\n }\n }\n return {\n pass: cursor.visible,\n message: cursor.visible ? `Expected cursor not to be visible` : `Expected cursor to be visible`,\n }\n}\n\n/** Assert cursor is hidden. */\nexport function assertCursorHidden(term: TerminalReadable): AssertionResult {\n const cursor = term.getCursor()\n if (cursor.visible === null) {\n return {\n pass: false,\n message: `Expected cursor to be hidden, but backend does not report cursor visibility (null)`,\n }\n }\n return {\n pass: !cursor.visible,\n message: !cursor.visible ? `Expected cursor not to be hidden` : `Expected cursor to be hidden`,\n }\n}\n\n// ═══════════════════════════════════════════════════════\n// Composable Cursor Assertion (TerminalReadable)\n// ═══════════════════════════════════════════════════════\n\n/** Partial cursor properties for composable matching. */\nexport interface CursorProps {\n x?: number\n y?: number\n visible?: boolean\n style?: CursorStyle\n}\n\n/** Assert multiple cursor properties at once. Only specified fields are checked. */\nexport function assertHaveCursor(term: TerminalReadable, props: CursorProps): AssertionResult {\n const cursor = term.getCursor()\n const details: string[] = []\n let allMatch = true\n\n const check = (label: string, expected: unknown, actual: unknown, pass: boolean) => {\n if (pass) {\n details.push(` ${label}: matched`)\n } else {\n details.push(` ${label}: expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`)\n allMatch = false\n }\n }\n\n if (props.x !== undefined) check(\"x\", props.x, cursor.x, cursor.x === props.x)\n if (props.y !== undefined) check(\"y\", props.y, cursor.y, cursor.y === props.y)\n\n if (props.visible !== undefined) {\n if (cursor.visible === null) {\n details.push(\n ` visible: expected ${JSON.stringify(props.visible)}, but backend does not report cursor visibility (null)`,\n )\n allMatch = false\n } else {\n check(\"visible\", props.visible, cursor.visible, cursor.visible === props.visible)\n }\n }\n\n if (props.style !== undefined) {\n if (cursor.style === null) {\n details.push(` style: expected ${JSON.stringify(props.style)}, but backend does not report cursor style (null)`)\n allMatch = false\n } else {\n check(\"style\", props.style, cursor.style, cursor.style === props.style)\n }\n }\n\n const propsStr = JSON.stringify(props)\n return {\n pass: allMatch,\n message: allMatch\n ? `Expected terminal not to have cursor ${propsStr}`\n : `Expected terminal to have cursor ${propsStr}\\n${details.join(\"\\n\")}`,\n }\n}\n\n/** Assert a specific terminal mode is enabled. */\nexport function assertInMode(term: TerminalReadable, mode: TerminalMode): AssertionResult {\n const pass = term.getMode(mode)\n return {\n pass,\n message: pass ? `Expected terminal not to be in mode \"${mode}\"` : `Expected terminal to be in mode \"${mode}\"`,\n }\n}\n\n/** Assert terminal has a specific title (set via OSC escape). */\nexport function assertTitle(term: TerminalReadable, title: string): AssertionResult {\n const actual = term.getTitle()\n const pass = actual === title\n return {\n pass,\n message: pass\n ? `Expected terminal title not to be \"${title}\"`\n : `Expected terminal title to be \"${title}\", got \"${actual}\"`,\n expected: title,\n actual,\n }\n}\n\n/** Assert scrollback has a specific number of lines (excluding visible screen lines). */\nexport function assertScrollbackLines(term: TerminalReadable, n: number): AssertionResult {\n const scrollback = term.getScrollback()\n const scrollbackLines = Math.max(0, scrollback.totalLines - scrollback.screenLines)\n const pass = scrollbackLines === n\n return {\n pass,\n message: pass\n ? `Expected scrollback not to have ${n} lines`\n : `Expected scrollback to have ${n} lines, got ${scrollbackLines}`,\n expected: n,\n actual: scrollbackLines,\n }\n}\n\n/** Assert viewport is at the bottom of scrollback (viewing the latest output). */\nexport function assertAtBottomOfScrollback(term: TerminalReadable): AssertionResult {\n const scrollback = term.getScrollback()\n const bottomOffset = scrollback.totalLines - scrollback.screenLines\n const pass = scrollback.viewportOffset === bottomOffset\n return {\n pass,\n message: pass\n ? `Expected terminal not to be at bottom of scrollback`\n : `Expected terminal to be at bottom of scrollback (viewportOffset=${bottomOffset}), got ${scrollback.viewportOffset}`,\n }\n}\n\n// ═══════════════════════════════════════════════════════\n// Clipboard Assertions\n// ═══════════════════════════════════════════════════════\n\n/** Assert that the terminal has captured a specific clipboard text via OSC 52. */\nexport function assertClipboardText(clipboardWrites: readonly string[], expected: string): AssertionResult {\n const pass = clipboardWrites.includes(expected)\n return {\n pass,\n message: pass\n ? `Expected clipboard not to contain \"${expected}\"`\n : clipboardWrites.length === 0\n ? `Expected clipboard to contain \"${expected}\", but no OSC 52 writes were captured`\n : `Expected clipboard to contain \"${expected}\", but captured: ${JSON.stringify(clipboardWrites)}`,\n expected,\n actual: clipboardWrites,\n }\n}\n","/**\n * Jest/Bun-compatible matcher adapter for terminal testing.\n *\n * Wraps the pure assertion functions from ./assertions.ts into the\n * Jest `expect.extend()` format. Works with Jest, Bun test, and any\n * runner that supports `expect.extend({ matcherName(received, ...args) })`.\n *\n * Usage:\n * import { termlessMatchers } from \"@termless/core\"\n * expect.extend(termlessMatchers)\n *\n * // Then use matchers:\n * expect(term.screen).toContainText(\"Hello\")\n * expect(term.cell(0, 0)).toBeBold()\n * expect(term).toHaveCursorAt(5, 10)\n */\n\nimport type { CursorStyle, RGB, TerminalMode, UnderlineStyle } from \"./types.ts\"\nimport {\n assertRegionView,\n assertCellView,\n assertTerminalReadable,\n assertContainsText,\n assertHasText,\n assertMatchesLines,\n assertIsBold,\n assertIsItalic,\n assertIsDim,\n assertIsStrikethrough,\n assertIsInverse,\n assertIsWide,\n assertHasUnderline,\n assertHasFg,\n assertHasBg,\n assertHaveAttrs,\n assertCursorAt,\n assertCursorStyle,\n assertCursorVisible,\n assertCursorHidden,\n assertHaveCursor,\n assertInMode,\n assertTitle,\n assertScrollbackLines,\n assertAtBottomOfScrollback,\n type AssertionResult,\n type CellAttrs,\n type CursorProps,\n} from \"./assertions.ts\"\n\n/** Convert an AssertionResult to the { pass, message() } format Jest/vitest expect. */\nfunction toMatcherResult(result: AssertionResult) {\n return {\n pass: result.pass,\n message: () => result.message,\n }\n}\n\n/**\n * Terminal matchers compatible with Jest's `expect.extend()`.\n * Also works with Bun test and any Jest-compatible expect implementation.\n *\n * @example\n * ```typescript\n * import { termlessMatchers } from \"@termless/core\"\n * expect.extend(termlessMatchers)\n * ```\n */\nexport const termlessMatchers = {\n // ── Text Matchers (RegionView) ──\n\n toContainText(received: unknown, text: string) {\n assertRegionView(received, \"toContainText\")\n return toMatcherResult(assertContainsText(received, text))\n },\n\n toHaveText(received: unknown, text: string) {\n assertRegionView(received, \"toHaveText\")\n return toMatcherResult(assertHasText(received, text))\n },\n\n toMatchLines(received: unknown, lines: string[]) {\n assertRegionView(received, \"toMatchLines\")\n return toMatcherResult(assertMatchesLines(received, lines))\n },\n\n // ── Cell Style Matchers (CellView) ──\n\n /** Assert multiple cell attributes at once. */\n toHaveAttrs(received: unknown, attrs: CellAttrs) {\n assertCellView(received, \"toHaveAttrs\")\n return toMatcherResult(assertHaveAttrs(received, attrs))\n },\n\n /** @deprecated Use toHaveAttrs({ bold: true }) */\n toBeBold(received: unknown) {\n assertCellView(received, \"toBeBold\")\n return toMatcherResult(assertIsBold(received))\n },\n\n /** @deprecated Use toHaveAttrs({ italic: true }) */\n toBeItalic(received: unknown) {\n assertCellView(received, \"toBeItalic\")\n return toMatcherResult(assertIsItalic(received))\n },\n\n /** @deprecated Use toHaveAttrs({ dim: true }) */\n toBeDim(received: unknown) {\n assertCellView(received, \"toBeDim\")\n return toMatcherResult(assertIsDim(received))\n },\n\n /** @deprecated Use toHaveAttrs({ strikethrough: true }) */\n toBeStrikethrough(received: unknown) {\n assertCellView(received, \"toBeStrikethrough\")\n return toMatcherResult(assertIsStrikethrough(received))\n },\n\n /** @deprecated Use toHaveAttrs({ inverse: true }) */\n toBeInverse(received: unknown) {\n assertCellView(received, \"toBeInverse\")\n return toMatcherResult(assertIsInverse(received))\n },\n\n /** @deprecated Use toHaveAttrs({ wide: true }) */\n toBeWide(received: unknown) {\n assertCellView(received, \"toBeWide\")\n return toMatcherResult(assertIsWide(received))\n },\n\n /** @deprecated Use toHaveAttrs({ underline: true }) or toHaveAttrs({ underline: \"curly\" }) */\n toHaveUnderline(received: unknown, style?: UnderlineStyle) {\n assertCellView(received, \"toHaveUnderline\")\n return toMatcherResult(assertHasUnderline(received, style))\n },\n\n /** @deprecated Use toHaveAttrs({ fg: color }) */\n toHaveFg(received: unknown, color: string | RGB) {\n assertCellView(received, \"toHaveFg\")\n return toMatcherResult(assertHasFg(received, color))\n },\n\n /** @deprecated Use toHaveAttrs({ bg: color }) */\n toHaveBg(received: unknown, color: string | RGB) {\n assertCellView(received, \"toHaveBg\")\n return toMatcherResult(assertHasBg(received, color))\n },\n\n // ── Terminal Matchers (TerminalReadable) ──\n\n /** Assert multiple cursor properties at once. */\n toHaveCursor(received: unknown, props: CursorProps) {\n assertTerminalReadable(received, \"toHaveCursor\")\n return toMatcherResult(assertHaveCursor(received, props))\n },\n\n /** @deprecated Use toHaveCursor({ x, y }) */\n toHaveCursorAt(received: unknown, x: number, y: number) {\n assertTerminalReadable(received, \"toHaveCursorAt\")\n return toMatcherResult(assertCursorAt(received, x, y))\n },\n\n /** @deprecated Use toHaveCursor({ style }) */\n toHaveCursorStyle(received: unknown, style: CursorStyle) {\n assertTerminalReadable(received, \"toHaveCursorStyle\")\n return toMatcherResult(assertCursorStyle(received, style))\n },\n\n /** @deprecated Use toHaveCursor({ visible: true }) */\n toHaveCursorVisible(received: unknown) {\n assertTerminalReadable(received, \"toHaveCursorVisible\")\n return toMatcherResult(assertCursorVisible(received))\n },\n\n /** @deprecated Use toHaveCursor({ visible: false }) */\n toHaveCursorHidden(received: unknown) {\n assertTerminalReadable(received, \"toHaveCursorHidden\")\n return toMatcherResult(assertCursorHidden(received))\n },\n\n toBeInMode(received: unknown, mode: TerminalMode) {\n assertTerminalReadable(received, \"toBeInMode\")\n return toMatcherResult(assertInMode(received, mode))\n },\n\n toHaveTitle(received: unknown, title: string) {\n assertTerminalReadable(received, \"toHaveTitle\")\n return toMatcherResult(assertTitle(received, title))\n },\n\n toHaveScrollbackLines(received: unknown, n: number) {\n assertTerminalReadable(received, \"toHaveScrollbackLines\")\n return toMatcherResult(assertScrollbackLines(received, n))\n },\n\n toBeAtBottomOfScrollback(received: unknown) {\n assertTerminalReadable(received, \"toBeAtBottomOfScrollback\")\n return toMatcherResult(assertAtBottomOfScrollback(received))\n },\n}\n","/**\n * Visual diff between two terminal buffers.\n *\n * Compares two TerminalReadable instances cell-by-cell and produces a\n * structured diff result plus a human-readable formatted string.\n */\n\nimport type { Cell, RGB, TerminalReadable, UnderlineStyle } from \"./types.ts\"\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** A single cell difference between two buffers. */\nexport interface CellDiff {\n row: number\n col: number\n old: CellSummary\n new: CellSummary\n}\n\n/** Compact representation of a cell's visible properties. */\nexport interface CellSummary {\n char: string\n fg: RGB | null\n bg: RGB | null\n bold: boolean\n italic: boolean\n underline: UnderlineStyle\n}\n\n/** Result of comparing two terminal buffers. */\nexport interface DiffResult {\n /** Whether the buffers are identical. */\n equal: boolean\n /** Positions that differ, with old and new cell values. */\n diffs: CellDiff[]\n /** Human-readable formatted diff string. */\n formatted: string\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction cellToSummary(cell: Cell): CellSummary {\n return {\n char: cell.char,\n fg: cell.fg,\n bg: cell.bg,\n bold: cell.bold,\n italic: cell.italic,\n underline: cell.underline,\n }\n}\n\nfunction cellsEqual(a: Cell, b: Cell): boolean {\n return (\n a.char === b.char &&\n rgbEqual(a.fg, b.fg) &&\n rgbEqual(a.bg, b.bg) &&\n a.bold === b.bold &&\n a.dim === b.dim &&\n a.italic === b.italic &&\n a.underline === b.underline &&\n a.underlineColor === b.underlineColor &&\n a.strikethrough === b.strikethrough &&\n a.inverse === b.inverse &&\n a.blink === b.blink &&\n a.hidden === b.hidden &&\n a.wide === b.wide &&\n a.continuation === b.continuation &&\n a.hyperlink === b.hyperlink\n )\n}\n\nfunction rgbEqual(a: RGB | null, b: RGB | null): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.r === b.r && a.g === b.g && a.b === b.b\n}\n\nfunction formatRgb(color: RGB | null): string {\n if (!color) return \"default\"\n return `#${color.r.toString(16).padStart(2, \"0\")}${color.g.toString(16).padStart(2, \"0\")}${color.b.toString(16).padStart(2, \"0\")}`\n}\n\nfunction describeCellDiff(diff: CellDiff): string {\n const parts: string[] = []\n\n if (diff.old.char !== diff.new.char) {\n const oldChar = diff.old.char || \" \"\n const newChar = diff.new.char || \" \"\n parts.push(`text: '${oldChar}' -> '${newChar}'`)\n }\n\n if (!rgbEqual(diff.old.fg, diff.new.fg)) {\n parts.push(`fg: ${formatRgb(diff.old.fg)} -> ${formatRgb(diff.new.fg)}`)\n }\n\n if (!rgbEqual(diff.old.bg, diff.new.bg)) {\n parts.push(`bg: ${formatRgb(diff.old.bg)} -> ${formatRgb(diff.new.bg)}`)\n }\n\n if (diff.old.bold !== diff.new.bold) {\n parts.push(`bold: ${diff.old.bold} -> ${diff.new.bold}`)\n }\n\n if (diff.old.italic !== diff.new.italic) {\n parts.push(`italic: ${diff.old.italic} -> ${diff.new.italic}`)\n }\n\n if (diff.old.underline !== diff.new.underline) {\n parts.push(`underline: ${diff.old.underline} -> ${diff.new.underline}`)\n }\n\n return parts.join(\", \")\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Compare two terminal buffers cell-by-cell.\n *\n * Returns positions that differ with old/new values, plus a formatted diff\n * string for human-readable output.\n *\n * @example\n * ```ts\n * const result = diffBuffers(termA, termB)\n * if (!result.equal) {\n * console.log(result.formatted)\n * // (0,5) text: 'a' -> 'b'\n * // (1,0) fg: #ff0000 -> default\n * }\n * ```\n */\nexport function diffBuffers(a: TerminalReadable, b: TerminalReadable): DiffResult {\n const linesA = a.getLines()\n const linesB = b.getLines()\n const maxRows = Math.max(linesA.length, linesB.length)\n\n const diffs: CellDiff[] = []\n\n for (let row = 0; row < maxRows; row++) {\n const rowA = linesA[row] ?? []\n const rowB = linesB[row] ?? []\n const maxCols = Math.max(rowA.length, rowB.length)\n\n for (let col = 0; col < maxCols; col++) {\n const cellA = rowA[col] ?? emptyCell()\n const cellB = rowB[col] ?? emptyCell()\n\n if (!cellsEqual(cellA, cellB)) {\n diffs.push({\n row,\n col,\n old: cellToSummary(cellA),\n new: cellToSummary(cellB),\n })\n }\n }\n }\n\n const formatted =\n diffs.length === 0\n ? \"Buffers are identical\"\n : diffs.map((d) => `(${d.row},${d.col}) ${describeCellDiff(d)}`).join(\"\\n\")\n\n return {\n equal: diffs.length === 0,\n diffs,\n formatted,\n }\n}\n\nfunction emptyCell(): Cell {\n return {\n char: \" \",\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false,\n underlineColor: null,\n strikethrough: false,\n inverse: false,\n blink: false,\n hidden: false,\n wide: false,\n continuation: false,\n hyperlink: null,\n }\n}\n","/**\n * Recording and replay for terminal I/O sessions.\n *\n * Captures input/output events with timestamps during a recording session.\n * Recordings are JSON-serializable for storage and sharing. Replay feeds\n * events back to a terminal with timing preserved.\n *\n * Also provides visual state snapshotting for change detection — captures\n * the full visual state (cell styles, cursor, modes, title) as a\n * deterministic string, so frame recorders can detect non-text changes\n * like cursor style, color, and mode transitions.\n */\n\nimport type { Cell, RGB, Terminal, TerminalReadable, TerminalMode, UnderlineStyle } from \"./types.ts\"\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** A single recorded event (input or output). */\nexport interface RecordedEvent {\n /** Timestamp in milliseconds relative to recording start. */\n timestamp: number\n /** Event type: \"input\" for data sent to terminal, \"output\" for data received. */\n type: \"input\" | \"output\"\n /** The data as a string. */\n data: string\n}\n\n/** A complete recording of a terminal session. */\nexport interface Recording {\n /** Recording format version. */\n version: 1\n /** Terminal dimensions at recording start. */\n cols: number\n /** Terminal dimensions at recording start. */\n rows: number\n /** Total duration in milliseconds. */\n duration: number\n /** Recorded events in chronological order. */\n events: RecordedEvent[]\n}\n\n/** Handle returned by startRecording() to control the active recording. */\nexport interface RecordingHandle {\n /** Record an input event (data sent to the terminal). */\n recordInput(data: string): void\n /** Record an output event (data received from the terminal). */\n recordOutput(data: string): void\n /** Stop recording and return the completed Recording. */\n stop(): Recording\n}\n\n// =============================================================================\n// Recording\n// =============================================================================\n\n/**\n * Start recording terminal I/O events.\n *\n * Returns a handle that captures input/output events with timestamps.\n * Call `stop()` to finalize and get the JSON-serializable Recording.\n *\n * @example\n * ```ts\n * const handle = startRecording(terminal)\n * handle.recordOutput(\"$ \")\n * handle.recordInput(\"ls\\n\")\n * handle.recordOutput(\"file1 file2\\n$ \")\n * const recording = handle.stop()\n * // recording is JSON-serializable\n * ```\n */\nexport function startRecording(terminal: Terminal): RecordingHandle {\n const startTime = Date.now()\n const events: RecordedEvent[] = []\n let stopped = false\n\n return {\n recordInput(data: string): void {\n if (stopped) throw new Error(\"Recording has been stopped\")\n events.push({\n timestamp: Date.now() - startTime,\n type: \"input\",\n data,\n })\n },\n\n recordOutput(data: string): void {\n if (stopped) throw new Error(\"Recording has been stopped\")\n events.push({\n timestamp: Date.now() - startTime,\n type: \"output\",\n data,\n })\n },\n\n stop(): Recording {\n if (stopped) throw new Error(\"Recording has already been stopped\")\n stopped = true\n const duration = Date.now() - startTime\n return {\n version: 1,\n cols: terminal.cols,\n rows: terminal.rows,\n duration,\n events,\n }\n },\n }\n}\n\n// =============================================================================\n// Replay\n// =============================================================================\n\n/**\n * Replay a recording into a terminal.\n *\n * Feeds output events to the terminal via `feed()`. Input events are\n * included in the recording for completeness but are not sent during\n * replay (the terminal is being driven by recorded output, not real input).\n *\n * By default, replay is instant (no delays). Pass `{ realtime: true }` to\n * replay with original timing.\n *\n * @example\n * ```ts\n * // Instant replay (synchronous for output events)\n * await replayRecording(terminal, recording)\n *\n * // Real-time replay with original timing\n * await replayRecording(terminal, recording, { realtime: true })\n * ```\n */\nexport async function replayRecording(\n terminal: Terminal,\n recording: Recording,\n options?: { realtime?: boolean },\n): Promise<void> {\n const realtime = options?.realtime ?? false\n\n let lastTimestamp = 0\n for (const event of recording.events) {\n if (realtime && event.timestamp > lastTimestamp) {\n const delay = event.timestamp - lastTimestamp\n await new Promise((resolve) => setTimeout(resolve, delay))\n }\n lastTimestamp = event.timestamp\n\n if (event.type === \"output\") {\n terminal.feed(event.data)\n }\n // Input events are recorded for completeness but not replayed --\n // the terminal is driven by the recorded output stream.\n }\n}\n\n// =============================================================================\n// Visual State Snapshotting\n// =============================================================================\n\n/** Modes that affect visual appearance and should be tracked for change detection. */\nconst VISUAL_MODES: TerminalMode[] = [\"altScreen\", \"cursorVisible\", \"reverseVideo\"]\n\nfunction rgbToString(color: RGB | null): string {\n if (color === null) return \"-\"\n return `${color.r},${color.g},${color.b}`\n}\n\nfunction underlineToString(u: UnderlineStyle): string {\n return u === false ? \"0\" : u\n}\n\nfunction cellToString(cell: Cell): string {\n // Encode all visually-relevant cell properties into a compact string.\n // Order: char|fg|bg|bold|dim|italic|underline|underlineColor|strikethrough|inverse|blink|hidden|wide|hyperlink\n return `${cell.char}|${rgbToString(cell.fg)}|${rgbToString(cell.bg)}|${cell.bold ? 1 : 0}${cell.dim ? 1 : 0}${cell.italic ? 1 : 0}${underlineToString(cell.underline)}|${rgbToString(cell.underlineColor)}|${cell.strikethrough ? 1 : 0}${cell.inverse ? 1 : 0}${cell.blink ? 1 : 0}${cell.hidden ? 1 : 0}${cell.wide ? 1 : 0}|${cell.hyperlink ?? \"-\"}`\n}\n\n/**\n * Snapshot the full visual state of a terminal as a deterministic string.\n *\n * Captures everything that affects what the user sees:\n * - Cell content AND styles (fg, bg, bold, italic, underline, etc.)\n * - Cursor position, style, and visibility\n * - Terminal modes (alt screen, reverse video)\n * - Window title\n *\n * Two terminals that look identical produce identical snapshots.\n * Any visual difference — even just a color change on one cell —\n * produces a different snapshot.\n *\n * Use this for frame change detection instead of text-only comparison:\n *\n * @example\n * ```ts\n * let previousSnapshot: string | null = null\n * // ... in capture loop:\n * const snapshot = snapshotVisualState(terminal)\n * if (snapshot !== previousSnapshot) {\n * captureFrame()\n * previousSnapshot = snapshot\n * }\n * ```\n */\nexport function snapshotVisualState(readable: TerminalReadable): string {\n const parts: string[] = []\n\n // Cursor state\n const cursor = readable.getCursor()\n parts.push(`C:${cursor.x},${cursor.y},${cursor.visible},${cursor.style}`)\n\n // Title\n parts.push(`T:${readable.getTitle()}`)\n\n // Visual modes\n const modeFlags = VISUAL_MODES.map((m) => (readable.getMode(m) ? \"1\" : \"0\")).join(\"\")\n parts.push(`M:${modeFlags}`)\n\n // Cell grid — every cell's full visual state\n const lines = readable.getLines()\n for (let row = 0; row < lines.length; row++) {\n const rowCells = lines[row]!\n const cellStrings: string[] = []\n for (let col = 0; col < rowCells.length; col++) {\n cellStrings.push(cellToString(rowCells[col]!))\n }\n parts.push(`R${row}:${cellStrings.join(\";\")}`)\n }\n\n return parts.join(\"\\n\")\n}\n","/**\n * Mock timer system for testing terminal animations.\n *\n * Provides a controlled time source where pending timers fire synchronously\n * when advanceTime() is called. This allows deterministic testing of\n * animation frames, cursor blink, and other time-dependent behavior.\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** A pending timer entry. */\ninterface PendingTimer {\n id: number\n callback: () => void\n fireAt: number\n interval: number | null // null = setTimeout, number = setInterval repeat\n}\n\n/** Mock timer controller for testing animations. */\nexport interface MockTimerController {\n /** Current mock time in milliseconds. */\n readonly now: number\n\n /**\n * Advance the mock clock by the given number of milliseconds.\n * All pending timers that fall within the window fire synchronously\n * in chronological order.\n */\n advanceTime(ms: number): void\n\n /** Schedule a one-shot timer (like setTimeout). Returns timer ID. */\n setTimeout(callback: () => void, delay: number): number\n\n /** Schedule a repeating timer (like setInterval). Returns timer ID. */\n setInterval(callback: () => void, interval: number): number\n\n /** Cancel a pending timer (like clearTimeout / clearInterval). */\n clearTimer(id: number): void\n\n /** Number of currently pending timers. */\n readonly pendingCount: number\n\n /** Dispose all pending timers. */\n dispose(): void\n}\n\n// =============================================================================\n// Factory\n// =============================================================================\n\n/**\n * Create a mock timer controller for testing animations.\n *\n * The controller manages its own clock that starts at 0 and only advances\n * when advanceTime() is called. Timers fire synchronously in order.\n *\n * @example\n * ```ts\n * const timer = createMockTimer()\n *\n * let fired = false\n * timer.setTimeout(() => { fired = true }, 100)\n *\n * timer.advanceTime(50) // not yet\n * assert(!fired)\n *\n * timer.advanceTime(50) // fires at t=100\n * assert(fired)\n *\n * timer.dispose()\n * ```\n */\nexport function createMockTimer(): MockTimerController {\n let currentTime = 0\n let nextId = 1\n const timers = new Map<number, PendingTimer>()\n\n function scheduleTimeout(callback: () => void, delay: number): number {\n const id = nextId++\n timers.set(id, {\n id,\n callback,\n fireAt: currentTime + Math.max(0, delay),\n interval: null,\n })\n return id\n }\n\n function scheduleInterval(callback: () => void, interval: number): number {\n const id = nextId++\n const safeInterval = Math.max(1, interval) // prevent zero-interval infinite loops\n timers.set(id, {\n id,\n callback,\n fireAt: currentTime + safeInterval,\n interval: safeInterval,\n })\n return id\n }\n\n function clearTimer(id: number): void {\n timers.delete(id)\n }\n\n function advanceTime(ms: number): void {\n if (ms < 0) throw new Error(\"Cannot advance time by a negative amount\")\n\n const targetTime = currentTime + ms\n\n // Process timers in chronological order until we reach targetTime\n while (true) {\n // Find the next timer to fire\n let next: PendingTimer | null = null\n for (const timer of timers.values()) {\n if (timer.fireAt <= targetTime) {\n if (!next || timer.fireAt < next.fireAt || (timer.fireAt === next.fireAt && timer.id < next.id)) {\n next = timer\n }\n }\n }\n\n if (!next) break\n\n // Advance clock to timer fire time and execute\n currentTime = next.fireAt\n const { id, callback, interval } = next\n\n if (interval !== null) {\n // Reschedule interval timer for next occurrence\n next.fireAt = currentTime + interval\n } else {\n // One-shot: remove after firing\n timers.delete(id)\n }\n\n callback()\n }\n\n // Advance clock to the full target time\n currentTime = targetTime\n }\n\n return {\n get now() {\n return currentTime\n },\n\n advanceTime,\n setTimeout: scheduleTimeout,\n setInterval: scheduleInterval,\n clearTimer,\n\n get pendingCount() {\n return timers.size\n },\n\n dispose(): void {\n timers.clear()\n },\n }\n}\n","/**\n * Global emulator warning registry.\n *\n * Backends that implement WarningExtension push warnings here during feed() calls.\n * Test infrastructure drains warnings after each test to fail on unexpected ones.\n *\n * The registry is intentionally global (module-scoped singleton) so that the vitest\n * setup can check it without needing direct access to individual backend instances.\n */\n\nimport type { EmulatorWarning } from \"./types.ts\"\n\n// ── Global warning accumulator ──\n\nconst _warnings: EmulatorWarning[] = []\n\n/**\n * Record an emulator warning. Called by backends during feed().\n */\nexport function pushWarning(warning: EmulatorWarning): void {\n _warnings.push(warning)\n}\n\n/**\n * Get and clear all accumulated warnings.\n * Returns the warnings collected since the last drain.\n */\nexport function drainWarnings(): EmulatorWarning[] {\n const result = [..._warnings]\n _warnings.length = 0\n return result\n}\n\n/**\n * Check if there are any accumulated warnings.\n */\nexport function hasWarnings(): boolean {\n return _warnings.length > 0\n}\n\n/**\n * Clear all accumulated warnings without returning them.\n */\nexport function clearWarnings(): void {\n _warnings.length = 0\n}\n","/**\n * VHS .tape format parser for termless.\n *\n * Parses the line-based VHS tape format into structured TapeCommand objects.\n * The format is documented at https://github.com/charmbracelet/vhs\n *\n * @example\n * ```ts\n * import { parseTape } from \"@termless/core\"\n *\n * const tape = parseTape(`\n * Output demo.gif\n * Set FontSize 14\n * Type \"hello world\"\n * Enter\n * Sleep 2s\n * Screenshot\n * `)\n * ```\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type TapeCommand =\n | { type: \"output\"; path: string }\n | { type: \"set\"; key: string; value: string }\n | { type: \"type\"; text: string; speed?: number }\n | { type: \"key\"; key: string; count?: number }\n | { type: \"ctrl\"; key: string }\n | { type: \"alt\"; key: string }\n | { type: \"sleep\"; ms: number }\n | { type: \"screenshot\"; path?: string }\n | { type: \"expect\"; text: string; timeout?: number }\n | { type: \"hide\" }\n | { type: \"show\" }\n | { type: \"source\"; path: string }\n | { type: \"require\"; program: string }\n\nexport interface TapeFile {\n commands: TapeCommand[]\n settings: Record<string, string>\n}\n\n// =============================================================================\n// Duration parsing\n// =============================================================================\n\n/**\n * Parse a duration string into milliseconds.\n *\n * Supports: \"2s\" -> 2000, \"500ms\" -> 500, \"0.5s\" -> 500, \"100\" -> 100 (ms).\n */\nexport function parseDuration(s: string): number {\n const trimmed = s.trim()\n if (trimmed.endsWith(\"ms\")) {\n return Number.parseFloat(trimmed.slice(0, -2))\n }\n if (trimmed.endsWith(\"s\")) {\n return Number.parseFloat(trimmed.slice(0, -1)) * 1000\n }\n // Bare number treated as milliseconds\n return Number.parseFloat(trimmed)\n}\n\n// =============================================================================\n// Key command names (case-insensitive match)\n// =============================================================================\n\nconst KEY_COMMANDS = new Set([\n \"enter\",\n \"backspace\",\n \"tab\",\n \"space\",\n \"up\",\n \"down\",\n \"left\",\n \"right\",\n \"escape\",\n \"delete\",\n \"pageup\",\n \"pagedown\",\n \"home\",\n \"end\",\n])\n\n// =============================================================================\n// Line parsing\n// =============================================================================\n\n/**\n * Parse a quoted string, handling escaped quotes.\n * Returns the unquoted content.\n */\nfunction parseQuotedString(s: string): string {\n if (s.startsWith('\"') && s.endsWith('\"')) {\n return s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, \"\\\\\")\n }\n return s\n}\n\n/**\n * Parse a single line into a TapeCommand, or null for comments/blank lines.\n */\nfunction parseLine(line: string): TapeCommand | null {\n const trimmed = line.trim()\n\n // Skip empty lines and comments\n if (trimmed === \"\" || trimmed.startsWith(\"#\")) return null\n\n // Split into command and arguments\n // Handle quoted strings properly\n const parts = splitCommandLine(trimmed)\n if (parts.length === 0) return null\n\n const cmd = parts[0]!\n const cmdLower = cmd.toLowerCase()\n\n // Output <path>\n if (cmdLower === \"output\") {\n return { type: \"output\", path: parts.slice(1).join(\" \") }\n }\n\n // Set <key> <value>\n if (cmdLower === \"set\") {\n const key = parts[1] ?? \"\"\n const value = parts.slice(2).join(\" \")\n return { type: \"set\", key, value: parseQuotedString(value) }\n }\n\n // Type[@speed] \"text\"\n if (cmdLower === \"type\" || cmdLower.startsWith(\"type@\")) {\n let speed: number | undefined\n if (cmdLower.startsWith(\"type@\")) {\n speed = parseDuration(cmd.slice(5))\n }\n const text = parseQuotedString(parts.slice(1).join(\" \"))\n return { type: \"type\", text, ...(speed !== undefined ? { speed } : {}) }\n }\n\n // Ctrl+<key>\n if (cmdLower.startsWith(\"ctrl+\")) {\n return { type: \"ctrl\", key: cmd.slice(5) }\n }\n\n // Alt+<key>\n if (cmdLower.startsWith(\"alt+\")) {\n return { type: \"alt\", key: cmd.slice(4) }\n }\n\n // Sleep <duration>\n if (cmdLower === \"sleep\") {\n const duration = parts[1] ?? \"0\"\n return { type: \"sleep\", ms: parseDuration(duration) }\n }\n\n // Screenshot [path]\n if (cmdLower === \"screenshot\") {\n const path = parts.length > 1 ? parts.slice(1).join(\" \") : undefined\n return { type: \"screenshot\", path }\n }\n\n // Hide\n if (cmdLower === \"hide\") {\n return { type: \"hide\" }\n }\n\n // Show\n if (cmdLower === \"show\") {\n return { type: \"show\" }\n }\n\n // Source <path>\n if (cmdLower === \"source\") {\n return { type: \"source\", path: parts.slice(1).join(\" \") }\n }\n\n // Require <program>\n if (cmdLower === \"require\") {\n return { type: \"require\", program: parts[1] ?? \"\" }\n }\n\n // Expect \"text\" [timeout]\n if (cmdLower === \"expect\") {\n const text = parseQuotedString(parts[1] ?? \"\")\n let timeout: number | undefined\n if (parts.length > 2) {\n timeout = parseDuration(parts[2]!)\n }\n return { type: \"expect\", text, ...(timeout !== undefined ? { timeout } : {}) }\n }\n\n // Key commands: Enter, Backspace, Tab, Space, Up, Down, Left, Right, Escape, Delete\n if (KEY_COMMANDS.has(cmdLower)) {\n const count = parts.length > 1 ? Number.parseInt(parts[1]!, 10) : undefined\n return { type: \"key\", key: cmd, ...(count !== undefined && count > 1 ? { count } : {}) }\n }\n\n // Unknown command — treat as key press (VHS is lenient)\n return { type: \"key\", key: cmd }\n}\n\n/**\n * Split a command line into parts, respecting quoted strings.\n */\nfunction splitCommandLine(line: string): string[] {\n const parts: string[] = []\n let current = \"\"\n let inQuote = false\n let escaped = false\n\n for (const ch of line) {\n if (escaped) {\n current += ch\n escaped = false\n continue\n }\n if (ch === \"\\\\\") {\n escaped = true\n current += ch\n continue\n }\n if (ch === '\"') {\n inQuote = !inQuote\n current += ch\n continue\n }\n if (ch === \" \" && !inQuote) {\n if (current.length > 0) {\n parts.push(current)\n current = \"\"\n }\n continue\n }\n current += ch\n }\n\n if (current.length > 0) {\n parts.push(current)\n }\n\n return parts\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Parse a VHS .tape file format string into a TapeFile.\n *\n * The tape format is line-based. Each line is either:\n * - A comment (starting with #)\n * - A blank line (ignored)\n * - A command (Output, Set, Type, Enter, Sleep, Screenshot, etc.)\n *\n * Set commands are collected into the `settings` map in addition to\n * appearing in the `commands` array.\n */\nexport function parseTape(source: string): TapeFile {\n const lines = source.split(\"\\n\")\n const commands: TapeCommand[] = []\n const settings: Record<string, string> = {}\n\n for (const line of lines) {\n const cmd = parseLine(line)\n if (cmd === null) continue\n\n commands.push(cmd)\n\n // Collect Set commands into settings\n if (cmd.type === \"set\") {\n settings[cmd.key] = cmd.value\n }\n }\n\n return { commands, settings }\n}\n","/**\n * Built-in themes for termless recordings.\n *\n * Each theme defines foreground, background, cursor, and (optionally) the\n * 16-color ANSI palette. Theme names are case-insensitive and common aliases\n * are supported (e.g. \"catppuccin\" → \"catppuccin-mocha\").\n *\n * When @silvery/theme is available (optional peer dependency), all 45+\n * palettes are automatically mapped to SvgTheme objects and exposed alongside\n * the built-in fallback themes.\n */\n\nimport type { SvgTheme } from \"../types.ts\"\n\n// =============================================================================\n// Built-in fallback themes (used when @silvery/theme is not installed)\n// =============================================================================\n\nconst BUILTIN_THEMES: Record<string, SvgTheme> = {\n dracula: {\n background: \"#282a36\",\n foreground: \"#f8f8f2\",\n cursor: \"#f8f8f2\",\n palette: {\n 0: \"#21222c\",\n 1: \"#ff5555\",\n 2: \"#50fa7b\",\n 3: \"#f1fa8c\",\n 4: \"#bd93f9\",\n 5: \"#ff79c6\",\n 6: \"#8be9fd\",\n 7: \"#f8f8f2\",\n 8: \"#6272a4\",\n 9: \"#ff6e6e\",\n 10: \"#69ff94\",\n 11: \"#ffffa5\",\n 12: \"#d6acff\",\n 13: \"#ff92df\",\n 14: \"#a4ffff\",\n 15: \"#ffffff\",\n },\n },\n nord: {\n background: \"#2e3440\",\n foreground: \"#d8dee9\",\n cursor: \"#d8dee9\",\n palette: {\n 0: \"#3b4252\",\n 1: \"#bf616a\",\n 2: \"#a3be8c\",\n 3: \"#ebcb8b\",\n 4: \"#81a1c1\",\n 5: \"#b48ead\",\n 6: \"#88c0d0\",\n 7: \"#e5e9f0\",\n 8: \"#4c566a\",\n 9: \"#bf616a\",\n 10: \"#a3be8c\",\n 11: \"#ebcb8b\",\n 12: \"#81a1c1\",\n 13: \"#b48ead\",\n 14: \"#8fbcbb\",\n 15: \"#eceff4\",\n },\n },\n monokai: {\n background: \"#272822\",\n foreground: \"#f8f8f2\",\n cursor: \"#f8f8f2\",\n palette: {\n 0: \"#272822\",\n 1: \"#f92672\",\n 2: \"#a6e22e\",\n 3: \"#f4bf75\",\n 4: \"#66d9ef\",\n 5: \"#ae81ff\",\n 6: \"#a1efe4\",\n 7: \"#f8f8f2\",\n 8: \"#75715e\",\n 9: \"#f92672\",\n 10: \"#a6e22e\",\n 11: \"#f4bf75\",\n 12: \"#66d9ef\",\n 13: \"#ae81ff\",\n 14: \"#a1efe4\",\n 15: \"#f9f8f5\",\n },\n },\n \"catppuccin-mocha\": {\n background: \"#1e1e2e\",\n foreground: \"#cdd6f4\",\n cursor: \"#f5e0dc\",\n palette: {\n 0: \"#45475a\",\n 1: \"#f38ba8\",\n 2: \"#a6e3a1\",\n 3: \"#f9e2af\",\n 4: \"#89b4fa\",\n 5: \"#f5c2e7\",\n 6: \"#94e2d5\",\n 7: \"#bac2de\",\n 8: \"#585b70\",\n 9: \"#f38ba8\",\n 10: \"#a6e3a1\",\n 11: \"#f9e2af\",\n 12: \"#89b4fa\",\n 13: \"#f5c2e7\",\n 14: \"#94e2d5\",\n 15: \"#a6adc8\",\n },\n },\n \"tokyo-night\": {\n background: \"#1a1b26\",\n foreground: \"#a9b1d6\",\n cursor: \"#c0caf5\",\n palette: {\n 0: \"#15161e\",\n 1: \"#f7768e\",\n 2: \"#9ece6a\",\n 3: \"#e0af68\",\n 4: \"#7aa2f7\",\n 5: \"#bb9af7\",\n 6: \"#7dcfff\",\n 7: \"#a9b1d6\",\n 8: \"#414868\",\n 9: \"#f7768e\",\n 10: \"#9ece6a\",\n 11: \"#e0af68\",\n 12: \"#7aa2f7\",\n 13: \"#bb9af7\",\n 14: \"#7dcfff\",\n 15: \"#c0caf5\",\n },\n },\n \"solarized-dark\": {\n background: \"#002b36\",\n foreground: \"#839496\",\n cursor: \"#93a1a1\",\n palette: {\n 0: \"#073642\",\n 1: \"#dc322f\",\n 2: \"#859900\",\n 3: \"#b58900\",\n 4: \"#268bd2\",\n 5: \"#d33682\",\n 6: \"#2aa198\",\n 7: \"#eee8d5\",\n 8: \"#002b36\",\n 9: \"#cb4b16\",\n 10: \"#586e75\",\n 11: \"#657b83\",\n 12: \"#839496\",\n 13: \"#6c71c4\",\n 14: \"#93a1a1\",\n 15: \"#fdf6e3\",\n },\n },\n \"solarized-light\": {\n background: \"#fdf6e3\",\n foreground: \"#657b83\",\n cursor: \"#586e75\",\n palette: {\n 0: \"#073642\",\n 1: \"#dc322f\",\n 2: \"#859900\",\n 3: \"#b58900\",\n 4: \"#268bd2\",\n 5: \"#d33682\",\n 6: \"#2aa198\",\n 7: \"#eee8d5\",\n 8: \"#002b36\",\n 9: \"#cb4b16\",\n 10: \"#586e75\",\n 11: \"#657b83\",\n 12: \"#839496\",\n 13: \"#6c71c4\",\n 14: \"#93a1a1\",\n 15: \"#fdf6e3\",\n },\n },\n \"github-dark\": {\n background: \"#0d1117\",\n foreground: \"#c9d1d9\",\n cursor: \"#c9d1d9\",\n palette: {\n 0: \"#484f58\",\n 1: \"#ff7b72\",\n 2: \"#3fb950\",\n 3: \"#d29922\",\n 4: \"#58a6ff\",\n 5: \"#bc8cff\",\n 6: \"#39c5cf\",\n 7: \"#b1bac4\",\n 8: \"#6e7681\",\n 9: \"#ffa198\",\n 10: \"#56d364\",\n 11: \"#e3b341\",\n 12: \"#79c0ff\",\n 13: \"#d2a8ff\",\n 14: \"#56d4dd\",\n 15: \"#f0f6fc\",\n },\n },\n \"github-light\": {\n background: \"#ffffff\",\n foreground: \"#24292f\",\n cursor: \"#24292f\",\n palette: {\n 0: \"#24292e\",\n 1: \"#d73a49\",\n 2: \"#22863a\",\n 3: \"#b08800\",\n 4: \"#0366d6\",\n 5: \"#6f42c1\",\n 6: \"#1b7c83\",\n 7: \"#6a737d\",\n 8: \"#959da5\",\n 9: \"#cb2431\",\n 10: \"#28a745\",\n 11: \"#dbab09\",\n 12: \"#2188ff\",\n 13: \"#8a63d2\",\n 14: \"#3192aa\",\n 15: \"#d1d5da\",\n },\n },\n \"gruvbox-dark\": {\n background: \"#282828\",\n foreground: \"#ebdbb2\",\n cursor: \"#ebdbb2\",\n palette: {\n 0: \"#282828\",\n 1: \"#cc241d\",\n 2: \"#98971a\",\n 3: \"#d79921\",\n 4: \"#458588\",\n 5: \"#b16286\",\n 6: \"#689d6a\",\n 7: \"#a89984\",\n 8: \"#928374\",\n 9: \"#fb4934\",\n 10: \"#b8bb26\",\n 11: \"#fabd2f\",\n 12: \"#83a598\",\n 13: \"#d3869b\",\n 14: \"#8ec07c\",\n 15: \"#ebdbb2\",\n },\n },\n \"one-dark\": {\n background: \"#282c34\",\n foreground: \"#abb2bf\",\n cursor: \"#528bff\",\n palette: {\n 0: \"#282c34\",\n 1: \"#e06c75\",\n 2: \"#98c379\",\n 3: \"#e5c07b\",\n 4: \"#61afef\",\n 5: \"#c678dd\",\n 6: \"#56b6c2\",\n 7: \"#abb2bf\",\n 8: \"#545862\",\n 9: \"#e06c75\",\n 10: \"#98c379\",\n 11: \"#e5c07b\",\n 12: \"#61afef\",\n 13: \"#c678dd\",\n 14: \"#56b6c2\",\n 15: \"#c8ccd4\",\n },\n },\n \"rose-pine\": {\n background: \"#191724\",\n foreground: \"#e0def4\",\n cursor: \"#ebbcba\",\n palette: {\n 0: \"#26233a\",\n 1: \"#eb6f92\",\n 2: \"#9ccfd8\",\n 3: \"#f6c177\",\n 4: \"#31748f\",\n 5: \"#c4a7e7\",\n 6: \"#9ccfd8\",\n 7: \"#e0def4\",\n 8: \"#6e6a86\",\n 9: \"#eb6f92\",\n 10: \"#9ccfd8\",\n 11: \"#f6c177\",\n 12: \"#31748f\",\n 13: \"#c4a7e7\",\n 14: \"#9ccfd8\",\n 15: \"#e0def4\",\n },\n },\n}\n\n// =============================================================================\n// Aliases (work for both built-in and silvery themes)\n// =============================================================================\n\nconst ALIASES: Record<string, string> = {\n catppuccin: \"catppuccin-mocha\",\n solarized: \"solarized-dark\",\n gruvbox: \"gruvbox-dark\",\n github: \"github-dark\",\n kanagawa: \"kanagawa-wave\",\n material: \"material-dark\",\n oxocarbon: \"oxocarbon-dark\",\n edge: \"edge-dark\",\n ayu: \"ayu-dark\",\n everforest: \"everforest-dark\",\n modus: \"modus-vivendi\",\n}\n\n// =============================================================================\n// @silvery/theme integration (optional peer dependency)\n// =============================================================================\n\n/**\n * Map a silvery ColorScheme to an SvgTheme.\n *\n * ColorScheme has named fields (black, red, green, ..., brightWhite)\n * which map to ANSI indices 0-15.\n */\ninterface ColorPaletteLike {\n name?: string\n foreground: string\n background: string\n cursorColor: string\n black: string\n red: string\n green: string\n yellow: string\n blue: string\n magenta: string\n cyan: string\n white: string\n brightBlack: string\n brightRed: string\n brightGreen: string\n brightYellow: string\n brightBlue: string\n brightMagenta: string\n brightCyan: string\n brightWhite: string\n}\n\nfunction paletteToSvgTheme(p: ColorPaletteLike): SvgTheme {\n return {\n foreground: p.foreground.toLowerCase(),\n background: p.background.toLowerCase(),\n cursor: p.cursorColor.toLowerCase(),\n palette: {\n 0: p.black.toLowerCase(),\n 1: p.red.toLowerCase(),\n 2: p.green.toLowerCase(),\n 3: p.yellow.toLowerCase(),\n 4: p.blue.toLowerCase(),\n 5: p.magenta.toLowerCase(),\n 6: p.cyan.toLowerCase(),\n 7: p.white.toLowerCase(),\n 8: p.brightBlack.toLowerCase(),\n 9: p.brightRed.toLowerCase(),\n 10: p.brightGreen.toLowerCase(),\n 11: p.brightYellow.toLowerCase(),\n 12: p.brightBlue.toLowerCase(),\n 13: p.brightMagenta.toLowerCase(),\n 14: p.brightCyan.toLowerCase(),\n 15: p.brightWhite.toLowerCase(),\n },\n }\n}\n\n/**\n * Lazily load @silvery/theme palettes on first access.\n * Uses synchronous require() to avoid top-level await, which would make\n * @termless/core an async module and break require() callers (e.g. silvery's createTerm).\n * Falls back to empty record if @silvery/theme is not installed.\n */\nlet _silveryThemes: Record<string, SvgTheme> | undefined\nfunction getSilveryThemes(): Record<string, SvgTheme> {\n if (_silveryThemes !== undefined) return _silveryThemes\n try {\n const themePkg = \"@silvery/theme\"\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require(themePkg) as { builtinPalettes?: Record<string, ColorPaletteLike> }\n const palettes = mod.builtinPalettes\n if (!palettes) {\n _silveryThemes = {}\n return _silveryThemes\n }\n\n const result: Record<string, SvgTheme> = {}\n for (const [name, palette] of Object.entries(palettes)) {\n result[name] = paletteToSvgTheme(palette)\n }\n _silveryThemes = result\n return _silveryThemes\n } catch {\n _silveryThemes = {}\n return _silveryThemes\n }\n}\n\n// =============================================================================\n// Merged theme access\n// =============================================================================\n\n/**\n * Get all available themes (silvery palettes override built-in for same name).\n */\nfunction getAllThemes(): Record<string, SvgTheme> {\n // Silvery themes take precedence over built-in for overlapping names\n const silveryThemes = getSilveryThemes()\n if (Object.keys(silveryThemes).length > 0) {\n return { ...BUILTIN_THEMES, ...silveryThemes }\n }\n return BUILTIN_THEMES\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Resolve a theme name to an SvgTheme. Case-insensitive, supports aliases.\n * Returns undefined for unknown themes.\n *\n * When @silvery/theme is available, resolves from all 45+ silvery palettes\n * in addition to the 12 built-in fallback themes.\n */\nexport function resolveTheme(name: string): SvgTheme | undefined {\n const normalized = name.toLowerCase()\n const resolved = ALIASES[normalized] ?? normalized\n return getAllThemes()[resolved]\n}\n\n/**\n * List all available theme names (canonical names only, not aliases).\n *\n * When @silvery/theme is installed, includes all silvery palette names\n * alongside built-in themes (deduplicated).\n */\nexport function listThemes(): string[] {\n return Object.keys(getAllThemes())\n}\n\n/**\n * List all theme aliases as [alias, canonical] pairs.\n */\nexport function listAliases(): [string, string][] {\n return Object.entries(ALIASES)\n}\n","/**\n * VHS .tape executor for termless.\n *\n * Executes parsed tape commands against a termless Terminal instance.\n * Supports both headless mode (feed raw data) and PTY mode (spawn a shell\n * and type into it).\n *\n * @example\n * ```ts\n * import { parseTape, executeTape } from \"@termless/core\"\n *\n * const tape = parseTape(`\n * Set Shell \"bash\"\n * Type \"echo hello\"\n * Enter\n * Sleep 1s\n * Screenshot\n * `)\n *\n * const result = await executeTape(tape, {\n * onScreenshot: (png) => writeFileSync(\"out.png\", png),\n * })\n * ```\n */\n\nimport type { TapeFile, TapeCommand } from \"./parser.ts\"\nimport { parseDuration } from \"./parser.ts\"\nimport type { Terminal, TerminalBackend, SvgScreenshotOptions, WindowBar } from \"../types.ts\"\nimport { createTerminal } from \"../terminal.ts\"\nimport { screenshotPng } from \"../png.ts\"\nimport { resolveTheme } from \"./themes.ts\"\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface TapeExecutorOptions {\n /** Backend name or pre-created backend instance (default: \"vterm\"). */\n backend?: string | TerminalBackend\n /** Override terminal columns. */\n cols?: number\n /** Override terminal rows. */\n rows?: number\n /** Default typing speed in ms between characters (default: 50). */\n defaultTypingSpeed?: number\n /** Directory for saving screenshots. */\n screenshotDir?: string\n /** Theme name for screenshots (overrides `Set Theme` in tape). */\n theme?: string\n /** Called after each visual change when recording is not hidden. */\n onFrame?: (frame: TapeFrame) => void\n /** Called when a Screenshot command is executed. */\n onScreenshot?: (png: Uint8Array, path?: string) => void\n /** Called after each command is executed, with the command and terminal. */\n onAfterCommand?: (cmd: TapeCommand, terminal: Terminal) => void\n}\n\nexport interface TapeFrame {\n /** Milliseconds since execution start. */\n timestamp: number\n /** PNG screenshot data. */\n png: Uint8Array\n}\n\nexport interface TapeResult {\n /** Total execution time in milliseconds. */\n duration: number\n /** Collected frames (when onFrame is provided and not hidden). */\n frames: TapeFrame[]\n /** Number of screenshots taken. */\n screenshotCount: number\n /** The terminal instance (still open for inspection). */\n terminal: Terminal\n}\n\n// =============================================================================\n// Key name mapping (VHS key names -> termless key descriptors)\n// =============================================================================\n\nconst VHS_KEY_MAP: Record<string, string> = {\n enter: \"Enter\",\n backspace: \"Backspace\",\n tab: \"Tab\",\n space: \"Space\",\n up: \"ArrowUp\",\n down: \"ArrowDown\",\n left: \"ArrowLeft\",\n right: \"ArrowRight\",\n escape: \"Escape\",\n delete: \"Delete\",\n pageup: \"PageUp\",\n pagedown: \"PageDown\",\n home: \"Home\",\n end: \"End\",\n}\n\n/**\n * Map a VHS key name to a termless key string.\n */\nfunction mapKeyName(vhsKey: string): string {\n return VHS_KEY_MAP[vhsKey.toLowerCase()] ?? vhsKey\n}\n\n// =============================================================================\n// Executor\n// =============================================================================\n\n/**\n * Execute parsed tape commands against a termless Terminal.\n *\n * If the tape specifies a Shell (via `Set Shell`), spawns it as a PTY process.\n * Otherwise operates in headless mode (feed-only, useful for testing).\n *\n * Key behaviors:\n * - Type: feeds each character through the PTY with typing speed delay\n * - Enter/Tab/etc: sends the corresponding key press\n * - Ctrl+C: sends Ctrl+key combination\n * - Sleep: actual delay (setTimeout)\n * - Screenshot: captures PNG and invokes callback\n * - Set Width/Height: resizes terminal\n * - Hide/Show: toggles frame recording\n * - Source: recursively executes another tape file (requires readFile callback)\n */\nexport async function executeTape(tape: TapeFile, options?: TapeExecutorOptions): Promise<TapeResult> {\n const startTime = Date.now()\n const frames: TapeFrame[] = []\n let screenshotCount = 0\n let hidden = false\n\n // Resolve dimensions from settings or options\n const cols = options?.cols ?? (tape.settings.Width ? Number.parseInt(tape.settings.Width, 10) : 80)\n const rows = options?.rows ?? (tape.settings.Height ? Number.parseInt(tape.settings.Height, 10) : 24)\n const defaultSpeed = options?.defaultTypingSpeed ?? parseDurationSetting(tape.settings.TypingSpeed, 50)\n\n // Resolve backend — accept a pre-created instance or a name string\n let backendInstance: TerminalBackend\n const backendOpt = options?.backend ?? \"vterm\"\n if (typeof backendOpt === \"string\") {\n const { backend } = await import(\"../backends.ts\")\n backendInstance = await backend(backendOpt)\n } else {\n backendInstance = backendOpt\n }\n\n const terminal = createTerminal({\n backend: backendInstance,\n cols,\n rows,\n })\n\n // Spawn shell if specified\n const shell = tape.settings.Shell ? parseShellSetting(tape.settings.Shell) : null\n if (shell) {\n await terminal.spawn(shell)\n // Brief wait for shell to initialize\n await delay(100)\n }\n\n // Screenshot rendering options from settings\n const svgOptions: SvgScreenshotOptions = {}\n if (tape.settings.FontSize) svgOptions.fontSize = Number.parseInt(tape.settings.FontSize, 10)\n if (tape.settings.FontFamily) svgOptions.fontFamily = tape.settings.FontFamily\n\n // Visual polish settings\n if (tape.settings.Padding) svgOptions.padding = Number.parseInt(tape.settings.Padding, 10)\n if (tape.settings.BorderRadius) svgOptions.borderRadius = Number.parseInt(tape.settings.BorderRadius, 10)\n if (tape.settings.WindowBar) svgOptions.windowBar = tape.settings.WindowBar.toLowerCase() as WindowBar\n if (tape.settings.WindowBarSize) svgOptions.windowBarSize = Number.parseInt(tape.settings.WindowBarSize, 10)\n if (tape.settings.Margin) svgOptions.margin = Number.parseInt(tape.settings.Margin, 10)\n if (tape.settings.MarginFill) svgOptions.marginFill = tape.settings.MarginFill\n\n // Playback speed: from tape settings or options (options override)\n const playbackSpeed = tape.settings.PlaybackSpeed ? Number.parseFloat(tape.settings.PlaybackSpeed) : 1\n\n // Framerate: from tape settings (stored for use by callers)\n if (tape.settings.Framerate) svgOptions.framerate = Number.parseInt(tape.settings.Framerate, 10)\n\n // Resolve theme: CLI --theme flag takes precedence over Set Theme in tape\n const themeName = options?.theme ?? tape.settings.Theme\n if (themeName) {\n const theme = resolveTheme(themeName)\n if (theme) {\n svgOptions.theme = theme\n }\n }\n\n // Execute commands\n for (const cmd of tape.commands) {\n await executeCommand(cmd, terminal, {\n defaultSpeed,\n svgOptions,\n hidden,\n startTime,\n frames,\n playbackSpeed,\n onFrame: options?.onFrame,\n onScreenshot: options?.onScreenshot,\n onScreenshotCount: () => screenshotCount++,\n onHide: () => {\n hidden = true\n },\n onShow: () => {\n hidden = false\n },\n })\n options?.onAfterCommand?.(cmd, terminal)\n }\n\n return {\n duration: Date.now() - startTime,\n frames,\n screenshotCount,\n terminal,\n }\n}\n\n// =============================================================================\n// Command execution\n// =============================================================================\n\ninterface ExecuteContext {\n defaultSpeed: number\n svgOptions: SvgScreenshotOptions\n hidden: boolean\n startTime: number\n frames: TapeFrame[]\n playbackSpeed: number\n onFrame?: (frame: TapeFrame) => void\n onScreenshot?: (png: Uint8Array, path?: string) => void\n onScreenshotCount: () => void\n onHide: () => void\n onShow: () => void\n}\n\nasync function executeCommand(cmd: TapeCommand, terminal: Terminal, ctx: ExecuteContext): Promise<void> {\n switch (cmd.type) {\n case \"output\":\n // Output path is metadata — handled by the CLI layer\n break\n\n case \"set\":\n // Most settings are consumed at init time. Handle dynamic ones here.\n if (cmd.key === \"Width\" || cmd.key === \"Height\") {\n const newCols = cmd.key === \"Width\" ? Number.parseInt(cmd.value, 10) : terminal.cols\n const newRows = cmd.key === \"Height\" ? Number.parseInt(cmd.value, 10) : terminal.rows\n terminal.resize(newCols, newRows)\n }\n if (cmd.key === \"Theme\") {\n const theme = resolveTheme(cmd.value)\n if (theme) {\n ctx.svgOptions.theme = theme\n }\n }\n // Visual polish settings (can be changed dynamically mid-tape)\n if (cmd.key === \"Padding\") ctx.svgOptions.padding = Number.parseInt(cmd.value, 10)\n if (cmd.key === \"BorderRadius\") ctx.svgOptions.borderRadius = Number.parseInt(cmd.value, 10)\n if (cmd.key === \"WindowBar\") ctx.svgOptions.windowBar = cmd.value.toLowerCase() as WindowBar\n if (cmd.key === \"WindowBarSize\") ctx.svgOptions.windowBarSize = Number.parseInt(cmd.value, 10)\n if (cmd.key === \"Margin\") ctx.svgOptions.margin = Number.parseInt(cmd.value, 10)\n if (cmd.key === \"MarginFill\") ctx.svgOptions.marginFill = cmd.value\n if (cmd.key === \"PlaybackSpeed\") ctx.playbackSpeed = Number.parseFloat(cmd.value)\n if (cmd.key === \"Framerate\") ctx.svgOptions.framerate = Number.parseInt(cmd.value, 10)\n break\n\n case \"type\": {\n const speed = cmd.speed ?? ctx.defaultSpeed\n for (const char of cmd.text) {\n if (terminal.alive) {\n terminal.type(char)\n } else {\n terminal.feed(char)\n }\n if (speed > 0) await delay(speed)\n }\n break\n }\n\n case \"key\": {\n const keyName = mapKeyName(cmd.key)\n const count = cmd.count ?? 1\n for (let i = 0; i < count; i++) {\n if (terminal.alive) {\n terminal.press(keyName)\n } else {\n // In headless mode, feed the key's ANSI encoding directly\n const { keyToAnsi, parseKey } = await import(\"../key-mapping.ts\")\n const ansi = keyToAnsi(parseKey(keyName))\n terminal.feed(ansi)\n }\n if (count > 1) await delay(50)\n }\n break\n }\n\n case \"ctrl\": {\n const keyStr = `Ctrl+${cmd.key}`\n if (terminal.alive) {\n terminal.press(keyStr)\n } else {\n const { keyToAnsi, parseKey } = await import(\"../key-mapping.ts\")\n terminal.feed(keyToAnsi(parseKey(keyStr)))\n }\n break\n }\n\n case \"alt\": {\n const keyStr = `Alt+${cmd.key}`\n if (terminal.alive) {\n terminal.press(keyStr)\n } else {\n const { keyToAnsi, parseKey } = await import(\"../key-mapping.ts\")\n terminal.feed(keyToAnsi(parseKey(keyStr)))\n }\n break\n }\n\n case \"sleep\":\n await delay(cmd.ms / ctx.playbackSpeed)\n break\n\n case \"screenshot\": {\n const png = await screenshotPng(terminal, ctx.svgOptions)\n ctx.onScreenshotCount()\n ctx.onScreenshot?.(png, cmd.path)\n\n if (!ctx.hidden) {\n const frame: TapeFrame = {\n timestamp: Date.now() - ctx.startTime,\n png,\n }\n ctx.frames.push(frame)\n ctx.onFrame?.(frame)\n }\n break\n }\n\n case \"hide\":\n ctx.onHide()\n break\n\n case \"show\":\n ctx.onShow()\n break\n\n case \"expect\": {\n const timeout = cmd.timeout ?? 5000\n const pollInterval = 50\n const deadline = Date.now() + timeout\n let found = false\n while (Date.now() < deadline) {\n const text = terminal.getText()\n if (text.includes(cmd.text)) {\n found = true\n break\n }\n await delay(pollInterval)\n }\n if (!found) {\n throw new Error(`Expect timed out after ${timeout}ms: text \"${cmd.text}\" not found`)\n }\n break\n }\n\n case \"source\":\n // Source requires filesystem access — handled by the CLI layer.\n // In library usage, this is a no-op (users should pre-process sources).\n break\n\n case \"require\":\n // Require checks if a program exists — handled by the CLI layer.\n break\n }\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction parseDurationSetting(value: string | undefined, defaultMs: number): number {\n if (!value) return defaultMs\n return parseDuration(value)\n}\n\nfunction parseShellSetting(value: string): string[] {\n // Remove quotes if present\n const cleaned = value.replace(/^[\"']|[\"']$/g, \"\")\n return cleaned.split(/\\s+/)\n}\n","/**\n * Multi-backend tape comparison for termless.\n *\n * Runs the same .tape file against multiple backends and compares the results.\n * Supports separate screenshots, side-by-side composition, grid layout, and\n * pixel-level diff highlighting.\n *\n * @example\n * ```ts\n * import { parseTape, compareTape } from \"@termless/core\"\n *\n * const tape = parseTape(`Type \"hello\"\\nEnter\\nScreenshot`)\n * const result = await compareTape(tape, {\n * backends: [\"xtermjs\", \"vterm\", \"ghostty\"],\n * mode: \"side-by-side\",\n * output: \"./comparison.svg\",\n * })\n * ```\n */\n\nimport type { TapeFile } from \"./parser.ts\"\nimport type { TerminalBackend } from \"../types.ts\"\nimport { executeTape, type TapeExecutorOptions } from \"./executor.ts\"\nimport { screenshotPng } from \"../png.ts\"\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CompareMode = \"separate\" | \"side-by-side\" | \"grid\" | \"diff\"\n\n/** A backend specification: either a name string or a pre-created instance with a label. */\nexport type BackendSpec = string | { name: string; backend: TerminalBackend }\n\nexport interface CompareOptions {\n /** Backend names or instances to compare. */\n backends: BackendSpec[]\n /** How to present the comparison. */\n mode: CompareMode\n /** Output path for composed results (SVG/PNG). */\n output?: string\n /** Additional executor options passed to each backend run. */\n executorOptions?: Omit<TapeExecutorOptions, \"backend\">\n}\n\nexport interface BackendScreenshot {\n /** Backend name. */\n backend: string\n /** PNG data from the final screenshot. */\n png: Uint8Array\n /** Terminal text content at time of screenshot. */\n text: string\n}\n\nexport interface CompareResult {\n /** Individual backend screenshots. */\n screenshots: BackendScreenshot[]\n /** Composed SVG (for side-by-side, grid, diff modes). */\n composedSvg?: string\n /** Whether all backends produced identical output text. */\n textMatch: boolean\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Run a tape against multiple backends and compare the results.\n *\n * Each backend executes the full tape independently. After execution,\n * the results are composed according to the specified mode:\n *\n * - **separate**: individual screenshots per backend\n * - **side-by-side**: horizontal composition with backend name headers\n * - **grid**: arrange screenshots in a grid (2 columns)\n * - **diff**: highlight text differences between backends\n */\nexport async function compareTape(tape: TapeFile, options: CompareOptions): Promise<CompareResult> {\n const screenshots: BackendScreenshot[] = []\n\n // Run tape against each backend sequentially\n // (parallel would work but sequential is safer for resource-constrained systems)\n for (const spec of options.backends) {\n const backendOpt = typeof spec === \"string\" ? spec : spec.backend\n const backendLabel = typeof spec === \"string\" ? spec : spec.name\n const lastPng: Uint8Array[] = []\n\n const result = await executeTape(tape, {\n ...options.executorOptions,\n backend: backendOpt,\n onScreenshot: (png) => {\n lastPng.push(png)\n },\n })\n\n // If no explicit screenshot command, take one at the end\n let png: Uint8Array\n if (lastPng.length > 0) {\n png = lastPng[lastPng.length - 1]!\n } else {\n png = await screenshotPng(result.terminal)\n }\n\n const text = result.terminal.getText()\n\n screenshots.push({\n backend: backendLabel,\n png,\n text,\n })\n\n await result.terminal.close()\n }\n\n // Check text match\n const texts = screenshots.map((s) => s.text)\n const textMatch = texts.every((t) => t === texts[0])\n\n // Compose based on mode\n let composedSvg: string | undefined\n\n switch (options.mode) {\n case \"separate\":\n // No composition needed\n break\n\n case \"side-by-side\":\n composedSvg = composeSideBySide(screenshots)\n break\n\n case \"grid\":\n composedSvg = composeGrid(screenshots)\n break\n\n case \"diff\":\n composedSvg = composeDiff(screenshots)\n break\n }\n\n return { screenshots, composedSvg, textMatch }\n}\n\n// =============================================================================\n// SVG Composition\n// =============================================================================\n\n/**\n * Compose screenshots horizontally with backend name headers.\n * Generates a wrapper SVG that embeds individual PNGs as base64 images.\n */\nfunction composeSideBySide(screenshots: BackendScreenshot[]): string {\n if (screenshots.length === 0) return \"<svg></svg>\"\n\n // Estimate dimensions (we don't have exact PNG dimensions without decoding,\n // so use reasonable defaults based on terminal size)\n const imgWidth = 640\n const imgHeight = 480\n const headerHeight = 30\n const gap = 10\n\n const totalWidth = screenshots.length * imgWidth + (screenshots.length - 1) * gap\n const totalHeight = imgHeight + headerHeight\n\n const parts: string[] = []\n parts.push(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalWidth}\" height=\"${totalHeight}\">`)\n parts.push(`<rect width=\"100%\" height=\"100%\" fill=\"#1e1e1e\"/>`)\n\n for (let i = 0; i < screenshots.length; i++) {\n const x = i * (imgWidth + gap)\n const s = screenshots[i]!\n const b64 = uint8ArrayToBase64(s.png)\n\n // Header\n parts.push(\n `<text x=\"${x + imgWidth / 2}\" y=\"20\" text-anchor=\"middle\" fill=\"#d4d4d4\" font-family=\"monospace\" font-size=\"14\">${escapeXml(s.backend)}</text>`,\n )\n\n // Image\n parts.push(\n `<image x=\"${x}\" y=\"${headerHeight}\" width=\"${imgWidth}\" height=\"${imgHeight}\" href=\"data:image/png;base64,${b64}\"/>`,\n )\n }\n\n parts.push(\"</svg>\")\n return parts.join(\"\\n\")\n}\n\n/**\n * Compose screenshots in a grid layout (2 columns).\n */\nfunction composeGrid(screenshots: BackendScreenshot[]): string {\n if (screenshots.length === 0) return \"<svg></svg>\"\n\n const imgWidth = 640\n const imgHeight = 480\n const headerHeight = 30\n const gap = 10\n const gridCols = 2\n\n const gridRows = Math.ceil(screenshots.length / gridCols)\n const totalWidth = gridCols * imgWidth + (gridCols - 1) * gap\n const totalHeight = gridRows * (imgHeight + headerHeight + gap)\n\n const parts: string[] = []\n parts.push(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalWidth}\" height=\"${totalHeight}\">`)\n parts.push(`<rect width=\"100%\" height=\"100%\" fill=\"#1e1e1e\"/>`)\n\n for (let i = 0; i < screenshots.length; i++) {\n const col = i % gridCols\n const row = Math.floor(i / gridCols)\n const x = col * (imgWidth + gap)\n const y = row * (imgHeight + headerHeight + gap)\n const s = screenshots[i]!\n const b64 = uint8ArrayToBase64(s.png)\n\n parts.push(\n `<text x=\"${x + imgWidth / 2}\" y=\"${y + 20}\" text-anchor=\"middle\" fill=\"#d4d4d4\" font-family=\"monospace\" font-size=\"14\">${escapeXml(s.backend)}</text>`,\n )\n parts.push(\n `<image x=\"${x}\" y=\"${y + headerHeight}\" width=\"${imgWidth}\" height=\"${imgHeight}\" href=\"data:image/png;base64,${b64}\"/>`,\n )\n }\n\n parts.push(\"</svg>\")\n return parts.join(\"\\n\")\n}\n\n/**\n * Compose diff view — show screenshots side by side with text diff below.\n */\nfunction composeDiff(screenshots: BackendScreenshot[]): string {\n if (screenshots.length < 2) return composeSideBySide(screenshots)\n\n const imgWidth = 640\n const imgHeight = 480\n const headerHeight = 30\n const diffHeight = 200\n const gap = 10\n\n const totalWidth = screenshots.length * imgWidth + (screenshots.length - 1) * gap\n const totalHeight = imgHeight + headerHeight + gap + diffHeight\n\n const parts: string[] = []\n parts.push(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalWidth}\" height=\"${totalHeight}\">`)\n parts.push(`<rect width=\"100%\" height=\"100%\" fill=\"#1e1e1e\"/>`)\n\n // Screenshots\n for (let i = 0; i < screenshots.length; i++) {\n const x = i * (imgWidth + gap)\n const s = screenshots[i]!\n const b64 = uint8ArrayToBase64(s.png)\n\n parts.push(\n `<text x=\"${x + imgWidth / 2}\" y=\"20\" text-anchor=\"middle\" fill=\"#d4d4d4\" font-family=\"monospace\" font-size=\"14\">${escapeXml(s.backend)}</text>`,\n )\n parts.push(\n `<image x=\"${x}\" y=\"${headerHeight}\" width=\"${imgWidth}\" height=\"${imgHeight}\" href=\"data:image/png;base64,${b64}\"/>`,\n )\n }\n\n // Text diff summary\n const diffY = headerHeight + imgHeight + gap\n const texts = screenshots.map((s) => s.text)\n const allMatch = texts.every((t) => t === texts[0])\n\n const diffMessage = allMatch ? \"All backends produced identical text output\" : \"Text output differs between backends\"\n\n const diffColor = allMatch ? \"#4ec9b0\" : \"#f44747\"\n parts.push(\n `<text x=\"10\" y=\"${diffY + 20}\" fill=\"${diffColor}\" font-family=\"monospace\" font-size=\"12\">${escapeXml(diffMessage)}</text>`,\n )\n\n parts.push(\"</svg>\")\n return parts.join(\"\\n\")\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction escapeXml(s: string): string {\n return s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\")\n}\n\nfunction uint8ArrayToBase64(data: Uint8Array): string {\n // Use Buffer if available (Node.js/Bun), otherwise manual encoding\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(data).toString(\"base64\")\n }\n let binary = \"\"\n for (const byte of data) {\n binary += String.fromCharCode(byte)\n }\n return btoa(binary)\n}\n","/**\n * Keystroke overlay for SVG screenshots.\n *\n * Renders a translucent badge with the current keystroke/shortcut\n * in a corner of the SVG frame — like KeyCastr for terminal recordings.\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface KeyOverlayOptions {\n /** Position of the overlay badge */\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n /** Font size for the key label */\n fontSize?: number\n /** Padding inside the badge */\n padding?: number\n /** Background opacity (0-1) */\n opacity?: number\n}\n\n// =============================================================================\n// SVG dimension parsing\n// =============================================================================\n\n/**\n * Extract width and height from an SVG string's root element attributes.\n */\nfunction parseSvgDimensions(svg: string): { width: number; height: number } {\n const widthMatch = svg.match(/\\bwidth=\"(\\d+(?:\\.\\d+)?)\"/)\n const heightMatch = svg.match(/\\bheight=\"(\\d+(?:\\.\\d+)?)\"/)\n return {\n width: widthMatch ? Number.parseFloat(widthMatch[1]!) : 672,\n height: heightMatch ? Number.parseFloat(heightMatch[1]!) : 432,\n }\n}\n\n// =============================================================================\n// XML escaping\n// =============================================================================\n\nfunction escapeXml(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n}\n\n// =============================================================================\n// Overlay renderer\n// =============================================================================\n\n/**\n * Overlay a keystroke badge on an SVG screenshot.\n *\n * Parses the SVG dimensions, inserts a rounded-rect badge with the key label\n * before the closing `</svg>` tag.\n *\n * @param svg - The SVG string to overlay on\n * @param keystroke - Human-readable keystroke (e.g., \"Ctrl+C\", \"Enter\", \"j\")\n * @param options - Positioning and styling options\n * @returns The modified SVG string with the badge\n */\nexport function overlayKeystroke(svg: string, keystroke: string, options?: KeyOverlayOptions): string {\n if (!keystroke) return svg\n\n const position = options?.position ?? \"bottom-right\"\n const fontSize = options?.fontSize ?? 14\n const padding = options?.padding ?? 8\n const opacity = options?.opacity ?? 0.75\n\n const { width, height } = parseSvgDimensions(svg)\n\n // Approximate text width based on character count and font size\n const charWidth = fontSize * 0.62\n const textWidth = keystroke.length * charWidth\n const badgeWidth = textWidth + padding * 2\n const badgeHeight = fontSize + padding * 2\n const borderRadius = 6\n const margin = 10\n\n // Position the badge\n let x: number\n let y: number\n\n switch (position) {\n case \"bottom-right\":\n x = width - badgeWidth - margin\n y = height - badgeHeight - margin\n break\n case \"bottom-left\":\n x = margin\n y = height - badgeHeight - margin\n break\n case \"top-right\":\n x = width - badgeWidth - margin\n y = margin\n break\n case \"top-left\":\n x = margin\n y = margin\n break\n }\n\n // Center text within badge\n const textX = x + padding\n const textY = y + padding + fontSize * 0.82 // baseline offset\n\n const badge = [\n `<g class=\"key-overlay\">`,\n `<rect x=\"${x}\" y=\"${y}\" width=\"${badgeWidth}\" height=\"${badgeHeight}\" rx=\"${borderRadius}\" ry=\"${borderRadius}\" fill=\"rgba(0,0,0,${opacity})\"/>`,\n `<text x=\"${textX}\" y=\"${textY}\" font-family=\"'Menlo', 'Monaco', 'Courier New', monospace\" font-size=\"${fontSize}\" fill=\"#ffffff\">${escapeXml(keystroke)}</text>`,\n `</g>`,\n ].join(\"\\n\")\n\n // Insert before closing </svg>\n return svg.replace(\"</svg>\", `${badge}\\n</svg>`)\n}\n","/**\n * Animated SVG encoder for termless.\n *\n * Composes multiple SVG frames into a single animated SVG using CSS keyframe\n * animations. Each frame becomes a `<g>` element with opacity toggled via\n * `@keyframes` — at any given time exactly one frame is visible.\n *\n * The output is a self-contained SVG that animates in any modern browser.\n */\n\nimport type { AnimationFrame, AnimationOptions } from \"./types.ts\"\n\n/** Extract the inner content of an SVG element (everything between <svg ...> and </svg>). */\nfunction stripSvgWrapper(svg: string): string {\n // Remove the opening <svg ...> tag\n const openEnd = svg.indexOf(\">\")\n if (openEnd === -1) return svg\n let inner = svg.slice(openEnd + 1)\n\n // Remove the closing </svg> tag\n const closeStart = inner.lastIndexOf(\"</svg>\")\n if (closeStart !== -1) {\n inner = inner.slice(0, closeStart)\n }\n\n return inner.trim()\n}\n\n/** Parse width and height from an SVG element's attributes. */\nfunction parseSvgDimensions(svg: string): { width: number; height: number } {\n const widthMatch = svg.match(/width=\"([^\"]+)\"/)\n const heightMatch = svg.match(/height=\"([^\"]+)\"/)\n return {\n width: widthMatch ? Number(widthMatch[1]) : 100,\n height: heightMatch ? Number(heightMatch[1]) : 50,\n }\n}\n\n/**\n * Compose multiple SVG frames into a single animated SVG.\n *\n * Uses CSS `@keyframes` to toggle frame visibility via opacity.\n * Each frame displays for its specified duration, then the next\n * frame takes over. The animation loops according to `options.loop`.\n */\nexport function createAnimatedSvg(frames: AnimationFrame[], options?: AnimationOptions): string {\n if (frames.length === 0) {\n throw new Error(\"createAnimatedSvg requires at least one frame\")\n }\n\n const defaultDuration = options?.defaultDuration ?? 100\n const loop = options?.loop ?? 0\n const iterationCount = loop === 0 ? \"infinite\" : String(loop)\n\n const { width, height } = parseSvgDimensions(frames[0]!.svg)\n\n // Single frame — no animation needed\n if (frames.length === 1) {\n const content = stripSvgWrapper(frames[0]!.svg)\n return [`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">`, content, `</svg>`].join(\n \"\\n\",\n )\n }\n\n // Calculate total duration and cumulative timing\n const durations = frames.map((f) => f.duration || defaultDuration)\n const totalDuration = durations.reduce((sum, d) => sum + d, 0)\n const totalSeconds = totalDuration / 1000\n\n // Build CSS keyframes for each frame\n const styleLines: string[] = []\n let cumulativeTime = 0\n\n for (let i = 0; i < frames.length; i++) {\n const startPct = (cumulativeTime / totalDuration) * 100\n const endPct = ((cumulativeTime + durations[i]!) / totalDuration) * 100\n\n // Each frame is visible (opacity 1) during its window, invisible otherwise.\n // Use a tiny gap (0.01%) for the transition to avoid two frames being visible.\n const keyframes: string[] = []\n\n if (startPct > 0) {\n keyframes.push(`0% { opacity: 0 }`)\n keyframes.push(`${startPct.toFixed(2)}% { opacity: 0 }`)\n } else {\n keyframes.push(`0% { opacity: 1 }`)\n }\n\n if (startPct > 0) {\n keyframes.push(`${(startPct + 0.01).toFixed(2)}% { opacity: 1 }`)\n }\n\n keyframes.push(`${endPct.toFixed(2)}% { opacity: 1 }`)\n\n if (endPct < 100) {\n keyframes.push(`${(endPct + 0.01).toFixed(2)}% { opacity: 0 }`)\n keyframes.push(`100% { opacity: 0 }`)\n }\n\n styleLines.push(`@keyframes f${i} { ${keyframes.join(\"; \")} }`)\n styleLines.push(`.f${i} { animation: f${i} ${totalSeconds}s step-end ${iterationCount}; opacity: 0 }`)\n\n cumulativeTime += durations[i]!\n }\n\n // The first frame should start visible\n styleLines.push(`.f0 { opacity: 1 }`)\n\n // Build SVG groups for each frame\n const groups: string[] = []\n for (let i = 0; i < frames.length; i++) {\n const content = stripSvgWrapper(frames[i]!.svg)\n groups.push(`<g class=\"f${i}\">${content}</g>`)\n }\n\n return [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">`,\n `<style>`,\n ...styleLines,\n `</style>`,\n ...groups,\n `</svg>`,\n ].join(\"\\n\")\n}\n","/**\n * Animation output format support for termless.\n *\n * Convenience functions for encoding animation frames in multiple formats.\n * Individual encoders are also exported directly for fine-grained control.\n */\n\nexport type { AnimationFrame, AnimationOptions, AnimationFormat } from \"./types.ts\"\nexport { createAnimatedSvg } from \"./animated-svg.ts\"\nexport { createGif } from \"./gif.ts\"\nexport { createApng } from \"./apng.ts\"\n\nimport type { AnimationFrame, AnimationFormat, AnimationOptions } from \"./types.ts\"\nimport { createAnimatedSvg } from \"./animated-svg.ts\"\n\n/**\n * Render animation frames in the specified format.\n *\n * - `\"svg\"` → animated SVG string (CSS keyframes, synchronous)\n * - `\"gif\"` → animated GIF Uint8Array (requires gifenc + @resvg/resvg-js)\n * - `\"apng\"` → animated PNG Uint8Array (requires upng-js + @resvg/resvg-js)\n */\nexport async function renderAnimation(\n frames: AnimationFrame[],\n format: AnimationFormat,\n options?: AnimationOptions & { scale?: number },\n): Promise<Uint8Array | string> {\n switch (format) {\n case \"svg\":\n return createAnimatedSvg(frames, options)\n case \"gif\": {\n const { createGif } = await import(\"./gif.ts\")\n return createGif(frames, options)\n }\n case \"apng\": {\n const { createApng } = await import(\"./apng.ts\")\n return createApng(frames, options)\n }\n default:\n throw new Error(`Unsupported animation format: ${format}`)\n }\n}\n\n/** Detect animation format from a filename extension. */\nexport function detectFormat(filename: string): AnimationFormat {\n if (filename.endsWith(\".svg\")) return \"svg\"\n if (filename.endsWith(\".gif\")) return \"gif\"\n if (filename.endsWith(\".apng\") || filename.endsWith(\".png\")) return \"apng\"\n throw new Error(`Unknown animation format for: ${filename}`)\n}\n","/**\n * asciicast v2 reader and replayer.\n *\n * Parses asciicast v2 JSON-lines files and replays them through\n * a termless Terminal or TerminalBackend.\n */\n\nimport type { Terminal, TerminalBackend } from \"../types.ts\"\nimport type { AsciicastEvent, AsciicastEventType, AsciicastHeader, AsciicastRecording } from \"./types.ts\"\n\n/** Options for replaying an asciicast recording. */\nexport interface ReplayOptions {\n /** Speed multiplier (default: 1). Higher = faster. 0 or Infinity = instant. */\n speed?: number\n /** Called for each event during replay. */\n onEvent?: (event: AsciicastEvent) => void\n}\n\n/**\n * Parse an asciicast v2 file from its string content.\n *\n * Handles both `\\n` and `\\r\\n` line endings. Validates the header\n * version (must be 2) and parses event tuples.\n *\n * @throws {Error} If the content is empty, the header is missing version 2,\n * or an event line has an invalid format.\n */\nexport function parseAsciicast(content: string): AsciicastRecording {\n // Split on \\n, handling \\r\\n by trimming \\r from each line\n const lines = content.split(\"\\n\").filter((line) => line.trim().length > 0)\n\n if (lines.length === 0) {\n throw new Error(\"Empty asciicast file\")\n }\n\n // Parse header (first line)\n const headerLine = lines[0]!.replace(/\\r$/, \"\")\n const header = JSON.parse(headerLine) as AsciicastHeader\n\n if (header.version !== 2) {\n throw new Error(`Unsupported asciicast version: ${header.version} (expected 2)`)\n }\n\n // Parse events (remaining lines)\n const events: AsciicastEvent[] = []\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i]!.replace(/\\r$/, \"\")\n const tuple = JSON.parse(line)\n\n if (!Array.isArray(tuple) || tuple.length < 3) {\n throw new Error(`Invalid event at line ${i + 1}: expected [time, type, data]`)\n }\n\n const [time, type, data] = tuple as [number, AsciicastEventType, string]\n events.push({ time, type, data })\n }\n\n return { header, events }\n}\n\n/** Type guard: is target a Terminal (has feed that accepts string)? */\nfunction isTerminal(target: Terminal | TerminalBackend): target is Terminal {\n // Terminal.feed accepts string | Uint8Array; TerminalBackend.feed accepts only Uint8Array.\n // We check for the `cols` property that Terminal has as a readonly number.\n return \"cols\" in target && \"press\" in target\n}\n\n/**\n * Replay an asciicast recording through a terminal.\n *\n * Feeds \"o\" (output) events to the terminal via `feed()`. Input (\"i\") events\n * are skipped during replay — they record what the user typed, not what\n * should drive the terminal. Marker (\"m\") events are reported via onEvent\n * but don't feed data.\n *\n * By default, replay preserves original timing. Set `speed` to adjust:\n * - `speed: 2` = 2x faster\n * - `speed: Infinity` or `speed: 0` = instant (no delays)\n */\nexport async function replayAsciicast(\n recording: AsciicastRecording,\n terminal: Terminal | TerminalBackend,\n options?: ReplayOptions,\n): Promise<void> {\n const speed = options?.speed ?? 1\n const instant = speed === 0 || !Number.isFinite(speed)\n const encoder = new TextEncoder()\n\n let lastTime = 0\n\n for (const event of recording.events) {\n // Wait for timing gap (unless instant)\n if (!instant && event.time > lastTime) {\n const delay = ((event.time - lastTime) / speed) * 1000\n await new Promise((resolve) => setTimeout(resolve, delay))\n }\n lastTime = event.time\n\n // Notify callback\n options?.onEvent?.(event)\n\n // Only feed output events\n if (event.type === \"o\") {\n if (isTerminal(terminal)) {\n terminal.feed(event.data)\n } else {\n terminal.feed(encoder.encode(event.data))\n }\n }\n }\n}\n","/**\n * asciicast v2 writer.\n *\n * Converts termless recordings to asciicast v2 format and provides\n * a streaming writer for building asciicast files incrementally.\n */\n\nimport type { Recording } from \"../recording.ts\"\nimport type { AsciicastHeader, AsciicastRecording } from \"./types.ts\"\n\n/** Options for converting a termless recording to asciicast. */\nexport interface ToAsciicastOptions {\n title?: string\n}\n\n/**\n * Convert a termless Recording to an asciicast v2 string (JSON-lines).\n *\n * Maps termless \"output\"/\"input\" event types to asciicast \"o\"/\"i\" types,\n * and converts timestamps from milliseconds to seconds.\n */\nexport function toAsciicast(recording: Recording, options?: ToAsciicastOptions): string {\n const header: AsciicastHeader = {\n version: 2,\n width: recording.cols,\n height: recording.rows,\n duration: recording.duration / 1000,\n }\n if (options?.title) header.title = options.title\n\n const lines: string[] = [JSON.stringify(header)]\n\n for (const event of recording.events) {\n const time = event.timestamp / 1000\n const type = event.type === \"output\" ? \"o\" : \"i\"\n lines.push(JSON.stringify([time, type, event.data]))\n }\n\n return lines.join(\"\\n\") + \"\\n\"\n}\n\n/** Handle for streaming asciicast writes. */\nexport interface AsciicastWriter {\n /** Write an output (\"o\") event with auto-timestamp. */\n writeOutput(data: string): void\n /** Write an input (\"i\") event with auto-timestamp. */\n writeInput(data: string): void\n /** Write a marker (\"m\") event with auto-timestamp. */\n writeMarker(label: string): void\n /** Finalize the writer and return the complete asciicast string. */\n close(): string\n}\n\n/**\n * Create a streaming asciicast writer that accumulates events.\n *\n * Events are timestamped relative to when the writer was created.\n * Call `close()` to get the final JSON-lines string.\n */\nexport function createAsciicastWriter(header: AsciicastHeader): AsciicastWriter {\n const startTime = Date.now()\n const lines: string[] = [JSON.stringify(header)]\n let closed = false\n\n function elapsed(): number {\n return (Date.now() - startTime) / 1000\n }\n\n function writeEvent(type: string, data: string): void {\n if (closed) throw new Error(\"AsciicastWriter has been closed\")\n lines.push(JSON.stringify([elapsed(), type, data]))\n }\n\n return {\n writeOutput(data: string): void {\n writeEvent(\"o\", data)\n },\n writeInput(data: string): void {\n writeEvent(\"i\", data)\n },\n writeMarker(label: string): void {\n writeEvent(\"m\", label)\n },\n close(): string {\n if (closed) throw new Error(\"AsciicastWriter has already been closed\")\n closed = true\n return lines.join(\"\\n\") + \"\\n\"\n },\n }\n}\n","/**\n * Conversion between termless Recording and asciicast v2 formats.\n */\n\nimport type { Recording, RecordedEvent } from \"../recording.ts\"\nimport type { AsciicastEvent, AsciicastHeader, AsciicastRecording } from \"./types.ts\"\n\n/** Options for converting a termless recording to asciicast. */\nexport interface ConvertOptions {\n title?: string\n /** Override width (defaults to recording cols). */\n width?: number\n /** Override height (defaults to recording rows). */\n height?: number\n}\n\n/**\n * Convert a termless Recording to an AsciicastRecording.\n *\n * Maps event types: \"output\" → \"o\", \"input\" → \"i\".\n * Converts timestamps from milliseconds to seconds.\n */\nexport function recordingToAsciicast(data: Recording, options?: ConvertOptions): AsciicastRecording {\n const header: AsciicastHeader = {\n version: 2,\n width: options?.width ?? data.cols,\n height: options?.height ?? data.rows,\n duration: data.duration / 1000,\n }\n if (options?.title) header.title = options.title\n\n const events: AsciicastEvent[] = data.events.map((event) => ({\n time: event.timestamp / 1000,\n type: event.type === \"output\" ? \"o\" : \"i\",\n data: event.data,\n }))\n\n return { header, events }\n}\n\n/**\n * Convert an AsciicastRecording to a termless Recording.\n *\n * Maps event types: \"o\" → \"output\", \"i\" → \"input\".\n * Marker (\"m\") events are dropped (no termless equivalent).\n * Converts timestamps from seconds to milliseconds.\n */\nexport function asciicastToRecording(recording: AsciicastRecording): Recording {\n const events: RecordedEvent[] = []\n\n for (const event of recording.events) {\n // Skip marker events — no termless equivalent\n if (event.type === \"m\") continue\n\n events.push({\n timestamp: Math.round(event.time * 1000),\n type: event.type === \"o\" ? \"output\" : \"input\",\n data: event.data,\n })\n }\n\n const duration =\n recording.header.duration != null\n ? Math.round(recording.header.duration * 1000)\n : events.length > 0\n ? events[events.length - 1]!.timestamp\n : 0\n\n return {\n version: 1,\n cols: recording.header.width,\n rows: recording.header.height,\n duration,\n events,\n }\n}\n","export type {\n Cell,\n CellView,\n CursorState,\n CursorStyle,\n EmulatorWarning,\n KeyDescriptor,\n MouseEvent,\n MouseModifiers,\n MouseOptions,\n PngScreenshotOptions,\n RegionView,\n RGB,\n RowView,\n ScrollbackState,\n SpawnOptions,\n SvgScreenshotOptions,\n SvgTheme,\n Terminal,\n TerminalBackend,\n TerminalCapabilities,\n TerminalCreateOptions,\n TerminalMode,\n TerminalOptions,\n TerminalReadable,\n TextPosition,\n UnderlineStyle,\n WarningExtension,\n} from \"./types.ts\"\n\nexport { hasExtension } from \"./types.ts\"\nexport { createTerminal } from \"./terminal.ts\"\nexport { screenshotSvg } from \"./svg.ts\"\nexport { screenshotPng } from \"./png.ts\"\nexport { parseKey, keyToAnsi } from \"./key-mapping.ts\"\nexport { encodeKeyToAnsi } from \"./key-encoding.ts\"\nexport { createCellView, createRegionView, createRowView } from \"./views.ts\"\nexport { termlessMatchers } from \"./jest-matchers.ts\"\nexport type { AssertionResult, CellAttrs, CursorProps } from \"./assertions.ts\"\n\n// Visual diff\nexport { diffBuffers } from \"./diff.ts\"\nexport type { CellDiff, CellSummary, DiffResult } from \"./diff.ts\"\n\n// Recording and replay\nexport { startRecording, replayRecording, snapshotVisualState } from \"./recording.ts\"\nexport type { RecordedEvent, Recording, RecordingHandle } from \"./recording.ts\"\n\n// Mock timer for animation testing\nexport { createMockTimer } from \"./timer.ts\"\nexport type { MockTimerController } from \"./timer.ts\"\n\n// Emulator warning registry\nexport { pushWarning, drainWarnings, hasWarnings, clearWarnings } from \"./warnings.ts\"\n\n// Backend registry (core — user-facing)\nexport {\n backend,\n isReady,\n backends,\n entry,\n manifest,\n buildBackend,\n createTerminalByName,\n ensureCachedVersion,\n} from \"./backends.ts\"\nexport type { BackendEntry, Manifest, ResolveOptions } from \"./backends.ts\"\n\n// Tape format (VHS .tape parser, executor, comparison)\nexport { parseTape, parseDuration } from \"./tape/parser.ts\"\nexport type { TapeCommand, TapeFile } from \"./tape/parser.ts\"\nexport { executeTape } from \"./tape/executor.ts\"\nexport type { TapeExecutorOptions, TapeFrame, TapeResult } from \"./tape/executor.ts\"\nexport { compareTape } from \"./tape/compare.ts\"\nexport type { CompareMode, CompareOptions, CompareResult, BackendScreenshot, BackendSpec } from \"./tape/compare.ts\"\nexport { overlayKeystroke } from \"./tape/overlay.ts\"\nexport type { KeyOverlayOptions } from \"./tape/overlay.ts\"\nexport { resolveTheme, listThemes, listAliases } from \"./tape/themes.ts\"\n\n// Animation output formats (animated SVG, GIF, APNG)\nexport { createAnimatedSvg } from \"./animation/animated-svg.ts\"\nexport { createGif } from \"./animation/gif.ts\"\nexport { createApng } from \"./animation/apng.ts\"\nexport { renderAnimation, detectFormat } from \"./animation/index.ts\"\nexport type { AnimationFrame, AnimationOptions, AnimationFormat } from \"./animation/types.ts\"\n\n// Asciicast v2 format\nexport { parseAsciicast, replayAsciicast } from \"./asciicast/reader.ts\"\nexport type { ReplayOptions } from \"./asciicast/reader.ts\"\nexport { toAsciicast, createAsciicastWriter } from \"./asciicast/writer.ts\"\nexport type { ToAsciicastOptions, AsciicastWriter } from \"./asciicast/writer.ts\"\nexport { recordingToAsciicast, asciicastToRecording } from \"./asciicast/convert.ts\"\nexport type { ConvertOptions } from \"./asciicast/convert.ts\"\nexport type {\n AsciicastHeader,\n AsciicastTheme,\n AsciicastEvent,\n AsciicastEventType,\n AsciicastRecording,\n} from \"./asciicast/types.ts\"\n","(()=>{\"use strict\";var e={349:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CircularList=void 0;const s=i(460),r=i(844);class n extends r.Disposable{constructor(e){super(),this._maxLength=e,this.onDeleteEmitter=this.register(new s.EventEmitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this.register(new s.EventEmitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this.register(new s.EventEmitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;const t=new Array(e);for(let i=0;i<Math.min(e,this.length);i++)t[i]=this._array[this._getCyclicIndex(i)];this._array=t,this._maxLength=e,this._startIndex=0}get length(){return this._length}set length(e){if(e>this._length)for(let t=this._length;t<e;t++)this._array[t]=void 0;this._length=e}get(e){return this._array[this._getCyclicIndex(e)]}set(e,t){this._array[this._getCyclicIndex(e)]=t}push(e){this._array[this._getCyclicIndex(this._length)]=e,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++}recycle(){if(this._length!==this._maxLength)throw new Error(\"Can only recycle when the buffer is full\");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]}get isFull(){return this._length===this._maxLength}pop(){return this._array[this._getCyclicIndex(this._length---1)]}splice(e,t,...i){if(t){for(let i=e;i<this._length-t;i++)this._array[this._getCyclicIndex(i)]=this._array[this._getCyclicIndex(i+t)];this._length-=t,this.onDeleteEmitter.fire({index:e,amount:t})}for(let t=this._length-1;t>=e;t--)this._array[this._getCyclicIndex(t+i.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;t<i.length;t++)this._array[this._getCyclicIndex(e+t)]=i[t];if(i.length&&this.onInsertEmitter.fire({index:e,amount:i.length}),this._length+i.length>this._maxLength){const e=this._length+i.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=i.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error(\"start argument out of range\");if(e+i<0)throw new Error(\"Cannot shift elements in list beyond index 0\");if(i>0){for(let s=t-1;s>=0;s--)this.set(e+s+i,this.get(e+s));const s=e+t+i-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s<t;s++)this.set(e+s+i,this.get(e+s))}}_getCyclicIndex(e){return(this._startIndex+e)%this._maxLength}}t.CircularList=n},439:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.clone=void 0,t.clone=function e(t,i=5){if(\"object\"!=typeof t)return t;const s=Array.isArray(t)?[]:{};for(const r in t)s[r]=i<=1?t[r]:t[r]&&e(t[r],i-1);return s}},969:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreTerminal=void 0;const s=i(844),r=i(585),n=i(348),a=i(866),o=i(744),h=i(302),c=i(83),l=i(460),_=i(753),d=i(480),f=i(994),u=i(282),p=i(435),g=i(981),v=i(660);let b=!1;class S extends s.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this.register(new l.EventEmitter),this._onScroll.event((e=>{this._onScrollApi?.fire(e.position)}))),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(const t in e)this.optionsService.options[t]=e[t]}constructor(e){super(),this._windowsWrappingHeuristics=this.register(new s.MutableDisposable),this._onBinary=this.register(new l.EventEmitter),this.onBinary=this._onBinary.event,this._onData=this.register(new l.EventEmitter),this.onData=this._onData.event,this._onLineFeed=this.register(new l.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this.register(new l.EventEmitter),this.onResize=this._onResize.event,this._onWriteParsed=this.register(new l.EventEmitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this.register(new l.EventEmitter),this._instantiationService=new n.InstantiationService,this.optionsService=this.register(new h.OptionsService(e)),this._instantiationService.setService(r.IOptionsService,this.optionsService),this._bufferService=this.register(this._instantiationService.createInstance(o.BufferService)),this._instantiationService.setService(r.IBufferService,this._bufferService),this._logService=this.register(this._instantiationService.createInstance(a.LogService)),this._instantiationService.setService(r.ILogService,this._logService),this.coreService=this.register(this._instantiationService.createInstance(c.CoreService)),this._instantiationService.setService(r.ICoreService,this.coreService),this.coreMouseService=this.register(this._instantiationService.createInstance(_.CoreMouseService)),this._instantiationService.setService(r.ICoreMouseService,this.coreMouseService),this.unicodeService=this.register(this._instantiationService.createInstance(d.UnicodeService)),this._instantiationService.setService(r.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(f.CharsetService),this._instantiationService.setService(r.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(v.OscLinkService),this._instantiationService.setService(r.IOscLinkService,this._oscLinkService),this._inputHandler=this.register(new p.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this.register((0,l.forwardEvent)(this._inputHandler.onLineFeed,this._onLineFeed)),this.register(this._inputHandler),this.register((0,l.forwardEvent)(this._bufferService.onResize,this._onResize)),this.register((0,l.forwardEvent)(this.coreService.onData,this._onData)),this.register((0,l.forwardEvent)(this.coreService.onBinary,this._onBinary)),this.register(this.coreService.onRequestScrollToBottom((()=>this.scrollToBottom()))),this.register(this.coreService.onUserInput((()=>this._writeBuffer.handleUserInput()))),this.register(this.optionsService.onMultipleOptionChange([\"windowsMode\",\"windowsPty\"],(()=>this._handleWindowsPtyOptionChange()))),this.register(this._bufferService.onScroll((e=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this.register(this._inputHandler.onScroll((e=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this._writeBuffer=this.register(new g.WriteBuffer(((e,t)=>this._inputHandler.parse(e,t)))),this.register((0,l.forwardEvent)(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=r.LogLevelEnum.WARN&&!b&&(this._logService.warn(\"writeSync is unreliable and will be removed soon.\"),b=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,o.MINIMUM_COLS),t=Math.max(t,o.MINIMUM_ROWS),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t,i){this._bufferService.scrollLines(e,t,i)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let e=!1;const t=this.optionsService.rawOptions.windowsPty;t&&void 0!==t.buildNumber&&void 0!==t.buildNumber?e=!!(\"conpty\"===t.backend&&t.buildNumber<21376):this.optionsService.rawOptions.windowsMode&&(e=!0),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const e=[];e.push(this.onLineFeed(u.updateWindowsModeWrappedState.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:\"H\"},(()=>((0,u.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,s.toDisposable)((()=>{for(const t of e)t.dispose()}))}}}t.CoreTerminal=S},460:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.runAndSubscribe=t.forwardEvent=t.EventEmitter=void 0,t.EventEmitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=e=>{this._listeners.push(e);const t={dispose:()=>{if(!this._disposed)for(let t=0;t<this._listeners.length;t++)if(this._listeners[t]===e)return void this._listeners.splice(t,1)}};return t}),this._event}fire(e,t){const i=[];for(let e=0;e<this._listeners.length;e++)i.push(this._listeners[e]);for(let s=0;s<i.length;s++)i[s].call(void 0,e,t)}dispose(){this.clearListeners(),this._disposed=!0}clearListeners(){this._listeners&&(this._listeners.length=0)}},t.forwardEvent=function(e,t){return e((e=>t.fire(e)))},t.runAndSubscribe=function(e,t){return t(void 0),e((e=>t(e)))}},435:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0;const n=i(584),a=i(116),o=i(15),h=i(844),c=i(482),l=i(437),_=i(460),d=i(643),f=i(511),u=i(734),p=i(585),g=i(480),v=i(242),b=i(351),S=i(941),m={\"(\":0,\")\":1,\"*\":2,\"+\":3,\"-\":1,\".\":2},C=131072;function y(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var w;!function(e){e[e.GET_WIN_SIZE_PIXELS=0]=\"GET_WIN_SIZE_PIXELS\",e[e.GET_CELL_SIZE_PIXELS=1]=\"GET_CELL_SIZE_PIXELS\"}(w||(t.WindowsOptionsReportType=w={}));let B=0;class E extends h.Disposable{getAttrData(){return this._curAttrData}constructor(e,t,i,s,r,h,d,u,p=new o.EscapeSequenceParser){super(),this._bufferService=e,this._charsetService=t,this._coreService=i,this._logService=s,this._optionsService=r,this._oscLinkService=h,this._coreMouseService=d,this._unicodeService=u,this._parser=p,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new c.StringToUtf32,this._utf8Decoder=new c.Utf8ToUtf32,this._workCell=new f.CellData,this._windowTitle=\"\",this._iconName=\"\",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this.register(new _.EventEmitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this.register(new _.EventEmitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this.register(new _.EventEmitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this.register(new _.EventEmitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this.register(new _.EventEmitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this.register(new _.EventEmitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this.register(new _.EventEmitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this.register(new _.EventEmitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this.register(new _.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this.register(new _.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this.register(new _.EventEmitter),this.onScroll=this._onScroll.event,this._onTitleChange=this.register(new _.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this.register(new _.EventEmitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this.register(this._parser),this._dirtyRowTracker=new A(this._bufferService),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((e=>this._activeBuffer=e.activeBuffer))),this._parser.setCsiHandlerFallback(((e,t)=>{this._logService.debug(\"Unknown CSI code: \",{identifier:this._parser.identToString(e),params:t.toArray()})})),this._parser.setEscHandlerFallback((e=>{this._logService.debug(\"Unknown ESC code: \",{identifier:this._parser.identToString(e)})})),this._parser.setExecuteHandlerFallback((e=>{this._logService.debug(\"Unknown EXECUTE code: \",{code:e})})),this._parser.setOscHandlerFallback(((e,t,i)=>{this._logService.debug(\"Unknown OSC code: \",{identifier:e,action:t,data:i})})),this._parser.setDcsHandlerFallback(((e,t,i)=>{\"HOOK\"===t&&(i=i.toArray()),this._logService.debug(\"Unknown DCS code: \",{identifier:this._parser.identToString(e),action:t,payload:i})})),this._parser.setPrintHandler(((e,t,i)=>this.print(e,t,i))),this._parser.registerCsiHandler({final:\"@\"},(e=>this.insertChars(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"@\"},(e=>this.scrollLeft(e))),this._parser.registerCsiHandler({final:\"A\"},(e=>this.cursorUp(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"A\"},(e=>this.scrollRight(e))),this._parser.registerCsiHandler({final:\"B\"},(e=>this.cursorDown(e))),this._parser.registerCsiHandler({final:\"C\"},(e=>this.cursorForward(e))),this._parser.registerCsiHandler({final:\"D\"},(e=>this.cursorBackward(e))),this._parser.registerCsiHandler({final:\"E\"},(e=>this.cursorNextLine(e))),this._parser.registerCsiHandler({final:\"F\"},(e=>this.cursorPrecedingLine(e))),this._parser.registerCsiHandler({final:\"G\"},(e=>this.cursorCharAbsolute(e))),this._parser.registerCsiHandler({final:\"H\"},(e=>this.cursorPosition(e))),this._parser.registerCsiHandler({final:\"I\"},(e=>this.cursorForwardTab(e))),this._parser.registerCsiHandler({final:\"J\"},(e=>this.eraseInDisplay(e,!1))),this._parser.registerCsiHandler({prefix:\"?\",final:\"J\"},(e=>this.eraseInDisplay(e,!0))),this._parser.registerCsiHandler({final:\"K\"},(e=>this.eraseInLine(e,!1))),this._parser.registerCsiHandler({prefix:\"?\",final:\"K\"},(e=>this.eraseInLine(e,!0))),this._parser.registerCsiHandler({final:\"L\"},(e=>this.insertLines(e))),this._parser.registerCsiHandler({final:\"M\"},(e=>this.deleteLines(e))),this._parser.registerCsiHandler({final:\"P\"},(e=>this.deleteChars(e))),this._parser.registerCsiHandler({final:\"S\"},(e=>this.scrollUp(e))),this._parser.registerCsiHandler({final:\"T\"},(e=>this.scrollDown(e))),this._parser.registerCsiHandler({final:\"X\"},(e=>this.eraseChars(e))),this._parser.registerCsiHandler({final:\"Z\"},(e=>this.cursorBackwardTab(e))),this._parser.registerCsiHandler({final:\"`\"},(e=>this.charPosAbsolute(e))),this._parser.registerCsiHandler({final:\"a\"},(e=>this.hPositionRelative(e))),this._parser.registerCsiHandler({final:\"b\"},(e=>this.repeatPrecedingCharacter(e))),this._parser.registerCsiHandler({final:\"c\"},(e=>this.sendDeviceAttributesPrimary(e))),this._parser.registerCsiHandler({prefix:\">\",final:\"c\"},(e=>this.sendDeviceAttributesSecondary(e))),this._parser.registerCsiHandler({final:\"d\"},(e=>this.linePosAbsolute(e))),this._parser.registerCsiHandler({final:\"e\"},(e=>this.vPositionRelative(e))),this._parser.registerCsiHandler({final:\"f\"},(e=>this.hVPosition(e))),this._parser.registerCsiHandler({final:\"g\"},(e=>this.tabClear(e))),this._parser.registerCsiHandler({final:\"h\"},(e=>this.setMode(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"h\"},(e=>this.setModePrivate(e))),this._parser.registerCsiHandler({final:\"l\"},(e=>this.resetMode(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"l\"},(e=>this.resetModePrivate(e))),this._parser.registerCsiHandler({final:\"m\"},(e=>this.charAttributes(e))),this._parser.registerCsiHandler({final:\"n\"},(e=>this.deviceStatus(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"n\"},(e=>this.deviceStatusPrivate(e))),this._parser.registerCsiHandler({intermediates:\"!\",final:\"p\"},(e=>this.softReset(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"q\"},(e=>this.setCursorStyle(e))),this._parser.registerCsiHandler({final:\"r\"},(e=>this.setScrollRegion(e))),this._parser.registerCsiHandler({final:\"s\"},(e=>this.saveCursor(e))),this._parser.registerCsiHandler({final:\"t\"},(e=>this.windowOptions(e))),this._parser.registerCsiHandler({final:\"u\"},(e=>this.restoreCursor(e))),this._parser.registerCsiHandler({intermediates:\"'\",final:\"}\"},(e=>this.insertColumns(e))),this._parser.registerCsiHandler({intermediates:\"'\",final:\"~\"},(e=>this.deleteColumns(e))),this._parser.registerCsiHandler({intermediates:'\"',final:\"q\"},(e=>this.selectProtected(e))),this._parser.registerCsiHandler({intermediates:\"$\",final:\"p\"},(e=>this.requestMode(e,!0))),this._parser.registerCsiHandler({prefix:\"?\",intermediates:\"$\",final:\"p\"},(e=>this.requestMode(e,!1))),this._parser.setExecuteHandler(n.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(n.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(n.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(n.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(n.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(n.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(n.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(n.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(n.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new v.OscHandler((e=>(this.setTitle(e),this.setIconName(e),!0)))),this._parser.registerOscHandler(1,new v.OscHandler((e=>this.setIconName(e)))),this._parser.registerOscHandler(2,new v.OscHandler((e=>this.setTitle(e)))),this._parser.registerOscHandler(4,new v.OscHandler((e=>this.setOrReportIndexedColor(e)))),this._parser.registerOscHandler(8,new v.OscHandler((e=>this.setHyperlink(e)))),this._parser.registerOscHandler(10,new v.OscHandler((e=>this.setOrReportFgColor(e)))),this._parser.registerOscHandler(11,new v.OscHandler((e=>this.setOrReportBgColor(e)))),this._parser.registerOscHandler(12,new v.OscHandler((e=>this.setOrReportCursorColor(e)))),this._parser.registerOscHandler(104,new v.OscHandler((e=>this.restoreIndexedColor(e)))),this._parser.registerOscHandler(110,new v.OscHandler((e=>this.restoreFgColor(e)))),this._parser.registerOscHandler(111,new v.OscHandler((e=>this.restoreBgColor(e)))),this._parser.registerOscHandler(112,new v.OscHandler((e=>this.restoreCursorColor(e)))),this._parser.registerEscHandler({final:\"7\"},(()=>this.saveCursor())),this._parser.registerEscHandler({final:\"8\"},(()=>this.restoreCursor())),this._parser.registerEscHandler({final:\"D\"},(()=>this.index())),this._parser.registerEscHandler({final:\"E\"},(()=>this.nextLine())),this._parser.registerEscHandler({final:\"H\"},(()=>this.tabSet())),this._parser.registerEscHandler({final:\"M\"},(()=>this.reverseIndex())),this._parser.registerEscHandler({final:\"=\"},(()=>this.keypadApplicationMode())),this._parser.registerEscHandler({final:\">\"},(()=>this.keypadNumericMode())),this._parser.registerEscHandler({final:\"c\"},(()=>this.fullReset())),this._parser.registerEscHandler({final:\"n\"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:\"o\"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:\"|\"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:\"}\"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:\"~\"},(()=>this.setgLevel(1))),this._parser.registerEscHandler({intermediates:\"%\",final:\"@\"},(()=>this.selectDefaultCharset())),this._parser.registerEscHandler({intermediates:\"%\",final:\"G\"},(()=>this.selectDefaultCharset()));for(const e in a.CHARSETS)this._parser.registerEscHandler({intermediates:\"(\",final:e},(()=>this.selectCharset(\"(\"+e))),this._parser.registerEscHandler({intermediates:\")\",final:e},(()=>this.selectCharset(\")\"+e))),this._parser.registerEscHandler({intermediates:\"*\",final:e},(()=>this.selectCharset(\"*\"+e))),this._parser.registerEscHandler({intermediates:\"+\",final:e},(()=>this.selectCharset(\"+\"+e))),this._parser.registerEscHandler({intermediates:\"-\",final:e},(()=>this.selectCharset(\"-\"+e))),this._parser.registerEscHandler({intermediates:\".\",final:e},(()=>this.selectCharset(\".\"+e))),this._parser.registerEscHandler({intermediates:\"/\",final:e},(()=>this.selectCharset(\"/\"+e)));this._parser.registerEscHandler({intermediates:\"#\",final:\"8\"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((e=>(this._logService.error(\"Parsing error: \",e),e))),this._parser.registerDcsHandler({intermediates:\"$\",final:\"q\"},new b.DcsHandler(((e,t)=>this.requestStatusString(e,t))))}_preserveStack(e,t,i,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=i,this._parseStack.position=s}_logSlowResolvingAsync(e){this._logService.logLevel<=p.LogLevelEnum.WARN&&Promise.race([e,new Promise(((e,t)=>setTimeout((()=>t(\"#SLOW_TIMEOUT\")),5e3)))]).catch((e=>{if(\"#SLOW_TIMEOUT\"!==e)throw e;console.warn(\"async parser handler taking longer than 5000 ms\")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let i,s=this._activeBuffer.x,r=this._activeBuffer.y,n=0;const a=this._parseStack.paused;if(a){if(i=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(i),i;s=this._parseStack.cursorStartX,r=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>C&&(n=this._parseStack.position+C)}if(this._logService.logLevel<=p.LogLevelEnum.DEBUG&&this._logService.debug(\"parsing data\"+(\"string\"==typeof e?` \"${e}\"`:` \"${Array.prototype.map.call(e,(e=>String.fromCharCode(e))).join(\"\")}\"`),\"string\"==typeof e?e.split(\"\").map((e=>e.charCodeAt(0))):e),this._parseBuffer.length<e.length&&this._parseBuffer.length<C&&(this._parseBuffer=new Uint32Array(Math.min(e.length,C))),a||this._dirtyRowTracker.clearRange(),e.length>C)for(let t=n;t<e.length;t+=C){const n=t+C<e.length?t+C:e.length,a=\"string\"==typeof e?this._stringDecoder.decode(e.substring(t,n),this._parseBuffer):this._utf8Decoder.decode(e.subarray(t,n),this._parseBuffer);if(i=this._parser.parse(this._parseBuffer,a))return this._preserveStack(s,r,a,t),this._logSlowResolvingAsync(i),i}else if(!a){const t=\"string\"==typeof e?this._stringDecoder.decode(e,this._parseBuffer):this._utf8Decoder.decode(e,this._parseBuffer);if(i=this._parser.parse(this._parseBuffer,t))return this._preserveStack(s,r,t,0),this._logSlowResolvingAsync(i),i}this._activeBuffer.x===s&&this._activeBuffer.y===r||this._onCursorMove.fire();const o=this._dirtyRowTracker.end+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp),h=this._dirtyRowTracker.start+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp);h<this._bufferService.rows&&this._onRequestRefreshRows.fire(Math.min(h,this._bufferService.rows-1),Math.min(o,this._bufferService.rows-1))}print(e,t,i){let s,r;const n=this._charsetService.charset,a=this._optionsService.rawOptions.screenReaderMode,o=this._bufferService.cols,h=this._coreService.decPrivateModes.wraparound,_=this._coreService.modes.insertMode,f=this._curAttrData;let u=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&i-t>0&&2===u.getWidth(this._activeBuffer.x-1)&&u.setCellFromCodepoint(this._activeBuffer.x-1,0,1,f);let p=this._parser.precedingJoinState;for(let v=t;v<i;++v){if(s=e[v],s<127&&n){const e=n[String.fromCharCode(s)];e&&(s=e.charCodeAt(0))}const t=this._unicodeService.charProperties(s,p);r=g.UnicodeService.extractWidth(t);const i=g.UnicodeService.extractShouldJoin(t),b=i?g.UnicodeService.extractWidth(p):0;if(p=t,a&&this._onA11yChar.fire((0,c.stringFromCodePoint)(s)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+r-b>o)if(h){const e=u;let t=this._activeBuffer.x-b;for(this._activeBuffer.x=b,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),u=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),b>0&&u instanceof l.BufferLine&&u.copyCellsFrom(e,t,0,b,!1);t<o;)e.setCellFromCodepoint(t++,0,1,f)}else if(this._activeBuffer.x=o-1,2===r)continue;if(i&&this._activeBuffer.x){const e=u.getWidth(this._activeBuffer.x-1)?1:2;u.addCodepointToCell(this._activeBuffer.x-e,s,r);for(let e=r-b;--e>=0;)u.setCellFromCodepoint(this._activeBuffer.x++,0,0,f)}else if(_&&(u.insertCells(this._activeBuffer.x,r-b,this._activeBuffer.getNullCell(f)),2===u.getWidth(o-1)&&u.setCellFromCodepoint(o-1,d.NULL_CELL_CODE,d.NULL_CELL_WIDTH,f)),u.setCellFromCodepoint(this._activeBuffer.x++,s,r,f),r>0)for(;--r;)u.setCellFromCodepoint(this._activeBuffer.x++,0,0,f)}this._parser.precedingJoinState=p,this._activeBuffer.x<o&&i-t>0&&0===u.getWidth(this._activeBuffer.x)&&!u.hasContent(this._activeBuffer.x)&&u.setCellFromCodepoint(this._activeBuffer.x,0,1,f),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return\"t\"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,(e=>!y(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e)))}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new b.DcsHandler(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new v.OscHandler(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){const t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){const t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){const t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){const t=e.params[0];return 1===t&&(this._curAttrData.bg|=536870912),2!==t&&0!==t||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,i,s=!1,r=!1){const n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n.replaceCells(t,i,this._activeBuffer.getNullCell(this._eraseAttrData()),r),s&&(n.isWrapped=!1)}_resetBufferLine(e,t=!1){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i&&(i.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),i.isWrapped=!1)}eraseInDisplay(e,t=!1){let i;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);i<this._bufferService.rows;i++)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(i);break;case 1:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i,0,this._activeBuffer.x+1,!0,t),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(i+1).isWrapped=!1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 2:for(i=this._bufferService.rows,this._dirtyRowTracker.markDirty(i-1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 3:const e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;const i=this._activeBuffer.ybase+this._activeBuffer.y,s=this._bufferService.rows-1-this._activeBuffer.scrollBottom,r=this._bufferService.rows-1+this._activeBuffer.ybase-s+1;for(;t--;)this._activeBuffer.lines.splice(r-1,1),this._activeBuffer.lines.splice(i,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}deleteLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;const i=this._activeBuffer.ybase+this._activeBuffer.y;let s;for(s=this._bufferService.rows-1-this._activeBuffer.scrollBottom,s=this._bufferService.rows-1+this._activeBuffer.ybase-s;t--;)this._activeBuffer.lines.splice(i,1),this._activeBuffer.lines.splice(s,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}insertChars(e){this._restrictCursor();const t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.insertCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}deleteChars(e){this._restrictCursor();const t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.deleteCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(e){let t=e.params[0]||1;for(;t--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollDown(e){let t=e.params[0]||1;for(;t--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(l.DEFAULT_ATTR_DATA));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollLeft(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;const t=e.params[0]||1;for(let e=this._activeBuffer.scrollTop;e<=this._activeBuffer.scrollBottom;++e){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i.deleteCells(0,t,this._activeBuffer.getNullCell(this._eraseAttrData())),i.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollRight(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;const t=e.params[0]||1;for(let e=this._activeBuffer.scrollTop;e<=this._activeBuffer.scrollBottom;++e){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i.insertCells(0,t,this._activeBuffer.getNullCell(this._eraseAttrData())),i.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}insertColumns(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;const t=e.params[0]||1;for(let e=this._activeBuffer.scrollTop;e<=this._activeBuffer.scrollBottom;++e){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i.insertCells(this._activeBuffer.x,t,this._activeBuffer.getNullCell(this._eraseAttrData())),i.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;const t=e.params[0]||1;for(let e=this._activeBuffer.scrollTop;e<=this._activeBuffer.scrollBottom;++e){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i.deleteCells(this._activeBuffer.x,t,this._activeBuffer.getNullCell(this._eraseAttrData())),i.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(e){this._restrictCursor();const t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return t&&(t.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(e.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}repeatPrecedingCharacter(e){const t=this._parser.precedingJoinState;if(!t)return!0;const i=e.params[0]||1,s=g.UnicodeService.extractWidth(t),r=this._activeBuffer.x-s,n=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString(r),a=new Uint32Array(n.length*i);let o=0;for(let e=0;e<n.length;){const t=n.codePointAt(e)||0;a[o++]=t,e+=t>65535?2:1}let h=o;for(let e=1;e<i;++e)a.copyWithin(h,0,o),h+=o;return this.print(a,0,h),!0}sendDeviceAttributesPrimary(e){return e.params[0]>0||(this._is(\"xterm\")||this._is(\"rxvt-unicode\")||this._is(\"screen\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[?1;2c\"):this._is(\"linux\")&&this._coreService.triggerDataEvent(n.C0.ESC+\"[?6c\")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is(\"xterm\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[>0;276;0c\"):this._is(\"rxvt-unicode\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[>85;95;0c\"):this._is(\"linux\")?this._coreService.triggerDataEvent(e.params[0]+\"c\"):this._is(\"screen\")&&this._coreService.triggerDataEvent(n.C0.ESC+\"[>83;40003;0c\")),!0}_is(e){return 0===(this._optionsService.rawOptions.termName+\"\").indexOf(e)}setMode(e){for(let t=0;t<e.length;t++)switch(e.params[t]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(e){for(let t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,a.DEFAULT_CHARSET),this._charsetService.setgCharset(1,a.DEFAULT_CHARSET),this._charsetService.setgCharset(2,a.DEFAULT_CHARSET),this._charsetService.setgCharset(3,a.DEFAULT_CHARSET);break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:this._optionsService.options.cursorBlink=!0;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug(\"Serial port requested application keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol=\"X10\";break;case 1e3:this._coreMouseService.activeProtocol=\"VT200\";break;case 1002:this._coreMouseService.activeProtocol=\"DRAG\";break;case 1003:this._coreMouseService.activeProtocol=\"ANY\";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0,this._onRequestSendFocus.fire();break;case 1005:this._logService.debug(\"DECSET 1005 not supported (see #2507)\");break;case 1006:this._coreMouseService.activeEncoding=\"SGR\";break;case 1015:this._logService.debug(\"DECSET 1015 not supported (see #2507)\");break;case 1016:this._coreMouseService.activeEncoding=\"SGR_PIXELS\";break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0}return!0}resetMode(e){for(let t=0;t<e.length;t++)switch(e.params[t]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(e){for(let t=0;t<e.length;t++)switch(e.params[t]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:this._optionsService.options.cursorBlink=!1;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug(\"Switching back to normal keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol=\"NONE\";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug(\"DECRST 1005 not supported (see #2507)\");break;case 1006:case 1016:this._coreMouseService.activeEncoding=\"DEFAULT\";break;case 1015:this._logService.debug(\"DECRST 1015 not supported (see #2507)\");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),1049===e.params[t]&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(0,this._bufferService.rows-1),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1}return!0}requestMode(e,t){const i=this._coreService.decPrivateModes,{activeProtocol:s,activeEncoding:r}=this._coreMouseService,a=this._coreService,{buffers:o,cols:h}=this._bufferService,{active:c,alt:l}=o,_=this._optionsService.rawOptions,d=e=>e?1:2,f=e.params[0];return u=f,p=t?2===f?4:4===f?d(a.modes.insertMode):12===f?3:20===f?d(_.convertEol):0:1===f?d(i.applicationCursorKeys):3===f?_.windowOptions.setWinLines?80===h?2:132===h?1:0:0:6===f?d(i.origin):7===f?d(i.wraparound):8===f?3:9===f?d(\"X10\"===s):12===f?d(_.cursorBlink):25===f?d(!a.isCursorHidden):45===f?d(i.reverseWraparound):66===f?d(i.applicationKeypad):67===f?4:1e3===f?d(\"VT200\"===s):1002===f?d(\"DRAG\"===s):1003===f?d(\"ANY\"===s):1004===f?d(i.sendFocus):1005===f?4:1006===f?d(\"SGR\"===r):1015===f?4:1016===f?d(\"SGR_PIXELS\"===r):1048===f?1:47===f||1047===f||1049===f?d(c===l):2004===f?d(i.bracketedPasteMode):0,a.triggerDataEvent(`${n.C0.ESC}[${t?\"\":\"?\"}${u};${p}$y`),!0;var u,p}_updateAttrColor(e,t,i,s,r){return 2===t?(e|=50331648,e&=-16777216,e|=u.AttributeData.fromColorRGB([i,s,r])):5===t&&(e&=-50331904,e|=33554432|255&i),e}_extractColor(e,t,i){const s=[0,0,-1,0,0,0];let r=0,n=0;do{if(s[n+r]=e.params[t+n],e.hasSubParams(t+n)){const i=e.getSubParams(t+n);let a=0;do{5===s[1]&&(r=1),s[n+a+1+r]=i[a]}while(++a<i.length&&a+n+1+r<s.length);break}if(5===s[1]&&n+r>=2||2===s[1]&&n+r>=5)break;s[1]&&(r=1)}while(++n+t<e.length&&n+r<s.length);for(let e=2;e<s.length;++e)-1===s[e]&&(s[e]=0);switch(s[0]){case 38:i.fg=this._updateAttrColor(i.fg,s[1],s[3],s[4],s[5]);break;case 48:i.bg=this._updateAttrColor(i.bg,s[1],s[3],s[4],s[5]);break;case 58:i.extended=i.extended.clone(),i.extended.underlineColor=this._updateAttrColor(i.extended.underlineColor,s[1],s[3],s[4],s[5])}return n}_processUnderline(e,t){t.extended=t.extended.clone(),(!~e||e>5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=l.DEFAULT_ATTR_DATA.fg,e.bg=l.DEFAULT_ATTR_DATA.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(1===e.length&&0===e.params[0])return this._processSGR0(this._curAttrData),!0;const t=e.length;let i;const s=this._curAttrData;for(let r=0;r<t;r++)i=e.params[r],i>=30&&i<=37?(s.fg&=-50331904,s.fg|=16777216|i-30):i>=40&&i<=47?(s.bg&=-50331904,s.bg|=16777216|i-40):i>=90&&i<=97?(s.fg&=-50331904,s.fg|=16777224|i-90):i>=100&&i<=107?(s.bg&=-50331904,s.bg|=16777224|i-100):0===i?this._processSGR0(s):1===i?s.fg|=134217728:3===i?s.bg|=67108864:4===i?(s.fg|=268435456,this._processUnderline(e.hasSubParams(r)?e.getSubParams(r)[0]:1,s)):5===i?s.fg|=536870912:7===i?s.fg|=67108864:8===i?s.fg|=1073741824:9===i?s.fg|=2147483648:2===i?s.bg|=134217728:21===i?this._processUnderline(2,s):22===i?(s.fg&=-134217729,s.bg&=-134217729):23===i?s.bg&=-67108865:24===i?(s.fg&=-268435457,this._processUnderline(0,s)):25===i?s.fg&=-536870913:27===i?s.fg&=-67108865:28===i?s.fg&=-1073741825:29===i?s.fg&=2147483647:39===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg):49===i?(s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):38===i||48===i||58===i?r+=this._extractColor(e,r,s):53===i?s.bg|=1073741824:55===i?s.bg&=-1073741825:59===i?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):100===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg,s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):this._logService.debug(\"Unknown SGR attribute: %d.\",i);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(`${n.C0.ESC}[0n`);break;case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${n.C0.ESC}[${e};${t}R`)}return!0}deviceStatusPrivate(e){if(6===e.params[0]){const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${n.C0.ESC}[?${e};${t}R`)}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){const t=e.params[0]||1;switch(t){case 1:case 2:this._optionsService.options.cursorStyle=\"block\";break;case 3:case 4:this._optionsService.options.cursorStyle=\"underline\";break;case 5:case 6:this._optionsService.options.cursorStyle=\"bar\"}const i=t%2==1;return this._optionsService.options.cursorBlink=i,!0}setScrollRegion(e){const t=e.params[0]||1;let i;return(e.length<2||(i=e.params[1])>this._bufferService.rows||0===i)&&(i=this._bufferService.rows),i>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=i-1,this._setCursor(0,0)),!0}windowOptions(e){if(!y(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;const t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(w.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(w.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${n.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0}setIconName(e){return this._iconName=e,!0}setOrReportIndexedColor(e){const t=[],i=e.split(\";\");for(;i.length>1;){const e=i.shift(),s=i.shift();if(/^\\d+$/.exec(e)){const i=parseInt(e);if(L(i))if(\"?\"===s)t.push({type:0,index:i});else{const e=(0,S.parseColor)(s);e&&t.push({type:1,index:i,color:e})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){const t=e.split(\";\");return!(t.length<2)&&(t[1]?this._createHyperlink(t[0],t[1]):!t[0]&&this._finishHyperlink())}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();const i=e.split(\":\");let s;const r=i.findIndex((e=>e.startsWith(\"id=\")));return-1!==r&&(s=i[r].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){const i=e.split(\";\");for(let e=0;e<i.length&&!(t>=this._specialColors.length);++e,++t)if(\"?\"===i[e])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{const s=(0,S.parseColor)(i[e]);s&&this._onColor.fire([{type:1,index:this._specialColors[t],color:s}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;const t=[],i=e.split(\";\");for(let e=0;e<i.length;++e)if(/^\\d+$/.exec(i[e])){const s=parseInt(i[e]);L(s)&&t.push({type:2,index:s})}return t.length&&this._onColor.fire(t),!0}restoreFgColor(e){return this._onColor.fire([{type:2,index:256}]),!0}restoreBgColor(e){return this._onColor.fire([{type:2,index:257}]),!0}restoreCursorColor(e){return this._onColor.fire([{type:2,index:258}]),!0}nextLine(){return this._activeBuffer.x=0,this.index(),!0}keypadApplicationMode(){return this._logService.debug(\"Serial port requested application keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire(),!0}keypadNumericMode(){return this._logService.debug(\"Switching back to normal keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire(),!0}selectDefaultCharset(){return this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,a.DEFAULT_CHARSET),!0}selectCharset(e){return 2!==e.length?(this.selectDefaultCharset(),!0):(\"/\"===e[0]||this._charsetService.setgCharset(m[e[0]],a.CHARSETS[e[1]]||a.DEFAULT_CHARSET),!0)}index(){return this._restrictCursor(),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){const e=new f.CellData;e.content=1<<22|\"E\".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t<this._bufferService.rows;++t){const i=this._activeBuffer.ybase+this._activeBuffer.y+t,s=this._activeBuffer.lines.get(i);s&&(s.fill(e),s.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(e,t){const i=this._bufferService.buffer,s=this._optionsService.rawOptions;return(e=>(this._coreService.triggerDataEvent(`${n.C0.ESC}${e}${n.C0.ESC}\\\\`),!0))('\"q'===e?`P1$r${this._curAttrData.isProtected()?1:0}\"q`:'\"p'===e?'P1$r61;1\"p':\"r\"===e?`P1$r${i.scrollTop+1};${i.scrollBottom+1}r`:\"m\"===e?\"P1$r0m\":\" q\"===e?`P1$r${{block:2,underline:4,bar:6}[s.cursorStyle]-(s.cursorBlink?1:0)} q`:\"P0$r\")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}}t.InputHandler=E;let A=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){e<this.start?this.start=e:e>this.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(B=e,e=t,t=B),e<this.start&&(this.start=e),t>this.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function L(e){return 0<=e&&e<256}A=s([r(0,p.IBufferService)],A)},844:(e,t)=>{function i(e){for(const t of e)t.dispose();e.length=0}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getDisposeArrayDisposable=t.disposeArray=t.toDisposable=t.MutableDisposable=t.Disposable=void 0,t.Disposable=class{constructor(){this._disposables=[],this._isDisposed=!1}dispose(){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.length=0}register(e){return this._disposables.push(e),e}unregister(e){const t=this._disposables.indexOf(e);-1!==t&&this._disposables.splice(t,1)}},t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}},t.toDisposable=function(e){return{dispose:e}},t.disposeArray=i,t.getDisposeArrayDisposable=function(e){return{dispose:()=>i(e)}}},114:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.isChromeOS=t.isLinux=t.isWindows=t.isIphone=t.isIpad=t.isMac=t.getSafariVersion=t.isSafari=t.isLegacyEdge=t.isFirefox=t.isNode=void 0,t.isNode=\"undefined\"!=typeof process&&\"title\"in process;const i=t.isNode?\"node\":navigator.userAgent,s=t.isNode?\"node\":navigator.platform;t.isFirefox=i.includes(\"Firefox\"),t.isLegacyEdge=i.includes(\"Edge\"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.getSafariVersion=function(){if(!t.isSafari)return 0;const e=i.match(/Version\\/(\\d+)/);return null===e||e.length<2?0:parseInt(e[1])},t.isMac=[\"Macintosh\",\"MacIntel\",\"MacPPC\",\"Mac68K\"].includes(s),t.isIpad=\"iPad\"===s,t.isIphone=\"iPhone\"===s,t.isWindows=[\"Windows\",\"Win16\",\"Win32\",\"WinCE\"].includes(s),t.isLinux=s.indexOf(\"Linux\")>=0,t.isChromeOS=/\\bCrOS\\b/.test(i)},226:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DebouncedIdleTask=t.IdleTaskQueue=t.PriorityTaskQueue=void 0;const s=i(114);class r{constructor(){this._tasks=[],this._i=0}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._i<this._tasks.length;)this._tasks[this._i]()||this._i++;this.clear()}clear(){this._idleCallback&&(this._cancelCallback(this._idleCallback),this._idleCallback=void 0),this._i=0,this._tasks.length=0}_start(){this._idleCallback||(this._idleCallback=this._requestCallback(this._process.bind(this)))}_process(e){this._idleCallback=void 0;let t=0,i=0,s=e.timeRemaining(),r=0;for(;this._i<this._tasks.length;){if(t=Date.now(),this._tasks[this._i]()||this._i++,t=Math.max(1,Date.now()-t),i=Math.max(t,i),r=e.timeRemaining(),1.5*i>r)return s-t<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-t))}ms`),void this._start();s=r}this.clear()}}class n extends r{_requestCallback(e){return setTimeout((()=>e(this._createDeadline(16))))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){const t=Date.now()+e;return{timeRemaining:()=>Math.max(0,t-Date.now())}}}t.PriorityTaskQueue=n,t.IdleTaskQueue=!s.isNode&&\"requestIdleCallback\"in window?class extends r{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}}:n,t.DebouncedIdleTask=class{constructor(){this._queue=new t.IdleTaskQueue}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}}},282:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.updateWindowsModeWrappedState=void 0;const s=i(643);t.updateWindowsModeWrappedState=function(e){const t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),i=t?.get(e.cols-1),r=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);r&&i&&(r.isWrapped=i[s.CHAR_DATA_CODE_INDEX]!==s.NULL_CELL_CODE&&i[s.CHAR_DATA_CODE_INDEX]!==s.WHITESPACE_CELL_CODE)}},734:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return 50331648==(50331648&this.fg)}isBgRGB(){return 50331648==(50331648&this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return 0==(50331648&this.fg)}isBgDefault(){return 0==(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?50331648==(50331648&this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?0==(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId}}t.ExtendedAttrs=s},92:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Buffer=t.MAX_BUFFER_SIZE=void 0;const s=i(349),r=i(226),n=i(734),a=i(437),o=i(634),h=i(511),c=i(643),l=i(863),_=i(116);t.MAX_BUFFER_SIZE=4294967295,t.Buffer=class{constructor(e,t,i){this._hasScrollback=e,this._optionsService=t,this._bufferService=i,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=a.DEFAULT_ATTR_DATA.clone(),this.savedCharset=_.DEFAULT_CHARSET,this.markers=[],this._nullCell=h.CellData.fromCharData([0,c.NULL_CELL_CHAR,c.NULL_CELL_WIDTH,c.NULL_CELL_CODE]),this._whitespaceCell=h.CellData.fromCharData([0,c.WHITESPACE_CELL_CHAR,c.WHITESPACE_CELL_WIDTH,c.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new r.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new n.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new n.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new a.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&e<this._rows}_getCorrectBufferLength(e){if(!this._hasScrollback)return e;const i=e+this._optionsService.rawOptions.scrollback;return i>t.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:i}fillViewportRows(e){if(0===this.lines.length){void 0===e&&(e=a.DEFAULT_ATTR_DATA);let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const i=this.getNullCell(a.DEFAULT_ATTR_DATA);let s=0;const r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),this.lines.length>0){if(this._cols<e)for(let t=0;t<this.lines.length;t++)s+=+this.lines.get(t).resize(e,i);let n=0;if(this._rows<t)for(let s=this._rows;s<t;s++)this.lines.length<t+this.ybase&&(this._optionsService.rawOptions.windowsMode||void 0!==this._optionsService.rawOptions.windowsPty.backend||void 0!==this._optionsService.rawOptions.windowsPty.buildNumber?this.lines.push(new a.BufferLine(e,i)):this.ybase>0&&this.lines.length<=this.ybase+this.y+n+1?(this.ybase--,n++,this.ydisp>0&&this.ydisp--):this.lines.push(new a.BufferLine(e,i)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(r<this.lines.maxLength){const e=this.lines.length-r;e>0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=r}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),n&&(this.y+=n),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t<this.lines.length;t++)s+=+this.lines.get(t).resize(e,i);this._cols=e,this._rows=t,this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition<this.lines.length;)if(t+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),t>100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&\"conpty\"===e.backend&&e.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const i=(0,o.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(a.DEFAULT_ATTR_DATA));if(i.length>0){const s=(0,o.reflowLargerCreateNewLayout)(this.lines,i);(0,o.reflowLargerApplyNewLayout)(this.lines,s.layout),this._reflowLargerAdjustViewport(e,t,s.countRemoved)}}_reflowLargerAdjustViewport(e,t,i){const s=this.getNullCell(a.DEFAULT_ATTR_DATA);let r=i;for(;r-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length<t&&this.lines.push(new a.BufferLine(e,s))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-i,0)}_reflowSmaller(e,t){const i=this.getNullCell(a.DEFAULT_ATTR_DATA),s=[];let r=0;for(let n=this.lines.length-1;n>=0;n--){let h=this.lines.get(n);if(!h||!h.isWrapped&&h.getTrimmedLength()<=e)continue;const c=[h];for(;h.isWrapped&&n>0;)h=this.lines.get(--n),c.unshift(h);const l=this.ybase+this.y;if(l>=n&&l<n+c.length)continue;const _=c[c.length-1].getTrimmedLength(),d=(0,o.reflowSmallerGetNewLineLengths)(c,this._cols,e),f=d.length-c.length;let u;u=0===this.ybase&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+f):Math.max(0,this.lines.length-this.lines.maxLength+f);const p=[];for(let e=0;e<f;e++){const e=this.getBlankLine(a.DEFAULT_ATTR_DATA,!0);p.push(e)}p.length>0&&(s.push({start:n+c.length+r,newLines:p}),r+=p.length),c.push(...p);let g=d.length-1,v=d[g];0===v&&(g--,v=d[g]);let b=c.length-f-1,S=_;for(;b>=0;){const e=Math.min(S,v);if(void 0===c[g])break;if(c[g].copyCellsFrom(c[b],S-e,v-e,e,!0),v-=e,0===v&&(g--,v=d[g]),S-=e,0===S){b--;const e=Math.max(b,0);S=(0,o.getWrappedLineTrimmedLength)(c,e,this._cols)}}for(let t=0;t<c.length;t++)d[t]<e&&c[t].setCell(d[t],i);let m=f-u;for(;m-- >0;)0===this.ybase?this.y<t-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+r)-t&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+f,this.ybase+t-1)}if(s.length>0){const e=[],t=[];for(let e=0;e<this.lines.length;e++)t.push(this.lines.get(e));const i=this.lines.length;let n=i-1,a=0,o=s[a];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+r);let h=0;for(let c=Math.min(this.lines.maxLength-1,i+r-1);c>=0;c--)if(o&&o.start>n+h){for(let e=o.newLines.length-1;e>=0;e--)this.lines.set(c--,o.newLines[e]);c++,e.push({index:n+1,amount:o.newLines.length}),h+=o.newLines.length,o=s[++a]}else this.lines.set(c,t[n--]);let c=0;for(let t=e.length-1;t>=0;t--)e[t].index+=c,this.lines.onInsertEmitter.fire(e[t]),c+=e[t].amount;const l=Math.max(0,i+r-this.lines.maxLength);l>0&&this.lines.onTrimEmitter.fire(l)}}translateBufferLineToString(e,t,i=0,s){const r=this.lines.get(e);return r?r.translateToString(t,i,s):\"\"}getWrappedRangeForLine(e){let t=e,i=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;i+1<this.lines.length&&this.lines.get(i+1).isWrapped;)i++;return{first:t,last:i}}setupTabStops(e){for(null!=e?this.tabs[e]||(e=this.prevStop(e)):(this.tabs={},e=0);e<this._cols;e+=this._optionsService.rawOptions.tabStopWidth)this.tabs[e]=!0}prevStop(e){for(null==e&&(e=this.x);!this.tabs[--e]&&e>0;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e<this._cols;);return e>=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t<this.markers.length;t++)this.markers[t].line===e&&(this.markers[t].dispose(),this.markers.splice(t--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let e=0;e<this.markers.length;e++)this.markers[e].dispose(),this.markers.splice(e--,1);this._isClearing=!1}addMarker(e){const t=new l.Marker(e);return this.markers.push(t),t.register(this.lines.onTrim((e=>{t.line-=e,t.line<0&&t.dispose()}))),t.register(this.lines.onInsert((e=>{t.line>=e.index&&(t.line+=e.amount)}))),t.register(this.lines.onDelete((e=>{t.line>=e.index&&t.line<e.index+e.amount&&t.dispose(),t.line>e.index&&(t.line-=e.amount)}))),t.register(t.onDispose((()=>this._removeMarker(t)))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}},437:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;const s=i(734),r=i(511),n=i(643),a=i(482);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);let o=0;class h{constructor(e,t,i=!1){this.isWrapped=i,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);const s=t||r.CellData.fromCharData([0,n.NULL_CELL_CHAR,n.NULL_CELL_WIDTH,n.NULL_CELL_CODE]);for(let t=0;t<e;++t)this.setCell(t,s);this.length=e}get(e){const t=this._data[3*e+0],i=2097151&t;return[this._data[3*e+1],2097152&t?this._combined[e]:i?(0,a.stringFromCodePoint)(i):\"\",t>>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]}set(e,t){this._data[3*e+1]=t[n.CHAR_DATA_ATTR_INDEX],t[n.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[n.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[n.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[n.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,a.stringFromCodePoint)(2097151&t):\"\"}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,t){return o=3*e,t.content=this._data[o+0],t.fg=this._data[o+1],t.bg=this._data[o+2],2097152&t.content&&(t.combinedData=this._combined[e]),268435456&t.bg&&(t.extended=this._extendedAttrs[e]),t}setCell(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg}setCellFromCodepoint(e,t,i,s){268435456&s.bg&&(this._extendedAttrs[e]=s.extended),this._data[3*e+0]=t|i<<22,this._data[3*e+1]=s.fg,this._data[3*e+2]=s.bg}addCodepointToCell(e,t,i){let s=this._data[3*e+0];2097152&s?this._combined[e]+=(0,a.stringFromCodePoint)(t):2097151&s?(this._combined[e]=(0,a.stringFromCodePoint)(2097151&s)+(0,a.stringFromCodePoint)(t),s&=-2097152,s|=2097152):s=t|1<<22,i&&(s&=-12582913,s|=i<<22),this._data[3*e+0]=s}insertCells(e,t,i){if((e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t<this.length-e){const s=new r.CellData;for(let i=this.length-e-t-1;i>=0;--i)this.setCell(e+t+i,this.loadCell(e+i,s));for(let s=0;s<t;++s)this.setCell(e+s,i)}else for(let t=e;t<this.length;++t)this.setCell(t,i);2===this.getWidth(this.length-1)&&this.setCellFromCodepoint(this.length-1,0,1,i)}deleteCells(e,t,i){if(e%=this.length,t<this.length-e){const s=new r.CellData;for(let i=0;i<this.length-e-t;++i)this.setCell(e+i,this.loadCell(e+t+i,s));for(let e=this.length-t;e<this.length;++e)this.setCell(e,i)}else for(let t=e;t<this.length;++t)this.setCell(t,i);e&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),0!==this.getWidth(e)||this.hasContent(e)||this.setCellFromCodepoint(e,0,1,i)}replaceCells(e,t,i,s=!1){if(s)for(e&&2===this.getWidth(e-1)&&!this.isProtected(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t<this.length&&2===this.getWidth(t-1)&&!this.isProtected(t)&&this.setCellFromCodepoint(t,0,1,i);e<t&&e<this.length;)this.isProtected(e)||this.setCell(e,i),e++;else for(e&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t<this.length&&2===this.getWidth(t-1)&&this.setCellFromCodepoint(t,0,1,i);e<t&&e<this.length;)this.setCell(e++,i)}resize(e,t){if(e===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;const i=3*e;if(e>this.length){if(this._data.buffer.byteLength>=4*i)this._data=new Uint32Array(this._data.buffer,0,i);else{const e=new Uint32Array(i);e.set(this._data),this._data=e}for(let i=this.length;i<e;++i)this.setCell(i,t)}else{this._data=this._data.subarray(0,i);const t=Object.keys(this._combined);for(let i=0;i<t.length;i++){const s=parseInt(t[i],10);s>=e&&delete this._combined[s]}const s=Object.keys(this._extendedAttrs);for(let t=0;t<s.length;t++){const i=parseInt(s[t],10);i>=e&&delete this._extendedAttrs[i]}}return this.length=e,4*i*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){const e=new Uint32Array(this._data.length);return e.set(this._data),this._data=e,1}return 0}fill(e,t=!1){if(t)for(let t=0;t<this.length;++t)this.isProtected(t)||this.setCell(t,e);else{this._combined={},this._extendedAttrs={};for(let t=0;t<this.length;++t)this.setCell(t,e)}}copyFrom(e){this.length!==e.length?this._data=new Uint32Array(e._data):this._data.set(e._data),this.length=e.length,this._combined={};for(const t in e._combined)this._combined[t]=e._combined[t];this._extendedAttrs={};for(const t in e._extendedAttrs)this._extendedAttrs[t]=e._extendedAttrs[t];this.isWrapped=e.isWrapped}clone(){const e=new h(0);e._data=new Uint32Array(this._data),e.length=this.length;for(const t in this._combined)e._combined[t]=this._combined[t];for(const t in this._extendedAttrs)e._extendedAttrs[t]=this._extendedAttrs[t];return e.isWrapped=this.isWrapped,e}getTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,t,i,s,r){const n=e._data;if(r)for(let r=s-1;r>=0;r--){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=n[3*(t+r)+e];268435456&n[3*(t+r)+2]&&(this._extendedAttrs[i+r]=e._extendedAttrs[t+r])}else for(let r=0;r<s;r++){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=n[3*(t+r)+e];268435456&n[3*(t+r)+2]&&(this._extendedAttrs[i+r]=e._extendedAttrs[t+r])}const a=Object.keys(e._combined);for(let s=0;s<a.length;s++){const r=parseInt(a[s],10);r>=t&&(this._combined[r-t+i]=e._combined[r])}}translateToString(e,t,i,s){t=t??0,i=i??this.length,e&&(i=Math.min(i,this.getTrimmedLength())),s&&(s.length=0);let r=\"\";for(;t<i;){const e=this._data[3*t+0],i=2097151&e,o=2097152&e?this._combined[t]:i?(0,a.stringFromCodePoint)(i):n.WHITESPACE_CELL_CHAR;if(r+=o,s)for(let e=0;e<o.length;++e)s.push(t);t+=e>>22||1}return s&&s.push(t),r}}t.BufferLine=h},634:(e,t)=>{function i(e,t,i){if(t===e.length-1)return e[t].getTrimmedLength();const s=!e[t].hasContent(i-1)&&1===e[t].getWidth(i-1),r=2===e[t+1].getWidth(0);return s&&r?i-1:i}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getWrappedLineTrimmedLength=t.reflowSmallerGetNewLineLengths=t.reflowLargerApplyNewLayout=t.reflowLargerCreateNewLayout=t.reflowLargerGetLinesToRemove=void 0,t.reflowLargerGetLinesToRemove=function(e,t,s,r,n){const a=[];for(let o=0;o<e.length-1;o++){let h=o,c=e.get(++h);if(!c.isWrapped)continue;const l=[e.get(o)];for(;h<e.length&&c.isWrapped;)l.push(c),c=e.get(++h);if(r>=o&&r<h){o+=l.length-1;continue}let _=0,d=i(l,_,t),f=1,u=0;for(;f<l.length;){const e=i(l,f,t),r=e-u,a=s-d,o=Math.min(r,a);l[_].copyCellsFrom(l[f],u,d,o,!1),d+=o,d===s&&(_++,d=0),u+=o,u===e&&(f++,u=0),0===d&&0!==_&&2===l[_-1].getWidth(s-1)&&(l[_].copyCellsFrom(l[_-1],s-1,d++,1,!1),l[_-1].setCell(s-1,n))}l[_].replaceCells(d,s,n);let p=0;for(let e=l.length-1;e>0&&(e>_||0===l[e].getTrimmedLength());e--)p++;p>0&&(a.push(o+l.length-p),a.push(p)),o+=l.length-1}return a},t.reflowLargerCreateNewLayout=function(e,t){const i=[];let s=0,r=t[s],n=0;for(let a=0;a<e.length;a++)if(r===a){const i=t[++s];e.onDeleteEmitter.fire({index:a-n,amount:i}),a+=i-1,n+=i,r=t[++s]}else i.push(a);return{layout:i,countRemoved:n}},t.reflowLargerApplyNewLayout=function(e,t){const i=[];for(let s=0;s<t.length;s++)i.push(e.get(t[s]));for(let t=0;t<i.length;t++)e.set(t,i[t]);e.length=t.length},t.reflowSmallerGetNewLineLengths=function(e,t,s){const r=[],n=e.map(((s,r)=>i(e,r,t))).reduce(((e,t)=>e+t));let a=0,o=0,h=0;for(;h<n;){if(n-h<s){r.push(n-h);break}a+=s;const c=i(e,o,t);a>c&&(a-=c,o++);const l=2===e[o].getWidth(a-1);l&&a--;const _=l?s-1:s;r.push(_),h+=_}return r},t.getWrappedLineTrimmedLength=i},295:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferSet=void 0;const s=i(460),r=i(844),n=i(92);class a extends r.Disposable{constructor(e,t){super(),this._optionsService=e,this._bufferService=t,this._onBufferActivate=this.register(new s.EventEmitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this.register(this._optionsService.onSpecificOptionChange(\"scrollback\",(()=>this.resize(this._bufferService.cols,this._bufferService.rows)))),this.register(this._optionsService.onSpecificOptionChange(\"tabStopWidth\",(()=>this.setupTabStops())))}reset(){this._normal=new n.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new n.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}}t.BufferSet=a},511:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CellData=void 0;const s=i(482),r=i(643),n=i(734);class a extends n.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new n.ExtendedAttrs,this.combinedData=\"\"}static fromCharData(e){const t=new a;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):\"\"}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[r.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[r.CHAR_DATA_CHAR_INDEX].length){const i=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|e[r.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[r.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.CellData=a},643:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=256|t.DEFAULT_COLOR<<9,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR=\"\",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=\" \",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},863:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Marker=void 0;const s=i(460),r=i(844);class n{get id(){return this._id}constructor(e){this.line=e,this.isDisposed=!1,this._disposables=[],this._id=n._nextId++,this._onDispose=this.register(new s.EventEmitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,r.disposeArray)(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}}t.Marker=n,n._nextId=1},116:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={\"`\":\"◆\",a:\"▒\",b:\"␉\",c:\"␌\",d:\"␍\",e:\"␊\",f:\"°\",g:\"±\",h:\"\",i:\"␋\",j:\"┘\",k:\"┐\",l:\"┌\",m:\"└\",n:\"┼\",o:\"⎺\",p:\"⎻\",q:\"─\",r:\"⎼\",s:\"⎽\",t:\"├\",u:\"┤\",v:\"┴\",w:\"┬\",x:\"│\",y:\"≤\",z:\"≥\",\"{\":\"π\",\"|\":\"≠\",\"}\":\"£\",\"~\":\"·\"},t.CHARSETS.A={\"#\":\"£\"},t.CHARSETS.B=void 0,t.CHARSETS[4]={\"#\":\"£\",\"@\":\"¾\",\"[\":\"ij\",\"\\\\\":\"½\",\"]\":\"|\",\"{\":\"¨\",\"|\":\"f\",\"}\":\"¼\",\"~\":\"´\"},t.CHARSETS.C=t.CHARSETS[5]={\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.R={\"#\":\"£\",\"@\":\"à\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"§\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"¨\"},t.CHARSETS.Q={\"@\":\"à\",\"[\":\"â\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",\"`\":\"ô\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"û\"},t.CHARSETS.K={\"@\":\"§\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Ü\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"ß\"},t.CHARSETS.Y={\"#\":\"£\",\"@\":\"§\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"é\",\"`\":\"ù\",\"{\":\"à\",\"|\":\"ò\",\"}\":\"è\",\"~\":\"ì\"},t.CHARSETS.E=t.CHARSETS[6]={\"@\":\"Ä\",\"[\":\"Æ\",\"\\\\\":\"Ø\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"ä\",\"{\":\"æ\",\"|\":\"ø\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.Z={\"#\":\"£\",\"@\":\"§\",\"[\":\"¡\",\"\\\\\":\"Ñ\",\"]\":\"¿\",\"{\":\"°\",\"|\":\"ñ\",\"}\":\"ç\"},t.CHARSETS.H=t.CHARSETS[7]={\"@\":\"É\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS[\"=\"]={\"#\":\"ù\",\"@\":\"à\",\"[\":\"é\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",_:\"è\",\"`\":\"ô\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"û\"}},584:(e,t)=>{var i,s,r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.C1_ESCAPED=t.C1=t.C0=void 0,function(e){e.NUL=\"\\0\",e.SOH=\"\u0001\",e.STX=\"\u0002\",e.ETX=\"\u0003\",e.EOT=\"\u0004\",e.ENQ=\"\u0005\",e.ACK=\"\u0006\",e.BEL=\"\u0007\",e.BS=\"\\b\",e.HT=\"\\t\",e.LF=\"\\n\",e.VT=\"\\v\",e.FF=\"\\f\",e.CR=\"\\r\",e.SO=\"\u000e\",e.SI=\"\u000f\",e.DLE=\"\u0010\",e.DC1=\"\u0011\",e.DC2=\"\u0012\",e.DC3=\"\u0013\",e.DC4=\"\u0014\",e.NAK=\"\u0015\",e.SYN=\"\u0016\",e.ETB=\"\u0017\",e.CAN=\"\u0018\",e.EM=\"\u0019\",e.SUB=\"\u001a\",e.ESC=\"\u001b\",e.FS=\"\u001c\",e.GS=\"\u001d\",e.RS=\"\u001e\",e.US=\"\u001f\",e.SP=\" \",e.DEL=\"\"}(i||(t.C0=i={})),function(e){e.PAD=\"\",e.HOP=\"\",e.BPH=\"\",e.NBH=\"\",e.IND=\"\",e.NEL=\"
\",e.SSA=\"\",e.ESA=\"\",e.HTS=\"\",e.HTJ=\"\",e.VTS=\"\",e.PLD=\"\",e.PLU=\"\",e.RI=\"\",e.SS2=\"\",e.SS3=\"\",e.DCS=\"\",e.PU1=\"\",e.PU2=\"\",e.STS=\"\",e.CCH=\"\",e.MW=\"\",e.SPA=\"\",e.EPA=\"\",e.SOS=\"\",e.SGCI=\"\",e.SCI=\"\",e.CSI=\"\",e.ST=\"\",e.OSC=\"\",e.PM=\"\",e.APC=\"\"}(s||(t.C1=s={})),function(e){e.ST=`${i.ESC}\\\\`}(r||(t.C1_ESCAPED=r={}))},482:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=t.utf32ToString=t.stringFromCodePoint=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let s=\"\";for(let r=t;r<i;++r){let t=e[r];t>65535?(t-=65536,s+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):s+=String.fromCharCode(t)}return s},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=e.charCodeAt(r++);56320<=i&&i<=57343?t[s++]=1024*(this._interim-55296)+i-56320+65536:(t[s++]=this._interim,t[s++]=i),this._interim=0}for(let n=r;n<i;++n){const r=e.charCodeAt(n);if(55296<=r&&r<=56319){if(++n>=i)return this._interim=r,s;const a=e.charCodeAt(n);56320<=a&&a<=57343?t[s++]=1024*(r-55296)+a-56320+65536:(t[s++]=r,t[s++]=a)}else 65279!==r&&(t[s++]=r)}return s}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let s,r,n,a,o=0,h=0,c=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let n,a=0;for(;(n=63&this.interim[++a])&&a<4;)r<<=6,r|=n;const h=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,l=h-a;for(;c<l;){if(c>=i)return 0;if(n=e[c++],128!=(192&n)){c--,s=!0;break}this.interim[a++]=n,r<<=6,r|=63&n}s||(2===h?r<128?c--:t[o++]=r:3===h?r<2048||r>=55296&&r<=57343||65279===r||(t[o++]=r):r<65536||r>1114111||(t[o++]=r)),this.interim.fill(0)}const l=i-4;let _=c;for(;_<i;){for(;!(!(_<l)||128&(s=e[_])||128&(r=e[_+1])||128&(n=e[_+2])||128&(a=e[_+3]));)t[o++]=s,t[o++]=r,t[o++]=n,t[o++]=a,_+=4;if(s=e[_++],s<128)t[o++]=s;else if(192==(224&s)){if(_>=i)return this.interim[0]=s,o;if(r=e[_++],128!=(192&r)){_--;continue}if(h=(31&s)<<6|63&r,h<128){_--;continue}t[o++]=h}else if(224==(240&s)){if(_>=i)return this.interim[0]=s,o;if(r=e[_++],128!=(192&r)){_--;continue}if(_>=i)return this.interim[0]=s,this.interim[1]=r,o;if(n=e[_++],128!=(192&n)){_--;continue}if(h=(15&s)<<12|(63&r)<<6|63&n,h<2048||h>=55296&&h<=57343||65279===h)continue;t[o++]=h}else if(240==(248&s)){if(_>=i)return this.interim[0]=s,o;if(r=e[_++],128!=(192&r)){_--;continue}if(_>=i)return this.interim[0]=s,this.interim[1]=r,o;if(n=e[_++],128!=(192&n)){_--;continue}if(_>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=n,o;if(a=e[_++],128!=(192&a)){_--;continue}if(h=(7&s)<<18|(63&r)<<12|(63&n)<<6|63&a,h<65536||h>1114111)continue;t[o++]=h}}return o}}},225:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeV6=void 0;const s=i(480),r=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],n=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let a;t.UnicodeV6=class{constructor(){if(this.version=\"6\",!a){a=new Uint8Array(65536),a.fill(1),a[0]=0,a.fill(0,1,32),a.fill(0,127,160),a.fill(2,4352,4448),a[9001]=2,a[9002]=2,a.fill(2,11904,42192),a[12351]=1,a.fill(2,44032,55204),a.fill(2,63744,64256),a.fill(2,65040,65050),a.fill(2,65072,65136),a.fill(2,65280,65377),a.fill(2,65504,65511);for(let e=0;e<r.length;++e)a.fill(0,r[e][0],r[e][1]+1)}}wcwidth(e){return e<32?0:e<127?1:e<65536?a[e]:function(e,t){let i,s=0,r=t.length-1;if(e<t[0][0]||e>t[r][1])return!1;for(;r>=s;)if(i=s+r>>1,e>t[i][1])s=i+1;else{if(!(e<t[i][0]))return!0;r=i-1}return!1}(e,n)?0:e>=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let i=this.wcwidth(e),r=0===i&&0!==t;if(r){const e=s.UnicodeService.extractWidth(t);0===e?r=!1:e>i&&(i=e)}return s.UnicodeService.createPropertyValue(0,i,r)}}},981:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WriteBuffer=void 0;const s=i(460),r=i(844);class n extends r.Disposable{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this.register(new s.EventEmitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(e,t){if(void 0!==t&&this._syncCalls>t)return void(this._syncCalls=0);if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let i;for(this._isSyncWriting=!0;i=this._writeBuffer.shift();){this._action(i);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(this._pendingData>5e7)throw new Error(\"write data discarded, use flow control to avoid losing data\");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),void this._innerWrite();setTimeout((()=>this._innerWrite()))}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}_innerWrite(e=0,t=!0){const i=e||Date.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,t);if(s){const e=e=>Date.now()-i>=12?setTimeout((()=>this._innerWrite(0,e))):this._innerWrite(i,e);return void s.catch((e=>(queueMicrotask((()=>{throw e})),Promise.resolve(!1)))).then(e)}const r=this._callbacks[this._bufferOffset];if(r&&r(),this._bufferOffset++,this._pendingData-=e.length,Date.now()-i>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((()=>this._innerWrite()))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}t.WriteBuffer=n},941:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.toRgbString=t.parseColor=void 0;const i=/^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/,s=/^[\\da-f]+$/;function r(e,t){const i=e.toString(16),s=i.length<2?\"0\"+i:i;switch(t){case 4:return i[0];case 8:return s;case 12:return(s+s).slice(0,3);default:return s+s}}t.parseColor=function(e){if(!e)return;let t=e.toLowerCase();if(0===t.indexOf(\"rgb:\")){t=t.slice(4);const e=i.exec(t);if(e){const t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(0===t.indexOf(\"#\")&&(t=t.slice(1),s.exec(t)&&[3,6,9,12].includes(t.length))){const e=t.length/3,i=[0,0,0];for(let s=0;s<3;++s){const r=parseInt(t.slice(e*s,e*s+e),16);i[s]=1===e?r<<4:2===e?r:3===e?r>>4:r>>8}return i}},t.toRgbString=function(e,t=16){const[i,s,n]=e;return`rgb:${r(i,t)}/${r(s,t)}/${r(n,t)}`}},770:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.PAYLOAD_LIMIT=void 0,t.PAYLOAD_LIMIT=1e7},351:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DcsHandler=t.DcsParser=void 0;const s=i(482),r=i(742),n=i(770),a=[];t.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=a,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=a}registerHandler(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=a,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||a,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t);else this._handlerFb(this._ident,\"HOOK\",t)}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,\"PUT\",(0,s.utf32ToString)(e,t,i))}unhook(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].unhook(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,\"UNHOOK\",e);this._active=a,this._ident=0}};const o=new r.Params;o.addParam(0),t.DcsHandler=class{constructor(e){this._handler=e,this._data=\"\",this._params=o,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():o,this._data=\"\",this._hitLimit=!1}put(e,t,i){this._hitLimit||(this._data+=(0,s.utf32ToString)(e,t,i),this._data.length>n.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data,this._params),t instanceof Promise))return t.then((e=>(this._params=o,this._data=\"\",this._hitLimit=!1,e)));return this._params=o,this._data=\"\",this._hitLimit=!1,t}}},15:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;const s=i(844),r=i(742),n=i(242),a=i(351);class o{constructor(e){this.table=new Uint8Array(e)}setDefault(e,t){this.table.fill(e<<4|t)}add(e,t,i,s){this.table[t<<8|e]=i<<4|s}addMany(e,t,i,s){for(let r=0;r<e.length;r++)this.table[t<<8|e[r]]=i<<4|s}}t.TransitionTable=o;const h=160;t.VT500_TRANSITION_TABLE=function(){const e=new o(4095),t=Array.apply(null,Array(256)).map(((e,t)=>t)),i=(e,i)=>t.slice(e,i),s=i(32,127),r=i(0,24);r.push(25),r.push.apply(r,i(28,32));const n=i(0,14);let a;for(a in e.setDefault(1,0),e.addMany(s,0,2,0),n)e.addMany([24,26,153,154],a,3,0),e.addMany(i(128,144),a,3,0),e.addMany(i(144,152),a,3,0),e.add(156,a,0,0),e.add(27,a,11,1),e.add(157,a,4,8),e.addMany([152,158,159],a,0,7),e.add(155,a,11,3),e.add(144,a,11,9);return e.addMany(r,0,3,0),e.addMany(r,1,3,1),e.add(127,1,0,1),e.addMany(r,8,0,8),e.addMany(r,3,3,3),e.add(127,3,0,3),e.addMany(r,4,3,4),e.add(127,4,0,4),e.addMany(r,6,3,6),e.addMany(r,5,3,5),e.add(127,5,0,5),e.addMany(r,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(s,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(i(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(s,7,0,7),e.addMany(r,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(i(64,127),3,7,0),e.addMany(i(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(i(48,60),4,8,4),e.addMany(i(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(i(32,64),6,0,6),e.add(127,6,0,6),e.addMany(i(64,127),6,0,0),e.addMany(i(32,48),3,9,5),e.addMany(i(32,48),5,9,5),e.addMany(i(48,64),5,0,6),e.addMany(i(64,127),5,7,0),e.addMany(i(32,48),4,9,5),e.addMany(i(32,48),1,9,2),e.addMany(i(32,48),2,9,2),e.addMany(i(48,127),2,10,0),e.addMany(i(48,80),1,10,0),e.addMany(i(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(i(96,127),1,10,0),e.add(80,1,11,9),e.addMany(r,9,0,9),e.add(127,9,0,9),e.addMany(i(28,32),9,0,9),e.addMany(i(32,48),9,9,12),e.addMany(i(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(r,11,0,11),e.addMany(i(32,128),11,0,11),e.addMany(i(28,32),11,0,11),e.addMany(r,10,0,10),e.add(127,10,0,10),e.addMany(i(28,32),10,0,10),e.addMany(i(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(i(32,48),10,9,12),e.addMany(r,12,0,12),e.add(127,12,0,12),e.addMany(i(28,32),12,0,12),e.addMany(i(32,48),12,9,12),e.addMany(i(48,64),12,0,11),e.addMany(i(64,127),12,12,13),e.addMany(i(64,127),10,12,13),e.addMany(i(64,127),9,12,13),e.addMany(r,13,13,13),e.addMany(s,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(h,0,2,0),e.add(h,8,5,8),e.add(h,6,0,6),e.add(h,11,0,11),e.add(h,13,13,13),e}();class c extends s.Disposable{constructor(e=t.VT500_TRANSITION_TABLE){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new r.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,i)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this.register((0,s.toDisposable)((()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)}))),this._oscParser=this.register(new n.OscParser),this._dcsParser=this.register(new a.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:\"\\\\\"},(()=>!0))}_identifier(e,t=[64,126]){let i=0;if(e.prefix){if(e.prefix.length>1)throw new Error(\"only one byte as prefix supported\");if(i=e.prefix.charCodeAt(0),i&&60>i||i>63)throw new Error(\"prefix must be in range 0x3c .. 0x3f\")}if(e.intermediates){if(e.intermediates.length>2)throw new Error(\"only two bytes as intermediates are supported\");for(let t=0;t<e.intermediates.length;++t){const s=e.intermediates.charCodeAt(t);if(32>s||s>47)throw new Error(\"intermediate must be in range 0x20 .. 0x2f\");i<<=8,i|=s}}if(1!==e.final.length)throw new Error(\"final must be a single byte\");const s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=s,i}identToString(e){const t=[];for(;e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join(\"\")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){const i=this._identifier(e,[48,126]);void 0===this._escHandlers[i]&&(this._escHandlers[i]=[]);const s=this._escHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){this._executeHandlers[e.charCodeAt(0)]=t}clearExecuteHandler(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){const i=this._identifier(e);void 0===this._csiHandlers[i]&&(this._csiHandlers[i]=[]);const s=this._csiHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,i,s,r){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=s,this._parseStack.chunkPos=r}parse(e,t,i){let s,r=0,n=0,a=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,a=this._parseStack.chunkPos+1;else{if(void 0===i||1===this._parseStack.state)throw this._parseStack.state=1,new Error(\"improper continuation due to previous async handler, giving up parsing\");const t=this._parseStack.handlers;let n=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===i&&n>-1)for(;n>=0&&(s=t[n](this._params),!0!==s);n--)if(s instanceof Promise)return this._parseStack.handlerPos=n,s;this._parseStack.handlers=[];break;case 4:if(!1===i&&n>-1)for(;n>=0&&(s=t[n](),!0!==s);n--)if(s instanceof Promise)return this._parseStack.handlerPos=n,s;this._parseStack.handlers=[];break;case 6:if(r=e[this._parseStack.chunkPos],s=this._dcsParser.unhook(24!==r&&26!==r,i),s)return s;27===r&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(r=e[this._parseStack.chunkPos],s=this._oscParser.end(24!==r&&26!==r,i),s)return s;27===r&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,a=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let i=a;i<t;++i){switch(r=e[i],n=this._transitions.table[this.currentState<<8|(r<160?r:h)],n>>4){case 2:for(let s=i+1;;++s){if(s>=t||(r=e[s])<32||r>126&&r<h){this._printHandler(e,i,s),i=s-1;break}if(++s>=t||(r=e[s])<32||r>126&&r<h){this._printHandler(e,i,s),i=s-1;break}if(++s>=t||(r=e[s])<32||r>126&&r<h){this._printHandler(e,i,s),i=s-1;break}if(++s>=t||(r=e[s])<32||r>126&&r<h){this._printHandler(e,i,s),i=s-1;break}}break;case 3:this._executeHandlers[r]?this._executeHandlers[r]():this._executeHandlerFb(r),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:i,code:r,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:const a=this._csiHandlers[this._collect<<8|r];let o=a?a.length-1:-1;for(;o>=0&&(s=a[o](this._params),!0!==s);o--)if(s instanceof Promise)return this._preserveStack(3,a,o,n,i),s;o<0&&this._csiHandlerFb(this._collect<<8|r,this._params),this.precedingJoinState=0;break;case 8:do{switch(r){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(r-48)}}while(++i<t&&(r=e[i])>47&&r<60);i--;break;case 9:this._collect<<=8,this._collect|=r;break;case 10:const c=this._escHandlers[this._collect<<8|r];let l=c?c.length-1:-1;for(;l>=0&&(s=c[l](),!0!==s);l--)if(s instanceof Promise)return this._preserveStack(4,c,l,n,i),s;l<0&&this._escHandlerFb(this._collect<<8|r),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|r,this._params);break;case 13:for(let s=i+1;;++s)if(s>=t||24===(r=e[s])||26===r||27===r||r>127&&r<h){this._dcsParser.put(e,i,s),i=s-1;break}break;case 14:if(s=this._dcsParser.unhook(24!==r&&26!==r),s)return this._preserveStack(6,[],0,n,i),s;27===r&&(n|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0;break;case 4:this._oscParser.start();break;case 5:for(let s=i+1;;s++)if(s>=t||(r=e[s])<32||r>127&&r<h){this._oscParser.put(e,i,s),i=s-1;break}break;case 6:if(s=this._oscParser.end(24!==r&&26!==r),s)return this._preserveStack(5,[],0,n,i),s;27===r&&(n|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0}this.currentState=15&n}}}t.EscapeSequenceParser=c},242:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscHandler=t.OscParser=void 0;const s=i(770),r=i(482),n=[];t.OscParser=class{constructor(){this._state=0,this._active=n,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=n}reset(){if(2===this._state)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=n,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||n,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,\"START\")}_put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._id,\"PUT\",(0,r.utf32ToString)(e,t,i))}start(){this.reset(),this._state=1}put(e,t,i){if(3!==this._state){if(1===this._state)for(;t<i;){const i=e[t++];if(59===i){this._state=2,this._start();break}if(i<48||57<i)return void(this._state=3);-1===this._id&&(this._id=0),this._id=10*this._id+i-48}2===this._state&&i-t>0&&this._put(e,t,i)}}end(e,t=!0){if(0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._id,\"END\",e);this._active=n,this._id=-1,this._state=0}}},t.OscHandler=class{constructor(e){this._handler=e,this._data=\"\",this._hitLimit=!1}start(){this._data=\"\",this._hitLimit=!1}put(e,t,i){this._hitLimit||(this._data+=(0,r.utf32ToString)(e,t,i),this._data.length>s.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data),t instanceof Promise))return t.then((e=>(this._data=\"\",this._hitLimit=!1,e)));return this._data=\"\",this._hitLimit=!1,t}}},742:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Params=void 0;const i=2147483647;class s{static fromArray(e){const t=new s;if(!e.length)return t;for(let i=Array.isArray(e[0])?1:0;i<e.length;++i){const s=e[i];if(Array.isArray(s))for(let e=0;e<s.length;++e)t.addSubParam(s[e]);else t.addParam(s)}return t}constructor(e=32,t=32){if(this.maxLength=e,this.maxSubParamsLength=t,t>256)throw new Error(\"maxSubParamsLength must not be greater than 256\");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const e=new s(this.maxLength,this.maxSubParamsLength);return e.params.set(this.params),e.length=this.length,e._subParams.set(this._subParams),e._subParamsLength=this._subParamsLength,e._subParamsIdx.set(this._subParamsIdx),e._rejectDigits=this._rejectDigits,e._rejectSubDigits=this._rejectSubDigits,e._digitIsSub=this._digitIsSub,e}toArray(){const e=[];for(let t=0;t<this.length;++t){e.push(this.params[t]);const i=this._subParamsIdx[t]>>8,s=255&this._subParamsIdx[t];s-i>0&&e.push(Array.prototype.slice.call(this._subParams,i,s))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>i?i:e}}addSubParam(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParams[this._subParamsLength++]=e>i?i:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0}getSubParams(e){const t=this._subParamsIdx[e]>>8,i=255&this._subParamsIdx[e];return i-t>0?this._subParams.subarray(t,i):null}getSubParamsAll(){const e={};for(let t=0;t<this.length;++t){const i=this._subParamsIdx[t]>>8,s=255&this._subParamsIdx[t];s-i>0&&(e[t]=this._subParams.slice(i,s))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const s=this._digitIsSub?this._subParams:this.params,r=s[t-1];s[t-1]=~r?Math.min(10*r+e,i):e}}t.Params=s},741:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.AddonManager=void 0,t.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){const i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=()=>this._wrappedAddonDispose(i),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let i=0;i<this._addons.length;i++)if(this._addons[i]===e){t=i;break}if(-1===t)throw new Error(\"Could not dispose an addon that has not been loaded\");e.isDisposed=!0,e.dispose.apply(e.instance),this._addons.splice(t,1)}}},771:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferApiView=void 0;const s=i(785),r=i(511);t.BufferApiView=class{constructor(e,t){this._buffer=e,this.type=t}init(e){return this._buffer=e,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(e){const t=this._buffer.lines.get(e);if(t)return new s.BufferLineApiView(t)}getNullCell(){return new r.CellData}}},785:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferLineApiView=void 0;const s=i(511);t.BufferLineApiView=class{constructor(e){this._line=e}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new s.CellData)}translateToString(e,t,i){return this._line.translateToString(e,t,i)}}},285:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferNamespaceApi=void 0;const s=i(771),r=i(460),n=i(844);class a extends n.Disposable{constructor(e){super(),this._core=e,this._onBufferChange=this.register(new r.EventEmitter),this.onBufferChange=this._onBufferChange.event,this._normal=new s.BufferApiView(this._core.buffers.normal,\"normal\"),this._alternate=new s.BufferApiView(this._core.buffers.alt,\"alternate\"),this._core.buffers.onBufferActivate((()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error(\"Active buffer is neither normal nor alternate\")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}t.BufferNamespaceApi=a},975:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ParserApi=void 0,t.ParserApi=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,(e=>t(e.toArray())))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,((e,i)=>t(e,i.toArray())))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}}},90:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeApi=void 0,t.UnicodeApi=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}}},744:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferService=t.MINIMUM_ROWS=t.MINIMUM_COLS=void 0;const n=i(460),a=i(844),o=i(295),h=i(585);t.MINIMUM_COLS=2,t.MINIMUM_ROWS=1;let c=t.BufferService=class extends a.Disposable{get buffer(){return this.buffers.active}constructor(e){super(),this.isUserScrolling=!1,this._onResize=this.register(new n.EventEmitter),this.onResize=this._onResize.event,this._onScroll=this.register(new n.EventEmitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,t.MINIMUM_COLS),this.rows=Math.max(e.rawOptions.rows||0,t.MINIMUM_ROWS),this.buffers=this.register(new o.BufferSet(e,this))}resize(e,t){this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){const i=this.buffer;let s;s=this._cachedBlankLine,s&&s.length===this.cols&&s.getFg(0)===e.fg&&s.getBg(0)===e.bg||(s=i.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;const r=i.ybase+i.scrollTop,n=i.ybase+i.scrollBottom;if(0===i.scrollTop){const e=i.lines.isFull;n===i.lines.length-1?e?i.lines.recycle().copyFrom(s):i.lines.push(s.clone()):i.lines.splice(n+1,0,s.clone()),e?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{const e=n-r+1;i.lines.shiftElements(r+1,e-1,-1),i.lines.set(n,s.clone())}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)}scrollLines(e,t,i){const s=this.buffer;if(e<0){if(0===s.ydisp)return;this.isUserScrolling=!0}else e+s.ydisp>=s.ybase&&(this.isUserScrolling=!1);const r=s.ydisp;s.ydisp=Math.max(Math.min(s.ydisp+e,s.ybase),0),r!==s.ydisp&&(t||this._onScroll.fire(s.ydisp))}};t.BufferService=c=s([r(0,h.IOptionsService)],c)},994:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharsetService=void 0,t.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}}},753:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreMouseService=void 0;const n=i(585),a=i(460),o=i(844),h={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:e=>4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>32!==e.action},DRAG:{events:23,restrict:e=>32!==e.action||3!==e.button},ANY:{events:31,restrict:e=>!0}};function c(e,t){let i=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(i|=64,i|=e.action):(i|=3&e.button,4&e.button&&(i|=64),8&e.button&&(i|=128),32===e.action?i|=32:0!==e.action||t||(i|=3)),i}const l=String.fromCharCode,_={DEFAULT:e=>{const t=[c(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?\"\":`\u001b[M${l(t[0])}${l(t[1])}${l(t[2])}`},SGR:e=>{const t=0===e.action&&4!==e.button?\"m\":\"M\";return`\u001b[<${c(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{const t=0===e.action&&4!==e.button?\"m\":\"M\";return`\u001b[<${c(e,!0)};${e.x};${e.y}${t}`}};let d=t.CoreMouseService=class extends o.Disposable{constructor(e,t){super(),this._bufferService=e,this._coreService=t,this._protocols={},this._encodings={},this._activeProtocol=\"\",this._activeEncoding=\"\",this._lastEvent=null,this._onProtocolChange=this.register(new a.EventEmitter),this.onProtocolChange=this._onProtocolChange.event;for(const e of Object.keys(h))this.addProtocol(e,h[e]);for(const e of Object.keys(_))this.addEncoding(e,_[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return 0!==this._protocols[this._activeProtocol].events}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol \"${e}\"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding \"${e}\"`);this._activeEncoding=e}reset(){this.activeProtocol=\"NONE\",this.activeEncoding=\"DEFAULT\",this._lastEvent=null}triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._equalEvents(this._lastEvent,e,\"SGR_PIXELS\"===this._activeEncoding))return!1;if(!this._protocols[this._activeProtocol].restrict(e))return!1;const t=this._encodings[this._activeEncoding](e);return t&&(\"DEFAULT\"===this._activeEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}explainEvents(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}}_equalEvents(e,t,i){if(i){if(e.x!==t.x)return!1;if(e.y!==t.y)return!1}else{if(e.col!==t.col)return!1;if(e.row!==t.row)return!1}return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};t.CoreMouseService=d=s([r(0,n.IBufferService),r(1,n.ICoreService)],d)},83:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreService=void 0;const n=i(439),a=i(460),o=i(844),h=i(585),c=Object.freeze({insertMode:!1}),l=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0});let _=t.CoreService=class extends o.Disposable{constructor(e,t,i){super(),this._bufferService=e,this._logService=t,this._optionsService=i,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this.register(new a.EventEmitter),this.onData=this._onData.event,this._onUserInput=this.register(new a.EventEmitter),this.onUserInput=this._onUserInput.event,this._onBinary=this.register(new a.EventEmitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this.register(new a.EventEmitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,n.clone)(c),this.decPrivateModes=(0,n.clone)(l)}reset(){this.modes=(0,n.clone)(c),this.decPrivateModes=(0,n.clone)(l)}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const i=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&i.ybase!==i.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data \"${e}\"`,(()=>e.split(\"\").map((e=>e.charCodeAt(0))))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary \"${e}\"`,(()=>e.split(\"\").map((e=>e.charCodeAt(0))))),this._onBinary.fire(e))}};t.CoreService=_=s([r(0,h.IBufferService),r(1,h.ILogService),r(2,h.IOptionsService)],_)},348:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;const s=i(585),r=i(343);class n{constructor(...e){this._entries=new Map;for(const[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}forEach(e){for(const[t,i]of this._entries.entries())e(t,i)}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}t.ServiceCollection=n,t.InstantiationService=class{constructor(){this._services=new n,this._services.set(s.IInstantiationService,this)}setService(e,t){this._services.set(e,t)}getService(e){return this._services.get(e)}createInstance(e,...t){const i=(0,r.getServiceDependencies)(e).sort(((e,t)=>e.index-t.index)),s=[];for(const t of i){const i=this._services.get(t.id);if(!i)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id}.`);s.push(i)}const n=i.length>0?i[0].index:t.length;if(t.length!==n)throw new Error(`[createInstance] First service dependency of ${e.name} at position ${n+1} conflicts with ${t.length} static arguments`);return new e(...[...t,...s])}}},866:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.traceCall=t.setTraceLogger=t.LogService=void 0;const n=i(844),a=i(585),o={trace:a.LogLevelEnum.TRACE,debug:a.LogLevelEnum.DEBUG,info:a.LogLevelEnum.INFO,warn:a.LogLevelEnum.WARN,error:a.LogLevelEnum.ERROR,off:a.LogLevelEnum.OFF};let h,c=t.LogService=class extends n.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=a.LogLevelEnum.OFF,this._updateLogLevel(),this.register(this._optionsService.onSpecificOptionChange(\"logLevel\",(()=>this._updateLogLevel()))),h=this}_updateLogLevel(){this._logLevel=o[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;t<e.length;t++)\"function\"==typeof e[t]&&(e[t]=e[t]())}_log(e,t,i){this._evalLazyOptionalParams(i),e.call(console,(this._optionsService.options.logger?\"\":\"xterm.js: \")+t,...i)}trace(e,...t){this._logLevel<=a.LogLevelEnum.TRACE&&this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger)??console.log,e,t)}debug(e,...t){this._logLevel<=a.LogLevelEnum.DEBUG&&this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger)??console.log,e,t)}info(e,...t){this._logLevel<=a.LogLevelEnum.INFO&&this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger)??console.info,e,t)}warn(e,...t){this._logLevel<=a.LogLevelEnum.WARN&&this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger)??console.warn,e,t)}error(e,...t){this._logLevel<=a.LogLevelEnum.ERROR&&this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger)??console.error,e,t)}};t.LogService=c=s([r(0,a.IOptionsService)],c),t.setTraceLogger=function(e){h=e},t.traceCall=function(e,t,i){if(\"function\"!=typeof i.value)throw new Error(\"not supported\");const s=i.value;i.value=function(...e){if(h.logLevel!==a.LogLevelEnum.TRACE)return s.apply(this,e);h.trace(`GlyphRenderer#${s.name}(${e.map((e=>JSON.stringify(e))).join(\", \")})`);const t=s.apply(this,e);return h.trace(`GlyphRenderer#${s.name} return`,t),t}}},302:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=void 0;const s=i(460),r=i(844),n=i(114);t.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:\"block\",cursorWidth:1,cursorInactiveStyle:\"outline\",customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:\"alt\",fastScrollSensitivity:5,fontFamily:\"courier-new, courier, monospace\",fontSize:15,fontWeight:\"normal\",fontWeightBold:\"bold\",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:\"info\",logger:null,scrollback:1e3,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},rescaleOverlappingGlyphs:!1,rightClickSelectsWord:n.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:\" ()[]{}',\\\"`\",altClickMovesCursor:!0,convertEol:!1,termName:\"xterm\",cancelEvents:!1,overviewRulerWidth:0};const a=[\"normal\",\"bold\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"];class o extends r.Disposable{constructor(e){super(),this._onOptionChange=this.register(new s.EventEmitter),this.onOptionChange=this._onOptionChange.event;const i={...t.DEFAULT_OPTIONS};for(const t in e)if(t in i)try{const s=e[t];i[t]=this._sanitizeAndValidateOption(t,s)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this.register((0,r.toDisposable)((()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null})))}onSpecificOptionChange(e,t){return this.onOptionChange((i=>{i===e&&t(this.rawOptions[e])}))}onMultipleOptionChange(e,t){return this.onOptionChange((i=>{-1!==e.indexOf(i)&&t()}))}_setupOptions(){const e=e=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key \"${e}\"`);return this.rawOptions[e]},i=(e,i)=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key \"${e}\"`);i=this._sanitizeAndValidateOption(e,i),this.rawOptions[e]!==i&&(this.rawOptions[e]=i,this._onOptionChange.fire(e))};for(const t in this.rawOptions){const s={get:e.bind(this,t),set:i.bind(this,t)};Object.defineProperty(this.options,t,s)}}_sanitizeAndValidateOption(e,i){switch(e){case\"cursorStyle\":if(i||(i=t.DEFAULT_OPTIONS[e]),!function(e){return\"block\"===e||\"underline\"===e||\"bar\"===e}(i))throw new Error(`\"${i}\" is not a valid value for ${e}`);break;case\"wordSeparator\":i||(i=t.DEFAULT_OPTIONS[e]);break;case\"fontWeight\":case\"fontWeightBold\":if(\"number\"==typeof i&&1<=i&&i<=1e3)break;i=a.includes(i)?i:t.DEFAULT_OPTIONS[e];break;case\"cursorWidth\":i=Math.floor(i);case\"lineHeight\":case\"tabStopWidth\":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case\"minimumContrastRatio\":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case\"scrollback\":if((i=Math.min(i,4294967295))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case\"fastScrollSensitivity\":case\"scrollSensitivity\":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case\"rows\":case\"cols\":if(!i&&0!==i)throw new Error(`${e} must be numeric, value: ${i}`);break;case\"windowsPty\":i=i??{}}return i}}t.OptionsService=o},660:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscLinkService=void 0;const n=i(585);let a=t.OscLinkService=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){const t=this._bufferService.buffer;if(void 0===e.id){const i=t.addMarker(t.ybase+t.y),s={data:e,id:this._nextId++,lines:[i]};return i.onDispose((()=>this._removeMarkerFromLink(s,i))),this._dataByLinkId.set(s.id,s),s.id}const i=e,s=this._getEntryIdKey(i),r=this._entriesWithId.get(s);if(r)return this.addLineToLink(r.id,t.ybase+t.y),r.id;const n=t.addMarker(t.ybase+t.y),a={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[n]};return n.onDispose((()=>this._removeMarkerFromLink(a,n))),this._entriesWithId.set(a.key,a),this._dataByLinkId.set(a.id,a),a.id}addLineToLink(e,t){const i=this._dataByLinkId.get(e);if(i&&i.lines.every((e=>e.line!==t))){const e=this._bufferService.buffer.addMarker(t);i.lines.push(e),e.onDispose((()=>this._removeMarkerFromLink(i,e)))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){const i=e.lines.indexOf(t);-1!==i&&(e.lines.splice(i,1),0===e.lines.length&&(void 0!==e.data.id&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};t.OscLinkService=a=s([r(0,n.IBufferService)],a)},343:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createDecorator=t.getServiceDependencies=t.serviceRegistry=void 0;const i=\"di$target\",s=\"di$dependencies\";t.serviceRegistry=new Map,t.getServiceDependencies=function(e){return e[s]||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);const r=function(e,t,n){if(3!==arguments.length)throw new Error(\"@IServiceName-decorator can only be used to decorate a parameter\");!function(e,t,r){t[i]===t?t[s].push({id:e,index:r}):(t[s]=[{id:e,index:r}],t[i]=t)}(r,e,n)};return r.toString=()=>e,t.serviceRegistry.set(e,r),r}},585:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.IDecorationService=t.IUnicodeService=t.IOscLinkService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.ICharsetService=t.ICoreService=t.ICoreMouseService=t.IBufferService=void 0;const s=i(343);var r;t.IBufferService=(0,s.createDecorator)(\"BufferService\"),t.ICoreMouseService=(0,s.createDecorator)(\"CoreMouseService\"),t.ICoreService=(0,s.createDecorator)(\"CoreService\"),t.ICharsetService=(0,s.createDecorator)(\"CharsetService\"),t.IInstantiationService=(0,s.createDecorator)(\"InstantiationService\"),function(e){e[e.TRACE=0]=\"TRACE\",e[e.DEBUG=1]=\"DEBUG\",e[e.INFO=2]=\"INFO\",e[e.WARN=3]=\"WARN\",e[e.ERROR=4]=\"ERROR\",e[e.OFF=5]=\"OFF\"}(r||(t.LogLevelEnum=r={})),t.ILogService=(0,s.createDecorator)(\"LogService\"),t.IOptionsService=(0,s.createDecorator)(\"OptionsService\"),t.IOscLinkService=(0,s.createDecorator)(\"OscLinkService\"),t.IUnicodeService=(0,s.createDecorator)(\"UnicodeService\"),t.IDecorationService=(0,s.createDecorator)(\"DecorationService\")},480:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeService=void 0;const s=i(460),r=i(225);class n{static extractShouldJoin(e){return 0!=(1&e)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,i=!1){return(16777215&e)<<3|(3&t)<<1|(i?1:0)}constructor(){this._providers=Object.create(null),this._active=\"\",this._onChange=new s.EventEmitter,this.onChange=this._onChange.event;const e=new r.UnicodeV6;this.register(e),this._active=e.version,this._activeProvider=e}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw new Error(`unknown Unicode version \"${e}\"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(e){let t=0,i=0;const s=e.length;for(let r=0;r<s;++r){let a=e.charCodeAt(r);if(55296<=a&&a<=56319){if(++r>=s)return t+this.wcwidth(a);const i=e.charCodeAt(r);56320<=i&&i<=57343?a=1024*(a-55296)+i-56320+65536:t+=this.wcwidth(i)}const o=this.charProperties(a,i);let h=n.extractWidth(o);n.extractShouldJoin(o)&&(h-=n.extractWidth(i)),t+=h,i=o}return t}charProperties(e,t){return this._activeProvider.charProperties(e,t)}}t.UnicodeService=n},781:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Terminal=void 0;const s=i(437),r=i(969),n=i(460);class a extends r.CoreTerminal{constructor(e={}){super(e),this._onBell=this.register(new n.EventEmitter),this.onBell=this._onBell.event,this._onCursorMove=this.register(new n.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onTitleChange=this.register(new n.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onA11yCharEmitter=this.register(new n.EventEmitter),this.onA11yChar=this._onA11yCharEmitter.event,this._onA11yTabEmitter=this.register(new n.EventEmitter),this.onA11yTab=this._onA11yTabEmitter.event,this._setup(),this.register(this._inputHandler.onRequestBell((()=>this.bell()))),this.register(this._inputHandler.onRequestReset((()=>this.reset()))),this.register((0,n.forwardEvent)(this._inputHandler.onCursorMove,this._onCursorMove)),this.register((0,n.forwardEvent)(this._inputHandler.onTitleChange,this._onTitleChange)),this.register((0,n.forwardEvent)(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this.register((0,n.forwardEvent)(this._inputHandler.onA11yTab,this._onA11yTabEmitter))}get buffer(){return this.buffers.active}get markers(){return this.buffer.markers}addMarker(e){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}bell(){this._onBell.fire()}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){e===this.cols&&t===this.rows||super.resize(e,t)}clear(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e<this.rows;e++)this.buffer.lines.push(this.buffer.getBlankLine(s.DEFAULT_ATTR_DATA));this._onScroll.fire({position:this.buffer.ydisp,source:0})}}reset(){this.options.rows=this.rows,this.options.cols=this.cols,this._setup(),super.reset()}}t.Terminal=a}},t={};function i(s){var r=t[s];if(void 0!==r)return r.exports;var n=t[s]={exports:{}};return e[s].call(n.exports,n,n.exports,i),n.exports}var s={};(()=>{var e=s;Object.defineProperty(e,\"__esModule\",{value:!0}),e.Terminal=void 0;const t=i(285),r=i(975),n=i(90),a=i(781),o=i(741),h=i(844),c=[\"cols\",\"rows\"];class l extends h.Disposable{constructor(e){super(),this._core=this.register(new a.Terminal(e)),this._addonManager=this.register(new o.AddonManager),this._publicOptions={...this._core.options};const t=e=>this._core.options[e],i=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(const e in this._core.options){Object.defineProperty(this._publicOptions,e,{get:()=>this._core.options[e],set:t=>{this._checkReadonlyOptions(e),this._core.options[e]=t}});const s={get:t.bind(this,e),set:i.bind(this,e)};Object.defineProperty(this._publicOptions,e,s)}}_checkReadonlyOptions(e){if(c.includes(e))throw new Error(`Option \"${e}\" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.options.allowProposedApi)throw new Error(\"You must set the allowProposedApi option to true to use proposed API\")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onLineFeed(){return this._core.onLineFeed}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onTitleChange(){return this._core.onTitleChange}get parser(){return this._checkProposedApi(),this._parser||(this._parser=new r.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new n.UnicodeApi(this._core)}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._checkProposedApi(),this._buffer||(this._buffer=this.register(new t.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){const e=this._core.coreService.decPrivateModes;let t=\"none\";switch(this._core.coreMouseService.activeProtocol){case\"X10\":t=\"x10\";break;case\"VT200\":t=\"vt200\";break;case\"DRAG\":t=\"drag\";break;case\"ANY\":t=\"any\"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,wraparoundMode:e.wraparound}}get options(){return this._publicOptions}set options(e){for(const t in e)this._publicOptions[t]=e[t]}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}registerMarker(e=0){return this._checkProposedApi(),this._verifyIntegers(e),this._core.addMarker(e)}addMarker(e){return this.registerMarker(e)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write(\"\\r\\n\",t)}reset(){this._core.reset()}loadAddon(e){this._addonManager.loadAddon(this,e)}_verifyIntegers(...e){for(const t of e)if(t===1/0||isNaN(t)||t%1!=0)throw new Error(\"This API only accepts integers\")}}e.Terminal=l})();var r=exports;for(var n in s)r[n]=s[n];s.__esModule&&Object.defineProperty(r,\"__esModule\",{value:!0})})();\n//# sourceMappingURL=xterm-headless.js.map","/**\n * xterm.js backend for termless.\n *\n * Wraps @xterm/headless to implement the TerminalBackend interface,\n * providing in-process terminal emulation with no browser dependency.\n */\n\n// @xterm/headless is CJS — use default import for Node.js ESM compat\nimport xterm from \"@xterm/headless\"\nconst { Terminal } = xterm\ntype XTerminal = InstanceType<typeof Terminal>\nimport type {\n TerminalBackend,\n TerminalOptions,\n Cell,\n CursorState,\n TerminalMode,\n ScrollbackState,\n TerminalCapabilities,\n RGB,\n} from \"../../../src/types.ts\"\nimport { encodeKeyToAnsi } from \"../../../src/key-encoding.ts\"\n\n// ═══════════════════════════════════════════════════════\n// ANSI 256-color palette\n// ═══════════════════════════════════════════════════════\n\n/** Standard 16-color ANSI palette */\nconst ANSI_16: readonly RGB[] = [\n { r: 0x00, g: 0x00, b: 0x00 }, // 0 Black\n { r: 0x80, g: 0x00, b: 0x00 }, // 1 Red\n { r: 0x00, g: 0x80, b: 0x00 }, // 2 Green\n { r: 0x80, g: 0x80, b: 0x00 }, // 3 Yellow\n { r: 0x00, g: 0x00, b: 0x80 }, // 4 Blue\n { r: 0x80, g: 0x00, b: 0x80 }, // 5 Magenta\n { r: 0x00, g: 0x80, b: 0x80 }, // 6 Cyan\n { r: 0xc0, g: 0xc0, b: 0xc0 }, // 7 White\n { r: 0x80, g: 0x80, b: 0x80 }, // 8 Bright Black\n { r: 0xff, g: 0x00, b: 0x00 }, // 9 Bright Red\n { r: 0x00, g: 0xff, b: 0x00 }, // 10 Bright Green\n { r: 0xff, g: 0xff, b: 0x00 }, // 11 Bright Yellow\n { r: 0x00, g: 0x00, b: 0xff }, // 12 Bright Blue\n { r: 0xff, g: 0x00, b: 0xff }, // 13 Bright Magenta\n { r: 0x00, g: 0xff, b: 0xff }, // 14 Bright Cyan\n { r: 0xff, g: 0xff, b: 0xff }, // 15 Bright White\n]\n\n/** Build the full 256-color palette (16 base + 216 cube + 24 grayscale) */\nfunction buildPalette256(): RGB[] {\n const palette: RGB[] = [...ANSI_16]\n\n // 6x6x6 color cube (indices 16-231)\n const levels = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]\n for (let r = 0; r < 6; r++) {\n for (let g = 0; g < 6; g++) {\n for (let b = 0; b < 6; b++) {\n palette.push({ r: levels[r]!, g: levels[g]!, b: levels[b]! })\n }\n }\n }\n\n // Grayscale ramp (indices 232-255)\n for (let i = 0; i < 24; i++) {\n const v = 8 + i * 10\n palette.push({ r: v, g: v, b: v })\n }\n\n return palette\n}\n\nconst PALETTE_256 = buildPalette256()\n\n/** Convert a palette index (0-255) to RGB */\nfunction paletteToRgb(index: number): RGB {\n return PALETTE_256[index] ?? { r: 0, g: 0, b: 0 }\n}\n\n/** Extract RGB from a 24-bit color value (0xRRGGBB) */\nfunction truecolorToRgb(value: number): RGB {\n return {\n r: (value >> 16) & 0xff,\n g: (value >> 8) & 0xff,\n b: value & 0xff,\n }\n}\n\n// ═══════════════════════════════════════════════════════\n// Backend factory\n// ═══════════════════════════════════════════════════════\n\nconst DEFAULT_COLS = 80\nconst DEFAULT_ROWS = 24\n\n/**\n * Create an xterm.js backend for termless.\n *\n * Uses @xterm/headless for in-process terminal emulation — no browser needed.\n * The terminal is initialized lazily via init(), or eagerly if opts are provided.\n */\nexport function createXtermBackend(opts?: Partial<TerminalOptions>): TerminalBackend {\n let term: XTerminal | null = null\n let title = \"\"\n const decoder = new TextDecoder()\n\n /** Access the internal write buffer for synchronous writes */\n function writeSync(t: XTerminal, data: string): void {\n ;(t as any)._core._writeBuffer.writeSync(data)\n }\n\n function ensureTerm(): XTerminal {\n if (!term) throw new Error(\"xterm backend not initialized — call init() first\")\n return term\n }\n\n function init(options: TerminalOptions): void {\n if (term) term.dispose()\n\n term = new Terminal({\n cols: options.cols,\n rows: options.rows,\n scrollback: options.scrollbackLimit ?? 1000,\n allowProposedApi: true,\n })\n\n title = \"\"\n term.onTitleChange((t: string) => {\n title = t\n })\n\n // Forward DA1/DA2/DSR responses to the terminal layer\n term.onData((data: string) => {\n if (backend.onResponse) {\n backend.onResponse(new TextEncoder().encode(data))\n }\n })\n }\n\n // Eagerly init if opts provided\n if (opts) {\n init({\n cols: opts.cols ?? DEFAULT_COLS,\n rows: opts.rows ?? DEFAULT_ROWS,\n scrollbackLimit: opts.scrollbackLimit,\n })\n }\n\n function destroy(): void {\n if (term) {\n term.dispose()\n term = null\n }\n }\n\n function feed(data: Uint8Array): void {\n const t = ensureTerm()\n // xterm.js write() is async — use internal writeSync for immediate buffer updates\n writeSync(t, decoder.decode(data))\n }\n\n function resize(cols: number, rows: number): void {\n ensureTerm().resize(cols, rows)\n }\n\n function reset(): void {\n const t = ensureTerm()\n // RIS (Reset to Initial State) escape sequence\n writeSync(t, \"\\x1bc\")\n title = \"\"\n }\n\n function getText(): string {\n const t = ensureTerm()\n const buf = t.buffer.active\n const lines: string[] = []\n for (let i = 0; i < buf.length; i++) {\n const line = buf.getLine(i)\n if (line) lines.push(line.translateToString(true))\n }\n return lines.join(\"\\n\")\n }\n\n function getTextRange(startRow: number, startCol: number, endRow: number, endCol: number): string {\n const t = ensureTerm()\n const buf = t.buffer.active\n const parts: string[] = []\n\n for (let row = startRow; row <= endRow; row++) {\n const line = buf.getLine(row)\n if (!line) continue\n\n const colStart = row === startRow ? startCol : 0\n const colEnd = row === endRow ? endCol : line.length\n\n parts.push(line.translateToString(true, colStart, colEnd))\n }\n\n return parts.join(\"\\n\")\n }\n\n // Map xterm.js internal underlineStyle enum to our string values\n const UNDERLINE_STYLES: Record<number, Cell[\"underline\"]> = {\n 1: \"single\",\n 2: \"double\",\n 3: \"curly\",\n 4: \"dotted\",\n 5: \"dashed\",\n }\n\n /**\n * Read extended attributes from xterm.js internal line data.\n * The public IBufferCell API only exposes isUnderline (boolean),\n * but the internal _extendedAttrs stores the actual underline style and color.\n */\n function getExtendedAttrs(row: number, col: number): { underlineStyle?: number; underlineColor?: RGB | null } {\n const t = ensureTerm()\n try {\n const internalLine = (t as any)._core.buffer.lines.get(row + t.buffer.active.baseY)\n if (!internalLine?._extendedAttrs) return {}\n const ext = internalLine._extendedAttrs[col]\n if (!ext) return {}\n\n const style = ext.underlineStyle as number | undefined\n let color: RGB | null = null\n // Use the underlineColor getter which returns the raw 0xRRGGBB value\n const rawColor = ext.underlineColor as number | undefined\n if (rawColor && rawColor !== 0) {\n color = {\n r: (rawColor >> 16) & 0xff,\n g: (rawColor >> 8) & 0xff,\n b: rawColor & 0xff,\n }\n }\n return { underlineStyle: style, underlineColor: color ?? undefined }\n } catch {\n return {}\n }\n }\n\n // Note: cursor visibility (DECTCEM) and reverse video (DECSCNM) are handled\n // by the renderer in xterm.js and are not stored in headless mode.\n // These remain as genuine headless limitations.\n\n function convertCell(bufCell: import(\"@xterm/headless\").IBufferCell | undefined, row?: number, col?: number): Cell {\n if (!bufCell) {\n return {\n char: \"\",\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false,\n underlineColor: null,\n strikethrough: false,\n inverse: false,\n blink: false,\n hidden: false,\n wide: false,\n continuation: false,\n hyperlink: null,\n }\n }\n\n // Foreground color\n let fg: RGB | null = null\n if (bufCell.isFgRGB()) {\n fg = truecolorToRgb(bufCell.getFgColor())\n } else if (bufCell.isFgPalette()) {\n fg = paletteToRgb(bufCell.getFgColor())\n }\n\n // Background color\n let bg: RGB | null = null\n if (bufCell.isBgRGB()) {\n bg = truecolorToRgb(bufCell.getBgColor())\n } else if (bufCell.isBgPalette()) {\n bg = paletteToRgb(bufCell.getBgColor())\n }\n\n // Read extended attributes for accurate underline style\n let underline: Cell[\"underline\"] = false\n let underlineColor: RGB | null = null\n if (bufCell.isUnderline() !== 0 && row !== undefined && col !== undefined) {\n const ext = getExtendedAttrs(row, col)\n underline = (ext.underlineStyle ? UNDERLINE_STYLES[ext.underlineStyle] : \"single\") ?? \"single\"\n underlineColor = ext.underlineColor ?? null\n } else if (bufCell.isUnderline() !== 0) {\n underline = \"single\"\n }\n\n return {\n char: bufCell.getChars(),\n fg,\n bg,\n bold: bufCell.isBold() !== 0,\n dim: bufCell.isDim() !== 0,\n italic: bufCell.isItalic() !== 0,\n underline,\n underlineColor,\n strikethrough: bufCell.isStrikethrough() !== 0,\n inverse: bufCell.isInverse() !== 0,\n blink: bufCell.isBlink() !== 0,\n hidden: bufCell.isInvisible() !== 0,\n wide: bufCell.getWidth() > 1,\n continuation: false,\n hyperlink: null,\n }\n }\n\n function getCell(row: number, col: number): Cell {\n const t = ensureTerm()\n const line = t.buffer.active.getLine(row)\n if (!line) {\n return {\n char: \"\",\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false,\n underlineColor: null,\n strikethrough: false,\n inverse: false,\n blink: false,\n hidden: false,\n wide: false,\n continuation: false,\n hyperlink: null,\n }\n }\n return convertCell(line.getCell(col), row, col)\n }\n\n function getLine(row: number): Cell[] {\n const t = ensureTerm()\n const cols = t.cols\n const cells: Cell[] = []\n const line = t.buffer.active.getLine(row)\n for (let col = 0; col < cols; col++) {\n cells.push(line ? convertCell(line.getCell(col), row, col) : getCell(row, col))\n }\n return cells\n }\n\n function getLines(): Cell[][] {\n const t = ensureTerm()\n const rows = t.rows\n const result: Cell[][] = []\n for (let row = 0; row < rows; row++) {\n result.push(getLine(row))\n }\n return result\n }\n\n function getCursor(): CursorState {\n const t = ensureTerm()\n return {\n x: t.buffer.active.cursorX,\n y: t.buffer.active.cursorY,\n visible: true, // DECTCEM not available in headless mode\n style: \"block\", // default — headless doesn't expose cursor style\n }\n }\n\n function getMode(mode: TerminalMode): boolean {\n const t = ensureTerm()\n\n switch (mode) {\n case \"altScreen\":\n return t.buffer.active.type === \"alternate\"\n case \"cursorVisible\":\n return true // not easily trackable in headless\n case \"bracketedPaste\":\n return t.modes.bracketedPasteMode\n case \"applicationCursor\":\n return t.modes.applicationCursorKeysMode\n case \"applicationKeypad\":\n return t.modes.applicationKeypadMode\n case \"autoWrap\":\n return t.modes.wraparoundMode\n case \"mouseTracking\":\n return t.modes.mouseTrackingMode !== \"none\"\n case \"focusTracking\":\n return t.modes.sendFocusMode\n case \"originMode\":\n return t.modes.originMode\n case \"insertMode\":\n return t.modes.insertMode\n case \"reverseVideo\":\n return false // not exposed by xterm.js headless\n }\n }\n\n function getTitle(): string {\n return title\n }\n\n function getScrollback(): ScrollbackState {\n const t = ensureTerm()\n const buf = t.buffer.active\n return {\n viewportOffset: buf.viewportY,\n totalLines: buf.length,\n screenLines: t.rows,\n }\n }\n\n function scrollViewport(delta: number): void {\n ensureTerm().scrollLines(delta)\n }\n\n const capabilities: TerminalCapabilities = {\n name: \"xterm\",\n version: \"5.5.0\",\n truecolor: true,\n kittyKeyboard: false,\n kittyGraphics: false,\n sixel: false,\n osc8Hyperlinks: true,\n semanticPrompts: false,\n unicode: \"15.1\",\n reflow: true,\n extensions: new Set(),\n }\n\n const backend: TerminalBackend = {\n name: \"xterm\",\n init,\n destroy,\n feed,\n resize,\n reset,\n getText,\n getTextRange,\n getCell,\n getLine,\n getLines,\n getCursor,\n getMode,\n getTitle,\n getScrollback,\n scrollViewport,\n encodeKey: encodeKeyToAnsi,\n capabilities,\n }\n\n return backend\n}\n","export { createXtermBackend } from \"./backend.ts\"\n\nimport { createXtermBackend } from \"./backend.ts\"\nimport type { TerminalBackend, TerminalOptions } from \"../../../src/types.ts\"\n\n/** Resolve this backend for the registry. Handles all initialization. */\nexport async function resolve(opts?: Partial<TerminalOptions>): Promise<TerminalBackend> {\n return createXtermBackend(opts)\n}\n","var H = /* @__PURE__ */ ((Q) => (Q[Q.CURSOR_KEY_APPLICATION = 0] = \"CURSOR_KEY_APPLICATION\", Q[Q.KEYPAD_KEY_APPLICATION = 1] = \"KEYPAD_KEY_APPLICATION\", Q[Q.IGNORE_KEYPAD_WITH_NUMLOCK = 2] = \"IGNORE_KEYPAD_WITH_NUMLOCK\", Q[Q.ALT_ESC_PREFIX = 3] = \"ALT_ESC_PREFIX\", Q[Q.MODIFY_OTHER_KEYS_STATE_2 = 4] = \"MODIFY_OTHER_KEYS_STATE_2\", Q[Q.KITTY_KEYBOARD_FLAGS = 5] = \"KITTY_KEYBOARD_FLAGS\", Q))(H || {}), b = /* @__PURE__ */ ((Q) => (Q[Q.RELEASE = 0] = \"RELEASE\", Q[Q.PRESS = 1] = \"PRESS\", Q[Q.REPEAT = 2] = \"REPEAT\", Q))(b || {}), o = /* @__PURE__ */ ((Q) => (Q[Q.UNIDENTIFIED = 0] = \"UNIDENTIFIED\", Q[Q.GRAVE = 1] = \"GRAVE\", Q[Q.BACKSLASH = 2] = \"BACKSLASH\", Q[Q.BRACKET_LEFT = 3] = \"BRACKET_LEFT\", Q[Q.BRACKET_RIGHT = 4] = \"BRACKET_RIGHT\", Q[Q.COMMA = 5] = \"COMMA\", Q[Q.ZERO = 6] = \"ZERO\", Q[Q.ONE = 7] = \"ONE\", Q[Q.TWO = 8] = \"TWO\", Q[Q.THREE = 9] = \"THREE\", Q[Q.FOUR = 10] = \"FOUR\", Q[Q.FIVE = 11] = \"FIVE\", Q[Q.SIX = 12] = \"SIX\", Q[Q.SEVEN = 13] = \"SEVEN\", Q[Q.EIGHT = 14] = \"EIGHT\", Q[Q.NINE = 15] = \"NINE\", Q[Q.EQUAL = 16] = \"EQUAL\", Q[Q.INTL_BACKSLASH = 17] = \"INTL_BACKSLASH\", Q[Q.INTL_RO = 18] = \"INTL_RO\", Q[Q.INTL_YEN = 19] = \"INTL_YEN\", Q[Q.A = 20] = \"A\", Q[Q.B = 21] = \"B\", Q[Q.C = 22] = \"C\", Q[Q.D = 23] = \"D\", Q[Q.E = 24] = \"E\", Q[Q.F = 25] = \"F\", Q[Q.G = 26] = \"G\", Q[Q.H = 27] = \"H\", Q[Q.I = 28] = \"I\", Q[Q.J = 29] = \"J\", Q[Q.K = 30] = \"K\", Q[Q.L = 31] = \"L\", Q[Q.M = 32] = \"M\", Q[Q.N = 33] = \"N\", Q[Q.O = 34] = \"O\", Q[Q.P = 35] = \"P\", Q[Q.Q = 36] = \"Q\", Q[Q.R = 37] = \"R\", Q[Q.S = 38] = \"S\", Q[Q.T = 39] = \"T\", Q[Q.U = 40] = \"U\", Q[Q.V = 41] = \"V\", Q[Q.W = 42] = \"W\", Q[Q.X = 43] = \"X\", Q[Q.Y = 44] = \"Y\", Q[Q.Z = 45] = \"Z\", Q[Q.MINUS = 46] = \"MINUS\", Q[Q.PERIOD = 47] = \"PERIOD\", Q[Q.QUOTE = 48] = \"QUOTE\", Q[Q.SEMICOLON = 49] = \"SEMICOLON\", Q[Q.SLASH = 50] = \"SLASH\", Q[Q.ALT_LEFT = 51] = \"ALT_LEFT\", Q[Q.ALT_RIGHT = 52] = \"ALT_RIGHT\", Q[Q.BACKSPACE = 53] = \"BACKSPACE\", Q[Q.CAPS_LOCK = 54] = \"CAPS_LOCK\", Q[Q.CONTEXT_MENU = 55] = \"CONTEXT_MENU\", Q[Q.CONTROL_LEFT = 56] = \"CONTROL_LEFT\", Q[Q.CONTROL_RIGHT = 57] = \"CONTROL_RIGHT\", Q[Q.ENTER = 58] = \"ENTER\", Q[Q.META_LEFT = 59] = \"META_LEFT\", Q[Q.META_RIGHT = 60] = \"META_RIGHT\", Q[Q.SHIFT_LEFT = 61] = \"SHIFT_LEFT\", Q[Q.SHIFT_RIGHT = 62] = \"SHIFT_RIGHT\", Q[Q.SPACE = 63] = \"SPACE\", Q[Q.TAB = 64] = \"TAB\", Q[Q.CONVERT = 65] = \"CONVERT\", Q[Q.KANA_MODE = 66] = \"KANA_MODE\", Q[Q.NON_CONVERT = 67] = \"NON_CONVERT\", Q[Q.DELETE = 68] = \"DELETE\", Q[Q.END = 69] = \"END\", Q[Q.HELP = 70] = \"HELP\", Q[Q.HOME = 71] = \"HOME\", Q[Q.INSERT = 72] = \"INSERT\", Q[Q.PAGE_DOWN = 73] = \"PAGE_DOWN\", Q[Q.PAGE_UP = 74] = \"PAGE_UP\", Q[Q.DOWN = 75] = \"DOWN\", Q[Q.LEFT = 76] = \"LEFT\", Q[Q.RIGHT = 77] = \"RIGHT\", Q[Q.UP = 78] = \"UP\", Q[Q.NUM_LOCK = 79] = \"NUM_LOCK\", Q[Q.KP_0 = 80] = \"KP_0\", Q[Q.KP_1 = 81] = \"KP_1\", Q[Q.KP_2 = 82] = \"KP_2\", Q[Q.KP_3 = 83] = \"KP_3\", Q[Q.KP_4 = 84] = \"KP_4\", Q[Q.KP_5 = 85] = \"KP_5\", Q[Q.KP_6 = 86] = \"KP_6\", Q[Q.KP_7 = 87] = \"KP_7\", Q[Q.KP_8 = 88] = \"KP_8\", Q[Q.KP_9 = 89] = \"KP_9\", Q[Q.KP_PLUS = 90] = \"KP_PLUS\", Q[Q.KP_BACKSPACE = 91] = \"KP_BACKSPACE\", Q[Q.KP_CLEAR = 92] = \"KP_CLEAR\", Q[Q.KP_CLEAR_ENTRY = 93] = \"KP_CLEAR_ENTRY\", Q[Q.KP_COMMA = 94] = \"KP_COMMA\", Q[Q.KP_PERIOD = 95] = \"KP_PERIOD\", Q[Q.KP_DIVIDE = 96] = \"KP_DIVIDE\", Q[Q.KP_ENTER = 97] = \"KP_ENTER\", Q[Q.KP_EQUAL = 98] = \"KP_EQUAL\", Q[Q.KP_MEMORY_ADD = 99] = \"KP_MEMORY_ADD\", Q[Q.KP_MEMORY_CLEAR = 100] = \"KP_MEMORY_CLEAR\", Q[Q.KP_MEMORY_RECALL = 101] = \"KP_MEMORY_RECALL\", Q[Q.KP_MEMORY_STORE = 102] = \"KP_MEMORY_STORE\", Q[Q.KP_MEMORY_SUBTRACT = 103] = \"KP_MEMORY_SUBTRACT\", Q[Q.KP_MULTIPLY = 104] = \"KP_MULTIPLY\", Q[Q.KP_PAREN_LEFT = 105] = \"KP_PAREN_LEFT\", Q[Q.KP_PAREN_RIGHT = 106] = \"KP_PAREN_RIGHT\", Q[Q.KP_MINUS = 107] = \"KP_MINUS\", Q[Q.KP_SEPARATOR = 108] = \"KP_SEPARATOR\", Q[Q.NUMPAD_UP = 109] = \"NUMPAD_UP\", Q[Q.NUMPAD_DOWN = 110] = \"NUMPAD_DOWN\", Q[Q.NUMPAD_RIGHT = 111] = \"NUMPAD_RIGHT\", Q[Q.NUMPAD_LEFT = 112] = \"NUMPAD_LEFT\", Q[Q.NUMPAD_BEGIN = 113] = \"NUMPAD_BEGIN\", Q[Q.NUMPAD_HOME = 114] = \"NUMPAD_HOME\", Q[Q.NUMPAD_END = 115] = \"NUMPAD_END\", Q[Q.NUMPAD_INSERT = 116] = \"NUMPAD_INSERT\", Q[Q.NUMPAD_DELETE = 117] = \"NUMPAD_DELETE\", Q[Q.NUMPAD_PAGE_UP = 118] = \"NUMPAD_PAGE_UP\", Q[Q.NUMPAD_PAGE_DOWN = 119] = \"NUMPAD_PAGE_DOWN\", Q[Q.ESCAPE = 120] = \"ESCAPE\", Q[Q.F1 = 121] = \"F1\", Q[Q.F2 = 122] = \"F2\", Q[Q.F3 = 123] = \"F3\", Q[Q.F4 = 124] = \"F4\", Q[Q.F5 = 125] = \"F5\", Q[Q.F6 = 126] = \"F6\", Q[Q.F7 = 127] = \"F7\", Q[Q.F8 = 128] = \"F8\", Q[Q.F9 = 129] = \"F9\", Q[Q.F10 = 130] = \"F10\", Q[Q.F11 = 131] = \"F11\", Q[Q.F12 = 132] = \"F12\", Q[Q.F13 = 133] = \"F13\", Q[Q.F14 = 134] = \"F14\", Q[Q.F15 = 135] = \"F15\", Q[Q.F16 = 136] = \"F16\", Q[Q.F17 = 137] = \"F17\", Q[Q.F18 = 138] = \"F18\", Q[Q.F19 = 139] = \"F19\", Q[Q.F20 = 140] = \"F20\", Q[Q.F21 = 141] = \"F21\", Q[Q.F22 = 142] = \"F22\", Q[Q.F23 = 143] = \"F23\", Q[Q.F24 = 144] = \"F24\", Q[Q.F25 = 145] = \"F25\", Q[Q.FN_LOCK = 146] = \"FN_LOCK\", Q[Q.PRINT_SCREEN = 147] = \"PRINT_SCREEN\", Q[Q.SCROLL_LOCK = 148] = \"SCROLL_LOCK\", Q[Q.PAUSE = 149] = \"PAUSE\", Q[Q.BROWSER_BACK = 150] = \"BROWSER_BACK\", Q[Q.BROWSER_FAVORITES = 151] = \"BROWSER_FAVORITES\", Q[Q.BROWSER_FORWARD = 152] = \"BROWSER_FORWARD\", Q[Q.BROWSER_HOME = 153] = \"BROWSER_HOME\", Q[Q.BROWSER_REFRESH = 154] = \"BROWSER_REFRESH\", Q[Q.BROWSER_SEARCH = 155] = \"BROWSER_SEARCH\", Q[Q.BROWSER_STOP = 156] = \"BROWSER_STOP\", Q[Q.EJECT = 157] = \"EJECT\", Q[Q.LAUNCH_APP_1 = 158] = \"LAUNCH_APP_1\", Q[Q.LAUNCH_APP_2 = 159] = \"LAUNCH_APP_2\", Q[Q.LAUNCH_MAIL = 160] = \"LAUNCH_MAIL\", Q[Q.MEDIA_PLAY_PAUSE = 161] = \"MEDIA_PLAY_PAUSE\", Q[Q.MEDIA_SELECT = 162] = \"MEDIA_SELECT\", Q[Q.MEDIA_STOP = 163] = \"MEDIA_STOP\", Q[Q.MEDIA_TRACK_NEXT = 164] = \"MEDIA_TRACK_NEXT\", Q[Q.MEDIA_TRACK_PREVIOUS = 165] = \"MEDIA_TRACK_PREVIOUS\", Q[Q.POWER = 166] = \"POWER\", Q[Q.SLEEP = 167] = \"SLEEP\", Q[Q.AUDIO_VOLUME_DOWN = 168] = \"AUDIO_VOLUME_DOWN\", Q[Q.AUDIO_VOLUME_MUTE = 169] = \"AUDIO_VOLUME_MUTE\", Q[Q.AUDIO_VOLUME_UP = 170] = \"AUDIO_VOLUME_UP\", Q[Q.WAKE_UP = 171] = \"WAKE_UP\", Q[Q.COPY = 172] = \"COPY\", Q[Q.CUT = 173] = \"CUT\", Q[Q.PASTE = 174] = \"PASTE\", Q))(o || {}), y = /* @__PURE__ */ ((Q) => (Q[Q.NONE = 0] = \"NONE\", Q[Q.SHIFT = 1] = \"SHIFT\", Q[Q.CTRL = 2] = \"CTRL\", Q[Q.ALT = 4] = \"ALT\", Q[Q.SUPER = 8] = \"SUPER\", Q[Q.CAPSLOCK = 16] = \"CAPSLOCK\", Q[Q.NUMLOCK = 32] = \"NUMLOCK\", Q))(y || {}), O = /* @__PURE__ */ ((Q) => (Q[Q.NONE = 0] = \"NONE\", Q[Q.PARTIAL = 1] = \"PARTIAL\", Q[Q.FULL = 2] = \"FULL\", Q))(O || {});\nconst d = 80;\nvar e = /* @__PURE__ */ ((Q) => (Q[Q.BOLD = 1] = \"BOLD\", Q[Q.ITALIC = 2] = \"ITALIC\", Q[Q.UNDERLINE = 4] = \"UNDERLINE\", Q[Q.STRIKETHROUGH = 8] = \"STRIKETHROUGH\", Q[Q.INVERSE = 16] = \"INVERSE\", Q[Q.INVISIBLE = 32] = \"INVISIBLE\", Q[Q.BLINK = 64] = \"BLINK\", Q[Q.FAINT = 128] = \"FAINT\", Q))(e || {});\nclass q {\n constructor(A) {\n this.exports = A.exports, this.memory = this.exports.memory;\n }\n createKeyEncoder() {\n return new V(this.exports);\n }\n createTerminal(A = 80, B = 24, g) {\n return new W(this.exports, this.memory, A, B, g);\n }\n static async load(A) {\n if (A)\n return q.loadFromPath(A);\n const B = new URL(\"data:application/wasm;base64,AGFzbQEAAAABdRJgBH9/f38Bf2AFf39/f38AYAZ/f39/f38Bf2ACf38AYAJ/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwF/YAN/f38Bf2AEf39/fwBgBn9/f39/fwBgAX8BfmAAAGAAAX9gAn9/AX5gA39+fgBgBX9+fn5+AAILAQNlbnYDbG9nAAMDxwTFBAQFAwYDBgMGAwYDBgcEAwYEBQcICQkEBwMJAwkECQkJBAMFBQMDBAcFAwYGBQQHBQAEBwUJBwYGBgYGBgYGBgUHAwMEBAQGCgUFBgkEAQoEBQUABwQEAwYFBAQGBgQJAAcBBwMDAwMHAwMHAQcDAwMDAwMHCgcDAwcFBQkGAwsLCwYDBwUDAwcDAwUHBQMDAwMGBwQKCgQKCgQEBAMDBQIHCgMHBwMHCgkHBwEKCwEDAwQKAwcEAwMHDAcJCQoECgoKAwgJAQcHCgAJCgoDBwMABwgEBQQEAwAHAwUGBwcFBQYHAwMKAQEDAwMDBAQGBgMEAwYGBQMFBQMDAwUDAwUFBAQJBwUEBgUHBAkEBAUDBAMFBgYJAAYECQcDBgUNBgcHBAQDAwQFAwcLBQUFAwQFAwAJAwcDBwQFBgQFBAQEBAQEBAQEBAQEBAQEBAQEBAQHBQQGBAYJBAUEBAQFBQUEBAQEBAUFBAQEBAQEBAQFBQQEBAUEBQQEBAQEBAQFBQQFBAQEBQQEBAQEBQQECQQFBAQEBAQEBAQEAwUEBAQEBAUFBAUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQHBgQHBgYGBgYGBgQDBQkKCAYGCQYACAQGCQ4FBgMGAw4FDgUBBgkJCAoEAQYJBgQHBgkFBwQABAkHAwcDBwoKAQcKDwQEBAYHBwMDAwYDDAYDABADAwMMAwcEAAkCAgEMBwEADAUHBAQECQQJCQkEBAkJCQMIAAkJCQEGAgIAAgIBAQoJBQ4RBAUBcAEWFgUDAQATBgkBfwFBgIDAAAsHhhJNBm1lbW9yeQIAFWdob3N0dHlfa2V5X2V2ZW50X25ldwABFmdob3N0dHlfa2V5X2V2ZW50X2ZyZWUAAhxnaG9zdHR5X2tleV9ldmVudF9zZXRfYWN0aW9uAAMcZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X2FjdGlvbgAEGWdob3N0dHlfa2V5X2V2ZW50X3NldF9rZXkABRlnaG9zdHR5X2tleV9ldmVudF9nZXRfa2V5AAYaZ2hvc3R0eV9rZXlfZXZlbnRfc2V0X21vZHMABxpnaG9zdHR5X2tleV9ldmVudF9nZXRfbW9kcwAII2dob3N0dHlfa2V5X2V2ZW50X3NldF9jb25zdW1lZF9tb2RzAAkjZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X2NvbnN1bWVkX21vZHMACh9naG9zdHR5X2tleV9ldmVudF9zZXRfY29tcG9zaW5nAAsfZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X2NvbXBvc2luZwAMGmdob3N0dHlfa2V5X2V2ZW50X3NldF91dGY4AA0aZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X3V0ZjgADilnaG9zdHR5X2tleV9ldmVudF9zZXRfdW5zaGlmdGVkX2NvZGVwb2ludAAPKWdob3N0dHlfa2V5X2V2ZW50X2dldF91bnNoaWZ0ZWRfY29kZXBvaW50ABAXZ2hvc3R0eV9rZXlfZW5jb2Rlcl9uZXcAERhnaG9zdHR5X2tleV9lbmNvZGVyX2ZyZWUAEhpnaG9zdHR5X2tleV9lbmNvZGVyX3NldG9wdAATGmdob3N0dHlfa2V5X2VuY29kZXJfZW5jb2RlABQPZ2hvc3R0eV9vc2NfbmV3ACEQZ2hvc3R0eV9vc2NfZnJlZQAjEGdob3N0dHlfb3NjX25leHQAJRFnaG9zdHR5X29zY19yZXNldABAD2dob3N0dHlfb3NjX2VuZABEGGdob3N0dHlfb3NjX2NvbW1hbmRfdHlwZQBLGGdob3N0dHlfb3NjX2NvbW1hbmRfZGF0YQBMFWdob3N0dHlfcGFzdGVfaXNfc2FmZQBNFWdob3N0dHlfY29sb3JfcmdiX2dldABPD2dob3N0dHlfc2dyX25ldwBQEGdob3N0dHlfc2dyX2ZyZWUAURFnaG9zdHR5X3Nncl9yZXNldABSFmdob3N0dHlfc2dyX3NldF9wYXJhbXMAUxBnaG9zdHR5X3Nncl9uZXh0AFYYZ2hvc3R0eV9zZ3JfdW5rbm93bl9mdWxsAFobZ2hvc3R0eV9zZ3JfdW5rbm93bl9wYXJ0aWFsAFsZZ2hvc3R0eV9zZ3JfYXR0cmlidXRlX3RhZwBcG2dob3N0dHlfc2dyX2F0dHJpYnV0ZV92YWx1ZQBdFGdob3N0dHlfdGVybWluYWxfbmV3AF4gZ2hvc3R0eV90ZXJtaW5hbF9uZXdfd2l0aF9jb25maWcAXxVnaG9zdHR5X3Rlcm1pbmFsX2ZyZWUAjQEXZ2hvc3R0eV90ZXJtaW5hbF9yZXNpemUA2gEWZ2hvc3R0eV90ZXJtaW5hbF93cml0ZQC+AxtnaG9zdHR5X3JlbmRlcl9zdGF0ZV91cGRhdGUAvwMdZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2NvbHMAwgMdZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X3Jvd3MAwwMhZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2N1cnNvcl94AMQDIWdob3N0dHlfcmVuZGVyX3N0YXRlX2dldF9jdXJzb3JfeQDFAydnaG9zdHR5X3JlbmRlcl9zdGF0ZV9nZXRfY3Vyc29yX3Zpc2libGUAxgMhZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2JnX2NvbG9yAMcDIWdob3N0dHlfcmVuZGVyX3N0YXRlX2dldF9mZ19jb2xvcgDIAyFnaG9zdHR5X3JlbmRlcl9zdGF0ZV9pc19yb3dfZGlydHkAyQMfZ2hvc3R0eV9yZW5kZXJfc3RhdGVfbWFya19jbGVhbgDLAyFnaG9zdHR5X3JlbmRlcl9zdGF0ZV9nZXRfdmlld3BvcnQAzAMhZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2dyYXBoZW1lAM4DJGdob3N0dHlfdGVybWluYWxfaXNfYWx0ZXJuYXRlX3NjcmVlbgDPAyNnaG9zdHR5X3Rlcm1pbmFsX2hhc19tb3VzZV90cmFja2luZwDQAxlnaG9zdHR5X3Rlcm1pbmFsX2dldF9tb2RlANEDJmdob3N0dHlfdGVybWluYWxfZ2V0X3Njcm9sbGJhY2tfbGVuZ3RoANIDJGdob3N0dHlfdGVybWluYWxfZ2V0X3Njcm9sbGJhY2tfbGluZQDTAyhnaG9zdHR5X3Rlcm1pbmFsX2dldF9zY3JvbGxiYWNrX2dyYXBoZW1lANQDH2dob3N0dHlfdGVybWluYWxfaXNfcm93X3dyYXBwZWQA1QMdZ2hvc3R0eV90ZXJtaW5hbF9oYXNfcmVzcG9uc2UA1gMeZ2hvc3R0eV90ZXJtaW5hbF9yZWFkX3Jlc3Bv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IgVBv39KDQBBLiEBIARBP3FBBnQgAy0AAEEPcUEMdHIiA0H/D0sNAQsgAiABOwAJIAJBDGohAQwCCwJAIANBgPADcUGAsANHDQAgAkEAOgAKIAJBgN4AOwEIIAJBADoADiACQQA7AQwgAkEMaiEBDAILIAJBADoADiACQQA7AAkgAiADIAVBP3FyOwEMIAJBDGohAQwBCwJAIAMsAAEiAUFASA0AIAJBADoACiACQYDaADsBCCACQQA6AA4gAkEAOwEMIAJBDGohAQwBCwJAIAMsAAIiBEFASA0AIAJBADoACiACQYDaADsBCCACQQA6AA4gAkEAOwEMIAJBDGohAQwBCwJAIAMsAAMiBUFASA0AIAJBADoACiACQYDaADsBCCACQQA6AA4gAkEAOwEMIAJBDGohAQwBCwJAIAFBP3FBBnQgAy0AAEEHcUEMdHIiAUH/B0sNACACQQA6AAogAkGA3AA7AQggAkEAOgAOIAJBADsBDCACQQxqIQEMAQsCQCABQYCIAUkNACACQQA6AAogAkGA4AA7AQggAkEAOgAOIAJBADsBDCACQQxqIQEMAQsgAkEAOwAJIAIgASAEQT9xckEGdCAFQT9xciIBOwEMIAIgAUEQdjoADiACQQxqIQELIAFBAmotAAAhAyAAIAEvAQAiATsBACAAQQJqIANBH3EiAzoAACAAQQE6AAQgAiABOwEEIAIgAzoABgwBCyAAQgA3AgALIAJBEGokgICAgAAL3QECBX8BfiOAgICAAEEQayIDJICAgIAAQQAhBAJAA0ACQCACIARLDQBBACEFDAILIAEgBGohBgJAAkAgACgCDCIHIAIgBGsiBWogACgCCEsNAAJAIAVFDQAgACgCBCAHaiAGIAX8CgAACyAAIAAoAgwgBWo2AgwMAQsgACgCACgCACEHIAMgBTYCBCADIAY2AgAgA0EIaiAAIANBAUEBIAcRgYCAgACAgICAACADKQMIIghCIIinIgVB//8DcQ0CIAinIQULIAUgBGohBAwACwsgA0EQaiSAgICAACAFC9YJAQF+QgAhAgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDrABQQABAgMEBQYHCAkKCwwNDg9BQUEQERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uQUFBQUFBQUFBQUFBLzBBQUFBQUFBQUFBQUFBQUExMjM0NTY3ODk6O0FBQUE8PUE+QUFBQUE/QUFAQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBC0EAKQOIqsiAACECDEALQQApA5CqyIAAIQIMPwtBACkDmKrIgAAhAgw+C0EAKQOgqsiAACECDD0LQQApA6iqyIAAIQIMPAtBACkDsKrIgAAhAgw7C0EAKQO4qsiAACECDDoLQQApA8CqyIAAIQIMOQtBACkDyKrIgAAhAgw4C0EAKQPQqsiAACECDDcLQQApA9iqyIAAIQIMNgtBACkD4KrIgAAhAgw1C0EAKQPoqsiAACECDDQLQQApA/CqyIAAIQIMMwtBACkD+KrIgAAhAgwyC0EAKQOAq8iAACECDDELQQApA4iryIAAIQIMMAtBACkDkKvIgAAhAgwvC0EAKQOYq8iAACECDC4LQQApA6CryIAAIQIMLQtBACkDqKvIgAAhAgwsC0EAKQOwq8iAACECDCsLQQApA7iryIAAIQIMKgtBACkDwKvIgAAhAgwpC0EAKQPIq8iAACECDCgLQQApA9CryIAAIQIMJwtBACkD2KvIgAAhAgwmC0EAKQPgq8iAACECDCULQQApA+iryIAAIQIMJAtBACkD8KvIgAAhAgwjC0EAKQP4q8iAACECDCILQQApA4CsyIAAIQIMIQtBACkDiKzIgAAhAgwgC0EAKQOQrMiAACECDB8LQQApA5isyIAAIQIMHgtBACkDoKzIgAAhAgwdC0EAKQOorMiAACECDBwLQQApA7CsyIAAIQIMGwtBACkDuKzIgAAhAgwaC0EAKQPArMiAACECDBkLQQApA8isyIAAIQIMGAtBACkD0KzIgAAhAgwXC0EAKQPYrMiAACECDBYLQQApA+CsyIAAIQIMFQtBACkD6KzIgAAhAgwUC0EAKQPwrMiAACECDBMLQQApA/isyIAAIQIMEgtBACkDgK3IgAAhAgwRC0EAKQOIrciAACECDBALQQApA7CqyIAAIQIMDwtBACkDuKrIgAAhAgwOC0EAKQPAqsiAACECDA0LQQApA8iqyIAAIQIMDAtBACkD0KrIgAAhAgwLC0EAKQPYqsiAACECDAoLQQApA+CqyIAAIQIMCQtBACkD6KrIgAAhAgwIC0EAKQPwqsiAACECDAcLQQApA/iqyIAAIQIMBgtBACkDkK3IgAAhAgwFC0EAKQPgrMiAACECDAQLQQApA/isyIAAIQIMAwtBACkDgKvIgAAhAgwCC0EAKQOYrciAACECDAELQQApA9isyIAAIQILIAAgAjcCAAsYACAAIAJB////AHFBCkEAIAEQ5oOAgAALQwEBfwJAIABBzJTJgABBARCagICAACICQf//A3ENACAAQYy1yoAAIAEvAQAgAUECai0AAEEQdHIQnICAgAAhAgsgAgsWACAAIAJB/wNxQQpBACABEOaDgIAACxUAIAAgAkEDcUEKQQAgARDmg4CAAAs8AQF/I4CAgIAAQRBrIgMkgICAgAAgAyACOgAPIAAgA0EPakEBIAEQoYSAgAAhAiADQRBqJICAgIAAIAILyQECAX8BfiOAgICAAEHwEGsiAiSAgICAAAJAAkAgAA0AQaDpyYAAIQAMAQsgAkG41MeAADYC7BAgAiAANgLoECACQegQaiEACwJAAkAgACkCACIDp0HQEEECQQAgA0IgiKcoAgARgICAgACAgICAACIADQBBfyEADAELIAJBAToAECACIAM3AwggAkEYaiACQQhqEKKAgIAAAkBB0BBFDQAgACACQRhqQdAQ/AoAAAsgASAANgIAQQAhAAsgAkHwEGokgICAgAAgAAuZAQEBfyOAgICAAEHAAGsiAiSAgICAACACQQhqQQhqIAFBCGooAgA2AgAgAkEAOgAEIAIgASkCADcDCAJAQSxFDQAgAkEUakEAQSz8CwALIAJBADoAAwJAQThFDQAgACACQQhqQTj8CgAACyAAQQA2AkAgAEIANwI4IAAgAi0ABDoATCAAIAItAAM6AM0QIAJBwABqJICAgIAACz0BAn8CQCAARQ0AIAAoAgAhASAAKAIEIQIgABCkgICAACABIABB0BBBAkEAIAIoAgwRgYCAgACAgICAAAsL4gEBBH8jgICAgABBEGsiASSAgICAAAJAIAAtAExBP3FFDQACQAJAAkAgACgCDEF2ag4CAQACCyABIAApAgA3AwggAUEIaiAAKAIQIAAoAhgQwYCAgAAMAQsgAEEQaiAAEMKAgIAACyAAQQA6AM0QIABBADoATAJAQTRFDQAgAEEMakEAQTT8CwALIAAoAkAiAkUNACABIAApAgA3AwAgACgCACEDIAAoAgQhBCACIAEQw4CAgAAgAyACQQxBAkEAIAQoAgwRgYCAgACAgICAACAAQQA2AkALIAFBEGokgICAgAALDAAgACABEKaAgIAAC69MAgV/AX4jgICAgABB4BBrIgIkgICAgAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAjwiA0H/D0kNACAALQBMQT9xIgNBAUcNAQyiAQsgACADQQFqIgQ2AjwgAEHNAGoiBSADaiIGIAE6AAAgAC0ATEE/cQ45AgGiARsDBCwtLgUzNDU2Nzg5Bj1BQghGCUxNTlUPb3BxchBHSKIBCguiAVNUEXYHQAxdEV5fDWAOZ2hpAgsgAiADOgAKIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBAgAkG4EGogAkEKahCngICAACIDQf//A3FFDZ4BIAJBuBBqQaDpyYAAQT8QqICAgAAgAi8B0BANoAEgAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEgAkEKahCngICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADKEBCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICAACACLwHcEA2gASACKALYECEEIAIoAtQQIQEMnwELIABBADoAzRAMoAELIAFB/wFxQVBqDgoPEBEXEhMXFBUWFwsgAUH/AXFBUGoODBkaGxwdHh8gISIjGCMLIAFB/wFxIgNBNEYNJiADQTtHDSMgAC0ACA0lIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBAgAkG4EGoQq4CAgAAiA0H//wNxDSQgAigCvBAhASACKALEECEEDJgBCyABQf8BcSIDQTNGDSkgA0E7Rw0qIAAtAAgNLCACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQIAJBuBBqEKyAgIAAIgNB//8DcQ0rIAIoArwQIQEgAigCxBAhBAyVAQsgAUH/AXEiA0FPag4CMzQ1CyABQf8BcUFFag4DNpoBN5oBCyABQf8BcSIDQTJGDTogA0E7Rw07IAAtAAgNPCAAQQE6AEwMmQELIAFB/wFxQUlqDgVAQUFBP0ELIAFB/wFxQUVqDgNElwFFlwELIAFB/wFxQUZqDgJFRpYBCyABQf8BcUFPag4GSUpLTE1OTwsgAEEBOgDNECAAQQE6ABggAEERNgIMIAAgAEEQajYCRCAAEK2AgIAADJQBCyABQf8BcUFQag4FUlNUVVZXCyABQf8BcUG/f2oOBFpbXF1eCyABQf8BcUFQag4MY2NjY2NjY2NjY2RiZAsgAEEBOgDNEAyQAQsgAEEDOgBMDI8BCyAAQQQ6AEwMjgELIABBEToATAyNAQsgAEEUOgBMDIwBCyAAQRU6AEwMiwELIABBFzoATAyKAQsgAEEaOgBMDIkBCyAAQRs6AEwMiAELIABBAToATAyHAQsgAUH/AXFBO0YNfiAAQQE6AEwMhgELIABBKjoATCAAQQI2AgwgACAENgI4IAAgAEEQajYCRAyFAQsgAEEFOgBMDIQBCyAAQQc6AEwMgwELIABBCDoATAyCAQsgAEEJOgBMDIEBCyAAQQs6AEwMgAELIABBDDoATAx/CyAAQQ06AEwMfgsgAEEOOgBMDH0LIABBDzoATAx8CyAAQRA6AEwMewsgAEEBOgBMDHoLIABBAToATAx5CyACQbgQakGg6cmAAEHBABCogICAACACLwHQEA10IAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABEKuAgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMdQsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANdCACKALYECEEIAIoAtQQIQEMcwsgAEECOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAx3CyAAQQY6AEwgAC0ACEUNdiAAQQE6AM0QDHYLAkAgAUH/AXFBO0YNACAAQQE6AEwMdgsgAC0ACEUNbCAAQQw6ADQgAEEKNgIMAkBBJEUNACAAQRBqQaiUyYAAQST8CgAACyAAQSQ6AEwgAEEAOgA1IABBAToAzRAgACAENgI4DHULAkACQAJAIAFB/wFxQTtGDQAgAUFQakH/AXFBCk8NbSAALQAIDQIgAiABOgALIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBAgAkG4EGogAkELahCugICAACIDQf//A3ENASACKAK8ECEBIAIoAsQQIQQMawsgAC0ACEUNaSAAQQM6ADQgAEEKNgIMAkBBJEUNACAAQRBqQaiUyYAAQST8CgAACyAAQSQ6AEwgAEEAOgA1IABBAToAzRAgACAENgI4DHYLIAJBuBBqQaDpyYAAQcQAEKiAgIAAIAIvAdAQDWogAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEgAkELahCugICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADGsLIAJB1BBqIAJBoBBqEKqAgIAAIAJBoBBqEKmAgIAAIAIvAdwQDWogAigC2BAhBCACKALUECEBDGkLIABBCjYCDCAAIAFBD3FBDmo6ADQCQEEkRQ0AIABBEGpBqJTJgABBJPwKAAALIABBJDoATCAAQQA6ADUgAEEBOgDNECAAIAQ2AjgMdAsCQCABQf8BcUE7Rg0AIABBAToATAx0CyAALQAIRQ1lIABBBDoANCAAQQo2AgwCQEEkRQ0AIABBEGpBqJTJgABBJPwKAAALIABBJDoATCAAQQA6ADUgAEEBOgDNECAAIAQ2AjgMcwsgAEEKOgBMDHILIABBAToATAxxCyACQbgQakGg6cmAAEHBABCogICAACACLwHQEA1qIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABEKyAgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMawsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANaiACKALYECEEIAIoAtQQIQEMaQsgAEEFOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxvCyABQf8BcUE7Rg1fIABBAToATAxuCwJAIAFB/wFxQTtGDQAgAEEBOgBMDG4LIAAtAAhFDV0gAEEGOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxtCwJAIAFB/wFxQTtGDQAgAEEBOgBMDG0LIAAtAAhFDVsgAEEHOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxsCwJAIAFB/wFxQTtGDQAgAEEBOgBMDGwLIAAtAAhFDVkgAEEIOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxrCwJAIAFB/wFxQTtGDQAgAEEBOgBMDGsLIAAtAAhFDVcgAEEJOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxqCwJAIAFB/wFxQTtGDQAgAEEBOgBMDGoLIAAtAAhFDVUgAEEKOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxpCwJAIAFB/wFxQTtGDQAgAEEBOgBMDGkLIAAtAAhFDVMgAEELOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxoCyAAQRI6AEwMZwsgAEETOgBMDGYLIANBO0YNTyAAQQE6AEwMZQsCQCABQf8BcUE7Rg0AIABBAToATAxlCyAALQAIRQ1NIABBCzYCDCAAQQE6AM0QIABBLDoATCAAQQA2AkggAEH29cGAADYCRCAAQQA6ABwgACAENgI4IABBACkC0L/HgAA3AhAgAEEYakEAKALYv8eAADYCAAxkCyAAIAMgACgCOCIBazYCSCAAIAUgAWo2AkQgAEEAQQAQr4CAgAAgAEEsOgBMIAAgACgCPDYCOAxjCyAAQS06AEwgACgCOCEBIAAgBDYCOCAAIAMgAWs2AkggACAFIAFqNgJEDGILIAFB/wFxQTtHDWEgAEEBQQAQr4CAgAAgAEEsOgBMIAAgACgCPDYCOAxhCyABQf8BcUE7Rg1IIABBAToATAxgCwJAIAFB/wFxQTtGDQAgAEEBOgBMDGALIAAtAAhFDUYgAEEAOgA0IABBCjYCDAJAQSRFDQAgAEEQakGolMmAAEEk/AoAAAsgAEEkOgBMIABBADoANSAAQQE6AM0QIAAgBDYCOAxfCyAAQRY6AEwMXgsgAEEBOgBMDF0LIABBAToANCAAQQo2AgwCQEEkRQ0AIABBEGpBqJTJgABBJPwKAAALIABBJDoATCAAQQA6ADUgAEEBOgDNECAAIAQ2AjgMXAsgAUH/AXFBO0YNQSAAQQE6AEwMWwsgAUH/AXFBO0YNPyAAQSM6AEwgACABOgAYDFoLIAFB/wFxQTtGDT0gAEEBOgBMDFkLIABBAToAzRAgAEEANgIUIABB9vXBgAA2AhAgAEEINgIMIABBKjoATCAAIAQ2AjggACAAQRBqNgJEDFgLIABBGDoATAxXCyAAQQE6AEwMVgsgAUH/AXFBN0YNOCAAQQE6AEwMVQsgAUH/AXFBO0YNNiAAQQE6AEwMVAsgAUH/AXFBO0YNNCAAQQE6AEwMUwsgAEEnOgBMIABBAToAzRAgACAENgI4DFILIABBJjoATCAAKAI4IQEgACAENgI4IAAgAyABazYCSCAAIAUgAWo2AkQMUQsgABCwgICAACAAQSU6AEwgACAAKAI8NgI4DFALIAAQsICAgAAgACAAQRhqNgJEIABBKjoATCAAIAAoAjw2AjgMTwsCQCABQf8BcUE7Rg0AIAFBn39qQf8BcUEaSQ1PIABBAToATAxPCwJAIAUgACgCOCIBaiIFIAMgAWsiA0H3k8CAAEEGELGAgIAAQQFxDQAgAiADNgIQIAIgBTYCDCACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQAkAgAkG4EGogAkEMahCygICAACIDQf//A3ENACACKAK8ECEBIAIoAsQQIQQMLwsgAkG4EGpBoOnJgABBKRCogICAACACLwHQEA0vIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABIAJBDGoQsoCAgABB//8DcUUNACACQaAQahCpgICAAAwwCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICAACACLwHcEA0vIAIoAtgQIQQgAigC1BAhAQwuCyAAQSk6AEwgACAENgI4IABBDDYCDAxOCyABQf8BcUE7Rw1NIAZBADoAACAAQSo6AEwgACgCOCEBIAAgBDYCOCAAIABBGGo2AkQgACADIAFrNgIUIAAgBSABajYCEAxNCyABQf8BcUE7Rg0qIABBAToATAxMCyAAQQE6AM0QIABBLzoATAxLCyAAQQE6AM0QIABBMToATAxKCyAAQQE6AM0QIABBMjoATAxJCyAAQQE6AM0QIABBNDoATAxICyAAQQI6AEwCQEEsRQ0AIABBDGpB3L/HgABBLPwKAAALIABBAToAzRAMRwsgAEEBOgDNECAAQTg6AEwMRgsgAEEBOgDNECAAQSo6AEwgAEEANgIUIABB9vXBgAA2AhAgAEEMNgIMIAAgAEEYajYCRAxFCyABQf8BcUE7Rg0hIABBAToAzRAgAEEqOgBMIABBADYCFCAAQfb1wYAANgIQIABBDDYCDCAAIABBGGo2AkQMRAsgAUH/AXFBO0YNHyAAQQE6AM0QIABBKjoATCAAQQA2AhQgAEH29cGAADYCECAAQQw2AgwgACAAQRhqNgJEDEMLIAFB/wFxQTtGDR0gAEEBOgDNECAAQSo6AEwgAEEANgIUIABB9vXBgAA2AhAgAEEMNgIMIAAgAEEYajYCRAxCCyABQf8BcUE7Rg0bIABBAToAzRAgAEEqOgBMIABBADYCFCAAQfb1wYAANgIQIABBDDYCDCAAIABBGGo2AkQMQQsgAEEBOgDNECAAQQI6AEwgAEEANgIQDEALIABBNjoATCAAQYACOwEUIABBATYCEAw/CyAAQQE6AM0QIABBAjYCECAAQTY6AEwMPgsgAEEBOgDNECAAQQM2AhAgAEECOgBMDD0LIABBAToAzRAgAEEENgIQIABBNjoATAw8CyAAQQE6AM0QIABBKjoATCAAQQA2AhQgAEH29cGAADYCECAAQQw2AgwgACAAQRhqNgJEDDsLIAFB/wFxQTtGDRMgAEEBOgDNECAAQSo6AEwgAEEANgIUIABB9vXBgAA2AhAgAEEMNgIMIAAgAEEYajYCRAw6CyABQVBqQf8BcUEKTw0RIABBAToAzRACQAJAIAAoAhAOBTsBADsAOwsgAC0AFQ0AIABBgAI7ARQLIAAtABQiA0HjAEsNOQJAIANBCkkNACAAQeQCOwEUDDoLIAJBFGogAUEKELOAgIAAIABBAToAFSAAQQAgAi0AFiACLwEUGyADQQpsakH/AXEiA0HkACADQeQASRs6ABQMOQsgAUH/AXFBO0YNDyAAQQE6AM0QIABBKjoATCAAQQA2AhQgAEH29cGAADYCECAAQQw2AgwgACAAQRhqNgJEDDgLIABBAzYCDCAAQR06AEwgAEEBOgDNECAAQQApAojAx4AANwIQIABBGGpBACgCkMDHgAA2AgAMNwsgAEEBOgDNECAAQQQ2AgwgAEEdOgBMDDYLIABBAToAzRAgAEIANwIQIABBBTYCDCAAQR06AEwMNQsgAEEBOgDNECAAQQA7ARAgAEEGNgIMIABBIDoATAw0CyAAQQE6AEwMMwsgAUH/AXFBO0YNCCAAQQE6AEwMMgsgAUH/AXFBPUcNMSAAQR86AEwgACgCOCEBIAAgBDYCOCAAIAMgAWs2AkggACAFIAFqNgJEDDELIAFB/wFxQTtHDTAgABC0gICAACAAQR46AEwgACAAKAI8NgI4DDALIAFB/wFxQTtGDQQgAEEBOgBMDC8LAkAgACgCDEEGRw0AIABBAToAESAAIAAtAEQ6ABALIAAgBDYCOCAAQR46AEwMLgsgAEEBOgDNECAAIAAvAUQiA0F/IANBEHStQgp+IgenIAdCIIinG0EQdiAEIAAoAjhGG0H//wNxIAFBUGpB/wFxaiIDQf//AyADQf//A0kbOwFEDC0LIABBAToATAwsCyACIAApAgA3AxgCQCAAKAJAIAJBGGogARC1gICAAEH//wNxRQ0AIABBAToATAwsCyAAQQE6AM0QIAAgACgCPEF/ajYCPAwrCyAAQSE6AEwgAEEAOgDNECAAQQA7AUQgACAENgI4DCoLIAAgBDYCOCAAQR46AEwMKQsgACAAQRBqNgJEIABBFDYCDCAAQQE6AM0QIABBKjoATCAAIAQ2AjgMKAsgAEEBOgDNECAAQQI6AEwMJwsgAEE3OgBMDCYLIABBNToATCAAQQA7ARQgAEESNgIMDCULIABCADcCECAAQRE2AgwgAEEzOgBMIABBAToAzRAgACAENgI4IABBGGpBADYCAAwkCyAAIABBEGo2AkQgAEEQNgIMIABBAToAzRAgACAENgI4IAAQrYCAgAAMIwsgAEEBOgDNECAAIAQ2AjggAEHkADsBECAAQQ82AgwgAEEwOgBMDCILIABBLjoATCAAIAQ2AjgMIQsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwfCyAAQQA2AhwgAEH29cGAADYCGCAAQg03AgwgAEElOgBMIABBADYCFCAAIAQ2AjgMHgsgACAENgI4IABBKDoATAwdCyAAQRk6AEwMHAsgACAENgI4IAAgAEEQajYCRCAAEK2AgIAAIABBAToAzRAMGwsgAEHjADoAGCAAIAQ2AjggACAAQRBqNgJEIAAQrYCAgAAgAEEBOgDNEAwaCyAAQSI6AEwgAEEHNgIMDBkLIABBAToATAwYCyAAQSo6AEwgAEEJNgIMIAAgBDYCOCAAIABBEGo2AkQMFwsgAEEBOgBMDBYLIABBAToAzRAgAEEBNgIMIABBKjoATCAAIAQ2AjggACAAQRBqNgJEDBULIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBACQAJAAkAgAkG4EGoQt4CAgAAiA0H//wNxRQ0AIAJBuBBqQaDpyYAAQcEAEKiAgIAAIAIvAdAQDQIgAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEQt4CAgABB//8DcUUNACACQaAQahCpgICAAAwDCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICAACACLwHcEA0CIAIoAtgQIQQgAigC1BAhAQwBCyACKAK8ECEBIAIoAsQQIQQLIAEgBBCAgICAACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMFAsgAkKAEDcCwBAgAkGwv8eAADYCuBAgAiACQSBqNgK8EAJAAkACQCACQbgQahC4gICAACIDQf//A3FFDQAgAkG4EGpBoOnJgABBwQAQqICAgAAgAi8B0BANAiACQaAQakEQaiACQbgQakEQaikCADcDACACQaAQakEIaiIBIAJBuBBqQQhqKQIANwMAIAIgAikCuBA3A6AQAkAgARC4gICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADAMLIAJB1BBqIAJBoBBqEKqAgIAAIAJBoBBqEKmAgIAAIAIvAdwQDQIgAigC2BAhBCACKALUECEBDAELIAIoArwQIQEgAigCxBAhBAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwTCyACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQAkACQAJAIAJBuBBqELmAgIAAIgNB//8DcUUNACACQbgQakGg6cmAAEHBABCogICAACACLwHQEA0CIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABELmAgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMAwsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANAiACKALYECEEIAIoAtQQIQEMAQsgAigCvBAhASACKALEECEECyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDBILIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBACQAJAAkAgAkG4EGoQuoCAgAAiA0H//wNxRQ0AIAJBuBBqQaDpyYAAQcEAEKiAgIAAIAIvAdAQDQIgAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEQuoCAgABB//8DcUUNACACQaAQahCpgICAAAwDCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICAACACLwHcEA0CIAIoAtgQIQQgAigC1BAhAQwBCyACKAK8ECEBIAIoAsQQIQQLIAEgBBCAgICAACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMEQsgAkKAEDcCwBAgAkGwv8eAADYCuBAgAiACQSBqNgK8EAJAAkACQCACQbgQahC7gICAACIDQf//A3FFDQAgAkG4EGpBoOnJgABBwQAQqICAgAAgAi8B0BANAiACQaAQakEQaiACQbgQakEQaikCADcDACACQaAQakEIaiIBIAJBuBBqQQhqKQIANwMAIAIgAikCuBA3A6AQAkAgARC7gICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADAMLIAJB1BBqIAJBoBBqEKqAgIAAIAJBoBBqEKmAgIAAIAIvAdwQDQIgAigC2BAhBCACKALUECEBDAELIAIoArwQIQEgAigCxBAhBAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwQCyACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQAkACQAJAIAJBuBBqELyAgIAAIgNB//8DcUUNACACQbgQakGg6cmAAEHBABCogICAACACLwHQEA0CIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABELyAgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMAwsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANAiACKALYECEEIAIoAtQQIQEMAQsgAigCvBAhASACKALEECEECyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDA8LIABBHDoATAwOCyACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQAkACQAJAIAJBuBBqEL2AgIAAIgNB//8DcUUNACACQbgQakGg6cmAAEHBABCogICAACACLwHQEA0CIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABEL2AgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMAwsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANAiACKALYECEEIAIoAtQQIQEMAQsgAigCvBAhASACKALEECEECyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDA0LIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBACQAJAAkAgAkG4EGoQvoCAgAAiA0H//wNxRQ0AIAJBuBBqQaDpyYAAQcEAEKiAgIAAIAIvAdAQDQIgAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEQvoCAgABB//8DcUUNACACQaAQahCpgICAAAwDCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICAACACLwHcEA0CIAIoAtgQIQQgAigC1BAhAQwBCyACKAK8ECEBIAIoAsQQIQQLIAEgBBCAgICAACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMDAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwKCyAAQQE6AEwMCQsgAkKAEDcCwBAgAkGwv8eAADYCuBAgAiACQSBqNgK8EAJAAkACQCACQbgQahC/gICAACIDQf//A3FFDQAgAkG4EGpBoOnJgABBwgAQqICAgAAgAi8B0BANAiACQaAQakEQaiACQbgQakEQaikCADcDACACQaAQakEIaiIBIAJBuBBqQQhqKQIANwMAIAIgAikCuBA3A6AQAkAgARC/gICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADAMLIAJB1BBqIAJBoBBqEKqAgIAAIAJBoBBqEKmAgIAAIAIvAdwQDQIgAigC2BAhBCACKALUECEBDAELIAIoArwQIQEgAigCxBAhBAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwICyAAQQE6AM0QIABBATYCDCAAQSo6AEwgACAENgI4IAAgAEEQajYCRAwHCyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDAULIAEgBBCAgICAACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMAwsgAigCvBAhASACKALEECEECyAB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ABCagICAAAsTACAAQb6byoAAQcEAEJqAgIAACxMAIABB/JrKgABBwgAQmoCAgAALCgAgABCkgICAAAs6AQF/AkAgAkEMbCIDRQ0AIAAoAgAgAUGq1arVeiACGyADQQJBACAAKAIEKAIMEYGAgIAAgICAgAALC6kBAwF/AX4CfyOAgICAAEEQayICJICAgIAAIAIgASkCACIDNwMAIAIgACgCHEEfcSIBOgAPIANCIIinIQQgA6chBQJAA0AgAUEfcUUNASACIAFBf2pBH3EiAToADyAFIAAoAhggAUECdGooAgBBDCABQQJqdEECQQAgBCgCDBGBgICAAICAgIAADAALCyACIAAoAhggACgCHBD3g4CAACACQRBqJICAgIAACzQBAX8CQCAAKAIIIgJFDQAgASgCACAAKAIAIAJBAEEAIAEoAgQoAgwRgYCAgACAgICAAAsLPwEBfyOAgICAAEEQayICJICAgIAAIAJBAToADyACIAE6AA4gACACQQ5qEMWAgIAAIQEgAkEQaiSAgICAACABC84KAQR/I4CAgIAAQdAQayICJICAgIAAAkACQAJAAkAgAC0AzRANACACIAAoAjw2AgQgAiAAQc0AajYCACACQoAQNwKwECACQbC/x4AANgKoECACIAJBEGo2AqwQAkAgAkGoEGogAhDGgICAACIAQf//A3ENACACKAKsECEDIAIoArQQIQEMAgsgAkGoEGpBoOnJgABBJhCogICAACACLwHAEA0CIAJBkBBqQRBqIAJBqBBqQRBqKQIANwMAIAJBkBBqQQhqIgMgAkGoEGpBCGopAgA3AwAgAiACKQKoEDcDkBACQCADIAIQxoCAgABB//8DcUUNACACQZAQahCpgICAAAwDCyACQcQQaiACQZAQahCqgICAACACQZAQahCpgICAACACLwHMEA0CIAIoAsgQIQEgAigCxBAhAwwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAALQBMQT9xIgNBYWoOGgMRAhERCRERBBERCwEGBxEKBQoKEQoKEREKAAsgA0EGRg0HDBALIAIgACkCADcDCAJAIAAoAkAiBCACQQhqQQAQtYCAgABB//8DcQ0AIAQoAgQhBSAAKAJEIgMgBCgCADYCACAFQX9qIQQMDwsgAkKAEDcCsBAgAkGwv8eA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AAALQQEhAwsgAkGgAWokgICAgAAgAwvJEwEKfwJAIAEoAgQiAiABKAIMIgNLDQAgASADQQFqNgIMIABBrMDHgABBlMDHgAAgAxsiASkCADcCACAAQQhqIAFBCGopAgA3AgAgAEEQaiABQRBqKQIANwIADwsgASADQQFqIgQ2AgwgAiADayEFIAEoAgAiBiADQQF0aiIHLwEAIQgCQCABLwEIIAFBCmotAABBEHRyIglBASADdHEiCkH///8HcUUNAAJAIAhBWmoiC0EUSw0AQQEgC3RBgYjAAHENAQsgCEEERg0AIAlB////B3EhCUEBIQgDQCADIAhqIQogCEEBaiEIIAkgCnZBAXENAAsgAEEBOgAUIAAgBzYCDCAAIAI2AgggACAGNgIEIABBATYCACABIAMgCGo2AgwgACAIIAUgCCAFSRs2AhAPCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAIDjwAAQIDFwQFBgcIFhYWFhYWFhYWFhYJCgsMDRYODxAWFhYWFhYWFhgRFhYWFhYWFhYZEhYWFhMWFBYWGhUWCyAAQRBqQQApAqTAx4AANwIAIABBCGpBACkCnMDHgAA3AgAgAEEAKQKUwMeAADcCAA8LIABBEGpBACkC1MDHgAA3AgAgAEEIakEAKQLMwMeAADcCACAAQQApAsTAx4AANwIADwsgAEEQakEAKQLswMeAADcCACAAQQhqQQApAuTAx4AANwIAIABBACkC3MDHgAA3AgAPCyAAQRBqQQApAoTBx4AANwIAIABBCGpBACkC/MDHgAA3AgAgAEEAKQL0wMeAADcCAA8LIABBEGpBACkCnMHHgAA3AgAgAEEIakEAKQKUwceAADcCACAAQQApAozBx4AANwIADwsgAEEQakEAKQKcwceAADcCACAAQQhqQQApApTBx4AANwIAIABBACkCjMHHgAA3AgAPCyAAQRBqQQApArTBx4AANwIAIABBCGpBACkCrMHHgAA3AgAgAEEAKQKkwceAADcCAA8LIABBEGpBACkCzMHHgAA3AgAgAEEIakEAKQLEwceAADcCACAAQQApArzBx4AANwIADwsgAEEQakEAKQLkwceAADcCACAAQQhqQQApAtzBx4AANwIAIABBACkC1MHHgAA3AgAPCyAAQQI6AAQgAEEHNgIAIABBAToAFA8LIABBEGpBACkC/MHHgAA3AgAgAEEIakEAKQL0wceAADcCACAAQQApAuzBx4AANwIADwsgAEEQakEAKQKUwseAADcCACAAQQhqQQApAozCx4AANwIAIABBACkChMLHgAA3AgAPCyAAQQA6AAQgAEEHNgIAIABBAToAFA8LIABBEGpBACkCrMLHgAA3AgAgAEEIakEAKQKkwseAADcCACAAQQApApzCx4AANwIADwsgAEEQakEAKQLEwseAADcCACAAQQhqQQApArzCx4AANwIAIABBACkCtMLHgAA3AgAPCyAAQRBqQQApAtzCx4AANwIAIABBCGpBACkC1MLHgAA3AgAgAEEAKQLMwseAADcCAA8LIABBEGpBACkC9MLHgAA3AgAgAEEIakEAKQLswseAADcCACAAQQApAuTCx4AANwIADwsgAEEQakEAKQKMw8eAADcCACAAQQhqQQApAoTDx4AANwIAIABBACkC/MLHgAA3AgAPCyAAQRBqQQApAqTDx4AANwIAIABBCGpBACkCnMPHgAA3AgAgAEEAKQKUw8eAADcCAA8LIABBEGpBACkCvMPHgAA3AgAgAEEIakEAKQK0w8eAADcCACAAQQApAqzDx4AANwIADwsgAEEQakEAKQLUw8eAADcCACAAQQhqQQApAszDx4AANwIAIABBACkCxMPHgAA3AgAPCyAAQRBqQQApAuzDx4AANwIAIABBCGpBACkC5MPHgAA3AgAgAEEAKQLcw8eAADcCAA8LIAhBYmpB//8DcUEISQ0HIAhB+P8DcUEoRg0GIAhBpn9qQf//A3FBCEkNBSAIQZx/akH//wNxQQhPDQkgAEEbNgIAIABBAToAFCAAIActAABBpH9qOgAEDwsgCkH///8HcUUNA0EBIQggCUH///8HcSAEdkEBcQ0HIABBAToAFCAAQQc2AgAgASADQQJqNgIMAkAgBy8BAiIBQQVLDQAgASEICyAAIAhBB3E6AAQPCyAFQQFNDQcCQAJAIAcvAQJBfmoOBAAJCQEJC0EFIQggBUEFSQ0IQQQhAgJAAkAgCkH///8HcQ0AQQYhCkEIIQkMAQtBBiEKQQghCQJAIAEQ2ICAgABBfWoOAgEACQtBCiEJQQghCkEGIQhBBiECCyABIAMgCGo2AgwgByACai0AACEBIAcgCmovAQAhAyAAQQZqIAcgCWovAQA6AAAgAEEBOgAUIABBFTYCACAAIAEgA0EIdHI7AQQPCyAFQQJGDQcgAEEBOgAUIABBHjYCACABIANBA2o2AgwgACAHLQAEOgAEDwsgBUEBTQ0GAkACQCAHLwECQX5qDgQACAgBCAtBBSEIIAVBBUkNB0EEIQICQAJAIApB////B3ENAEEGIQpBCCEJDAELQQYhCkEIIQkCQCABENiAgIAAQX1qDgIBAAgLQQohCUEIIQpBBiEIQQYhAgsgASADIAhqNgIMIAcgAmotAAAhASAHIApqLwEAIQMgAEEGaiAHIAlqLwEAOgAAIABBAToAFCAAQRY2AgAgACABIANBCHRyOwEEDwsgBUECRg0GIABBAToAFCAAQR02AgAgASADQQNqNgIMIAAgBy0ABDoABA8LIAVBAU0NBQJAAkAgBy8BAkF+ag4EAAcHAQcLQQUhCCAFQQVJDQZBBCECAkACQCAKQf///wdxDQBBBiEKQQghCQwBC0EGIQpBCCEJAkAgARDYgICAAEF9ag4CAQAHC0EKIQlBCCEKQQYhCEEGIQILIAEgAyAIajYCDCAHIAJqLQAAIQEgByAKai8BACEDIABBBmogByAJai8BADoAACAAQQE6ABQgAEEINgIAIAAgASADQQh0cjsBBA8LIAVBAkYNBSAAQQE6ABQgAEEJNgIAIAEgA0EDajYCDCAAIActAAQ6AAQPCyAAQQE6AAQgAEEHNgIAIABBAToAFA8LIABBHDYCACAAQQE6ABQgACAHLQAAQa5/ajoABA8LIABBFzYCACAAQQE6ABQgACAHLQAAQVhqOgAEDwsgAEEYNgIAIABBAToAFCAAIActAABBYmo6AAQPCyABENmAgIAACyAAQQE2AgAgAEEBOgAUIAAgBTYCECAAIAc2AgwgACABKQIANwIEC2YBBH9BACEBQQAgACgCBEF/aiICIAAoAgwiA2siBCAEIAJLGyECIABBCmohBAN/AkACQCACIAFGDQAgAC8BCCAELQAAQRB0ciADIAFqdkEBcQ0BIAEhAgsgAg8LIAFBAWohAQwACwsYACAAIAAQ2ICAgAAgACgCDGpBAWo2AgwLGQACQCABRQ0AIAEgACgCADYCAAsgACgCBAsZAAJAIAFFDQAgASAAKAIINgIACyAAKAIMCwcAIAAoAgALBwAgAEEIagsOACAAIAFBABDfgICAAAu4CwIGfwJ+I4CAgIAAQaA0ayIDJICAgIAAAkACQCACQfgsQQMgAhDggICAACIERQ0AAkACQCACDQACQEHQEEUNACADQQhqQYD3wYAAQdAQ/AoAAAtBkM4AIQUMAQsgAigCACEGAkBB0BBFDQAgA0EIakGA98GAAEHQEPwKAAALAkAgAigCBCIHRQ0AIANBImogBzoAACADQQE6ACQgA0IANwMYIAMgB0GAgPwHcUEQdiAHQYD+A3FyOwEgCwJAIAIoAggiB0UNACADQRJqIAc6AAAgA0EBOgAUIANCADcDCCADIAdBgID8B3FBEHYgB0GA/gNxcjsBEAsCQCACKAIMIgdFDQAgA0EyaiAHOgAAIANBAToANCADQgA3AyggAyAHQYCA/AdxQRB2IAdBgP4DcXI7ATALAkBBwABFDQAgA0HcEGogAkEQakHAAPwKAAALIAZBfyAGGyEFIANBOGohBkEAIQIgA0HcEGohBwNAIAJBEEYNAQJAIAcoAgAiCEUNACAGQQJqIAg6AAAgBiAIQYCA/AdxQRB2IAhBgP4DcXI7AQAgAyADKAK4EEEBIAJ0cjYCuBALIAdBBGohByAGQQRqIQYgAkEBaiECDAALCyADIAE7AaYSIAMgADsBpBIgA0GAoMuYATYCoBIgAyAFNgKcEgJAAkAgAkHwAkEDIAIQ4ICAgAAiAkUNACADQdAjakGg6cmAACADQZwSahDhgICAAAJAIAMvAcAmRQ0AIAIgAkHwAkEDIAIQ4oCAgAAMAQsCQEHwAkUNACACIANB0CNqQfAC/AoAAAsgA0GQEmoiBkEANgIAIANBADYAlRIgA0GEEmogA0GYEmooAgA2AAAgA0EALQDYxMeAAEEBcjoAlBIgA0H8EWogBikCADcAACADIAI2AowSIAMgAjYCiBIgA0EAOgCoEiADIAMpAogSNwD0ESADQawSakGg6cmAACAAEOOAgIAAIAMvAfgSRQ0BIANBiBJqQaDpyYAAEOSAgIAAC0Gg6cmAACAEEOWAgIAADAELAkBBzABFIgINACADQaARaiADQawSakHMAPwKAAALIANBADoAnhEgA0GACDsBnBEgBEEUakIAPAAAIARChMSAkAM+AhAgBEEMakIAPAAAIARChMSAkAM+AgggBEEEaiIGQgA8AAAgBEKExICQAz4CACAEIAMpAPERNwAVIARBHWogA0HxEWpBCGopAAA3AAAgBEEkaiADQYASaikAADcAACAEQQA2AiwCQCACDQAgBEEwaiADQaARakHMAPwKAAALIARCADcCfCAEQQApA9CmyIAAIgk3AoQBIARBjAFqQQAoAtimyIAAIgI2AgACQEHQEEUiBw0AIARBkAFqIANBCGpB0BD8CgAACyAEQQg2AugRIARCADcD4BEgBCAAQX9qOwH6ESAEQQA7AfgRIAQgAUF/ajsB9hEgBEEAOwH0ESAEIAA7AfIRIAQgATsB8BEgBCAEQegsajYCvBsgBEG4G2oiCCAENgIAIARBACkDoOnJgAAiCjcCsBsgBCADLwGcETsB7BEgBEHuEWogAy0AnhE6AAAgBCAJNwLoLCAEQfAsaiACNgIAIANBADoArBIgA0HQI2pB7KbIgAAQooCAgAACQCAHDQAgA0GAE2ogA0HQI2pB0BD8CgAACyADLQCsEiECIARB0htqQQA6AAAgBEEAOwHQGyAEQcgbaiAIKQIANwIAIAQgBCkCsBs3AsAbAkBB0RBFDQAgBEHTG2ogA0H/EmpB0RD8CgAACyAEQQA2ANcsIAQgAjoA1iwgBEEAOwHULCAEQdosakEANgAAIARBACkD4MTHgAA3AuAsIAQgCjcCqBsCQEGoCUUNACAEQYASakGItseAAEGoCfwKAAALIAZCIDwAACAEQoTEgJADPgIAIARBADoA9CwMAQtBACEECyADQaA0aiSAgICAACAEC40CAQR/I4CAgIAAQRBrIgQkgICAgAAgBCACQR9xOgAPQQAhBQJAQX8gAUEEaiIGIAYgAUkbIgFBASACdCICIAEgAksbIgFBf2pnIgJFDQACQAJAQSAgAmsiAkH//wNxQX1qIgZBDU8NAEIBIAKtQv//A4OGpyEBIAZBAnQiB0GIvMqAAGoiBigCACICRQ0BIAYgASACakF8aigCADYCACACIQUMAgsgAUGDgARqQRB2ELmEgIAAIQUMAQsCQCAHQby8yoAAaiIGKAIAIgJB//8DcQ0AQQEQuYSAgAAiAkUNASAGIAIgAWo2AgAgAiEFDAELIAYgAiABajYCACACIQULIARBEGokgICAgAAgBQuuDwIKfwF+I4CAgIAAQbAEayIDJICAgIAAIAIoAgAhBCACLwEKIQUgAi8BCCEGIANBADYCoAQgA0IANwOYBCADIAEpAgA3A5AEQQQhBwJAAkACQAJAAkADQCAHRQ0BIANBqARqIANBkARqEOeAgIAAIAMvAawEIggNAiADKAKoBCIIIAMoAqAENgIAIAMgCDYCoAQgB0F/aiEHDAALCyADQeADakEIaiADQZAEakEIaikDADcDACADQeADakEQaiADQZAEakEQaigCADYCACADIAMpA5AENwPgAyADQgA3A5gEIANBADYCoAQgA0EAKQOg6cmAADcDkARBBCEHAkADQCAHRQ0BIANBqARqIANBkARqEOqAgIAAAkAgAy8BrAQiCA0AIAMoAqgEIgggAygCoAQ2AgAgAyAINgKgBCAHQX9qIQcMAQsLIANBkARqEPuAgIAAIANB4ANqEPuAgIAADAILQQghByADQfgDakEIaiADQZAEakEIaikDADcDACADQfgDakEQaiADQZAEakEQaigCADYCACADIAMpA5AENwP4AyADQQA2AqAEIANCADcDmAQgAyABKQIANwOQBAJAA0AgB0UNASADQagEaiADQZAEahD4gICAAAJAIAMvAawEIggNACADKAKoBCIIIAMoAqAENgIAIAMgCDYCoAQgB0F/aiEHDAELCyADQZAEahD7gICAACADQfgDahD7gICAACADQeADahD7gICAAAwCCyADQdgCakEIaiIIIANBkARqQQhqKQMANwMAIANB2AJqQRBqIgcgA0GQBGpBEGooAgA2AgAgA0GIA2pBCGoiCSADQeADakEIaikDADcDACADQYgDakEQaiIKIANB4ANqQRBqKAIANgIAIANB8AJqQQhqIgsgA0H4A2pBCGopAwA3AwAgA0HwAmpBEGoiDCADQfgDakEQaigCADYCACADIAMpA5AENwPYAiADIAMpA+ADNwOIAyADIAMpA/gDNwPwAiADIAEpAgA3A5ACIANBqAJqIAooAgA2AgAgA0GQAmpBEGogCSkDADcDACADIAMpA4gDNwOYAiADQbwCaiAMKAIANgIAIANBtAJqIAspAwA3AgAgAyADKQPwAjcCrAIgA0HQAmogBygCADYCACADQcgCaiAIKQMANwMAIAMgAykD2AI3A8ACIANCADcDoAMgA0GoA2ogA0GQAmogA0GgA2ogBiAFEOyAgIAAAkAgAy8BtAMiCEUNACADQZACahD6gICAAAwCCyADKAKwAyEKIAMoAqwDIQsgAygCqAMhCSADQbgDaiAGIAUQ9oCAgAACQCADLwG8AyIIRQ0AIANBkAJqEPqAgIAADAILIAMoArgDIQwgA0HAA2ogA0HAAmoQ94CAgAACQCADLwHEAyIIRQ0AIANBkAJqEPqAgIAADAILIAMoAsADIgdBADoACCAHQQA2AQQgByAJNgIAIANB0ANqQgA3AwAgA0IANwPIAyADQcgDaiADQZACaiAHEPyAgIAAIghB//8DcUUNAiADQcgDaiADQZACahCDgYCAACADQZACahD6gICAAAwBCyADQZAEahD7gICAAAsgACAIOwHwAgwBCyADQQE6ANwDIANBADoA2wMgAykDoAMhDQJAQcQARQ0AIANBEGogA0GQAmpBxAD8CgAACyADQZABakEIaiIIIANByANqQQhqKQMANwMAIAMgAykDyAM3A5ABIAMgBTYCaCADIAw2AmQgAyAENgJgIAMgCjYCXCADIAs2AlggAyAJNgJUIANCADcDCCADIA03AwAgAy0A3AMhBCADLQDbAyEKIANB9ABqIAgpAwA3AgAgAyADKQOQATcCbCADIAo6AI0BIAMgBDoAjAEgAyAFOwGKASADIAY7AYgBIANCADcDgAEgAyAHNgJ8IANBADoAqAEgA0EANgKkASADIAk2AqABIANBrAFqIAMgA0GgAWoQhIGAgAACQCADLwGwASIIRQ0AIAMQhYGAgAAgACAIOwHwAgwBCyADQQA6AIcCIANBADoAhgIgAyACKAIARToAuAEgAygCrAEiCCgCACIHKAIYIAcoAhAiB2ogCC8BBEEDdGoiAigCACEFIAgvAQYhBiABKQIAIQ0gA0EBOgCIAgJAQcgARQ0AIANBvQFqQQFqQQBByAD8CwALIABBADsB8AIgA0EAOgC2ASADQQA6ALcBAkBBkAFFDQAgACADQZAB/AoAAAsgACANNwOQAQJAQSRFIgENACAAQZgBakEAQST8CwALIABCADcDyAEgACAFIAdqIAZBA3RqNgLEASAAIAI2AsABIAAgCDYCvAEgACADLQCIAjoA0AEgACADLQCHAjoA0QEgACADLQCGAjoA0gECQEHJAEUNACAAQdMBaiADQb0BakHJAPwKAAALAkAgAQ0AIABBnAJqQQBBJPwLAAsgAEIANwHiAiAAQeoCakEAOgAAIABB2AJqQQApA5inyIAANwMAIABB0AJqQQApA5CnyIAANwMAIABByAJqQQApA4inyIAANwMAIABBACkDgKfIgAA3A8ACIAAgAy0AuAE6AOACIAAgAy0AtwE6AOECIAAgAy0AtgE6AOsCCyADQbAEaiSAgICAAAvOAQECfyOAgICAAEEQayIFJICAgIAAIAUgA0EfcToADwJAAkBBICACQQRqIgJBASADdCIDIAIgA0sbIgNBf2pnayICQf//A3FBfWoiBkENTw0AIAFCASACrIanakF8aiAGQQJ0QYi8yoAAaiIDKAIANgIAIAMgATYCAAwBCyABQgFBICADQYOABGpBEHZBf2pnayIDrUL//wODhqdBEHRqQXxqIANB//8DcUECdEHwvMqAAGoiAygCADYCACADIAE2AgALIAVBEGokgICAgAAL3AEBAX8jgICAgABB8ABrIgMkgICAgAACQEHMAEUNACADQQxqQbT2wYAAQcwA/AoAAAsgAyACNgIMIAMgASkCADcDWAJAAkACQCACQYEESQ0AIANB5ABqIANB2ABqIAJBgHxqEIiBgIAAIAMvAWwiAg0BIAMoAmQhAgJAIAMoAmgiAUUNACACQQAgAfwLAAsgAyABNgIUIAMgAjYCEAsgA0EMakEIEImBgIAAIABBADsBTEHMAEUNASAAIANBDGpBzAD8CgAADAELIAAgAjsBTAsgA0HwAGokgICAgAALoAEBA38jgICAgABBEGsiAiSAgICAACABKAIEIQMgASgCACEEIAIgAC0ADEEDcSIBOgAPIABBBGohAAJAA0AgAUEDcUUNASACIAFBf2ogAXFBA3E6AAwgACABaEEDcUECdGoiASgCABCLgYCAACAEIAEoAgBB8AJBA0EAIAMoAgwRgYCAgACAgICAACACLQAMIQEMAAsLIAJBEGokgICAgAALIwAgACgCACABQfgsQQNBACAAKAIEKAIMEYGAgIAAgICAgAALdwECfyOAgICAAEEQayICJICAgIAAAkACQAJAIAEoAhAiA0UNACABIAMoAgA2AhAMAQsgAkEIaiABEOeAgIAAAkAgAi8BDCIBRQ0AIAAgATsBBAwCCyACKAIIIQMLIAAgAzYCACAAQQA7AQQLIAJBEGokgICAgAALYgEBfyOAgICAAEEgayICJICAgIAAIAJB3KbIgAA2AhAgAiABNgIMIAJBFGogAkEMakG4AhDogICAAAJAIAIvARwiAQ0AIAAgAigCFDYCAAsgACABOwEEIAJBIGokgICAgAALxQECAX8BfiOAgICAAEEgayIDJICAgIAAQoCAgIAQIQQCQAJAQQANAAJAAkAgAg0AQvj///8PIQQMAQsgASkCACIEpyACQQNBACAEQiCIpygCABGAgICAAICAgIAAIgFFrUIghiABrYQhBCABRQ0BCyADIAI2AhQgAyAEPgIQIANBADsBGCADQRBqIQIMAQsgAyAEQiCIPQEMIANBBGohAgsgACACKQIANwIAIABBCGogAkEIaigCADYCACADQSBqJICAgIAAC3cBAn8jgICAgABBEGsiAiSAgICAAAJAAkACQCABKAIQIgNFDQAgASADKAIANgIQDAELIAJBCGogARDqgICAAAJAIAIvAQwiAUUNACAAIAE7AQQMAgsgAigCCCEDCyAAIAM2AgAgAEEAOwEECyACQRBqJICAgIAAC2MBAX8jgICAgABBIGsiAiSAgICAACACQdymyIAANgIQIAIgATYCDCACQRRqIAJBDGpBgIAkEOuAgIAAAkAgAi8BHCIBDQAgACACKAIUNgIACyAAIAE7AQQgAkEgaiSAgICAAAvFAQIBfwF+I4CAgIAAQSBrIgMkgICAgABCgICAgBAhBAJAAkBBAA0AAkACQCACDQBCgID8/w8hBAwBCyABKQIAIgSnIAJBEEEAIARCIIinKAIAEYCAgIAAgICAgAAiAUWtQiCGIAGthCEEIAFFDQELIAMgAjYCFCADIAQ+AhAgA0EAOwEYIANBEGohAgwBCyADIARCIIg9AQwgA0EEaiECCyAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIAIANBIGokgICAgAAL6g0BKn8jgICAgABBwARrIgUkgICAgAAgBUEBOgAGIAUgAzsBBCAFQQhqQbCSyYAAIAVBBGoQ7YCAgAACQAJAIAUvARwiA0UNACAAIAM7AQwMAQtBAEIBQSAgBSgCDCIGQRxuIgdBBHRBf2pna62GpyAGQRxJGyEIIAUvARoiCSAFLwEYIgpsQf//A3FBA3QiCyAJQQN0IgxqIg1BB3IhDiAKQQN0IQ8gBSgCECIQQQR2IREgAUEcaiESIAFBCGohEyAFQcACaiEUIAVBqAJqIRUgBUGkAWpB8ABqIRYgBUGAAmohFyAFQewBaiEYIAVB2AFqIRkgBUG8AWohGiAFKAIUIRsgBSgCCCEcQQAhHUEAIR5BACEfA0ACQAJAAkACQAJAIARB//8DcSIgRQ0AIAVBIGogExDmgICAAAJAIAUvASQiAUUNACAAIAE7AQwMBwsgBSgCICEhIAVBKGogEhDpgICAAAJAIAUvASwiAUUNACAAIAE7AQwMBwsgBSgCKCEiIAVBMGogHBDugICAACAFQTBqQRBqIgEoAgAhIyAFQcgAaiAQEO+AgIAAIAUoAkghJCAFQdgAaiAREPCAgIAAIAUoAlghJSAFQegAaiAbEPGAgIAAIAUoAmghJiAFQfgAaiAHEPKAgIAAIAVB+ABqQRBqIicoAgAhKCAFQZABaiAIEPOAgIAAIBogBSkDMDcCACAaQQhqIAVBMGpBCGopAwA3AgAgGkEQaiABKQMANwIAIBkgBSkDSDcCACAZQQhqIAVByABqQQhqKQMANwIAIAUgDTYCuAEgBSALNgK0ASAFIAw2ArABIAUgDDYCrAFBACEDIAVBADYCqAEgBSAOICNqQXhxIiM2AtQBIAUgJCAjakEDakF8cSIkNgLoASAFICggJiAlICRqQQdqQXhxIiVqQQNqQXxxIilqQQNqQXxxIiYgBSgCkAFqQf//A2pBgIB8cSIqNgKkASAYQQhqIAVB2ABqQQhqKQMANwIAIBggBSkDWDcCACAXQQhqIAVB6ABqQQhqKQMANwIAIBcgBSkDaDcCACAWQQhqIAVBkAFqQQhqKQMANwIAIBYgBSkDkAE3AgAgFUEQaiAnKQMANwIAIBVBCGogBUH4AGpBCGopAwA3AgAgFSAFKQN4NwIAIAUgJTYC/AEgBSAmNgKQAiAFICk2AqQCIAUgCTsB0gIgBSAKOwHQAiAFIBs2AswCIAUgEDYCyAIgBSAGNgLEAiAFIBw2AsACQQAhAQJAA0AgDCABRg0BICIgAWogDCADaq03AwAgAyAPaiEDIAFBCGohAQwACwsgBSANNgK0BCAFICI2ArAEIAVByANqIAVBsARqIBoQ9ICAgAAgBSgCiAIgJWohAwJAIAUoAoQCIitBA3QiAUUNACADICJqQf8BIAH8CwALIAUoAuABICNqIScgBSgCjAIhLAJAIAUoAtwBIi1BA3QiAUUNACAnICJqQf8BIAH8CwALICIgJGoiAUEANgIMIAEgBSgC+AEiKDYCCCABIAUpAvABQiCJNwIAIAUoAuQBIS4CQCAoRQ0AIAFBEGpBACAo/AsACyAiICZqIgFBADYCDCABIAUoAqACIig2AgggASAFKQKYAkIgiTcCAAJAIChFDQAgAUEQakEAICj8CwALIAUgKTYCvAQgBSAiNgK4BCAFQdgCaiAFQbgEaiAVQfzEx4AAEPWAgIAAICEgJEEQajYCOCAhIC4gI2o2AjQgISAtNgIwICEgJzYCLCAhICwgJWo2AiggISArNgIkICEgAzYCICAhIAw2AhwgIUEANgIYICEgKjYCFCAhICI2AhAgBUEAOgDUAgJAQegARQ0AICFBPGogBUHIA2pB6AD8CgAACyAhICZBEGo2AqQBAkBB8ABFDQAgIUGoAWogBUHYAmpB8AD8CgAACyAhIAk7Aa4CICEgCjsBrAIgISAJOwGqAiAhIAo7AagCICFBoAJqIBRBCGopAgA3AgAgISAUKQIANwKYAiAhIAUtANQCOgCwAiAhIAIpAwA3AwAgIUIANwIIICEgICAJICAgCUkbIgE7Aa4CAkAgHUUNACAhIB02AgggISEDIB0oAgwiIkUNBCAhICI2AgwgIiAhNgIIIB0hAwwECyAeRQ0BICEgHjYCDCAhIQMgHigCCCIiRQ0CICEgIjYCCCAiICE2AgwgHiEDDAILIAAgHzYCCCAAIB02AgQgACAeNgIAIABBADsBDAwFCyAhQQA2AgwgISEdICEhHgwCCyAeICE2AghBACEdIAMhHgwBCyAdICE2AgwgAyEdCyAEIAFrIQQgAiACKQMAQgF8NwMAIB9BgIAkaiEfDAALCyAFQcAEaiSAgICAAAuVBAEKfyOAgICAAEHwAGsiAySAgICAACABLwESIQQgAS8BECEFAkACQAJAIAItAAINACAFIQIMAQsgAi8BACECIAMgASgCABDugICAACADKAIQIQYgA0EYaiABKAIIIgcQ74CAgAAgAygCGCEIIANBKGogB0EEdhDwgICAACADKAIoIQcgA0E4aiABKAIMEPGAgIAAIAMoAjghCSADQcgAaiABKAIEIgpBHG4iCxDygICAACAJIAcgCCAGIAQgBWxB//8DcSAEakEDdGpBB2pB+P///wFxakEDakH8////AXFqQQdqQfj///8BcWpBA2pB/P///wFxIQxBACEFIAMoAlghBAJAIApBG00NAEIBQSAgC0EEdEF/amdrrYanIQULIANB4ABqIAUQ84CAgAACQCACQQZ0QcAAaiIKIAQgDGpBA2pB/P///wFxIAMoAmAiBWpB//8DakGAgPz/AXEgBWtB/P///wFxIARrQfz///8BcSAJa0H4////AXEgB2tB/P///wFxIAhrQfj///8BcSAGa0EDdEFgcSIETQ0AIABBEGpBACkCyMTHgAA3AgAgAEEIakEAKQLAxMeAADcCACAAQQApArjEx4AANwIADAILIAQgCm4hBAsgAEEAOwEUIAAgBDsBEiAAIAI7ARAgACABKQIANwIAIABBCGogAUEIaikCADcCAAsgA0HwAGokgICAgAALmAEBBH8CQAJAIAENAEEAIQJBACEBQQAhA0EAIQRBACEFDAELQgFBICABQX9qZyIDa61C//8Dg4anIgG4RAAAAAAAAOo/ovwDIgJBJGwgAUEBdEEDakH8////B3EiBGohBUF/QQAgA2t0QX9zIQMLIAAgAzsBFCAAIAE2AgQgACACNgIAIAAgBTYCECAAIAQ2AgwgAEEANgIIC0UBAX8gAEEANgIIIAAgAUEPaiIBQQR2QT9qIgJBBnY2AgQgACACQQN2Qfj//x9xIgI2AgwgACACIAFBBHRBgH5xajYCAAtKAQF/IAAgATYCDCAAIAFBE2oiAkH8////AXFBcGo2AgQgACACIAFBAnRqIgJB/P///wdxQXBqNgIIIAAgAiABQQN0akF8cTYCAAtFAQF/IABBADYCCCAAIAFBH2oiAUEFdkE/aiICQQZ2NgIEIAAgAkEDdkH4//8PcSICNgIMIAAgAiABQQV0QYB4cWo2AgALmAEBBH8CQAJAIAENAEEAIQJBACEBQQAhA0EAIQRBACEFDAELQgFBICABQX9qZyIDa61C//8Dg4anIgG4RAAAAAAAAOo/ovwDIgJBHGwgAUEBdEEDakH8////B3EiBGohBUF/QQAgA2t0QX9zIQMLIAAgAzsBFCAAIAE2AgQgACACNgIAIAAgBTYCECAAIAQ2AgwgAEEANgIIC0IBAX8gACABNgIMIAAgAUETakF8cSICQXBqNgIEIAAgAiABQQJ0aiICQXBqNgIIIAAgAUEBdCACakED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cRuEIQMMJAsgA0Jvg0IQQgAgAkEBcRuEIQMMIwsgA0Jfg0IgQgAgAkEBcRuEIQMMIgsgA0K/f4NCwABCACACQQFxG4QhAwwhCyADQv9+g0KAAUIAIAJBAXEbhCEDDCALIANC/32DQoACQgAgAkEBcRuEIQMMHwsgA0L/e4NCgARCACACQQFxG4QhAwweCyADQv93g0KACEIAIAJBAXEbhCEDDB0LIANC/2+DQoAQQgAgAkEBcRuEIQMMHAsgA0L/X4NCgCBCACACQQFxG4QhAwwbCyADQv+/f4NCgMAAQgAgAkEBcRuEIQMMGgsgA0L//36DQoCAAUIAIAJBAXEbhCEDDBkLIANC//99g0KAgAJCACACQQFxG4QhAwwYCyADQv//e4NCgIAEQgAgAkEBcRuEIQMMFwsgA0L//3eDQoCACEIAIAJBAXEbhCEDDBYLIANC//9vg0KAgBBCACACQQFxG4QhAwwVCyADQv//X4NCgIAgQgAgAkEBcRuEIQMMFAsgA0L//79/g0KAgMAAQgAgAkEBcRuEIQMMEwsgA0L///9+g0KAgIABQgAgAkEBcRuEIQMMEgsgA0L///99g0KAgIACQgAgAkEBcRuEIQMMEQsgA0L///97g0KAgIAEQgAgAkEBcRuEIQMMEAsgA0L///93g0KAgIAIQgAgAkEBcRuEIQMMDwsgA0L///9vg0KAgIAQQgAgAkEBcRuEIQMMDgsgA0L///9fg0KAgIAgQgAgAkEBcRuEIQMMDQsgA0L///+/f4NCgICAwABCACACQQFxG4QhAwwMCyADQv////9+g0KAgICAAUIAIAJBAXEbhCEDDAsLIANC/////32DQoCAgIACQgAgAkEBcRuEIQMMCgsgA0L/////e4NCgICAgARCACACQQFxG4QhAwwJCyADQv////93g0KAgICACEIAIAJBAXEbhCEDDAgLIANC/////2+DQoCAgIAQQgAgAkEBcRuEIQMMBwsgA0L/////X4NCgICAgCBCACACQQFxG4QhAwwGCyADQv////+/f4NCgICAgMAAQgAgAkEBcRuEIQMMBQsgA0L//////36DQoCAgICAAUIAIAJBAXEbhCEDDAQLIANC//////99g0KAgICAgAJCACACQQFxG4QhAwwDCyADQv//////e4NCgICAgIAEQgAgAkEBcRuEIQMMAgsgA0L//////3eDQoCAgICACEIAIAJBAXEbhCEDDAELIANC//////8Pg0KAgICAgHBCACACQQFxG4QhAwsgACADPgIAIABBBGogA0IgiDwAAA8LAAu9AQEDfyOAgICAAEEQayIBJICAgIAAAkAgAEUNACABIAApAqgbNwMIIAAoAqgbIQIgACgCrBshAyAAQdQbahCkgICAACAAQegsaiABQQhqEMOAgIAAIABBgBJqIAFBCGoQjoGAgAAgAEEwaiABQQhqEI+BgIAAIABBGGogAUEIahDkgICAACAAQYQBaiABQQhqEMOAgIAAIAIgAEH4LEEDQQAgAygCDBGBgICAAICAgIAACyABQRBqJICAgIAAC+4BAQV/I4CAgIAAQcAAayICJICAgIAAIAJBHGogAEHICGoiAxCQgYCAACACKAI8IQQgAigCOCEFIAIoAhwhBiACQRxqIAMQkIGAgAACQCAERQ0AIAIoAihBqtWq1XogAigCPBshBANAIAVFDQEgAiAGKQIANwMQIAIgASkCADcDCCACQQhqEPuAgIAAIAQgARCRgYCAACAEQQxqIQQgBkEIaiEGIAVBf2ohBQwACwsCQCAAKALQCCIFRQ0AIAEoAgAgAygCACAFQTtsQQNBACABKAIEKAIMEYGAgIAAgICAgAALIAJBwABqJICAgIAACzQBAX8CQCAAKAIIIgJFDQAgASgCACAAKAIEIAJBAEEAIAEoAgQoAgwRgYCAgACAgICAAAsLmAEBA38jgICAgABBMGsiAiSAgICAACACIAEoAgQ2AiggAiABKAIIIgM2AiwgASgCACEEQWQhAQJAA0AgAUUNASACQQxqIAFBhKrIgABqKAIAQQJ0aiAENgIAIAQgAUHoqciAAGooAgAgA2xqIQQgAUEEaiEBDAALCwJAQSRFDQAgACACQQxqQST8CgAACyACQTBqJICAgIAACzcBAX8CQCAAKAIIIgJFDQAgASgCACAAKAIAIAJBLGxBA0EAIAEoAgQoAgwRgYCAgACAgICAAAsLzQIBBn8jgICAgABBMGsiASSAgICAACAAQZgBaiECIAAoArwBKAIAIQMCQCAALwHMASIERQ0AIANBPGogAygCECAEEJOBgIAAC0EAIQQgAkHQh8KAABCUgYCAACEFIABBADsBzAECQCAFQQFxDQAgASADQTxqIAMoAhAgAhCVgYCAAAJAAkAgAS8BAiIEDQAgASEDDAELIAAoArwBKAIAIQZBrM3HgAAhBQJAIARBAUcNACABQRRqQgA3AgAgAUEcakIANwIAIAFCADcCDCABQQE6AAggASADKAKYAkEBdDYCBCABQQRqIQULIAFBJGogACAGIAUQloGAgAAgAS8BKCIEDQEgAUEsaiABKAIkIgNBPGogAygCECACEJWBgIAAIAEvAS4iBA0BIAFBLGohAwsgACADLwEAOwHMAUEAIQQLIAFBMGokgICAgAAgBAs9ACAAKAIEIAFqIAJB//8DcUEkbGoiAiACLwEgQX9qIgI7ASACQCACQf//A3ENACAAIAAoAghBf2o2AggLC6oBAQJ/I4CAgIAAQSBrIgIkgICAgAAgAkEYaiAAQRhqIgMoAgA2AgAgAkEQaiAAQRBqKQIANwMAIAJBCGogAEEIaikCADcDACACIAApAgA3AwBBACEAAkAgAy8BACABLwEYRw0AIAIgARCXgYCAAEEBcUUNACACQQhqIAFBCGoQl4GAgABBAXFFDQAgAkEQaiABQRBqEJeBgIAAIQALIAJBIGokgICAgAAgAAtOAQF/I4CAgIAAQRBrIgQkgICAgAAgBEEMaiABIAIgAxCYgYCAAAJAIAQvAQ4iAw0AIAAgBC8BDDsBAAsgACADOwECIARBEGokgICAgAAL4gcBBH8jgICAgABB4BBrIgQkgICAgAACQAJAIAIgASgCvAEoAgBGDQAgBEEIaiABIAIgAxCZgYCAAAJAIAQvAQwiAUUNACAAIAE7AQQMAgsgAEEAOwEEIAAgBCgCCDYCAAwBCyAEQRBqIAEgAiADEJmBgIAAAkAgBC8BFCICRQ0AIAAgAjsBBAwBCyAEKAIQIQICQCABLwHMAUUNACAEQRhqIAJBPGogAigCECABQZgBaiIDEJWBgIAAAkACQCAELwEaIgVFDQAgBCAFOwEcIARCgBA3AsAQIARBsL/HgAA2ArgQIAQgBEEgajYCvBACQAJAAkAgBEG4EGogBEEcahCagYCAACIFQf//A3ENACAEKAK8ECEGIAQoAsQQIQcMAQsgBEG4EGpBoOnJgABB2AAQqICAgAAgBC8B0BANASAEQaAQakEQaiAEQbgQakEQaikCADcDACAEQaAQakEIaiIGIARBuBBqQQhqKQIANwMAIAQgBCkCuBA3A6AQAkAgBiAEQRxqEJqBgIAAQf//A3FFDQAgBEGgEGoQqYCAgAAMAgsgBEHUEGogBEGgEGoQqoCAgAAgBEGgEGoQqYCAgAAgBC8B3BANASAEKALYECEHIAQoAtQQIQYLIAYgBxCAgICAACAFQf//A3FFDQBBoOnJgAAgBiAHELaAgIAACyADQgA3AwBBACEFIANBGGpBADYCACADQRBqQgA3AwAgA0EIakIANwMADAELIAQvARghBQsgASAFOwHMAQsCQCABKAK4ASIDRQ0AIAFBADYCuAEgAUEAOwHOAQJAIAEgAxCbgYCAACIFQf//A3FFDQAgBCAFOwEeIARCgBA3AsAQIARBsL/HgAA2ArgQIAQgBEEgajYCvBACQAJAIARBuBBqIARBHmoQnIGAgAAiBUH//wNxRQ0AIARBuBBqQaDpyYAAQdwAEKiAgIAAIAQvAdAQDQIgBEGgEGpBEGogBEG4EGpBEGopAgA3AwAgBEGgEGpBCGoiBiAEQbgQakEIaikCADcDACAEIAQpArgQNwOgEAJAIAYgBEEeahCcgYCAAEH//wNxRQ0AIARBoBBqEKmAgIAADAMLIARB1BBqIARBoBBqEKqAgIAAIARBoBBqEKmAgIAAIAQvAdwQDQIgBCgC2BAhByAEKALUECEGDAELIAQoArwQIQYgBCgCxBAhBwsgBiAHEICAgIAAIAVB//8DcUUNAEGg6cmAACAGIAcQtoCAgAALIAMgAUGQAWoiBRCdgYCAACAFIAMQnoGAgAALIAEQn4GAgAAgACACNgIAIABBADsBBAsgBEHgEGokgICAgAALYwECfwJAAkAgAC0ABCICIAEtAARGDQBBACEDDAELQQEhAwJAAkAgAg4DAgABAgsgAC0AACABLQAARg8LIAAvAQAgAEECai0AAEEQdHIgAS8BACABQQJqLQAAQRB0ckYPCyADC+ACAQR/I4CAgIAAQRBrIgQkgICAgAAgASgCBCACaiEFAkADQCABLwFmIgZBAkkNASAFIAZBf2oiBkH//wNxQSRsai8BIA0BIAEgBjsBZiABIAIgBhDIgYCAAAwACwsgBEEMaiABIAIgAxDJgYCAAAJAAkAgBC0ADkUNACAAQQA7AQIgACAELwEMIgE7AQAgBSABQSRsaiIBIAEvASBBAWo7ASAMAQsCQCABLwFkRQ0AIABBgIAENgEADAELAkAgASgCDCIGIAEvAWYiB0sNAAJAIAEoAgggBrhEzczMzMzM7D+i/ANPDQAgAEGAgOgANgEADAILIABBgIAENgEADAELIAUgASACIAMgBxDKgYCAACIGQf//A3EiAkEkbGpBATsBICABIAEoAghBAWo2AggCQCACIAEvAWZHDQAgASAGQQFqOwFmCyAAIAY7AQAgAEEAOwECCyAEQRBqJICAgIAAC6wQARd/I4CAgIAAQbAEayIEJICAgIAAIAIoApgCIQUCQCADLQAERQ0AIAVCAUEgIAMoAgBBf2pna61C//8Dg4anIgYgBSAGSxshBQsgAigCoAIhBgJAIAMtAAxFDQAgBkIBQSAgAygCCEF/amdrrUL//wODhqciByAGIAdLGyEGCyACKAKcAiEIAkAgAy0AFEUNACAIQgFBICADKAIQQX9qZ2utQv//A4OGpyIHIAggB0sbIQgLIAIoAqQCIQkCQCADLQAcRQ0AIAlCAUEgIAMoAhhBf2pna61C//8Dg4anIgMgCSADSxshCQsgAi8BqgIhCiACLwGoAiELIAQgAUEYahDmgICAAAJAAkACQCAELwEEIgMNACAEKAIAIQcgBEEIaiAFEO6AgIAAIAQoAhghAyAEQSBqIAYQ74CAgAAgBCgCICEMIARBMGogBkEEdhDwgICAACAEKAIwIQ0gBEHAAGogCRDxgICAACAEKAJAIQ4gBEHQAGogCEEcbiIPEPKAgIAAIA4gDSAMIAMgCiALbEH//wNxQQN0IhAgCkEDdCIRaiISakEHakF4cSITakEDakF8cSIUakEHakF4cSINakEDakF8cSEMIAQoAmAhDkEAIQMCQCAIQRtNDQBCAUEgIA9BBHRBf2pna62GpyEDCyAEQegAaiADEPOAgIAAIARBmAFqIARBCGpBCGopAwA3AgAgBEGgAWogBEEIakEQaikDADcCACAEQbQBaiAEQSBqQQhqKQMANwIAIAQgEjYCjAEgBCAQNgKIASAEIBE2AoQBIAQgETYCgAEgBEEANgJ8IAQgEzYCqAEgBCAUNgK8ASAEIAQpAwg3ApABIAQgBCkDIDcCrAEgBCAOIAxqQQNqQXxxIg4gBCgCaGpB//8DakGAgHxxIhA2AnggBEHIAWogBEEwakEIaikDADcCACAEQdwBaiAEQcAAakEIaikDADcCACAEQfABaiAEQegAakEIaikDADcCACAEQYQCaiAEQdAAakEIaikDADcCACAEQYwCaiAEQdAAakEQaikDADcCACAEIA02AtABIAQgDjYC5AEgBCAMNgL4ASAEIAQpAzA3AsABIAQgBCkDQDcC1AEgBCAEKQNoNwLoASAEIAQpA1A3AvwBIAQgCjsBpgIgBCALOwGkAiAEIAk2AqACIAQgBjYCnAIgBCAINgKYAiAEIAU2ApQCIAQgASkCLDcDqAICQAJAAkAgEEGBgCRPDQAgBEGwAmogAUEsahDpgICAACAELwG0AiIDDQJBgIAkIRUgBEGwAmohAwwBCyAEQbgCaiAEQagCaiAQEOuAgIAAIAQvAcACIgMNASAEQbgCaiEDIAQoArwCIRULIAJBEGohCSAEQZQCaiEPIARB/AFqIRYgBEGQAWohFyALQQN0IQUgAygCACEIQQAhBkEAIQMDQCARIANGDQMgCCADaiARIAZqrTcDACAGIAVqIQYgA0EIaiEDDAALCyAHIAEoAig2AgAgASAHNgIoCyAAIAM7AQQMAQsgBCASNgKkBCAEIAg2AqAEIARBuANqIARBoARqIBcQ9ICAgAAgBCgC3AEgDWohBgJAIAQoAtgBIhdBA3QiA0UNACAGIAhqQf8BIAP8CwALIAQoArQBIBNqIQUgBCgC4AEhGAJAIAQoArABIhlBA3QiA0UNACAFIAhqQf8BIAP8CwALIAggFGoiA0EANgIMIAMgBCgCzAEiEjYCCCADIAQpAsQBQiCJNwIAIAQoArgBIRoCQCASRQ0AIANBEGpBACAS/AsACyAIIA5qIgNBADYCDCADIAQoAvQBIhI2AgggAyAEKQLsAUIgiTcCAAJAIBJFDQAgA0EQakEAIBL8CwALIAQgDDYCrAQgBCAINgKoBCAEQcgCaiAEQagEaiAWQfzEx4AAEPWAgIAAIAcgFEEQajYCOCAHIBogE2o2AjQgByAZNgIwIAcgBTYCLCAHIBggDWo2AiggByAXNgIkIAcgBjYCICAHIBE2AhwgB0EANgIYIAcgEDYCFCAHIAg2AhAgBEEAOgDEAgJAQegARQ0AIAdBPGogBEG4A2pB6AD8CgAACyAHIA5BEGo2AqQBAkBB8ABFDQAgB0GoAWogBEHIAmpB8AD8CgAACyAHIAo7Aa4CIAcgCzsBrAIgByAKOwGqAiAHIAs7AagCIAdBoAJqIA9BCGopAgA3AgAgByAPKQIANwKYAiAHIAQtAMQCOgCwAiAHIAEpAwA3AwAgB0IANwIIIAdBADsBrgIgASABKAJcIBVqNgJcIAEgASkDAEIBfDcDACAHIAIvAa4COwGuAiAHIAIvAawCOwGsAiAHQRBqIQUgBygCGCAHKAIQaiEDIAIvAa4CQQFqIREgAigCGCACKAIQaiEGAkADQCARQX9qIhFFDQEgBSAJIAMgBkEAIAcvAawCEKCBgIAAIQggBkEIaiEGIANBCGohAyAIQf//A3FFDQALIAEgBxCwgYCAACAAIAg7AQQMAQsCQCABKAJ0RQ0AIAEoAnAhAyABKAJsIQYDQCADRQ0BAkAgBigCACIRKAIAIAJHDQAgESAHNgIACyAGQQRqIQYgA0F/aiEDDAALCyAHIAI2AgwCQAJAIAIoAggiA0UNACAHIAM2AgggAyAHNgIMDAELIAdBADYCCCABIAc2AlQLIAIgBzYCCCAHIAIoAgwiAzYCDCACKAIIIQYCQAJAIANFDQAgAyAGNgIIDAELIAEgBjYCWAsgASACELCBgIAAIAAgBzYCACAAQQA7AQQLIARBsARqJICAgIAACzIBAX8CQCAAQYiuyoAAQdYAEJqAgIAAIgJB//8DcQ0AIAAgAS8BABClhICAACECCyACC+8GAwd/AX4FfyOAgICAAEHQAGsiAiSAgICAACACQQhqQQJqIAFBC2otAAA6AAAgAiABLwAJOwEIIAEtAAghAyABKAIEIQQgASgCACEFIAEoAgwhBiABKAIQIQcgABCBgoCAAAJAAkAgACgCkAFBFEECQQAgACgClAEoAgARgICAgACAgICAACIBDQBBASEGDAELIAIgAEGQAWoiCCkDACIJNwMQIAJBJGogAkEQaiAGIAcQgISAgAACQCACLwEsIgYNACACKAIoIQcgAigCJCEKAkACQCADQQFxRQ0AIAJBDGpBAmogAkEIakECai0AADoAACACIAIvAQg7AQwMAQsgAkEAOgBEIAJBMGogAkEQaiAFIAQQgISAgAACQCACLwE4IgZFDQAgB0UNAiAJpyAKIAdBAEEAIAlCIIinKAIMEYGAgIAAgICAgAAMAgsgAi0ARCEDIAIoAjQhBCACKAIwIQULIAEgAzoACCABIAQ2AgQgASAFNgIAIAEgAi8BDDsACSABQQtqIAJBDmotAAA6AAAgASAHNgIQIAEgCjYCDCACQRBqIAAoArwBKAIAIgNBIGoiBCADKAIQIAcQwIGAgABBJiEGAkACQCACLwEYDQAgA0EQaiEFIAIoAhAhBgJAIAIoAhQiB0UNACAGIAEoAgwgB/wKAAALIAYgBSgCACILayEHIAEoAgAhDCABKAIQIQoCQAJAAkAgAS0ACEEBcQ0AIAJBJGogBCALIAEoAgQiDRDAgYCAAEEmIQYgAi8BLA0CIAIoAiQhBgJAIAIoAigiC0UNACAGIAwgC/wKAAALIAJBADoAICAGIAUoAgAiC2shDAwBCyACQQE6ACALIAIgDTYCNCACIAw2AjAgAiAKNgJAIAIgBzYCPCACIAItACAiDjoAOEEAIQYgAkEANgJIIAIgBTYCRCACQcwAaiADQagBaiALIAJBMGogAkHEAGoQxoGAgAACQAJAAkAgAi8BTg4CBQABC0EnIQYgDkEBcUUNAQwCC0EoIQYgDkEBcQ0BCyAEIAUoAgAiACAMIABqIA0QwYGAgAALIAQgBSgCACIAIAcgAGogChDBgYCAAAsgASAIEJ2BgIAADAELIAAgAi8BTDsBzgEgACABNgK4AQwBCyAIIAEQnoGAgAALIAJB0ABqJICAgIAAIAYLMgEBfwJAIABB3q7KgABB2gAQmoCAgAAiAkH//wNxDQAgACABLwEAEKWEgIAAIQILIAILcAECfyABKAIEIQIgASgCACEBAkAgACgCECIDRQ0AIAEgACgCDCADQQBBACACKAIMEYGAgIAAgICAgAALAkAgAC0ACEEBcQ0AIAAoAgQiA0UNACABIAAoAgAgA0EAQQAgAigCDBGBgICAAICAgIAACwsiACAAKAIAIAFBFEECQQAgACgCBCgCDBGBgICAAICAgIAAC9oCAQV/I4CAgIAAQcAAayIBJICAgIAAIAFBDGogAEEAIAAoArwBEM2BgIAAIAFBDGohAgJAIAEtABgNACABQRxqIABBhMXHgAAQuYGAgAAgACgCvAEiAiABKQIcNwIAIAJBCGogAUEcakEIaigCADYCACABQSxqIABBACABQRxqEM2BgIAAIAFBLGohAgsgACACLwEEOwHIASAAIAIoAgA7AcoBIAAoArwBIgIoAgAiAygCGCADKAIQIgNqIAIvAQRBA3RqIgQoAgAhBSACLwEGIQIgACAENgLAASAAIAUgA2ogAkEDdGo2AsQBAkAgAC8BzAFFDQAgABCSgYCAACICQf//A3FFDQAgASACOwE+IAFBPmoQ1YGAgAAgAEGYAWoiAkEYakEANgIAIAJBEGpCADcDACACQQhqQgA3AwAgAkIANwMAIABBADsBzAELIAFBwABqJICAgIAAC5MVBAh/AX4HfwF+I4CAgIAAQcABayIGJICAgIAAIARBA3QhByAAKAIAIQggAigCACEJIAEoAgAhCiADKAIAIQsgBSAALwGcAiIMIAEvAZwCIg0gDCANSRsiDSAFIA1JGyAEayENAkAgAikDACIOQoCAgIDAA4NCAFENACAOpyAIaiIPIAdqIRACQCAOQoCAgIDAAINQDQAgAEEcaiERIA8gBEEDdGohEiAQIQwgDSEFA0ACQAJAIAVFDQAgDCkDAEIDg0IBUg0BIAYgACgCKCAAKAIAIhNqNgIMIAZBEGogBkEMaiASIBNrEKGBgIAAIAYoAhAhFCARIBMgEyAGKAIUIhUoAgBqIBUoAgQQooGAgAAgBkEMaiAUEKOBgIAAIAwgDCkDAEJ8gzcDAAwBCwJAAkAgDSAALwGcAiIMRg0AIAxBAWohBSACKAIAIAAoAgBqIQwCQANAIAVBf2oiBUUNASAMKQMAIQ4gDEEIaiEMIA5CA4NCAVENAwwACwsgAiACKQMAQv////+/f4MiDjcDAAwECyACIAIpAwBC/////79/gyIONwMADAMLIAIpAwAhDgwCCyASQQhqIRIgDEEIaiEMIAVBf2ohBQwACwsCQCAOQoCAgICAAoNQDQAgAEGYAWohFCAPIARBA3RqIRIgECEMIA0hBQNAAkACQCAFRQ0AIAwtAAVBIHFFDQEgBiAAKAKUASAAKAIAIhNqNgIcIAZBIGogBkEcaiASIBNrEKSBgIAAIAYtAChFDQEgFCATIAYoAiQvAQAQpYGAgAAgBkEcaiAGKAIgEKaBgIAAIAwgDCkDAEL///////93gzcDAAwBCwJAAkAgDSAALwGcAiIMRg0AIAxBAWohBSACKAIAIAAoAgBqIQwCQANAIAVBf2oiBUUNASAMLQAFIRIgDEEIaiEMIBJBIHENAwwACwsgAiACKQMAQv//////fYMiDjcDAAwECyACIAIpAwBC//////99gyIONwMADAMLIAIpAwAhDgwCCyAMQQhqIQwgEkEIaiESIAVBf2ohBQwACwsCQCAOQoCAgICAAYNQDQAgAEEsaiETIBAhBSANIQwDQAJAAkACQAJAAkAgDEUNACAFKQMAQhqIpyISQf//A3ENAQwECyANIAAvAZwCIgxHDQEMAgsgEyAAKAIAIBIQk4GAgAAMAgsgDEEBaiEFIAIoAgAgACgCAGohDANAIAVBf2oiBUUNASAMKAECIRIgDEEIaiEMIBJBgPj/H3ENBAwACwsgAiACKQMAQv//////foM3AwAMAgsgBUEIaiEFIAxBf2ohDAwACwsCQCANQQN0IgxFDQAgEEEAIAz8CwALIAAvAZwCIQwLIAkgCGohBSALIApqIRIgAykDACEOAkACQCANIAxB//8DcUkNACAOQoCAgIBwgyEOIAIoAgAhEwwBCyACKQMAIhZCgICAgPADgyAOQoCAgICAvH+DhCAWIA6EQoCAgICAwACDhCEOIBanIRMLIAUgB2ohCiASIAdqIQwgAiAOIBOthDcDAAJAAkACQCADLQAEQRxxRQ0AIABBLGohCSAAQZgBaiEHIABBHGohCCASIARBA3QiE2ohEiAFIBNqIRMgCiEFA0AgDUUNAiAFQvz//5+AgHdC////n4CAdyAMKQMAIg5CA4NCAVEbIA6DNwMAAkAgDCkDACIOQgODQgFSDQAgBiABKAIoIAEoAgAiFGo2AiwgBkEwaiAGQSxqIBIgFGsQp4GAgAACQAJAIAYtADgNAEEAIQRBACEVDAELIAYoAjAgFGohBCAGKAI0IRULIAYgACgCKCAAKAIAIhRqNgI8IAZBwABqIAggFCAVEKiBgIAAAkAgBi8BSEUNAEEiIRUMBQsgBigCQCEVAkAgBigCRCIRQQJ0IgNFDQAgFSAEIAP8CgAACyAGIBE2AlAgBiAVIAAoAgBrNgJMAkAgBkE8aiATIBRrIAZBzABqEKmBgIAAQf//A3FFDQAgCCAAKAIAIBUgERCigYCAAEEhIRUMBQsgBSAFKQMAQnyDQgGENwMAIAIgAikDAEKAgICAwACENwMAIAwpAwAhDgsCQCAOQoCAgICAgAiDUA0AIAYgASgClAEgASgCACIRajYCVCAGQdgAaiAGQdQAaiASIBFrEKqBgIAAIAAoAgAhBCAGLwFYIRQCQAJAAkACQAJAIAEgAEcNACAAKAKcASAEaiAUQRxsaiIVIBUvARhBAWo7ARggBiAAKAKUASAAKAIAIhVqNgJcIAZB4ABqIAZB3ABqIBMgFWsQq4GAgAAgBi8BbEUNAUEgIRUMCQtBICEVIAAoApQBIARqIgNBfGooAgAgA0F4aigCAE8NCCAGIAA2AnAgBiABNgJ0IAZB+ABqIAcgBCABKAKcASARaiAUQRxsaiIVIAZB8ABqEKyBgIAAIAYtAHpFDQEgACgCnAEgACgCAGogBi8BeCIRQRxsaiIUIBQvARhBAWo7ARgMAwsgBigCZCEVIAYtAGhFDQEgByAAKAIAIBUvAQAQpYGAgAAgFS8BACAURw0BIAUgBSkDAEKAgICAgIAIhDcDAAwDCyAGQfwAaiAVIAEgABCtgYCAAAJAIAYvAZABRQ0AQR0hFQwHCyAGQQA2ApgBIAYgADYClAEgBkGeAWogByAAKAIAIAZB/ABqIBQgBkGUAWoQroGAgABBHiEVAkACQCAGLwGiAQ4CAAgBCyAGLwGeASAUIAYtAKABGyERDAILQR8hFQwGCyAVIBQ7AQAgBSAFKQMAQoCAgICAgAiENwMAIAIgAikDAEKAgICAgAKENwMADAELIAYgACgClAEgACgCACIUajYCpAEgBkGoAWogBkGkAWogEyAUaxCrgYCAAEEgIRUgBi8BtAENBCAGKAKsASEUAkAgBi0AsAFFDQAgByAAKAIAIBQvAQAQpYGAgAAgFC8BACARQf//A3FHDQAgBSAFKQMAQoCAgICAgAiENwMADAELIBQgETsBACAFIAUpAwBCgICAgICACIQ3AwAgAiACKQMAQoCAgICAAoQ3AwALAkAgDCgBAkGA+P8fcUUNACACIAIpAwBCgICAgIABhDcDAAJAIAEgAEcNACAFIAUpAwBC////n4CAf4MgDCkDACIOQoCAgOD//wCDhDcDACAAKAIwIAAoAgBqIA5CGoinQf//A3FBJGxqIhQgFC8BIEEBajsBIAwBCyAGQboBaiAJIAAoAgAgASgCMCABKAIAaiAMKQMAQhqIpyIUQf//A3FBJGxqIBQQr4GAgABBGyEVAkACQCAGLwG+AQ4CAQYAC0EcIRUMBQsCQAJAIAYtALwBRQ0AIAYvAboBIRQMAQsgDCkDAEIaiKchFAsgBSAUrUL//wODQhqGIAUpAwBC////n4CAf4OENwMACyASQQhqIRIgDEEIaiEMIBNBCGohEyAFQQhqIQUgDUF/aiENDAALCyANQQN0IgVFDQAgCiAMIAX8CgAAC0EAIRUgAC8BnAIgAS8BnAIiAE0NACAKIABBf2pB//8DcUEDdGoiACkDACIOQoCAgICAgAODQoCAgICAgANSDQAgACAOQv///////3yDNwMACyAGQcABaiSAgICAACAVC6QCAwZ/AX4CfyOAgICAAEEQayIDJICAgIAAAkACQCABKAIAIgRBfGooAgBFDQAgBEFwaiEFIARBdGohBiAEQXhqKAIAIgdBf2oiCCACELqBgIAAIgmncSEBIAlCOYinIQoDQCAEIAFqLAAAIgtFDQEgB0UNAQJAIAtBf0oNACAKIAtB/wBxRw0AIAIgBigCACAEaiABQQJ0aiILKAIARw0AIAUoAgAgBGogAUEDdGohAUEBIQcMAwsgB0F/aiEHIAFBAWogCHEhAQwACwtBACEBIANBDmpBADoAACADQQA7AQxBACEHQQAhCwsgACAHOgAIIAAgATYCBCAAIAs2AgAgACADLwEMOwAJIABBC2ogA0EOai0AADoAACADQRBqJICAgIAAC7EBACAAKAIAIAFqIAIgACgCCCABamsiAUEHdkH4//8PcWoiAEJ/QQAgA0ECdEEPakEEdiIDQcAAIAFBBHZBP3EiAWsiAiADIAJJGyICa0E/ca2IIAGthiAAKQMAhDcDACAAQQhqIQEgAyACayEAAkADQCAAQcEASQ0BIAFCfzcDACABQQhqIQEgAEFAaiEADAALCwJAIABFDQAgASABKQMAQn9BACAAa0E/ca2IhDcDAAsLNwEBfyAAKAIAIgIgASACIAJBdGooAgBqa0ECdmpBAToAACAAKAIAQXxqIgAgACgCAEF/ajYCAAukAgMGfwF+An8jgICAgABBEGsiAySAgICAAAJAAkAgASgCACIEQXxqKAIARQ0AIARBcGohBSAEQXRqIQYgBEF4aigCACIHQX9qIgggAhC6gYCAACIJp3EhASAJQjmIpyEKA0AgBCABaiwAACILRQ0BIAdFDQECQCALQX9KDQAgCiALQf8AcUcNACACIAYoAgAgBGogAUECdGoiCygCAEcNAEEBIQcgBSgCACAEaiABQQF0aiEBDAMLIAdBf2ohByABQQFqIAhxIQEMAAsLQQAhASAD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BiACIAEvAYgBOwEEIAJBCGpBsJLJgAAgAkEEahDtgICAAAJAIAIvARwiBEUNACAAIAQ7AQQMAgsgAi8BGCEJIAIvARohCiACKAIMIQQgAigCFCELIAIoAhAhByACQSBqIAIoAggiDBDugICAACACKAIwIQ0gAkE4aiAHEO+AgIAAIAIoAjghDiACQcgAaiAHQQR2EPCAgIAAIAIoAkghDyACQdgAaiALEPGAgIAAIAIoAlghECACQegAaiAEQRxuIhEQ8oCAgAAgECAPIA4gDSAKIAlsQf//A3FBA3QiEiAKQQN0IghqIhNqQQdqQXhxIhRqQQNqQXxxIg5qQQdqQXhxIg9qQQNqQXxxIRAgAigCeCEVQQAhDQJAIARBHEkNAEIBQSAgEUEEdEF/amdrrYanIQ0LIAJBgAFqIA0Q84CAgAAgAkG0AWogAkEgakEIaikDADcCACACQbwBaiACQSBqQRBqKQMANwIAIAJB0AFqIAJBOGpBCGopAwA3AgAgAiATNgKoASACIBI2AqQBIAIgCDYCoAEgAiAINgKcASACQQA2ApgBIAIgFDYCxAEgAiAONgLYASACIAIpAyA3AqwBIAIgAikDODcCyAEgAiAVIBBqQQNqQXxxIhIgAigCgAFqQf//A2pBgIB8cSIVNgKUASACQeQBaiACQcgAakEIaikDADcCACACQfgBaiACQdgAakEIaikDADcCACACQYwCaiACQYABakEIaikDADcCACACQaACaiACQegAakEIaikDADcCACACQagCaiACQegAakEQaikDADcCACACIA82AuwBIAIgEjYCgAIgAiAQNgKUAiACIAIpA0g3AtwBIAIgAikDWDcC8AEgAiACKQOAATcChAIgAiACKQNoNwKYAiACIAo7AcICIAIgCTsBwAIgAiALNgK8AiACIAc2ArgCIAIgBDYCtAIgAiAMNgKwAgJAAkAgBigCCCIHRQ0AIAcgBigCDCIENgIMDAELIAEgBigCDCIENgJUCwJAAkAgBEUNACAEIAYoAgg2AggMAQsgBSAGKAIINgIACyAGKAIQIQsCQCAGKAIUIgRFDQAgC0EAIAT8CwALIAEgASgCaCAGLwGuAmtBAWo2AmgCQCABLQCNAUECRw0AIAEtAIQBRQ0AAkAgASgCgAEiBCAGLwGuAiIHTw0AIAFBAToAjQEMAQsgASAEIAdrNgKAAQsgAkGwAmohDCACQZgCaiERIAJBrAFqIRYgCUEDdCENQQAhB0EAIQQCQANAIAggBEYNASALIARqIAggB2qtNwMAIAcgDWohByAEQQhqIQQMAAsLIAIgEzYCqAQgAiALNgKkBCACQbgDaiACQaQEaiAWEPSAgIAAIAIoAvgBIA9qIQcCQCACKAL0ASIWQQN0IgRFDQAgByALakH/ASAE/AsACyACKALQASAUaiENIAIoAvwBIRcCQCACKALMASIYQQN0IgRFDQAgDSALakH/ASAE/AsACyALIA5qIgRBADYCDCAEIAIoAugBIhM2AgggBCACKQLgAUIgiTcCACACKALUASEZAkAgE0UNACAEQRBqQQAgE/wLAAsgCyASaiIEQQA2AgwgBCACKAKQAiITNgIIIAQgAikCiAJCIIk3AgACQCATRQ0AIARBEGpBACAT/AsACyACIBA2ArAEIAIgCzYCrAQgAkHIAmogAkGsBGogEUH8xMeAABD1gICAACAGIA5BEGo2AjggBiAZIBRqNgI0IAYgGDYCMCAGIA02AiwgBiAXIA9qNgIoIAYgFjYCJCAGIAc2AiAgBiAINgIcIAZBADYCGCAGIBU2AhQgBiALNgIQIAJBADoAxAICQEHoAEUNACAGQTxqIAJBuANqQegA/AoAAAsgBiASQRBqNgKkAQJAQfAARQ0AIAZBqAFqIAJByAJqQfAA/AoAAAsgBiAJOwGsAiAGIAo7AaoCIAYgCTsBqAIgBkEBOwGuAiAGIAM2AgggBiACLQDEAjoAsAIgBkGgAmogDEEIaikCADcCACAGIAwpAgA3ApgCAkACQCADKAIMIgRFDQAgBiAENgIMIAQgBjYCCAwBCyAGQQA2AgwgBSAGNgIACyADIAY2AgwgASAGKQMAQgF8NwMIIAYgASkDACIaNwMAIAEgGkIBfDcDAAJAIAEoAnRFDQAgASgCcCEEIAEoAmwhBwNAIARFDQECQCAHKAIAIggoAgAgBkcNACABKAJUIQMgCEEBOgAIIAhBADYBBCAIIAM2AgALIAdBBGohByAEQX9qIQQMAAsLIABBADsBBCAAIAY2AgAgASgCfEEAOgAIDAELIAJBAToAtgQgAiABLwGIATsBtAQgAkG4BGpBsJLJgAAgAkG0BGoQ7YCAgAACQCACLwHMBCIERQ0AIAAgBDsBBAwBCyACLwHKBCENIAIvAcgEIQkgAigCxAQhBiACKALABCEEIAIoArwEIQcgAigCuAQhAyACQdAEaiABQRhqEOaAgIAAAkACQCACLwHUBCIMDQAgAigC0AQhCyACQdgEaiADEO6AgIAAIAIoAugEIQogAkHwBGogBBDvgICAACACKALwBCEOIAJBgAVqIARBBHYQ8ICAgAAgAigCgAUhDyACQZAFaiAGEPGAgIAAIAIoApAFIRAgAkGgBWogB0EcbiIVEPKAgIAAIBAgDyAOIAogDSAJbEH//wNxQQN0IhIgDUEDdCIIaiITakEHakF4cSIUakEDakF8cSIOakEHakF4cSIPakEDakF8cSEKIAIoArAFIQxBACEQAkAgB0EbTQ0AQgFBICAVQQR0QX9qZ2uthqchEAsgAkG4BWogEBDzgICAACACQegFaiACQdgEakEIaikDADcCACACQfAFaiACQdgEakEQaikDADcCACACQYQGaiACQfAEakEIaikDADcCACACIBM2AtwFIAIgEjYC2AUgAiAINgLUBSACIAg2AtAFIAJBADYCzAUgAiAUNgL4BSACIA42AowGIAIgAikD2AQ3AuAFIAIgAikD8AQ3AvwFIAIgDCAKakEDakF8cSIQIAIoArgFakH//wNqQYCAfHEiEjYCyAUgAkGYBmogAkGABWpBCGopAwA3AgAgAkGsBmogAkGQBWpBCGopAwA3AgAgAkHABmogAkG4BWpBCGopAwA3AgAgAkHUBmogAkGgBWpBCGopAwA3AgAgAkHcBmogAkGgBWpBEGopAwA3AgAgAiAPNgKgBiACIBA2ArQGIAIgCjYCyAYgAiACKQOABTcCkAYgAiACKQOQBTcCpAYgAiACKQO4BTcCuAYgAiACKQOgBTcCzAYgAiANOwH2BiACIAk7AfQGIAIgBjYC8AYgAiAENgLsBiACIAc2AugGIAIgAzYC5AYgAiABKQIsNwP4BgJAAkACQCASQYGAJE8NACACQYAHaiABQSxqEOmAgIAAIAIvAYQHIgwNAkGAgCQhFSACQYAHaiEEDAELIAJBiAdqIAJB+AZqIBIQ64CAgAAgAi8BkAciDA0BIAJBiAdqIQQgAigCjAchFQsgAkHkBmohDCACQcwGaiERIAJB4AVqIRYgCUEDdCEDIAQoAgAhBkEAIQdBACEEA0Ag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KAIQNgIcIAMgAykCCDcCFCADQSBqIANBFGogAS8BigFBf2pB//8DcRDPgYCAACAAQQE6AAwgACADLwEkOwEEIAAgAygCICIBNgIAIABBACADKAIoIAMtADAbNgIIIAAgAS8BrAJBf2o7AQYMAgsgAEEBOgAMIABBADoACCAAIAEoAlgiATYCACAAIAEvAa4CQX9qOwEEIAAgAS8BrAJBf2o7AQYMAQsgA0E0aiABQQAQu4GAgAAgAyADKAI8NgJIIAMgAykCNDcCQCADQcwAaiADQcAAakEBEN+BgIAAAkAgAy0AXA0AIABBAToADCAAIAMoAlQ2AgggACADLwFQOwEEIAAgAygCTCIBNgIAIAAgAS8BrAJBf2o7AQYMAQsgAEIANwIAIABBCGpCADcCAAsgA0HgAGokgICAgAALcQECfyOAgICAAEEQayICJICAgIAAIAJBBGogAEEAELuBgIAAAkACQCABKAIAIgMgAigCBCIARw0AIAEvAQQgAi8BCE8hAQwBCwNAIAAoAgwiAEEARyEBIAAgA0YNASAADQALCyACQRBqJICAgIAAIAEL+QIBBn8jgICAgABBIGsiAiSAgICAAAJAAkACQAJAIAEtACxFDQAgAUEkaiEDIAEvASohBCABLwEoIQUgASgCJCEGIAJBADoABCABLwEwIQcgAS0AIEEBcUUNASABIAdBAWoiBTsBMCAFQf//A3EgBEH//wNxSQ0CIAJBCGogARC0gYCAACADQQhqIAJBCGpBCGooAgA2AgAgAyACKQIINwIAIAEtACxFDQIgASABLwEoOwEwDAILIABCADcCACAAQQhqQgA3AgAMAgsCQCAHQf//A3EiBEUNAAJAIAQgBUH//wNxRw0AIANCADcCACADQQhqQQA2AgAMAgsgASAHQX9qOwEwDAELIAJBFGogARC0gYCAACADQQhqIAJBFGpBCGooAgA2AgAgAyACKQIUNwIAIAEtACxFDQAgASABLwEqQX9qOwEwCyAAQQA7AQYgACAHOwEEIAAgBjYCACAAQQE6AAwgACACLQAEOgAICyACQSBqJICAgIAAC7sBAQR/AkAgACgCdEUNACAAKAJwIQIgACgCbCEDA0AgAkUNAQJAIAMoAgAiBCgCACABRw0AAkAgASgCCCIFDQAgASgCDCEFCyAEQQA2AQQgBCAFNgIACyADQQRqIQMgAkF/aiECDAALCyABKAIMIQICQAJAIAEoAggiA0UNACADIAI2AgwMAQsgACACNgJUCyABKAIIIQMCQAJAIAJFDQAgAiADNgIIDAELIAAgAzYCWAsgACABELCBgIAAC8QBAgN/AX4jgICAgABBMGsiAySAgICAAAJAAkAgAi8BBCIEIAEvAYgBSQ0AIABCADcCACAAQQhqQgA3AgAMAQsgAigCACEFIANBDGogASACLQAIELuBgIAAIANBGGogA0EMaiAFEM+BgIAAAkAgAy0AKA0AIAAgAykDGCIGPgIAIABBAToADCAAIAMoAiA2AgggACAEOwEGIABBBGogBkIgiD0BAAwBCyAAQgA3AgAgAEEIakIANwIACyADQTBqJICAgIAACzgCAX8BfiOAgICAAEEQayIBJICAgIAAIAEgADYCDCABQQxqEKKEgIAAIQIgAUEQaiSAgICAACACC6QCAQJ/I4CAgIAAQSBrIgMkgICAgAACQAJAAkACQAJAAkACQAJAIAJBA3EOBAYAAQEGCyABLQCNAQ4DAQIDAQsgAEEAOgAIIABBADYCBCAAIAEoAlQ2AgAMBQsgA0EIaiABQQAQu4GAgAAgA0EIaiEBDAILIANBADoAHCADQQA2AhggAyABKAJUNgIUIANBFGohAQwBCyABKAJ8IQELIAAgASkCADcCACAAQQhqIAFBCGooAgA2AgAMAQsgAUHYAGohAiABLwGKASEBA0ACQCABQf//A3EgAigCACICLwGuAiIESw0AIABBADoACCAAQQA7AQYgACACNgIAIAAgBCABazsBBAwCCyACQQhqIQIgASAEayEBDAALCyADQSBqJICAgIAAC8sOARh/I4CAgIAAQcAEayIDJICAgIAAIAAoAhQhBAJAAkACQCAALwEaIAAoAgQiBS8BmgJBf2pB//8DcUcNACAAKAIQIQYgA0EIaiABQRhqEOaAgIAAIAMvAQwiBQ0CIAIvARAhByACLwESIQUgAygCCCEIIANBEGogAigCABDugICAACADKAIgIQkgA0EoaiACKAIIIgoQ74CAgAAgAygCKCELIANBOGogCkEEdhDwgICAACADKAI4IQogA0HIAGogAigCDBDxgICAACADKAJIIQwgA0HYAGogAigCBCINQRxuIg4Q8oCAgAAgDCAKIAsgCSAHIAVsQf//A3FBA3QiByAFQQN0Ig9qIhBqQQdqQXhxIhFqQQNqQXxxIhJqQQdqQXhxIhNqQQNqQXxxIQsgAygCaCEJQQAhBSANQRtNDQFCAUEgIA5BBHRBf2pna62GpyEFDAELIAUgBS8BngJBAWo7AZ4CIAAgACgCCCICQQhqNgIIIAAoAgQoAgAhByACKAIIIQJBACEFIABBADoAHCAAQQA7ARggACAALwEaQQFqOwEaIAAgAiAHajYCDAwBCyADQfAAaiAFEPOAgIAAIANBoAFqIANBEGpBCGopAwA3AgAgA0GoAWogA0EQakEQaikDADcCACADQbwBaiADQShqQQhqKQMANwIAIAMgEDYClAEgAyAHNgKQASADIA82AowBIAMgDzYCiAEgA0EANgKEASADIBE2ArABIAMgEjYCxAEgAyADKQMQNwKYASADIAMpAyg3ArQBIAMgCSALakEDakF8cSIMIAMoAnBqQf//A2pBgIB8cSINNgKAASADQdABaiADQThqQQhqKQMANwIAIANB5AFqIANByABqQQhqKQMANwIAIANB+AFqIANB8ABqQQhqKQMANwIAIANBjAJqIANB2ABqQQhqKQMANwIAIANBlAJqIANB2ABqQRBqKQMANwIAIAMgEzYC2AEgAyAMNgLsASADIAs2AoACIAMgAykDODcCyAEgAyADKQNINwLcASADIAMpA3A3AvABIAMgAykDWDcChAIgA0GsAmogAkEQaigCADYCACADQaQCaiACQQhqKQIANwIAIAMgAikCADcCnAIgAyABKQIsNwOwAgJAAkACQCANQYGAJE8NACADQbgCaiABQSxqEOmAgIAAIAMvAbwCIgUNAkGAgCQhFCADQbgCaiECDAELIANBwAJqIANBsAJqIA0Q64CAgAAgAy8ByAIiBQ0BIANBwAJqIQIgAygCxAIhFAsgA0GcAmohDiADQYQCaiEVIANBmAFqIRYgAy8BrgIiF0EDdCEJIAMvAawCIhhBA3QhCiACKAIAIQdBACECIA8hBQJAA0AgCSACRg0BIAcgAmogBa03AwAgAkEIaiECIAUgCmohBQwACwsgAyAQNgKwBCADIAc2AqwEIANBwANqIANBrARqIBYQ9ICAgAAgAygC5AEgE2ohBQJAIAMoAuABIhBBA3QiAkUNACAFIAdqQf8BIAL8CwALIAMoArwBIBFqIQkgAygC6AEhFgJAIAMoArgBIhlBA3QiAkUNACAJIAdqQf8BIAL8CwALIAcgEmoiAkEANgIMIAIgAygC1AEiCjYCCCACIAMpAswBQiCJNwIAIAMoAsABIRoCQCAKRQ0AIAJBEGpBACAK/AsACyAHIAxqIgJBADYCDCACIAMoAvwBIgo2AgggAiADKQL0AUIgiTcCAAJAIApFDQAgAkEQakEAIAr8CwALIAMgCzYCuAQgAyAHNgK0BCADQdACaiADQbQEaiAVQfzEx4AAEPWAgIAAIAggEkEQajYCOCAIIBogEWo2AjQgCCAZNgIwIAggCTYCLCAIIBYgE2o2AiggCCAQNgIkIAggBTYCICAIIA82AhwgCEEANgIYIAggDTYCFCAIIAc2AhAgA0EAOgDMAgJAQegARQ0AIAhBPGogA0HAA2pB6AD8CgAACyAIIAxBEGo2AqQBAkBB8ABFDQAgCEGoAWogA0HQAmpB8AD8CgAACyAIIBc7Aa4CIAggGDsBrAIgCCAXOwGqAiAIIBg7AagCIAhBoAJqIA5BCGopAgA3AgAgCCAOKQIANwKYAiAIIAMtAMwCOgCwAiAIIAEpAwA3AwAgCEIANwIIIAhBADsBrgIgASABKAJcIBRqNgJcIAEgASkDAEIBfDcDACAIQQE7Aa4CIAggACgCACICNgIIIAhBEGohBwJAAkAgAigCDCIFRQ0AIAggBTYCDCAFIAg2AggMAQsgCEEANgIMIAEgCDYCWAsgAiAINgIMIAgoAhggCCgCECICaiIJKAIAIQogCC8BrgIhAUEAIQUgAEEANgIYIAAgATYCFCAAIAk2AgggACAHNgIEIABBADoAHCAAIAY2AhAgACAINgIAIAAgCiACajYCDCADQQA6ALwEDAELIAggASgCKDYCACABIAg2AigLIAAgBEEBajYCFCADQcAEaiSAgICAACAFC/8BAQh/I4CAgIAAQRBrIgMkgICAgAAgACgCFCEEIAAvARohBSAALwEYIQYgA0EEaiABIAAoAgAgAhCZgYCAAAJAIAMvAQgiAQ0AIAMoAgQiAigCGCACKAIQIgdqIggoAgAhCSACLwGuAiEKIAAgCCAFQQN0aiIINgIIIAAgAkEQajYCBCAAIAo2AhQgAEEANgIQIABBADYCGCAAQQA6ABwgACACNgIAIAAgCSAHajYCDCAIKAIAIQcgAigCECECIABBADoAHCAAIAY7ARggACAFOwEaIAAgBDYCFCAAIAcgAmogBkEDdGo2AgwgA0EAOgAMCyADQRBqJICAgIAAIAEL4wMDBH8CfgV/AkACQAJAAkAgA0HBAEkNACABQQhqIQRBACEFA0AgBSIGIAJPDQICQCABIAZBA3QiBWoiBykDACIIQn+FeSIJUEUNACAGQQFqIQUMAQsgBCAFaiEKIAMgCaciC2siDCENIAZBAWoiDiEFAkADQCANQcEASQ0BAkAgAiAFRw0AIABCADcCAA8LIAopAwBCf1INAiAKQQhqIQogBUEBaiEFIA1BQGohDQwACwsgDSAKKQMAQn+FeqdLDQALIAdCf0HAACALayINQT9xrYYgCIU3AwAgDEEGdiEFIAEgDkEDdGohAwJAA0AgBUUNASADQgA3AwAgA0EIaiEDIAVBf2ohBQwACwsgDEE/cUUNAyAKIAopAwBCf0EAIAxrQT9xrYiFNwMADAMLQQAhDQNAIA0gAkYNAkEBIQUgASANQQN0aiIKKQMAIgghCQJAA0AgAyAFRg0BIAggBUE/ca2IIAmDIQkgBUEBaiEFDAALCwJAIAlCAFINACANQQFqIQ0MAQsLIABBAToABCAAIA1BBnQgCXoiCadyNgIAIApCf0EAIANrQT9xrYggCYYgCIU3AwAPCyAAQgA3AgAPCyAAQgA3AgAPCyAAQQE6AAQgACAGQQZ0IA1B/wBxcjYCAAuqAQMEfwF+A38CQCAAKAIAIgJBfGooAgANAEEADwsgAkF0aiEDIAJBeGooAgAiBEF/aiIFIAEQuoGAgAAiBqdxIQAgBkI5iKchBwN/AkACQCACIABqLAAAIghBAEcgBEEAR3EiCUEBRw0AIAhBf0oNASAHIAhB/wBxRw0BIAEgAygCACACaiAAQQJ0aigCAEcNAQsgCQ8LIARBf2ohBCAAQQFqIAVxIQAMAAsLvgEBAX8jgICAgABBEGsiBCSAgICAAAJAAkBBAA0AIARBBGogASgCACACaiABKAIEIANBf2pBBXZBAWoQvoGAgAACQCAELQAIRQ0AIABBADsBCCAAIAM2AgQgACABKAIIIAJqIAQoAgRBBXRqNgIADAILIABBCGpBACgC8MTHgAA2AgAgAEEAKQLoxMeAADcCAAwBCyAAQQhqQQAoAvDEx4AANgIAIABBACkC6MTHgAA3AgALIARBEGokgICAgAALrgEAIAAoAgAgAWogAiAAKAIIIAFqayIBQQh2Qfj//wdxaiIAQn9BACADQR9qQQV2IgNBwAAgAUEFdkE/cSIBayICIAMgAkkbIgJrQT9xrYggAa2GIAApAwCENwMAIABBCGohASADIAJrIQACQANAIABBwQBJDQEgAUJ/NwMAIAFBCGohASAAQUBqIQAMAAsLAkAgAEUNACABIAEpAwBCf0EAIABrQT9xrYiENwMACwuVBAEIfyOAgICAAEEwayIEJICAgIAAIARBEGpBEGogACgCBCABaiIFIAJB//8DcUEcbGoiAkEQaiIGKQIANwMAIARBEGpBCGogAkEIaiIHKQIANwMAIARBEGpBGGogAkEYaiIIKAIANgIAIAQgAykCADcDCCAEIAIpAgA3AxACQCAAKAIQIAQvASQiA0kNACAAKAIAIQkgBEEIaiAEQRBqEMOBgIAAIABBLmoiCiAELwEmQQF0aiILIAsvAQBBf2o7AQAgCSABaiIBIANBAXRqQQA7AQAgCEEAKAKsksmAADYCACAGQQApAqSSyYAANwIAIAdBACkCnJLJgAA3AgAgAkEAKQKUksmAADcCAAJAA0AgASAALwEgIANBAWpxIgdB//8DcUEBdGoiAi8BACIGRQ0BIAUgBkEcbGoiBi8BFkUNASAGQRRqIAM7AQAgCiAFIAIvAQBBHGxqLwEWQQF0aiIGIAYvAQBBf2o7AQAgBSACLwEAQRxsaiIGIAYvARZBf2o7ARYgCiAFIAIvAQBBHGxqLwEWQQF0aiIGIAYvAQBBAWo7AQAgASADQf//A3FBAXRqIAIvAQA7AQAgByEDDAALCyAALwEsIQICQANAIAJB//8DcSIFRQ0BIAogBUEBdGovAQANASAAIAJBf2oiAjsBLAwACwsgASADQf//A3FBAXRqQQA7AQALIARBMGokgICAgAALXQEEfyAAKAIAIgBBEGohAiABKAIQIQMgASgCDCEEAkAgAS0ACEEBcQ0AIAIgACgCACIFIAUgASgCAGogASgCBBDBgYCAAAsgAiAAKAIAIgEgBCABaiADEMGBgIAAC7wFAwV/An4GfyOAgICAAEEwayIFJICAgIAAIAVBEGpBCGogAkEIaikCADcDACAFQRBqQRBqIAJBEGooAgA2AgBBACEGIAVBADsBKCAFQf//AzYCJCAFIAQpAgA3AwggBSACKQIANwMQIABBLmohByAAKAIEIAFqIQggACgCACABaiEJIAVBCGogAhCBhICAACEKIAAoAhBBf2qtIQsgBUEQaiECIAMhDAJAA0AgC1ANAQJAIAkgAC8BICAKp3EiDUH//wNxQQF0aiIOLwEAIgRFDQACQCAIIARBHGxqIgEvARgiDw0AIAVBCGogARDDgYCAACAHIAEvARZBAXRqIgYgBi8BAEF/ajsBACABQRhqQQAoAqySyYAANgIAIAFBEGpBACkCpJLJgAA3AgAgAUEIakEAKQKcksmAADcCACABQQApApSSyYAANwIAIAQgA0H//wNxIgEgBCABSRshAwwBCwJAAkAgAS8BFiIQIAZB//8DcSIRSQ0AIBAgEUcNASAPIAIvARhPDQELIA4gDDsBACACIA07ARQgByACLwEWQQF0aiIGIAYvAQBBAWo7AQAgACAALwEsIgYgAi8BFiICIAYgAksbOwEsIAcgAS8BFkEBdGoiAiACLwEAQX9qOwEAIAEvARYhBiAEIQwgASECCyACIAZBAWoiBjsBFiAKQgF8IQogC0J/fCELDAELCyAOIAw7AQAgAiANOwEUIAcgAi8BFkEBdGoiASABLwEAQQFqOwEAIAAgAC8BLCIBIAIvARYiAiABIAJLGzsBLAsgCSAFLwEkQQF0aiADOwEAIAggA0H//wNxQRxsaiICIAUpAxA3AgAgAkEIaiAFQRBqQQhqKQMANwIAIAJBEGogBUEQakEQaikDADcCACACQRhqIAVBEGpBGGooAgA2AgAgBUEwaiSAgICAACADC60BAQh/AkACQCABLQAIIgMgAi0ACHNBAXENACAAKAIEIgQgACgCACIAIAQbKAIAIQQgAigCECEFIAIoAgwhBiACKAIAIQcgASgCECEIIAEoAgwhCSABKAIAIQogACgCACEAAkAgA0EBcUUNACAKIAdHDQEMAgsgCiAEaiABKAIEIAcgAGogAigCBBCxgICAAEEBcQ0BC0EADwsgBCAJaiAIIAAgBmogBRCxgICAAAv8AgEEfyOAgICAAEEQayIFJICAgIAAIAUgBCkCADcDACABKAIEIAJqIQYCQANAIAEvAW4iB0ECSQ0BIAYgB0F/aiIHQf//A3FBHGxqLwEYDQEgASAHOwFuIAEgAiAH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HkEBdGoiASABLwEAQQFqOwEAIAAgAC8BJCIBIAIvAR4iAiABIAJLGzsBJAsgCCAELwEkQQF0aiADOwEAAkBBJEUNACAHIANB//8DcUEkbGogBEEIakEk/AoAAAsgBEEwaiSAgICAACADC5c0BAN/AX4XfwF+I4CAgIAAQfANayIDJICAgIAAIAAgATsBiAECQAJAAkAgAi0ABEUNAEEAIQQgA0EAOgAQIAMgAi8BADsBDCADIAIvAQIiBTYCCCADQRRqIAAgA0EIahC5gYCAACADLQAgRQ0AIANBJGogAEGExceAABC5gYCAAAJAIAMtADBFDQAgA0GYAWpBCGogA0EkakEIaigCADYCACADIAMpAiQ3A5gBQQIhBAsgA0HoAGpBCGogA0EUakEIaigCADYCACADQYABaiADQZgBakEIaigCADYCACADQQA6AJABIAMgAykCFDcDaCADQQE6AHQgAyADKQOYATcDeCADIAQ6AJQBIAMgBDoAhAEgA0EAOgCIASADQagBaiADQegAahC0gYCAAAJAAkAgAy0AsAFFDQACQEEkRQ0AIANB7AFqIANB6ABqQST8CgAACyADQQE6AJgCIAMgAykDqAEiBjcCkAIgAyAGQjCIp0F/ajsBnAIgA0HsAWohAgwBCwJAQSRFDQAgA0G4AWogA0HoAGpBJPwKAAALIANB4gFqQgA3AQAgA0IANwLcASADQbgBaiECCwJAQTRFDQAgA0E0aiACQTT8CgAAC0EAIQcCQANAIANBoAJqIANBNGoQt4GAgAAgAy0ArAJFDQEgAygCoAIiAigCGCACKAIQaiADLwGkAkEDdGopAwBCIYinQQFxIAdqIQcMAAsLIANBsAJqIAAgA0EUahCEgYCAACADLwG0AiICDQIgAC8BigEgBUF/c2pB//8DcSEIQQAhCSADKAKwAiEKDAELQQEhCQsgACgCVCECIANBuAJqIABB+IfCgABBjNTHgAAQzIGAgAAgA0EBOgDuAiADIAE7AewCIANB8AJqIAJBmAJqIANB7AJqEO2AgIAAAkACQCADLwGEAyICDQAgAy8BggMhCyADLwGAAyEMIAMoAvwCIQ0gAygC+AIhASADKAL0AiEFIAMoAvACIQ4gA0GIA2ogAEEYahDmgICAACADLwGMAyICDQAgAygCiAMhDyADQZADaiAOEO6AgIAAIAMoAqADIQIgA0GoA2ogARDvgICAACADKAKoAyEQIANBuANqIAFBBHYQ8ICAgAAgAygCuAMhESADQcgDaiANEPGAgIAAIAMoAsgDIRIgA0HYA2ogBUEcbiITEPKAgIAAIBIgESAQIAIgCyAMbEH//wNxQQN0IhQgC0EDdCIEaiIVakEHakF4cSIWakEDakF8cSIXakEHakF4cSIRakEDakF8cSEQIAMoAugDIRJBACECAkAgBUEbTQ0AQgFBICATQQR0QX9qZ2uthqchAgsgA0HwA2ogAhDzgICAACADQaAEaiADQZADakEIaikDADcCACADQagEaiADQZADakEQaikDADcCACADQbwEaiADQagDakEIaikDADcCACADIBU2ApQEIAMgFDYCkAQgAyAENgKMBCADIAQ2AogEIANBADYChAQgAyAWNgKwBCADIBc2AsQEIAMgAykDkAM3ApgEIAMgAykDqAM3ArQEIAMgEiAQakEDakF8cSISIAMoAvADakH//wNqQYCAfHEiFDYCgAQgA0HQBGogA0G4A2pBCGopAwA3AgAgA0HkBGogA0HIA2pBCGopAwA3AgAgA0H4BGogA0HwA2pBCGopAwA3AgAgA0GMBWogA0HYA2pBCGopAwA3AgAgA0GUBWogA0HYA2pBEGopAwA3AgAgAyARNgLYBCADIBI2AuwEIAMgEDYCgAUgAyADKQO4AzcCyAQgAyADKQPIAzcC3AQgAyADKQPwAzcC8AQgAyADKQPYAzcChAUgAyALOwGuBSADIAw7AawFIAMgDTYCqAUgAyABNgKkBSADIAU2AqAFIAMgDjYCnAUgAyAAKQIsNwOwBQJAAkACQAJAIBRBgYAkTw0AIANBuAVqIABBLGoQ6YCAgAAgAy8BvAUiAg0CQYCAJCETIANBuAVqIQIMAQsgA0HABWogA0GwBWogFBDrgICAACADLwHIBSICDQEgA0HABWohAiADKALEBSETCyAAQdQAaiEYIANBnAVqIQ4gA0GEBWohGSADQZgEaiEaIAxBA3QhDSACKAIAIQVBACEBQQAhAgNAIAQgAkYNAiAFIAJqIAQgAWqtNwMAIAEgDWohASACQQhqIQIMAAsLIA8gACgCKDYCACAAIA82AigMAQsgAyAVNgKsByADIAU2AqgHIANBwAZqIANBqAdqIBoQ9ICAgAAgAygC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CmogA0HICmogECACaxCngYCAAAJAAkAgAy0A1AoNAEEAIQ5BACEWDAELIAMoAswKIAJqIQ4gAygC0AohFgsCQCADKAK8ByIBKAIoIAEoAgAiAmoiBEF8aigCACAEQXhqKAIASQ0AIANB2ApqQQhqQgA3AwAgA0IANwPYCiADQgA3A/AKIANBAToA7AogAyADKAK4CkEBdDYC6AogA0G4B2ogACADQdgKahC9gYCAACICQf//A3ENCyADKAK8ByIBKAIAIQILIANB/ApqIAFBHGoiBCACIBYQqIGAgAACQAJAIAMvAYQLDQAgBCABKAIAIAMoAvwKIAMoAoALEKKBgIAADAELIBZBAnQhBCADKAK4CiINIQIDQCACIgFBAXQhAiABIA1rIARJDQALIBlCADcDACAZQQhqQgA3AwAgA0EBOgCUCyADIAE2ApALIANCADcDiAsgA0G4B2ogACADQYgLahC9gYCAACICQf//A3ENCyADKAK8ByEBCyADIAEoAiggASgCACIEajYCqAsgAygCxAchAiADKALAByELIANBrAtqIAFBHGoiGiAEIBYQqIGAgAACQCADLwG0C0UNAEEiIQIMCwsgAygCrAshDQJAIAMoArALIhZBAnQiFUUNACANIA4gFfwKAAALIAEoAgAhDiADIBY2ArwLIAMgDSAOazYCuAsCQCADQagLaiACIARrIANBuAtqEKmBgIAAQf//A3FFDQAgGiABKAIAIA0gFhCigYCAAEEhIQIMCwsgAiACKQMAQnyDQgGENwMAIAsgCykDAEKAgICAwACENwMAIBApAwAhBgsCQAJAIAZCgICAgICACINCAFINACADKAK8ByEBDAELIAMgBSgCpAEgBSgCECIEajYCwAsgA0HEC2ogA0HAC2ogECAEaxCqgYCAACADLwHECyEWIAUoAqwBIQsCQCADKAK8ByIBKAKUASABKAIAIgJqIg1BfGooAgAgDUF4aigCAEkNACADQcgLakEIakIANwMAIANCADcDyAsgA0IANwPgCyADQQE6ANwLIAMgAygCtApBAXQ2AtgLIANBuAdqIAAgA0HIC2oQvYGAgAAiAkH//wNxDQsgAygCvAciASgCACECCyADQewLaiABQRBqIg0gAkEAIAsgBGogFkEcbGoiCygCBCALLQAIQQFxGyALKAIQaiIEEMCBgIAAAkACQCADLwH0Cw0AIA0gASgCACADKALsCyADKALwCxDBgYCAAAwBCyADKAK8CiINIQIDQCACIgFBAXQhAiABIA1rIARJDQALIANB+AtqQRBqQgA3AwAgA0H4C2pBCGpCADcDACADQgA3A/gLIANBAToAlAwgAyABNgKQDCADQbgHaiAAIANB+AtqEL2BgIAAIgJB//8DcQ0LIAMoArwHIQELIAEoAgAhBCADQZgMaiALIBQgARCtgYCAACADLwGsDCICDQogA0EANgK0DCADIAE2ArAMIANBugxqIAFBmAFqIAQgA0GYDGogFiADQbAMahCugYCAACADQboMaiEBIAMtALwMIQICQAJAAkACQCADLwG+DA4CAwEAC0GszceAACECDAELIANBwAxqQQhqQgA3AwAgA0IANwPADCADQgA3A9gMIANBAToA1AwgAyADKAK0CkEBdDYC0AwgA0HADGohAgsgA0G4B2ogACACEL2BgIAAIgJB//8DcQ0LIAMoArwHIgEoAgAhBCADQeQMaiALIBQgARCtgYCAACADLwH4DCICDQsgA0EANgKADSADIAE2AvwMIANBhA1qIAFBmAFqIAQgA0HkDGogFiADQfwMahCugYCAACADLwGIDSICDQsgAyADLwGEDTsBig0gA0GKDWohASADLQCGDSECCwJAIAJB/wFxRQ0AIAEvAQAhFgsgAyADKAK8ByIBKAKUASABKAIAIgRqNgKMDSADKALAByELIANBkA1qIANBjA1qIAMoAsQHIgIgBGsQq4GAgAACQCADLwGcDUUNAEEgIQIMCwsgAygClA0hDQJAAkAgAy0AmA1FDQAgAUGYAWogASgCACANLwEAEKWBgIAAQoCAgICAgAghBiACIQQgDS8BACAWQf//A3FGDQELIA0gFjsBACACIAIpAwBCgICAgICACIQ3AwBCgICAgIACIQYgCyEECyAEIAQpAwAgBoQ3AwAgECkDACEGCwJAIAZCGoinIgRB//8DcSINRQ0AIANBoA1qQQhqIAUoAkAgBSgCEGogDUEkbGoiAkEIaikCADcDACADQaANakEQaiACQRBqKQIANwMAIANBoA1qQRhqIAJBGGooAgA2AgAgAyACKQIANwOgDSADQcINaiABQSxqIAEoAgAgA0GgDWogBBCvgYCAACADQcINaiEEIAMtAMQNIQICQAJAAkACQCADLwHGDQ4CAwEAC0GszceAACECDAELIBNCADcCACATQQhqQgA3AgAgE0EQakIANwIAIANBAToAzA0gAyADKAKwCkEBdDYCyA0gA0HIDWohAgsgA0G4B2ogACACEL2BgIAAIgJB//8DcQ0LIANB6A1qIAMoArwHIgFBLGogASgCACADQaANaiAQKQMAQhqIpxCvgYCAACADLwHsDSICDQsgAyADLwHoDTsB7g0gA0HuDWohBCADLQDqDSECCwJAAkAgAkH/AXFFDQAgBC8BACEEDAELIBApAwBCGoinIQQLIAMoAsAHIgsgCykDAEKAgICAgAGENwMAIAMoAsQHIgIgAikDAEL///+fgIB/gyAErUL//wODQhqGhDcDAAsgAy8B0AciBCABLwGcAkF/akH//wNxRg0AIAMgBEEBajsB0AcgAyACQQhqNgLEBwwBCyADQQE6ANQHDAALCyASLQAEQQJxDQELIAMgAygCyAdBAWo2AsgHCyAPIAUvAa4CQX9qQf//A3FHDQMgACAFELCBgIAADAMLIA0gEEEBakH//wNxIgQgDSAESxshDQsgAUEEaiEBIAJBAWohAgwACwsLIAkNAQsgACAKEM6BgIAACyADQfANaiSAgICAACACC5YDAgF/AX4jgICAgABB4AFrIgQkgICAgAAgBEEIaiABIAIQuYGAgAACQAJAAkACQCADLQAMRQ0AIARBGGogASADELmBgIAAIARBGGohAQwBCyAEQShqIAEgAi0ACBC1gYCAACAEQShqIQEgBC0ANEUNAQsgBEE4akEIaiAEQQhqQQhqKAIANgIAIARB0ABqIAFBCGooAgA2AgAgBCAEKQIINwM4IARBAToAYCAEQQI6AGQgBEEBOgBEIARBAjoAVCAEQQE6AFggBCABKQIANwNIIARB6ABqIARBOGoQtIGAgAACQAJAIAQtAHBFDQACQEEkRQ0AIARBrAFqIARBOGpBJPwKAAALIARBAToA2AEgBCAEKQNoIgU3AtABIAQgBUIgiD0B3AEgBEGsAWohAQwBCwJAQSRFDQAgBEH4AGogBEE4akEk/AoAAAsgBEGiAWpCADcBACAEQgA3ApwBIARB+ABqIQELQTRFDQEgACABQTT8CgAADAELIABCADcCJCAAQSpqQgA3AQALIARB4AFqJICAgIAAC/0CAQR/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EGohAgJAA0AgBkF/aiIGRQ0BIAItAAUhFCACQQhqIQIgFEEgcQ0DDAALCyAPIA8pAwBC//////99gyIXNwMADAQLIA8gDykDAEL//////32DIhc3AwAMAwsgDykDACEXDAILIAJBCGohAiAUQQhqIRQgBkF/aiEGDAALCwJAIBdCgICAgIABg1ANACALIQYgECECA0ACQAJAAkACQAJAIAJFDQAgBikDAEIaiKciFEH//wNxDQEMBAsgECAFLwGsAiICRw0BDAILIAogBSgCECAUEJOBgIAADAILIAJBAWohBiAPKAIAIAUoAhBqIQIDQCAGQX9qIgZFDQEgAigBAiEUIAJBCGohAiAUQYD4/x9xDQQMAAsLIA8gDykDAEL//////36DNwMADAILIAZBCGohBiACQX9qIQIMAAsLAkAgEEEDdCICRQ0AIAtBACAC/AsACyATQQFqIRMMAAsLQgFBICASQQR0QX9qZ2uthqchBgwDCyAAIAUQuIGAgAAMAQsCQCAAKAJ0RQ0AIAAoAnAhAiAAKAJsIQYDQCACRQ0BAkAgBigCACIUKAIAIAVHDQACQCAULwEEIgggB08NACAUQQA2AQQMAQsgFCAIIAdrOwEECyAGQQRqIQYgAkF/aiECDAALCyAFIA07Aa4CCyAEIAdqIQQMAQsLIAVBmAJqIRIgBCAHaiEEIANBkAFqIAYQ84CAgAAgA0HEAWogA0EwakEIaikDADcCACADQcwBaiADQTBqQRBqKQMANwIAIANB4AFqIANByABqQQhqKQMANwIAIAMgFTYCuAEgAyATNgK0ASADIBQ2ArABIAMgFDYCrAFBACEGIANBADYCqAEgAyAONgLUASADIA82AugBIAMgAykDMDcCvAEgAyADKQNINwLYASADIBYgEWpBA2pBfHEiEyADKAKQAWpB//8DakGAgHxxIgc2AqQBIANB9AFqIANB2ABqQQhqKQMANwIAIANBiAJqIANB6ABqQQhqKQMANwIAIANBnAJqIANBkAFqQQhqKQMANwIAIANBuAJqIANB+ABqQRBqKQMANwIAIANBsAJqIANB+ABqQQhqKQMANwIAIAMgEDYC/AEgAyATNgKQAiADIBE2AqQCIAMgAykDWDcC7AEgAyADKQNoNwKAAiADIAMpA5ABNwKUAiADIAMpA3g3AqgCIAMgCjsB0gIg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BSAQIQwgECEBA0ACQAJAIAVFDQAgAS0ABUEgcUUNASAEIAYoAqQBIAYoAhAiCmo2AoAEIARBhARqIARBgARqIAwgCmsQpIGAgAAgBC0AjARFDQEgCyAKIAQoAogELwEAEKWBgIAAIARBgARqIAQoAoQEEKaBgIAAIAEgASkDAEL///////93gzcDAAwBCwJAAkAgDyAGLwGsAiIBRg0AIAFBAWohBSAJKAIAIAYoAhBqIQECQANAIAVBf2oiBUUNASABLQAFIQwgAUEIaiEBIAxBIHENAwwACwsgCSAJKQMAQv//////fYMiCDcDAAwECyAJIAkpAwBC//////99gyIINwMADAMLIAkpAwAhCAwCCyAFQX9qIQUgDEEIaiEMIAFBCGohAQwACwsCQCAIQoCAgICAAYNQDQAgBkE8aiEKIA8hASAQIQUDQAJAAkACQAJAAkAgAUUNACAFKQMAQhqIpyIMQf//A3ENAQwECyAPIAYvAawCIgFHDQEMAgsgCiAGKAIQIAwQk4GAgAAMAgsgAUEBaiEFIAkoAgAgBigCEGohAQNAIAVBf2oiBUUNASABKAECIQYgAUEIaiEBIAZBgPj/H3ENBAwACwsgCSAJKQMAQv//////foM3AwAMAgsgAUF/aiEBIAVBCGohBQwACwsgD0EDdCIBRQ0AIBBBACAB/AsADAALCwJAAkAgAC0AAUECcUUNACAHIAIgA0EBENGBgIAAIgFB//8DcUUNAQwCCyAHIAIgA0EAENGBgIAAIgFB//8DcQ0BCwJAIAAtACRBAnFFDQAgACgCICIBRQ0AIAEgAiADQQAQ0YGAgAAiAUH//wNxDQELIAAgAjsB8hFBACEBIABBADsB+BEgAEEAOwH0ESAAIAM7AfARIAAgAkF/ajsB+hEgACADQX9qOwH2ESAAQe4RaiIFIAUtAABBAXI6AAALIARBkARqJICAgIAAIAELHQACQCAARQ0AIAAgAEGoG2ogASACENmBgIAAGgsLHwAgACgCCCgCGCABKAIAQQJ0akHAAmogASgCBDYCAAvyAQECfyAAKAIYIgFBAToAmAIgASAAKAIYLwHIATsBkAIgASAAKAIYLwHKATsBkgIgASAAKAIYIgIpApgBNwLUASABQewBaiACQbABaigCADYCACABQeQBaiACQagBaikCADcCACABQdwBaiACQaABaikCADcCACABIAAoAhgtANIBQQFxOgCUAiABIAAoAhgtANEBQQFxOgCVAiABIAAoAgBBCHZBAXE6AJYCIAEgACgCGCIAKQLAAjcC8AEgAUGIAmogAEHYAmopAgA3AgAgAUGAAmogAEHQAmopAgA3AgAgAUH4AWogAEHIAmopAgA3AgALrQUDB38EfgN/I4CAgIAAQeAAayIBJICAgIAAAkACQCAAKAIYIgItAJgCRQ0AIAIvAZACIQMgAi8BkgIhBCACLQCUAiEFIAItAJUCIQYgAi0AlgIhBwJAQTxFDQAgASACQdQBakE8/AoAAAtCgAJCACAHQQFxGyEIDAELQQAhBSABQRhqQQA2AgBCACEIIAFBEGpCADcDACABQQhqQgA3AwAgAUEkakEAKQOIp8iAADcCACABQSxqQQApA5CnyIAANwIAIAFBNGpBACkDmKfIgAA3AgAgAUIANwMAIAFBACkDgKfIgAA3AhxBACEGQQAhA0EAIQQLIAIpApgBIQkgAiABKQMANwKYASACQaABaiIHKQIAIQogByABQQhqKQMANwIAIAJBqAFqIgcpAgAhCyAHIAFBEGopAwA3AgAgAkGwAWoiAigCACEHIAIgAUEYaigCADYCACABQcAAakEYaiIMIAc2AgAgAUHAAGpBEGoiDSALNwMAIAFBwABqQQhqIg4gCjcDACABIAk3A0AgACgCGBCSgYCAACEHIAAoAhghAgJAAkAgB0H//wNxRQ0AIAIgASkDQDcCmAEgAkGwAWogDCgCADYCACACQagBaiANKQMANwIAIAJBoAFqIA4pAwA3AgAMAQsgAiABKQIcNwLAAiACQdgCaiABQTRqKQIANwIAIAJB0AJqIAFBLGopAgA3AgAgAkHIAmogAUEkaikCADcCACAAIAA1AgBC//3//w+DIAiEPgIAIAAoAhggBkEBcToA0QEgACgCGCAFQQFxOgDSASAAKAIYIANB//8DcSICIAAvAfIRQX9qQf//A3EiAyACIANJGyAEQf//A3EiAiAALwHwEUF/akH//wNxIgAgAiAASRsQ3oGAgAALIAFB4ABqJICAgIAAIAcLqwgDB38BfgF/I4CAgIAAQYABayIDJICAgIAAAkACQAJAAkAgAkH//wNxIgQgAC8BygEiBU8NACADQQxqIAAoArwBIgYgBSACa0H//wNx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IAYgB2sQoYGAgAAgASgC+BAhByALIAIoAhAiCCAIIAEoAvwQIgkoAgBqIAkoAgQQooGAgAAgAUHwAGogBxCjgYCAACAFIAUpAwBCfIM3AwAMAQsCQAJAIBEgAi8BrAIiBUYNACAFQQFqIQMgDSgCACACKAIQaiEFAkADQCADQX9qIgNFDQEgBSkDACEKIAVBCGohBSAKQgODQgFRDQMMAAsLIA0gDSkDAEL/////v3+DIgo3AwAMBAsgDSANKQMAQv////+/f4MiCjcDAAwDCyANKQMAIQoMAgsgA0F/aiEDIAZBCGohBiAFQQhqIQUMAAsLAkAgCkKAgICAgAKDUA0AIAJBqAFqIQggESEDIAwhBiAMIQUDQAJAAkAgA0UNACAFLQAFQSBxRQ0BIAEgAigCpAEgAigCECIHajYCdCABQZARaiABQfQAaiAGIAdrEKSBgIAAIAEtAJgRRQ0BIAggAigCECABKAKUES8BABClgYCAACABQfQAaiABKAKQERCmgYCAACAFIAUpAwBC////////d4M3AwAMAQsCQAJAIBEgAi8BrAIiBUYNACAFQQFqIQMgDSgCACACKAIQaiEFAkADQCADQX9qIgNFDQEgBS0ABSEGIAVBCGohBSAGQSBxDQMMAAsLIA0gDSkDAEL//////32DIgo3AwAMBAsgDSANKQMAQv//////fYMiCjcDAAwDCyANKQMAIQoMAgsgA0F/aiEDIAZBCGohBiAFQQhqIQUMAAsLAkAgCkKAgICAgAGDUA0AIAJBPGohByARIQUgDCEDA0ACQAJAAkACQAJAIAVFDQAgAykDAEIaiKciBkH//wNxDQEMBAsgESACLwGsAiIFRw0BDAILIAcgAigCECAGEJOBgIAADAILIAVBAWohBSANKAIAIAIoAhBqIQIDQCAFQX9qIgVFDQEgAigBAiEDIAJBCGohAiADQYD4/x9xDQQMAAsLIA0gDSkDAEL//////36DNwMADAILIAVBf2ohBSADQQhqIQMMAAsLIBFBA3QiAkUNACAMQQAgAvwLAAsgACgCGCAEQX9qOwHKASAAKAIYQQEQ6YGAgAAgACgCGBCSgYCAACIEQf//A3ENAQtBACECDAULIAEgBDsBJiABQoAQNwKYESABQbC/x4AANgKQESABIAFB+ABqNgKUEQJAAkACQCABQZARaiABQSZqEPKBgIAAIgRB//8DcUUNACABQZARakGg6cmAAEEtEKiAgIAAIAEvAagRDQIgAUH4EGpBEGogAUGQEWpBEGopAgA3AwAgAUH4EGpBCGoiAiABQZARakEIaikCADcDACABIAEpApARNwP4EAJAIAIgAUEmahDygYCAAEH//wNxRQ0AIAFB+BBqEKmAgIAADAMLIAFBKGogAUH4EGoQqoCAgAAgAUH4EGoQqYCAgAAgAS8BMA0CIAEoAiwhBSABKAIoIQIMAQsgASgClBEhAiABKAKcESEFCyACIAUQgICAgAAgBEH//wNxRQ0AQaDpyYAAIAIgBRC2gICAAAsgACgCGCIEQgA3ApgBQQAhAiAEQbABakEANgIAIARBqAFqQgA3AgAgBEGgAWpCADcCACAAKAIYEJKBgIAAGgwECyABQShqIAMQsYGAgAAgAS8BLCICDQMCQAJAIAEoAihFDQAgAxDvgYCAACICQf//A3FFDQEMBQsCQCADKAK8ASIAKAIAIAMoAlhHDQAgAUH4AGogAEEBEM+BgIAAQZzNx4AAIQQCQCABLQCIAQ0AIAFB+BBqQQhqIAFB+ABqQQhqKAIANgIAIAEgASkCeDcD+BAgAUH4EGohBAsgACAEKQIANwIAIABBCGogBEEIaigCADYCACADKAK8ASIEKAIAIgAoAhggACgCEGogBC8BBCICQQN0aiIEIAAvAa4CIAJBf3NqQQN0IgJqKQMAIQoCQCACRQ0AIARBCGogBCAC/AoAAAsgBCAKNwMAIABBAToAsAIgAygCvAEiACgCACIEKAIYIAQoAhAiBGogAC8BBEEDdGoiAigCACEFIAAvAQYhACADIAI2AsABIAMgBSAEaiAAQQN0ajYCxAEMAQsgAxDvgYCAACICQf//A3ENBAtBACECIAMvAcwBRQ0DIAFBkBFqIAgQ7IGAgAAgAS0AmBFFDQMgAy8BiAFBA3QhACADKALEASADLwHIAUEDdGshBCABKQOQESEKA0AgAEUNBCAEIAo3AwAgAEF4aiEAIARBCGohBAwACwsgAygCvAEoAgAhBCABQeAAaiADELGBgIAAIAEvAWQiAg0CAkACQCAEIAMoArwBIgAoAgAiB0YNACABQdAAakEGaiEEIAFB0ABqQQRqIQUgAUHQAGpBCGogAEEIaigCADYCACABIAApAgA3A1AgASADLwHIATsBViABQdAAaiECDAELIAFBkBFqIABBARDPgYCAAAJAIAEtAKARRQ0AQZzNx4AAIQJBos3HgAAhBEGgzceAACEFDAELIAFBKGpBBmohBCABQShqQQRqIQUgAUEoakEIaiABQZARakEIaigCADYCACABIAEpApARNwMoIAFBKGohAgsgBC8BACEGIAUvAQAhBQJAAkACQAJAAkAgByACKAIAIgRHDQAgAC8BBCAFRw0AIAAvAQZB//8DcSAGRg0BCyADKALAASIAIAApAwBCgICAgIDAAIQ3AwAgBCgCGCAEKAIQaiAFQQN0aiIAIAApAwBCgICAgIDAAIQ3AwAgAygCvAEiACgCACACKAIARg0AIAMvAcwBDQFBvKfIgAAhCUGgp8iAACEHDAILIAAgAikCADcCACAAQQhqIAJBCGooAgA2AgAMAgsgAUGUAWohCSAIKQIAIQogCEIANwMAIAFB+ABqQRhqIAhBGGoiACgCADYCACABQfgAakEQaiAIQRBqIgcpAgA3AwAgAUH4AGpBCGogCEEIaiILKQIANwMAIAtCADcDACAHQgA3AwAgAEEANgIAIAFBAToAlAEgASAKNwN4IAMQkoGAgAAaIAMoArwBIQAgAUH4AGohBwsCQCADKAK4AUUNACAAKAIAIgBBqAFqIAAoAhAgAy8BzgEQpYGAgAAgAygCvAEhAAsgACACKQIANwIAIABBCGogAkEIaigCADYCAAJAIAktAABFDQAgCCAHKQIANwIAIAhBGGoiACAHQRhqKAIANgIAIAhBEGoiAiAHQRBqKQIANwIAIAhBCGogB0EIaikCADcCACADEJKBgIAAIgdB//8DcUUNACABIAc7AXQgAUH0AGoQ4IGAgAAgAEEANgIAIAJCADcDACAIQQhqQgA3AwAgCEIANwMAIANBADsBzAELIAMoArgBIgBFDQAgA0EANgK4ASADQQA7Ac4BAkAgAyAAKAIMIAAoAhBBACAAKAIAIAAtAAhBAXEiAhtBACAAKAIEIAIbENOBgIAAIgJB//8DcUUNACABIAI7AUAgAUHAAGoQ4YGAgAALIAAgA0GQAWoiAhCdgYCAACACIAAQnoGAgAALIAQoAhggBCgCECICaiAFQQN0aiIAKAIAIQUgAyAANgLAASADIAUgAmogBkEDdGo2AsQBIAAgACkDAEKAgICAgMAAhDcDACADLQCkAUUNASADIARBEGogAygCwAEiACAAKAIAIAQoAhBqIAQvAawCEOiBgIAADAELIANBARDYgYCAACACQQE6ALACAkADQCACKAIMIgVFDQEgAkEQaiAFQRBqIAYgAi8BrgJBf2pB//8DcUEDdGogBSgCGCAFKAIQaiIHQQAgAi8BrAIQoIGAgAAiAkH//wNxDQMgBykDACEKAkAgBS8BrgJBA3RBeGoiAEUNACAHIAdBCGogAPwKAAALIAcgAGogCjcDACAFQQE6ALACIAMoAnAhACADKAJsIQQgByEGIAUhAiADKAJ0RQ0AA0ACQCAADQAgByEGIAUhAgwCCwJAIAQoAgAiAigCACAFRw0AAkAgAi8BBCIGDQAgAiAFKAIIIgY2AgAgBi8BrgIhBgsgAiAGQX9qOwEECyAAQX9qIQAgBEEEaiEEDAALCwsgBiACLwGuAkF/akH//wNxQQN0aiINKAIAIAIoAhBqIQwgAi8BrAIhEQJAIA0pAwAiCkKAgICAwACDUA0AIAJBLGohCyARIQQgDCEFIAwhAANAAkACQCAERQ0AIAApAwBCA4NCAVINASABIAIoAjggAigCECIGajYCcCABQeAAaiABQfAAaiAFIAZrEKGBgIAAIAEoAmAhBiALIAIoAhAiByAHIAEoAmQiCSgCAGogCSgCBBCigYCAACABQfAAaiAGEKOBgIAAIAAgACkDAEJ8gzcDAAwBCwJAAkAgESACLwGsAiIARg0AIABBAWohBCANKAIAIAIoAhBqIQACQANAIARBf2oiBEUNASAAKQMAIQogAEEIaiEAIApCA4NCAVENAwwACwsgDSANKQMAQv////+/f4MiCjcDAAwECyANIA0pAwBC/////79/gyIKNwMADAMLIA0pAwAhCgwCCyAEQX9qIQQgBUEIaiEFIABBCGohAAwACwsCQCAKQoCAgICAAoNQDQAgAkGoAWohByARIQQgDCEFIAwhAANAAkACQCAERQ0AIAAtAAVBIHFFDQEgASACKAKkASACKAIQIgZqNgJ0IAFB+BBqIAFB9ABqIAUgBmsQpIGAgAAgAS0AgBFFDQEgByACKAIQIAEoAvwQLwEAEKWBgIAAIAFB9ABqIAEoAvgQEKaBgIAAIAAgACkDAEL///////93gzcDAAwBCwJAAkAgESACLwGs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qICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEIuCgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAu3AQECfyOAgICAAEEQayICJICAgIAAAkAgAEHZ8smAAEE9EJqAgIAAIgNB//8DcQ0AIAEtAAAhAyACQdnqwIAANgIAIAJBATYCBCACQQlBByADQQFxIgMbNgIMIAJB4azAgABB3JPAgAAgAxs2AgggACACEKeEgIAAIgNB//8DcQ0AIABBlvPJgABBBRCagICAACIDQf//A3ENACAAIAEvAQIQpYSAgAAhAwsgAkEQaiSAgICAACADC6YCAgp/AX4jgICAgABBEGsiASSAgICAACAAKAJYIQJBACEDAkADQCACKAIYIAIoAhAiBGogAi8BrgIiBUEDdGohBiADIAVqIQdBACEIAkADQAJAAkAgCCAFRg0AIAAvAYgBQQFqIQkgBiAIQX9zQQN0aigCACAEaiEKA0AgCUF/aiIJRQ0CIAopAwAhCyAKQQhqIQogC0L+//+DgIADg1ANAAsgAC8BigEgA2shCgwFCyAHIQMgAigCCCICDQMMAgsgAyAALwGKAU8NASAIQQFqIQggA0EBaiEDDAALCwtBACEKCyAKQQFqIQoCQANAAkAgCkF/aiIKDQBBACEJDAILIAFBCGogABCxgYCAACABLwEMIglFDQALCyABQRBqJICAgIAAIAkLyQIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEIKEgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEHDABCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQgoSAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC6cFAQR/I4CAgIAAQdAQayIDJICAgIAAAkACQAJAAkACQAJAAkACQAJAAkACQCABQf8BcQ4DAQACAwsgACgCGCIBLwHIASABKALEASkDAEKAgICAgIADg0KAgICAgIABUWpBAWohBAwHCyAAKAIYIgQvAcgBIgENAkEAIQEMAwsgAC8B8hEhBAwFCyADIAE6AA8gA0KAEDcCsBAgA0Gwv8eAADYCqBAgAyADQRBqNgKsECADQagQaiADQQ9qEKeCgIAAIgBB//8DcUUNAiADQagQakGg6cmAAEEyEKiAgIAAIAMvAcAQDQYgA0GQEGpBEGogA0GoEGpBEGopAgA3AwAgA0GQEGpBCGoiASADQagQakEIaikCADcDACADIAMpAqgQNwOQEAJAIAEgA0EPahCngoCAAEH//wNxRQ0AIANBkBBqEKmAgIAADAcLIANBxBBqIANBkBBqEKqAgIAAIANBkBBqEKmAgIAAIAMvAcwQDQYgAygCyBAhBCADKALEECEBDAMLIAEgBCgCxAEpAwBCgICAgICAA4NCgICAgICAAlFrQf//A3EhAQsgBBCogoCAACAALwHyESEEDAMLIAMoAqwQIQEgAygCtBAhBAsgASAEEICAgIAAIABB//8DcUUNAkGg6cmAACABIAQQtoCAgAAMAgtBACEBCyAAKAIYQQA6ANEBIAAoAhgoAsABIgUgBSkDAEKAgICAgMAAhDcDACAAKAIYIgAoAsQBIAAvAcgBQQN0ayABQQN0aiEFIARB//8DcSABayEBIAAoArwBKAIAQRBqIQQgACgCwAEhBgJAIAAtAOECQQNxQQFGDQAgAkEBcQ0AIAAgBCAGIAUgARDogYCAAAwBCyAAIAQgBiAFIAEQ54GAgAALIANB0BBqJICAgIAACzEBAX8CQCAAQZvyyYAAQT4QmoCAgAAiAkH//wNxDQAgACABLwEAEKWEgIAAIQILIAILpAMCAX8BfiAAKAIIIAEgAhCMgYCAAEEAIQMCQAJAAkACQAJAAkACQCAB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QQEQ34GAgAAgB0F/aiEHIAItAOwBDQAgASACKQLcATcCACABQQhqIAJB3AFqQQhqKAIANgIADAALCyACIAM7ATogAkE6ahCsgoCAAAALIAJB8AFqJICAgIAAC6kEAwN/AX4DfyACKAIAIAEoAgBqIQMCQAJAIAAvAfoRIgQgAC8B8hFBf2pB//8DcUYNACAALwH4EUEBSw0BCyADIAEvAZwCQX9qQf//A3FBA3RqIgUpAwAiBkKAgICAgIADg0KAgICAgIADUg0AIAUgBkL///////98gzcDACAALwH6ESEECyADIARB//8DcUEDdGohBwJAIAMgAC8B+BEiBEEDdGoiCCkDAEKAgICAgIADg0KAgICAgIACUg0AAkAgAyAEQX9qQf//A3FBA3RqIgkpAwBCA4NCAVINACABIAkQ6oGAgAAgAS8BnAJBAWohBSACKAIAIAEoAgBqIQQCQANAIAVBf2oiBUUNASAEKQMAIQYgBEEIaiEEIAZCA4NCAVENAgwACwsgAiACKQMAQv////+/f4M3AwALIAkgCSkDAEKDgID8//98gzcDACAIIAgpAwBC////////fIM3AwALAkAgBykDACIGQoCAgICAgAODQoCAgICAgAFRDQAPCyADIAAvAfoRQQFqQf//A3FBA3RqIQACQCAGQgODQgFSDQAgASAHEOqBgIAAIAEvAZwCQQFqIQUgAigCACABKAIAaiEEAkADQCAFQX9qIgVFDQEgBCkDACEGIARBCGohBCAGQgODQgFRDQIMAAsLIAIgAikDAEL/////v3+DNwMACyAHIAcpAwBCg4CA/P//fIM3AwAgACAAKQMAQv///////3yDNwMAC5wMBAZ/AX4HfwF+I4CAgIAAQdAAayIGJICAgIAAIAMoAgAgACgCACIHaiIIIARBA3QiCWohCiABKAIAIQsCQCADKQMAIgxCgICAgMAAg1ANACAAQRxqIQ0gCCAJaiEOIAohCSAFIQ8DQAJAAkAgD0UNACAJKQMAQgODQgFSDQEgBiAAKAIoIAAoAgAiEGo2AgggBkEMaiAGQQhqIA4gEGsQoYGAgAAgBigCDCERIA0gECAQIAYoAhAiEigCAGogEigCBBCigYCAACAGQQhqIBEQo4GAgAAgCSAJKQMAQnyDNwMADAELAkACQCAFIAAvAZwCIglGDQAgCUEBaiEPIAMoAgAgACgCAGohCQJAA0AgD0F/aiIPRQ0BIAkpAwAhDCAJQQhqIQkgDEIDg0IBUQ0DDAALCyADIAMpAwBC/////79/gyIMNwMADAQLIAMgAykDAEL/////v3+DIgw3AwAMAwsgAykDACEMDAILIA5BCGohDiAJQQhqIQkgD0F/aiEPDAALCwJAIAxCgICAgIACg1ANACAAQZgBaiERIAggBEEDdGohDiAKIQkgBSEPA0ACQAJAIA9FDQAgCS0ABUEgcUUNASAGIAAoApQBIAAoAgAiEGo2AhggBkEcaiAGQRhqIA4gEGsQpIGAgAAgBi0AJEUNASARIBAgBigCIC8BABClgYCAACAGQRhqIAYoAhwQpoGAgAAgCSAJKQMAQv///////3eDNwMADAELAkACQCAFIAAvAZwCIglGDQAgCUEBaiEPIAMoAgAgACgCAGohCQJAA0AgD0F/aiIPRQ0BIAktAAUhDiAJQQhqIQkgDkEgcQ0DDAALCyADIAMpAwBC//////99gyIMNwMADAQLIAMgAykDAEL//////32DIgw3AwAMAwsgAykDACEMDAILIAlBCGohCSAOQQhqIQ4gD0F/aiEPDAALCwJAIAxCgICAgIABg1ANACAAQSxqIRAgCiEPIAUhCQNAAkACQAJAAkACQCAJRQ0AIA8pAwBCGoinIg5B//8DcQ0BDAQLIAUgAC8BnAIiCUcNAQwCCyAQIAAoAgAgDhCTgYCAAAwCCyAJQQFqIQ8gAygCACAAKAIAaiEJA0AgD0F/aiIPRQ0BIAkoAQIhDiAJQQhqIQkgDkGA+P8fcQ0EDAALCyADIAMpAwBC//////9+gzcDAAwCCyAPQQhqIQ8gCUF/aiEJDAALCyACQQN0IQ8gCyAHaiEJAkAgBUEDdCITRSIHDQAgCkEAIBP8CwALIAkgD2ohCwJAAkAgAS0ABEEccUUNACAIIARBA3RqIRAgCSACQQN0aiERIAohCSALIQ8gBSEOA0AgDkUNAiAJIA8pAwAiDDcDAAJAIAxCA4NCAVINACAJIAxCfIM3AwAgBiAAKAIoIAAoAgAiEmo2AiggBkEsaiAGQShqIBEgEmsQoYGAgAAgBiAGKAIwKQIANwM4IAZBKGogBigCLBCjgYCAACAGQShqIBAgEmsgBkE4ahChgoCAACAPIA8pAwBCfIM3AwAgCSAJKQMAQnyDQgGENwMAIAMgAykDAEKAgICAwACENwMAIA8pAwAhDAsCQCAMQoCAgICAgAiDUA0AIAkgCSkDAEL///////93gzcDACAGIAAoApQBIAAoAgAiEmo2AkAgBkHEAGogBkHAAGogESASaxCkgYCAACAGKAJILwEAIQ0gBkHAAGogBigCRBCmgYCAACAGQcAAaiAQIBJrIA0QooKAgAAgCSAJKQMAQoCAgICAgAiENwMAIAMgAykDAEKAgICAgAKENwMACyAQQQhqIRAgCUEIaiEJIBFBCGohESAPQQhqIQ8gDkF/aiEODAALCyAHDQAgCiALIBP8CgAACwJAIAMpAwAiDEKAgICAgAGDQgBSDQAgBUEBaiEJAkADQAJAIAlBf2oiCQ0AQgAhFAwCCyAKKAECIQ8gCkEIaiEKIA9BgPj/H3FFDQALQoCAgICAASEUCyADIBQgDIQ3AwALAkAgBw0AIAtBACAT/AsACwJAIAUgAC8BnAJHDQAgASABKQMAQv////+/fIM3AwALIAZB0ABqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCDhICAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMhCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQg4SAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCEhICAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMhCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQhISAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACw8AIAAoAghBABCvgoCAAAviAwEDfyOAgICAAEHQEGsiAiSAgICAAAJAAkACQAJAIAFB/wFxDgQAAgIBAgsgACgCGC8ByAEiAUEHcSEDIAFBA3YhBAJAIAFB/wNLDQAgACAEaiIBIANBwKfIgABqLQAAIAEtADxzOgA8DAMLIAQgACgCNGpBQGoiASADQcCnyIAAai0AACABLQAAczoAAAwCCyAAQTBqQQAQiYGAgAAMAQsgAiABOgAPIAJCgBA3ArAQIAJBsL/HgAA2AqgQIAIgAkEQajYCrBACQAJAIAJBqBBqIAJBD2oQsIKAgAAiAUH//wNxRQ0AIAJBqBBqQaDpyYAAQTsQqICAgAAgAi8BwBANAiACQZAQakEQaiACQagQakEQaikCADcDACACQZAQakEIaiIAIAJBqBBqQQhqKQIANwMAIAIgAikCqBA3A5AQAkAgACACQQ9qELCCgIAAQf//A3FFDQAgAkGQEGoQqYCAgAAMAwsgAkHEEGogAkGQEGoQqoCAgAAgAkGQEGoQqYCAgAAgAi8BzBANAiACKALIECEDIAIoAsQQIQAMAQsgAigCrBAhACACKAK0ECEDCyAAIAMQgICAgAAgAUH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAkHQEGokgICAgAALNwEBfwJAIABByLHKgABBORCagICAACICQf//A3ENACAAQYy1yoAAIAEtAAAQr4SAgAAhAgsgAgsPACAAKAIIQQMQr4KAgAALOAEBfyAAKAIIIgIgAi8B7BFB/f8DcTsB7BECQCABQQVHDQAgACgCCCIAIAAvAewRQQJyOwHsEQsLQgEBfwJAIAAgASADELSCgIAAIgFB//8DcQ0AIAAgACgCBCIEIANqNgIEIANFDQAgACgCACAEaiACIAP8CgAACyABC2ABA38jgICAgABBEGsiAySAgICAACADIAAoAgQiBCAC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ADoAnREgAEEAOwGUESAAIANBAWo6AJwRDAILIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkACQCACQagoahC7goCAACIDQf//A3FFDQAgAkGoKGpBoOnJgABBLBCogICAACACLwHAKA0DIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIgcgAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAHELuCgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMBAsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNAyACKALIKCEJIAIoAsQoIQcMAQsgAigCrCghByACKAK0KCEJCyAHIAkQgICAgAAgA0H//wNxRQ0BQaDpyYAAIAcgCRC2gICAAAwBCyACQQI6ALABIANB/wFxIQcgAEHkEGohCSAAQZcRaiEKIAAvARAgAEESai0AAEEQdHIhAyAALQCbESELAkACQCABQf8BcUHtAEYNACADQf///wdxRQ0AIAIgAzsBxAEgAkHGAWogA0EQdjoAACACIAE6AMgBIAIgBzYCwAEgAiAJNgK8ASACIAs2ArgBIAIgCjYCtAEgAiACLQCwAToA4AEgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQCACQagoaiACQbQBahC8goCAACIDQf//A3ENACACKAKsKCEHIAIoArQoIQkMAgsgAkGoKGpBoOnJgABB1QAQqICAgAAgAi8BwCgNAiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiIHIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgByACQbQBahC8goCAAEH//wNxRQ0AIAJBkChqEKmAgIAADAMLIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDQIgAigCyCghCSACKALEKCEHDAELIAIgAzsB9AEgAkHkAWpBEmogA0EQdjoAACACIAE6APgBIAIgBzYC8AEgAiAJNgLsASACIAs2AugBIAIgCjYC5AEgAkEBOgCUAiACIAItALABOgCQAiACQeQBaiEIDAELIAcgCRCAgICAACADQf//A3FFDQBBoOnJgAAgByAJELaAgIAAC0H4sMeAACEDAkAgAC0AlhFB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AtQFIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkHUBWoQv4KAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDIQBCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA2KASACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHUBWoQv4KAgABB//8DcUUNACACQZAoahCpgICAAAyLAQsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNigEgAigCyCghBSACKALEKCEEDIMBCyAIRQ2BASACIAg2AvgFIAIgBDYC9AUgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQCACQagoaiACQfQFahDAgoCAACIBQf//A3ENACACKAKsKCEEIAIoArQoIQUMgQELIAJBqChqQaDpyYAAQcUAEKiAgIAAIAIvAcAoDYkBIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQfQFahDAgoCAAEH//wNxRQ0AIAJBkChqEKmAgIAADIoBCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA2JASACKALIKCEFIAIoAsQoIQQMgAELIAhFDX0gAiAINgKcBiACIAQ2ApgGIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGYBmoQwYKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDH0LIAJBqChqQaDpyYAAQcUAEKiAgIAAIAIvAcAoDYgBIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQZgGahDBgoCAAEH//wNxRQ0AIAJBkChqEKmAgIAADIkBCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA2IASACKALIKCEFIAIoAsQoIQQMfAsgCEUNeiACIAg2AsAGIAIgBDYCvAYgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQCACQagoaiACQbwGahDCgoCAACIBQf//A3ENACACKAKsKCEEIAIoArQoIQUMegsgAkGoKGpBoOnJgABBxQAQqICAgAAgAi8BwCgNhwEgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBvAZqEMKCgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMiAELIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDYcBIAIoAsgoIQUgAigCxCghBAx5CyAIRQ13IAIgCDYC4AYgAiAENgLcBiACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJB3AZqEMOCgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQx3CyACQagoakGg6cmAAEHFABCogICAACACLwHAKA2GASACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHcBmoQw4KAgABB//8DcUUNACACQZAoahCpgICAAAyHAQsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNhgEgAigCyCghBSACKALEKCEEDHYLQcqyx4AAQcyyx4AAIAQtAABBP0YbIQEMdAtByrLHgABBzLLHgAAgBC0AAEE/RhshAQxyCyAIRQ1wIAIgCDYC4AcgAiAENgLcByACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJB3AdqEMSCgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQxwCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA2DASACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHcB2oQxIKAgABB//8DcUUNACACQZAoahCpgICAAAyEAQsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNgwEgAigCyCghBSACKALEKCEEDG8LIAhFDW0gAiAINgKACCACIAQ2AvwH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AkHEFWpBC2ogAUEQdjoAACACQcgAOgDMFSACIAg2AsgVIAIgBDYCxBUgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBxBVqEOKCgIAAQf//A3EiAQ0AIAIoAqwoIQQgAigCtCghBQwBCyACQagoakGg6cmAAEEtEKiAgIAAIAIvAcAoDVkgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgDCACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHEFWoQ4oKAgABB//8DcUUNACACQZAoahCpgICAAAxaCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1ZIAIoAsgoIQUgAigCxCghBAsgBCAFEICAgIAAIAFFDVhBoOnJgAAgBCAFELaAgIAADFgLIAAQ+IGAgAAMVwsCQCAIRQ0AIAIgATsAwRUgAkG4FWpBC2ogAUEQdjoAACACQcUAOgDAFSACIAg2ArwVIAIgBDYCuBUgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBuBVqEOOCgIAAQf//A3EiAQ0AIAIoAqwoIQQgAigCtCghBQwBCyACQagoakGg6cmAAEEvEKiAgIAAIAIvAcAoDVggAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgDCACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkG4FWoQ44KAgABB//8DcUUNACACQZAoahCpgICAAAxZCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1YIAIoAsgoIQUgAigCxCghBAsgBCAFEICAgIAAIAFFDVdBoOnJgAAgBCAFELaAgIAADFcLIAAQ9YGAgAAhBAwJCwJAIAhFDQAgAiABOwC1FSACQawVakELaiABQRB2OgAAIAJBxAA6ALQVIAIgCDYCsBUgAiAENgKsFSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkGsFWoQ5IKAgABB//8DcSIBDQAgAigCrCghBCACKAK0KCEFDAELIAJBqChqQaDpyYAAQSsQqICAgAAgAi8BwCgNVyACQZAoakEQaiACQagoakEQaikCADcDACAM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DQAgBS8BAEFyag4KAgEDAQQBAQUGBwELIDggCi8AADsAACACIAs7AZQRIAJBlhFqIAtBEHY6AAAgOEECaiAKQQJqLQAAOgAAIAJB9AA6AJgRIAIgUjoAlxEgAkEANgKQESACIAU2AowRIAJBADYCiBEgAiAENgKEESACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKCACQagoaiACQYQRahD5goCAACIBQf//A3FFDQ8gAkGoKGpBoOnJgABBNRCogICAACACLwHAKA1TIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQYQRahD5goCAAEH//wNxRQ0AIAJBkChqEKmAgIAADFQLIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDVMgAigCyCghBSACKALEKCEEDBALIDkgCi8AADsAACACIAs7AfwQIAJB/hBqIAtBEHY6AAAgOUECaiAKQQJqLQAAOgAAIAJB9AA6AIARIAIgUjoA/xAgAiAHNgL4ECACIAU2AvQQIAJBADYC8BAgAiAENgLsECACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKCACQagoaiACQewQahD6goCAACIBQf//A3FFDQwgAkGoKGpBoOnJgABBwQAQqICAgAAgAi8BwCgNUiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHsEGoQ+oKAgABB//8DcUUNACACQZAoahCpgICAAAxTCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1SIAIoAsgoIQUgAigCxCghBAwNCyAHQQFGDVEgOiAKLwAAOwAAIAIgCzsB7A8gAkHuD2ogC0EQdjoAACA6QQJqIApBAmotAAA6AAAgAkH0ADoA8A8gAiBSOgDvDyACIAc2AugPIAIgBTYC5A8gAkEANgLgDyACIAQ2AtwPIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkHcD2oQ+4KAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAsLIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNUSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHcD2oQ+4KAgABB//8DcUUNACACQZAoahCpgICAAAxSCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1RIAIoAsgoIQUgAigCxCghBAwKCyAHQQFGDVAgOyAKLwAAOwAAIAIgCzsBhBAgAkGGEGogC0EQdjoAACA7QQJqIApBAmotAAA6AAAgAkH0ADoAiBAgAiBSOgCHECACIAc2AoAQIAIgBTYC/A8gAkEANgL4DyACIAQ2AvQPIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkH0D2oQ/IKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAkLIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNUCACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkH0D2oQ/IKAgABB//8DcUUNACACQZAoahCpgICAAAxRCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1QIAIoAsgoIQUgAigCxCghBAwICyAHQQFGDU8gPCAKLwAAOwAAIAIgCzsBnBAgAkGeEGogC0EQdjoAACA8QQJqIApBAmotAAA6AAAgAkH0ADoAoBAgAiBSOgCfECACIAc2ApgQIAIgBTYClBAgAkEANgKQECACIAQ2AowQIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGMEGoQ/YKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAcLIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNTyACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGMEGoQ/YKAgABB//8DcUUNACACQZAoahCpgICAAAxQCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1PIAIoAsgoIQUgAigCxCghBAwGCyAHQQFGDU4gPSAKLwAAOwAAIAIgCzsBtBAgAkG2EGogC0EQdjoAACA9QQJqIApBAmotAAA6AAAgAkH0ADoAuBAgAiBSOgC3ECACIAc2ArAQIAIgBTYCrBAgAkEANgKoECACIAQ2AqQQIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGkEGoQ/oKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAULIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNTiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGkEGoQ/oKAgABB//8DcUUNACACQZAoahCpgICAAAxPCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1OIAIoAsgoIQUgAigCxCghBAwECyAHQX5xQQJGDQEMAgsCQCAHQX5xQQJHDQAgBS8BAg4DTQBNAAsgPyAKLwAAOwAAIAIgCzsB5BAgAkHmEGogC0EQdjoAACA/QQJqIApBAmotAAA6AAAgAkH0ADoA6BAgAiBSOgDnECACIAc2AuAQIAIgBTYC3BAgAkEANgLYECACIAQ2AtQQIAJB1BBqEP+CgIAADEwLIAUvAQIOA0sASwALID4gCi8AADsAACACIAs7AcwQIAJBzhBqIAtBEHY6AAAgPkECaiAKQQJqLQAAOgAAIAJB9AA6ANAQIAIgUjoAzxAgAiAHNgLIECACIAU2AsQQIAJBADYCwBAgAiAENgK8ECACQbwQahD/goCAAAxKCyAEIAUQgICAgAAgAUH//wNxRQ1JQaDpyYAAIAQgBRC2gICAAAxJCyAEIAUQgICAgAAgAUH//wNxRQ1IQaDpyYAAIAQgBRC2gICAAAxICyAEIAUQgICAgAAgAUH//wNxRQ1HQaDpyYAAIAQgBRC2gICAAAxHCyAEIAUQgICAgAAgAUH//wNxRQ1GQaDpyYAAIAQgBRC2gICAAAxGCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDURBoOnJgAAgBCAFELaAgIAADEQLIAIoAqwoIQQgAigCtCghBQsgBCAFEICAgIAAIAFB//8DcUUNQkGg6cmAACAEIAUQtoCAgAAMQgsgBCAFEICAgIAAIAFB//8DcUUNQUGg6cmAACAEIAUQtoCAgAAMQQsgMyAKLwAAOwAAIAIgCzsB1A8gAkHWD2ogC0EQdjoAACAzQQJqIApBAmotAAA6AAAgAkHzADoA2A8gAiBSOgDXDyACIAc2AtAPIAIgBTYCzA8gAiAINgLIDyACIAQ2AsQPIAJBxA9qEICDgIAADEALAkACQAJAAkACQAJAIAQtAABBQmoOAgACAQtBgAIhASAHDgIEAwILIDUgCi8AADsAACACIAs7AbwPIAJBvg9qIAtBEHY6AAAgNUECaiAKQQJqLQAAOgAAIAJB8wA6AMAPIAIgUjoAvw8gAiAHNgK4DyACIAU2ArQPIAJBATYCsA8gAiAENgKsDyACQawPahD1goCAAAxDCwNAIAdFDUMgAkH2DmogBS8BACIBQQAQ0oKAgAACQAJAIAItAPgORQ0AIAAoAggiAUEMajEAACFWIAE1AgghVyABQQRqMQAAIVggATUCACFZAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIvAfYOIgRBf2oOGQE2AgMEBQYHCDY2CTY2NjY2NjY2NjY2NgoACwJAIARBmHhqDhEQNhESExQVFjY2NjY2NjYXGAALAkAgBEH1d2oODxkaNjYbNjY2NjYcNh0eHwALAkAgBEGWcGoOBiEiNjY2IwALAkAgBEFTag4DDDYNAAsCQCAEQb5/ag4EDjY2DwALQgEhBkL+/////x8hWgJAIARB/v99ag4DJjYlAAsgBEEoRg0KIARB1A9GDR8gBEGAEEYNIwJAIARBjIACRw0AQgQhBkL7/////x8hWgwmC0IIIQZC9/////8fIVoMJQtCECEGQu//////HyFaDCQLQt//////HyFaQiAhBgwjC0LAACEGQr//////HyFaDCILQoABIQZC//7///8fIVoMIQtCgAIhBkL//f///x8hWgwgC0KABCEGQv/7////HyFaDB8LQoAIIQZC//f///8fIVoMHgtCgBAhBkL/7////x8hWgwdC0KAICEGQv/f////HyFaDBwLQoDAACEGQv+/////HyFaDBsLQoCAASEGQv///v//HyFaDBoLQoCAAiEGQv///f//HyFaDBkLQoCABCEGQv//+///HyFaDBgLQoCACCEGQv//9///HyFaDBcLQoCAECEGQv//7///HyFaDBYLQoCAICEGQv//3///HyFaDBULQoCAwAAhBkL//7///x8hWgwUC0KAgIABIQZC/////v8fIVoMEwtCgICAAiEGQv////3/HyFaDBILQoCAgAQhBkL////7/x8hWgwRC0KAgIAIIQZC////9/8fIVoMEAtCgICAECEGQv///+//HyFaDA8LQoCAgCAhBkL////f/x8hWgwOC0KAgIDAACEGQv///7//HyFaDA0LQoCAgIABIQZC//////4fIVoMDAtCgICAgAIhBkL//////R8hWgwLC0KAgICABCEGQv/////7HyFaDAoLQoCAgIAIIQZC//////cfIVoMCQtCgICAgBAhBkL/////7x8hWgwIC0KAgICAICEGQv/////fHyFaDAcLQoCAgIDAACEGQv////+/HyFaDAYLQoCAgICAASEGQv//////HiFaDAULQoCAgICAAiEGQv//////HSFaDAQLQoCAgICABCEGQv//////GyFaDAMLQoCAgICACCEGQv//////FyFaDAILQoCAgICAECEGQv//////DyFaDAELQgIhBkL9/////x8hWgsgASAGIFkgWEIghoSDIFogVyBWQiCGhIOEIgY+AgggAUEMaiAGQiCIPAAADAELIAIgATsB+g4gAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJB+g5qEIGDgIAAIgFB//8DcUUNACACQagoakGg6cmAAEEsEKiAgIAAIAIvAcAoDQIgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJB+g5qEIGDgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMAwsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNAiACKALIKCEIIAIoAsQoIQQMAQsgAigCrCghBCACKAK0KCEICyAEIAgQgICAgAAgAUH//wNxRQ0AQaDpyYAAIAQgCBC2gICAAAsgBUECaiEFIAdBf2ohBwwACwsgNiAKLwAAOwAA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BCAIELaAgIAADAELIAAgBCABEIyCgIAAIgRB//8DcQ1BCyAFQQJqIQUgB0F/aiEHDAALCwJAAkACQAJAIAcOAwABAgMLIABB9rLHgAAQtYKAgAAMPgsgAkEAOwH+DSACIAUvAQA7AfwNIAAgAkH8DWoQtYKAgAAMPQsgAiAFKAEANgGADiAAIAJBgA5qELWCgIAADDwLIDEgCi8AADsAACACIAs7AZQOIAJBlg5qIAtBEHY6AAAgMUECaiAKQQJqLQAAOgAAIAJB8gA6AJgOIAIgUjoAlw4gAiAHNgKQDiACIAU2AowOIAJBADYCiA4gAiAENgKEDiACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkGEDmoQhYOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQS0QqICAgAAgAi8BwCgNPSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGEDmoQhYOAgABB//8DcUUNACACQZAoahCpgICAAAw+CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA09IAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDTtBoOnJgAAgBCAFELaAgIAADDsLAkAgCEEBRg0AIAIgCDYC+A0gAiAENgL0DSACQfQNahCGg4CAAAw7CwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAQtAAAiAUFgag4DAAMBAgtCACEGQQEhASAHDgITAwQLQfCyx4AAIQEgBw4CCwgJCyABQT5GDU0LIAJBATYC8A0gAiAENgLsDSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJB7A1qEIeDgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQwSCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA1MIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQewNahCHg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADE0LIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDUwgAigCyCghBSACKALEKCEEDBELQQIhAUKAICEGIAUvAQAiBA4HDQ4NDwMBAgQLIC4gCi8AADsAACACIAs7AcwNIAJBzg1qIAtBEHY6AAAgLkECaiAKQQJqLQAAOgAAIAJB8QA6ANANIAIgUjoAzw0gAiAHNgLIDSACIAU2AsQNIAJBATYCwA0gAiAENgK8DSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKCACQagoaiACQbwNahCIg4CAACIBQf//A3FFDQogAkGoKGpBoOnJgABBNRCogICAACACLwHAKA1KIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQbwNahCIg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADEsLIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDUogAigCyCghBSACKALEKCEEDAsLQQAhAQwNC0EAIQELQgAhBgwLCyACIAQ7AboNIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoIAJBqChqIAJBug1qEImDgIAAIgFB//8DcUUNBCACQagoakGg6cmAAEEvEKiAgIAAIAIvAcAoDUYgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBug1qEImDgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMRwsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNRiACKALIKCEFIAIoAsQoIQQMBQsgBS8BACIBQQNJDQELQfSyx4AAIQEMAQsgAUECdEHguMqAAGooAgAhAQsCQAJAAkACQAJAAkAgAS0AAUUNACAAKAIIIgUoAhghBCABLQAAQQNxDgMBAgMBCyAvIAovAAA7AAAgAiALOwHkDSACQeYNaiALQRB2OgAAIC9BAmogCkECai0AADoAACACQfEAOgDoDSACIFI6AOcNIAIgBzYC4A0gAiAFNgLcDSACQQE2AtgNIAIgBDYC1A0gAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCggAkGoKGogAkHUDWoQioOAgAAiAUH//wNxRQ0DIAJBqChqQaDpyYAAQTgQqICAgAAgAi8BwCgNRyACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHUDWoQioOAgABB//8DcUUNACACQZAoahCpgICAAAxICyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1HIAIoAsgoIQUgAigCxCghBAwECyAEQQA6ANIBDEYLIARBAToA0gEgBSgCGEEBOgDhAgxFCyAEQQE6ANIBIAUoAhhBAjoA4QIMRAsgAigCrCghBCACKAK0KCEFCyAEIAUQgICAgAAgAUH//wNxRQ1CQaDpyYAAIAQgBRC2gICAAAxCCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDUBBoOnJgAAgBCAFELaAgIAADEALIAIoAqwoIQQgAigCtCghBQsgBCAFEICAgIAAIAFB//8DcUUNPkGg6cmAACAEIAUQtoCAgAAMPgtCACEGC0EBIQELIAAoAggiBCAENQIAQv/f//8PgyAGhD4CACAAKAIIKAIYIAE6ANABDDsLIAQgBRCAgICAACABQf//A3FFDTpBoOnJgAAgBCAFELaAgIAADDoLAkAgCEECRg0AIAIgCDYCtA0gAiAENgKwDSACQbANahCGg4CAAAw6CwJAIAQtAABBP0cNACAELQABQSRHDQAgB0EBRg06IC0gCi8AADsAACACIAs7AagNIAJBqg1qIAtBEHY6AAAgAkECNgKcDSAtQQJqIApBAmotAAA6AAAgAkHwADoArA0gAiBSOgCrDSACIAc2AqQNIAIgBTYCoA0gAiAENgKYDSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkGYDWoQi4OAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAELIAJBqChqQaDpyYAAQSwQqICAgAAgAi8BwCgNOyACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGYDWoQi4OAgABB//8DcUUNACACQZAoahCpgICAAAw8CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA07IAIoAsgoIQUgAigCxCghBAsgBCAFEICAgIAAIAFB//8DcUUNOkGg6cmAACAEIAUQtoCAgAAMOgsgAkECNgKUDSACIAQ2ApANIAJBkA1qEIaDgIAADDkLAkACQAJAAkACQAJAAkACQAJAAkACQCAIRQ0AIAQtAAAiAUE/Rw0FIAdBAUcNASAIQQFGDQMgLCAKLwAAOwAAIAIgCzsB5AwgAkHmDGogC0EQdjoAACAsQQJqIApBAmotAAA6AAAgAkHuADoA6AwgAiBSOgDnDCACQQE2AuAMIAIgBTYC3AwgAiAINgLYDCACIAQ2AtQMIAJB1AxqEL2CgIAADEMLIAdBAUYNAQsgKyAKLwAAOwAAIAIgCzsBzAwgAkHODGogC0EQdjoAACArQQJqIApBAmotAAA6AAAgAkHuADoA0AwgAiBSOgDPDCACIAc2AsgMIAIgBTYCxAwgAiAINgLADCACIAQ2ArwMIAJBvAxqEIyDgIAADEELAkACQCAFLwEAQXtqDgIAAQMLIAAoAgwgAEHupMCAAEEEELOCgIAAIQQMGQsgACgCCCIBKAIYIgUvAcoBIQQgBS8ByAEhBSABLQABQQFxDQMMBwsgBS8BAEHkB0YNFgsgKiAKLwAAOwAAIAIgCzsB/AwgAkH+DGogC0EQdjoAACAqQQJqIApBAmotAAA6AAAgAkHuADoAgA0gAiBSOgD/DCACQQE2AvgMIAIgBTYC9AwgAiAINgLwDCACIAQ2AuwMIAJB7AxqEIyDgIAADD4LAkAgCEEBRg0AIAIgCDYCjA0gAiAENgKIDSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJBiA1qEI2DgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQwFCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA0+IAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQYgNahCNg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADD8LIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDT4gAigCyCghBSACKALEKCEEDAQLIAFBPkYNAiACIAE6AIcNIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGHDWoQjoOAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAILIAJBqChqQaDpyYAAQTQQqICAgAAgAi8BwCgNPSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGHDWoQjoOAgABB//8DcUUNACACQZAoahCpgICAAAw+CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA09IAIoAsgoIQUgAigCxCghBAwBC0EAIARB//8DcSIEIAEvAfQRayIHIAcgBEsbIQRBACAFQf//A3EiBSABLwH4EWsiASABIAVLGyEFDAMLIAQgBRCAgICAACABQf//A3FFDTtBoOnJgAAgBCAFELaAgIAADDsLIAAoAggiASABLwHsEUH9/wNxOwHsEQw6CyAEIAUQgICAgAAgAUH//wNxRQ05QaDpyYAAIAQgBRC2gICAAAw5CyACQiA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoIAJBqChqQcinyIAAQQIQmoCAgABB//8DcQ0PIAJBqChqQYy1yoAAIARBAWoQj4OAgABB//8DcQ0PIAJBqChqQcqnyIAAQQEQmoCAgABB//8DcQ0PIAJBqChqQYy1yoAAIAVBAWoQj4OAgABB//8DcQ0PIAJBqChqQcunyIAAQQEQmoCAgABB//8DcQ0PIAAoAgwgACACKAKsKCACKAK0KBCzgoCAACEEDBALAkACQCAELQAAIgFBPkYNACACIAE6ALMMIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGzDGoQkIOAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAILIAJBqChqQaDpyYAAQTQQqICAgAAgAi8BwCgNOSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGzDGoQkIOAgABB//8DcUUNACACQZAoahCpgICAAAw6CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA05IAIoAsgoIQUgAigCxCghBAwBCwJAIAdFDQBBACEIAkACQAJAAkACQAJAIAUvAQAiAQ4FAwABBAIEC0EBIQEMAgtBAiEBDAELQQMhAUEBIQgLAkAgB0ECTQ0AICkgCi8AADsAACACIAs7AagMIAJBqgxqIAtBEHY6AAAgKUECaiAKQQJqLQAAOgAAIAJB7QA6AKwMIAIgUjoAqwwgAiAHNgKkDCACIAU2AqAMIAJBATYCnAwgAiAENgKYDCACQZgMahCRg4CAAAw8CyAHQQJGIAhxRQ0BQQVBAyAFLwECQQJGGyEBDAELICggCi8AADsAACACIAs7AZAMIAJBkgxqIAtBEHY6AAAgKEECaiAKQQJqLQAAOgAAIAJB7QA6AJQMIAIgUjoAkwwgAiAHNgKMDCACIAU2AogMIAJBATYChAwgAiAENgKADCACQYAMahCRg4CAAAw6CyAAIAEQsoKAgAAMOQsgACgCCCIBIAEvAewRQf3/A3E7AewRDDgLIAQgBRCAgICAACABQf//A3FFDTdBoOnJgAAgBCAFELaAgIAADDcLIAIgCzsB4AsgAkHiC2ogC0EQdjoAACACQQA2AuQLIAIgBzYC3AsgAiAFNgLYCwNAIAJB6AtqIAJB2AtqENeAgIAAIAItAPwLRQ03IAIoAugLIgRBAUYNACAAKAIIKAIYIQECQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDh8AIAECAwQFBgcICQoLDA0ODxAREhMUFRcWGBkbGh0cAAsgAUIANwOYASABQbABakEANgIAIAFBqAFqQgA3AwAgAUGgAWpCADcDAAwdCyABIAEvAbABQQFyOwGwAQwcCyABIAEvAbABQfr/A3E7AbABDBsLIAEgAS8BsAFBAnI7AbABDBoLIAEgAS8BsAFB/f8DcTsBsAEMGQsgASABLwGwAUEEcjsBsAEMGAsgASACLQDsC0EHcUEIdCABLwGwAUH/8QNxcjsBsAEMFwsgAUECOgCsASABIAIvAewLIgQ6AKgBIAEgBEEIdjoAqQEgASACQe4Lai0AADoAqgEMFgsgAUEBOgCsASABIAItAOwLOgCoAQwVCyABQgA3A6gBDBQLIAEgAS8BsAFBgAFyOwGwAQwTCyABIAEvAbABQf/+A3E7AbABDBILIAEgAS8BsAFBCHI7AbABDBELIAEgAS8BsAFB9/8DcTsBsAEMEAsgASABLwGwAUEQcjsBsAEMDwsgASABLwGwAUHv/wNxOwGwAQwOCyABIAEvAbABQSByOwGwAQwNCyABIAEvAbABQd//A3E7AbABDAwLIAEgAS8BsAFBwAByOwGwAQwLCyABIAEvAbABQb//A3E7AbABDAoLIAFBAjoAnAEgASACLwHsCyIEOgCYASABIARBCHY6AJkBIAEgAkHuC2otAAA6AJoBDAkLIAFBAjoApAEgASACLwHsCyIEOgCgASABIARBCHY6AKEBIAEgAkHuC2otAAA6AKIBDAgLIAFBAToAnAEgASACLQDsCzoAmAEMBwsgAUEBOgCkASABIAItAOwLOgCgAQwGCyABQgA3A5gBDAULIAFCADcDoAEMBAsgAUEBOgCcASABIAItAOwLOgCYAQwDCyABQQE6AKQBIAEgAi0A7As6AKABDAILIAFBAToAnAEgASACLQDsCzoAmAEMAQsgAUEBOgCkASABIAItAOwLOgCgAQsgARCSgYCAABoMAAsLAAsgAiAINgK4DCACIAQ2ArQMIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkACQCACQagoaiACQbQMahCSg4CAACIBQf//A3FFDQAgAkGoKGpBoOnJgABBxQAQqICAgAAgAi8BwCgNNiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkG0DGoQkoOAgABB//8DcUUNACACQZAoahCpgICAAAw3CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA02IAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDTRBoOnJgAAgBCAFELaAgIAADDQLA0AgB0UNNCACQdALaiAFLwEAIgEgCEUQ0oKAgAACQAJAIAItANILRQ0AIAIgAi8B0As7AdQLIAAgAkHUC2oQjoKAgAAiBEH//wNxDTkMAQsgAiABOwHWCyACQdYLahDTgoCAAAsgBUECaiEFIAdBf2ohBwwACwsgBCAFEICAgIAAIAFB//8DcUUNMkGg6cmAACAEIAUQtoCAgAAMMgsCQAJAAkAgBS8BACIBDgQAAgIBAgsgABCugoCAAAwzCyAAELGCgIAADDILIAIgAToAjwsgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBjwtqEJODgIAAIgFB//8DcUUNACACQagoakGg6cmAAEErEKiAgIAAIAIvAcAoDTMgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBjwtqEJODgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMNAsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNMyACKALIKCEFIAIoAsQoIQQMAQsgAigCrCghBCACKAK0KCEFCyAEIAUQgICAgAAgAUH//wNxRQ0xQaDpyYAAIAQgBRC2gICAAAwxCyAEIAUQgICAgAAgAUH//wNxRQ0wQaDpyYAAIAQgBRC2gICAAAwwCyAEIAUQgICAgAAgAUH//wNxRQ0vQaDpyYAAIAQgBRC2gICAAAwvC0EBIQECQAJAAkAgBw4CAQACCyAFLwEAIQELIAAoAggiBCAEKAIYIgQvAcoBQQFqQf//A3EgAUH//wNxaiIBQf//AyABQf//A0kbIAQvAcgBQQFqQf//A3EQ44GAgAAMLwsgJCAKLwAAOwAAIAIgCzsB5AogAkHmCmogC0EQdjoAACAkQQJqIApBAmotAAA6AAAgAkHlADoA6AogAiBSOgDnCiACIAc2AuAKIAIgBTYC3AogAkEANgLYCiACIAQ2AtQKIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkACQCACQagoaiACQdQKahCUg4CAACIBQf//A3FFDQAgAkGoKGpBoOnJgABBKRCogICAACACLwHAKA0wIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQdQKahCUg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADDELIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDTAgAigCyCghBSACKALEKCEEDAELIAIoAqwoIQQgAigCtCghBQsgBCAFEICAgIAAIAFB//8DcUUNLkGg6cmAACAEIAUQtoCAgAAMLgsgBCAFEICAgIAAIAFB//8DcUUNLUGg6cmAACAEIAUQtoCAgAAMLQtBASEBAkACQAJAIAcOAgEAAgsgBS8BACEBCyAAKAIIIgQgASAEKAIYLwHIAUEBakH//wNxEOOBgIAADC0LICMgCi8AADsAACACIAs7AcQKIAJBxgpqIAtBEHY6AAAgI0ECaiAKQQJqLQAAOgAAIAJB5AA6AMgKIAIgUjoAxwogAiAHNgLACiACIAU2ArwKIAJBADYCuAogAiAENgK0CiACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkG0CmoQlYOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQSkQqICAgAAgAi8BwCgNLiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkG0CmoQlYOAgABB//8DcUUNACACQZAoahCpgICAAAwvCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA0uIAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDSxBoOnJgAAgBCAFELaAgIAADCwLIAEtAAQNKyAiIAovAAA7AAAgAiALOwGsCiACQa4KaiALQRB2OgAAICJBAmogCkECai0AADoAACACQeMAOgCwCiACIFI6AK8KIAIgBzYCqAogAiAFNgKkCiACIAg2AqAKIAIgBDYCnAogAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBnApqEJaDgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQwBCyACQagoakGg6cmAAEE3EKiAgIAAIAIvAcAoDSwgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBnApq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A3FFDRVBoOnJgAAgBCAFELaAgIAADBULQQEhAQJAAkACQCAHDgIBAAILIAUvAQAhAQsgACgCCCABEPOBgIAADBULIBggCi8AADsAACACIAs7AfQHIAJB9gdqIAtBEHY6AAAgGEECaiAKQQJqLQAAOgAAIAJBzQA6APgHIAIgUjoA9wcgAiAHNgLwByACIAU2AuwHIAJBADYC6AcgAiAENgLkByACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkHkB2oQoIOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQSgQqICAgAAgAi8BwCgNFiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHkB2oQoIOAgABB//8DcUUNACACQZAoahCpgICAAAwXCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA0WIAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDRRBoOnJgAAgBCAFELaAgIAADBQLIAQgBRCAgICAACABQf//A3FFDRNBoOnJgAAgBCAFELaAgIAADBMLQQEhAQJAAkACQCAHDgIBAAILIAUvAQAhAQsgACgCCCABEKmCgIAADBMLIBcgCi8AADsAACACIAs7AdQHIAJB1gdqIAtBEHY6AAAgF0ECaiAKQQJqLQAAOgAAIAJBzAA6ANgHIAIgUjoA1wcgAiAHNgLQByACIAU2AswHIAJBADYCyAcgAiAENgLEByACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkHEB2oQoYOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQSgQqICAgAAgAi8BwCgNFCACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHEB2oQoYOAgABB//8DcUUNACACQZAoahCpgICAAAwVCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA0UIAIoAsgoIQUgAigCxCghBAwBCyACKAKs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gABBAhCagICAACEDCyACQcAAaiSAgICAACADC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCzg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBLhCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQs4OAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQYuYyoAAQSsQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILPQEBfwJAIABBwvbJgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEGz98mAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQaH4yYAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABB4/jJgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEHW+cmAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQZr7yYAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABBgfzJgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEH3/MmAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQeX9yYAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABB1f7JgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEHL/8mAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQcCAyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABBuIHKgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEGggsqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQZGDyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABBrYTKgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEGVhcqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQayGyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILLgEBfwJAIABB14XKgABBLBCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgvoCwECfwJAIAFB//8DcSIDQQJHDQAgAkEBcUUNACAAQQE6AAIgAEGCgAI7AQAPCwJAIANBBEcNACACQQFxRQ0AIABBAToAAiAAQYSAAjsBAA8LAkAgAUH//wNxIgNBDEcNACACQQFxRQ0AIABBAToAAiAAQYyAAjsBAA8LAkAgA0EURw0AIAJBAXFFDQAgAEEBOgACIABBlIACOwEADwsCQCABQf//A3EiA0EBRw0AIAJBAXENACAAQQE6AAIgAEEBOwEADwsCQCADQQNHDQAgAkEBcQ0AIABBAToAAiAAQQM7AQAPCwJAIAFB//8DcSIDQQRGIAJBAXMiBHFBAUcNACAAQQE6AAIgAEGEgH5BBCACQQFxGzsBAA8LAkAgA0EFRw0AIAJBAXENACAAQQE6AAIgAEEFOwEADwsCQCABQf//A3EiA0EGRw0AIAJBAXENACAAQQE6AAIgAEEGOwEADwsCQCADQQdHDQAgAkEBcQ0AIABBAToAAiAAQQc7AQAPCwJAIAFB//8DcSIDQQhHDQAgAkEBcQ0AIABBAToAAiAAQQg7AQAPCwJAIANBCUcNACACQQFxDQAgAEEBOgACIABBCTsBAA8LAkAgAUH//wNxIgNBDEYgBHFBAUcNACAAQQE6AAIgAEGMgH5BDCACQQFxGzsBAA8LAkAgA0EZRw0AIAJBAXENACAAQQE6AAIgAEEZOwEADwsCQCABQf//A3EiA0EoRw0AIAJBAXENACAAQQE6AAIgAEEoOwEADwsCQCADQS1HDQAgAkEBcQ0AIABBAToAAiAAQS07AQAPCwJAIAFB//8DcSIDQS9HDQAgAkEBcQ0AIABBAToAAiAAQS87AQAPCwJAIANBwgBHDQAgAkEBcQ0AIABBAToAAiAAQcIAOwEADwsCQCABQf//A3EiA0HFAEcNACACQQFxDQAgAEEBOgACIABBxQA7AQAPCwJAIANB6AdHDQAgAkEBcQ0AIABBAToAAiAAQegHOwEADwsCQCABQf//A3EiA0HqB0cNACACQQFxDQAgAEEBOgACIABB6gc7AQAPCwJAIANB6wdHDQAgAkEBcQ0AIABBAToAAiAAQesHOwEADwsCQCABQf//A3EiA0HsB0cNACACQQFxDQAgAEEBOgACIABB7Ac7AQAPCwJAIANB7QdHDQAgAkEBcQ0AIABBAToAAiAAQe0HOwEADwsCQCABQf//A3EiA0HuB0cNACACQQFxDQAgAEEBOgACIABB7gc7AQAPCwJAIANB7wdHDQAgAkEBcQ0AIABBAToAAiAAQe8HOwEADwsCQCABQf//A3EiA0H3B0cNACACQQFxDQAgAEEBOgACIABB9wc7AQAPCwJAIANB+AdHDQAgAkEBcQ0AIABBAToAAiAAQfgHOwEADwsCQCABQf//A3EiA0GLCEcNACACQQFxDQAgAEEBOgACIABBiwg7AQAPCwJAIANBjAhHDQAgAkEBcQ0AIABBAToAAiAAQYwIOwEADwsCQCABQf//A3EiA0GPCEcNACACQQFxDQAgAEEBOgACIABBjwg7AQAPCwJAIANBlQhHDQAgAkEBcQ0AIABBAToAAiAAQZUIOwEADwsCQCABQf//A3EiA0GXCEcNACACQQFxDQAgAEEBOgACIABBlwg7AQAPCwJAIANBmAhHDQAgAkEBcQ0AIABBAToAAiAAQZgIOwEADwsCQCABQf//A3EiA0GZCEcNACACQQFxDQAgAEEBOgACIABBmQg7AQAPCwJAIANB1A9HDQAgAkEBcQ0AIABBAToAAiAAQdQPOwEADwsCQCABQf//A3EiA0HqD0cNACACQQFxDQAgAEEBOgACIABB6g87AQAPCwJAIANB6w9HDQAgAkEBcQ0AIABBAToAAiAAQesPOwEADwsCQCABQf//A3EiAUHvD0cNACACQQFxDQAgAEEBOgACIABB7w87AQAPCwJAIAFBgBBHDQAgAkEBcQ0AIABBAToAAiAAQYAQOwEADwsgAEEANgEAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC0g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBJxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQtIOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC+kBAgZ/AX5BACECA38CQAJAIAIgAU8iAw0AAkAgACACaiIELAAAIgVBAEgNAEEBIQUMAgsgBUH/AXFBzKfIgABqLQAAIgZB8QFGDQAgAiAGQQdxIgVqIAFLDQAgBEEBai0AACIHQoDBgoSJECAGQQF2QfgAca0iCIinQbABcUkNACAHQr///vz7ESAIiKdB/wFxSw0AAkACQCAFQX5qDgMDAAEDCyAEQQJqLAAAQb9/Sg0BQQMhBQwCCyAEQQJqLAAAQb9/Sg0AIARBA2osAABBQE4NAEEEIQUMAQsgAw8LIAUgAmohAgwACwsTACAAQbaYyoAAQcYAEJqAgIAACzQBAX8CQCAAQdSZyoAAQS0QmoCAgAAiAkH//wNxDQAgAEGMtcqAACABEKyEgIAAIQILIAILEgAgAEGjmcqAAEExEJqAgIAAC1ABA38CQAJAIAAgAkcNAEEBIQMMAQsDQCABRSEDIAFFDQEgAUF/aiEBIAItAAAhBCAALQAAIQUgAkEBaiECIABBAWohACAFIARGDQALCyADCzwBAX8CQCAAQfyYyoAAQScQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQrIOAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQSsQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKyDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAsuAQF/AkAgAEHj8cmAAEE4EJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQavxyYAAQTgQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILLgEBfwJAIABB8/DJgABBOBCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQqoOAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQTQQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKqDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQqYOAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQTQQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKmDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQq4OAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQTAQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKuDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAsuAQF/AkAgAEGH78mAAEEwEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQd3uyYAAQSoQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILLgEBfwJAIABBse7JgABBLBCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgsuAQF/AkAgAEGJ7smAAEEoEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQZfsyYAAQSIQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEKeDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEE0EKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABCng4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEKiDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEEuEKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABCog4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALLgEBfwJAIABBxvDJgABBLRCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgs9AQF/AkAgAEHJl8qAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCy4BAX8CQCAAQaOXyoAAQSYQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILPQEBfwJAIABB4ZbKgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgsuAQF/AkAgAEG7lsqAAEEmEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCz0BAX8CQCAAQfmVyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILLgEBfwJAIABBy5XKgABBLhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgs9AQF/AkAgAEGJlcqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCvg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBLxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQr4OAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC9g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMBCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQvYOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQa2UyoAAQS8QmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABBh5TKgABBJhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEHYk8qAAEEvEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC4g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBNRCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQuIOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQfGSyoAAQTQQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAELyDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEE2EKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABC8g4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALLwEBfwJAIABBr5LKgABBwgAQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB/ZHKgABBMhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEG/kcqAAEE+EJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQZqPyoAAQToQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB1I/KgABBOhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEGOkMqAAEE6EJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQciQyoAAQToQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILyQIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAELuDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEHAABCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQu4OAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8kCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC5g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBxQAQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAELmDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAs3AQF/AkAgAEHAjsqAAEEqEJqAgIAAIgJB//8DcQ0AIABBjLXKgAAgAS8BABCPg4CAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC6g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQuoOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQZaOyoAAQSoQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILNwEBfwJAIABB9YzKgABBLRCagICAACICQf//A3ENACAAQYy1yoAAIAEvAQAQj4OAgAAhAgsgAgsuAQF/AkAgAEHLjMqAAEEqEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACC8kCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC3g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBxQAQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQ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gAAhAgsgAgsuAQF/AkAgAEH1+smAAEElEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCxg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMBCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQsYOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCwg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQsIOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQaX5yYAAQTEQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEK6DgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEExEKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABCug4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALLgEBfwJAIABBhPfJgABBLxCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgu7AQECfwJAIABB6OvJgABBLxCagICAACICQf//A3ENACABKAIEIQMgASgCACEBIABB7OrAgABBAhCagICAACICQf//A3ENAANAAkACQCADRQ0AIAAgAS0AAEEKQQBBjLXKgAAQ5oOAgAAiAkH//wNxDQMgA0EBRg0BIABB8+rAgABBAhCagICAACICQf//A3FFDQEMAwsgAEGjksCAAEECEJqAgIAADwsgAUEBaiEBIANBf2ohAwwACwsgAgsuAQF/AkAgAEG57MmAAEErEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQbfvyYAAQTEQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILLgEBfwJAIABB6O/JgABBMRCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgsuAQF/AkAgAEGZ8MmAAEEtEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQZvzyYAAQSgQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILNwEBfwJAIABBw/PJgABBMxCagICAACICQf//A3ENACAAQYy1yoAAIAEtAAAQqISAgAAhAgsgAgsuAQF/AkAgAEGU9smAAEEuEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQfX3yYAAQSwQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABBmPrJgABBMBCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEHI+smAAEEtEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQZf/yYAAQTQQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB7obKgABBKxCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgs3AQF/AkAgAEGZh8qAAEElEJqAgIAAIgJB//8DcQ0AIABBjLXKgAAgAS8BABCPg4CAACECCyACCy4BAX8CQCAAQb6HyoAAQS0QmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB34jKgABBNxCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgs9AQF/AkAgAEGKisqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCy4BAX8CQCAAQaKNyoAAQTIQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLwEBfwJAIABB1I3KgABBwgAQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB6o7KgABBMBCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEGCkcqAAEE9EJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQaWTyoAAQTMQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB3JTKgABBLRCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgvdCQMCfwJ+CH8jgICAgABBIGsiAySAgICAAAJAIABFDQAgAEHAG2ohBEEAKQPotceAACIFQoCAgIDwH4MhBiAFpyEHIABB4ixqIQggAEHSG2ohCQNAIAJFDQEgAS0AACEKAkACQAJAAkACQCAALQDWLEEPcQ0AIApB+rLHgABqLQAAIQsgAC0A5CwiDEUNASAILQAAQRZ0IAAvAeAsQQZ0ciAKQT9xciENDAILIAQgChC5goCAACENDAILQf8BIAtBD3F2IApxIQ0LIAAgDTsB4CwgCCANQYCA/ABxQRB2OgAAIAAgDCALQQ9xIg5qQf8BcUH6tMeAAGotAAAiCzoA5CwCQAJAAkACQAJAAkACQAJAIAtFDQAgC0EMRg0BIANBADoABiADQQA7AQQMCQsg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IgU2AgAgAUGQA2pBEGogCCkDADcDACABQZADakEIaiAMKQMANwMAIAEgASkDuAM3A5ADIAFB4ANqQQhqIAEoApQDIAFBnANqIAVBAXEbIgVBCGooAgA2AgAgASAFKQIANwPgAyABQeADaiEIDAILIAFBkANqQRhqIAUoAgAiDTYCACABQZADakEQaiAIKQMANwMAIAFBkANqQQhqIAwpAwA3AwAgASABKQO4AyIJNwOQAyABQeADakEIaiAJpyABQZADaiANQQFxGyIIQQhqKAIANgIAIAEgCCkCADcD4AMgASABLwHKAzsBkAMgASABKAK8A0EGaiABQZADaiAFLQAAQQFxGy8BADsB5gMgAUHgA2ohCAwBCyABQZADakEYaiAFKAIAIg02AgAgAUGQA2pBEGogCCkDADcDACABQZADakEIaiAMKQMANwMAIAEgASkDuAM3A5ADIAFB4ANqQQhqIAEoApQDIAFBnANqIA1BAXEbIghBCGooAgA2AgAgASAIKQIANwPgAyABIAEvAb4DOwGQAyABIAEoArgDQQZqIAFBkANqIAUtAABBAXEbLwEAOwHmAyABQeADaiEICyAAQeQaaiEFIAFB+AFqQQhqIAhBCGooAgA2AgAgASAIKQIANwP4ASABQbgDakEYaiIIIARBGGopAgA3AwAgAUG4A2pBEGoiDCAEQRBqKQIANwMAIAFBuANqQQhqIg0gBEEIaikCADcDACABIAQpAgA3A7gDAkACQAJAAkACQCABQbgDaiAHEMCDgIAAQQNxDgQAAQIDAAsgAUGQA2pBGGogCCgCACIENgIAIAFBkANqQRBqIAwpAwA3AwAgAUGQA2pBCGogDSkDADcDACABIAEpA7gDNwOQAyABQeADakEIaiABKAKUAyABQZwDaiAEQQFxGyIEQQhqKAIANgIAIAEgBCkCADcD4AMgAUHgA2ohBAwDCyABQZADakEYaiAIKAIAIgQ2AgAgAUGQA2pBEGogDCkDADcDACABQZADakEIaiANKQMANwMAIAEgASkDuAMiCTcDkAMgAUHgA2pBCGogCacgAUGQA2ogBEEBcRsiBEEIaigCADYCACABIAQpAgA3A+ADIAFB4ANqIQQMAgsgAUGQA2pBGGogCCgCACIENgIAIAFBkANqQRBqIAwpAwA3AwAgAUGQA2pBCGogDSkDADcD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AkEIaiIHIABBCGoiCCkCADcDACACIAApAgA3AwAgAkHgAGpBGGoiCSAEKAIAIgo2AgAgAkHgAGpBEGoiCyAGKQIANwMAIAJB4ABqQQhqIgwgCCkCADcDACACIAApAgAiDTcDYEEBIQQgAkEgakEIaiANpyACQeAAaiAKQQFxGyIGQQhqKAIANgIAIAIgBikCADcDICACQTBqIAFBAiACQSBqEM2BgIAAIAIvATQhCCACKAIwIQYgCSADKAIAIgM2AgAgCyAFKQMANwMAIAwgBykDADcDACACIAIpAwA3A2AgAkHAAGpBCGogAigCZCACQewAaiADQQFxGyIDQQhqKAIANgIAIAIgAykCADcDQCACQdAAaiABQQIgAkHAAGoQzYGAgAAgAi8BVCEDIAIoAlAhAQJAAkACQAJAIAAtABxFDQACQCAGIAFNIgANACAIQf//A3EgA0H//wNxTw0ECwJAIAYgAUkiAQ0AIAhB//8DcSADQf//A3FLDQQLIAANASAIQf//A3EgA0H//wNxTw0BQQMhBAwDCyAGIAFPDQFBACEEDAILQX5BACAIQf//A3EgA0H//wNxSxtBACABGyEEDAELAkAgBiABTQ0AQQEhBAwBCyAIQf//A3EgA0H//wNxSyEECyACQYABaiSAgICAACAEC5sBAgJ/AX4jgICAgABBEGsiAySAgICAACABKAIEIQQgASgCACEBIAMgAkH/////A0s6AAwCQAJAIAJBgICAgARJDQBCgICAgBAhBQwBCwJAIAJBAnQiAg0AQvz///8PIQUMAQsgASACQQJBACAEKAIAEYCAgIAAgICAgAAiAkWtQiCGIAKthCEFCyAAIAU3AgAgA0EQaiSAgICAAAsSAAJAIAANAEEADwsgAC8BohsLEgACQCAADQBBAA8LIAAvAaAbCxIAAkAgAA0AQQAPCyAALwGMEgsSAAJAIAANAEEADwsgACgCiBILHwACQAJAIAANAEEAIQAMAQsgAC0AthIhAAsgAEEBcQsxAQF/AkAgAA0AQQAPCyAALwG4EiIBQRB0IAFBgP4DcXIgAEG6EmotAAByQf///wdxCzQBAX8CQCAADQBBzJmzBg8LIAAvAbwSIgFBEHQgAUGA/gNxciAAQb4Sai0AAHJB////B3ELhgEBA38jgICAgABBEGsiAiSAgICAAEEBIQMCQCAA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ARCxgICAAEEBcUUNAiAEQTBqIARBCGogARD7g4CAACAELwE0IgJFDQEgACACOwEkDAULIABBADsBJEEkRQ0EIAAgBEEIakEk/AoAAAwECyAEKAIwIgJBAToACCACQQI6AAAgAiAELQAvIgVBH3E6AAEMAQsgBEE4aiACIAUQ8oOAgAACQCAELwE8RQ0AIABBADsBJEEkRQ0DIAAgBEEIakEk/AoAAAwDCyAELwE4IQUgBC0AOiEGIARBwABqIARBCGogARD7g4CAAAJAIAQvAUQiAkUNACAAIAI7ASQMAwsgBCgCQCICIAUgBkEQdHIiBTsBACACQQA6AAggAkECOgAEIAJBAmogBUEQdjoAACACIAQtAC8iBUEfcToABQsgBUEBaiEGQXYhAgJAAkADQCACRQ0BIAJBqrXKgABqIQUgAkEBaiECIAZBH3EiByAFLQAAQR9xRw0ACyAEQQE6AEwgBCAHOgBLIARBywBqIQIMAQtBqOnJgAAhAgsgAi8AACICQYACTw0ACyAAQQA7ASRBJEUNACAAIARBCGpBJPwKAAALIARB0ABqJICAgIAAC90BAQF/I4CAgIAAQcAAayIEJICAgIAAAkBBJEUNACAEQRRqQaiUyYAAQST8CgAACyAEQQhqIAMQ+IOAgAACQAJAIAQoAghFDQAgAEEAOwEkQSRFDQEgAEGolMmAAEEk/AoAAAwBCyAEQThqIARBFGogARD7g4CAAAJAIAQvATwiA0UNACAEQRRqIAEQwoCAgAAgACADOwEkDAELIAQoAjgiA0ECOgAIIANBAjoAACAAQQA7ASQgAyACQR9xOgABQSRFDQAgACAEQRRqQST8CgAACyAEQcAAaiSAgICAAAtYAAJAIAMgAkkNACAAQgA3AgAPCyAEQf8BcSEEAkADQCACIANGDQECQCABIANqLQAAIARHDQAgAEEBOgAEIAAgAzYCAA8LIANBAWohAwwACwsgAEIANwIAC3kCAX8BfiOAgICAAEEQayIDJICAgIAAAkACQEEBDQBCgICAgBAhBAwBCwJAIAINAEL/////DyEEDAELIAEoAgAgAkEAQQAgASgCBCgCABGAgICAAICAgIAAIgJFrUIghiACrYQhBAsgACAENwIAIANBEGokgICAgAALewECfyOAgICAAEEgayIEJICAgIAAIAQgASkCADcDCCAEQRRqIARBCGogAxCIgYCAAAJAIAQvARwiBQ0AIAQoAhQhAQJAIAQoAhgiA0UNACABIAIgA/wKAAALIAAgAzYCBCAAIAE2AgALIAAgBTsBCCAEQSBqJICAgIAAC5oGAgd/A34jgICAgABBoAFrIgIkgICAgAACQCAAKAIEIgMNACAAKAIAIQMLIAEoAhAhBCABKAIMIQUgAS0ACCEGIAEoAgQhByABKAIAIQggAygCACEAIAJBOGpCADcDACACQgA3AzAgAkKsmuLTo9Lw+h83A1AgAkKsmuLTo9Lw+h83A0ggAkKsmuLTo9Lw+h83A0ACQEE4RQ0AIAJB2ABqQfjqyYAAQTj8CgAACyACIAZBAXEiAToAYCACQoGAgIAQNwNYIAIgAToAkAECQAJAIAFFDQAgAiAINgBhIAJChYCAgNAANwNYDAELIAJBMGogCCAAaiAHEJ+EgIAACyACQeAAaiEGIAJBMGogACAFaiAEEJ+EgIAAIAIpA0AhCSACKAJcIQACQAJAAkACQAJAAkAgAigCWCIFQRBLDQAgAEEDTQ0BIAI1AmBCIIYgBiAAQQF2QQxxIgFqNQIAhCEKIAYgAEF8aiIAajUAAEIghiAGIAAgAWtqNQAAhCELDAULIAIpA1AhCiACKQNIIQtBACEBIABBEEkNAUEAIQMgACEIDAILQgAhCyAADQJCACEKDAMLQRAhCAJAQRAgAGsiA0UNACACQZABaiAGIABqQSBqIAP8CgAACwJAIABFDQAgAkGQAWogA2ogBiAA/AoAAAsgAkGQAWohBgsgBiADaiEEIAggA2shAyALIAqFIAmFIQkCQANAIAFBEGoiACADTw0BIAJBIGogBCABaiIBQQhqKQAAIAmFQgAgASkAAELb0dCFmtrfgWeFQgAQxYSAgAAgAikDKCACKQMghSEJIAAhAQwACwsgBiAIaiIBQXhqKQAAIQsgAUFwaikAACEKDAELIAYgAEEBdmoxAABCCIYgAjEAYEIQhoQgBiAAakF/ajEAAIQhCgsgAkEQaiAKQtvR0IWa2t+BZ4VCACALIAmFQgAQxYSAgAAgAiACKQMYQtvR0IWa2t+BZ4VCACAFrSACKQMQhUKvyPXFx6yHu6B/hUIAEMWEgIAAIAIpAwAhCSACKQMIIQogAkGgAWokgICAgAAgCiAJhQsyAQF/AkAgAEH3r8qAAEHBABCagICAACICQf//A3ENACAAIAEvAQAQpYSAgAAhAgsgAgsxAQF/AkAgAEHosMqAAEEwEJqAgIAAIgJB//8DcQ0AIAAgAS8BABClhICAACECCyACCzEBAX8CQCAAQZixyoAAQTAQmoCAgAAiAkH//wNxDQAgACABLwEAEKWEgIAAIQILIAILMwEBfyAAQQhqIQBBACEBAkADQCAAKAIAIgBFDQEgASAAQXxqKAIAakF4aiEBDAALCyABC4IBAQF/I4CAgIAAQRBrIgMkgICAgAACQAJAIAJBe2pBfE8NACAAQSo2AQAMAQsgA0EMaiABIAJBEBDIgICAAAJAIAMvAQ4NACAAQQA7AQAgACADLwEMQf8BbCACQQJ0QeS7yoAAaigCAG46AAIMAQsgAEEqNgEACyADQRBqJICAgIAAC9siCgR/AX4CfwF+An8BfgJ/AXwBfgN/I4CAgIAAQYAHayIDJICAgIAAAkACQAJAAkACQAJAAkAgAkUNACACIAEtAAAiBEFVakH9AXFFIgVGDQAgASAFaiEGAkACQAJAAkACQAJAIAIgBWsiBUECSQ0AIAYtAABBMEcNACAGLQABIgJBv39qQf8BcUEaSUEFdCACckH/AXFB+ABHDQBCACEHIANCADcC7AYgAyAFQX5qNgLoBkECIQggAyAGQQJqNgLkBiADQgA3A0ggA0HkBmogA0HIAGoQiISAgAAgAygC7AYiAiADKALwBiIBayEJAkACQCACIAMoAugGTw0AIAMoAuQGIAJqLQAAQS5GDQELQgAhCiAJIQsMAgsgAyACQQFqIgI2AuwGIANB5AZqIANByABqEIiEgIAAIAEgAmsgAygC7AYiAiADKALwBiIBa2oiDCAJaiELQgAgDK1CAoZ9IQoMAQtCACEKIANCADcC7AYgAyAFNgLoBiADIAY2AuQGIANCADcDSCADQeQGaiADQcgAahCJhICAACADKALsBiIIIAMoAvAGIgJrIQkCQAJAAkAgCCADKALoBk8NACADKALkBiAIai0AAEEuRg0BC0IAIQcgCSELDAELIAMgCEEBaiIBNgLsBiADQeQGaiADQcgAahCJhICAACACIAFrIAMoAuwGIgggAygC8AYiAmtqIgEgCWohC0IAIAGtfSEHCwJAAkACQCALRQ0AQgAhDQJAIAggAygC6AZPDQAgAygC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gICAACIEQf//A3ENACAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQACQCACKAIAIgQNACAAIAEQrYSAgAAiBEH//wNxDQEgAigCACEECwJAIARBAUcNACAAIAEgAigCBCACKAIIQQIQs4SAgAAiBEH//wNxDQEgAigCACEECwJAIARBAkcNACAAIAEgAigCBCACKAIIQQIQs4SAgAAiBEH//wNxDQEgAigCACEECwJAIARBA0cNACAAQaaSwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHY6sCAAEECEJqAgIAAIgRB//8DcQ0BIABBl7DAgABBAxCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAIoAgQgAigCCBC0hICAACIEQf//A3ENASAAQdfqwIAAQQMQmoCAgAAiBEH//wNxDQEgAEG9r8CAAEEEEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASACLQAMIQYgA0EBNgIEIANB2erAgAA2AgBBByEEQdyTwIAAIQUCQAJAAkACQCAGQQNxDgQDAAECAwtBDCEEQf2iwIAAIQUMAgtBCSEEQeSTwIAAIQUMAQtBBSEEQYubwIAAIQULIAMgBTYCCCADIAQ2AgwgACADEKeEgIAAIgRB//8DcQ0BIABB1+rAgABBAxCagICAACIEQf//A3ENASAAQceWwIAAQQYQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACLQANELWEgIAAIgRB//8DcQ0BIABB1+rAgABBAxCagICAACIEQf//A3ENASAAQb+UwIAAQQsQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACLQAOELWEgIAAIgRB//8DcQ0BIABB1+rAgABBAxCagICAACIEQf//A3ENASAAQZWcwIAAQQwQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACLQAPELWEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEERw0AIAAgARCthICAACIEQf//A3ENASACKAIAIQQLAkAgBEEFRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEGcrcCAAEEHEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAigCBCACKAIIELSEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEGRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEGcrsCAAEEJEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAkEEahC2hICAACIEQf//A3ENASAAQaOSwIAAQQIQmoCAgAAiBEH//wNxDQEgAigCACEECwJAIARBB0cNACAAQaaSwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHY6sCAAEECEJqAgIAAIgRB//8DcQ0BIABBva/AgABBBBCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAItAAwQq4SAgAAiBEH//wNxDQEgAEHX6sCAAEEDEJqAgIAAIgRB//8DcQ0BIABBtrHAgABBBBCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAIoAgQgAigCCEEBELOEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEIRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEGGrMCAAEEFEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAigCBCACKAIIQQEQs4SAgAAiBEH//wNxDQEgAEGjksCAAEECEJqAgIAAIgRB//8DcQ0BIAIoAgAhBAsCQCAEQQlHDQAgAEGmksCAAEECEJqAgIAAIgRB//8DcQ0BIABB2OrAgABBAhCagICAACIEQf//A3ENASAAQYaswIAAQQUQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACKAIEIAIoAghBARCzhICAACIE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KAIEIAIoAghBARCzhICAACIEQf//A3ENASAAQdfqwIAAQQMQmoCAgAAiBEH//wNxDQEgAEHLlMCAAEEEEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAigCDCACKAIQQQEQs4SAgAAiBEH//wNxDQEgAEGjksCAAEECEJqAgIAAIgRB//8DcQ0BIAIoAgAhBAsCQCAEQQ1HDQAgAEGmksCAAEECEJqAgIAAIgRB//8DcQ0BIABB2OrAgABBAhCagICAACIEQf//A3ENASAAQZiwwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACKAIEIAIoAggQtISAgAAiBEH//wNxDQEgAEHX6sCAAEEDEJqAgIAAIgRB//8DcQ0BIABBlKjAgABBAxCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAIoAgwgAigCEEEBELOEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEORw0AIAAgARCthICAACIEQf//A3ENASACKAIAIQQLAkAgBEEPRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHinMCAAEELEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAi8BBBCPg4CAACIEQf//A3ENASAAQaOSwIAAQQIQmoCAgAAiBEH//wNxDQEgAigCACEECwJAIARBEEcNACAAIAEgAigCBCACKAIIQQIQs4SAgAAiBEH//wNxDQEgAigCACEECwJAIARBEUcNACAAQdLqwIAAQQQQmoCAgAAiBEH//wNxDQEgAEGGrMCAAEGim8CAACACLQAMG0EFEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENAQJAAkAgAi0ADA0AIAAgARCthICAACIEQf//A3ENAyACLQAMRQ0BCyAAIAEgAigCBCACKAIIQQEQs4SAgAAiBEH//wNxDQILIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEESRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHbrMCAAEEFEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASACKAIEIQYgA0EBNgIEIANB2erAgAA2AgBBBiEEQe6qwIAAIQUCQAJAAkACQAJAIAYOBQQAAQIDBAtBAyEEQaSbwIAAIQUMAwtBBSEEQYmewIAAIQUMAgtBDSEEQeuswIAAIQUMAQtBBSEEQfmswIAAIQULIAMgBTYCCCADIAQ2AgwgACADEKeEgIAAIgRB//8DcQ0BIABB1+rAgABBAxCagICAACIEQf//A3ENASAAQcycwIAAQQgQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACQQhqELaEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEETRw0AIAAgARCthICAACIEQf//A3ENASACKAIAIQQLAkAgBEEURw0AIAAgASACKAIEIAIoAghBAhCzhICAACIEQf//A3ENAQsgAEGjksCAAEECEJqAgIAAIQQLIANBEGokgICAgAAgBAsUACAAQYqwwIAAQQQgARChhICAAAu5AgEFfyABLQAUIQIgASgCDCEDIAEoAgghBCABKAIEIQUgASgCACEGAkAgAEGEtcqAAEEGEJqAgIAAIgFB//8DcQ0AIAAgBiAFQYy1yoAAEKGEgIAAIgFB//8DcQ0AIABB+rTKgABBARCagICAACIBQf//A3ENACAAQezqwIAAQQIQmoCAgAAiAUH//wNxDQADQAJAAkAgA0UNACAAIAQvAQBBCkEAQYy1yoAAEOaDgIAAIgFB//8DcQ0DIANBAUYNASAAQfPqwIAAQQIQmoCAgAAiAUH//wNxRQ0BDAMLIABBo5LAgABBAhCagICAACIBQf//A3ENAiAAQfq0yoAAQQEQmoCAgAAiAUH//wNxDQIgAEGMtcqAACACEKCAgIAAIQEMAgsgBEECaiEEIANBf2ohAwwACwsgAQvZAQEDfyOAgICAAEEQayIDJICAgIAAQQchBEHlmsCAACEFAkACQAJAIAJB/wFxDgQCAQEAAQtBAyEEQaOmwIAAIQUMAQtBACEFQQAhBAsCQAJAIAVFDQAgAyAFNgIIIANBATYCBCADQdnqwIAANgIAIAMgBDYCDCAAIAMQp4SAgAAhBQwBCyAAQdvqwIAAQQ0QmoCAgAAiBUH//wNxDQAgACACQf8BcUEKQQBBjLXKgAAQ5oOAgAAiBUH//wNxDQAgAEEpEJeAgIAAIQULIANBEGokgICAgAAgBQvJAQICfwF+I4CAgIAAQSBrIgMkgICAgAACQANAAkAgAg0AQQAhBAwCCwJAAkAgACgCDCIEIAJqIAAoAghLDQACQCACRQ0AIAAoAgQgBGogASAC/AsACyAAIAAoAgwgAmo2AgwgAiEEDAELIANBATYCFCADIAE6AA8gAyADQQ9qNgIQIANBGGogACADQRBqQQEgAhC4hICAACADKQMYIgVCIIinIgRB//8DcQ0CIAWnIQQLIAIgBGshAgwACwsgA0EgaiSAgICAACAEC/wBAQN/I4CAgIAAQRBrIgMkgICAgABBBSEEQYubwIAAIQUCQAJAAkACQAJAIAJB/wFxDgUEAAEDAgMLQQQhBEGRm8CAACEFDAMLQQghBEGprMCAACEFDAILQRkhBEGBocCAACEFDAELQQAhBUEAIQQLAkACQCAFRQ0AIAMgBTYCCCADQQE2AgQgA0HZ6sCAADYCACADIAQ2AgwgACADEKeEgIAAIQUMAQsgAEHb6sCAAEENEJqAgIAAIgVB//8DcQ0AIAAgAkH/AXFBCkEAQYy1yoAAEOaDgIAAIgVB//8DcQ0AIABBKRCXgICAACEFCyADQRBqJICAgIAAIAUL6QEBBH8gASgCCCICIAEoAgQiAyACIANLGyEEAkADQCAEIAJGDQECQCABKAIAIAJqLQAAIgNBUGoiBUH/AXFBCUsNACAAQQE6AAEgACAFOgAAIAEgAkEBajYCCA8LAkAgA0Gff2pB/wFxQQVLDQAgAEEBOgABIAAgA0Gpf2o6AAAgASACQQFqNgIIDwsCQCADQb9/akH/AXFBBUsNACAAQQE6AAEgACADQUlqOgAAIAEgAkEBajYCCA8LIANB/wFxQd8ARw0BIAEgAkEBaiICNgIIIAEgASgCDEEBajYCDAwACwsgAEEAOwAAC48BAQF/AkAgAEHs6sCAAEECEJqAgIAAIgVB//8DcQ0AA0ACQAJAIANFDQAgACABIAItAAAQq4SAgAAiBUH//wNxRQ0BDAMLIABBo5LAgABBAhCagICAAA8LAkAgA0EBRg0AIABB8+rAgABBAhCagICAACIFQf//A3ENAgsgAkEBaiECIANBf2ohAwwACwsgBQstAAJAIAJFDQAgACABIAIgA0EBELOEgIAADwsgAEGCpsCAAEEEIAEQoYSAgAALJwAgAEH+qsCAAEH/rMCAACACQQFxIgIbQQRBBSACGyABEKGEgIAACy8AAkAgAi0AAUUNACAAIAEgAi0AABCrhICAAA8LIABBgqbAgABBBCABEKGEgIAAC2UBAX8jgICAgABBEGsiAySAgICAACADQdnqwIAANgIAIANBATYCBCADQQNBAiACQQFxIgIbNgIMIANBp6bAgABB35nAgAAgAhs2AgggACADEKeEgIAAIQIgA0EQaiSAgICAACACC/wCAQd/I4CAgIAAQRBrIgUkgICAgAAgA0F/aiEGIAEoAgghByABKAIEIQhBACEJQQAhCgJAA0AgCiAGTw0BIAIoAgQgCWohCUEBIQoMAAsLAkACQAJAIAIgBkEDdGooAgQgBGwgCWoiCyABKAIMIgpqIAdLDQBBACEJAkADQCAJIAZPDQECQCACKAIEIglFDQAgCCAKaiACKAIAIAn8CgAACyABIAEoAgwgCWoiCjYCDEEBIQkMAAsLIAIgBkEDdGoiCSgCACECAkACQCAJKAIEIgkOAgMAAQsCQCAERQ0AIAggCmogAi0AACAE/AsACyABIAEoAgwgBGo2AgwMAgsDQCAERQ0CAkAgCUUNACAIIApqIAIgCfwKAAALIAEgASgCDCAJaiIKNgIMIARBf2ohBAwACwsgBUEIaiABIAIgAyAEIAEoAgAoAgARgYCAgACAgICAACAAIAUpAwg3AgAMAQsgACALNgIAIABBADsBBAsgBUEQaiSAgICAAAtgAQJ/QgFBICAAQX9qZ2siAK1C//8Dg4anIQECQCAAQf//A3FBAnRB8LzKgABqIgIoAgAiAEUNACACIAFBEHQgAGpBfGooAgA2AgAgAA8LQQAgAUAAIgBBEHQgAEF/RhsL4AEBAn8jgICAgABBEGsiBiSAgICAACAGIANBH3E6AA9BfyAEQQRqIgcgByAESRsiBEEBIAN0IgMgBCADSxshBAJAAkACQCACQQRqIgIgAyACIANLGyIDQX9qZyICQW9qQQxLDQAg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WzM7MTB+ABtbMjM7MTB+ABtbMTM7MTB+ABtbMjsxMH4AG1syMTsxMH4AG1syMDsxMH4AeyAuLi4gfQAuewBlbXB0eQBpbml0eQBjYXBhY2l0eQBIeXBlcmxpbmtTZXRPdXRPZk1lbW9yeQBTdHlsZVNldE91dE9mTWVtb3J5AFN0cmluZ3NPdXRPZk1lbW9yeQBIeXBlcmxpbmtNYXBPdXRPZk1lbW9yeQBHcmFwaGVtZU1hcE91dE9mTWVtb3J5AFN0cmluZ0FsbG9jT3V0T2ZNZW1vcnkAR3JhcGhlbWVBbGxvY091dE9mTWVtb3J5AHByaW1hcnkAc2Vjb25kYXJ5AGRuZC1jb3B5AG5vdGlmeQBzZW1hbnRpY19vcHRpb25fa2V5AGh5cGVybGlua19wYXJhbV9rZXkAa2l0dHlfY29sb3JfcHJvdG9jb2xfa2V5AHNwZWNpYWxfa2V5AGJvZHkAG095ABtPOXkAG084eQAbTzd5ABtPNnkAG08xNnkAG081eQAbTzE1eQAbTzR5ABtPMTR5ABtPM3kAG08xM3kAG08yeQAbTzEyeQAbTzExeQAbTzEweQBjb25lbXVfc2hvd19tZXNzYWdlX2JveABjb25lbXVfbWVzc2FnZV9ib3gAG094ABtPOXgAG084eAAbTzd4ABtPNngAG08xNngAG081eAAbTzE1eAAbTzR4ABtPMTR4ABtPM3gAG08xM3gAG08yeAAbTzEyeAAbTzExeAAbTzEweABxdWVzdGlvbl9hcnJvdwBzd2FsbG93AE92ZXJmbG93AHJlZHJhdwAbT3cAG085dwAbTzh3ABtPN3cAG082dwAbTzE2dwAbTzV3ABtPMTV3ABtPNHcAG08xNHcAG08zdwAbTzEzdwAbTzJ3ABtPMTJ3ABtPMTF3ABtPMTB3ABtPdgAbTzl2ABtPOHYAG083dgAbTzZ2ABtPMTZ2ABtPNXYAG08xNXYAG080dgAbTzE0dgAbTzN2ABtPMTN2ABtPMnYAG08xMnYAG08xMXYAG08xMHYAY29udGV4dC1tZW51ABtPdQAbTzl1ABtPOHUAG083dQAbTzZ1ABtPMTZ1ABtPNXUAG08xNXUAG080dQAbTzE0dQAbTzN1ABtPMTN1ABtPMnUAG08xMnUAG08xMXUAG08xMHUAY29uZW11X3RhYl90eHQAY3Vyc29yX3RleHQAdmVydGljYWwtdGV4dABJbnB1dE91dHB1dABjb25lbXVfd2FpdF9pbnB1dABlbmRfb2ZfaW5wdXQAZGNzX3B1dABhcGNfcHV0AHpvb20tb3V0AENvbm5lY3Rpb25UaW1lZE91dABsaXN0AGNvbmVtdV9wcm9ncmVzc19yZXBvcnQAcHJvbXB0X3N0YXJ0AHNlbWFudGljX29wdGlvbl9zdGFydABoeXBlcmxpbmtfc3RhcnQAc2VtYW50aWNfZXhpdF9jb2RlX3N0YXJ0AGFwY19zdGFydABzZW1hbnRpY19wcm9tcHQAcHJpbnQAY3VycmVudABwcmVhbGxvY19zZWdtZW50AGRlZmF1bHQAd2FpdAByaWdodABsZWZ0AE5vU3BhY2VMZWZ0AHJlc2V0AEludmFsaWRGb3JtYXQAG090ABtPOXQAG084dAAbTzd0ABtPNnQAG08xNnQAG081dAAbTzE1dAAbTzR0ABtPMTR0ABtPM3QAG08xM3QAG08ydAAbTzEydAAbTzExdAAbTzEwdAByZXF1ZXN0cwBjbGlja19ldmVudHMAY2xpcGJvYXJkX2NvbnRlbnRzAGR5bmFtaWNfc2VnbWVudHMAY3Jvc3MAcHJvZ3Jlc3MAaXRlbXMAcGFyYW1zAGR1cmF0aW9uX21zAGludGVybWVkaWF0ZXMAU3lzdGVtUmVzb3VyY2VzAGFsaWFzABtPcwAbTzlzABtPOHMAG083cwAbTzZzABtPMTZzABtPNXMAG08xNXMAG080cwAbTzE0cwAbTzNzABtPMTNzABtPMnMAG08xMnMAG08xMXMAG08xMHMAZmxldXIAbGVmdF9wdHIAdGVybWluYXRvcgBjdXJzb3IAZXJyb3IARGVjb2RlRXJyb3IAb3NjX2NvbG9yAGNyb3NzaGFpcgBJc0RpcgBwb2ludGVyAEludmFsaWRDaGFyYWN0ZXIAdG9wX3JpZ2h0X2Nvcm5lcgBib3R0b21fcmlnaHRfY29ybmVyAHRvcF9sZWZ0X2Nvcm5lcgBib3R0b21fbGVmdF9jb3JuZXIAQ29ubmVjdGlvblJlc2V0QnlQZWVyABtPcgAbTzlyABtPOHIAG083cgAbTzZyABtPMTZyABtPNXIAG08xNXIAG080cgAbTzE0cgAbTzNyABtPMTNyABtPMnIAG08xMnIAG08xMXIAG08xMHIAG09xABtPOXEAG084cQAbTzdxABtPNnEAG08xNnEAG081cQAbTzE1cQAbTzRxABtPMTRxABtPM3EAG08xM3EAG08ycQAbTzEycQAbTzExcQAbTzEwcQBkbmQtbm8tZHJvcABoZWxwAHBhcmFtc19zZXAAY29uZW11X3NsZWVwAHJpZ2h0X3VubGVzc19wZW5kaW5nX3dyYXAAG09wABtPOXAAG084cAAbTzdwABtPNnAAG08xNnAAG081cAAbTzE1cAAbTzRwABtPMTRwABtPM3AAG08xM3AAG08ycAAbTzEycAAbTzExcAAbTzEwcABEaXZpc2lvbkJ5WmVybwBjb25lbXVfZ3VpbWFjcm8AG09vABtPOW8AG084bwAbTzdvABtPNm8AG08xNm8AG081bwAbTzE1bwAbTzRvABtPMTRvABtPM28AG08xM28AG08ybwAbTzEybwAbTzExbwAbTzEwbwB0ZXJtaW5hbC5QYXJzZXIuQWN0aW9uAGNvbnRpbnVhdGlvbgBVdGY4RXhwZWN0ZWRDb250aW51YXRpb24AY29sb3Jfb3BlcmF0aW9uAE1pc3NpbmdPcGVyYXRpb24ATG9ja1Zpb2xhdGlvbgBzaG93X2Rlc2t0b3Bfbm90aWZpY2F0aW9uAHJ4dnRfZXh0ZW5zaW9uAGNoYW5nZV93aW5kb3dfaWNvbgB6b29tLWluAGxlbgBuYW4AG09uABtPOW4AG084bgAbTzduABtPNm4AG08xNm4AG081bgAbTzE1bgAbTzRuABtPMTRuABtPM24AG08xM24AG08ybgAbTzEybgAbTzExbgAbWzBuABtPMTBuAHh0ZXJtAEVuZE9mU3RyZWFtABtPbQAbTzltABtPOG0AG083bQAbTzZtABtPMTZtABtPNW0AG08xNW0AG080bQAbTzE0bQAbTzNtABtPMTNtABtPMm0AG08xMm0AG08xMW0AG08xMG0AY21kbGluZV91cmwAa2l0dHlfY29sb3JfcHJvdG9jb2wAbnVsbABhbGwtc2Nyb2xsAGNlbGwAdmlzdWFsX2JlbGwAYWxsAGJlbABmaW5hbABtYXNrAGRjc191bmhvb2sAZGNzX2hvb2sAZG5kLWxpbmsAV291bGRCbG9jawAbT2sAG085awAbTzhrABtPN2sAG082awAbTzE2awAbTzVrABtPMTVrABtPNGsAG08xNGsAG08zawAbTzEzawAbTzJrABtPMTJrABtPMTFrABtPMTBrABtPagAbTzlqABtPOGoAG083agAbTzZqABtPMTZqABtPNWoAG08xNWoAG080agAbTzE0agAbTzNqABtPMTNqABtPMmoAG08xMmoAG08xMWoAG08xMGoAaHlwZXJsaW5rX3VyaQBIeXBlcmxpbmtTZXROZWVkc1JlaGFzaABTdHlsZVNldE5lZWRzUmVoYXNoAGxlZnRfcHRyX3dhdGNoAGNzaV9kaXNwYXRjaABvc2NfZGlzcGF0Y2gAZXNjX2Rpc3BhdGNoAGFsbG9jYWJsZV9zdHJpbmcAU3RyZWFtaW5nAFV0ZjhPdmVybG9uZ0VuY29kaW5nAE5vdE9wZW5Gb3JSZWFkaW5nAGdyYWJiaW5nAEludmFsaWRFbnVtVGFnAGluZgBVdGY4RW5jb2Rlc1N1cnJvZ2F0ZUhhbGYAVXRmOENhbm5vdEVuY29kZVN1cnJvZ2F0ZUhhbGYAbmVzdy1yZXNpemUAcm93LXJlc2l6ZQBudy1yZXNpemUAZXctcmVzaXplAG5zLXJlc2l6ZQBuLXJlc2l6ZQBjb2wtcmVzaXplAG53c2UtcmVzaXplAG5lLXJlc2l6ZQByZW1vdmUAZG5kLW1vdmUAdHJ1ZQBjb25lbXVfcHJvZ3Jlc3NfcHJldmFsdWUAY29uZW11X3Byb2dyZXNzX3ZhbHVlAGNvbmVtdV9zbGVlcF92YWx1ZQBzZW1hbnRpY19vcHRpb25fdmFsdWUAaHlwZXJsaW5rX3BhcmFtX3ZhbHVlAGtpdHR5X2NvbG9yX3Byb3RvY29sX3ZhbHVlAFV0ZjhJbnZhbGlkU3RhcnRCeXRlAGV4ZWN1dGUAY29tcGxldGUAY29uZW11X3Byb2dyZXNzX3ByZXN0YXRlAGNvbmVtdV9wcm9ncmVzc19zdGF0ZQBhbHRlcm5hdGUAaW5kZXRlcm1pbmF0ZQBwYXVzZQBmYWxzZQBCcm9rZW5QaXBlAG1vdXNlX3NoYXBlAGNtZGxpbmUAY2hhbmdlX3dpbmRvd190aXRsZQBub3RpZmljYXRpb25fdGl0bGUAY29uZW11X2NoYW5nZV90YWJfdGl0bGUAY3Jvc3NlZF9jaXJjbGUAVW5zZWVrYWJs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c2NfMTYAb3NjXzExNgBvc2NfNQAyMjczNzM2NzU0NDMyMzIwNTk0Nzg3NTk3NjU2MjUAMTIzMjU5NTE2NDQwNzgzMDk0NTk1NTgyNTg4MzI1NDM1MzQ4Mzg2NDM4NTA1NDg1Nzg0ODQ0NDk1MzU2MDgyOTE2MjU5NzY1NjI1ADUyOTM5NTU5MjAzMzkzNzcxMTkxNzcwMTU2MjkyNDc3NjIyNjI4MjExOTc1MDk3NjU2MjUAODA3NzkzNTY2OTQ2MzE2MDg4NzQxNjEwMDUwODQ5NTczMDk5MTg1MzYzMzg5NTUxNjM5NTU2ODg0NzY1NjI1ADE0OTAxMTYxMTkzODQ3NjU2MjUAMTg4MDc5MDk2MTMxNTY2MDAxMjc0OTk3ODQ1OTU1NTU5MzA4NDUwOTg2NDg5MDgzNTM0MDAzNDQxNDAwMjczMDA0NTQ2NzYxNTEyNzU2MzQ3NjU2MjUAMzQ2OTQ0Njk1MTk1MzYxNDE4ODgyMzg0ODk2Mjc4MzgxMzQ3NjU2MjUAMzgxNDY5NzI2NTYyNQAyMDY3OTUxNTMxMzgyNTY5MTg3MTc4NTIxNzMwMTc0OTA3MTMzOTE0NTMwMjc3MjUyMTk3MjY1NjI1ADQ4MTQ4MjQ4NjA5NjgwODk2MzI2Mzk5NDQ4NTY0NjIzMTgyOTYzNDUyNTQxMjA1Mzg0NzA0ODgwOTk4NDY5ODg5MTYzOTcwOTQ3MjY1NjI1ADg4ODE3ODQxOTcwMDEyNTIzMjMzODkwNTMzNDQ3MjY1NjI1ADMxNTU0NDM2MjA4ODQwNDcyMjE2NDY5MTQyNjExMzExNDQ5MTg2OTI4MjU3NDA0MzYwOTIwMTkwODExMTU3MjI2NTYyNQA1ODIwNzY2MDkxMzQ2NzQwNzIyNjU2MjUAMTM1NTI1MjcxNTYwNjg4MDU0MjUwOTMxNjAwMTA4NzQyNzEzOTI4MjIyNjU2MjUANTA0ODcwOTc5MzQxNDQ3NTU1NDYzNTA2MjgxNzgwOTgzMTg2OTkwODUyMTE4NDY5Nzc0NzIzMDUyOTc4NTE1NjI1ADkzMTMyMjU3NDYxNTQ3ODUxNTYyNQAxMTc1NDk0MzUwODIyMjg3NTA3OTY4NzM2NTM3MjIyMjQ1Njc3ODE4NjY1NTU2NzcyMDg3NTIxNTA4NzUxNzA2Mjc4NDE3MjU5NDU0NzI3MTcyODUxNTYyNQAyMTY4NDA0MzQ0OTcxMDA4ODY4MDE0OTA1NjAxNzM5ODgzNDIyODUxNTYyNQAxNDIxMDg1NDcxNTIwMjAwMzcxNzQyMjQ4NTM1MTU2MjUANzcwMzcxOTc3NzU0ODk0MzQxMjIyMzkxMTc3MDMzOTcwOTI3NDE1MjQwNjU5Mjg2MTU1Mjc4MDk1OTc1NTE4MjI2NjIzNTM1MTU2MjUAMzMwODcyMjQ1MDIxMjExMDY5OTQ4NTYzNDc2ODI3OTg1MTQxNDI2MzI0ODQ0MzYwMzUxNTYyNQA2MTAzNTE1NjI1ADE5NzIxNTIyNjMwNTI1Mjk1MTM1MjkzMjE0MTMyMDY5NjU1NzQxODMwMTYwODc3NzI1NTc1MTE5MjU2OTczMjY2NjAxNTYyNQAzNjM3OTc4ODA3MDkxNzEyOTUxNjYwMTU2MjUAODQ3MDMyOTQ3MjU0MzAwMzM5MDY4MzIyNTAwNjc5NjQxOTYyMDUxMzkxNjAxNTYyNQAyMzg0MTg1NzkxMDE1NjI1ADEyOTI0Njk3MDcxMTQxMDU3NDE5ODY1NzYwODEzNTkzMTY5NTg2OTY1ODE0MjMyODI2MjMyOTEwMTU2MjUANTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUAMzAwOTI2NTUzODEwNTA1NjAyMDM5OTk2NTUzNTI4ODk0ODkzNTIxNTc4MzgyNTMzNjU0NDA1NTA2MjQwNDM2ODA3Mjc0ODE4NDIwNDEwMTU2MjUAMTUyNTg3ODkwNjI1ADgyNzE4MDYxMjU1MzAyNzY3NDg3MTQwODY5MjA2OTk2Mjg1MzU2NTgxMjExMDkwMDg3ODkwNjI1ADE5MjU5Mjk5NDQzODcyMzU4NTMwNTU5Nzc5NDI1ODQ5MjczMTg1MzgxMDE2NDgyMTUzODgxOTUyMzk5Mzg3OTU1NjY1NTg4Mzc4OTA2MjUAMzU1MjcxMzY3ODgwMDUwMDkyOTM1NTYyMTMzNzg5MDYyNQAyMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNQAxMjYyMTc3NDQ4MzUzNjE4ODg4NjU4NzY1NzA0NDUyNDU3OTY3NDc3MTMwMjk2MTc0NDM2ODA3NjMyNDQ2Mjg5MDYyNQA1NDIxMDEwODYyNDI3NTIyMTcwMDM3MjY0MDA0MzQ5NzA4NTU3MTI4OTA2MjUANTk2MDQ2NDQ3NzUzOTA2MjUAMzIzMTE3NDI2Nzc4NTI2NDM1NDk2NjQ0MDIwMzM5ODI5MjM5Njc0MTQ1MzU1ODIwNjU1ODIyNzUzOTA2MjUAMTM4Nzc3ODc4MDc4MTQ0NTY3NTUyOTUzOTU4NTExMzUyNTM5MDYyNQA3NTIzMTYzODQ1MjYyNjQwMDUwOTk5OTEzODM4MjIyMzcyMzM4MDM5NDU5NTYzMzQxMzYwMTM3NjU2MDEwOTIwMTgxODcwNDYwNTEwMjUzOTA2MjUANDkzMDM4MDY1NzYzMTMyMzc4MzgyMzMwMzUzMzAxNzQxMzkzNTQ1NzU0MDIxOTQzMTM5Mzc3OTgxNDI0MzMxNjY1MDM5MDYyNQA5MDk0OTQ3MDE3NzI5MjgyMzc5MTUwMzkwNjI1ADIxMTc1ODIzNjgxMzU3NTA4NDc2NzA4MDYyNTE2OTkxMDQ5MDUxMjg0NzkwMDM5MDYyNQAzMzg4MTMxNzg5MDE3MjAxMzU2MjczMjkwMDAyNzE4NTY3ODQ4MjA1NTY2NDA2MjUAMTQ1NTE5MTUyMjgzNjY4NTE4MDY2NDA2MjUANzg4ODYwOTA1MjIxMDExODA1NDExNzI4NTY1MjgyNzg2MjI5NjczMjA2NDM1MTA5MDIzMDA0NzcwMjc4OTMwNjY0MDYyNQAxMjAzNzA2MjE1MjQyMDIyNDA4MTU5OTg2MjE0MTE1NTc5NTc0MDg2MzEzNTMwMTM0NjE3NjIyMDI0OTYxNzQ3MjI5MDk5MjczNjgxNjQwNjI1ADIyMjA0NDYwNDkyNTAzMTMwODA4NDcyNjMzMzYxODE2NDA2MjUANTE2OTg3ODgyODQ1NjQyMjk2Nzk0NjMwNDMyNTQzNzI2NzgzNDc4NjMyNTY5MzEzMDQ5MzE2NDA2MjUAOTUzNjc0MzE2NDA2MjUANDcwMTk3NzQwMzI4OTE1MDAzMTg3NDk0NjE0ODg4ODk4MjcxMTI3NDY2MjIyNzA4ODM1MDA4NjAzNTAwNjgyNTExMzY2OTAzNzgxODkwODY5MTQwNjI1ADg2NzM2MTczNzk4ODQwMzU0NzIwNTk2MjI0MDY5NTk1MzM2OTE0MDYyNQAzNzI1MjkwMjk4NDYxOTE0MDYyNQAyMDE5NDgzOTE3MzY1NzkwMjIxODU0MDI1MTI3MTIzOTMyNzQ3OTYzNDA4NDczODc5MDk4ODkyMjExOTE0MDYyNQA1Njg0MzQxODg2MDgwODAxNDg2OTY4OTk0MTQwNjI1ADMwODE0ODc5MTEwMTk1NzczNjQ4ODk1NjQ3MDgxMzU4ODM3MDk2NjA5NjI2MzcxNDQ2MjExMTIzODM5MDIwNzI5MDY0OTQxNDA2MjUAMTMyMzQ4ODk4MDA4NDg0NDI3OTc5NDI1MzkwNzMxMTk0MDU2NTcwNTI5OTM3NzQ0MTQwNjI1ADI0NDE0MDYyNQAzODUxODU5ODg4Nzc0NDcxNzA2MTExOTU1ODg1MTY5ODU0NjM3MDc2MjAzMjk2NDMwNzc2MzkwNDc5ODc3NTkxMTMzMTE3Njc1NzgxMjUANzEwNTQyNzM1NzYwMTAwMTg1ODcxMTI0MjY3NTc4MTI1ADMwNTE3NTc4MTI1ADE2NTQzNjEyMjUxMDYwNTUzNDk3NDI4MTczODQxMzk5MjU3MDcxMzE2MjQyMjE4MDE3NTc4MTI1ADI1MjQzNTQ4OTY3MDcyMzc3NzczMTc1MzE0MDg5MDQ5MTU5MzQ5NTQyNjA1OTIzNDg4NzM2MTUyNjQ4OTI1NzgxMjUANDY1NjYxMjg3MzA3NzM5MjU3ODEyNQA1ODc3NDcxNzU0MTExNDM3NTM5ODQzNjgyNjg2MTExMjI4Mzg5MDkzMzI3NzgzODYwNDM3NjA3NTQzNzU4NTMxMzkyMDg2Mjk3MjczNjM1ODY0MjU3ODEyNQAxMDg0MjAyMTcyNDg1NTA0NDM0MDA3NDUyODAwODY5OTQxNzExNDI1NzgxMjUAMTE5MjA5Mjg5NTUwNzgxMjUANjQ2MjM0ODUzNTU3MDUyODcwOTkzMjg4MDQwNjc5NjU4NDc5MzQ4MjkwNzExNjQxMzExNjQ1NTA3ODEyNQAyNzc1NTU3NTYxNTYyODkxMzUxMDU5MDc5MTcwMjI3MDUwNzgxMjUAMTUwNDYzMjc2OTA1MjUyODAxMDE5OTk4Mjc2NzY0NDQ3NDQ2NzYwNzg5MTkxMjY2ODI3MjAyNzUzMTIwMjE4NDAzNjM3NDA5MjEwMjA1MDc4MTI1ADQyMzUxNjQ3MzYyNzE1MDE2OTUzNDE2MTI1MDMzOTgyMDk4MTAyNTY5NTgwMDc4MTI1ADE4MTg5ODk0MDM1NDU4NTY0NzU4MzAwNzgxMjUAOTg2MDc2MTMxNTI2MjY0NzU2NzY0NjYwNzA2NjAzNDgyNzg3MDkxNTA4MDQzODg2Mjc4NzU1OTYyODQ4NjYzMzMwMDc4MTI1ADExMzY4NjgzNzcyMTYxNjAyOTczOTM3OTg4MjgxMjUANjE2Mjk3NTgyMjAzOTE1NDcyOTc3OTEyOTQxNjI3MTc2NzQxOTMyMTkyNTI3NDI4OTI0MjIyNDc2NzgwNDE0NTgxMjk4ODI4MTI1ADI2NDY5Nzc5NjAxNjk2ODg1NTk1ODg1MDc4MTQ2MjM4ODExMzE0MTA1OTg3NTQ4ODI4MTI1ADE3MzQ3MjM0NzU5NzY4MDcwOTQ0MTE5MjQ0ODEzOTE5MDY3MzgyODEyNQA5NDAzOTU0ODA2NTc4MzAwMDYzNzQ5ODkyMjk3Nzc3OTY1NDIyNTQ5MzI0NDU0MTc2NzAwMTcyMDcwMDEzNjUwMjI3MzM4MDc1NjM3ODE3MzgyODEyNQA3NDUwNTgwNTk2OTIzODI4MTI1ADQwMzg5Njc4MzQ3MzE1ODA0NDM3MDgwNTAyNTQyNDc4NjU0OTU5MjY4MTY5NDc3NTgxOTc3ODQ0MjM4MjgxMjUAMTAzMzk3NTc2NTY5MTI4NDU5MzU4OTI2MDg2NTA4NzQ1MzU2Njk1NzI2NTEzODYyNjA5ODYzMjgxMjUAMTkwNzM0ODYzMjgxMjUAMjQwNzQxMjQzMDQ4NDA0NDgxNjMxOTk3MjQyODIzMTE1OTE0ODE3MjYyNzA2MDI2OTIzNTI0NDA0OTkyMzQ5NDQ1ODE5ODU0NzM2MzI4MTI1ADQ0NDA4OTIwOTg1MDA2MjYxNjE2OTQ1MjY2NzIzNjMyODEyNQAxNTc3NzIxODEwNDQyMDIzNjEwODIzNDU3MTMwNTY1NTcyNDU5MzQ2NDEyODcwMjE4MDQ2MDA5NTQwNTU3ODYxMzI4MTI1ADI5MTAzODMwNDU2NzMzNzAzNjEzMjgxMjUANjc3NjI2MzU3ODAzNDQwMjcxMjU0NjU4MDAwNTQzNzEzNTY5NjQxMTEzMjgxMjUAMjk4MDIzMjIzODc2OTUzMTI1ADE2MTU1ODcxMzM4OTI2MzIxNzc0ODMyMjAxMDE2OTkxNDYxOTgzNzA3MjY3NzkxMDMyNzkxMTM3Njk1MzEyNQA2OTM4ODkzOTAzOTA3MjI4Mzc3NjQ3Njk3OTI1NTY3NjI2OTUzMTI1ADM3NjE1ODE5MjI2MzEzMjAwMjU0OTk5NTY5MTkxMTExODYxNjkwMTk3Mjk3ODE2NzA2ODAwNjg4MjgwMDU0NjAwOTA5MzUyMzAyNTUxMjY5NTMxMjUANDU0NzQ3MzUwODg2NDY0MTE4OTU3NTE5NTMxMjUAMjQ2NTE5MDMyODgxNTY2MTg5MTkxMTY1MTc2NjUwODcwNjk2NzcyODc3MDEwOTcxNTY5Njg4OTkwNzEyMTY1ODMyNTE5NTMxMjUAMTA1ODc5MTE4NDA2Nzg3NTQyMzgzNTQwMzEyNTg0OTU1MjQ1MjU2NDIzOTUwMTk1MzEyNQAxNzc2MzU2ODM5NDAwMjUwNDY0Njc3ODEwNjY4OTQ1MzEyNQA5NjI5NjQ5NzIxOTM2MTc5MjY1Mjc5ODg5NzEyOTI0NjM2NTkyNjkwNTA4MjQxMDc2OTQwOTc2MTk5NjkzOTc3ODMyNzk0MTg5NDUzMTI1ADc2MjkzOTQ1MzEyNQA0MTM1OTAzMDYyNzY1MTM4Mzc0MzU3MDQzNDYwMzQ5ODE0MjY3ODI5MDYwNTU0NTA0Mzk0NTMxMjUAMjcxMDUwNTQzMTIxMzc2MTA4NTAxODYzMjAwMjE3NDg1NDI3ODU2NDQ1MzEyNQAxMTY0MTUzMjE4MjY5MzQ4MTQ0NTMxMjUANjMxMDg4NzI0MTc2ODA5NDQ0MzI5MzgyODUyMjI2MjI4OTgzNzM4NTY1MTQ4MDg3MjE4NDAzODE2MjIzMTQ0NTMxMjUAMTAwOTc0MTk1ODY4Mjg5NTExMDkyNzAxMjU2MzU2MTk2NjM3Mzk4MTcwNDIzNjkzOTU0OTQ0NjEwNTk1NzAzMTI1ADE4NjI2NDUxNDkyMzA5NTcwMzEyNQA0MzM2ODA4Njg5OTQyMDE3NzM2MDI5ODExMjAzNDc5NzY2ODQ1NzAzMTI1ADIzNTA5ODg3MDE2NDQ1NzUwMTU5Mzc0NzMwNzQ0NDQ0OTEzNTU2MzczMzExMTM1NDQxNzUwNDMwMTc1MDM0MTI1NTY4MzQ1MTg5MDk0NTQzNDU3MDMxMjUAMjg0MjE3MDk0MzA0MDQwMDc0MzQ4NDQ5NzA3MDMxMjUAMTU0MDc0Mzk1NTUwOTc4ODY4MjQ0NDc4MjM1NDA2Nzk0MTg1NDgzMDQ4MTMxODU3MjMxMDU1NjE5MTk1MTAzNjQ1MzI0NzA3MDMxMjUANjYxNzQ0NDkwMDQyNDIyMTM5ODk3MTI2OTUzNjU1OTcwMjgyODUyNjQ5Njg4NzIwNzAzMTI1ADEyMjA3MDMxMjUAMjU4NDkzOTQxNDIyODIxMTQ4Mzk3MzE1MjE2MjcxODYzMzkxNzM5MzE2Mjg0NjU2NTI0NjU4MjAzMTI1ADQ3NjgzNzE1ODIwMzEyNQAxMTEwMjIzMDI0NjI1MTU2NTQwNDIzNjMxNjY4MDkwODIwMzEyNQA2MDE4NTMxMDc2MjEwMTEyMDQwNzk5OTMxMDcwNTc3ODk3ODcwNDMxNTY3NjUwNjczMDg4MTEwMTI0ODA4NzM2MTQ1NDk2MzY4NDA4MjAzMTI1ADE2OTQwNjU4OTQ1MDg2MDA2NzgxMzY2NDUwMDEzNTkyODM5MjQxMDI3ODMyMDMxMjUAMzk0NDMwNDUyNjEwNTA1OTAyNzA1ODY0MjgyNjQxMzkzMTE0ODM2NjAzMjE3NTU0NTExNTAyMzg1MTM5NDY1MzMyMDMxMjUANzI3NTk1NzYxNDE4MzQyNTkwMzMyMDMxMjUAb3NjXzE1AG9zY18xMTUAb3NjXzEwNQBvc2NfNABvc2NfMTQAb3NjXzExNABvc2NfMTA0ADEzMwBvc2NfMTMAb3NjXzExMwA1MgAyMgBvc2NfMTIAb3NjXzExMgBoYW5kMQAyMQBvc2NfMTEAb3NjXzExMQBvc2NfMTAAb3NjXzExMABlcnJvci4ALnsgLgAsIC4AQGVudW1Gcm9tSW50KAAkJwB7IAAgPSAALCAAGxsAGw0AMjU1IDI1MCAyNTAJCXNub3cKMjQ4IDI0OCAyNTUJCWdob3N0IHdoaXRlCjI0OCAyNDggMjU1CQlHaG9zdFdoaXRlCjI0NSAyNDUgMjQ1CQl3aGl0ZSBzbW9rZQoyNDUgMjQ1IDI0NQkJV2hpdGVTbW9rZQoyMjAgMjIwIDIyMAkJZ2FpbnNib3JvCjI1NSAyNTAgMjQwCQlmbG9yYWwgd2hpdGUKMjU1IDI1MCAyNDAJCUZsb3JhbFdoaXRlCjI1MyAyNDUgMjMwCQlvbGQgbGFjZQoyNTMgMjQ1IDIzMAkJT2xkTGFjZQoyNTAgMjQwIDIzMAkJbGluZW4KMjUwIDIzNSAyMTUJCWFudGlxdWUgd2hpdGUKMjUwIDIzNSAyMTUJCUFudGlxdWVXaGl0ZQoyNTUgMjM5IDIxMwkJcGFwYXlhIHdoaXAKMjU1IDIzOSAyMTMJCVBhcGF5YVdoaXAKMjU1IDIzNSAyMDUJCWJsYW5jaGVkIGFsbW9uZAoyNTUgMjM1IDIwNQkJQmxhbmNoZWRBbG1vbmQKMjU1IDIyOCAxOTYJCWJpc3F1ZQoyNTUgMjE4IDE4NQkJcGVhY2ggcHVmZgoyNTUgMjE4IDE4NQkJUGVhY2hQdWZmCjI1NSAyMjIgMTczCQluYXZham8gd2hpdGUKMjU1IDIyMiAxNzMJCU5hdmFqb1doaXRlCjI1NSAyMjggMTgxCQltb2NjYXNpbgoyNTUgMjQ4IDIyMAkJY29ybnNpbGsKMjU1IDI1NSAyNDAJCWl2b3J5CjI1NSAyNTAgMjA1CQlsZW1vbiBjaGlmZm9uCjI1NSAyNTAgMjA1CQlMZW1vbkNoaWZmb24KMjU1IDI0NSAyMzgJCXNlYXNoZWxsCjI0MCAyNTUgMjQwCQlob25leWRldwoyNDUgMjU1IDI1MAkJbWludCBjcmVhbQoyNDUgMjU1IDI1MAkJTWludENyZWFtCjI0MCAyNTUgMjU1CQlhenVyZQoyNDAgMjQ4IDI1NQkJYWxpY2UgYmx1ZQoyNDAgMjQ4IDI1NQkJQWxpY2VCbHVlCjIzMCAyMzAgMjUwCQlsYXZlbmRlcgoyNTUgMjQwIDI0NQkJbGF2ZW5kZXIgYmx1c2gKMjU1IDI0MCAyNDUJCUxhdmVuZGVyQmx1c2gKMjU1IDIyOCAyMjUJCW1pc3R5IHJvc2UKMjU1IDIyOCAyMjUJCU1pc3R5Um9zZQoyNTUgMjU1IDI1NQkJd2hpdGUKICAwICAgMCAgIDAJCWJsYWNrCiA0NyAgNzkgIDc5CQlkYXJrIHNsYXRlIGdyYXkKIDQ3ICA3OSAgNzkJCURhcmtTbGF0ZUdyYXkKIDQ3ICA3OSAgNzkJCWRhcmsgc2xhdGUgZ3JleQogNDcgIDc5ICA3OQkJRGFya1NsYXRlR3JleQoxMDUgMTA1IDEwNQkJZGltIGdyYXkKMTA1IDEwNSAxMDUJCURpbUdyYXkKMTA1IDEwNSAxMDUJCWRpbSBncmV5CjEwNSAxMDUgMTA1CQlEaW1HcmV5CjExMiAxMjggMTQ0CQlzbGF0ZSBncmF5CjExMiAxMjggMTQ0CQlTbGF0ZUdyYXkKMTEyIDEyOCAxNDQJCXNsYXRlIGdyZXkKMTEyIDEyOCAxNDQJCVNsYXRlR3JleQoxMTkgMTM2IDE1MwkJbGlnaHQgc2xhdGUgZ3JheQoxMTkgMTM2IDE1MwkJTGlnaHRTbGF0ZUdyYXkKMTE5IDEzNiAxNTMJCWxpZ2h0IHNsYXRlIGdyZXkKMTE5IDEzNiAxNTMJCUxpZ2h0U2xhdGVHcmV5CjE5MCAxOTAgMTkwCQlncmF5CjE5MCAxOTAgMTkwCQlncmV5CjE5MCAxOTAgMTkwCQl4MTEgZ3JheQoxOTAgMTkwIDE5MAkJWDExR3JheQoxOTAgMTkwIDE5MAkJeDExIGdyZXkKMTkwIDE5MCAxOTAJCVgxMUdyZXkKMTI4IDEyOCAxMjgJCXdlYiBncmF5CjEyOCAxMjggMTI4CQlXZWJHcmF5CjEyOCAxMjggMTI4CQl3ZWIgZ3JleQoxMjggMTI4IDEyOAkJV2ViR3JleQoyMTEgMjExIDIxMQkJbGlnaHQgZ3JleQoyMTEgMjExIDIxMQkJTGlnaHRHcmV5CjIxMSAyMTEgMjExCQlsaWdodCBncmF5CjIxMSAyMTEgMjExCQlMaWdodEdyYXkKIDI1ICAyNSAxMTIJCW1pZG5pZ2h0IGJsdWUKIDI1ICAyNSAxMTIJCU1pZG5pZ2h0Qmx1ZQogIDAgICAwIDEyOAkJbmF2eQogIDAgICAwIDEyOAkJbmF2eSBibHVlCiAgMCAgIDAgMTI4CQlOYXZ5Qmx1ZQoxMDAgMTQ5IDIzNwkJY29ybmZsb3dlciBibHVlCjEwMCAxNDkgMjM3CQlDb3JuZmxvd2VyQmx1ZQogNzIgIDYxIDEzOQkJZGFyayBzbGF0ZSBibHVlCiA3MiAgNjEgMTM5CQlEYXJrU2xhdGVCbHVlCjEwNiAgOTAgMjA1CQlzbGF0ZSBibHVlCjEwNiAgOTAgMjA1CQlTbGF0ZUJsdWUKMTIzIDEwNCAyMzgJCW1lZGl1bSBzbGF0ZSBibHVlCjEyMyAxMDQgMjM4CQlNZWRpdW1TbGF0ZUJsdWUKMTMyIDExMiAyNTUJCWxpZ2h0IHNsYXRlIGJsdWUKMTMyIDExMiAyNTUJCUxpZ2h0U2xhdGVCbHVlCiAgMCAgIDAgMjA1CQltZWRpdW0gYmx1ZQogIDAgICAwIDIwNQkJTWVkaXVtQmx1ZQogNjUgMTA1IDIyNQkJcm95YWwgYmx1ZQogNjUgMTA1IDIyNQkJUm95YWxCbHVlCiAgMCAgIDAgMjU1CQlibHVlCiAzMCAxNDQgMjU1CQlkb2RnZXIgYmx1ZQogMzAgMTQ0IDI1NQkJRG9kZ2VyQmx1ZQogIDAgMTkxIDI1NQkJZGVlcCBza3kgYmx1ZQogIDAgMTkxIDI1NQkJRGVlcFNreUJsdWUKMTM1IDIwNiAyMzUJCXNreSBibHVlCjEzNSAyMDYgMjM1CQlTa3lCbHVlCjEzNSAyMDYgMjUwCQlsaWdodCBza3kgYmx1ZQoxMzUgMjA2IDI1MAkJTGlnaHRTa3lCbHVlCiA3MCAxMzAgMTgwCQlzdGVlbCBibHVlCiA3MCAxMzAgMTgwCQlTdGVlbEJsdWUKMTc2IDE5NiAyMjIJCWxpZ2h0IHN0ZWVsIGJsdWUKMTc2IDE5NiAyMjIJCUxpZ2h0U3RlZWxCbHVlCjE3MyAyMTYgMjMwCQlsaWdodCBibHVlCjE3MyAyMTYgMjMwCQlMaWdodEJsdWUKMTc2IDIyNCAyMzAJCXBvd2RlciBibHVlCjE3NiAyMjQgMjMwCQlQb3dkZXJCbHVlCjE3NSAyMzggMjM4CQlwYWxlIHR1cnF1b2lzZQoxNzUgMjM4IDIzOAkJUGFsZVR1cnF1b2lzZQogIDAgMjA2IDIwOQkJZGFyayB0dXJxdW9pc2UKICAwIDIwNiAyMDkJCURhcmtUdXJxdW9pc2UKIDcyIDIwOSAyMDQJCW1lZGl1bSB0dXJxdW9pc2UKIDcyIDIwOSAyMDQJCU1lZGl1bVR1cnF1b2lzZQogNjQgMjI0IDIwOAkJdHVycXVvaXNlCiAgMCAyNTUgMjU1CQljeWFuCiAgMCAyNTUgMjU1CQlhcXVhCjIyNCAyNTUgMjU1CQlsaWdodCBjeWFuCjIyNCAyNTUgMjU1CQlMaWdodEN5YW4KIDk1IDE1OCAxNjAJCWNhZGV0IGJsdWUKIDk1IDE1OCAxNjAJCUNhZGV0Qmx1ZQoxMDIgMjA1IDE3MAkJbWVkaXVtIGFxdWFtYXJpbmUKMTAyIDIwNSAxNzAJCU1lZGl1bUFxdWFtYXJpbmUKMTI3IDI1NSAyMTIJCWFxdWFtYXJpbmUKICAwIDEwMCAgIDAJCWRhcmsgZ3JlZW4KICAwIDEwMCAgIDAJCURhcmtHcmVlbgogODUgMTA3ICA0NwkJZGFyayBvbGl2ZSBncmVlbgogODUgMTA3ICA0NwkJRGFya09saXZlR3JlZW4KMTQzIDE4OCAxNDMJCWRhcmsgc2VhIGdyZWVuCjE0MyAxODggMTQzCQlEYXJrU2VhR3JlZW4KIDQ2IDEzOSAgODcJCXNlYSBncmVlbgogNDYgMTM5ICA4NwkJU2VhR3JlZW4KIDYwIDE3OSAxMTMJCW1lZGl1bSBzZWEgZ3JlZW4KIDYwIDE3OSAxMTMJCU1lZGl1bVNlYUdyZWVuCiAzMiAxNzggMTcwCQlsaWdodCBzZWEgZ3JlZW4KIDMyIDE3OCAxNzAJCUxpZ2h0U2VhR3JlZW4KMTUyIDI1MSAxNTIJCXBhbGUgZ3JlZW4KMTUyIDI1MSAxNTIJCVBhbGVHcmVlbgogIDAgMjU1IDEyNwkJc3ByaW5nIGdyZWVuCiAgMCAyNTUgMTI3CQlTcHJpbmdHcmVlbgoxMjQgMjUyICAgMAkJbGF3biBncmVlbgoxMjQgMjUyICAgMAkJTGF3bkdyZWVuCiAgMCAyNTUgICAwCQlncmVlbgogIDAgMjU1ICAgMAkJbGltZQogIDAgMjU1ICAgMAkJeDExIGdyZWVuCiAgMCAyNTUgICAwCQlYMTFHcmVlbgogIDAgMTI4ICAgMAkJd2ViIGdyZWVuCiAgMCAxMjggICAwCQlXZWJHcmVlbgoxMjcgMjU1ICAgMAkJY2hhcnRyZXVzZQogIDAgMjUwIDE1NAkJbWVkaXVtIHNwcmluZyBncmVlbgogIDAgMjUwIDE1NAkJTWVkaXVtU3ByaW5nR3JlZW4KMTczIDI1NSAgNDcJCWdyZWVuIHllbGxvdwoxNzMgMjU1ICA0NwkJR3JlZW5ZZWxsb3cKIDUwIDIwNSAgNTAJCWxpbWUgZ3JlZW4KIDUwIDIwNSAgNTAJCUxpbWVHcmVlbgoxNTQgMjA1ICA1MAkJeWVsbG93IGdyZWVuCjE1NCAyMDUgIDUwCQlZZWxsb3dHcmVlbgogMzQgMTM5ICAzNAkJZm9yZXN0IGdyZWVuCiAzNCAxMzkgIDM0CQlGb3Jlc3RHcmVlbgoxMDcgMTQyICAzNQkJb2xpdmUgZHJhYgoxMDcgMTQyICAzNQkJT2xpdmVEcmFiCjE4OSAxODMgMTA3CQlkYXJrIGtoYWtpCjE4OSAxODMgMTA3CQlEYXJrS2hha2kKMjQwIDIzMCAxNDAJCWtoYWtpCjIzOCAyMzIgMTcwCQlwYWxlIGdvbGRlbnJvZAoyMzggMjMyIDE3MAkJUGFsZUdvbGRlbnJvZAoyNTAgMjUwIDIxMAkJbGlnaHQgZ29sZGVucm9kIHllbGxvdwoyNTAgMjUwIDIxMAkJTGlnaHRHb2xkZW5yb2RZZWxsb3cKMjU1IDI1NSAyMjQJCWxpZ2h0IHllbGxvdwoyNTUgMjU1IDIyNAkJTGlnaHRZZWxsb3cKMjU1IDI1NSAgIDAJCXllbGxvdwoyNTUgMjE1ICAgMAkJZ29sZAoyMzggMjIxIDEzMAkJbGlnaHQgZ29sZGVucm9kCjIzOCAyMjEgMTMwCQlMaWdodEdvbGRlbnJvZAoyMTggMTY1ICAzMgkJZ29sZGVucm9kCjE4NCAxMzQgIDExCQlkYXJrIGdvbGRlbnJvZAoxODQgMTM0ICAxMQkJRGFya0dvbGRlbnJvZAoxODggMTQzIDE0MwkJcm9zeSBicm93bgoxODggMTQzIDE0MwkJUm9zeUJyb3duCjIwNSAgOTIgIDkyCQlpbmRpYW4gcmVkCjIwNSAgOTIgIDkyCQlJbmRpYW5SZWQKMTM5ICA2OSAgMTkJCXNhZGRsZSBicm93bgoxMzkgIDY5ICAxOQkJU2FkZGxlQnJvd24KMTYwICA4MiAgNDUJCXNpZW5uYQoyMDUgMTMzICA2MwkJcGVydQoyMjIgMTg0IDEzNQkJYnVybHl3b29kCjI0NSAyNDUgMjIwCQliZWlnZQoyNDUgMjIyIDE3OQkJd2hlYXQKMjQ0IDE2NCAgOTYJCXNhbmR5IGJyb3duCjI0NCAxNjQgIDk2CQlTYW5keUJyb3duCjIxMCAxODAgMTQwCQl0YW4KMjEwIDEwNSAgMzAJCWNob2NvbGF0ZQoxNzggIDM0ICAzNAkJZmlyZWJyaWNrCjE2NSAgNDIgIDQyCQlicm93bgoyMzMgMTUwIDEyMgkJZGFyayBzYWxtb24KMjMzIDE1MCAxMjIJCURhcmtTYWxtb24KMjUwIDEyOCAxMTQJCXNhbG1vbgoyNTUgMTYwIDEyMgkJbGlnaHQgc2FsbW9uCjI1NSAxNjAgMTIyCQlMaWdodFNhbG1vbgoyNTUgMTY1ICAgMAkJb3JhbmdlCjI1NSAxNDAgICAwCQlkYXJrIG9yYW5nZQoyNTUgMTQwICAgMAkJRGFya09yYW5nZQoyNTUgMTI3ICA4MAkJY29yYWwKMjQwIDEyOCAxMjgJCWxpZ2h0IGNvcmFsCjI0MCAxMjggMTI4CQlMaWdodENvcmFsCjI1NSAgOTkgIDcxCQl0b21hdG8KMjU1ICA2OSAgIDAJCW9yYW5nZSByZWQKMjU1ICA2OSAgIDAJCU9yYW5nZVJlZAoyNTUgICAwICAgMAkJcmVkCjI1NSAxMDUgMTgwCQlob3QgcGluawoyNTUgMTA1IDE4MAkJSG90UGluawoyNTUgIDIwIDE0NwkJZGVlcCBwaW5rCjI1NSAgMjAgMTQ3CQlEZWVwUGluawoyNTUgMTkyIDIwMwkJcGluawoyNTUgMTgyIDE5MwkJbGlnaHQgcGluawoyNTUgMTgyIDE5MwkJTGlnaHRQaW5rCjIxOSAxMTIgMTQ3CQlwYWxlIHZpb2xldCByZWQKMjE5IDExMiAxNDcJCVBhbGVWaW9sZXRSZWQKMTc2ICA0OCAgOTYJCW1hcm9vbgoxNzYgIDQ4ICA5NgkJeDExIG1hcm9vbgoxNzYgIDQ4ICA5NgkJWDExTWFyb29uCjEyOCAgIDAgICAwCQl3ZWIgbWFyb29uCjEyOCAgIDAgICAwCQlXZWJNYXJvb24KMTk5ICAyMSAxMzMJCW1lZGl1bSB2aW9sZXQgcmVkCjE5OSAgMjEgMTMzCQlNZWRpdW1WaW9sZXRSZWQKMjA4ICAzMiAxNDQJCXZpb2xldCByZWQKMjA4ICAzMiAxNDQJCVZpb2xldFJlZAoyNTUgICAwIDI1NQkJbWFnZW50YQoyNTUgICAwIDI1NQkJZnVjaHNpYQoyMzggMTMwIDIzOAkJdmlvbGV0CjIyMSAxNjAgMjIxCQlwbHVtCjIxOCAxMTIgMjE0CQlvcmNoaWQKMTg2ICA4NSAyMTEJCW1lZGl1bSBvcmNoaWQKMTg2ICA4NSAyMTEJCU1lZGl1bU9yY2hpZAoxNTMgIDUwIDIwNAkJZGFyayBvcmNoaWQKMTUzICA1MCAyMDQJCURhcmtPcmNoaWQKMTQ4ICAgMCAyMTEJCWRhcmsgdmlvbGV0CjE0OCAgIDAgMjExCQlEYXJrVmlvbGV0CjEzOCAgNDMgMjI2CQlibHVlIHZpb2xldAoxMzggIDQzIDIyNgkJQmx1ZVZpb2xldAoxNjAgIDMyIDI0MAkJcHVycGxlCjE2MCAgMzIgMjQwCQl4MTEgcHVycGxlCjE2MCAgMzIgMjQwCQlYMTFQdXJwbGUKMTI4ICAgMCAxMjgJCXdlYiBwdXJwbGUKMTI4ICAgMCAxMjgJCVdlYlB1cnBsZQoxNDcgMTEyIDIxOQkJbWVkaXVtIHB1cnBsZQoxNDcgMTEyIDIxOQkJTWVkaXVtUHVycGxlCjIxNiAxOTEgMjE2CQl0aGlzdGxlCjI1NSAyNTAgMjUwCQlzbm93MQoyMzggMjMzIDIzMwkJc25vdzIKMjA1IDIwMSAyMDEJCXNub3czCjEzOSAxMzcgMTM3CQlzbm93NAoyNTUgMjQ1IDIzOAkJc2Vhc2hlbGwxCjIzOCAyMjkgMjIyCQlzZWFzaGVsbDIKMjA1IDE5NyAxOTEJCXNlYXNoZWxsMwoxMzkgMTM0IDEzMAkJc2Vhc2hlbGw0CjI1NSAyMzkgMjE5CQlBbnRpcXVlV2hpdGUxCjIzOCAyMjMgMjA0CQlBbnRpcXVlV2hpdGUyCjIwNSAxOTIgMTc2CQlBbnRpcXVlV2hpdGUzCjEzOSAxMzEgMTIwCQlBbnRpcXVlV2hpdGU0CjI1NSAyMjggMTk2CQliaXNxdWUxCjIzOCAyMTMgMTgzCQliaXNxdWUyCjIwNSAxODMgMTU4CQliaXNxdWUzCjEzOSAxMjUgMTA3CQliaXNxdWU0CjI1NSAyMTggMTg1CQlQZWFjaFB1ZmYxCjIzOCAyMDMgMTczCQlQZWFjaFB1ZmYyCjIwNSAxNzUgMTQ5CQlQZWFjaFB1ZmYzCjEzOSAxMTkgMTAxCQlQZWFjaFB1ZmY0CjI1NSAyMjIgMTczCQlOYXZham9XaGl0ZTEKMjM4IDIwNyAxNjEJCU5hdmFqb1doaXRlMgoyMDUgMTc5IDEzOQkJTmF2YWpvV2hpdGUzCjEzOSAxMjEgIDk0CQlOYXZham9XaGl0ZTQKMjU1IDI1MCAyMDUJCUxlbW9uQ2hpZmZvbjEKMjM4IDIzMyAxOTEJCUxlbW9uQ2hpZmZvbjIKMjA1IDIwMSAxNjUJCUxlbW9uQ2hpZmZvbjMKMTM5IDEzNyAxMTIJCUxlbW9uQ2hpZmZvbjQKMjU1IDI0OCAyMjAJCWNvcm5zaWxrMQoyMzggMjMyIDIwNQkJY29ybnNpbGsyCjIwNSAyMDAgMTc3CQljb3Juc2lsazMKMTM5IDEzNiAxMjAJCWNvcm5zaWxrNAoyNTUgMjU1IDI0MAkJaXZvcnkxCjIzOCAyMzggMjI0CQlpdm9yeTIKMjA1IDIwNSAxOTMJCWl2b3J5MwoxMzkgMTM5IDEzMQkJaXZvcnk0CjI0MCAyNTUgMjQwCQlob25leWRldzEKMjI0IDIzOCAyMjQJCWhvbmV5ZGV3MgoxOTMgMjA1IDE5MwkJaG9uZXlkZXczCjEzMSAxMzkgMTMxCQlob25leWRldzQKMjU1IDI0MCAyNDUJCUxhdmVuZGVyQmx1c2gxCjIzOCAyMjQgMjI5CQlMYXZlbmRlckJsdXNoMgoyMDUgMTkzIDE5NwkJTGF2ZW5kZXJCbHVzaDMKMTM5IDEzMSAxMzQJCUxhdmVuZGVyQmx1c2g0CjI1NSAyMjggMjI1CQlNaXN0eVJvc2UxCjIzOCAyMTMgMjEwCQlNaXN0eVJvc2UyCjIwNSAxODMgMTgxCQlNaXN0eVJvc2UzCjEzOSAxMjUgMTIzCQlNaXN0eVJvc2U0CjI0MCAyNTUgMjU1CQlhenVyZTEKMjI0IDIzOCAyMzgJCWF6dXJlMgoxOTMgMjA1IDIwNQkJYXp1cmUzCjEzMSAxMzkgMTM5CQlhenVyZTQKMTMxIDExMSAyNTUJCVNsYXRlQmx1ZTEKMTIyIDEwMyAyMzgJCVNsYXRlQmx1ZTIKMTA1ICA4OSAyMDUJCVNsYXRlQmx1ZTMKIDcxICA2MCAxMzkJCVNsYXRlQmx1ZTQKIDcyIDExOCAyNTUJCVJveWFsQmx1ZTEKIDY3IDExMCAyMzgJCVJveWFsQmx1ZTIKIDU4ICA5NSAyMDUJCVJveWFsQmx1ZTMKIDM5ICA2NCAxMzkJCVJveWFsQmx1ZTQKICAwICAgMCAyNTUJCWJsdWUxCiAgMCAgIDAgMjM4CQlibHVlMgogIDAgICAwIDIwNQkJYmx1ZTMKICAwICAgMCAxMzkJCWJsdWU0CiAzMCAxNDQgMjU1CQlEb2RnZXJCbHVlMQogMjggMTM0IDIzOAkJRG9kZ2VyQmx1ZTIKIDI0IDExNiAyMDUJCURvZGdlckJsdWUzCiAxNiAgNzggMTM5CQlEb2RnZXJCbHVlNAogOTkgMTg0IDI1NQkJU3RlZWxCbHVlMQogOTIgMTcyIDIzOAkJU3RlZWxCbHVlMgogNzkgMTQ4IDIwNQkJU3RlZWxCbHVlMwogNTQgMTAwIDEzOQkJU3RlZWxCbHVlNAogIDAgMTkxIDI1NQkJRGVlcFNreUJsdWUxCiAgMCAxNzggMjM4CQlEZWVwU2t5Qmx1ZTIKICAwIDE1NCAyMDUJCURlZXBTa3lCbHVlMwogIDAgMTA0IDEzOQkJRGVlcFNreUJsdWU0CjEzNSAyMDYgMjU1CQlTa3lCbHVlMQoxMjYgMTkyIDIzOAkJU2t5Qmx1ZTIKMTA4IDE2NiAyMDUJCVNreUJsdWUzCiA3NCAxMTIgMTM5CQlTa3lCbHVlNAoxNzYgMjI2IDI1NQkJTGlnaHRTa3lCbHVlMQoxNjQgMjExIDIzOAkJTGlnaHRTa3lCbHVlMgoxNDEgMTgyIDIwNQkJTGlnaHRTa3lCbHVlMwogOTYgMTIzIDEzOQkJTGlnaHRTa3lCbHVlNAoxOTggMjI2IDI1NQkJU2xhdGVHcmF5MQoxODUgMjExIDIzOAkJU2xhdGVHcmF5MgoxNTkgMTgyIDIwNQkJU2xhdGVHcmF5MwoxMDggMTIzIDEzOQkJU2xhdGVHcmF5NAoyMDIgMjI1IDI1NQkJTGlnaHRTdGVlbEJsdWUxCjE4OCAyMTAgMjM4CQlMaWdodFN0ZWVsQmx1ZTIKMTYyIDE4MSAyMDUJCUxpZ2h0U3RlZWxCbHVlMwoxMTAgMTIzIDEzOQkJTGlnaHRTdGVlbEJsdWU0CjE5MSAyMzkgMjU1CQlMaWdodEJsdWUxCjE3OCAyMjMgMjM4CQlMaWdodEJsdWUyCjE1NCAxOTIgMjA1CQlMaWdodEJsdWUzCjEwNCAxMzEgMTM5CQlMaWdodEJsdWU0CjIyNCAyNTUgMjU1CQlMaWdodEN5YW4xCjIwOSAyMzggMjM4CQlMaWdodEN5YW4yCjE4MCAyMDUgMjA1CQlMaWdodEN5YW4zCjEyMiAxMzkgMTM5CQlMaWdodEN5YW40CjE4NyAyNTUgMjU1CQlQYWxlVHVycXVvaXNlMQoxNzQgMjM4IDIzOAkJUGFsZVR1cnF1b2lzZTIKMTUwIDIwNSAyMDUJCVBhbGVUdXJxdW9pc2UzCjEwMiAxMzkgMTM5CQlQYWxlVHVycXVvaXNlNAoxNTIgMjQ1IDI1NQkJQ2FkZXRCbHVlMQoxNDIgMjI5IDIzOAkJQ2FkZXRCbHVlMgoxMjIgMTk3IDIwNQkJQ2FkZXRCbHVlMwogODMgMTM0IDEzOQkJQ2FkZXRCbHVlNAogIDAgMjQ1IDI1NQkJdHVycXVvaXNlMQogIDAgMjI5IDIzOAkJdHVycXVvaXNlMgogIDAgMTk3IDIwNQkJdHVycXVvaXNlMwogIDAgMTM0IDEzOQkJdHVycXVvaXNlNAogIDAgMjU1IDI1NQkJY3lhbjEKICAwIDIzOCAyMzgJCWN5YW4yCiAgMCAyMDUgMjA1CQljeWFuMwogIDAgMTM5IDEzOQkJY3lhbjQKMTUxIDI1NSAyNTUJCURhcmtTbGF0ZUdyYXkxCjE0MSAyMzggMjM4CQlEYXJrU2xhdGVHcmF5MgoxMjEgMjA1IDIwNQkJRGFya1NsYXRlR3JheTMKIDgyIDEzOSAxMzkJCURhcmtTbGF0ZUdyYXk0CjEyNyAyNTUgMjEyCQlhcXVhbWFyaW5lMQoxMTggMjM4IDE5OAkJYXF1YW1hcmluZTIKMTAyIDIwNSAxNzAJCWFxdWFtYXJpbmUzCiA2OSAxMzkgMTE2CQlhcXVhbWFyaW5lNAoxOTMgMjU1IDE5MwkJRGFya1NlYUdyZWVuMQoxODAgMjM4IDE4MAkJRGFya1NlYUdyZWVuMgoxNTUgMjA1IDE1NQkJRGFya1NlYUdyZWVuMwoxMDUgMTM5IDEwNQkJRGFya1NlYUdyZWVuNAogODQgMjU1IDE1OQkJU2VhR3JlZW4xCiA3OCAyMzggMTQ4CQlTZWFHcmVlbjIKIDY3IDIwNSAxMjgJCVNlYUdyZWVuMwogNDYgMTM5ICA4NwkJU2VhR3JlZW40CjE1NCAyNTUgMTU0CQlQYWxlR3JlZW4xCjE0NCAyMzggMTQ0CQlQYWxlR3JlZW4yCjEyNCAyMDUgMTI0CQlQYWxlR3JlZW4zCiA4NCAxMzkgIDg0CQlQYWxlR3JlZW40CiAgMCAyNTUgMTI3CQlTcHJpbmdHcmVlbjEKICAwIDIzOCAxMTgJCVNwcmluZ0dyZWVuMgogIDAgMjA1IDEwMgkJU3ByaW5nR3JlZW4zCiAgMCAxMzkgIDY5CQlTcHJpbmdHcmVlbjQKICAwIDI1NSAgIDAJCWdyZWVuMQogIDAgMjM4ICAgMAkJZ3JlZW4yCiAgMCAyMDUgICAwCQlncmVlbjMKICAwIDEzOSAgIDAJCWdyZWVuNAoxMjcgMjU1ICAgMAkJY2hhcnRyZXVzZTEKMTE4IDIzOCAgIDAJCWNoYXJ0cmV1c2UyCjEwMiAyMDUgICAwCQljaGFydHJldXNlMwogNjkgMTM5ICAgMAkJY2hhcnRyZXVzZTQKMTkyIDI1NSAgNjIJCU9saXZlRHJhYjEKMTc5IDIzOCAgNTgJCU9saXZlRHJhYjIKMTU0IDIwNSAgNTAJCU9saXZlRHJhYjMKMTA1IDEzOSAgMzQJCU9saXZlRHJhYjQKMjAyIDI1NSAxMTIJCURhcmtPbGl2ZUdyZWVuMQoxODggMjM4IDEwNAkJRGFya09saXZlR3JlZW4yCjE2MiAyMDUgIDkwCQlEYXJrT2xpdmVHcmVlbjMKMTEwIDEzOSAgNjEJCURhcmtPbGl2ZUdyZWVuNAoyNTUgMjQ2IDE0MwkJa2hha2kxCjIzOCAyMzAgMTMzCQlraGFraTIKMjA1IDE5OCAxMTUJCWtoYWtpMwoxMzkgMTM0ICA3OAkJa2hha2k0CjI1NSAyMzYgMTM5CQlMaWdodEdvbGRlbnJvZDEKMjM4IDIyMCAxMzAJCUxpZ2h0R29sZGVucm9kMgoyMDUgMTkwIDExMgkJTGlnaHRHb2xkZW5yb2QzCjEzOSAxMjkgIDc2CQlMaWdodEdvbGRlbnJvZDQKMjU1IDI1NSAyMjQJCUxpZ2h0WWVsbG93MQoyMzggMjM4IDIwOQkJTGlnaHRZZWxsb3cyCjIwNSAyMDUgMTgwCQlMaWdodFllbGxvdzMKMTM5IDEzOSAxMjIJCUxpZ2h0WWVsbG93NAoyNTUgMjU1ICAgMAkJeWVsbG93MQoyMzggMjM4ICAgMAkJeWVsbG93MgoyMDUgMjA1ICAgMAkJeWVsbG93MwoxMzkgMTM5ICAgMAkJeWVsbG93NAoyNTUgMjE1ICAgMAkJZ29sZDEKMjM4IDIwMSAgIDAJCWdvbGQyCjIwNSAxNzMgICAwCQlnb2xkMwoxMzkgMTE3ICAgMAkJZ29sZDQKMjU1IDE5MyAgMzcJCWdvbGRlbnJvZDEKMjM4IDE4MCAgMzQJCWdvbGRlbnJvZDIKMjA1IDE1NSAgMjkJCWdvbGRlbnJvZDMKMTM5IDEwNSAgMjAJCWdvbGRlbnJvZDQKMjU1IDE4NSAgMTUJCURhcmtHb2xkZW5yb2QxCjIzOCAxNzMgIDE0CQlEYXJrR29sZGVucm9kMgoyMDUgMTQ5ICAxMgkJRGFya0dvbGRlbnJvZDMKMTM5IDEwMSAgIDgJCURhcmtHb2xkZW5yb2Q0CjI1NSAxOTMgMTkzCQlSb3N5QnJvd24xCjIzOCAxODAgMTgwCQlSb3N5QnJvd24yCjIwNSAxNTUgMTU1CQlSb3N5QnJvd24zCjEzOSAxMDUgMTA1CQlSb3N5QnJvd240CjI1NSAxMDYgMTA2CQlJbmRpYW5SZWQxCjIzOCAgOTkgIDk5CQlJbmRpYW5SZWQyCjIwNSAgODUgIDg1CQlJbmRpYW5SZWQzCjEzOSAgNTggIDU4CQlJbmRpYW5SZWQ0CjI1NSAxMzAgIDcxCQlzaWVubmExCjIzOCAxMjEgIDY2CQlzaWVubmEyCjIwNSAxMDQgIDU3CQlzaWVubmEzCjEzOSAgNzEgIDM4CQlzaWVubmE0CjI1NSAyMTEgMTU1CQlidXJseXdvb2QxCjIzOCAxOTcgMTQ1CQlidXJseXdvb2QyCjIwNSAxNzAgMTI1CQlidXJseXdvb2QzCjEzOSAxMTUgIDg1CQlidXJseXdvb2Q0CjI1NSAyMzEgMTg2CQl3aGVhdDEKMjM4IDIxNiAxNzQJCXdoZWF0MgoyMDUgMTg2IDE1MAkJd2hlYXQzCjEzOSAxMjYgMTAyCQl3aGVhdDQKMjU1IDE2NSAgNzkJCXRhbjEKMjM4IDE1NCAgNzMJCXRhbjIKMjA1IDEzMyAgNjMJCXRhbjMKMTM5ICA5MCAgNDMJCXRhbjQKMjU1IDEyNyAgMzYJCWNob2NvbGF0ZTEKMjM4IDExOCAgMzMJCWNob2NvbGF0ZTIKMjA1IDEwMiAgMjkJCWNob2NvbGF0ZTMKMTM5ICA2OSAgMTkJCWNob2NvbGF0ZTQKMjU1ICA0OCAgNDgJCWZpcmVicmljazEKMjM4ICA0NCAgNDQJCWZpcmVicmljazIKMjA1ICAzOCAgMzgJCWZpcmVicmljazMKMTM5ICAyNiAgMjYJCWZpcmVicmljazQKMjU1ICA2NCAgNjQJCWJyb3duMQoyMzggIDU5ICA1OQkJYnJvd24yCjIwNSAgNTEgIDUxCQlicm93bjMKMTM5ICAzNSAgMzUJCWJyb3duNAoyNTUgMTQwIDEwNQkJc2FsbW9uMQoyMzggMTMwICA5OAkJc2FsbW9uMgoyMDUgMTEyICA4NAkJc2FsbW9uMwoxMzkgIDc2ICA1NwkJc2FsbW9uNAoyNTUgMTYwIDEyMgkJTGlnaHRTYWxtb24xCjIzOCAxNDkgMTE0CQlMaWdodFNhbG1vbjIKMjA1IDEyOSAgOTgJCUxpZ2h0U2FsbW9uMwoxMzkgIDg3ICA2NgkJTGlnaHRTYWxtb240CjI1NSAxNjUgICAwCQlvcmFuZ2UxCjIzOCAxNTQgICAwCQlvcmFuZ2UyCjIwNSAxMzMgICAwCQlvcmFuZ2UzCjEzOSAgOTAgICAwCQlvcmFuZ2U0CjI1NSAxMjcgICAwCQlEYXJrT3JhbmdlMQoyMzggMTE4ICAgMAkJRGFya09yYW5nZTIKMjA1IDEwMiAgIDAJCURhcmtPcmFuZ2UzCjEzOSAgNjkgICAwCQlEYXJrT3JhbmdlNAoyNTUgMTE0ICA4NgkJY29yYWwxCjIzOCAxMDYgIDgwCQljb3JhbDIKMjA1ICA5MSAgNjkJCWNvcmFsMwoxMzkgIDYyICA0NwkJY29yYWw0CjI1NSAgOTkgIDcxCQl0b21hdG8xCjIzOCAgOTIgIDY2CQl0b21hdG8yCjIwNSAgNzkgIDU3CQl0b21hdG8zCjEzOSAgNTQgIDM4CQl0b21hdG80CjI1NSAgNjkgICAwCQlPcmFuZ2VSZWQxCjIzOCAgNjQgICAwCQlPcmFuZ2VSZWQyCjIwNSAgNTUgICAwCQlPcmFuZ2VSZWQzCjEzOSAgMzcgICAwCQlPcmFuZ2VSZWQ0CjI1NSAgIDAgICAwCQlyZWQxCjIzOCAgIDAgICAwCQlyZWQyCjIwNSAgIDAgICAwCQlyZWQzCjEzOSAgIDAgICAwCQlyZWQ0CjI1NSAgMjAgMTQ3CQlEZWVwUGluazEKMjM4ICAxOCAxMzcJCURlZXBQaW5rMgoyMDUgIDE2IDExOAkJRGVlcFBpbmszCjEzOSAgMTAgIDgwCQlEZWVwUGluazQKMjU1IDExMCAxODAJCUhvdFBpbmsxCjIzOCAxMDYgMTY3CQlIb3RQaW5rMgoyMDUgIDk2IDE0NAkJSG90UGluazMKMTM5ICA1OCAgOTgJCUhvdFBpbms0CjI1NSAxODEgMTk3CQlwaW5rMQoyMzggMTY5IDE4NAkJcGluazIKMjA1IDE0NSAxNTgJCXBpbmszCjEzOSAgOTkgMTA4CQlwaW5rNAoyNTUgMTc0IDE4NQkJTGlnaHRQaW5rMQoyMzggMTYyIDE3MwkJTGlnaHRQaW5rMgoyMDUgMTQwIDE0OQkJTGlnaHRQaW5rMwoxMzkgIDk1IDEwMQkJTGlnaHRQaW5rNAoyNTUgMTMwIDE3MQkJUGFsZVZpb2xldFJlZDEKMjM4IDEyMSAxNTkJCVBhbGVWaW9sZXRSZWQyCjIwNSAxMDQgMTM3CQlQYWxlVmlvbGV0UmVkMwoxMzkgIDcxICA5MwkJUGFsZVZpb2xldFJlZDQKMjU1ICA1MiAxNzkJCW1hcm9vbjEKMjM4ICA0OCAxNjcJCW1hcm9vbjIKMjA1ICA0MSAxNDQJCW1hcm9vbjMKMTM5ICAyOCAgOTgJCW1hcm9vbjQKMjU1ICA2MiAxNTAJCVZpb2xldFJlZDEKMjM4ICA1OCAxNDAJCVZpb2xldFJlZDIKMjA1ICA1MCAxMjAJCVZpb2xldFJlZDMKMTM5ICAzNCAgODIJCVZpb2xldFJlZDQKMjU1ICAgMCAyNTUJCW1hZ2VudGExCjIzOCAgIDAgMjM4CQltYWdlbnRhMgoyMDUgICAwIDIwNQkJbWFnZW50YTMKMTM5ICAgMCAxMzkJCW1hZ2VudGE0CjI1NSAxMzEgMjUwCQlvcmNoaWQxCjIzOCAxMjIgMjMzCQlvcmNoaWQyCjIwNSAxMDUgMjAxCQlvcmNoaWQzCjEzOSAgNzEgMTM3CQlvcmNoaWQ0CjI1NSAxODcgMjU1CQlwbHVtMQoyMzggMTc0IDIzOAkJcGx1bTIKMjA1IDE1MCAyMDUJCXBsdW0zCjEzOSAxMDIgMTM5CQlwbHVtNAoyMjQgMTAyIDI1NQkJTWVkaXVtT3JjaGlkMQoyMDkgIDk1IDIzOAkJTWVkaXVtT3JjaGlkMgoxODAgIDgyIDIwNQkJTWVkaXVtT3JjaGlkMwoxMjIgIDU1IDEzOQkJTWVkaXVtT3JjaGlkNAoxOTEgIDYyIDI1NQkJRGFya09yY2hpZDEKMTc4ICA1OCAyMzgJCURhcmtPcmNoaWQyCjE1NCAgNTAgMjA1CQlEYXJrT3JjaGlkMwoxMDQgIDM0IDEzOQkJRGFya09yY2hpZDQKMTU1ICA0OCAyNTUJCXB1cnBsZTEKMTQ1ICA0NCAyMzgJCXB1cnBsZTIKMTI1ICAzOCAyMDUJCXB1cnBsZTMKIDg1ICAyNiAxMzkJCXB1cnBsZTQKMTcxIDEzMCAyNTUJCU1lZGl1bVB1cnBsZTEKMTU5IDEyMSAyMzgJCU1lZGl1bVB1cnBsZTIKMTM3IDEwNCAyMDUJCU1lZGl1bVB1cnBsZTMKIDkzICA3MSAxMzkJCU1lZGl1bVB1cnBsZTQKMjU1IDIyNSAyNTUJCXRoaXN0bGUxCjIzOCAyMTAgMjM4CQl0aGlzdGxlMgoyMDUgMTgxIDIwNQkJdGhpc3RsZTMKMTM5IDEyMyAxMzkJCXRoaXN0bGU0CiAgMCAgIDAgICAwCQlncmF5MAogIDAgICAwICAgMAkJZ3JleTAKICAzICAgMyAgIDMJCWdyYXkxCiAgMyAgIDMgICAzCQlncmV5MQogIDUgICA1ICAgNQkJZ3JheTIKICA1ICAgNSAgIDUJCWdyZXkyCiAgOCAgIDggICA4CQlncmF5MwogIDggICA4ICAgOAkJZ3JleTMKIDEwICAxMCAgMTAJCWdyYXk0CiAxMCAgMTAgIDEwCQlncmV5NAogMTMgIDEzICAxMwkJZ3JheTUKIDEzICAxMyAgMTMJCWdyZXk1CiAxNSAgMTUgIDE1CQlncmF5NgogMTUgIDE1ICAxNQkJZ3JleTYKIDE4ICAxOCAgMTgJCWdyYXk3CiAxOCAgMTggIDE4CQlncmV5NwogMjAgIDIwICAyMAkJZ3JheTgKIDIwICAyMCAgMjAJCWdyZXk4CiAyMyAgMjMgIDIzCQlncmF5OQogMjMgIDIzICAyMwkJZ3JleTkKIDI2ICAyNiAgMjYJCWdyYXkxMAogMjYgIDI2ICAyNgkJZ3JleTEwCiAyOCAgMjggIDI4CQlncmF5MTEKIDI4ICAyOCAgMjgJCWdyZXkxMQogMzEgIDMxICAzMQkJZ3JheTEyCiAzMSAgMzEgIDMxCQlncmV5MTIKIDMzICAzMyAgMzMJCWdyYXkxMwogMzMgIDMzICAzMwkJZ3JleTEzCiAzNiAgMzYgIDM2CQlncmF5MTQKIDM2ICAzNiAgMzYJCWdyZXkxNAogMzggIDM4ICAzOAkJZ3JheTE1CiAzOCAgMzggIDM4CQlncmV5MTUKIDQxICA0MSAgNDEJCWdyYXkxNgogNDEgIDQxICA0MQkJZ3JleTE2CiA0MyAgNDMgIDQzCQlncmF5MTcKIDQzICA0MyAgNDMJCWdyZXkxNwogNDYgIDQ2ICA0NgkJZ3JheTE4CiA0NiAgNDYgIDQ2CQlncmV5MTgKIDQ4ICA0OCAgNDgJCWdyYXkxOQogNDggIDQ4ICA0OAkJZ3JleTE5CiA1MSAgNTEgIDUxCQlncmF5MjAKIDUxICA1MSAgNTEJCWdyZXkyMAogNTQgIDU0ICA1NAkJZ3JheTIxCiA1NCAgNTQgIDU0CQlncmV5MjEKIDU2ICA1NiAgNTYJCWdyYXkyMgogNTYgIDU2ICA1NgkJZ3JleTIyCiA1OSAgNTkgIDU5CQlncmF5MjMKIDU5ICA1OSAgNTkJCWdyZXkyMwogNjEgIDYxICA2MQkJZ3JheTI0CiA2MSAgNjEgIDYxCQlncmV5MjQKIDY0ICA2NCAgNjQJCWdyYXkyNQogNjQgIDY0ICA2NAkJZ3JleTI1CiA2NiAgNjYgIDY2CQlncmF5MjYKIDY2ICA2NiAgNjYJCWdyZXkyNgogNjkgIDY5ICA2OQkJZ3JheTI3CiA2OSAgNjkgIDY5CQlncmV5MjcKIDcxICA3MSAgNzEJCWdyYXkyOAogNzEgIDcxICA3MQkJZ3JleTI4CiA3NCAgNzQgIDc0CQlncmF5MjkKIDc0ICA3NCAgNzQJCWdyZXkyOQogNzcgIDc3ICA3NwkJZ3JheTMwCiA3NyAgNzcgIDc3CQlncmV5MzAKIDc5ICA3OSAgNzkJCWdyYXkzMQogNzkgIDc5ICA3OQkJZ3JleTMxCiA4MiAgODIgIDgyCQlncmF5MzIKIDgyICA4MiAgODIJCWdyZXkzMgogODQgIDg0ICA4NAkJZ3JheTMzCiA4NCAgODQgIDg0CQlncmV5MzMKIDg3ICA4NyAgODcJCWdyYXkzNAogODcgIDg3ICA4NwkJZ3JleTM0CiA4OSAgODkgIDg5CQlncmF5MzUKIDg5ICA4OSAgODkJCWdyZXkzNQogOTIgIDkyICA5MgkJZ3JheTM2CiA5MiAgOTIgIDkyCQlncmV5MzYKIDk0ICA5NCAgOTQJCWdyYXkzNwogOTQgIDk0ICA5NAkJZ3JleTM3CiA5NyAgOTcgIDk3CQlncmF5MzgKIDk3ICA5NyAgOTcJCWdyZXkzOAogOTkgIDk5ICA5OQkJZ3JheTM5CiA5OSAgOTkgIDk5CQlncmV5MzkKMTAyIDEwMiAxMDIJCWdyYXk0MAoxMDIgMTAyIDEwMgkJZ3JleTQwCjEwNSAxMDUgMTA1CQlncmF5NDEKMTA1IDEwNSAxMDUJCWdyZXk0MQoxMDcgMTA3IDEwNwkJZ3JheTQyCjEwNyAxMDcgMTA3CQlncmV5NDIKMTEwIDExMCAxMTAJCWdyYXk0MwoxMTAgMTEwIDExMAkJZ3JleTQzCjExMiAxMTIgMTEyCQlncmF5NDQKMTEyIDExMiAxMTIJCWdyZXk0NAoxMTUgMTE1IDExNQkJZ3JheTQ1CjExNSAxMTUgMTE1CQlncmV5NDUKMTE3IDExNyAxMTcJCWdyYXk0NgoxMTcgMTE3IDExNwkJZ3JleTQ2CjEyMCAxMjAgMTIwCQlncmF5NDcKMTIwIDEyMCAxMjAJCWdyZXk0NwoxMjIgMTIyIDEyMgkJZ3JheTQ4CjEyMiAxMjIgMTIyCQlncmV5NDgKMTI1IDEyNSAxMjUJCWdyYXk0OQoxMjUgMTI1IDEyNQkJZ3JleTQ5CjEyNyAxMjcgMTI3CQlncmF5NTAKMTI3IDEyNyAxMjcJCWdyZXk1MAoxMzAgMTMwIDEzMAkJZ3JheTUxCjEzMCAxMzAgMTMwCQlncmV5NTEKMTMzIDEzMyAxMzMJCWdyYXk1MgoxMzMgMTMzIDEzMwkJZ3JleTUyCjEzNSAxMzUgMTM1CQlncmF5NTMKMTM1IDEzNSAxMzUJCWdyZXk1MwoxMzggMTM4IDEzOAkJZ3JheTU0CjEzOCAxMzggMTM4CQlncmV5NTQKMTQwIDE0MCAxNDAJCWdyYXk1NQoxNDAgMTQwIDE0MAkJZ3JleTU1CjE0MyAxNDMgMTQzCQlncmF5NTYKMTQzIDE0MyAxNDMJCWdyZXk1NgoxNDUgMTQ1IDE0NQkJZ3JheTU3CjE0NSAxNDUgMTQ1CQlncmV5NTcKMTQ4IDE0OCAxNDgJCWdyYXk1OAoxNDggMTQ4IDE0OAkJZ3JleTU4CjE1MCAxNTAgMTUwCQlncmF5NTkKMTUwIDE1MCAxNTAJCWdyZXk1OQoxNTMgMTUzIDE1MwkJZ3JheTYwCjE1MyAxNTMgMTUzCQlncmV5NjAKMTU2IDE1NiAxNTYJCWdyYXk2MQoxNTYgMTU2IDE1NgkJZ3JleTYxCjE1OCAxNTggMTU4CQlncmF5NjIKMTU4IDE1OCAxNTgJCWdyZXk2MgoxNjEgMTYxIDE2MQkJZ3JheTYzCjE2MSAxNjEgMTYxCQlncmV5NjMKMTYzIDE2MyAxNjMJCWdyYXk2NAoxNjMgMTYzIDE2MwkJZ3JleTY0CjE2NiAxNjYgMTY2CQlncmF5NjUKMTY2IDE2NiAxNjYJCWdyZXk2NQoxNjggMTY4IDE2OAkJZ3JheTY2CjE2OCAxNjggMTY4CQlncmV5NjYKMTcxIDE3MSAxNzEJCWdyYXk2NwoxNzEgMTcxIDE3MQkJZ3JleTY3CjE3MyAxNzMgMTczCQlncmF5NjgKMTczIDE3MyAxNzMJCWdyZXk2OAoxNzYgMTc2IDE3NgkJZ3JheTY5CjE3NiAxNzYgMTc2CQlncmV5NjkKMTc5IDE3OSAxNzkJCWdyYXk3MAoxNzkgMTc5IDE3OQkJZ3JleTcwCjE4MSAxODEgMTgxCQlncmF5NzEKMTgxIDE4MSAxODEJCWdyZXk3MQoxODQgMTg0IDE4NAkJZ3JheTcyCjE4NCAxODQgMTg0CQlncmV5NzIKMTg2IDE4NiAxODYJCWdyYXk3MwoxODYgMTg2IDE4NgkJZ3JleTczCjE4OSAxODkgMTg5CQlncmF5NzQKMTg5IDE4OSAxODkJCWdyZXk3NAoxOTEgMTkxIDE5MQkJZ3JheTc1CjE5MSAxOTEgMTkxCQlncmV5NzUKMTk0IDE5NCAxOTQJCWdyYXk3NgoxOTQgMTk0IDE5NAkJZ3JleTc2CjE5NiAxOTYgMTk2CQlncmF5NzcKMTk2IDE5NiAxOTYJCWdyZXk3NwoxOTkgMTk5IDE5OQkJZ3JheTc4CjE5OSAxOTkgMTk5CQlncmV5NzgKMjAxIDIwMSAyMDEJCWdyYXk3OQoyMDEgMjAxIDIwMQkJZ3JleTc5CjIwNCAyMDQgMjA0CQlncmF5ODAKMjA0IDIwNCAyMDQJCWdyZXk4MAoyMDcgMjA3IDIwNwkJZ3JheTgxCjIwNyAyMDcgMjA3CQlncmV5ODEKMjA5IDIwOSAyMDkJCWdyYXk4MgoyMDkgMjA5IDIwOQkJZ3JleTgyCjIxMiAyMTIgMjEyCQlncmF5ODMKMjEyIDIxMiAyMTIJCWdyZXk4MwoyMTQgMjE0IDIxNAkJZ3JheTg0CjIxNCAyMTQgMjE0CQlncmV5ODQKMjE3IDIxNyAyMTcJCWdyYXk4NQoyMTcgMjE3IDIxNwkJZ3JleTg1CjIxOSAyMTkgMjE5CQlncmF5ODYKMjE5IDIxOSAyMTkJCWdyZXk4NgoyMjIgMjIyIDIyMgkJZ3JheTg3CjIyMiAyMjIgMjIyCQlncmV5ODcKMjI0IDIyNCAyMjQJCWdyYXk4OAoyMjQgMjI0IDIyNAkJZ3JleTg4CjIyNyAyMjcgMjI3CQlncmF5ODkKMjI3IDIyNyAyMjcJCWdyZXk4OQoyMjkgMjI5IDIyOQkJZ3JheTkwCjIyOSAyMjkgMjI5CQlncmV5OTAKMjMyIDIzMiAyMzIJCWdyYXk5MQoyMzIgMjMyIDIzMgkJZ3JleTkxCjIzNSAyMzUgMjM1CQlncmF5OTIKMjM1IDIzNSAyMzUJCWdyZXk5MgoyMzcgMjM3IDIzNwkJZ3JheTkzCjIzNyAyMzcgMjM3CQlncmV5OTMKMjQwIDI0MCAyNDAJCWdyYXk5NAoyNDAgMjQwIDI0MAkJZ3JleTk0CjI0MiAyNDIgMjQyCQlncmF5OTUKMjQyIDI0MiAyNDIJCWdyZXk5NQoyNDUgMjQ1IDI0NQkJZ3JheTk2CjI0NSAyNDUgMjQ1CQlncmV5OTYKMjQ3IDI0NyAyNDcJCWdyYXk5NwoyNDcgMjQ3IDI0NwkJZ3JleTk3CjI1MCAyNTAgMjUwCQlncmF5OTgKMjUwIDI1MCAyNTAJCWdyZXk5OAoyNTIgMjUyIDI1MgkJZ3JheTk5CjI1MiAyNTIgMjUyCQlncmV5OTkKMjU1IDI1NSAyNTUJCWdyYXkxMDAKMjU1IDI1NSAyNTUJCWdyZXkxMDAKMTY5IDE2OSAxNjkJCWRhcmsgZ3JleQoxNjkgMTY5IDE2OQkJRGFya0dyZXkKMTY5IDE2OSAxNjkJCWRhcmsgZ3JheQoxNjkgMTY5IDE2OQkJRGFya0dy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AAD/rwAA/9cAAP//AF8AAABfAF8AXwCHAF8ArwBfANcAXwD/AF9fAABfX18AX1+HAF9frwBfX9cAX1//AF+HAABfh18AX4eHAF+HrwBfh9cAX4f/AF+vAABfr18AX6+HAF+vrwBfr9cAX6//AF/XAABf118AX9eHAF/XrwBf19cAX9f/AF//AABf/18AX/+HAF//rwBf/9cAX///AIcAAACHAF8AhwCHAIcArwCHANcAhwD/AIdfAACHX18Ah1+HAIdfrwCHX9cAh1//AIeHAACHh18Ah4eHAIeHrwCHh9cAh4f/AIevAACHr18Ah6+HAIevrwCHr9cAh6//AIfXAACH118Ah9eHAIfXrwCH19cAh9f/AIf/AACH/18Ah/+HAIf/rwCH/9cAh///AK8AAACvAF8ArwCHAK8ArwCvANcArwD/AK9fAACvX18Ar1+HAK9frwCvX9cAr1//AK+HAACvh18Ar4eHAK+HrwCvh9cAr4f/AK+vAACvr18Ar6+HAK+vrwCvr9cAr6//AK/XAACv118Ar9eHAK/XrwCv19cAr9f/AK//AACv/18Ar/+HAK//rwCv/9cAr///ANcAAADXAF8A1wCHANcArwDXANcA1wD/ANdfAADXX18A11+HANdfrwDXX9cA11//ANeHAADXh18A14eHANeHrwDXh9cA14f/ANevAADXr18A16+HANevrwDXr9cA16//ANfXAADX118A19eHANfXrwDX19cA19f/ANf/AADX/18A1/+HANf/rwDX/9cA1///AP8AAAD/AF8A/wCHAP8ArwD/ANcA/wD/AP9fAAD/X18A/1+HAP9frwD/X9cA/1//AP+HAAD/h18A/4eHAP+HrwD/h9cA/4f/AP+vAAD/r18A/6+HAP+vrwD/r9cA/6//AP/XAAD/118A/9eHAP/XrwD/19cA/9f/AP//AAD//18A//+HAP//rwD//9cA////AAgICAASEhIAHBwcACYmJgAwMDAAOjo6AERERABOTk4AWFhYAGJiYgBsbGwAdnZ2AICAgACKiooAlJSUAJ6engCoqKgAsrKyALy8vADGxsYA0NDQANra2gDk5OQA7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAEAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAABABEAAQABAAEAEgATABQAFQAWABcAGAABAAEAGQAaAAEAGwAcAB0AHgAfAAEAIAABACEAIgAjACQAJQAmACcAKAApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKgABACsAAQAsAC0ALgAvADAAMQAyADMANAA1ADYAMAAxADIAMwA0ADUANgAwADEAMgAzADQANQA2ADAAMQAyADMANAA1ADYAMAAxADIAMwA0ADUANgAwADEAMgAzADQANQA2ADAANwA4ADgAOAA4ADgAOAA4ADgAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQApACkAOQABAAEAOgA7AAEAPAA9AD4AAQABAAEAAQABAAEAPwABAAEAQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAAEATgBPAFAAUQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAUgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAUwABAAEAAQABAAEAAQABAAEAVABVAAEAVgABAFcAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApAFgAKQApACkAKQBZAFoAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAWwApAFwAXQABAAEAAQABAAEAAQABAAEAAQBeAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAF8AAQBgAGEAYgABAAEAAQABAAEAAQBjAAEAAQABAAEAAQBkAFUAZQABAGYAZwABAAEAaABpAAEAAQABAAEAAQABAGoAawBsAG0AbgBvAHAAcQByAHMAdAABAHUAdQB1AHYAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAdwApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQB3AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAeAB5ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAgABAAEAAQABAAEAAQACAAEAAQABAAEAAQACAAIAAgACAAIAAgACAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAMAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQAEAAEABAAEAAEABAAEAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABQAFAAUABQAFAAUAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQAAQAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAUAAQAEAAQABAAEAAQABAABAAEABAAEAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAFAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAQABAAEAAQABAAEAAQABAAEAAEABAAEAAQAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAUABQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAYABAABAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABgAGAAQABgAGAAEABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAHAAYABgAEAAQABAAEAAEAAQAGAAYAAQABAAYABgAEAAEAAQABAAEAAQABAAEAAQABAAcAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAQABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEABgAGAAYABAAEAAEAAQABAAEABAAEAAEAAQAEAAQABAABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAYABgAGAAQABAAEAAQABAABAAQABAAGAAEABgAGAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAEABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAHAAQABgAEAAQABAAEAAEAAQAGAAYAAQABAAYABgAEAAEAAQABAAEAAQABAAEABAAEAAcAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABwAGAAQABgAGAAEAAQABAAYABgAGAAEABgAGAAYABAABAAEAAQABAAEAAQABAAEAAQAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAQABAAEAAYABgAGAAYAAQAEAAQABAABAAQABAAEAAQAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAQABwAGAAcABgAGAAEABAAHAAcAAQAHAAcABAAEAAEAAQABAAEAAQABAAEABwAHAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEABwAGAAYABAAEAAQABAABAAYABgAGAAEABgAGAAYABAAFAAEAAQABAAEAAQABAAEAAQAHAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAYABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQAHAAYABgAEAAQABAABAAQAAQAGAAYABgAGAAYABgAGAAcAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAYABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAEAAEABAABAAEAAQABAAYABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAGAAQABAAEAAQABAABAAQABAABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAYABAAEAAQABAAEAAQAAQAEAAQABgAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAQABAABAAEAAQABAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAQABAABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAcAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgAEAAQABAAEAAQABAAEAAYABgAGAAYABgAGAAYABgAEAAYABgAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAAAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAYABgAGAAYABAAEAAYABgAGAAEAAQABAAEABgAGAAQABgAGAAYABgAGAAYABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAYABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABAAGAAQABAAEAAQABAAEAAQAAQAEAAEABAABAAEABAAEAAQABAAEAAQABAAEAAYABgAGAAYABgAGAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAHAAQABAAEAAQABAAHAAQABwAGAAYABgAGAAQABwAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAAQABAAEAAQABgAGAAQABAAHAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAYABAAEAAYABgAGAAQABgAEAAQABAAHAAcAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABgAGAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABgAEAAQABAAEAAQABAAEAAEAAQABAAEABAABAAEAAQABAAEAAQAEAAEAAQAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAQADAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAMAAwADAAMAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADQANAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADQANAA0ADQADAAMAAwANAAMAAwANAAEAAQABAAEAAwADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMAAwABAAEAAQABAAEAAQABAAEAAQABAAMAAQABAAEAAQABAAEAAQABAAEAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMAAwANAA0AAQADAAMAAwADAAMADwABAA8ADwAPAA8ADwAPAA8AAwAPAA8AAwAPAAEADQANAA8ADwADAA8ADwAPAA8AEAAPAA8AAwAPAAMAAwAPAA8AAwAPAA8ADwADAA8ADwAPAAMAAwARABEAEQARABEAEQARABEAAwADAAMADwAPAA8ADwAPAAMADwADAA8ADwAPAA8ADwANAA0ADQANAA0ADQANAA0ADQANAA0ADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAwADAA8ADwADAA8AAwADAA8AAwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwADAA8ADwADAA0ADwAPAA8ADwAPAA8AAQABAAEAAQAOAA4ADgAOAA4ADgAPAA8AAwANAAMAAwADAAMADwADAA8AAwADAA8ADwAPAAMADQAPAA8ADwAPAA8AAwAPAA8ADQANAA8ADwAPAA8AAwADAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwANAA0ADwAPAA8ADwAPAA0ADQAPAA8AAwAPAA8ADwAPAA8ADQADAA8AAwAPAAMADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAwANAA8ADwAPAA8ADwADAAMADQANAAMADQAPAAMAAwAQAA0ADwAPAA0ADwAPAA8ADwADAA8ADwANAAEAAQADAAMAEgASABAAEAAPAAMADwAPAAMAAQADAAEAAwABAAEAAQABAAEAAQADAAEAAQABAAMAAQABAAEAAQABAAEADQABAAEAAQABAAEAAQABAAEAAQABAAMAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQADAAEAAQABAAEADQABAA0AAQABAAEAAQANAA0ADQABAA0AAQABAAEAAQABAAEAAQABAAEAAQABAAMAAwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAA0ADQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAA0AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADQABAAEAAQABAA0AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ABAAEAAQABAATABMADQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgANAA4AAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEABAAEAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADQAOAA0ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEABAABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAEAAQABgABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAYABwABAAEAAQABAAEAAQABAAEAAQABAAEAAQAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAAQABAAEABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYABAAEAAQABAAGAAYABAAEAAYABgAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAGAAYABAAEAAYABgAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEABAAEAAQAAQABAAQABAABAAEAAQABAAEABAAEAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAEAAQABgAGAAEAAQABAAEAAQAGAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAEAAYABgAEAAYABgABAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoAAQABAAEAAQALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABwAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAEABAAEAAEAAQABAAEAAQAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAAYABgAEAAQABAAEAAYABgAEAAQAAQABAAUAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEABQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAYABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAQABAAEAAQABAAEAAQABAAEAAYABwABAAUABQABAAEAAQABAAEABAAEAAQABAABAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABAAEAAQABgAGAAQABwAEAAQAAQABAAEAAQABAAEABAABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABgAGAAYABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQAHAAYABAAGAAYABgAGAAEAAQAGAAYAAQABAAYABgAHAAEAAQABAAEAAQABAAEAAQABAAcAAQABAAEAAQABAAEAAQABAAEAAQAGAAYAAQABAAQABAAEAAQABAAEAAQAAQABAAEABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABwAGAAYABAAEAAQABAAEAAQAAQAHAAEAAQAHAAEABwAHAAcABgABAAYABgAEAAcABAAFAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABAAEAAQABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABgAGAAQABAAEAAQABAAEAAYABAAGAAYABwAGAAQABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABgAGAAQABAAEAAQAAQABAAYABgAGAAYABAAEAAYABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABgAEAAYABgAEAAQABAAEAAQABAAHAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABgAEAAEAAQAEAAQABAAEAAYABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABAAEAAQABAAEAAQABAAEAAQABgAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABgAGAAYABgAGAAEABgAGAAEAAQAEAAQABwAEAAUABgAFAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAAYABgAEAAQABAAEAAEAAQAEAAQABgAGAAYABgAEAAEAAQABAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABgAFAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABgAGAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAEAAQABAAEAAQABAAEAAEABAAEAAQABAAEAAQABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAYABAAEAAQABAAEAAQABAAGAAQABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQAAQABAAEABAABAAQABAABAAQABAAEAAQABAAEAAQABQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAYABgABAAQABAABAAYABgAEAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAYABgABAAEAAQABAAEAAQABAAEAAQAEAAQABQAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAEAAQABAAEAAQAAQABAAEABgAGAAQABwAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABgAGAAYABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACgABAAEAAQAKAAoACgAKAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQATABMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4AAQAOAA4ADgAOAA4ADgAOAAEADgAOAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAAEAAQAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABwAHAAQABAAEAAEAAQABAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQAAQABAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAQABAAEAAQABAAEAAQAAQAEAAQAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPABEADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADwAPAA8ADwADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQARAAEAAQARABEAEQARABEAEQARABEAEQARAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAOABEADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA4ADgAOAA4ADgAOAA4ADgAOAA4ADQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADQAOAA4AEQARABEAEQARAA0AEQARABEADgAPAA8ADwAPAA4ADgAOAA4ADgAOAA4ADgAOAA8ADwAPAA8ADwAPAA8AEQARAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwARABEAEQARABEAEQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARABEADQANAA0AEQARABEAEQARAA0AEQARABEAEQARABEADQARABEAEQARAAMADwAPAAMAAwADAAMAAwADAAMAAwADABEAEQARABEAEQARABEAEQARAAMAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEAEQADABEAEQARABEAEQARABEAFwARABEAEQARABEAEQARABEAEQARABEAEQARAA0ADwAPAAMAAwAPAAMAAwADAA8ADwADAAMAEQARABEAEQARABEAEQANABEAEQARABEADQANAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQASABcAEgARAA0AFwARABEAEgAQABAAAwADABEAEQARABEAEQADAAMAAwADAAMAAwADAAMAAwADAAMAAwANABEAEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEADwAPAAMAEQADAA8AAwARABEAEQAYABgAGAAYABgAEQARABEAEQARABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEADQARABEAEQARABEAEQARABEAEQANABEAEQARABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAAwARAAMAEgAXABEAEQASABIAEgASABcAFwAXABIAEgAXABcAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABcAFwASABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwARABEAEQAXAA0AEQARABEAFwAXABcAEQAXABcAFwARABEAEQARABEAEQARABcAEQAXABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQANABEAEQARABEAEQARABcAEQARABEAEQARAA0AEQARAA0AEQARABEAEQARABEAEQANABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEAEQANABEAEQARABEADQANAA0AEQARABEADQANAA0ADQARABEAEQARABEAEQARABEAEQANABEADQANAA0AEQADAA8AEQARABEAEQARABEAEQARABEADQARABEAEQARAA0AEQARABEAEQANAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAAQABAAEAAQABAAEAAQABAA8ADwAPAAMAAwARABEAEQARAA8ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADwAPAA8ADwAPAA8ADwADAAMADwAPAAMAEAAQAAMAAwADAAMAFwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwADAA8ADwADAAMAAwADAA8ADwAQAA8ADwAPAA8AFwAXAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AEQADAA8ADwADAA8ADwAPAA8ADwAPAA8ADwADAAMADwAPAA8ADwAPAA8ADwAPAA8AAwAPAA8ADwAPAA8AAwADAAMADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAwADAAMADwAPAA8ADwAPAA8ADwAPAAMAAwADAA8ADwADAA8AAwAPAA8ADwAPAAMADwAPAA8ADwAPAA8AAwAPAA8ADwADAA8ADwAPAA8ADwAPAAMAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEADQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABcAFwAXABEAEQARABcAFwAXABcAFwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQARABEAEQARABEAEQARAA0AEQARABEAEQARAA0AEQARABEADQARABEADQARABEAEQANABEAEQARABEAEQARABEAEQARABEAFwARABEAEQARABEAEQARABEAEQANABEAEQARABEADQARABcAFwAXABEAEQANAA0AEQANABEAEQARABcAEQARABEAEQARAA8ADwAPAA8ADwADABcAAwADAAMAEQARABEADwAPABEAEQARAA8ADwAPAA8AEQARABEAEQADAAMAAwADAAMAAwAPAA8ADwADAA8AEQARAA8ADwAPAAMADwAPAAMAEQARABEAEQARABEAEQARABEADwAPAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADwAPAA8ADwAPAA8ADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARAA8ADwAPAA8AEQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAA8ADwAPAA8AAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAEAAQABAAEAAQABAAEAAQABAAEAAQABABcAEQARABcAEQARABEAEQARABEAEQARABcAFwAXABcAFwAXABcAFwARABEAEQARABEAEQAXABEAEQARABEAEQARABEAEQARABcAFwAXABcAFwAXABcAFwAXABcAEQABABcAFwAXABEAEQARABEAEQARABEAAQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQAXABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABEAFwAXABEAFwARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABcAEQAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwARABEAEQARABEAEQARABEAEQARABEAEQARAA8ADwAPABEAEQARABEAEQARABEAEQARABEADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABcAEQAPAA8ADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARAA8ADwARABEAEQARABEAEQARABEAEQARABEADwAPAA8ADwAPAA8AFwAXABcAFwAXABcAFwAXABcADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBbRwZJR0GBAgMIG4CLXEuch4SFioyNgAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAowAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AngCfAKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC6ALsAvAC9AL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDPANAA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAMYlkiUJJAwkDSQKJLAAsQAkJAskGCUQJQwlFCU8JbojuyMAJbwjvSMcJSQlNCUsJQIlZCJlIsADYCKjALcAfwCAAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAI0AjgCPAJAAkQCSAJMAlACVAJYAlwCYAJkAmgCbAJwAnQCeAJ8AoAChAKIAowCkAKUApgCnAKgAqQCqAKsArACtAK4ArwCwALEAsgCzALQAtQC2ALcAuAC5ALoAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAM8A0ADRANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8AAAAAAAAAAgAAAAEAAAAAAAAAAwAAAAEAAAAAAAAAAgAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAQAAAAAAAAABAAAAAgAAAAAAAAABAAAAAwAAAAAAAABCAAADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEAAA0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYFBQYABQUGAQgFCAULAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYFBQYABQUGAQgFCAULAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYFBQYABQUGAQgFCAULAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYGAAYABQUGAQsACwALAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUEBgAGAAYBCAQLAAsACggLAAwJDQoAAgAGAAYFBAYABgAGAQgECwALAAoICwAMCQ0KAAIABgAGBQQGAAYABgEIBAsACwAKCAsADAkNCgACAAYABgUEBgAGAAYBCAQLAAsACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIHAAAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAg0AAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgMAAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACDAAABgAHAAcABwAACgAKAAoACggLAAwJDQoAAg0AAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAINAAAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgEBAgEDAQQBBQEGAQcBCAEJAQoBCwAMCQ0KAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwcABwAHAAcABwAHAAcABwAHAAcABwAHAAwJBwAAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADDQANAA0ADQANAA0ADQANAA0ADQANAA0ADAkNAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAwADAAMAAwADAAMAAwADAAMAAwADAAMADAkDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMCQwADQANAA0ADQANAA0ADQANAA0ADQANAA0ADAkNAA0ADQANAA0ADQANAA0ADQANAA0ADQANAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAEAAAAAAQEBAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAQAAAAAAAAAAAAAAAAECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQkJCQkJCQkJCQkJCQkJCQkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgIAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCgMDAwMDAwMDAwMDAwQDAwsGBgYFCAgICAgICAgICAgADBgkPGBUDAwMMEgMDAwMDAwMDAwMDAwMAAwMDAwMAAwADAwMGAwMDAwMGAwYDAwMDAwMDAwMGAwMDAwMGAwMDAwMDAwYDAwMDAwMDAwMJAwkDAwMJAwMDAwMJAwkDAwMJAwMDAwMDAwMDAwAAP3/AAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAHR8hAMxmZgC1vWgA8MZ0AIGivgCylLsAir63AMXIxgBmZmYA1U5TALnKSgDnxUcAeqbaAMOX2ABwwLEA6urqAAAAAAAAAF8AAACHAAAArwAAANcAAAD/AABfAAAAX18AAF+HAABfrwAAX9cAAF//AACHAAAAh18AAIeHAACHrwAAh9cAAIf/AACvAAAAr18AAK+HAACvrwAAr9cAAK//AADXAAAA118AANeHAADXrwAA19cAANf/AAD/AAAA/18AAP+HAAD/rwAA/9cAAP//AF8AAABfAF8AXwCHAF8ArwBfANcAXwD/AF9fAABfX18AX1+HAF9frwBfX9cAX1//AF+HAABfh18AX4eHAF+HrwBfh9cAX4f/AF+vAABfr18AX6+HAF+vrwBfr9cAX6//AF/XAABf118AX9eHAF/XrwBf19cAX9f/AF//AABf/18AX/+HAF//rwBf/9cAX///AIcAAACHAF8AhwCHAIcArwCHANcAhwD/AIdfAACHX18Ah1+HAIdfrwCHX9cAh1//AIeHAACHh18Ah4eHAIeHrwCHh9cAh4f/AIevAACHr18Ah6+HAIevrwCHr9cAh6//AIfXAACH118Ah9eHAIfXrwCH19cAh9f/AIf/AACH/18Ah/+HAIf/rwCH/9cAh///AK8AAACvAF8ArwCHAK8ArwCvANcArwD/AK9fAACvX18Ar1+HAK9frwCvX9cAr1//AK+HAACvh18Ar4eHAK+HrwCvh9cAr4f/AK+vAACvr18Ar6+HAK+vrwCvr9cAr6//AK/XAACv118Ar9eHAK/XrwCv19cAr9f/AK//AACv/18Ar/+HAK//rwCv/9cAr///ANcAAADXAF8A1wCHANcArwDXANcA1wD/ANdfAADXX18A11+HANdfrwDXX9cA11//ANeHAADXh18A14eHANeHrwDXh9cA14f/ANevAADXr18A16+HANevrwDXr9cA16//ANfXAADX118A19eHANfXrwDX19cA19f/ANf/AADX/18A1/+HANf/rwDX/9cA1///AP8AAAD/AF8A/wCHAP8ArwD/ANcA/wD/AP9fAAD/X18A/1+HAP9frwD/X9cA/1//AP+HAAD/h18A/4eHAP+HrwD/h9cA/4f/AP+vAAD/r18A/6+HAP+vrwD/r9cA/6//AP/XAAD/118A/9eHAP/XrwD/19cA/9f/AP//AAD//18A//+HAP//rwD//9cA////AAgICAASEhIAHBwcACYmJgAwMDAAOjo6AERERABOTk4AWFhYAGJiYgBsbGwAdnZ2AICAgACKiooAlJSUAJ6engCoqKgAsrKyALy8vADGxsYA0NDQANra2gDk5OQA7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAGAAAABwAAAAgAAAAJAAAABgAAAAoAAAALAAAAqqqqqgAAAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAABAwUHAQMFBwEDBQcBAwUHAQMFBwEDBQcAAgQGAQMFBwEDBQcBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwEDBQcDAwcHAwMHBwEDBQcAAAAAAAAAAAEDBQcAAgQGAAIEBgEDBQcAAgQGAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAwMHBwMDBwcBAwUHAAAAAAAAAAABAwUHAQMFBwACBAYAAgQGAAIEBgACBAYAAgQGAQMFBwEDBQcBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwEDBQcDAwcHAwMHBwEDBQcAAAAAAAAAAAEDBQcAAgQGAQMFBwEDBQcBAwUHAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAwMHBwMDBwcBAwUHAAAAAAAAAAABAwUHAQMFBwEDBQcBAwUHAQMFBwEDBQcAAgQGAQMFBwEDBQcBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYCAgYGAgIGBgACBAYAAAAAAAAAAAACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAgIGBgICBgYAAgQGAAAAAAAAAAAAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgICBgYCAgYGAAIEBgAAAAAAAAAAAQMFBwEDBQcBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwQGAQMDAwcHAwMHBwEDBQcAAAAAAAAAAAEDBQcBAwUHAQMFBwEDBQcBAwUHAQMFBwACBAYBAwUHAQAFBAEDBQcBAwUHAwMHBwMDBwcBAwUHAAAAAAAAAAABAwUHAQMFBwEDBQcBAwUHAQMFBwEDBQcAAgQGAQMFBwEABQQBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAQMFBwEDBQcBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwEDBQcDAwcHAgIGBgEDBQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZBAQAAQAAACGDRAABAAAABITEAAEAAAAgQwQAAQAAADyCRAABAAAAHkVEAAEAAAAsRgQAAQAAAAFGBAABAAA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AAIAAADfChAABAAAAAYAAQACAAAA2goQAAQAAAAHAAEAAgAAANUKEAAEAAAACAABAAIAAAAhCxAABQAAAAkAAQACAAAAGwsQAAUAAAAMAAEAAgAAABULEAAFAAAADQABAAIAAAAKCxAABQAAAAoAAQACAAAA/woQAAUAAAALAAEAAgAAAPQKEAAFAAAADgABAAIAAADpChAABQAAAA8AAQACAAAAUAoQAAMAAAAAAAAAAgAAAI8KEAAEAAAAAQABAAIAAACEChAABAAAAAQAAQACAAAAeQoQAAQAAAAFAAEAAgAAAG4KEAAEAAAAAgABAAIAAABjChAABAAAAAMAAQACAAAAXgoQAAQAAAAGAAEAAgAAAFkKEAAEAAAABwABAAIAAABUChAABAAAAAgAAQACAAAAoAoQAAUAAAAJAAEAAgAAAJoKEAAFAAAADAABAAIAAACUChAABQAAAA0AAQACAAAAiQoQAAUAAAAKAAEAAgAAAH4KEAAFAAAACwABAAIAAABzChAABQAAAA4AAQACAAAAaAoQAAUAAAAPAAEAAgAAAF4TEAADAAAAAAAAAAIAAACdExAABAAAAAEAAQACAAAAkhMQAAQAAAAEAAEAAgAAAIcTEAAEAAAABQABAAIAAAB8ExAABAAAAAIAAQACAAAAcRMQAAQAAAADAAEAAgAAAGwTEAAEAAAABgABAAIAAABnExAABAAAAAcAAQACAAAAYhMQAAQAAAAIAAEAAgAAAK4TEAAFAAAACQABAAIAAACoExAABQAAAAwAAQACAAAAohMQAAUAAAANAAEAAgAAAJcTEAAFAAAACgABAAIAAACMExAABQAAAAsAAQACAAAAgRMQAAUAAAAOAAEAAgAAAHYTEAAFAAAADwABAAIAAAAeEhAAAwAAAAAAAAACAAAAXRIQAAQAAAABAAEAAgAAAFISEAAEAAAABAABAAIAAABHEhAABAAAAAUAAQACAAAAPBIQAAQAAAACAAEAAgAAADESEAAEAAAAAwABAAIAAAAsEhAABAAAAAYAAQACAAAAJxIQAAQAAAAHAAEAAgAAACISEAAEAAAACAABAAIAAABzEhAABQAAAAkAAQACAAAAaBIQAAUAAAAMAAEAAgAAAGISEAAFAAAADQABAAIAAABXEhAABQAAAAoAAQACAAAATBIQAAUAAAALAAEAAgAA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AAcAAAAGAAEAAAAAADgBEAAHAAAABwABAAAAAACDABAABwAAAAgAAQAAAAAA4QgQAAgAAAAJAAEAAAAAAGMIEAAIAAAADAABAAAAAADsBxAACAAAAA0AAQAAAAAAwAYQAAgAAAAKAAEAAAAAAIYFEAAIAAAACwABAAAAAACrBBAACAAAAA4AAQAAAAAAywMQAAgAAAAPAAEAAAAAAEwFEAAFAAAAAAABAAAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAoBYSAB0AAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAHAYEgARAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAIAZEgASAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAoBoSABAAAACgGxIAEQAAAKqqqqoAAAAAsBwSABEAAADAHRIAEAAAAMAeEgAQAAAAwB8SABAAAADAIBIAEQAAANAhEgARAAAA4CISABEAAADwIxIAEQAAAKqqqqoAAAAAACUSABAAAAAAJhIAEAAAAAAnEgAQAAAAACgSABAAAAAAKRIAEAAAAAAqEgAQAAAAACsSABAAAAAALBIAEAAAAAAtEgAQAAAAAC4SABAAAAAALxIAEAAA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OiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgbmV4dCBsaW5lIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCB0YWIgc2V0IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCByZXZlcnNlIGluZGV4IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBzaW5nbGUgc2hpZnQgMiBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgc2luZ2xlIHNoaWZ0IDMgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIEVTQyBjYWxsYmFjazogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGZ1bGwgcmVzZXQgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGxvY2tpbmcgc2hpZnQgMSByaWdodCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgbG9ja2luZyBzaGlmdCAyIHJpZ2h0IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBsb2NraW5nIHNoaWZ0IDMgcmlnaHQgY29tbWFuZDogd2FybmluZyh0ZXJtaW5hbCk6IGN1cnNvciBjb3B5IGZhaWxlZCBlbnRlcmluZyBhbHQgc2NyZWVuIGVycj13YXJuaW5nKHRlcm1pbmFsKTogcmVzdG9yZSBjdXJzb3Igb24gc3dpdGNoIHNjcmVlbiBmYWlsZWQgdG89IGVycj13YXJuaW5nKHN0cmVhbSk6IHVuaW1wbGVtZW50ZWQgc2V0TW9kZTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIEMwIGNoYXJhY3RlciwgaWdub3Jpbmc6IDB4d2FybmluZyh0ZXJtaW5hbCk6IHplcm8td2lkdGggY2hhcmFjdGVyIHdpdGggbm8gcHJpb3IgY2hhcmFjdGVyLCBpZ25vcmluZ3dhcm5pbmcodGVybWluYWwpOiBlcnJvciByZWFsbG9jYXRpbmcgZm9yIG1vcmUgaHlwZXJsaW5rIHNwYWNlLCBpZ25vcmluZyBoeXBlcmxpbmsgZXJyPXdhcm5pbmcocGFyc2VyKTogaW52YWxpZCBpbnRlcm1lZGlhdGVzIGNvdW50d2FybmluZyhwYXJzZXIpOiBDU0kgY29sb24gb3IgbWl4ZWQgc2VwYXJhdG9ycyBvbmx5IGFsbG93ZWQgZm9yICdtJyBjb21tYW5kLCBnb3Q6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgZG93biBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEIgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgY3Vyc29yIHJpZ2h0IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgQyB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgdXAgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBFIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBGIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGhvcml6b250YWwgdGFiIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgSSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBlcmFzZSBkaXNwbGF5IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBlcmFzZSBsaW5lIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBJTCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEwgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgREwgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBNIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGRlbGV0ZSBjaGFyYWN0ZXJzIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgUCB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBzY3JvbGwgdXAgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBTIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHNjcm9sbCBkb3duIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgVCB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgdGFidWxhdGlvbiBjb250cm9sOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIFcgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgZXJhc2UgY2hhcmFjdGVycyBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIFggd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgaG9yaXpvbnRhbCB0YWIgYmFjayBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIFogd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgSFBSIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgYSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBwcmludCByZXBlYXQgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBiIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGRldmljZSBhdHRyaWJ1dGVzIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBWUEEgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBkIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIFZQUiBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIGUgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgdGFiIGNsZWFyIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogdW5rbm93biB0YWIgY2xlYXIgbW9kZTogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBnIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHNldCBtb2RlIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogdW5pbXBsZW1lbnRlZCBtb2RlOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgc2V0TW9kaWZ5S2V5Rm9ybWF0OiB3YXJuaW5nKHN0cmVhbSk6IHVua25vd24gQ1NJIG0gd2l0aCBpbnRlcm1lZGlhdGU6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgbSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBkZXZpY2Ugc3RhdHVzIHJlcG9ydCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IHVua25vd24gQ1NJIG4gd2l0aCBpbnRlcm1lZGlhdGU6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgbiB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgcCB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBERUNSUU0gY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGN1cnNvciBzdHlsZSB2YWx1ZTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHNldCBjdXJvciBzdHlsZSBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgc2V0IHByb3RlY3RlZCBtb2RlIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgcSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBERUNTVEJNIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogdW5pbXBsZW1lbnRlZCByZXN0b3JlIG1vZGU6IHdhcm5pbmcoc3RyZWFtKTogdW5rbm93biBDU0kgcyB3aXRoIGludGVybWVkaWF0ZTogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBzIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIERFQ1NMUk0gY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIHNhdmUgbW9kZTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIFhUU0hJRlRFU0NBUEUgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyBDU0kgMTQgdCB3aXRoIGV4dHJhIHBhcmFtZXRlcnM6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgQ1NJIDE2IHQgd2l0aCBleHRyYSBwYXJhbWV0ZXJzOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIENTSSAxOCB0IHdpdGggZXh0cmEgcGFyYW1ldGVyczogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyBDU0kgMjEgdCB3aXRoIGV4dHJhIHBhcmFtZXRlcnM6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgQ1NJIDIyLzIzIHQgd2l0aCBleHRyYSBwYXJhbWV0ZXJzOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIENTSSB0IHdpdGggdW5pbXBsZW1lbnRlZCBwYXJhbWV0ZXI6IGVycm9yKHN0cmVhbSk6IGlnbm9yaW5nIENTSSB0IHdpdGggbm8gcGFyYW1ldGVyczogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSB0IHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHB1c2hLaXR0eUtleWJvYXJkIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBzZXRLaXR0eUtleWJvYXJkIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgdTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIElDSCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEA6IHdhcm5pbmcoc3RyZWFtKTogdW5pbXBsZW1lbnRlZCBDU0kgY2FsbGJhY2s6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgQSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgbGVmdCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEQgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgSFBBIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgRyB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBDVVAgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBIIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIENTSSBhY3Rpb246IHdhcm5pbmcoc3RyZWFtKTogY2hhbmdlIHRpdGxlIHJlcXVlc3Q6IGludmFsaWQgdXRmLTgsIGlnbm9yaW5nIHJlcXVlc3R3YXJuaW5nKHN0cmVhbSk6IHVua25vd24gY3Vyc29yIHNoYXBlOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgT1NDLCBzaG91bGQgbmV2ZXIgaGFwcGVud2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIE9TQyBjYWxsYmFjazogd2FybmluZyhvc2MpOiBPU0Mgc2VxdWVuY2UgdG9vIGxvbmcgKD4gKSwgaWdub3JpbmcuIHN0YXRlPXdhcm5pbmcob3NjKTogT1NDIDEwIHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTA0IHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTEgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWR3YXJuaW5nKG9zYyk6IE9TQyAxMSByZXF1aXJlcyBhbiBhbGxvY2F0b3IsIGJ1dCBub25lIHdhcyBwcm92aWRlZHdhcm5pbmcob3NjKTogT1NDIDEyIHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTMgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWR3YXJuaW5nKG9zYyk6IE9TQyAxNCByZXF1aXJlcyBhbiBhbGxvY2F0b3IsIGJ1dCBub25lIHdhcyBwcm92aWRlZHdhcm5pbmcob3NjKTogT1NDIDE1IHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTYgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWR3YXJuaW5nKG9zYyk6IE9TQyAxNyByZXF1aXJlcyBhbiBhbGxvY2F0b3IsIGJ1dCBub25lIHdhcyBwcm92aWRlZHdhcm5pbmcob3NjKTogT1NDIDE4IHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTkgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWT2ehAAAAAAAAAAAADdNBAAAQAAAAEAAADFNBAAAgAAAAEAAADENBAAAwAAAAEAAABWKRAAAwAAAAIAAADDNBAABAAAAAIAAADHIxAABQAAAAIAAABTLBAABQAAAAMAAAB0JhAABgAAAAMAAACNMBAABwAAAAMAAACvHhAABwAAAAQAAADyLBAACAAAAAQAAABQKRAACQAAAAQAAABhMxAACgAAAAQAAABhIhAACgAAAAUAAADLKRAACwAAAAUAAADNIxAADAAAAAUAAAAJMRAADAAAAAYAAACMHxAADQAAAAYAAAAOLhAADgAAAAYAAADDJxAADgAAAAcAAACpMxAADwAAAAcAAAADIxAAEAAAAAcAAADzKhAAEQAAAAcAAAARJRAAEQAAAAgAAAAlLxAAEgAAAAgAAAD3HhAAEwAAAAgAAAB9LRAAEwAAAAkAAABVKBAAFAAAAAkAAAAgMhAAFQAAAAkAAAAcIRAAFQAAAAoAAABUKhAAFgAAAAoAAACGJBAAFwAAAAoAAAB/MRAAGAAAAAoAAACQIBAAGAAAAAsAAADbLhAAGQAAAAsAAACsJhAAGgAAAAsAAACtNBAAGgAAAAwAAAC1IhAAGwAAAAwAAADzKxAAHAAAAAwAAAAqJhAAHAAAAA0AAAD3LxAAHQAAAA0AAAAXHhAAHgAAAA0AAABZLBAAHwAAAA0AAACsKBAAHwAAAA4AAAC7MhAAIAAAAA4AAAC5IRAAIQAAAA4AAACpKRAAIQAAAA8AAABjJBAAIgAAAA8AAACVMBAAIwAAAA8AAAAmIBAAIwAAABAAAABvLhAAJAAAABAAAABhJxAAJQAAABAAAAC5MxAAJgAAABAAAABSIxAAJgAAABEAAABDKxAAJwAAABEAAABiJRAAKAAAABEAAAB4LxAAKAAAABIAAABiHxAAKQAAABIAAAD7LBAAKgAAABIAAAAqKBAAKgAAABMAAAA2MhAAKwAAABMAAACMIRAALAAAABMAAADFKhAALQAAABMAAADjJBAALQAAABQAAABQMRAALgAAABQAAACpIBAALwAAABQAAAD1LhAALwAAABUAAAB7JhAAMAAAABUAAAAzNBAAMQAAABUAAADRIhAAMQAAABYAAADAKxAAMgAAABYAAABHJhAAMwAAABYAAABgMBAANAAAABYAAACCHhAANAAAABcAAADFLBAANQAAABcAAAAZKRAANgAAABcAAAAqMxAANgAAABgAAAApIhAANwAAABgAAADXKRAAOAAAABgAAADaIxAAOAAAABkAAAAWMRAAOQAAABkAAACaHxAAOgAAABkAAADSLRAAOwAAABkAAACHJxAAOwAAABoAAABsMxAAPAAAABoAAAAUIxAAPQAAABoAAAAFKxAAPQAAABsAAAAjJRAAPgAAABsAAAA4LxAAPwAAABsAAAC3HhAAPwAAABwAAACRLRAAQAAAABwAAABqKBAAQQAAABwAAADdMRAAQgAAABwAAADZIBAAQgAAAB0AAAAQKhAAQwAAAB0AAACeJBAARAAAAB0AAACYMRAARAAAAB4AAABKIBAARQAAAB4AAACULhAARgAAAB4AAADHJhAARgAAAB8AAABlNBAARwAAAB8AAABsIhAASAAAAB8AAAAQLBAASAAAACAAAADgJRAASQAAACAAAAAVMBAASgAAACAAAAA2HhAASwAAACAAAAB5LBAASwAAACEAAADMKBAATAAAACEAAADcMhAATQAAACEAAADbIRAATQAAACIAAABaKRAATgAAACIAAAATJBAATwAAACIAAAC5MBAATwAAACMAAADVHxAAUAAAACMAAAAdLhAAUQAAACMAAAAOJxAAUgAAACMAAADgMxAAUgAAACQAAAB5IxAAUwAAACQAAABrKxAAVAAAACQAAACLJRAAVAAAACUAAAChLxAAVQAAACUAAAALHxAAVgAAACUAAAAmLRAAVgAAACYAAADSJxAAVwAAACYAAABiMhAAWAAAACYAAAAyIRAAWQAAACYAAABrKhAAWQAAACcAAAB3YXJuaW5nKG9zYyk6IHVua25vd24gcnh2dCBleHRlbnNpb246IHdhcm5pbmcob3NjKTogaW52YWxpZCBPU0MgY29tbWFuZDogAAAAAAAAAAEAAAACAAAABAAAAAkAAAATAAAAJgAAAEwAAACZAAAAMwEAAGYCAADMBAAAmQkAADMTAABmJgAAzEwAAJmZAAAzMwEAZmYCAMzMBACZmQkAMzMTAGZmJgDMzEwAmZmZADMzMwFmZmYCzMzMBP///w93YXJuaW5nKHNjcmVlbik6IChTY3JlZW4uYWRqdXN0Q2FwYWNpdHkpIEZhaWxlZCB0byBhZGQgY3Vyc29yIHN0eWxlIGJhY2sgdG8gcGFnZSwgZXJyPXdhcm5pbmcoc2NyZWVuKTogKFNjcmVlbi5hZGp1c3RDYXBhY2l0eSkgRmFpbGVkIHRvIGFkZCBjdXJzb3IgaHlwZXJsaW5rIGJhY2sgdG8gcGFnZSwgZXJyPWVycm9yKHBhZ2VfbGlzdCk6IGZhaWxlZCB0byByZWdyb3cgYWN0aXZlIGFyZWEgYWZ0ZXIgZXJhc2UgZXJyPXdhcm5pbmcodGVybWluYWwpOiBzY3JvbGwgY2xlYXIgZmFpbGVkLCBkb2luZyBhIG5vcm1hbCBjbGVhciBlcnI9ZXJyb3IodGVybWluYWwpOiB1bmltcGxlbWVudGVkIGVyYXNlIGxpbmUgbW9kZTogZXJyb3IodGVybWluYWwpOiBpbnNlcnRMaW5lcyB0cmFja1BpbiBlcnJvciBlcnI9ZXJyb3IodGVybWluYWwpOiBkZWxldGVMaW5lcyB0cmFja1BpbiBlcnJvciBlcnI9d2FybmluZyh0ZXJtaW5hbCk6IGludmFsaWQgb3IgdW5rbm93biB0YWIgY2xlYXIgc2V0dGluZzogd2FybmluZyhvc2MpOiB6ZXJvIGxlbmd0aCBrZXkgaW4ga2l0dHkgY29sb3IgcHJvdG9jb2x3YXJuaW5nKG9zYyk6IHVua25vd24ga2V5IGluIGtpdHR5IGNvbG9yIHByb3RvY29sOiB3YXJuaW5nKG9zYyk6IGV4Y2VlZGVkIGxpbWl0IGZvciBudW1iZXIgb2Yga2V5cyBpbiBraXR0eSBjb2xvciBwcm90b2NvbCwgaWdub3Jpbmd3YXJuaW5nKG9zYyk6IHVuYWJsZSB0byBhcHBlbmQga2l0dHkgY29sb3IgcHJvdG9jb2wgb3B0aW9uOiB3YXJuaW5nKG9zYyk6IGludmFsaWQgY29sb3IgZm9ybWF0IGluIGtpdHR5IGNvbG9yIHByb3RvY29sOiB3YXJuaW5nKG9zYyk6IGFsbG9jYXRpb24gZmFpbGVkIG9uIGFsbG9jYWJsZSBzdHJpbmcgdGVybWluYXRpb24AAQIDBEVTQyAgJycgKFUrKTB4RVNDIFsgAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAoLDA0ODxAREhPvv70AAAAAAAEAAAACAAAAAwAAAAQAAAAAAAAAAADQCRAACwAAAGQYEAALAAAAcBgQAAoAAAB/EhAACwAAADgYEAANAAAAhgwQAAsAAAB8DhAADwAAAC8PEAAFAAAAJxgQABAAAACFFhAACgAAAJYPEAAVAAAAygwQABIAAACqFBAAEQAAAFEYEAASAAAAUxMQAAoAAAB7GBAACAAAAIQYEAAMAAAAoxcQAA8AAADEERAADQAAAEYYEAAKAAAAkRgQABAAAACLFBAACQAAAPIWEAAKAAAAPgsQAAgAAADxEBAADgAAADgUEAALAAAAVgkQABMAAAAwFBAAEwAAAKwJEAAWAAAAPgkQABcAAAAYFBAAFwAAAH0JEAAXAAAAlQkQABYAAADDCRAAGAAAAMUUEAAOAAAAlg0QAAsAAAA9DxAAEAAAAGoJEAASAAAAWwkQAA4AAAA1FBAADgAAANQdEAALAAAAqA0QAA0AAAAPDxAACwAAALMREAAQAAAAihEQABgAAACVFBAAFAAAANgUEAAYAAAA/RYQABUAAAAMFhAAFAAAAPEUEAAdAAAAARcQABEAAABw2REActkRAHDZEQCiSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCkSBIApkgSAKhIEgCiSBIAqkgSAKxIEgCuSBIAsEgSAKRIEgCySBIAtEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAskgSAKJIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCsSBIArkgSALBIEgCkSBIAoEgSALZIEgC4SBIAukgSALxIEgC+SBIAwEgSAMJIEgDESBIAoEgSAMZIEgDISBIAykgSAKBIEgDMSBIAzkgSANBIEgDSSBIA1EgSANZIEgDYSBIA2kgSANxIEgDeSBIA4EgSAOJIEgDkSBIAoEgSAKBIEgCgSBIAsEgSAA8AAAD/AAAA/w8AAP//AAAIAAAAAAAAAAIAAAAEAAAA\", self.location), g = [];\n if (B.protocol === \"file:\") {\n let C = B.pathname;\n C.match(/^\\/[A-Za-z]:\\//) && (C = C.slice(1)), g.push(C);\n }\n g.push(B.href, \"./ghostty-vt.wasm\", \"/ghostty-vt.wasm\");\n let E = null;\n for (const C of g)\n try {\n return await q.loadFromPath(C);\n } catch (I) {\n E = I instanceof Error ? I : new Error(String(I));\n }\n throw E || new Error(\"Failed to load Ghostty WASM\");\n }\n static async loadFromPath(A) {\n let B;\n if (typeof Bun < \"u\" && typeof Bun.file == \"function\")\n try {\n const C = Bun.file(A);\n await C.exists() && (B = await C.arrayBuffer());\n } catch {\n }\n if (!B)\n try {\n const I = await (await import(\"./__vite-browser-external-2447137e.js\")).readFile(A);\n B = I.buffer.slice(I.byteOffset, I.byteOffset + I.byteLength);\n } catch {\n }\n if (!B) {\n const C = await fetch(A);\n if (!C.ok)\n throw new Error(`Failed to fetch WASM: ${C.status} ${C.statusText}`);\n if (B = await C.arrayBuffer(), B.byteLength === 0)\n throw new Error(`WASM file is empty (0 bytes). Check path: ${A}`);\n }\n if (!B)\n throw new Error(`Could not load WASM from path: ${A}`);\n const g = await WebAssembly.compile(B), E = await WebAssembly.instantiate(g, {\n env: {\n log: (C, I) => {\n const D = new Uint8Array(\n E.exports.memory.buffer,\n C,\n I\n );\n console.log(\"[ghostty-vt]\", new TextDecoder().decode(D));\n }\n }\n });\n return new q(E);\n }\n}\nclass V {\n constructor(A) {\n this.encoder = 0, this.exports = A;\n const B = this.exports.ghostty_wasm_alloc_opaque(), g = this.exports.ghostty_key_encoder_new(0, B);\n if (g !== 0)\n throw new Error(`Failed to create key encoder: ${g}`);\n const E = new DataView(this.exports.memory.buffer);\n this.encoder = E.getUint32(B, !0), this.exports.ghostty_wasm_free_opaque(B);\n }\n setOption(A, B) {\n const g = this.exports.ghostty_wasm_alloc_u8();\n new DataView(this.exports.memory.buffer).setUint8(g, typeof B == \"boolean\" ? B ? 1 : 0 : B), this.exports.ghostty_key_encoder_setopt(this.encoder, A, g), this.exports.ghostty_wasm_free_u8(g);\n }\n setKittyFlags(A) {\n this.setOption(H.KITTY_KEYBOARD_FLAGS, A);\n }\n encode(A) {\n const B = this.exports.ghostty_wasm_alloc_opaque(), g = this.exports.ghostty_key_event_new(0, B);\n if (g !== 0)\n throw new Error(`Failed to create key event: ${g}`);\n const E = new DataView(this.exports.memory.buffer), C = E.getUint32(B, !0);\n if (this.exports.ghostty_wasm_free_opaque(B), this.exports.ghostty_key_event_set_action(C, A.action), this.exports.ghostty_key_event_set_key(C, A.key), this.exports.ghostty_key_event_set_mods(C, A.mods), A.utf8) {\n const M = new TextEncoder().encode(A.utf8), a = this.exports.ghostty_wasm_alloc_u8_array(M.length);\n new Uint8Array(this.exports.memory.buffer).set(M, a), this.exports.ghostty_key_event_set_utf8(C, a, M.length), this.exports.ghostty_wasm_free_u8_array(a, M.length);\n }\n const I = 32, D = this.exports.ghostty_wasm_alloc_u8_array(I), i = this.exports.ghostty_wasm_alloc_usize(), w = this.exports.ghostty_key_encoder_encode(\n this.encoder,\n C,\n D,\n I,\n i\n );\n if (w !== 0)\n throw this.exports.ghostty_wasm_free_u8_array(D, I), this.exports.ghostty_wasm_free_usize(i), this.exports.ghostty_key_event_free(C), new Error(`Failed to encode key: ${w}`);\n const s = E.getUint32(i, !0), N = new Uint8Array(this.exports.memory.buffer, D, s).slice();\n return this.exports.ghostty_wasm_free_u8_array(D, I), this.exports.ghostty_wasm_free_usize(i), this.exports.ghostty_key_event_free(C), N;\n }\n dispose() {\n this.encoder && (this.exports.ghostty_key_encoder_free(this.encoder), this.encoder = 0);\n }\n}\nconst z = class K {\n constructor(A, B, g = 80, E = 24, C) {\n var I;\n if (this.viewportBufferPtr = 0, this.viewportBufferSize = 0, this.cellPool = [], this.graphemeBuffer = null, this.graphemeBufferPtr = 0, this.exports = A, this.memory = B, this._cols = g, this._rows = E, C) {\n const D = this.exports.ghostty_wasm_alloc_u8_array(d);\n if (D === 0)\n throw new Error(\"Failed to allocate config (out of memory)\");\n try {\n const i = new DataView(this.memory.buffer);\n let w = D;\n i.setUint32(w, C.scrollbackLimit ?? 1e4, !0), w += 4, i.setUint32(w, C.fgColor ?? 0, !0), w += 4, i.setUint32(w, C.bgColor ?? 0, !0), w += 4, i.setUint32(w, C.cursorColor ?? 0, !0), w += 4;\n for (let s = 0; s < 16; s++)\n i.setUint32(w, ((I = C.palette) == null ? void 0 : I[s]) ?? 0, !0), w += 4;\n this.handle = this.exports.ghostty_terminal_new_with_config(g, E, D);\n } finally {\n this.exports.ghostty_wasm_free_u8_array(D, d);\n }\n } else\n this.handle = this.exports.ghostty_terminal_new(g, E);\n if (!this.handle)\n throw new Error(\"Failed to create terminal\");\n this.initCellPool();\n }\n get cols() {\n return this._cols;\n }\n get rows() {\n return this._rows;\n }\n // ==========================================================================\n // Lifecycle\n // ==========================================================================\n write(A) {\n const B = typeof A == \"string\" ? new TextEncoder().encode(A) : A, g = this.exports.ghostty_wasm_alloc_u8_array(B.length);\n new Uint8Array(this.memory.buffer).set(B, g), this.exports.ghostty_terminal_write(this.handle, g, B.length), this.exports.ghostty_wasm_free_u8_array(g, B.length);\n }\n resize(A, B) {\n A === this._cols && B === this._rows || (this._cols = A, this._rows = B, this.exports.ghostty_terminal_resize(this.handle, A, B), this.invalidateBuffers(), this.initCellPool());\n }\n free() {\n this.viewportBufferPtr && (this.exports.ghostty_wasm_free_u8_array(this.viewportBufferPtr, this.viewportBufferSize), this.viewportBufferPtr = 0), this.exports.ghostty_terminal_free(this.handle);\n }\n // ==========================================================================\n // RenderState API - The key performance optimization\n // ==========================================================================\n /**\n * Update render state from terminal.\n *\n * This syncs the RenderState with the current Terminal state.\n * The dirty state (full/partial/none) is stored in the WASM RenderState\n * and can be queried via isRowDirty(). When dirty==full, isRowDirty()\n * returns true for ALL rows.\n *\n * The WASM layer automatically detects screen switches (normal <-> alternate)\n * and returns FULL dirty state when switching screens (e.g., vim exit).\n *\n * Safe to call multiple times - dirty state persists until markClean().\n */\n update() {\n return this.exports.ghostty_render_state_update(this.handle);\n }\n /**\n * Get cursor state from render state.\n * Ensures render state is fresh by calling update().\n */\n getCursor() {\n return this.update(), {\n x: this.exports.ghostty_render_state_get_cursor_x(this.handle),\n y: this.exports.ghostty_render_state_get_cursor_y(this.handle),\n viewportX: this.exports.ghostty_render_state_get_cursor_x(this.handle),\n viewportY: this.exports.ghostty_render_state_get_cursor_y(this.handle),\n visible: this.exports.ghostty_render_state_get_cursor_visible(this.handle),\n blinking: !1,\n // TODO: Add blinking support\n style: \"block\"\n // TODO: Add style support\n };\n }\n /**\n * Get default colors from render state\n */\n getColors() {\n const A = this.exports.ghostty_render_state_get_bg_color(this.handle), B = this.exports.ghostty_render_state_get_fg_color(this.handle);\n return {\n background: {\n r: A >> 16 & 255,\n g: A >> 8 & 255,\n b: A & 255\n },\n foreground: {\n r: B >> 16 & 255,\n g: B >> 8 & 255,\n b: B & 255\n },\n cursor: null\n // TODO: Add cursor color support\n };\n }\n /**\n * Check if a specific row is dirty\n */\n isRowDirty(A) {\n return this.exports.ghostty_render_state_is_row_dirty(this.handle, A);\n }\n /**\n * Mark render state as clean (call after rendering)\n */\n markClean() {\n this.exports.ghostty_render_state_mark_clean(this.handle);\n }\n /**\n * Get ALL viewport cells in ONE WASM call - the key performance optimization!\n * Returns a reusable cell array (zero allocation after warmup).\n */\n getViewport() {\n const A = this._cols * this._rows, B = A * K.CELL_SIZE;\n return (!this.viewportBufferPtr || this.viewportBufferSize < B) && (this.viewportBufferPtr && this.exports.ghostty_wasm_free_u8_array(this.viewportBufferPtr, this.viewportBufferSize), this.viewportBufferPtr = this.exports.ghostty_wasm_alloc_u8_array(B), this.viewportBufferSize = B), this.exports.ghostty_render_state_get_viewport(\n this.handle,\n this.viewportBufferPtr,\n A\n ) < 0 ? this.cellPool : (this.parseCellsIntoPool(this.viewportBufferPtr, A), this.cellPool);\n }\n // ==========================================================================\n // Compatibility methods (delegate to render state)\n // ==========================================================================\n /**\n * Get line - for compatibility, extracts from viewport.\n * Ensures render state is fresh by calling update().\n * Returns a COPY of the cells to avoid pool reference issues.\n */\n getLine(A) {\n if (A < 0 || A >= this._rows)\n return null;\n this.update();\n const B = this.getViewport(), g = A * this._cols;\n return B.slice(g, g + this._cols).map((E) => ({ ...E }));\n }\n /** For compatibility with old API */\n isDirty() {\n return this.update() !== O.NONE;\n }\n /**\n * Check if a full redraw is needed (screen change, resize, etc.)\n * Note: This calls update() to ensure fresh state. Safe to call multiple times.\n */\n needsFullRedraw() {\n return this.update() === O.FULL;\n }\n /** Mark render state as clean after rendering */\n clearDirty() {\n this.markClean();\n }\n // ==========================================================================\n // Terminal modes\n // ==========================================================================\n isAlternateScreen() {\n return !!this.exports.ghostty_terminal_is_alternate_screen(this.handle);\n }\n hasBracketedPaste() {\n return this.getMode(2004, !1);\n }\n hasFocusEvents() {\n return this.getMode(1004, !1);\n }\n hasMouseTracking() {\n return this.exports.ghostty_terminal_has_mouse_tracking(this.handle) !== 0;\n }\n // ==========================================================================\n // Extended API (scrollback, modes, etc.)\n // ==========================================================================\n /** Get dimensions - for compatibility */\n getDimensions() {\n return { cols: this._cols, rows: this._rows };\n }\n /** Get number of scrollback lines (history, not including active screen) */\n getScrollbackLength() {\n return this.exports.ghostty_terminal_get_scrollback_length(this.handle);\n }\n /**\n * Get a line from the scrollback buffer.\n * Ensures render state is fresh by calling update().\n * @param offset 0 = oldest line, (length-1) = most recent scrollback line\n */\n getScrollbackLine(A) {\n const B = this._cols * K.CELL_SIZE;\n (!this.viewportBufferPtr || this.viewportBufferSize < B) && (this.viewportBufferPtr && this.exports.ghostty_wasm_free_u8_array(this.viewportBufferPtr, this.viewportBufferSize), this.viewportBufferPtr = this.exports.ghostty_wasm_alloc_u8_array(B), this.viewportBufferSize = B), this.update();\n const g = this.exports.ghostty_terminal_get_scrollback_line(\n this.handle,\n A,\n this.viewportBufferPtr,\n this._cols\n );\n if (g < 0)\n return null;\n const E = [], C = this.memory.buffer, I = new Uint8Array(C, this.viewportBufferPtr, g * K.CELL_SIZE), D = new DataView(C, this.viewportBufferPtr, g * K.CELL_SIZE);\n for (let i = 0; i < g; i++) {\n const w = i * K.CELL_SIZE;\n E.push({\n codepoint: D.getUint32(w, !0),\n fg_r: I[w + 4],\n fg_g: I[w + 5],\n fg_b: I[w + 6],\n bg_r: I[w + 7],\n bg_g: I[w + 8],\n bg_b: I[w + 9],\n flags: I[w + 10],\n width: I[w + 11],\n hyperlink_id: D.getUint16(w + 12, !0),\n grapheme_len: I[w + 14]\n });\n }\n return E;\n }\n /** Check if a row in the active screen is wrapped (soft-wrapped to next line) */\n isRowWrapped(A) {\n return this.exports.ghostty_terminal_is_row_wrapped(this.handle, A) !== 0;\n }\n /** Hyperlink URI not yet exposed in simplified API */\n getHyperlinkUri(A) {\n return null;\n }\n /**\n * Check if there are pending responses from the terminal.\n * Responses are generated by escape sequences like DSR (Device Status Report).\n */\n hasResponse() {\n return this.exports.ghostty_terminal_has_response(this.handle);\n }\n /**\n * Read pending responses from the terminal.\n * Returns the response string, or null if no responses pending.\n *\n * Responses are generated by escape sequences that require replies:\n * - DSR 6 (cursor position): Returns \\x1b[row;colR\n * - DSR 5 (operating status): Returns \\x1b[0n\n */\n readResponse() {\n if (!this.hasResponse())\n return null;\n const A = 256, B = this.exports.ghostty_wasm_alloc_u8_array(A);\n try {\n const g = this.exports.ghostty_terminal_read_response(this.handle, B, A);\n if (g <= 0)\n return null;\n const E = new Uint8Array(this.memory.buffer, B, g);\n return new TextDecoder().decode(E.slice());\n } finally {\n this.exports.ghostty_wasm_free_u8_array(B, A);\n }\n }\n /**\n * Query arbitrary terminal mode by number\n * @param mode Mode number (e.g., 25 for cursor visibility, 2004 for bracketed paste)\n * @param isAnsi True for ANSI modes, false for DEC modes (default: false)\n */\n getMode(A, B = !1) {\n return this.exports.ghostty_terminal_get_mode(this.handle, A, B) !== 0;\n }\n // ==========================================================================\n // Private helpers\n // ==========================================================================\n initCellPool() {\n const A = this._cols * this._rows;\n if (this.cellPool.length < A)\n for (let B = this.cellPool.length; B < A; B++)\n this.cellPool.push({\n codepoint: 0,\n fg_r: 204,\n fg_g: 204,\n fg_b: 204,\n bg_r: 0,\n bg_g: 0,\n bg_b: 0,\n flags: 0,\n width: 1,\n hyperlink_id: 0,\n grapheme_len: 0\n });\n }\n parseCellsIntoPool(A, B) {\n const g = this.memory.buffer, E = new Uint8Array(g, A, B * K.CELL_SIZE), C = new DataView(g, A, B * K.CELL_SIZE);\n for (let I = 0; I < B; I++) {\n const D = I * K.CELL_SIZE, i = this.cellPool[I];\n i.codepoint = C.getUint32(D, !0), i.fg_r = E[D + 4], i.fg_g = E[D + 5], i.fg_b = E[D + 6], i.bg_r = E[D + 7], i.bg_g = E[D + 8], i.bg_b = E[D + 9], i.flags = E[D + 10], i.width = E[D + 11], i.hyperlink_id = C.getUint16(D + 12, !0), i.grapheme_len = E[D + 14];\n }\n }\n /**\n * Get all codepoints for a grapheme cluster at the given position.\n * For most cells this returns a single codepoint, but for complex scripts\n * (Hindi, emoji with ZWJ, etc.) it returns multiple codepoints.\n * @returns Array of codepoints, or null on error\n */\n getGrapheme(A, B) {\n this.graphemeBuffer || (this.graphemeBufferPtr = this.exports.ghostty_wasm_alloc_u8_array(16 * 4), this.graphemeBuffer = new Uint32Array(this.memory.buffer, this.graphemeBufferPtr, 16));\n const g = this.exports.ghostty_render_state_get_grapheme(\n this.handle,\n A,\n B,\n this.graphemeBufferPtr,\n 16\n );\n if (g < 0)\n return null;\n const E = new Uint32Array(this.memory.buffer, this.graphemeBufferPtr, g);\n return Array.from(E);\n }\n /**\n * Get a string representation of the grapheme at the given position.\n * This properly handles complex scripts like Hindi, emoji with ZWJ, etc.\n */\n getGraphemeString(A, B) {\n const g = this.getGrapheme(A, B);\n return !g || g.length === 0 ? \" \" : String.fromCodePoint(...g);\n }\n /**\n * Get all codepoints for a grapheme cluster in the scrollback buffer.\n * @param offset Scrollback line offset (0 = oldest)\n * @param col Column index\n * @returns Array of codepoints, or null on error\n */\n getScrollbackGrapheme(A, B) {\n this.graphemeBuffer || (this.graphemeBufferPtr = this.exports.ghostty_wasm_alloc_u8_array(16 * 4), this.graphemeBuffer = new Uint32Array(this.memory.buffer, this.graphemeBufferPtr, 16));\n const g = this.exports.ghostty_terminal_get_scrollback_grapheme(\n this.handle,\n A,\n B,\n this.graphemeBufferPtr,\n 16\n );\n if (g < 0)\n return null;\n const E = new Uint32Array(this.memory.buffer, this.graphemeBufferPtr, g);\n return Array.from(E);\n }\n /**\n * Get a string representation of a grapheme in the scrollback buffer.\n */\n getScrollbackGraphemeString(A, B) {\n const g = this.getScrollbackGrapheme(A, B);\n return !g || g.length === 0 ? \" \" : String.fromCodePoint(...g);\n }\n invalidateBuffers() {\n this.viewportBufferPtr && (this.exports.ghostty_wasm_free_u8_array(this.viewportBufferPtr, this.viewportBufferSize), this.viewportBufferPtr = 0, this.viewportBufferSize = 0);\n }\n};\nz.CELL_SIZE = 16;\nlet W = z;\nclass J {\n constructor() {\n this.listeners = [], this.event = (A) => (this.listeners.push(A), {\n dispose: () => {\n const B = this.listeners.indexOf(A);\n B >= 0 && this.listeners.splice(B, 1);\n }\n });\n }\n fire(A) {\n for (const B of this.listeners)\n B(A);\n }\n dispose() {\n this.listeners = [];\n }\n}\nclass Z {\n constructor(A) {\n this.bufferChangeEmitter = new J(), this.terminal = A;\n }\n get active() {\n const A = this.terminal.wasmTerm;\n return A ? A.isAlternateScreen() ? this.alternate : this.normal : this.normal;\n }\n get normal() {\n return this._normalBuffer || (this._normalBuffer = new m(this.terminal, \"normal\")), this._normalBuffer;\n }\n get alternate() {\n return this._alternateBuffer || (this._alternateBuffer = new m(this.terminal, \"alternate\")), this._alternateBuffer;\n }\n get onBufferChange() {\n return this.bufferChangeEmitter.event;\n }\n /**\n * Internal: Fire buffer change event when screen switches\n * Should be called by Terminal when detecting screen change\n */\n _fireBufferChange(A) {\n this.bufferChangeEmitter.fire(A);\n }\n}\nclass m {\n constructor(A, B) {\n this.terminal = A, this.bufferType = B;\n const g = {\n codepoint: 0,\n fg_r: 204,\n fg_g: 204,\n fg_b: 204,\n bg_r: 0,\n bg_g: 0,\n bg_b: 0,\n flags: 0,\n width: 1,\n hyperlink_id: 0,\n grapheme_len: 0\n };\n this.nullCell = new l(g, 0);\n }\n get type() {\n return this.bufferType;\n }\n get cursorX() {\n const A = this.getWasmTerm();\n return A ? A.getCursor().x : 0;\n }\n get cursorY() {\n const A = this.getWasmTerm();\n return A ? A.getCursor().y : 0;\n }\n get viewportY() {\n return 0;\n }\n get baseY() {\n return 0;\n }\n get length() {\n const A = this.getWasmTerm();\n return A ? this.bufferType === \"alternate\" ? A.rows : A.getScrollbackLength() + A.rows : 0;\n }\n getLine(A) {\n const B = this.getWasmTerm();\n if (!B || A < 0 || A >= this.length)\n return;\n const g = B.getScrollbackLength();\n let E, C, I;\n if (this.bufferType === \"normal\" && A < g) {\n const D = A;\n E = B.getScrollbackLine(D), I = !1;\n } else\n C = this.bufferType === \"normal\" ? A - g : A, E = B.getLine(C), I = B.isRowWrapped(C);\n if (E)\n return new j(E, I, B.cols);\n }\n getNullCell() {\n return this.nullCell;\n }\n getWasmTerm() {\n return this.terminal.wasmTerm;\n }\n}\nclass j {\n constructor(A, B, g) {\n this.cells = A, this._isWrapped = B, this._length = g;\n }\n get length() {\n return this._length;\n }\n get isWrapped() {\n return this._isWrapped;\n }\n getCell(A) {\n if (!(A < 0 || A >= this._length))\n return A >= this.cells.length ? new l(\n {\n codepoint: 0,\n fg_r: 204,\n fg_g: 204,\n fg_b: 204,\n bg_r: 0,\n bg_g: 0,\n bg_b: 0,\n flags: 0,\n width: 1,\n hyperlink_id: 0,\n grapheme_len: 0\n },\n A\n ) : new l(this.cells[A], A);\n }\n translateToString(A = !1, B = 0, g = this._length) {\n const E = Math.max(0, Math.min(B, this._length)), C = Math.max(E, Math.min(g, this._length));\n let I = \"\";\n for (let D = E; D < C; D++) {\n const i = this.getCell(D);\n if (i) {\n const w = i.getChars();\n I += w;\n }\n }\n return A && (I = I.trimEnd()), I;\n }\n}\nclass l {\n constructor(A, B) {\n this.cell = A, this.x = B;\n }\n getChars() {\n const A = this.cell.codepoint;\n return A === 0 ? \"\" : A < 0 || A > 1114111 || A >= 55296 && A <= 57343 ? \"�\" : String.fromCodePoint(A);\n }\n getCode() {\n return this.cell.codepoint;\n }\n getWidth() {\n return this.cell.width;\n }\n getFgColorMode() {\n return -1;\n }\n getBgColorMode() {\n return -1;\n }\n getFgColor() {\n return this.cell.fg_r << 16 | this.cell.fg_g << 8 | this.cell.fg_b;\n }\n getBgColor() {\n return this.cell.bg_r << 16 | this.cell.bg_g << 8 | this.cell.bg_b;\n }\n isBold() {\n return this.cell.flags & e.BOLD ? 1 : 0;\n }\n isItalic() {\n return this.cell.flags & e.ITALIC ? 1 : 0;\n }\n isUnderline() {\n return this.cell.flags & e.UNDERLINE ? 1 : 0;\n }\n isStrikethrough() {\n return this.cell.flags & e.STRIKETHROUGH ? 1 : 0;\n }\n isBlink() {\n return this.cell.flags & e.BLINK ? 1 : 0;\n }\n isInverse() {\n return this.cell.flags & e.INVERSE ? 1 : 0;\n }\n isInvisible() {\n return this.cell.flags & e.INVISIBLE ? 1 : 0;\n }\n isFaint() {\n return this.cell.flags & e.FAINT ? 1 : 0;\n }\n /**\n * Get hyperlink ID for this cell (0 = no link)\n * Used by link detection system\n */\n getHyperlinkId() {\n return this.cell.hyperlink_id;\n }\n /**\n * Get the Unicode codepoint for this cell\n * Used by link detection system\n */\n getCodepoint() {\n return this.cell.codepoint;\n }\n /**\n * Check if cell has dim/faint attribute\n * Added for IBufferCell compatibility\n */\n isDim() {\n return (this.cell.flags & e.FAINT) !== 0;\n }\n}\nconst u = {\n // Letters\n KeyA: o.A,\n KeyB: o.B,\n KeyC: o.C,\n KeyD: o.D,\n KeyE: o.E,\n KeyF: o.F,\n KeyG: o.G,\n KeyH: o.H,\n KeyI: o.I,\n KeyJ: o.J,\n KeyK: o.K,\n KeyL: o.L,\n KeyM: o.M,\n KeyN: o.N,\n KeyO: o.O,\n KeyP: o.P,\n KeyQ: o.Q,\n KeyR: o.R,\n KeyS: o.S,\n KeyT: o.T,\n KeyU: o.U,\n KeyV: o.V,\n KeyW: o.W,\n KeyX: o.X,\n KeyY: o.Y,\n KeyZ: o.Z,\n // Numbers\n Digit1: o.ONE,\n Digit2: o.TWO,\n Digit3: o.THREE,\n Digit4: o.FOUR,\n Digit5: o.FIVE,\n Digit6: o.SIX,\n Digit7: o.SEVEN,\n Digit8: o.EIGHT,\n Digit9: o.NINE,\n Digit0: o.ZERO,\n // Special keys\n Enter: o.ENTER,\n Escape: o.ESCAPE,\n Backspace: o.BACKSPACE,\n Tab: o.TAB,\n Space: o.SPACE,\n // Punctuation\n Minus: o.MINUS,\n Equal: o.EQUAL,\n BracketLeft: o.BRACKET_LEFT,\n BracketRight: o.BRACKET_RIGHT,\n Backslash: o.BACKSLASH,\n Semicolon: o.SEMICOLON,\n Quote: o.QUOTE,\n Backquote: o.GRAVE,\n Comma: o.COMMA,\n Period: o.PERIOD,\n Slash: o.SLASH,\n // Function keys\n CapsLock: o.CAPS_LOCK,\n F1: o.F1,\n F2: o.F2,\n F3: o.F3,\n F4: o.F4,\n F5: o.F5,\n F6: o.F6,\n F7: o.F7,\n F8: o.F8,\n F9: o.F9,\n F10: o.F10,\n F11: o.F11,\n F12: o.F12,\n // Special function keys\n PrintScreen: o.PRINT_SCREEN,\n ScrollLock: o.SCROLL_LOCK,\n Pause: o.PAUSE,\n Insert: o.INSERT,\n Home: o.HOME,\n PageUp: o.PAGE_UP,\n Delete: o.DELETE,\n End: o.END,\n PageDown: o.PAGE_DOWN,\n // Arrow keys\n ArrowRight: o.RIGHT,\n ArrowLeft: o.LEFT,\n ArrowDown: o.DOWN,\n ArrowUp: o.UP,\n // Keypad\n NumLock: o.NUM_LOCK,\n NumpadDivide: o.KP_DIVIDE,\n NumpadMultiply: o.KP_MULTIPLY,\n NumpadSubtract: o.KP_MINUS,\n NumpadAdd: o.KP_PLUS,\n NumpadEnter: o.KP_ENTER,\n Numpad1: o.KP_1,\n Numpad2: o.KP_2,\n Numpad3: o.KP_3,\n Numpad4: o.KP_4,\n Numpad5: o.KP_5,\n Numpad6: o.KP_6,\n Numpad7: o.KP_7,\n Numpad8: o.KP_8,\n Numpad9: o.KP_9,\n Numpad0: o.KP_0,\n NumpadDecimal: o.KP_PERIOD,\n // International\n IntlBackslash: o.INTL_BACKSLASH,\n ContextMenu: o.CONTEXT_MENU,\n // Additional function keys\n F13: o.F13,\n F14: o.F14,\n F15: o.F15,\n F16: o.F16,\n F17: o.F17,\n F18: o.F18,\n F19: o.F19,\n F20: o.F20,\n F21: o.F21,\n F22: o.F22,\n F23: o.F23,\n F24: o.F24\n};\nclass P {\n /**\n * Create a new InputHandler\n * @param ghostty - Ghostty instance (for creating KeyEncoder)\n * @param container - DOM element to attach listeners to\n * @param onData - Callback for terminal data (escape sequences to send to PTY)\n * @param onBell - Callback for bell/beep event\n * @param onKey - Optional callback for raw key events\n * @param customKeyEventHandler - Optional custom key event handler\n * @param getMode - Optional callback to query terminal mode state (for application cursor mode)\n */\n constructor(A, B, g, E, C, I, D) {\n this.keydownListener = null, this.keypressListener = null, this.pasteListener = null, this.compositionStartListener = null, this.compositionUpdateListener = null, this.compositionEndListener = null, this.isComposing = !1, this.isDisposed = !1, this.encoder = A.createKeyEncoder(), this.container = B, this.onDataCallback = g, this.onBellCallback = E, this.onKeyCallback = C, this.customKeyEventHandler = I, this.getModeCallback = D, this.attach();\n }\n /**\n * Set custom key event handler (for runtime updates)\n */\n setCustomKeyEventHandler(A) {\n this.customKeyEventHandler = A;\n }\n /**\n * Attach keyboard event listeners to container\n */\n attach() {\n typeof this.container.hasAttribute == \"function\" && typeof this.container.setAttribute == \"function\" && (this.container.hasAttribute(\"tabindex\") || this.container.setAttribute(\"tabindex\", \"0\"), this.container.style && (this.container.style.outline = \"none\")), this.keydownListener = this.handleKeyDown.bind(this), this.container.addEventListener(\"keydown\", this.keydownListener), this.pasteListener = this.handlePaste.bind(this), this.container.addEventListener(\"paste\", this.pasteListener), this.compositionStartListener = this.handleCompositionStart.bind(this), this.container.addEventListener(\"compositionstart\", this.compositionStartListener), this.compositionUpdateListener = this.handleCompositionUpdate.bind(this), this.container.addEventListener(\"compositionupdate\", this.compositionUpdateListener), this.compositionEndListener = this.handleCompositionEnd.bind(this), this.container.addEventListener(\"compositionend\", this.compositionEndListener);\n }\n /**\n * Map KeyboardEvent.code to USB HID Key enum value\n * @param code - KeyboardEvent.code value\n * @returns Key enum value or null if unmapped\n */\n mapKeyCode(A) {\n return u[A] ?? null;\n }\n /**\n * Extract modifier flags from KeyboardEvent\n * @param event - KeyboardEvent\n * @returns Mods flags\n */\n extractModifiers(A) {\n let B = y.NONE;\n return A.shiftKey && (B |= y.SHIFT), A.ctrlKey && (B |= y.CTRL), A.altKey && (B |= y.ALT), A.metaKey && (B |= y.SUPER), B;\n }\n /**\n * Check if this is a printable character with no special modifiers\n * @param event - KeyboardEvent\n * @returns true if printable character\n */\n isPrintableCharacter(A) {\n return A.ctrlKey && !A.altKey || A.altKey && !A.ctrlKey || A.metaKey ? !1 : A.key.length === 1;\n }\n /**\n * Handle keydown event\n * @param event - KeyboardEvent\n */\n handleKeyDown(A) {\n if (this.isDisposed || this.isComposing || A.isComposing || A.keyCode === 229)\n return;\n if (this.onKeyCallback && this.onKeyCallback({ key: A.key, domEvent: A }), this.customKeyEventHandler && this.customKeyEventHandler(A)) {\n A.preventDefault();\n return;\n }\n if ((A.ctrlKey || A.metaKey) && A.code === \"KeyV\" || A.metaKey && A.code === \"KeyC\")\n return;\n if (this.isPrintableCharacter(A)) {\n A.preventDefault(), this.onDataCallback(A.key);\n return;\n }\n const B = this.mapKeyCode(A.code);\n if (B === null)\n return;\n const g = this.extractModifiers(A);\n if (g === y.NONE || g === y.SHIFT) {\n let C = null;\n switch (B) {\n case o.ENTER:\n C = \"\\r\";\n break;\n case o.TAB:\n C = \"\t\";\n break;\n case o.BACKSPACE:\n C = \"\";\n break;\n case o.ESCAPE:\n C = \"\\x1B\";\n break;\n case o.HOME:\n C = \"\\x1B[H\";\n break;\n case o.END:\n C = \"\\x1B[F\";\n break;\n case o.INSERT:\n C = \"\\x1B[2~\";\n break;\n case o.DELETE:\n C = \"\\x1B[3~\";\n break;\n case o.PAGE_UP:\n C = \"\\x1B[5~\";\n break;\n case o.PAGE_DOWN:\n C = \"\\x1B[6~\";\n break;\n case o.F1:\n C = \"\\x1BOP\";\n break;\n case o.F2:\n C = \"\\x1BOQ\";\n break;\n case o.F3:\n C = \"\\x1BOR\";\n break;\n case o.F4:\n C = \"\\x1BOS\";\n break;\n case o.F5:\n C = \"\\x1B[15~\";\n break;\n case o.F6:\n C = \"\\x1B[17~\";\n break;\n case o.F7:\n C = \"\\x1B[18~\";\n break;\n case o.F8:\n C = \"\\x1B[19~\";\n break;\n case o.F9:\n C = \"\\x1B[20~\";\n break;\n case o.F10:\n C = \"\\x1B[21~\";\n break;\n case o.F11:\n C = \"\\x1B[23~\";\n break;\n case o.F12:\n C = \"\\x1B[24~\";\n break;\n }\n if (C !== null) {\n A.preventDefault(), this.onDataCallback(C);\n return;\n }\n }\n const E = b.PRESS;\n try {\n if (this.getModeCallback) {\n const w = this.getModeCallback(1);\n this.encoder.setOption(H.CURSOR_KEY_APPLICATION, w);\n }\n const C = A.key.length === 1 && A.key.charCodeAt(0) < 128 ? A.key.toLowerCase() : void 0, I = this.encoder.encode({\n action: E,\n key: B,\n mods: g,\n utf8: C\n }), i = new TextDecoder().decode(I);\n A.preventDefault(), A.stopPropagation(), i.length > 0 && this.onDataCallback(i);\n } catch (C) {\n console.warn(\"Failed to encode key:\", A.code, C);\n }\n }\n /**\n * Handle paste event from clipboard\n * @param event - ClipboardEvent\n */\n handlePaste(A) {\n if (this.isDisposed)\n return;\n A.preventDefault(), A.stopPropagation();\n const B = A.clipboardData;\n if (!B) {\n console.warn(\"No clipboard data available\");\n return;\n }\n const g = B.getData(\"text/plain\");\n if (!g) {\n console.warn(\"No text in clipboard\");\n return;\n }\n this.onDataCallback(g);\n }\n /**\n * Handle compositionstart event\n */\n handleCompositionStart(A) {\n this.isDisposed || (this.isComposing = !0);\n }\n /**\n * Handle compositionupdate event\n */\n handleCompositionUpdate(A) {\n this.isDisposed;\n }\n /**\n * Handle compositionend event\n */\n handleCompositionEnd(A) {\n if (this.isDisposed)\n return;\n this.isComposing = !1;\n const B = A.data;\n if (B && B.length > 0 && this.onDataCallback(B), this.container && this.container.childNodes)\n for (let g = this.container.childNodes.length - 1; g >= 0; g--) {\n const E = this.container.childNodes[g];\n E.nodeType === 3 && this.container.removeChild(E);\n }\n }\n /**\n * Dispose the InputHandler and remove event listeners\n */\n dispose() {\n this.isDisposed || (this.keydownListener && (this.container.removeEventListener(\"keydown\", this.keydownListener), this.keydownListener = null), this.keypressListener && (this.container.removeEventListener(\"keypress\", this.keypressListener), this.keypressListener = null), this.pasteListener && (this.container.removeEventListener(\"paste\", this.pasteListener), this.pasteListener = null), this.compositionStartListener && (this.container.removeEventListener(\"compositionstart\", this.compositionStartListener), this.compositionStartListener = null), this.compositionUpdateListener && (this.container.removeEventListener(\"compositionupdate\", this.compositionUpdateListener), this.compositionUpdateListener = null), this.compositionEndListener && (this.container.removeEventListener(\"compositionend\", this.compositionEndListener), this.compositionEndListener = null), this.isDisposed = !0);\n }\n /**\n * Check if handler is disposed\n */\n isActive() {\n return !this.isDisposed;\n }\n}\nclass v {\n // Terminal instance for buffer access\n constructor(A) {\n this.terminal = A, this.providers = [], this.linkCache = /* @__PURE__ */ new Map(), this.scannedRows = /* @__PURE__ */ new Set();\n }\n /**\n * Register a link provider\n */\n registerProvider(A) {\n this.providers.push(A), this.invalidateCache();\n }\n /**\n * Get link at the specified buffer position\n * @param col Column (0-based)\n * @param row Absolute row in buffer (0-based)\n * @returns Link at position, or undefined if none\n */\n async getLinkAt(A, B) {\n const g = this.terminal.buffer.active.getLine(B);\n if (!g || A < 0 || A >= g.length)\n return;\n const E = g.getCell(A);\n if (!E)\n return;\n const C = E.getHyperlinkId();\n if (C > 0) {\n const I = `h${C}`;\n if (this.linkCache.has(I))\n return this.linkCache.get(I);\n }\n if (this.scannedRows.has(B) || await this.scanRow(B), C > 0) {\n const I = `h${C}`, D = this.linkCache.get(I);\n if (D)\n return D;\n }\n for (const I of this.linkCache.values())\n if (this.isPositionInLink(A, B, I))\n return I;\n }\n /**\n * Scan a row for links using all registered providers\n */\n async scanRow(A) {\n this.scannedRows.add(A);\n const B = [];\n for (const g of this.providers) {\n const E = await new Promise((C) => {\n g.provideLinks(A, C);\n });\n E && B.push(...E);\n }\n for (const g of B)\n this.cacheLink(g);\n }\n /**\n * Cache a link for fast lookup\n */\n cacheLink(A) {\n const { start: B } = A.range, g = this.terminal.buffer.active.getLine(B.y);\n if (g) {\n const D = g.getCell(B.x);\n if (!D) {\n const { start: w, end: s } = A.range, N = `r${w.y}:${w.x}-${s.x}`;\n this.linkCache.set(N, A);\n return;\n }\n const i = D.getHyperlinkId();\n if (i > 0) {\n this.linkCache.set(`h${i}`, A);\n return;\n }\n }\n const { start: E, end: C } = A.range, I = `r${E.y}:${E.x}-${C.x}`;\n this.linkCache.set(I, A);\n }\n /**\n * Check if a position is within a link's range\n */\n isPositionInLink(A, B, g) {\n const { start: E, end: C } = g.range;\n return B < E.y || B > C.y ? !1 : E.y === C.y ? A >= E.x && A <= C.x : B === E.y ? A >= E.x : B === C.y ? A <= C.x : !0;\n }\n /**\n * Invalidate cache when terminal content changes\n * Should be called on terminal write, resize, or clear\n */\n invalidateCache() {\n this.linkCache.clear(), this.scannedRows.clear();\n }\n /**\n * Invalidate cache for specific rows\n * Used when only part of the terminal changed\n */\n invalidateRows(A, B) {\n for (let E = A; E <= B; E++)\n this.scannedRows.delete(E);\n const g = [];\n for (const [E, C] of this.linkCache.entries()) {\n const { start: I, end: D } = C.range;\n (I.y >= A && I.y <= B || D.y >= A && D.y <= B || I.y < A && D.y > B) && g.push(E);\n }\n for (const E of g)\n this.linkCache.delete(E);\n }\n /**\n * Dispose and cleanup\n */\n dispose() {\n var A;\n this.linkCache.clear(), this.scannedRows.clear();\n for (const B of this.providers)\n (A = B.dispose) == null || A.call(B);\n this.providers = [];\n }\n}\nclass X {\n constructor(A) {\n this.terminal = A;\n }\n /**\n * Provide all OSC 8 links on the given row\n * Note: This may return links that span multiple rows\n */\n provideLinks(A, B) {\n const g = [], E = /* @__PURE__ */ new Set(), C = this.terminal.buffer.active.getLine(A);\n if (!C) {\n B(void 0);\n return;\n }\n for (let I = 0; I < C.length; I++) {\n const D = C.getCell(I);\n if (!D)\n continue;\n const i = D.getHyperlinkId();\n if (i === 0 || E.has(i))\n continue;\n E.add(i);\n const w = this.findLinkRange(i, A, I);\n if (!this.terminal.wasmTerm)\n continue;\n const s = this.terminal.wasmTerm.getHyperlinkUri(i);\n s && g.push({\n text: s,\n range: w,\n activate: (N) => {\n (N.ctrlKey || N.metaKey) && window.open(s, \"_blank\", \"noopener,noreferrer\");\n }\n });\n }\n B(g.length > 0 ? g : void 0);\n }\n /**\n * Find the full extent of a link by scanning for contiguous cells\n * with the same hyperlink_id. Handles multi-line links.\n */\n findLinkRange(A, B, g) {\n const E = this.terminal.buffer.active;\n let C = B, I = g;\n for (; I > 0; ) {\n const s = E.getLine(C);\n if (!s)\n break;\n const N = s.getCell(I - 1);\n if (!N || N.getHyperlinkId() !== A)\n break;\n I--;\n }\n if (I === 0 && C > 0) {\n let s = C - 1;\n for (; s >= 0; ) {\n const N = E.getLine(s);\n if (!N || N.length === 0)\n break;\n const k = N.getCell(N.length - 1);\n if (!k || k.getHyperlinkId() !== A)\n break;\n C = s, I = 0;\n for (let M = N.length - 1; M >= 0; M--) {\n const a = N.getCell(M);\n if (!a || a.getHyperlinkId() !== A) {\n I = M + 1;\n break;\n }\n }\n if (I === 0)\n s--;\n else\n break;\n }\n }\n let D = B, i = g;\n const w = E.getLine(D);\n if (w) {\n for (; i < w.length - 1; ) {\n const s = w.getCell(i + 1);\n if (!s || s.getHyperlinkId() !== A)\n break;\n i++;\n }\n if (i === w.length - 1) {\n let s = D + 1;\n const N = E.length;\n for (; s < N; ) {\n const k = E.getLine(s);\n if (!k || k.length === 0)\n break;\n const M = k.getCell(0);\n if (!M || M.getHyperlinkId() !== A)\n break;\n D = s, i = 0;\n for (let a = 0; a < k.length; a++) {\n const h = k.getCell(a);\n if (!h)\n break;\n if (h.getHyperlinkId() !== A) {\n i = a - 1;\n break;\n }\n i = a;\n }\n if (i === k.length - 1)\n s++;\n else\n break;\n }\n }\n }\n return {\n start: { x: I, y: C },\n end: { x: i, y: D }\n };\n }\n dispose() {\n }\n}\nconst n = class r {\n constructor(A) {\n this.terminal = A;\n }\n /**\n * Provide all regex-detected URLs on the given row\n */\n provideLinks(A, B) {\n const g = [], E = this.terminal.buffer.active.getLine(A);\n if (!E) {\n B(void 0);\n return;\n }\n const C = this.lineToText(E);\n r.URL_REGEX.lastIndex = 0;\n let I = r.URL_REGEX.exec(C);\n for (; I !== null; ) {\n let D = I[0];\n const i = I.index;\n let w = I.index + D.length - 1;\n const s = D.replace(r.TRAILING_PUNCTUATION, \"\");\n s.length < D.length && (D = s, w = i + D.length - 1), D.length > 8 && g.push({\n text: D,\n range: {\n start: { x: i, y: A },\n end: { x: w, y: A }\n },\n activate: (N) => {\n (N.ctrlKey || N.metaKey) && window.open(D, \"_blank\", \"noopener,noreferrer\");\n }\n }), I = r.URL_REGEX.exec(C);\n }\n B(g.length > 0 ? g : void 0);\n }\n /**\n * Convert a buffer line to plain text string\n */\n lineToText(A) {\n const B = [];\n for (let g = 0; g < A.length; g++) {\n const E = A.getCell(g);\n if (!E) {\n B.push(\" \");\n continue;\n }\n const C = E.getCodepoint();\n C === 0 || C < 32 ? B.push(\" \") : B.push(String.fromCodePoint(C));\n }\n return B.join(\"\");\n }\n dispose() {\n }\n};\nn.URL_REGEX = /(?:https?:\\/\\/|mailto:|ftp:\\/\\/|ssh:\\/\\/|git:\\/\\/|tel:|magnet:|gemini:\\/\\/|gopher:\\/\\/|news:)[\\w\\-.~:\\/?#@!$&*+,;=%]+/gi;\nn.TRAILING_PUNCTUATION = /[.,;!?)\\]]+$/;\nlet _ = n;\nconst f = {\n foreground: \"#d4d4d4\",\n background: \"#1e1e1e\",\n cursor: \"#ffffff\",\n cursorAccent: \"#1e1e1e\",\n // Selection colors: solid colors that replace cell bg/fg when selected\n // Using Ghostty's approach: selection bg = default fg, selection fg = default bg\n selectionBackground: \"#d4d4d4\",\n selectionForeground: \"#1e1e1e\",\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#0dbc79\",\n yellow: \"#e5e510\",\n blue: \"#2472c8\",\n magenta: \"#bc3fbc\",\n cyan: \"#11a8cd\",\n white: \"#e5e5e5\",\n brightBlack: \"#666666\",\n brightRed: \"#f14c4c\",\n brightGreen: \"#23d18b\",\n brightYellow: \"#f5f543\",\n brightBlue: \"#3b8eea\",\n brightMagenta: \"#d670d6\",\n brightCyan: \"#29b8db\",\n brightWhite: \"#ffffff\"\n};\nclass $ {\n constructor(A, B = {}) {\n this.cursorVisible = !0, this.lastCursorPosition = { x: 0, y: 0 }, this.lastViewportY = 0, this.currentBuffer = null, this.currentSelectionCoords = null, this.hoveredHyperlinkId = 0, this.previousHoveredHyperlinkId = 0, this.hoveredLinkRange = null, this.previousHoveredLinkRange = null, this.canvas = A;\n const g = A.getContext(\"2d\", { alpha: !0 });\n if (!g)\n throw new Error(\"Failed to get 2D rendering context\");\n this.ctx = g, this.fontSize = B.fontSize ?? 15, this.fontFamily = B.fontFamily ?? \"monospace\", this.cursorStyle = B.cursorStyle ?? \"block\", this.cursorBlink = B.cursorBlink ?? !1, this.theme = { ...f, ...B.theme }, this.devicePixelRatio = B.devicePixelRatio ?? window.devicePixelRatio ?? 1, this.palette = [\n this.theme.black,\n this.theme.red,\n this.theme.green,\n this.theme.yellow,\n this.theme.blue,\n this.theme.magenta,\n this.theme.cyan,\n this.theme.white,\n this.theme.brightBlack,\n this.theme.brightRed,\n this.theme.brightGreen,\n this.theme.brightYellow,\n this.theme.brightBlue,\n this.theme.brightMagenta,\n this.theme.brightCyan,\n this.theme.brightWhite\n ], this.metrics = this.measureFont(), this.cursorBlink && this.startCursorBlink();\n }\n // ==========================================================================\n // Font Metrics Measurement\n // ==========================================================================\n measureFont() {\n const B = document.createElement(\"canvas\").getContext(\"2d\");\n B.font = `${this.fontSize}px ${this.fontFamily}`;\n const g = B.measureText(\"M\"), E = Math.ceil(g.width), C = g.actualBoundingBoxAscent || this.fontSize * 0.8, I = g.actualBoundingBoxDescent || this.fontSize * 0.2, D = Math.ceil(C + I) + 2, i = Math.ceil(C) + 1;\n return { width: E, height: D, baseline: i };\n }\n /**\n * Remeasure font metrics (call after font loads or changes)\n */\n remeasureFont() {\n this.metrics = this.measureFont();\n }\n // ==========================================================================\n // Color Conversion\n // ==========================================================================\n rgbToCSS(A, B, g) {\n return `rgb(${A}, ${B}, ${g})`;\n }\n // ==========================================================================\n // Canvas Sizing\n // ==========================================================================\n /**\n * Resize canvas to fit terminal dimensions\n */\n resize(A, B) {\n const g = A * this.metrics.width, E = B * this.metrics.height;\n this.canvas.style.width = `${g}px`, this.canvas.style.height = `${E}px`, this.canvas.width = g * this.devicePixelRatio, this.canvas.height = E * this.devicePixelRatio, this.ctx.scale(this.devicePixelRatio, this.devicePixelRatio), this.ctx.textBaseline = \"alphabetic\", this.ctx.textAlign = \"left\", this.ctx.fillStyle = this.theme.background, this.ctx.fillRect(0, 0, g, E);\n }\n // ==========================================================================\n // Main Rendering\n // ==========================================================================\n /**\n * Render the terminal buffer to canvas\n */\n render(A, B = !1, g = 0, E, C = 1) {\n var U;\n this.currentBuffer = A;\n const I = A.getCursor(), D = A.getDimensions(), i = E ? E.getScrollbackLength() : 0;\n (U = A.needsFullRedraw) != null && U.call(A) && (B = !0), (this.canvas.width !== D.cols * this.metrics.width * this.devicePixelRatio || this.canvas.height !== D.rows * this.metrics.height * this.devicePixelRatio) && (this.resize(D.cols, D.rows), B = !0), g !== this.lastViewportY && (B = !0, this.lastViewportY = g);\n const s = I.x !== this.lastCursorPosition.x || I.y !== this.lastCursorPosition.y;\n if (s || this.cursorBlink) {\n if (!B && !A.isRowDirty(I.y)) {\n const t = A.getLine(I.y);\n t && this.renderLine(t, I.y, D.cols);\n }\n if (s && this.lastCursorPosition.y !== I.y && !B && !A.isRowDirty(this.lastCursorPosition.y)) {\n const t = A.getLine(this.lastCursorPosition.y);\n t && this.renderLine(t, this.lastCursorPosition.y, D.cols);\n }\n }\n const N = this.selectionManager && this.selectionManager.hasSelection(), k = /* @__PURE__ */ new Set();\n if (this.currentSelectionCoords = N ? this.selectionManager.getSelectionCoords() : null, this.currentSelectionCoords) {\n const t = this.currentSelectionCoords;\n for (let c = t.startRow; c <= t.endRow; c++)\n k.add(c);\n }\n if (this.selectionManager) {\n const t = this.selectionManager.getDirtySelectionRows();\n if (t.size > 0) {\n for (const c of t)\n k.add(c);\n this.selectionManager.clearDirtySelectionRows();\n }\n }\n const M = /* @__PURE__ */ new Set(), a = this.hoveredHyperlinkId !== this.previousHoveredHyperlinkId, h = JSON.stringify(this.hoveredLinkRange) !== JSON.stringify(this.previousHoveredLinkRange);\n if (a) {\n for (let t = 0; t < D.rows; t++) {\n let c = null;\n if (g > 0)\n if (t < g && E) {\n const F = i - Math.floor(g) + t;\n c = E.getScrollbackLine(F);\n } else {\n const F = t - Math.floor(g);\n c = A.getLine(F);\n }\n else\n c = A.getLine(t);\n if (c) {\n for (const F of c)\n if (F.hyperlink_id === this.hoveredHyperlinkId || F.hyperlink_id === this.previousHoveredHyperlinkId) {\n M.add(t);\n break;\n }\n }\n }\n this.previousHoveredHyperlinkId = this.hoveredHyperlinkId;\n }\n if (h) {\n if (this.previousHoveredLinkRange)\n for (let t = this.previousHoveredLinkRange.startY; t <= this.previousHoveredLinkRange.endY; t++)\n M.add(t);\n if (this.hoveredLinkRange)\n for (let t = this.hoveredLinkRange.startY; t <= this.hoveredLinkRange.endY; t++)\n M.add(t);\n this.previousHoveredLinkRange = this.hoveredLinkRange;\n }\n const G = /* @__PURE__ */ new Set();\n for (let t = 0; t < D.rows; t++)\n (g > 0 ? !0 : B || A.isRowDirty(t) || k.has(t) || M.has(t)) && (G.add(t), t > 0 && G.add(t - 1), t < D.rows - 1 && G.add(t + 1));\n for (let t = 0; t < D.rows; t++) {\n if (!G.has(t))\n continue;\n let c = null;\n if (g > 0)\n if (t < g && E) {\n const F = i - Math.floor(g) + t;\n c = E.getScrollbackLine(F);\n } else {\n const F = g > 0 ? t - Math.floor(g) : t;\n c = A.getLine(F);\n }\n else\n c = A.getLine(t);\n c && this.renderLine(c, t, D.cols);\n }\n g === 0 && I.visible && this.cursorVisible && this.renderCursor(I.x, I.y), E && C > 0 && this.renderScrollbar(g, i, D.rows, C), this.lastCursorPosition = { x: I.x, y: I.y }, A.clearDirty();\n }\n /**\n * Render a single line using two-pass approach:\n * 1. First pass: Draw all cell backgrounds\n * 2. Second pass: Draw all cell text and decorations\n *\n * This two-pass approach is necessary for proper rendering of complex scripts\n * like Devanagari where diacritics (like vowel sign ि) can extend LEFT of the\n * base character into the previous cell's visual area. If we draw backgrounds\n * and text in a single pass (cell by cell), the background of cell N would\n * cover any left-extending portions of graphemes from cell N-1.\n */\n renderLine(A, B, g) {\n const E = B * this.metrics.height;\n this.ctx.fillStyle = this.theme.background, this.ctx.fillRect(0, E, g * this.metrics.width, this.metrics.height);\n for (let C = 0; C < A.length; C++) {\n const I = A[C];\n I.width !== 0 && this.renderCellBackground(I, C, B);\n }\n for (let C = 0; C < A.length; C++) {\n const I = A[C];\n I.width !== 0 && this.renderCellText(I, C, B);\n }\n }\n /**\n * Render a cell's background only (Pass 1 of two-pass rendering)\n * Selection highlighting is integrated here to avoid z-order issues with\n * complex glyphs (like Devanagari) that extend outside their cell bounds.\n */\n renderCellBackground(A, B, g) {\n const E = B * this.metrics.width, C = g * this.metrics.height, I = this.metrics.width * A.width;\n if (this.isInSelection(B, g)) {\n this.ctx.fillStyle = this.theme.selectionBackground, this.ctx.fillRect(E, C, I, this.metrics.height);\n return;\n }\n let i = A.bg_r, w = A.bg_g, s = A.bg_b;\n A.flags & e.INVERSE && (i = A.fg_r, w = A.fg_g, s = A.fg_b), i === 0 && w === 0 && s === 0 || (this.ctx.fillStyle = this.rgbToCSS(i, w, s), this.ctx.fillRect(E, C, I, this.metrics.height));\n }\n /**\n * Render a cell's text and decorations (Pass 2 of two-pass rendering)\n * Selection foreground color is applied here to match the selection background.\n */\n renderCellText(A, B, g) {\n var k;\n const E = B * this.metrics.width, C = g * this.metrics.height, I = this.metrics.width * A.width;\n if (A.flags & e.INVISIBLE)\n return;\n const D = this.isInSelection(B, g);\n let i = \"\";\n if (A.flags & e.ITALIC && (i += \"italic \"), A.flags & e.BOLD && (i += \"bold \"), this.ctx.font = `${i}${this.fontSize}px ${this.fontFamily}`, D)\n this.ctx.fillStyle = this.theme.selectionForeground;\n else {\n let M = A.fg_r, a = A.fg_g, h = A.fg_b;\n A.flags & e.INVERSE && (M = A.bg_r, a = A.bg_g, h = A.bg_b), this.ctx.fillStyle = this.rgbToCSS(M, a, h);\n }\n A.flags & e.FAINT && (this.ctx.globalAlpha = 0.5);\n const w = E, s = C + this.metrics.baseline;\n let N;\n if (A.grapheme_len > 0 && ((k = this.currentBuffer) != null && k.getGraphemeString) ? N = this.currentBuffer.getGraphemeString(g, B) : N = String.fromCodePoint(A.codepoint || 32), this.ctx.fillText(N, w, s), A.flags & e.FAINT && (this.ctx.globalAlpha = 1), A.flags & e.UNDERLINE) {\n const M = C + this.metrics.baseline + 2;\n this.ctx.strokeStyle = this.ctx.fillStyle, this.ctx.lineWidth = 1, this.ctx.beginPath(), this.ctx.moveTo(E, M), this.ctx.lineTo(E + I, M), this.ctx.stroke();\n }\n if (A.flags & e.STRIKETHROUGH) {\n const M = C + this.metrics.height / 2;\n this.ctx.strokeStyle = this.ctx.fillStyle, this.ctx.lineWidth = 1, this.ctx.beginPath(), this.ctx.moveTo(E, M), this.ctx.lineTo(E + I, M), this.ctx.stroke();\n }\n if (A.hyperlink_id > 0 && A.hyperlink_id === this.hoveredHyperlinkId) {\n const a = C + this.metrics.baseline + 2;\n this.ctx.strokeStyle = \"#4A90E2\", this.ctx.lineWidth = 1, this.ctx.beginPath(), this.ctx.moveTo(E, a), this.ctx.lineTo(E + I, a), this.ctx.stroke();\n }\n if (this.hoveredLinkRange) {\n const M = this.hoveredLinkRange;\n if (g === M.startY && B >= M.startX && (g < M.endY || B <= M.endX) || g > M.startY && g < M.endY || g === M.endY && B <= M.endX && (g > M.startY || B >= M.startX)) {\n const h = C + this.metrics.baseline + 2;\n this.ctx.strokeStyle = \"#4A90E2\", this.ctx.lineWidth = 1, this.ctx.beginPath(), this.ctx.moveTo(E, h), this.ctx.lineTo(E + I, h), this.ctx.stroke();\n }\n }\n }\n /**\n * Render cursor\n */\n renderCursor(A, B) {\n const g = A * this.metrics.width, E = B * this.metrics.height;\n switch (this.ctx.fillStyle = this.theme.cursor, this.cursorStyle) {\n case \"block\":\n this.ctx.fillRect(g, E, this.metrics.width, this.metrics.height);\n break;\n case \"underline\":\n const C = Math.max(2, Math.floor(this.metrics.height * 0.15));\n this.ctx.fillRect(\n g,\n E + this.metrics.height - C,\n this.metrics.width,\n C\n );\n break;\n case \"bar\":\n const I = Math.max(2, Math.floor(this.metrics.width * 0.15));\n this.ctx.fillRect(g, E, I, this.metrics.height);\n break;\n }\n }\n // ==========================================================================\n // Cursor Blinking\n // ==========================================================================\n startCursorBlink() {\n this.cursorBlinkInterval = window.setInterval(() => {\n this.cursorVisible = !this.cursorVisible;\n }, 530);\n }\n stopCursorBlink() {\n this.cursorBlinkInterval !== void 0 && (clearInterval(this.cursorBlinkInterval), this.cursorBlinkInterval = void 0), this.cursorVisible = !0;\n }\n // ==========================================================================\n // Public API\n // ==========================================================================\n /**\n * Update theme colors\n */\n setTheme(A) {\n this.theme = { ...f, ...A }, this.palette = [\n this.theme.black,\n this.theme.red,\n this.theme.green,\n this.theme.yellow,\n this.theme.blue,\n this.theme.magenta,\n this.theme.cyan,\n this.theme.white,\n this.theme.brightBlack,\n this.theme.brightRed,\n this.theme.brightGreen,\n this.theme.brightYellow,\n this.theme.brightBlue,\n this.theme.brightMagenta,\n this.theme.brightCyan,\n this.theme.brightWhite\n ];\n }\n /**\n * Update font size\n */\n setFontSize(A) {\n this.fontSize = A, this.metrics = this.measureFont();\n }\n /**\n * Update font family\n */\n setFontFamily(A) {\n this.fontFamily = A, this.metrics = this.measureFont();\n }\n /**\n * Update cursor style\n */\n setCursorStyle(A) {\n this.cursorStyle = A;\n }\n /**\n * Enable/disable cursor blinking\n */\n setCursorBlink(A) {\n A && !this.cursorBlink ? (this.cursorBlink = !0, this.startCursorBlink()) : !A && this.cursorBlink && (this.cursorBlink = !1, this.stopCursorBlink());\n }\n /**\n * Get current font metrics\n */\n /**\n * Render scrollbar (Phase 2)\n * Shows scroll position and allows click/drag interaction\n * @param opacity Opacity level (0-1) for fade in/out effect\n */\n renderScrollbar(A, B, g, E = 1) {\n const C = this.ctx, I = this.canvas.height / this.devicePixelRatio, D = this.canvas.width / this.devicePixelRatio, i = 8, w = D - i - 4, s = 4, N = I - s * 2;\n if (C.fillStyle = this.theme.background, C.fillRect(w - 2, 0, i + 6, I), E <= 0 || B === 0)\n return;\n const k = B + g, M = Math.max(20, g / k * N), a = A / B, h = s + (N - M) * (1 - a);\n C.fillStyle = `rgba(128, 128, 128, ${0.1 * E})`, C.fillRect(w, s, i, N);\n const U = A > 0 ? 0.5 : 0.3;\n C.fillStyle = `rgba(128, 128, 128, ${U * E})`, C.fillRect(w, h, i, M);\n }\n getMetrics() {\n return { ...this.metrics };\n }\n /**\n * Get canvas element (needed by SelectionManager)\n */\n getCanvas() {\n return this.canvas;\n }\n /**\n * Set selection manager (for rendering selection)\n */\n setSelectionManager(A) {\n this.selectionManager = A;\n }\n /**\n * Check if a cell at (x, y) is within the current selection.\n * Uses cached selection coordinates for performance.\n */\n isInSelection(A, B) {\n const g = this.currentSelectionCoords;\n if (!g)\n return !1;\n const { startCol: E, startRow: C, endCol: I, endRow: D } = g;\n return C === D ? B === C && A >= E && A <= I : B === C ? A >= E : B === D ? A <= I : B > C && B < D;\n }\n /**\n * Set the currently hovered hyperlink ID for rendering underlines\n */\n setHoveredHyperlinkId(A) {\n this.hoveredHyperlinkId = A;\n }\n /**\n * Set the currently hovered link range for rendering underlines (for regex-detected URLs)\n * Pass null to clear the hover state\n */\n setHoveredLinkRange(A) {\n this.hoveredLinkRange = A;\n }\n /**\n * Get character cell width (for coordinate conversion)\n */\n get charWidth() {\n return this.metrics.width;\n }\n /**\n * Get character cell height (for coordinate conversion)\n */\n get charHeight() {\n return this.metrics.height;\n }\n /**\n * Clear entire canvas\n */\n clear() {\n this.ctx.fillStyle = this.theme.background, this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n }\n /**\n * Cleanup resources\n */\n dispose() {\n this.stopCursorBlink();\n }\n}\nconst L = class Y {\n // ms between scroll steps\n constructor(A, B, g, E) {\n this.selectionStart = null, this.selectionEnd = null, this.isSelecting = !1, this.mouseDownTarget = null, this.dirtySelectionRows = /* @__PURE__ */ new Set(), this.selectionChangedEmitter = new J(), this.boundMouseUpHandler = null, this.boundContextMenuHandler = null, this.boundClickHandler = null, this.boundDocumentMouseMoveHandler = null, this.autoScrollInterval = null, this.autoScrollDirection = 0, this.terminal = A, this.renderer = B, this.wasmTerm = g, this.textarea = E, this.attachEventListeners();\n }\n // pixels from edge to trigger scroll\n /**\n * Get current viewport Y position (how many lines scrolled into history)\n */\n getViewportY() {\n const A = typeof this.terminal.getViewportY == \"function\" ? this.terminal.getViewportY() : this.terminal.viewportY || 0;\n return Math.max(0, Math.floor(A));\n }\n /**\n * Convert viewport row to absolute buffer row\n * Absolute row is an index into combined buffer: scrollback (0 to len-1) + screen (len to len+rows-1)\n */\n viewportRowToAbsolute(A) {\n const B = this.wasmTerm.getScrollbackLength(), g = this.getViewportY();\n return B + A - g;\n }\n /**\n * Convert absolute buffer row to viewport row (may be outside visible range)\n */\n absoluteRowToViewport(A) {\n const B = this.wasmTerm.getScrollbackLength(), g = this.getViewportY();\n return A - B + g;\n }\n // ==========================================================================\n // Public API\n // ==========================================================================\n /**\n * Get the selected text as a string\n */\n getSelection() {\n if (!this.selectionStart || !this.selectionEnd)\n return \"\";\n let { col: A, absoluteRow: B } = this.selectionStart, { col: g, absoluteRow: E } = this.selectionEnd;\n (B > E || B === E && A > g) && ([A, g] = [g, A], [B, E] = [E, B]);\n const C = this.wasmTerm.getScrollbackLength();\n let I = \"\";\n for (let D = B; D <= E; D++) {\n let i = null;\n if (D < C)\n i = this.wasmTerm.getScrollbackLine(D);\n else {\n const M = D - C;\n i = this.wasmTerm.getLine(M);\n }\n if (!i)\n continue;\n let w = -1;\n const s = D === B ? A : 0, N = D === E ? g : i.length - 1;\n let k = \"\";\n for (let M = s; M <= N; M++) {\n const a = i[M];\n if (a && a.codepoint !== 0) {\n let h;\n if (a.grapheme_len > 0)\n if (D < C)\n h = this.wasmTerm.getScrollbackGraphemeString(D, M);\n else {\n const G = D - C;\n h = this.wasmTerm.getGraphemeString(G, M);\n }\n else\n h = String.fromCodePoint(a.codepoint);\n k += h, h.trim() && (w = k.length);\n } else\n k += \" \";\n }\n w >= 0 ? k = k.substring(0, w) : k = \"\", I += k, D < E && (I += `\n`);\n }\n return I;\n }\n /**\n * Check if there's an active selection\n */\n hasSelection() {\n return !this.selectionStart || !this.selectionEnd ? !1 : !(this.selectionStart.col === this.selectionEnd.col && this.selectionStart.absoluteRow === this.selectionEnd.absoluteRow);\n }\n /**\n * Clear the selection\n */\n clearSelection() {\n if (!this.hasSelection())\n return;\n const A = this.normalizeSelection();\n if (A)\n for (let B = A.startRow; B <= A.endRow; B++)\n this.dirtySelectionRows.add(B);\n this.selectionStart = null, this.selectionEnd = null, this.isSelecting = !1, this.requestRender();\n }\n /**\n * Select all text in the terminal\n */\n selectAll() {\n const A = this.wasmTerm.getDimensions(), B = this.getViewportY();\n this.selectionStart = { col: 0, absoluteRow: B }, this.selectionEnd = { col: A.cols - 1, absoluteRow: B + A.rows - 1 }, this.requestRender(), this.selectionChangedEmitter.fire();\n }\n /**\n * Select text at specific column and row with length\n * xterm.js compatible API\n */\n select(A, B, g) {\n const E = this.wasmTerm.getDimensions();\n B = Math.max(0, Math.min(B, E.rows - 1)), A = Math.max(0, Math.min(A, E.cols - 1));\n let C = B, I = A + g - 1;\n for (; I >= E.cols; )\n I -= E.cols, C++;\n C = Math.min(C, E.rows - 1);\n const D = this.getViewportY();\n this.selectionStart = { col: A, absoluteRow: D + B }, this.selectionEnd = { col: I, absoluteRow: D + C }, this.requestRender(), this.selectionChangedEmitter.fire();\n }\n /**\n * Select entire lines from start to end\n * xterm.js compatible API\n */\n selectLines(A, B) {\n const g = this.wasmTerm.getDimensions();\n A = Math.max(0, Math.min(A, g.rows - 1)), B = Math.max(0, Math.min(B, g.rows - 1)), A > B && ([A, B] = [B, A]);\n const E = this.getViewportY();\n this.selectionStart = { col: 0, absoluteRow: E + A }, this.selectionEnd = { col: g.cols - 1, absoluteRow: E + B }, this.requestRender(), this.selectionChangedEmitter.fire();\n }\n /**\n * Get selection position as buffer range\n * xterm.js compatible API\n */\n getSelectionPosition() {\n const A = this.normalizeSelection();\n if (A)\n return {\n start: { x: A.startCol, y: A.startRow },\n end: { x: A.endCol, y: A.endRow }\n };\n }\n /**\n * Deselect all text\n * xterm.js compatible API\n */\n deselect() {\n this.clearSelection(), this.selectionChangedEmitter.fire();\n }\n /**\n * Focus the terminal (make it receive keyboard input)\n */\n focus() {\n const A = this.renderer.getCanvas();\n A.parentElement && A.parentElement.focus();\n }\n /**\n * Get current selection coordinates (for rendering)\n */\n getSelectionCoords() {\n return this.normalizeSelection();\n }\n /**\n * Get dirty selection rows that need redraw (for clearing old highlight)\n */\n getDirtySelectionRows() {\n return this.dirtySelectionRows;\n }\n /**\n * Clear the dirty selection rows tracking (after redraw)\n */\n clearDirtySelectionRows() {\n this.dirtySelectionRows.clear();\n }\n /**\n * Get selection change event accessor\n */\n get onSelectionChange() {\n return this.selectionChangedEmitter.event;\n }\n /**\n * Cleanup resources\n */\n dispose() {\n this.selectionChangedEmitter.dispose(), this.stopAutoScroll(), this.boundMouseUpHandler && (document.removeEventListener(\"mouseup\", this.boundMouseUpHandler), this.boundMouseUpHandler = null), this.boundDocumentMouseMoveHandler && (document.removeEventListener(\"mousemove\", this.boundDocumentMouseMoveHandler), this.boundDocumentMouseMoveHandler = null), this.boundContextMenuHandler && (this.renderer.getCanvas().removeEventListener(\"contextmenu\", this.boundContextMenuHandler), this.boundContextMenuHandler = null), this.boundClickHandler && (document.removeEventListener(\"click\", this.boundClickHandler), this.boundClickHandler = null);\n }\n // ==========================================================================\n // Private Methods\n // ==========================================================================\n /**\n * Attach mouse event listeners to canvas\n */\n attachEventListeners() {\n const A = this.renderer.getCanvas();\n A.addEventListener(\"mousedown\", (B) => {\n if (B.button === 0) {\n A.parentElement && A.parentElement.focus();\n const g = this.pixelToCell(B.offsetX, B.offsetY);\n this.hasSelection() && this.clearSelection();\n const C = this.viewportRowToAbsolute(g.row);\n this.selectionStart = { col: g.col, absoluteRow: C }, this.selectionEnd = { col: g.col, absoluteRow: C }, this.isSelecting = !0;\n }\n }), A.addEventListener(\"mousemove\", (B) => {\n if (this.isSelecting) {\n this.markCurrentSelectionDirty();\n const g = this.pixelToCell(B.offsetX, B.offsetY), E = this.viewportRowToAbsolute(g.row);\n this.selectionEnd = { col: g.col, absoluteRow: E }, this.requestRender(), this.updateAutoScroll(B.offsetY, A.clientHeight);\n }\n }), A.addEventListener(\"mouseleave\", (B) => {\n if (this.isSelecting) {\n const g = A.getBoundingClientRect();\n B.clientY < g.top ? this.startAutoScroll(-1) : B.clientY > g.bottom && this.startAutoScroll(1);\n }\n }), A.addEventListener(\"mouseenter\", () => {\n this.isSelecting && this.stopAutoScroll();\n }), this.boundDocumentMouseMoveHandler = (B) => {\n if (this.isSelecting) {\n const g = A.getBoundingClientRect(), E = Math.max(g.left, Math.min(B.clientX, g.right)), C = Math.max(g.top, Math.min(B.clientY, g.bottom)), I = E - g.left, D = C - g.top;\n if ((B.clientX < g.left || B.clientX > g.right || B.clientY < g.top || B.clientY > g.bottom) && (B.clientY < g.top ? this.startAutoScroll(-1) : B.clientY > g.bottom ? this.startAutoScroll(1) : this.stopAutoScroll(), this.autoScrollDirection === 0)) {\n this.markCurrentSelectionDirty();\n const i = this.pixelToCell(I, D), w = this.viewportRowToAbsolute(i.row);\n this.selectionEnd = { col: i.col, absoluteRow: w }, this.requestRender();\n }\n }\n }, document.addEventListener(\"mousemove\", this.boundDocumentMouseMoveHandler), document.addEventListener(\"mousedown\", (B) => {\n this.mouseDownTarget = B.target;\n }), this.boundMouseUpHandler = (B) => {\n if (this.isSelecting) {\n this.isSelecting = !1, this.stopAutoScroll();\n const g = this.getSelection();\n g && (this.copyToClipboard(g), this.selectionChangedEmitter.fire());\n }\n }, document.addEventListener(\"mouseup\", this.boundMouseUpHandler), A.addEventListener(\"dblclick\", (B) => {\n const g = this.pixelToCell(B.offsetX, B.offsetY), E = this.getWordAtCell(g.col, g.row);\n if (E) {\n const C = this.viewportRowToAbsolute(g.row);\n this.selectionStart = { col: E.startCol, absoluteRow: C }, this.selectionEnd = { col: E.endCol, absoluteRow: C }, this.requestRender();\n const I = this.getSelection();\n I && (this.copyToClipboard(I), this.selectionChangedEmitter.fire());\n }\n }), this.boundContextMenuHandler = (B) => {\n if (this.renderer.getCanvas().getBoundingClientRect(), this.textarea.style.position = \"fixed\", this.textarea.style.left = `${B.clientX}px`, this.textarea.style.top = `${B.clientY}px`, this.textarea.style.width = \"1px\", this.textarea.style.height = \"1px\", this.textarea.style.zIndex = \"1000\", this.textarea.style.opacity = \"0\", this.textarea.style.pointerEvents = \"auto\", this.hasSelection()) {\n const E = this.getSelection();\n this.textarea.value = E, this.textarea.select(), this.textarea.setSelectionRange(0, E.length);\n } else\n this.textarea.value = \"\";\n this.textarea.focus(), setTimeout(() => {\n const E = () => {\n this.textarea.style.pointerEvents = \"none\", this.textarea.style.zIndex = \"-10\", this.textarea.style.width = \"0\", this.textarea.style.height = \"0\", this.textarea.style.left = \"0\", this.textarea.style.top = \"0\", this.textarea.value = \"\", document.removeEventListener(\"click\", E), document.removeEventListener(\"contextmenu\", E), this.textarea.removeEventListener(\"blur\", E);\n };\n document.addEventListener(\"click\", E, { once: !0 }), document.addEventListener(\"contextmenu\", E, { once: !0 }), this.textarea.addEventListener(\"blur\", E, { once: !0 });\n }, 10);\n }, A.addEventListener(\"contextmenu\", this.boundContextMenuHandler), this.boundClickHandler = (B) => {\n if (this.isSelecting || this.mouseDownTarget && A.contains(this.mouseDownTarget))\n return;\n const E = B.target;\n A.contains(E) || this.hasSelection() && this.clearSelection();\n }, document.addEventListener(\"click\", this.boundClickHandler);\n }\n /**\n * Mark current selection rows as dirty for redraw\n */\n markCurrentSelectionDirty() {\n const A = this.normalizeSelection();\n if (A)\n for (let B = A.startRow; B <= A.endRow; B++)\n this.dirtySelectionRows.add(B);\n }\n /**\n * Update auto-scroll based on mouse Y position within canvas\n */\n updateAutoScroll(A, B) {\n const g = Y.AUTO_SCROLL_EDGE_SIZE;\n A < g ? this.startAutoScroll(-1) : A > B - g ? this.startAutoScroll(1) : this.stopAutoScroll();\n }\n /**\n * Start auto-scrolling in the given direction\n */\n startAutoScroll(A) {\n this.autoScrollInterval !== null && this.autoScrollDirection === A || (this.stopAutoScroll(), this.autoScrollDirection = A, this.autoScrollInterval = setInterval(() => {\n if (!this.isSelecting) {\n this.stopAutoScroll();\n return;\n }\n const B = Y.AUTO_SCROLL_SPEED * this.autoScrollDirection;\n if (this.terminal.scrollLines(B), this.selectionEnd) {\n const g = this.wasmTerm.getDimensions();\n if (this.autoScrollDirection < 0) {\n const E = this.viewportRowToAbsolute(0);\n E < this.selectionEnd.absoluteRow && (this.selectionEnd = { col: 0, absoluteRow: E });\n } else {\n const E = this.viewportRowToAbsolute(g.rows - 1);\n E > this.selectionEnd.absoluteRow && (this.selectionEnd = { col: g.cols - 1, absoluteRow: E });\n }\n }\n this.requestRender();\n }, Y.AUTO_SCROLL_INTERVAL));\n }\n /**\n * Stop auto-scrolling\n */\n stopAutoScroll() {\n this.autoScrollInterval !== null && (clearInterval(this.autoScrollInterval), this.autoScrollInterval = null), this.autoScrollDirection = 0;\n }\n /**\n * Convert pixel coordinates to terminal cell coordinates\n */\n pixelToCell(A, B) {\n const g = this.renderer.getMetrics(), E = Math.floor(A / g.width), C = Math.floor(B / g.height);\n return {\n col: Math.max(0, Math.min(E, this.terminal.cols - 1)),\n row: Math.max(0, Math.min(C, this.terminal.rows - 1))\n };\n }\n /**\n * Normalize selection coordinates (handle backward selection)\n * Returns coordinates in VIEWPORT space for rendering, clamped to visible area\n */\n normalizeSelection() {\n if (!this.selectionStart || !this.selectionEnd)\n return null;\n let { col: A, absoluteRow: B } = this.selectionStart, { col: g, absoluteRow: E } = this.selectionEnd;\n (B > E || B === E && A > g) && ([A, g] = [g, A], [B, E] = [E, B]);\n let C = this.absoluteRowToViewport(B), I = this.absoluteRowToViewport(E);\n const D = this.wasmTerm.getDimensions(), i = D.rows - 1;\n return I < 0 || C > i ? null : (C < 0 && (C = 0, A = 0), I > i && (I = i, g = D.cols - 1), { startCol: A, startRow: C, endCol: g, endRow: I });\n }\n /**\n * Get word boundaries at a cell position\n */\n getWordAtCell(A, B) {\n const g = this.wasmTerm.getLine(B);\n if (!g)\n return null;\n const E = (D) => {\n if (!D || D.codepoint === 0)\n return !1;\n const i = String.fromCodePoint(D.codepoint);\n return /[\\w-]/.test(i);\n };\n if (!E(g[A]))\n return null;\n let C = A;\n for (; C > 0 && E(g[C - 1]); )\n C--;\n let I = A;\n for (; I < g.length - 1 && E(g[I + 1]); )\n I++;\n return { startCol: C, endCol: I };\n }\n /**\n * Copy text to clipboard\n */\n async copyToClipboard(A) {\n if (navigator.clipboard && navigator.clipboard.writeText)\n try {\n await navigator.clipboard.writeText(A);\n return;\n } catch {\n }\n const B = document.activeElement;\n try {\n const g = this.textarea;\n g.value = A, g.style.position = \"fixed\", g.style.left = \"-9999px\", g.style.top = \"0\", g.style.width = \"1px\", g.style.height = \"1px\", g.style.opacity = \"0\", g.focus(), g.select(), g.setSelectionRange(0, A.length);\n const E = document.execCommand(\"copy\");\n B && B.focus(), E || console.error(\"❌ execCommand copy failed\");\n } catch (g) {\n console.error(\"❌ Fallback copy failed:\", g), B && B.focus();\n }\n }\n /**\n * Request a render update (triggers selection overlay redraw)\n */\n requestRender() {\n }\n};\nL.AUTO_SCROLL_EDGE_SIZE = 30;\nL.AUTO_SCROLL_SPEED = 3;\nL.AUTO_SCROLL_INTERVAL = 50;\nlet AA = L;\nclass IA {\n // 200ms fade animation\n constructor(A = {}) {\n this.unicode = {\n get activeVersion() {\n return \"15.1\";\n }\n }, this.dataEmitter = new J(), this.resizeEmitter = new J(), this.bellEmitter = new J(), this.selectionChangeEmitter = new J(), this.keyEmitter = new J(), this.titleChangeEmitter = new J(), this.scrollEmitter = new J(), this.renderEmitter = new J(), this.cursorMoveEmitter = new J(), this.onData = this.dataEmitter.event, this.onResize = this.resizeEmitter.event, this.onBell = this.bellEmitter.event, this.onSelectionChange = this.selectionChangeEmitter.event, this.onKey = this.keyEmitter.event, this.onTitleChange = this.titleChangeEmitter.event, this.onScroll = this.scrollEmitter.event, this.onRender = this.renderEmitter.event, this.onCursorMove = this.cursorMoveEmitter.event, this.isOpen = !1, this.isDisposed = !1, this.addons = [], this.currentTitle = \"\", this.viewportY = 0, this.targetViewportY = 0, this.lastCursorY = 0, this.isDraggingScrollbar = !1, this.scrollbarDragStart = null, this.scrollbarDragStartViewportY = 0, this.scrollbarVisible = !1, this.scrollbarOpacity = 0, this.SCROLLBAR_HIDE_DELAY_MS = 1500, this.SCROLLBAR_FADE_DURATION_MS = 200, this.animateScroll = () => {\n if (!this.wasmTerm || this.scrollAnimationStartTime === void 0)\n return;\n const g = this.options.smoothScrollDuration ?? 100, E = this.targetViewportY - this.viewportY;\n if (Math.abs(E) < 0.01) {\n this.viewportY = this.targetViewportY, this.scrollEmitter.fire(Math.floor(this.viewportY)), this.getScrollbackLength() > 0 && this.showScrollbar(), this.scrollAnimationFrame = void 0, this.scrollAnimationStartTime = void 0, this.scrollAnimationStartY = void 0;\n return;\n }\n const D = 1 - (1 / (g / 1e3 * 60)) ** 2;\n this.viewportY += E * D;\n const i = Math.floor(this.viewportY);\n this.scrollEmitter.fire(i), this.getScrollbackLength() > 0 && this.showScrollbar(), this.scrollAnimationFrame = requestAnimationFrame(this.animateScroll);\n }, this.handleMouseMove = (g) => {\n if (!(!this.canvas || !this.renderer || !this.wasmTerm)) {\n if (this.isDraggingScrollbar) {\n this.processScrollbarDrag(g);\n return;\n }\n if (this.linkDetector) {\n if (this.mouseMoveThrottleTimeout) {\n this.pendingMouseMove = g;\n return;\n }\n this.processMouseMove(g), this.mouseMoveThrottleTimeout = window.setTimeout(() => {\n if (this.mouseMoveThrottleTimeout = void 0, this.pendingMouseMove) {\n const E = this.pendingMouseMove;\n this.pendingMouseMove = void 0, this.processMouseMove(E);\n }\n }, 16);\n }\n }\n }, this.handleMouseLeave = () => {\n var g, E;\n this.renderer && this.wasmTerm && ((this.renderer.hoveredHyperlinkId || 0) > 0 && this.renderer.setHoveredHyperlinkId(0), this.renderer.setHoveredLinkRange(null)), this.currentHoveredLink && ((E = (g = this.currentHoveredLink).hover) == null || E.call(g, !1), this.currentHoveredLink = void 0, this.element && (this.element.style.cursor = \"text\"));\n }, this.handleClick = async (g) => {\n if (!this.canvas || !this.renderer || !this.linkDetector || !this.wasmTerm)\n return;\n const E = this.canvas.getBoundingClientRect(), C = Math.floor((g.clientX - E.left) / this.renderer.charWidth), D = Math.floor((g.clientY - E.top) / this.renderer.charHeight), i = this.wasmTerm.getScrollbackLength();\n let w;\n const s = this.getViewportY(), N = Math.max(0, Math.floor(s));\n if (N > 0)\n if (D < N)\n w = i - N + D;\n else {\n const M = D - N;\n w = i + M;\n }\n else\n w = i + D;\n const k = await this.linkDetector.getLinkAt(C, w);\n k && (k.activate(g), (g.ctrlKey || g.metaKey) && g.preventDefault());\n }, this.handleWheel = (g) => {\n var C, I, D;\n if (g.preventDefault(), g.stopPropagation(), this.customWheelEventHandler && this.customWheelEventHandler(g))\n return;\n if (((C = this.wasmTerm) == null ? void 0 : C.isAlternateScreen()) ?? !1) {\n const i = g.deltaY > 0 ? \"down\" : \"up\", w = Math.min(Math.abs(Math.round(g.deltaY / 33)), 5);\n for (let s = 0; s < w; s++)\n i === \"up\" ? this.dataEmitter.fire(\"\\x1B[A\") : this.dataEmitter.fire(\"\\x1B[B\");\n } else {\n let i;\n if (g.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n const w = ((D = (I = this.renderer) == null ? void 0 : I.getMetrics()) == null ? void 0 : D.height) ?? 20;\n i = g.deltaY / w;\n } else\n g.deltaMode === WheelEvent.DOM_DELTA_LINE ? i = g.deltaY : g.deltaMode === WheelEvent.DOM_DELTA_PAGE ? i = g.deltaY * this.rows : i = g.deltaY / 33;\n if (i !== 0) {\n const w = this.viewportY - i;\n this.smoothScrollTo(w);\n }\n }\n }, this.handleMouseDown = (g) => {\n if (!this.canvas || !this.renderer || !this.wasmTerm)\n return;\n const E = this.wasmTerm.getScrollbackLength();\n if (E === 0)\n return;\n const C = this.canvas.getBoundingClientRect(), I = g.clientX - C.left, D = g.clientY - C.top, i = C.width, w = C.height, s = 8, N = i - s - 4, k = 4;\n if (I >= N && I <= N + s) {\n g.preventDefault(), g.stopPropagation(), g.stopImmediatePropagation();\n const M = w - k * 2, a = this.rows, h = E + a, G = Math.max(20, a / h * M), U = this.viewportY / E, t = k + (M - G) * (1 - U);\n if (D >= t && D <= t + G)\n this.isDraggingScrollbar = !0, this.scrollbarDragStart = D, this.scrollbarDragStartViewportY = this.viewportY, this.canvas && (this.canvas.style.userSelect = \"none\", this.canvas.style.webkitUserSelect = \"none\");\n else {\n const F = 1 - (D - k) / M, S = Math.round(F * E);\n this.scrollToLine(Math.max(0, Math.min(E, S)));\n }\n }\n }, this.handleMouseUp = () => {\n this.isDraggingScrollbar && (this.isDraggingScrollbar = !1, this.scrollbarDragStart = null, this.canvas && (this.canvas.style.userSelect = \"\", this.canvas.style.webkitUserSelect = \"\"), this.scrollbarVisible && this.getScrollbackLength() > 0 && this.showScrollbar());\n }, this.ghostty = A.ghostty ?? CA();\n const B = {\n cols: A.cols ?? 80,\n rows: A.rows ?? 24,\n cursorBlink: A.cursorBlink ?? !1,\n cursorStyle: A.cursorStyle ?? \"block\",\n theme: A.theme ?? {},\n scrollback: A.scrollback ?? 1e4,\n fontSize: A.fontSize ?? 15,\n fontFamily: A.fontFamily ?? \"monospace\",\n allowTransparency: A.allowTransparency ?? !1,\n convertEol: A.convertEol ?? !1,\n disableStdin: A.disableStdin ?? !1,\n smoothScrollDuration: A.smoothScrollDuration ?? 100\n // Default: 100ms smooth scroll\n };\n this.options = new Proxy(B, {\n set: (g, E, C) => {\n const I = g[E];\n return g[E] = C, this.isOpen && this.handleOptionChange(E, C, I), !0;\n }\n }), this.cols = this.options.cols, this.rows = this.options.rows, this.buffer = new Z(this);\n }\n // ==========================================================================\n // Option Change Handling (for mutable options)\n // ==========================================================================\n /**\n * Handle runtime option changes (called when options are modified after terminal is open)\n * This enables xterm.js compatibility where options can be changed at runtime\n */\n handleOptionChange(A, B, g) {\n if (B !== g)\n switch (A) {\n case \"disableStdin\":\n break;\n case \"cursorBlink\":\n case \"cursorStyle\":\n this.renderer && (this.renderer.setCursorStyle(this.options.cursorStyle), this.renderer.setCursorBlink(this.options.cursorBlink));\n break;\n case \"theme\":\n this.renderer && console.warn(\"ghostty-web: theme changes after open() are not yet fully supported\");\n break;\n case \"fontSize\":\n this.renderer && (this.renderer.setFontSize(this.options.fontSize), this.handleFontChange());\n break;\n case \"fontFamily\":\n this.renderer && (this.renderer.setFontFamily(this.options.fontFamily), this.handleFontChange());\n break;\n case \"cols\":\n case \"rows\":\n this.resize(this.options.cols, this.options.rows);\n break;\n }\n }\n /**\n * Handle font changes (fontSize or fontFamily)\n * Updates canvas size to match new font metrics and forces a full re-render\n */\n handleFontChange() {\n if (!this.renderer || !this.wasmTerm || !this.canvas)\n return;\n this.selectionManager && this.selectionManager.clearSelection(), this.renderer.resize(this.cols, this.rows);\n const A = this.renderer.getMetrics();\n this.canvas.width = A.width * this.cols, this.canvas.height = A.height * this.rows, this.canvas.style.width = `${A.width * this.cols}px`, this.canvas.style.height = `${A.height * this.rows}px`, this.renderer.render(this.wasmTerm, !0, this.viewportY, this);\n }\n /**\n * Parse a CSS color string to 0xRRGGBB format.\n * Returns 0 if the color is undefined or invalid.\n */\n parseColorToHex(A) {\n if (!A)\n return 0;\n if (A.startsWith(\"#\")) {\n let g = A.slice(1);\n g.length === 3 && (g = g[0] + g[0] + g[1] + g[1] + g[2] + g[2]);\n const E = Number.parseInt(g, 16);\n return Number.isNaN(E) ? 0 : E;\n }\n const B = A.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (B) {\n const g = Number.parseInt(B[1], 10), E = Number.parseInt(B[2], 10), C = Number.parseInt(B[3], 10);\n return g << 16 | E << 8 | C;\n }\n return 0;\n }\n /**\n * Convert terminal options to WASM terminal config.\n */\n buildWasmConfig() {\n const A = this.options.theme, B = this.options.scrollback;\n if (!A && B === 1e4)\n return;\n const g = [\n this.parseColorToHex(A == null ? void 0 : A.black),\n this.parseColorToHex(A == null ? void 0 : A.red),\n this.parseColorToHex(A == null ? void 0 : A.green),\n this.parseColorToHex(A == null ? void 0 : A.yellow),\n this.parseColorToHex(A == null ? void 0 : A.blue),\n this.parseColorToHex(A == null ? void 0 : A.magenta),\n this.parseColorToHex(A == null ? void 0 : A.cyan),\n this.parseColorToHex(A == null ? void 0 : A.white),\n this.parseColorToHex(A == null ? void 0 : A.brightBlack),\n this.parseColorToHex(A == null ? void 0 : A.brightRed),\n this.parseColorToHex(A == null ? void 0 : A.brightGreen),\n this.parseColorToHex(A == null ? void 0 : A.brightYellow),\n this.parseColorToHex(A == null ? void 0 : A.brightBlue),\n this.parseColorToHex(A == null ? void 0 : A.brightMagenta),\n this.parseColorToHex(A == null ? void 0 : A.brightCyan),\n this.parseColorToHex(A == null ? void 0 : A.brightWhite)\n ];\n return {\n scrollbackLimit: B,\n fgColor: this.parseColorToHex(A == null ? void 0 : A.foreground),\n bgColor: this.parseColorToHex(A == null ? void 0 : A.background),\n cursorColor: this.parseColorToHex(A == null ? void 0 : A.cursor),\n palette: g\n };\n }\n // ==========================================================================\n // Lifecycle Methods\n // ==========================================================================\n /**\n * Open terminal in a parent element\n *\n * Initializes all components and starts rendering.\n * Requires a pre-loaded Ghostty instance passed to the constructor.\n */\n open(A) {\n if (this.isOpen)\n throw new Error(\"Terminal is already open\");\n if (this.isDisposed)\n throw new Error(\"Terminal has been disposed\");\n this.element = A, this.isOpen = !0;\n try {\n A.hasAttribute(\"tabindex\") || A.setAttribute(\"tabindex\", \"0\"), A.setAttribute(\"contenteditable\", \"true\"), A.addEventListener(\"beforeinput\", (E) => E.preventDefault()), A.setAttribute(\"role\", \"textbox\"), A.setAttribute(\"aria-label\", \"Terminal input\"), A.setAttribute(\"aria-multiline\", \"true\");\n const B = this.buildWasmConfig();\n this.wasmTerm = this.ghostty.createTerminal(this.cols, this.rows, B), this.canvas = document.createElement(\"canvas\"), this.canvas.style.display = \"block\", A.appendChild(this.canvas), this.textarea = document.createElement(\"textarea\"), this.textarea.setAttribute(\"autocorrect\", \"off\"), this.textarea.setAttribute(\"autocapitalize\", \"off\"), this.textarea.setAttribute(\"spellcheck\", \"false\"), this.textarea.setAttribute(\"tabindex\", \"0\"), this.textarea.setAttribute(\"aria-label\", \"Terminal input\"), this.textarea.style.position = \"absolute\", this.textarea.style.left = \"0\", this.textarea.style.top = \"0\", this.textarea.style.width = \"1px\", this.textarea.style.height = \"1px\", this.textarea.style.padding = \"0\", this.textarea.style.border = \"none\", this.textarea.style.margin = \"0\", this.textarea.style.opacity = \"0\", this.textarea.style.clipPath = \"inset(50%)\", this.textarea.style.overflow = \"hidden\", this.textarea.style.whiteSpace = \"nowrap\", this.textarea.style.resize = \"none\", A.appendChild(this.textarea);\n const g = this.textarea;\n this.canvas.addEventListener(\"mousedown\", (E) => {\n E.preventDefault(), g.focus();\n }), this.canvas.addEventListener(\"touchend\", (E) => {\n E.preventDefault(), g.focus();\n }), this.renderer = new $(this.canvas, {\n fontSize: this.options.fontSize,\n fontFamily: this.options.fontFamily,\n cursorStyle: this.options.cursorStyle,\n cursorBlink: this.options.cursorBlink,\n theme: this.options.theme\n }), this.renderer.resize(this.cols, this.rows), this.inputHandler = new P(\n this.ghostty,\n A,\n (E) => {\n this.options.disableStdin || this.dataEmitter.fire(E);\n },\n () => {\n this.bellEmitter.fire();\n },\n (E) => {\n this.keyEmitter.fire(E);\n },\n this.customKeyEventHandler,\n (E) => {\n var C;\n return ((C = this.wasmTerm) == null ? void 0 : C.getMode(E, !1)) ?? !1;\n }\n ), this.selectionManager = new AA(\n this,\n this.renderer,\n this.wasmTerm,\n this.textarea\n ), this.renderer.setSelectionManager(this.selectionManager), this.selectionManager.onSelectionChange(() => {\n this.selectionChangeEmitter.fire();\n }), this.textarea.addEventListener(\"paste\", (E) => {\n var I;\n E.preventDefault(), E.stopPropagation();\n const C = (I = E.clipboardData) == null ? void 0 : I.getData(\"text\");\n C && this.paste(C);\n }), this.linkDetector = new v(this), this.linkDetector.registerProvider(new X(this)), this.linkDetector.registerProvider(new _(this)), A.addEventListener(\"mousedown\", this.handleMouseDown, { capture: !0 }), A.addEventListener(\"mousemove\", this.handleMouseMove), A.addEventListener(\"mouseleave\", this.handleMouseLeave), A.addEventListener(\"click\", this.handleClick), document.addEventListener(\"mouseup\", this.handleMouseUp), A.addEventListener(\"wheel\", this.handleWheel, { passive: !1, capture: !0 }), this.renderer.render(this.wasmTerm, !0, this.viewportY, this, this.scrollbarOpacity), this.startRenderLoop(), this.focus();\n } catch (B) {\n throw this.isOpen = !1, this.cleanupComponents(), new Error(`Failed to open terminal: ${B}`);\n }\n }\n /**\n * Write data to terminal\n */\n write(A, B) {\n this.assertOpen(), this.options.convertEol && typeof A == \"string\" && (A = A.replace(/\\n/g, `\\r\n`)), this.writeInternal(A, B);\n }\n /**\n * Internal write implementation (extracted from write())\n */\n writeInternal(A, B) {\n var g;\n this.wasmTerm.write(A), this.processTerminalResponses(), typeof A == \"string\" && A.includes(\"\\x07\") ? this.bellEmitter.fire() : A instanceof Uint8Array && A.includes(7) && this.bellEmitter.fire(), (g = this.linkDetector) == null || g.invalidateCache(), this.viewportY !== 0 && this.scrollToBottom(), typeof A == \"string\" && A.includes(\"\\x1B]\") && this.checkForTitleChange(A), B && requestAnimationFrame(B);\n }\n /**\n * Write data with newline\n */\n writeln(A, B) {\n if (typeof A == \"string\")\n this.write(A + `\\r\n`, B);\n else {\n const g = new Uint8Array(A.length + 2);\n g.set(A), g[A.length] = 13, g[A.length + 1] = 10, this.write(g, B);\n }\n }\n /**\n * Paste text into terminal (triggers bracketed paste if supported)\n */\n paste(A) {\n this.assertOpen(), !this.options.disableStdin && (this.wasmTerm.hasBracketedPaste() ? this.dataEmitter.fire(\"\\x1B[200~\" + A + \"\\x1B[201~\") : this.dataEmitter.fire(A));\n }\n /**\n * Input data into terminal (as if typed by user)\n *\n * @param data - Data to input\n * @param wasUserInput - If true, triggers onData event (default: false for compat with some apps)\n */\n input(A, B = !1) {\n this.assertOpen(), !this.options.disableStdin && (B ? this.dataEmitter.fire(A) : this.write(A));\n }\n /**\n * Resize terminal\n */\n resize(A, B) {\n if (this.assertOpen(), A === this.cols && B === this.rows)\n return;\n this.cols = A, this.rows = B, this.wasmTerm.resize(A, B), this.renderer.resize(A, B);\n const g = this.renderer.getMetrics();\n this.canvas.width = g.width * A, this.canvas.height = g.height * B, this.canvas.style.width = `${g.width * A}px`, this.canvas.style.height = `${g.height * B}px`, this.resizeEmitter.fire({ cols: A, rows: B }), this.renderer.render(this.wasmTerm, !0, this.viewportY, this);\n }\n /**\n * Clear terminal screen\n */\n clear() {\n this.assertOpen(), this.wasmTerm.write(\"\\x1B[2J\\x1B[H\");\n }\n /**\n * Reset terminal state\n */\n reset() {\n this.assertOpen(), this.wasmTerm && this.wasmTerm.free();\n const A = this.buildWasmConfig();\n this.wasmTerm = this.ghostty.createTerminal(this.cols, this.rows, A), this.renderer.clear(), this.currentTitle = \"\";\n }\n /**\n * Focus terminal input\n */\n focus() {\n this.isOpen && this.element && (this.element.focus(), setTimeout(() => {\n var A;\n (A = this.element) == null || A.focus();\n }, 0));\n }\n /**\n * Blur terminal (remove focus)\n */\n blur() {\n this.isOpen && this.element && this.element.blur();\n }\n /**\n * Load an addon\n */\n loadAddon(A) {\n A.activate(this), this.addons.push(A);\n }\n // ==========================================================================\n // Selection API (xterm.js compatible)\n // ==========================================================================\n /**\n * Get the selected text as a string\n */\n getSelection() {\n var A;\n return ((A = this.selectionManager) == null ? void 0 : A.getSelection()) || \"\";\n }\n /**\n * Check if there's an active selection\n */\n hasSelection() {\n var A;\n return ((A = this.selectionManager) == null ? void 0 : A.hasSelection()) || !1;\n }\n /**\n * Clear the current selection\n */\n clearSelection() {\n var A;\n (A = this.selectionManager) == null || A.clearSelection();\n }\n /**\n * Select all text in the terminal\n */\n selectAll() {\n var A;\n (A = this.selectionManager) == null || A.selectAll();\n }\n /**\n * Select text at specific column and row with length\n */\n select(A, B, g) {\n var E;\n (E = this.selectionManager) == null || E.select(A, B, g);\n }\n /**\n * Select entire lines from start to end\n */\n selectLines(A, B) {\n var g;\n (g = this.selectionManager) == null || g.selectLines(A, B);\n }\n /**\n * Get selection position as buffer range\n */\n /**\n * Get the current viewport Y position.\n *\n * This is the number of lines scrolled back from the bottom of the\n * scrollback buffer. It may be fractional during smooth scrolling.\n */\n getViewportY() {\n return this.viewportY;\n }\n getSelectionPosition() {\n var A;\n return (A = this.selectionManager) == null ? void 0 : A.getSelectionPosition();\n }\n // ==========================================================================\n // Phase 1: Custom Event Handlers\n // ==========================================================================\n /**\n * Attach a custom keyboard event handler\n * Returns true to prevent default handling\n */\n attachCustomKeyEventHandler(A) {\n this.customKeyEventHandler = A, this.inputHandler && this.inputHandler.setCustomKeyEventHandler(A);\n }\n /**\n * Attach a custom wheel event handler (Phase 2)\n * Returns true to prevent default handling\n */\n attachCustomWheelEventHandler(A) {\n this.customWheelEventHandler = A;\n }\n // ==========================================================================\n // Link Detection Methods\n // ==========================================================================\n /**\n * Register a custom link provider\n * Multiple providers can be registered to detect different types of links\n *\n * @example\n * ```typescript\n * term.registerLinkProvider({\n * provideLinks(y, callback) {\n * // Detect URLs, file paths, etc.\n * callback(detectedLinks);\n * }\n * });\n * ```\n */\n registerLinkProvider(A) {\n if (!this.linkDetector)\n throw new Error(\"Terminal must be opened before registering link providers\");\n this.linkDetector.registerProvider(A);\n }\n // ==========================================================================\n // Phase 2: Scrolling Methods\n // ==========================================================================\n /**\n * Scroll viewport by a number of lines\n * @param amount Number of lines to scroll (positive = down, negative = up)\n */\n scrollLines(A) {\n if (!this.wasmTerm)\n throw new Error(\"Terminal not open\");\n const B = this.getScrollbackLength(), E = Math.max(0, Math.min(B, this.viewportY - A));\n E !== this.viewportY && (this.viewportY = E, this.scrollEmitter.fire(this.viewportY), B > 0 && this.showScrollbar());\n }\n /**\n * Scroll viewport by a number of pages\n * @param amount Number of pages to scroll (positive = down, negative = up)\n */\n scrollPages(A) {\n this.scrollLines(A * this.rows);\n }\n /**\n * Scroll viewport to the top of the scrollback buffer\n */\n scrollToTop() {\n const A = this.getScrollbackLength();\n A > 0 && this.viewportY !== A && (this.viewportY = A, this.scrollEmitter.fire(this.viewportY), this.showScrollbar());\n }\n /**\n * Scroll viewport to the bottom (current output)\n */\n scrollToBottom() {\n this.viewportY !== 0 && (this.viewportY = 0, this.scrollEmitter.fire(this.viewportY), this.getScrollbackLength() > 0 && this.showScrollbar());\n }\n /**\n * Scroll viewport to a specific line in the buffer\n * @param line Line number (0 = top of scrollback, scrollbackLength = bottom)\n */\n scrollToLine(A) {\n const B = this.getScrollbackLength(), g = Math.max(0, Math.min(B, A));\n g !== this.viewportY && (this.viewportY = g, this.scrollEmitter.fire(this.viewportY), B > 0 && this.showScrollbar());\n }\n /**\n * Smoothly scroll to a target viewport position\n * @param targetY Target viewport Y position (in lines, can be fractional)\n */\n smoothScrollTo(A) {\n if (!this.wasmTerm)\n return;\n const B = this.getScrollbackLength(), E = Math.max(0, Math.min(B, A));\n if ((this.options.smoothScrollDuration ?? 100) === 0) {\n this.viewportY = E, this.targetViewportY = E, this.scrollEmitter.fire(Math.floor(this.viewportY)), B > 0 && this.showScrollbar();\n return;\n }\n this.targetViewportY = E, !this.scrollAnimationFrame && (this.scrollAnimationStartTime = Date.now(), this.scrollAnimationStartY = this.viewportY, this.animateScroll());\n }\n // ==========================================================================\n // Lifecycle\n // ==========================================================================\n /**\n * Dispose terminal and clean up resources\n */\n dispose() {\n if (!this.isDisposed) {\n this.isDisposed = !0, this.isOpen = !1, this.animationFrameId && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = void 0), this.scrollAnimationFrame && (cancelAnimationFrame(this.scrollAnimationFrame), this.scrollAnimationFrame = void 0), this.mouseMoveThrottleTimeout && (clearTimeout(this.mouseMoveThrottleTimeout), this.mouseMoveThrottleTimeout = void 0), this.pendingMouseMove = void 0;\n for (const A of this.addons)\n A.dispose();\n this.addons = [], this.cleanupComponents(), this.dataEmitter.dispose(), this.resizeEmitter.dispose(), this.bellEmitter.dispose(), this.selectionChangeEmitter.dispose(), this.keyEmitter.dispose(), this.titleChangeEmitter.dispose(), this.scrollEmitter.dispose(), this.renderEmitter.dispose(), this.cursorMoveEmitter.dispose();\n }\n }\n // ==========================================================================\n // Private Methods\n // ==========================================================================\n /**\n * Start the render loop\n */\n startRenderLoop() {\n const A = () => {\n if (!this.isDisposed && this.isOpen) {\n this.renderer.render(this.wasmTerm, !1, this.viewportY, this, this.scrollbarOpacity);\n const B = this.wasmTerm.getCursor();\n B.y !== this.lastCursorY && (this.lastCursorY = B.y, this.cursorMoveEmitter.fire()), this.animationFrameId = requestAnimationFrame(A);\n }\n };\n A();\n }\n /**\n * Get a line from native WASM scrollback buffer\n * Implements IScrollbackProvider\n */\n getScrollbackLine(A) {\n return this.wasmTerm ? this.wasmTerm.getScrollbackLine(A) : null;\n }\n /**\n * Get scrollback length from native WASM\n * Implements IScrollbackProvider\n */\n getScrollbackLength() {\n return this.wasmTerm ? this.wasmTerm.getScrollbackLength() : 0;\n }\n /**\n * Clean up components (called on dispose or error)\n */\n cleanupComponents() {\n this.selectionManager && (this.selectionManager.dispose(), this.selectionManager = void 0), this.inputHandler && (this.inputHandler.dispose(), this.inputHandler = void 0), this.renderer && (this.renderer.dispose(), this.renderer = void 0), this.canvas && this.canvas.parentNode && (this.canvas.parentNode.removeChild(this.canvas), this.canvas = void 0), this.textarea && this.textarea.parentNode && (this.textarea.parentNode.removeChild(this.textarea), this.textarea = void 0), this.element && (this.element.removeEventListener(\"wheel\", this.handleWheel), this.element.removeEventListener(\"mousedown\", this.handleMouseDown, { capture: !0 }), this.element.removeEventListener(\"mousemove\", this.handleMouseMove), this.element.removeEventListener(\"mouseleave\", this.handleMouseLeave), this.element.removeEventListener(\"click\", this.handleClick), this.element.removeAttribute(\"contenteditable\"), this.element.removeAttribute(\"role\"), this.element.removeAttribute(\"aria-label\"), this.element.removeAttribute(\"aria-multiline\")), this.isOpen && typeof document < \"u\" && document.removeEventListener(\"mouseup\", this.handleMouseUp), this.scrollbarHideTimeout && (window.clearTimeout(this.scrollbarHideTimeout), this.scrollbarHideTimeout = void 0), this.linkDetector && (this.linkDetector.dispose(), this.linkDetector = void 0), this.wasmTerm && (this.wasmTerm.free(), this.wasmTerm = void 0), this.ghostty = void 0, this.element = void 0, this.textarea = void 0;\n }\n /**\n * Assert terminal is open (throw if not)\n */\n assertOpen() {\n if (this.isDisposed)\n throw new Error(\"Terminal has been disposed\");\n if (!this.isOpen)\n throw new Error(\"Terminal must be opened before use. Call terminal.open(parent) first.\");\n }\n /**\n * Process mouse move for link detection (internal, called by throttled handler)\n */\n processMouseMove(A) {\n if (!this.canvas || !this.renderer || !this.linkDetector || !this.wasmTerm)\n return;\n const B = this.canvas.getBoundingClientRect(), g = Math.floor((A.clientX - B.left) / this.renderer.charWidth), C = Math.floor((A.clientY - B.top) / this.renderer.charHeight);\n let I = 0, D = null;\n const i = this.getViewportY(), w = Math.max(0, Math.floor(i));\n if (w > 0) {\n const h = this.wasmTerm.getScrollbackLength();\n if (C < w) {\n const G = h - w + C;\n D = this.wasmTerm.getScrollbackLine(G);\n } else {\n const G = C - w;\n D = this.wasmTerm.getLine(G);\n }\n } else\n D = this.wasmTerm.getLine(C);\n D && g >= 0 && g < D.length && (I = D[g].hyperlink_id);\n const s = this.renderer.hoveredHyperlinkId || 0;\n I !== s && this.renderer.setHoveredHyperlinkId(I);\n const N = this.wasmTerm.getScrollbackLength();\n let k;\n const M = this.getViewportY(), a = Math.max(0, Math.floor(M));\n if (a > 0)\n if (C < a)\n k = N - a + C;\n else {\n const h = C - a;\n k = N + h;\n }\n else\n k = N + C;\n this.linkDetector.getLinkAt(g, k).then((h) => {\n var G, U, t, c;\n if (h !== this.currentHoveredLink && ((U = (G = this.currentHoveredLink) == null ? void 0 : G.hover) == null || U.call(G, !1), this.currentHoveredLink = h, (t = h == null ? void 0 : h.hover) == null || t.call(h, !0), this.element && (this.element.style.cursor = h ? \"pointer\" : \"text\"), this.renderer))\n if (h) {\n const F = ((c = this.wasmTerm) == null ? void 0 : c.getScrollbackLength()) || 0, S = this.getViewportY(), x = Math.max(0, Math.floor(S)), p = h.range.start.y - F + x, T = h.range.end.y - F + x;\n p < this.rows && T >= 0 ? this.renderer.setHoveredLinkRange({\n startX: h.range.start.x,\n startY: Math.max(0, p),\n endX: h.range.end.x,\n endY: Math.min(this.rows - 1, T)\n }) : this.renderer.setHoveredLinkRange(null);\n } else\n this.renderer.setHoveredLinkRange(null);\n }).catch((h) => {\n console.warn(\"Link detection error:\", h);\n });\n }\n /**\n * Process scrollbar drag movement\n */\n processScrollbarDrag(A) {\n if (!this.canvas || !this.renderer || !this.wasmTerm || this.scrollbarDragStart === null)\n return;\n const B = this.wasmTerm.getScrollbackLength();\n if (B === 0)\n return;\n const g = this.canvas.getBoundingClientRect(), C = A.clientY - g.top - this.scrollbarDragStart, i = g.height - 4 * 2, w = this.rows, s = B + w, N = Math.max(20, w / s * i), k = -C / (i - N), M = Math.round(k * B), a = this.scrollbarDragStartViewportY + M;\n this.scrollToLine(Math.max(0, Math.min(B, a)));\n }\n /**\n * Show scrollbar with fade-in and schedule auto-hide\n */\n showScrollbar() {\n this.scrollbarHideTimeout && (window.clearTimeout(this.scrollbarHideTimeout), this.scrollbarHideTimeout = void 0), this.scrollbarVisible ? this.scrollbarOpacity = 1 : (this.scrollbarVisible = !0, this.scrollbarOpacity = 0, this.fadeInScrollbar()), this.isDraggingScrollbar || (this.scrollbarHideTimeout = window.setTimeout(() => {\n this.hideScrollbar();\n }, this.SCROLLBAR_HIDE_DELAY_MS));\n }\n /**\n * Hide scrollbar with fade-out\n */\n hideScrollbar() {\n this.scrollbarHideTimeout && (window.clearTimeout(this.scrollbarHideTimeout), this.scrollbarHideTimeout = void 0), this.scrollbarVisible && this.fadeOutScrollbar();\n }\n /**\n * Fade in scrollbar\n */\n fadeInScrollbar() {\n const A = Date.now(), B = () => {\n const g = Date.now() - A, E = Math.min(g / this.SCROLLBAR_FADE_DURATION_MS, 1);\n this.scrollbarOpacity = E, this.renderer && this.wasmTerm && this.renderer.render(this.wasmTerm, !1, this.viewportY, this, this.scrollbarOpacity), E < 1 && requestAnimationFrame(B);\n };\n B();\n }\n /**\n * Fade out scrollbar\n */\n fadeOutScrollbar() {\n const A = Date.now(), B = this.scrollbarOpacity, g = () => {\n const E = Date.now() - A, C = Math.min(E / this.SCROLLBAR_FADE_DURATION_MS, 1);\n this.scrollbarOpacity = B * (1 - C), this.renderer && this.wasmTerm && this.renderer.render(this.wasmTerm, !1, this.viewportY, this, this.scrollbarOpacity), C < 1 ? requestAnimationFrame(g) : (this.scrollbarVisible = !1, this.scrollbarOpacity = 0, this.renderer && this.wasmTerm && this.renderer.render(this.wasmTerm, !1, this.viewportY, this, 0));\n };\n g();\n }\n /**\n * Process any pending terminal responses and emit them via onData.\n *\n * This handles escape sequences that require the terminal to send a response\n * back to the PTY, such as:\n * - DSR 6 (cursor position): Shell sends \\x1b[6n, terminal responds with \\x1b[row;colR\n * - DSR 5 (operating status): Shell sends \\x1b[5n, terminal responds with \\x1b[0n\n *\n * Without this, shells like nushell that rely on cursor position queries\n * will hang waiting for a response that never comes.\n */\n processTerminalResponses() {\n if (!this.wasmTerm)\n return;\n const A = this.wasmTerm.readResponse();\n A && this.dataEmitter.fire(A);\n }\n /**\n * Check for title changes in written data (OSC sequences)\n * Simplified implementation - looks for OSC 0, 1, 2\n */\n checkForTitleChange(A) {\n const B = /\\x1b\\]([012]);([^\\x07\\x1b]*?)(?:\\x07|\\x1b\\\\)/g;\n let g = null;\n for (; (g = B.exec(A)) !== null; ) {\n const E = g[1], C = g[2];\n (E === \"0\" || E === \"2\") && C !== this.currentTitle && (this.currentTitle = C, this.titleChangeEmitter.fire(C));\n }\n }\n // ============================================================================\n // Terminal Modes\n // ============================================================================\n /**\n * Query terminal mode state\n *\n * @param mode Mode number (e.g., 2004 for bracketed paste)\n * @param isAnsi True for ANSI modes, false for DEC modes (default: false)\n * @returns true if mode is enabled\n */\n getMode(A, B = !1) {\n return this.assertOpen(), this.wasmTerm.getMode(A, B);\n }\n /**\n * Check if bracketed paste mode is enabled\n */\n hasBracketedPaste() {\n return this.assertOpen(), this.wasmTerm.hasBracketedPaste();\n }\n /**\n * Check if focus event reporting is enabled\n */\n hasFocusEvents() {\n return this.assertOpen(), this.wasmTerm.hasFocusEvents();\n }\n /**\n * Check if mouse tracking is enabled\n */\n hasMouseTracking() {\n return this.assertOpen(), this.wasmTerm.hasMouseTracking();\n }\n}\nconst QA = 2, BA = 1, gA = 15, EA = 100;\nclass DA {\n constructor() {\n this._isResizing = !1;\n }\n /**\n * Activate the addon (called by Terminal.loadAddon)\n */\n activate(A) {\n this._terminal = A;\n }\n /**\n * Dispose the addon and clean up resources\n */\n dispose() {\n this._resizeObserver && (this._resizeObserver.disconnect(), this._resizeObserver = void 0), this._resizeDebounceTimer && (clearTimeout(this._resizeDebounceTimer), this._resizeDebounceTimer = void 0), this._lastCols = void 0, this._lastRows = void 0, this._terminal = void 0;\n }\n /**\n * Fit the terminal to its container\n *\n * Calculates optimal dimensions and resizes the terminal.\n * Does nothing if dimensions cannot be calculated or haven't changed.\n */\n fit() {\n if (this._isResizing)\n return;\n const A = this.proposeDimensions();\n if (!A || !this._terminal)\n return;\n const B = this._terminal, g = B.cols, E = B.rows;\n if (!(A.cols === this._lastCols && A.rows === this._lastRows || A.cols === g && A.rows === E)) {\n this._lastCols = A.cols, this._lastRows = A.rows, this._isResizing = !0;\n try {\n B.resize && typeof B.resize == \"function\" && B.resize(A.cols, A.rows);\n } finally {\n setTimeout(() => {\n this._isResizing = !1;\n }, 50);\n }\n }\n }\n /**\n * Propose dimensions to fit the terminal to its container\n *\n * Calculates cols and rows based on:\n * - Terminal container element dimensions (clientWidth/Height)\n * - Terminal element padding\n * - Font metrics (character cell size)\n * - Scrollbar width reservation\n *\n * @returns Proposed dimensions or undefined if cannot calculate\n */\n proposeDimensions() {\n var G;\n if (!((G = this._terminal) != null && G.element))\n return;\n const B = this._terminal.renderer;\n if (!B || typeof B.getMetrics != \"function\")\n return;\n const g = B.getMetrics();\n if (!g || g.width === 0 || g.height === 0)\n return;\n const E = this._terminal.element;\n if (typeof E.clientWidth > \"u\")\n return;\n const C = window.getComputedStyle(E), I = Number.parseInt(C.getPropertyValue(\"padding-top\")) || 0, D = Number.parseInt(C.getPropertyValue(\"padding-bottom\")) || 0, i = Number.parseInt(C.getPropertyValue(\"padding-left\")) || 0, w = Number.parseInt(C.getPropertyValue(\"padding-right\")) || 0, s = E.clientWidth, N = E.clientHeight;\n if (s === 0 || N === 0)\n return;\n const k = s - i - w - gA, M = N - I - D, a = Math.max(QA, Math.floor(k / g.width)), h = Math.max(BA, Math.floor(M / g.height));\n return { cols: a, rows: h };\n }\n /**\n * Observe the terminal's container for resize events\n *\n * Sets up a ResizeObserver to automatically call fit() when the\n * container size changes. Resize events are debounced to avoid\n * excessive calls during window drag operations.\n *\n * Call dispose() to stop observing.\n */\n observeResize() {\n var A;\n (A = this._terminal) != null && A.element && (this._resizeObserver || (this._resizeObserver = new ResizeObserver((B) => {\n this._isResizing || !B[0] || (this._resizeDebounceTimer && clearTimeout(this._resizeDebounceTimer), this._resizeDebounceTimer = setTimeout(() => {\n this.fit();\n }, EA));\n }), this._resizeObserver.observe(this._terminal.element)));\n }\n}\nlet R = null;\nasync function oA() {\n R || (R = await q.load());\n}\nfunction CA() {\n if (!R)\n throw new Error(\n `ghostty-web not initialized. Call init() before creating Terminal instances.\nExample:\n import { init, Terminal } from \"ghostty-web\";\n await init();\n const term = new Terminal();\n\nFor tests, pass a Ghostty instance directly:\n import { Ghostty, Terminal } from \"ghostty-web\";\n const ghostty = await Ghostty.load();\n const term = new Terminal({ ghostty });`\n );\n return R;\n}\nexport {\n $ as CanvasRenderer,\n e as CellFlags,\n J as EventEmitter,\n DA as FitAddon,\n q as Ghostty,\n W as GhosttyTerminal,\n P as InputHandler,\n V as KeyEncoder,\n H as KeyEncoderOption,\n v as LinkDetector,\n X as OSC8LinkProvider,\n AA as SelectionManager,\n IA as Terminal,\n _ as UrlRegexProvider,\n CA as getGhostty,\n oA as init\n};\n","/**\n * Ghostty backend for termless.\n *\n * Wraps ghostty-web (Ghostty's VT parser compiled to WASM) to implement\n * the TerminalBackend interface — same Ghostty terminal emulation logic\n * that runs in the native Ghostty app, but headless via WASM.\n *\n * The WASM module requires async loading before use. Two patterns:\n *\n * 1. Pre-load the shared instance (recommended):\n * ```ts\n * await initGhostty()\n * const backend = createGhosttyBackend()\n * backend.init({ cols: 80, rows: 24 }) // sync — WASM already loaded\n * ```\n *\n * 2. Inject a pre-loaded instance (for test isolation):\n * ```ts\n * const ghostty = await Ghostty.load()\n * const backend = createGhosttyBackend(undefined, ghostty)\n * backend.init({ cols: 80, rows: 24 })\n * ```\n *\n * Calling init() without loading WASM first throws a clear error.\n */\n\nimport { Ghostty, type GhosttyTerminal, type GhosttyCell, CellFlags } from \"ghostty-web\"\nimport type {\n TerminalBackend,\n TerminalOptions,\n Cell,\n CursorState,\n TerminalMode,\n ScrollbackState,\n TerminalCapabilities,\n RGB,\n EmulatorWarning,\n WarningExtension,\n} from \"../../../src/types.ts\"\nimport { pushWarning } from \"../../../src/warnings.ts\"\nimport { encodeKeyToAnsi } from \"../../../src/key-encoding.ts\"\n\n// ═══════════════════════════════════════════════════════\n// Shared Ghostty WASM instance\n// ═══════════════════════════════════════════════════════\n\nlet sharedGhostty: Ghostty | null = null\nlet initPromise: Promise<Ghostty> | null = null\n\n/**\n * Initialize the shared Ghostty WASM module. Safe to call multiple times —\n * returns the same instance after first load.\n *\n * Must be called (and awaited) before `createGhosttyBackend().init()`.\n * The `init()` method on the backend is synchronous — this async step\n * loads the WASM binary so that `init()` can create terminals without awaiting.\n */\nexport async function initGhostty(): Promise<Ghostty> {\n if (sharedGhostty) return sharedGhostty\n if (initPromise) return initPromise\n\n initPromise = Ghostty.load().then((g) => {\n sharedGhostty = g\n return g\n })\n\n return initPromise\n}\n\n/**\n * Reset the shared Ghostty instance. For testing only — allows verifying\n * the \"WASM not loaded\" error path.\n * @internal\n */\nexport function _resetSharedForTesting(): void {\n sharedGhostty = null\n initPromise = null\n}\n\n// ═══════════════════════════════════════════════════════\n// Cell conversion\n// ═══════════════════════════════════════════════════════\n\n/** Check if an fg/bg matches the terminal's default colors (= \"no explicit color set\") */\nfunction isDefaultColor(r: number, g: number, b: number, defaults: { fg: RGB; bg: RGB }, isFg: boolean): boolean {\n const d = isFg ? defaults.fg : defaults.bg\n return r === d.r && g === d.g && b === d.b\n}\n\nfunction convertGhosttyCell(\n cell: GhosttyCell,\n ghosttyTerm: GhosttyTerminal,\n row: number,\n col: number,\n defaults: { fg: RGB; bg: RGB },\n): Cell {\n // Get proper text — use grapheme API for multi-codepoint characters\n let text: string\n if (cell.grapheme_len > 0) {\n text = ghosttyTerm.getGraphemeString(row, col)\n } else if (cell.codepoint === 0) {\n text = \"\"\n } else {\n text = String.fromCodePoint(cell.codepoint)\n }\n\n // Map default terminal colors to null (meaning \"use default\")\n const fg: RGB | null = isDefaultColor(cell.fg_r, cell.fg_g, cell.fg_b, defaults, true)\n ? null\n : { r: cell.fg_r, g: cell.fg_g, b: cell.fg_b }\n\n const bg: RGB | null = isDefaultColor(cell.bg_r, cell.bg_g, cell.bg_b, defaults, false)\n ? null\n : { r: cell.bg_r, g: cell.bg_g, b: cell.bg_b }\n\n return {\n char: text,\n fg,\n bg,\n bold: (cell.flags & CellFlags.BOLD) !== 0,\n dim: (cell.flags & CellFlags.FAINT) !== 0,\n italic: (cell.flags & CellFlags.ITALIC) !== 0,\n underline: (cell.flags & CellFlags.UNDERLINE) !== 0 ? \"single\" : false,\n underlineColor: null,\n strikethrough: (cell.flags & CellFlags.STRIKETHROUGH) !== 0,\n inverse: (cell.flags & CellFlags.INVERSE) !== 0,\n blink: false,\n hidden: false,\n wide: cell.width > 1,\n continuation: false,\n hyperlink: null,\n }\n}\n\nfunction convertScrollbackCell(\n cell: GhosttyCell,\n ghosttyTerm: GhosttyTerminal,\n offset: number,\n col: number,\n defaults: { fg: RGB; bg: RGB },\n): Cell {\n let text: string\n if (cell.grapheme_len > 0) {\n text = ghosttyTerm.getScrollbackGraphemeString(offset, col)\n } else if (cell.codepoint === 0) {\n text = \"\"\n } else {\n text = String.fromCodePoint(cell.codepoint)\n }\n\n const fg: RGB | null = isDefaultColor(cell.fg_r, cell.fg_g, cell.fg_b, defaults, true)\n ? null\n : { r: cell.fg_r, g: cell.fg_g, b: cell.fg_b }\n\n const bg: RGB | null = isDefaultColor(cell.bg_r, cell.bg_g, cell.bg_b, defaults, false)\n ? null\n : { r: cell.bg_r, g: cell.bg_g, b: cell.bg_b }\n\n return {\n char: text,\n fg,\n bg,\n bold: (cell.flags & CellFlags.BOLD) !== 0,\n dim: (cell.flags & CellFlags.FAINT) !== 0,\n italic: (cell.flags & CellFlags.ITALIC) !== 0,\n underline: (cell.flags & CellFlags.UNDERLINE) !== 0 ? \"single\" : false,\n underlineColor: null,\n strikethrough: (cell.flags & CellFlags.STRIKETHROUGH) !== 0,\n inverse: (cell.flags & CellFlags.INVERSE) !== 0,\n blink: false,\n hidden: false,\n wide: cell.width > 1,\n continuation: false,\n hyperlink: null,\n }\n}\n\n// ═══════════════════════════════════════════════════════\n// Backend factory\n// ═══════════════════════════════════════════════════════\n\nconst DEFAULT_COLS = 80\nconst DEFAULT_ROWS = 24\n\n/**\n * Create a Ghostty backend for termless.\n *\n * Uses ghostty-web (Ghostty's VT parser via WASM) for headless terminal\n * emulation. The WASM module must be loaded before calling init() —\n * either via `await initGhostty()` (shared) or by passing a pre-loaded\n * instance directly.\n *\n * @param opts - Optional terminal dimensions (unused — init() takes dimensions)\n * @param ghostty - Optional pre-loaded Ghostty instance (for test isolation).\n * Falls back to the shared instance from initGhostty().\n */\nexport function createGhosttyBackend(\n opts?: Partial<TerminalOptions>,\n ghostty?: Ghostty,\n): TerminalBackend & WarningExtension {\n let term: GhosttyTerminal | null = null\n const ghosttyInstance: Ghostty | null = ghostty ?? sharedGhostty\n let cols = DEFAULT_COLS\n let rows = DEFAULT_ROWS\n let title = \"\"\n let defaultColors: { fg: RGB; bg: RGB } = {\n fg: { r: 0, g: 0, b: 0 },\n bg: { r: 0, g: 0, b: 0 },\n }\n\n // ── Warning capture ──\n const warnings: EmulatorWarning[] = []\n\n /**\n * Parse a [ghostty-vt] log message into a structured EmulatorWarning.\n * Ghostty WASM routes all VT parser messages through console.log(\"[ghostty-vt]\", message).\n *\n * Known message formats from Ghostty:\n * - \"warning(osc): invalid OSC command: 66;w=2;X\"\n * - \"warning(csi): ...\"\n * - \"warning(esc): ...\"\n */\n function parseGhosttyWarning(message: string): EmulatorWarning {\n // Classify by Ghostty's warning(category) format\n const categoryMatch = message.match(/warning\\((osc|csi|esc|dcs|pm|apc|sos)\\)/i)\n if (categoryMatch) {\n const category = categoryMatch[1]!.toUpperCase()\n return { code: `UNSUPPORTED_${category}`, message, backend: \"ghostty\" }\n }\n\n // Legacy format fallback: \"unsupported OSC: 66\"\n if (/unsupported\\s+osc/i.test(message)) {\n return { code: \"UNSUPPORTED_OSC\", message, backend: \"ghostty\" }\n }\n if (/unsupported\\s+csi/i.test(message)) {\n return { code: \"UNSUPPORTED_CSI\", message, backend: \"ghostty\" }\n }\n if (/unsupported\\s+(esc|escape)/i.test(message)) {\n return { code: \"UNSUPPORTED_ESC\", message, backend: \"ghostty\" }\n }\n\n // Fallback: any unclassified ghostty-vt message\n return { code: \"EMULATOR_LOG\", message, backend: \"ghostty\" }\n }\n\n /**\n * Execute a function while intercepting console.log for [ghostty-vt] messages.\n * Messages are captured as structured warnings instead of going to the console.\n * Warnings are pushed to both the local backend array and the global registry.\n */\n function withWarningCapture<T>(fn: () => T): T {\n const originalLog = console.log\n console.log = (...args: unknown[]) => {\n if (typeof args[0] === \"string\" && args[0] === \"[ghostty-vt]\" && typeof args[1] === \"string\") {\n const warning = parseGhosttyWarning(args[1])\n warnings.push(warning)\n pushWarning(warning)\n return\n }\n originalLog.apply(console, args)\n }\n try {\n return fn()\n } finally {\n console.log = originalLog\n }\n }\n\n function ensureTerm(): GhosttyTerminal {\n if (!term) throw new Error(\"ghostty backend not initialized — call init() first\")\n return term\n }\n\n function init(options: TerminalOptions): void {\n if (term) {\n term.free()\n }\n\n if (!ghosttyInstance) {\n throw new Error(\n \"Ghostty WASM not loaded — call `await initGhostty()` before init(), \" +\n \"or pass a pre-loaded Ghostty instance to createGhosttyBackend().\",\n )\n }\n\n cols = options.cols\n rows = options.rows\n title = \"\"\n\n term = ghosttyInstance.createTerminal(cols, rows, {\n scrollbackLimit: options.scrollbackLimit ?? 1000,\n })\n\n // Capture default colors so we can distinguish \"default\" from \"explicitly set\"\n term.update()\n const colors = term.getColors() as {\n foreground: { r: number; g: number; b: number }\n background: { r: number; g: number; b: number }\n }\n defaultColors = {\n fg: { r: colors.foreground.r, g: colors.foreground.g, b: colors.foreground.b },\n bg: { r: colors.background.r, g: colors.background.g, b: colors.background.b },\n }\n }\n\n function destroy(): void {\n if (term) {\n term.free()\n term = null\n }\n }\n\n function feed(data: Uint8Array): void {\n const t = ensureTerm()\n withWarningCapture(() => {\n t.write(data)\n t.update() // Sync render state\n })\n\n // Drain DA1/DA2/DSR responses and forward to the terminal layer\n if (backend.onResponse) {\n while (t.hasResponse()) {\n const response = t.readResponse()\n if (response) {\n backend.onResponse(new TextEncoder().encode(response))\n }\n }\n }\n }\n\n function resize(newCols: number, newRows: number): void {\n const t = ensureTerm()\n t.resize(newCols, newRows)\n cols = newCols\n rows = newRows\n }\n\n function reset(): void {\n const t = ensureTerm()\n // Send RIS (Reset to Initial State)\n t.write(\"\\x1bc\")\n t.update()\n title = \"\"\n }\n\n function getText(): string {\n const t = ensureTerm()\n t.update()\n\n const lines: string[] = []\n\n // Scrollback lines\n const scrollbackLen = t.getScrollbackLength()\n for (let i = 0; i < scrollbackLen; i++) {\n const cells = t.getScrollbackLine(i)\n if (cells) {\n lines.push(cellsToString(cells, t, i, true))\n }\n }\n\n // Screen lines\n for (let row = 0; row < rows; row++) {\n const cells = t.getLine(row)\n if (cells) {\n lines.push(cellsToString(cells, t, row, false))\n }\n }\n\n return lines.join(\"\\n\")\n }\n\n function cellsToString(\n cells: GhosttyCell[],\n ghosttyTerm: GhosttyTerminal,\n lineIndex: number,\n isScrollback: boolean,\n ): string {\n let line = \"\"\n for (let col = 0; col < cells.length; col++) {\n const cell = cells[col]!\n if (cell.width === 0) continue // Skip continuation cells (wide char second half)\n if (cell.grapheme_len > 0) {\n line += isScrollback\n ? ghosttyTerm.getScrollbackGraphemeString(lineIndex, col)\n : ghosttyTerm.getGraphemeString(lineIndex, col)\n } else if (cell.codepoint === 0) {\n line += \" \"\n } else {\n line += String.fromCodePoint(cell.codepoint)\n }\n }\n return line.replace(/\\s+$/, \"\") // Trim trailing whitespace\n }\n\n function getTextRange(startRow: number, startCol: number, endRow: number, endCol: number): string {\n const t = ensureTerm()\n t.update()\n const parts: string[] = []\n\n for (let row = startRow; row <= endRow; row++) {\n const cells = t.getLine(row)\n if (!cells) continue\n\n const colStart = row === startRow ? startCol : 0\n const colEnd = row === endRow ? endCol : cells.length\n\n let line = \"\"\n for (let col = colStart; col < colEnd; col++) {\n const cell = cells[col]\n if (!cell || cell.width === 0) continue\n if (cell.grapheme_len > 0) {\n line += t.getGraphemeString(row, col)\n } else if (cell.codepoint === 0) {\n line += \" \"\n } else {\n line += String.fromCodePoint(cell.codepoint)\n }\n }\n parts.push(line.replace(/\\s+$/, \"\"))\n }\n\n return parts.join(\"\\n\")\n }\n\n function getCell(row: number, col: number): Cell {\n const t = ensureTerm()\n t.update()\n const cells = t.getLine(row)\n if (!cells || col >= cells.length) {\n return {\n char: \"\",\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false,\n underlineColor: null,\n strikethrough: false,\n inverse: false,\n blink: false,\n hidden: false,\n wide: false,\n continuation: false,\n hyperlink: null,\n }\n }\n return convertGhosttyCell(cells[col]!, t, row, col, defaultColors)\n }\n\n function getLine(row: number): Cell[] {\n const t = ensureTerm()\n t.update()\n const ghosttyCells = t.getLine(row)\n if (!ghosttyCells) {\n return Array.from({ length: cols }, () => ({\n char: \"\",\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false as const,\n underlineColor: null,\n strikethrough: false,\n inverse: false,\n blink: false,\n hidden: false,\n wide: false,\n continuation: false,\n hyperlink: null,\n }))\n }\n return ghosttyCells.map((cell, col) => convertGhosttyCell(cell, t, row, col, defaultColors))\n }\n\n function getLines(): Cell[][] {\n const result: Cell[][] = []\n for (let row = 0; row < rows; row++) {\n result.push(getLine(row))\n }\n return result\n }\n\n function getCursor(): CursorState {\n const t = ensureTerm()\n t.update()\n const cursor = t.getCursor()\n return {\n x: cursor.x,\n y: cursor.y,\n visible: cursor.visible,\n style: \"block\", // Ghostty WASM doesn't expose cursor style directly\n }\n }\n\n function getMode(mode: TerminalMode): boolean {\n const t = ensureTerm()\n\n switch (mode) {\n case \"altScreen\":\n return t.isAlternateScreen()\n case \"cursorVisible\":\n return t.getMode(25) // DECTCEM\n case \"bracketedPaste\":\n return t.hasBracketedPaste()\n case \"applicationCursor\":\n return t.getMode(1) // DECCKM\n case \"applicationKeypad\":\n return t.getMode(66, true) // DECNKM (ANSI mode)\n case \"autoWrap\":\n return t.getMode(7) // DECAWM\n case \"mouseTracking\":\n return t.hasMouseTracking()\n case \"focusTracking\":\n return t.hasFocusEvents()\n case \"originMode\":\n return t.getMode(6) // DECOM\n case \"insertMode\":\n return t.getMode(4, true) // IRM (ANSI mode)\n case \"reverseVideo\":\n return t.getMode(5) // DECSCNM\n }\n }\n\n function getTitle(): string {\n return title\n }\n\n function getScrollback(): ScrollbackState {\n const t = ensureTerm()\n t.update()\n const scrollbackLength = t.getScrollbackLength()\n return {\n // Ghostty WASM doesn't expose viewport scroll position in headless mode,\n // so assume viewport is at the bottom (absolute top row = scrollbackLength).\n viewportOffset: scrollbackLength,\n totalLines: scrollbackLength + rows,\n screenLines: rows,\n }\n }\n\n function scrollViewport(_delta: number): void {\n // Ghostty WASM doesn't support viewport scrolling in headless mode\n // (no scroll position state without a renderer)\n }\n\n const capabilities: TerminalCapabilities = {\n name: \"ghostty\",\n version: \"0.4.0\",\n truecolor: true,\n kittyKeyboard: true,\n kittyGraphics: false, // Not available in WASM build\n sixel: false,\n osc8Hyperlinks: true,\n semanticPrompts: false,\n unicode: \"15.1\",\n reflow: true,\n extensions: new Set([\"dirtyTracking\", \"warnings\"]),\n }\n\n function getWarnings(): EmulatorWarning[] {\n return [...warnings]\n }\n\n function clearWarnings(): void {\n warnings.length = 0\n }\n\n const backend: TerminalBackend & WarningExtension = {\n name: \"ghostty\",\n init,\n destroy,\n feed,\n resize,\n reset,\n getText,\n getTextRange,\n getCell,\n getLine,\n getLines,\n getCursor,\n getMode,\n getTitle,\n getScrollback,\n scrollViewport,\n encodeKey: encodeKeyToAnsi,\n capabilities,\n getWarnings,\n clearWarnings,\n }\n\n return backend\n}\n","export { createGhosttyBackend, initGhostty } from \"./backend.ts\"\n\nimport { createGhosttyBackend, initGhostty } from \"./backend.ts\"\nimport type { TerminalBackend, TerminalOptions } from \"../../../src/types.ts\"\n\n/** Resolve this backend for the registry. Handles WASM initialization. */\nexport async function resolve(opts?: Partial<TerminalOptions>): Promise<TerminalBackend> {\n const ghostty = await initGhostty()\n return createGhosttyBackend(opts, ghostty)\n}\n","/**\n * STRICT/Verification code extracted from output-phase.ts.\n *\n * Contains: replayAnsiWithStyles (vt100 backend), captureStrictFailureArtifacts,\n * verifyOutputEquivalence, verifyAccumulatedOutput, verifyTerminalEquivalence,\n * compareTerminals, and all supporting types/helpers.\n *\n * These functions are only called when SILVERY_STRICT, SILVERY_STRICT_ACCUMULATE,\n * or SILVERY_STRICT_TERMINAL are enabled. Production builds can tree-shake this\n * entire module.\n */\n\nimport type { TerminalBuffer } from \"../buffer\"\nimport { IncrementalRenderMismatchError } from \"../errors\"\nimport { graphemeWidth } from \"../unicode\"\nimport { createLogger } from \"loggily\"\nimport type { OutputContext } from \"./output-phase\"\n\nconst log = createLogger(\"silvery:output\")\n\nconst _env = typeof process !== \"undefined\" ? process.env : ({} as Record<string, string | undefined>)\nconst DEBUG_OUTPUT = !!_env.SILVERY_DEBUG_OUTPUT\n\n// ============================================================================\n// Types for avoiding circular dependencies\n// ============================================================================\n\n/** Function signature for bufferToAnsi — passed from output-phase to avoid circular import. */\nexport type BufferToAnsiFn = (buffer: TerminalBuffer, ctx: OutputContext, maxRows?: number) => string\n\n/** Function signature for outputGraphemeWidth. */\nexport type OutputGraphemeWidthFn = (g: string, ctx: OutputContext) => number\n\n/** Function signature for outputTextSizingEnabled. */\nexport type OutputTextSizingEnabledFn = (ctx: OutputContext) => boolean\n\n/** Per-instance state for SILVERY_STRICT_ACCUMULATE verification. */\nexport interface AccumulateState {\n accumulatedAnsi: string\n accumulateWidth: number\n accumulateHeight: number\n accumulateFrameCount: number\n}\n\n/** Per-instance state for SILVERY_STRICT_TERMINAL verification.\n * Holds persistent terminal(s) that accumulate incremental ANSI output\n * across frames, enabling comparison against a fresh render in an independent emulator. */\nexport interface TerminalVerifyState {\n /** The persistent xterm.js terminal accumulating incremental output */\n terminal: import(\"@termless/core\").Terminal | null\n /** Optional persistent Ghostty terminal for cross-backend verification */\n ghosttyTerminal: import(\"@termless/core\").Terminal | null\n /** Width of the terminal */\n width: number\n /** Height of the terminal */\n height: number\n /** Frame count for diagnostics */\n frameCount: number\n /** Which emulator backends to verify (xterm, ghostty — vt100 handled separately) */\n backends: Array<\"xterm\" | \"ghostty\">\n /** Whether the vt100 (replayAnsiWithStyles) backend is enabled */\n hasVt100: boolean\n}\n\n// ============================================================================\n// Strict environment helpers\n// ============================================================================\n\n/** Parse SILVERY_STRICT_TERMINAL into a list of backends.\n *\n * Accepts `all` (= `vt100,xterm,ghostty`) or a comma-separated list of\n * backend names (e.g., `vt100,xterm`).\n *\n * The `vt100` backend uses the internal `replayAnsiWithStyles` parser (stateless).\n * `xterm` and `ghostty` use persistent terminal emulators (stateful).\n */\nexport function strictTerminalBackends(): Array<\"vt100\" | \"xterm\" | \"ghostty\"> {\n const val = (typeof process !== \"undefined\" ? (process.env.SILVERY_STRICT_TERMINAL ?? \"\") : \"\").toLowerCase().trim()\n if (!val) return []\n if (val === \"all\") return [\"vt100\", \"xterm\", \"ghostty\"]\n // Comma-separated list\n const backends = val\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n const valid = new Set([\"vt100\", \"xterm\", \"ghostty\"])\n for (const b of backends) {\n if (!valid.has(b)) {\n log.warn?.(`SILVERY_STRICT_TERMINAL: unknown backend '${b}', ignoring`)\n }\n }\n return backends.filter((b) => valid.has(b)) as Array<\"vt100\" | \"xterm\" | \"ghostty\">\n}\n\n/** Create fresh terminal verify state. */\nexport function createTerminalVerifyState(): TerminalVerifyState {\n const allBackends = strictTerminalBackends()\n return {\n terminal: null,\n ghosttyTerminal: null,\n width: 0,\n height: 0,\n frameCount: 0,\n backends: allBackends.filter((b) => b !== \"vt100\") as Array<\"xterm\" | \"ghostty\">,\n hasVt100: allBackends.includes(\"vt100\"),\n }\n}\n\n// ============================================================================\n// Style-Aware ANSI Replay\n// ============================================================================\n\n/** SGR state tracked during ANSI replay. */\ninterface SgrState {\n fg: number | { r: number; g: number; b: number } | null\n bg: number | { r: number; g: number; b: number } | null\n bold: boolean\n dim: boolean\n italic: boolean\n underline: boolean\n blink: boolean\n inverse: boolean\n hidden: boolean\n strikethrough: boolean\n}\n\n/** A cell in the style-aware virtual terminal. */\nexport interface StyledCell {\n char: string\n fg: number | { r: number; g: number; b: number } | null\n bg: number | { r: number; g: number; b: number } | null\n bold: boolean\n dim: boolean\n italic: boolean\n underline: boolean\n blink: boolean\n inverse: boolean\n hidden: boolean\n strikethrough: boolean\n}\n\nfunction createDefaultSgr(): SgrState {\n return {\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false,\n blink: false,\n inverse: false,\n hidden: false,\n strikethrough: false,\n }\n}\n\nfunction createDefaultStyledCell(): StyledCell {\n return {\n char: \" \",\n fg: null,\n bg: null,\n bold: false,\n dim: false,\n italic: false,\n underline: false,\n blink: false,\n inverse: false,\n hidden: false,\n strikethrough: false,\n }\n}\n\n/**\n * Apply SGR parameters to the current state.\n * Handles all SGR codes used by styleTransition().\n */\nfunction applySgrParams(params: string, sgr: SgrState): void {\n if (params === \"\" || params === \"0\") {\n // Reset\n sgr.fg = null\n sgr.bg = null\n sgr.bold = false\n sgr.dim = false\n sgr.italic = false\n sgr.underline = false\n sgr.blink = false\n sgr.inverse = false\n sgr.hidden = false\n sgr.strikethrough = false\n return\n }\n\n const parts = params.split(\";\")\n let i = 0\n while (i < parts.length) {\n const code = parts[i]!\n // Handle subparameters (e.g., \"4:3\" for curly underline)\n const colonIdx = code.indexOf(\":\")\n if (colonIdx >= 0) {\n const mainCode = parseInt(code.substring(0, colonIdx))\n if (mainCode === 4) {\n // Underline style subparameter\n const sub = parseInt(code.substring(colonIdx + 1))\n sgr.underline = sub > 0\n }\n // 58:5:N or 58:2:r:g:b — underline color, skip (we don't track underline color in styled cells)\n i++\n continue\n }\n\n const n = parseInt(code)\n if (n === 0) {\n sgr.fg = null\n sgr.bg = null\n sgr.bold = false\n sgr.dim = false\n sgr.italic = false\n sgr.underline = false\n sgr.blink = false\n sgr.inverse = false\n sgr.hidden = false\n sgr.strikethrough = false\n } else if (n === 1) {\n sgr.bold = true\n } else if (n === 2) {\n sgr.dim = true\n } else if (n === 3) {\n sgr.italic = true\n } else if (n === 4) {\n sgr.underline = true\n } else if (n === 5 || n === 6) {\n sgr.blink = true\n } else if (n === 7) {\n sgr.inverse = true\n } else if (n === 8) {\n sgr.hidden = true\n } else if (n === 9) {\n sgr.strikethrough = true\n } else if (n === 21) {\n // Double underline — we simplify to underline=true\n sgr.underline = true\n } else if (n === 22) {\n sgr.bold = false\n sgr.dim = false\n } else if (n === 23) {\n sgr.italic = false\n } else if (n === 24) {\n sgr.underline = false\n } else if (n === 25) {\n sgr.blink = false\n } else if (n === 27) {\n sgr.inverse = false\n } else if (n === 28) {\n sgr.hidden = false\n } else if (n === 29) {\n sgr.strikethrough = false\n } else if (n >= 30 && n <= 37) {\n sgr.fg = n - 30\n } else if (n === 38) {\n // Extended fg color\n if (parts[i + 1] === \"5\") {\n sgr.fg = parseInt(parts[i + 2]!)\n i += 2\n } else if (parts[i + 1] === \"2\") {\n sgr.fg = { r: parseInt(parts[i + 2]!), g: parseInt(parts[i + 3]!), b: parseInt(parts[i + 4]!) }\n i += 4\n }\n } else if (n === 39) {\n sgr.fg = null\n } else if (n >= 40 && n <= 47) {\n sgr.bg = n - 40\n } else if (n === 48) {\n // Extended bg color\n if (parts[i + 1] === \"5\") {\n sgr.bg = parseInt(parts[i + 2]!)\n i += 2\n } else if (parts[i + 1] === \"2\") {\n sgr.bg = { r: parseInt(parts[i + 2]!), g: parseInt(parts[i + 3]!), b: parseInt(parts[i + 4]!) }\n i += 4\n }\n } else if (n === 49) {\n sgr.bg = null\n } else if (n >= 90 && n <= 97) {\n // Bright fg\n sgr.fg = n - 90 + 8\n } else if (n >= 100 && n <= 107) {\n // Bright bg\n sgr.bg = n - 100 + 8\n }\n i++\n }\n}\n\n/**\n * Replay ANSI output into a virtual terminal grid with style tracking.\n *\n * Returns a 2D array [y][x] of StyledCells. This replays the same ANSI\n * escape sequences that outputPhase() produces (CUP, SGR, EL, text) and\n * tracks the resulting character + style at each position.\n *\n * Used by SILVERY_STRICT_OUTPUT to verify that incremental output produces\n * the same visual + style result as a fresh full render.\n *\n * @deprecated Use `SILVERY_STRICT_TERMINAL=vt100` instead. This function is now\n * the internal implementation of the `vt100` backend for STRICT_TERMINAL verification.\n * Direct usage is discouraged — prefer the unified STRICT_TERMINAL env var interface.\n */\nexport function replayAnsiWithStyles(\n width: number,\n height: number,\n ansi: string,\n ctx: OutputContext = _defaultCtxForReplay,\n): StyledCell[][] {\n const screen: StyledCell[][] = Array.from({ length: height }, () =>\n Array.from({ length: width }, () => createDefaultStyledCell()),\n )\n let cx = 0\n let cy = 0\n let pendingWrap = false // VT100 pending wrap flag\n const sgr = createDefaultSgr()\n let i = 0\n\n while (i < ansi.length) {\n if (ansi[i] === \"\\x1b\") {\n if (ansi[i + 1] === \"[\") {\n i += 2\n let params = \"\"\n while (\n i < ansi.length &&\n ((ansi[i]! >= \"0\" && ansi[i]! <= \"9\") || ansi[i] === \";\" || ansi[i] === \"?\" || ansi[i] === \":\")\n ) {\n params += ansi[i]\n i++\n }\n const cmd = ansi[i]\n i++\n if (cmd === \"H\") {\n // CUP clears pending wrap\n pendingWrap = false\n if (params === \"\") {\n cx = 0\n cy = 0\n } else {\n const cmdParts = params.split(\";\")\n // Clamp to screen bounds (real terminals clamp CUP to valid range)\n cy = Math.min(height - 1, Math.max(0, (parseInt(cmdParts[0]!) || 1) - 1))\n cx = Math.min(width - 1, Math.max(0, (parseInt(cmdParts[1]!) || 1) - 1))\n }\n } else if (cmd === \"K\") {\n // Erase to end of line — fills with current bg (or default)\n if (cy >= height) continue // out of bounds — skip\n for (let x = cx; x < width; x++) {\n const cell = screen[cy]![x]!\n cell.char = \" \"\n cell.fg = null\n cell.bg = sgr.bg\n cell.bold = false\n cell.dim = false\n cell.italic = false\n cell.underline = false\n cell.blink = false\n cell.inverse = false\n cell.hidden = false\n cell.strikethrough = false\n }\n } else if (cmd === \"J\") {\n // Erase from cursor to end of screen\n // Clear from cursor to end of current line\n if (cy < height) {\n for (let x = cx; x < width; x++) {\n const cell = screen[cy]![x]!\n cell.char = \" \"\n cell.fg = null\n cell.bg = sgr.bg\n cell.bold = false\n cell.dim = false\n cell.italic = false\n cell.underline = false\n cell.blink = false\n cell.inverse = false\n cell.hidden = false\n cell.strikethrough = false\n }\n }\n // Clear all subsequent lines\n for (let y = cy + 1; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const cell = screen[y]![x]!\n cell.char = \" \"\n cell.fg = null\n cell.bg = sgr.bg\n cell.bold = false\n cell.dim = false\n cell.italic = false\n cell.underline = false\n cell.blink = false\n cell.inverse = false\n cell.hidden = false\n cell.strikethrough = false\n }\n }\n } else if (cmd === \"m\") {\n applySgrParams(params, sgr)\n } else if (cmd === \"C\") {\n // Cursor forward — clears pending wrap\n pendingWrap = false\n const n = parseInt(params) || 1\n cx = Math.min(width - 1, cx + n)\n } else if (cmd === \"A\") {\n // Cursor up — clears pending wrap\n pendingWrap = false\n const n = parseInt(params) || 1\n cy = Math.max(0, cy - n)\n } else if (cmd === \"B\") {\n // Cursor down — clears pending wrap\n pendingWrap = false\n const n = parseInt(params) || 1\n cy = Math.min(height - 1, cy + n)\n } else if (cmd === \"l\" || cmd === \"h\") {\n // Private mode set/reset (e.g., ?25l = hide cursor, ?25h = show cursor)\n // Skip — we don't model cursor visibility\n }\n continue\n } else if (ansi[i + 1] === \"]\") {\n // OSC sequence — skip until ST (BEL or ESC\\\\)\n i += 2\n while (i < ansi.length) {\n if (ansi[i] === \"\\x07\") {\n i++\n break\n }\n if (ansi[i] === \"\\x1b\" && ansi[i + 1] === \"\\\\\") {\n i += 2\n break\n }\n i++\n }\n continue\n }\n // Unknown escape — skip the ESC and next char\n i += 2\n continue\n }\n\n if (ansi[i] === \"\\r\") {\n // CR clears pending wrap, moves to column 0\n pendingWrap = false\n cx = 0\n i++\n continue\n }\n\n if (ansi[i] === \"\\n\") {\n // LF clears pending wrap and moves down one row\n pendingWrap = false\n cy++\n if (cy >= height) {\n // Scroll: shift all rows up by 1\n const first = screen.shift()!\n // Reset the row being recycled\n for (const cell of first) {\n cell.char = \" \"\n cell.fg = null\n cell.bg = null\n cell.bold = false\n cell.dim = false\n cell.italic = false\n cell.underline = false\n cell.blink = false\n cell.inverse = false\n cell.hidden = false\n cell.strikethrough = false\n }\n screen.push(first)\n cy = height - 1\n }\n i++\n continue\n }\n\n // Regular character — collect full grapheme cluster.\n //\n // A grapheme cluster may span multiple UTF-16 code units:\n // - Surrogate pairs for astral codepoints (e.g., emoji U+1F600)\n // - ZWJ sequences (e.g., 🏃♂️ = U+1F3C3 U+200D U+2642 U+FE0F)\n // - Variation selectors (U+FE0E text, U+FE0F emoji presentation)\n // - Combining marks, skin tone modifiers, regional indicators\n //\n // Strategy: extract the first codepoint (handling surrogates), then\n // greedily absorb subsequent zero-width joiners, variation selectors,\n // combining marks, and their targets into a single grapheme string.\n // This matches terminal behavior where the entire cluster occupies\n // the column count of the base character.\n let grapheme = \"\"\n let advance = 0\n\n // Extract the initial codepoint\n const code0 = ansi.charCodeAt(i)\n if (code0 >= 0xd800 && code0 <= 0xdbff && i + 1 < ansi.length) {\n const low = ansi.charCodeAt(i + 1)\n if (low >= 0xdc00 && low <= 0xdfff) {\n grapheme = ansi[i]! + ansi[i + 1]!\n advance = 2\n } else {\n grapheme = ansi[i]!\n advance = 1\n }\n } else {\n grapheme = ansi[i]!\n advance = 1\n }\n\n // Absorb combining/extending codepoints that follow:\n // ZWJ (U+200D), variation selectors (U+FE0E-FE0F), combining marks\n // (U+0300-036F, U+20D0-20FF, U+1AB0-1AFF, U+FE20-FE2F), skin tone\n // modifiers (U+1F3FB-1F3FF), regional indicators (U+1F1E6-1F1FF),\n // enclosing keycap (U+20E3), and tag sequences (U+E0020-E007F).\n {\n let j = i + advance\n while (j < ansi.length) {\n const c = ansi.charCodeAt(j)\n // Decode the codepoint at j (handle surrogates)\n let cp: number\n let cpLen: number\n if (c >= 0xd800 && c <= 0xdbff && j + 1 < ansi.length) {\n const lo = ansi.charCodeAt(j + 1)\n if (lo >= 0xdc00 && lo <= 0xdfff) {\n cp = ((c - 0xd800) << 10) + (lo - 0xdc00) + 0x10000\n cpLen = 2\n } else {\n break\n }\n } else {\n cp = c\n cpLen = 1\n }\n\n if (\n cp === 0x200d || // ZWJ\n cp === 0xfe0e ||\n cp === 0xfe0f || // Variation selectors\n (cp >= 0x0300 && cp <= 0x036f) || // Combining diacritical marks\n (cp >= 0x20d0 && cp <= 0x20ff) || // Combining marks for symbols\n (cp >= 0x1ab0 && cp <= 0x1aff) || // Combining diacritical extended\n (cp >= 0xfe20 && cp <= 0xfe2f) || // Combining half marks\n cp === 0x20e3 || // Combining enclosing keycap\n (cp >= 0x1f3fb && cp <= 0x1f3ff) || // Skin tone modifiers\n (cp >= 0x1f1e6 && cp <= 0x1f1ff) || // Regional indicator symbols\n (cp >= 0xe0020 && cp <= 0xe007f) || // Tags\n cp === 0xe0001 // Language tag begin\n ) {\n grapheme += ansi.slice(j, j + cpLen)\n advance += cpLen\n j += cpLen\n continue\n }\n\n // After ZWJ, absorb the next codepoint (the ZWJ target)\n const prevCp =\n grapheme.length >= 2\n ? grapheme.charCodeAt(grapheme.length - 2) === 0x200d\n ? 0x200d\n : grapheme.charCodeAt(grapheme.length - 1)\n : grapheme.charCodeAt(grapheme.length - 1)\n if (prevCp === 0x200d && cp > 0x20) {\n // ZWJ target: absorb any codepoint after ZWJ\n grapheme += ansi.slice(j, j + cpLen)\n advance += cpLen\n j += cpLen\n continue\n }\n\n break\n }\n }\n\n const charWidth = graphemeWidth(grapheme)\n\n if (cy < height && cx < width) {\n // Resolve pending wrap before writing\n if (pendingWrap) {\n pendingWrap = false\n cx = 0\n cy++\n if (cy >= height) {\n // Scroll: shift all rows up by 1\n const first = screen.shift()!\n for (const cell of first) {\n cell.char = \" \"\n cell.fg = null\n cell.bg = null\n cell.bold = false\n cell.dim = false\n cell.italic = false\n cell.underline = false\n cell.blink = false\n cell.inverse = false\n cell.hidden = false\n cell.strikethrough = false\n }\n screen.push(first)\n cy = height - 1\n }\n }\n if (cy < height && cx < width) {\n const cell = screen[cy]![cx]!\n cell.char = grapheme\n cell.fg = sgr.fg\n cell.bg = sgr.bg\n cell.bold = sgr.bold\n cell.dim = sgr.dim\n cell.italic = sgr.italic\n cell.underline = sgr.underline\n cell.blink = sgr.blink\n cell.inverse = sgr.inverse\n cell.hidden = sgr.hidden\n cell.strikethrough = sgr.strikethrough\n\n // Wide character: clear the continuation cell at cx+1 (terminals\n // implicitly overwrite the second column when writing a wide char)\n if (charWidth === 2 && cx + 1 < width) {\n const cont = screen[cy]![cx + 1]!\n cont.char = \" \"\n cont.fg = sgr.fg\n cont.bg = sgr.bg\n cont.bold = sgr.bold\n cont.dim = sgr.dim\n cont.italic = sgr.italic\n cont.underline = sgr.underline\n cont.blink = sgr.blink\n cont.inverse = sgr.inverse\n cont.hidden = sgr.hidden\n cont.strikethrough = sgr.strikethrough\n }\n\n cx += charWidth\n if (cx >= width) {\n // Enter pending wrap state — cursor stays at last column\n cx = width - 1\n pendingWrap = true\n }\n }\n }\n i += advance\n }\n return screen\n}\n\n// Default context for replayAnsiWithStyles when called without ctx (by tests).\nconst _defaultCtxForReplay: OutputContext = {\n caps: {\n underlineStyles: true,\n underlineColor: true,\n colorLevel: \"truecolor\",\n },\n measurer: null,\n sgrCache: new Map(),\n transitionCache: new Map(),\n mode: \"fullscreen\",\n termRows: undefined,\n}\n\n/** Format a color value for display. */\nexport function formatColor(c: number | { r: number; g: number; b: number } | null): string {\n if (c === null) return \"default\"\n if (typeof c === \"number\") return `${c}`\n return `rgb(${c.r},${c.g},${c.b})`\n}\n\n// =============================================================================\n// STRICT failure artifact capture\n// =============================================================================\n\n/**\n * Capture debug artifacts to disk when a STRICT verification fails.\n * Saves prev/next buffer snapshots, ANSI sequences, terminal size, and test context\n * to /tmp/silvery-strict-failure-<timestamp>/.\n *\n * Returns the artifact directory path (included in the error message).\n */\nexport function captureStrictFailureArtifacts(opts: {\n source: string\n errorMessage: string\n prev?: TerminalBuffer | null\n next?: TerminalBuffer | null\n incrOutput?: string\n freshOutput?: string\n ctx?: OutputContext\n frameCount?: number\n /** Optional bufferToAnsi function for generating fresh-prev.ansi. */\n renderFull?: BufferToAnsiFn\n}): string {\n try {\n const fs = require(\"fs\")\n const path = require(\"path\")\n const timestamp = Date.now()\n const dir = `/tmp/silvery-strict-failure-${timestamp}`\n fs.mkdirSync(dir, { recursive: true })\n\n // Metadata\n const meta: Record<string, unknown> = {\n source: opts.source,\n timestamp: new Date().toISOString(),\n frameCount: opts.frameCount,\n prevSize: opts.prev ? { width: opts.prev.width, height: opts.prev.height } : null,\n nextSize: opts.next ? { width: opts.next.width, height: opts.next.height } : null,\n incrOutputLength: opts.incrOutput?.length,\n freshOutputLength: opts.freshOutput?.length,\n testName: (globalThis as any).__vitest_worker__?.current?.name as string | undefined,\n }\n fs.writeFileSync(path.join(dir, \"meta.json\"), JSON.stringify(meta, null, 2))\n\n // Error message\n fs.writeFileSync(path.join(dir, \"error.txt\"), opts.errorMessage)\n\n // ANSI sequences\n if (opts.incrOutput) {\n fs.writeFileSync(path.join(dir, \"incremental.ansi\"), opts.incrOutput)\n }\n if (opts.freshOutput) {\n fs.writeFileSync(path.join(dir, \"fresh.ansi\"), opts.freshOutput)\n }\n\n // Buffer snapshots (text representation)\n if (opts.prev) {\n const rows: string[] = []\n for (let y = 0; y < opts.prev.height; y++) {\n let row = \"\"\n for (let x = 0; x < opts.prev.width; x++) {\n const cell = opts.prev.getCell(x, y)\n row += cell.char || \" \"\n }\n rows.push(row.trimEnd())\n }\n fs.writeFileSync(path.join(dir, \"prev-buffer.txt\"), rows.join(\"\\n\"))\n }\n\n if (opts.next) {\n const rows: string[] = []\n for (let y = 0; y < opts.next.height; y++) {\n let row = \"\"\n for (let x = 0; x < opts.next.width; x++) {\n const cell = opts.next.getCell(x, y)\n row += cell.char || \" \"\n }\n rows.push(row.trimEnd())\n }\n fs.writeFileSync(path.join(dir, \"next-buffer.txt\"), rows.join(\"\\n\"))\n }\n\n // Fresh prev ANSI (for replay)\n if (opts.prev && opts.ctx && opts.renderFull) {\n const freshPrev = opts.renderFull(opts.prev, opts.ctx)\n fs.writeFileSync(path.join(dir, \"fresh-prev.ansi\"), freshPrev)\n }\n\n return dir\n } catch {\n return \"(artifact capture failed)\"\n }\n}\n\n// =============================================================================\n// Output Equivalence Verification (vt100 backend)\n// =============================================================================\n\n/**\n * Verify that applying changesToAnsi output to a previous terminal state\n * produces the same visible characters AND styles as a fresh render of the\n * next buffer. Throws on mismatch.\n *\n * @param prev Previous terminal buffer\n * @param next Next terminal buffer\n * @param incrOutput Incremental ANSI output from changesToAnsi\n * @param ctx Output context\n * @param renderFull Function to convert a buffer to full ANSI output\n * @param graphemeWidthFn Function to get grapheme width\n * @param textSizingEnabledFn Function to check if text sizing is enabled\n */\nexport function verifyOutputEquivalence(\n prev: TerminalBuffer,\n next: TerminalBuffer,\n incrOutput: string,\n ctx: OutputContext,\n renderFull: BufferToAnsiFn,\n graphemeWidthFn: OutputGraphemeWidthFn,\n textSizingEnabledFn: OutputTextSizingEnabledFn,\n): void {\n const w = Math.max(prev.width, next.width)\n // VT height must accommodate the larger buffer to prevent scrolling artifacts\n // when prev is taller than next (e.g., items removed from a scrollback list).\n // We only compare up to next.height rows — excess rows should be cleared.\n const vtHeight = Math.max(prev.height, next.height)\n // DEBUG: log buffer dimensions\n if (DEBUG_OUTPUT) {\n log.error?.(`[VERIFY] prev=${prev.width}x${prev.height} next=${next.width}x${next.height} vtSize=${w}x${vtHeight}`)\n }\n // Replay: fresh prev render + incremental diff applied on top\n const freshPrev = renderFull(prev, ctx)\n if (DEBUG_OUTPUT) {\n log.error?.(`[VERIFY] freshPrev len=${freshPrev.length} incrOutput len=${incrOutput.length}`)\n // Show incrOutput as escaped string\n const escaped = incrOutput.replace(/\\x1b/g, \"\\\\e\").replace(/\\r/g, \"\\\\r\").replace(/\\n/g, \"\\\\n\")\n log.error?.(`[VERIFY] incrOutput: ${escaped.slice(0, 500)}`)\n }\n const screenIncr = replayAnsiWithStyles(w, vtHeight, freshPrev + incrOutput, ctx)\n // Replay: fresh render of next buffer\n const freshNext = renderFull(next, ctx)\n const screenFresh = replayAnsiWithStyles(w, vtHeight, freshNext, ctx)\n\n const _dumpRowWideCells = (buf: TerminalBuffer, row: number): string => {\n const parts: string[] = []\n for (let cx = 0; cx < buf.width; cx++) {\n const c = buf.getCell(cx, row)\n const cp = c.char\n ? [...c.char].map((ch) => \"U+\" + (ch.codePointAt(0) ?? 0).toString(16).toUpperCase().padStart(4, \"0\")).join(\",\")\n : \"empty\"\n if (c.wide) parts.push(`W@${cx}:${cp}(gw=${graphemeWidthFn(c.char, ctx)})`)\n if (c.continuation) parts.push(`C@${cx}`)\n // Flag cells where written char width differs from buffer expectation\n const charToWrite = c.char || \" \"\n const vtWidth = graphemeWidthFn(charToWrite, ctx)\n const bufWidth = c.wide ? 2 : 1\n if (!c.continuation && vtWidth !== bufWidth) {\n parts.push(`MISMATCH@${cx}:${cp}(vtW=${vtWidth},bufW=${bufWidth},tse=${textSizingEnabledFn(ctx)})`)\n }\n }\n return parts.join(\" \")\n }\n\n // Compare character by character AND style by style.\n // Use vtHeight (not compareHeight) to catch stale rows after height shrink.\n // When prev.height > next.height, stale rows beyond next.height must be\n // verified as cleared — otherwise incremental output silently diverges.\n for (let y = 0; y < vtHeight; y++) {\n for (let x = 0; x < w; x++) {\n const incr = screenIncr[y]![x]!\n const fresh = screenFresh[y]![x]!\n\n // Check character\n if (incr.char !== fresh.char) {\n // Build context: show the row from both renders\n const incrRow = screenIncr[y]!.map((c) => c.char).join(\"\")\n const freshRow = screenFresh[y]!.map((c) => c.char).join(\"\")\n // Also show the prev buffer row for diagnosis\n const prevRow = screenIncr[y]!.map((_, cx) => {\n const prevCell = prev.getCell(cx, y)\n return prevCell.char\n }).join(\"\")\n // Show what changesToAnsi tried to write at this position\n const nextCell = next.getCell(x, y)\n const prevCell = prev.getCell(x, y)\n // Show detailed column-by-column comparison around the mismatch\n const contextStart = Math.max(0, x - 5)\n const contextEnd = Math.min(w, x + 10)\n const colDetails: string[] = []\n for (let cx = contextStart; cx < contextEnd; cx++) {\n const ic = screenIncr[y]![cx]!\n const fc = screenFresh[y]![cx]!\n const pc = prev.getCell(cx, y)\n const nc = next.getCell(cx, y)\n const marker = cx === x ? \" <<<\" : ic.char !== fc.char ? \" !!!\" : \"\"\n colDetails.push(\n ` col ${cx}: prev='${pc.char}'(w=${pc.wide},c=${pc.continuation}) next='${nc.char}' incr='${ic.char}' fresh='${fc.char}' wide=${nc.wide} cont=${nc.continuation}${marker}`,\n )\n }\n const msg =\n `STRICT_OUTPUT char mismatch at (${x},${y}): ` +\n `incremental='${incr.char}' fresh='${fresh.char}'\\n` +\n ` prev buffer cell: char='${prevCell.char}' bg=${prevCell.bg} wide=${prevCell.wide} cont=${prevCell.continuation}\\n` +\n ` next buffer cell: char='${nextCell.char}' bg=${nextCell.bg} wide=${nextCell.wide} cont=${nextCell.continuation}\\n` +\n ` incr row: ${incrRow}\\n` +\n ` fresh row: ${freshRow}\\n` +\n ` prev row: ${prevRow}\\n` +\n `Wide/cont cells on row ${y} (next buffer): ${_dumpRowWideCells(next, y)}\\n` +\n `Wide/cont cells on row ${y} (prev buffer): ${_dumpRowWideCells(prev, y)}\\n` +\n `Column detail around mismatch:\\n${colDetails.join(\"\\n\")}`\n const artifactDir = captureStrictFailureArtifacts({\n source: \"STRICT_OUTPUT\",\n errorMessage: msg,\n prev,\n next,\n incrOutput,\n freshOutput: freshNext,\n ctx,\n renderFull,\n })\n const fullMsg = `${msg}\\n Artifacts: ${artifactDir}`\n log.error?.(fullMsg)\n throw new IncrementalRenderMismatchError(fullMsg)\n }\n\n // Check styles\n const diffs: string[] = []\n if (!sgrColorEquals(incr.fg, fresh.fg)) diffs.push(`fg: ${formatColor(incr.fg)} vs ${formatColor(fresh.fg)}`)\n if (!sgrColorEquals(incr.bg, fresh.bg)) diffs.push(`bg: ${formatColor(incr.bg)} vs ${formatColor(fresh.bg)}`)\n if (incr.bold !== fresh.bold) diffs.push(`bold: ${incr.bold} vs ${fresh.bold}`)\n if (incr.dim !== fresh.dim) diffs.push(`dim: ${incr.dim} vs ${fresh.dim}`)\n if (incr.italic !== fresh.italic) diffs.push(`italic: ${incr.italic} vs ${fresh.italic}`)\n if (incr.underline !== fresh.underline) diffs.push(`underline: ${incr.underline} vs ${fresh.underline}`)\n if (incr.inverse !== fresh.inverse) diffs.push(`inverse: ${incr.inverse} vs ${fresh.inverse}`)\n if (incr.strikethrough !== fresh.strikethrough)\n diffs.push(`strikethrough: ${incr.strikethrough} vs ${fresh.strikethrough}`)\n\n if (diffs.length > 0) {\n const msg =\n `STRICT_OUTPUT style mismatch at (${x},${y}) char='${incr.char}': ` +\n diffs.join(\", \") +\n `\\n incremental: fg=${formatColor(incr.fg)} bg=${formatColor(incr.bg)} bold=${incr.bold} dim=${incr.dim}` +\n `\\n fresh: fg=${formatColor(fresh.fg)} bg=${formatColor(fresh.bg)} bold=${fresh.bold} dim=${fresh.dim}`\n const artifactDir2 = captureStrictFailureArtifacts({\n source: \"STRICT_OUTPUT\",\n errorMessage: msg,\n prev,\n next,\n incrOutput,\n freshOutput: freshNext,\n ctx,\n renderFull,\n })\n throw new IncrementalRenderMismatchError(`${msg}\\n Artifacts: ${artifactDir2}`)\n }\n }\n }\n}\n\n// =============================================================================\n// Accumulated Output Verification\n// =============================================================================\n\n/**\n * Verify that the accumulated output from all frames produces the same\n * terminal state as a fresh render of the current buffer.\n * Catches compounding errors across multiple render frames.\n */\nexport function verifyAccumulatedOutput(\n currentBuffer: TerminalBuffer,\n ctx: OutputContext,\n accState: AccumulateState,\n renderFull: BufferToAnsiFn,\n): void {\n const w = accState.accumulateWidth\n const h = accState.accumulateHeight\n // Replay all accumulated output (first render + all incremental updates)\n const screenAccumulated = replayAnsiWithStyles(w, h, accState.accumulatedAnsi, ctx)\n // Replay fresh render of current buffer\n const freshOutput = renderFull(currentBuffer, ctx)\n const screenFresh = replayAnsiWithStyles(w, h, freshOutput, ctx)\n\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n const accum = screenAccumulated[y]![x]!\n const fresh = screenFresh[y]![x]!\n\n if (accum.char !== fresh.char) {\n const msg =\n `SILVERY_STRICT_ACCUMULATE char mismatch at (${x},${y}) after ${accState.accumulateFrameCount} frames: ` +\n `accumulated='${accum.char}' fresh='${fresh.char}'`\n const dir = captureStrictFailureArtifacts({\n source: \"STRICT_ACCUMULATE\",\n errorMessage: msg,\n next: currentBuffer,\n incrOutput: accState.accumulatedAnsi,\n freshOutput,\n ctx,\n frameCount: accState.accumulateFrameCount,\n renderFull,\n })\n log.error?.(`${msg}\\n Artifacts: ${dir}`)\n throw new IncrementalRenderMismatchError(`${msg}\\n Artifacts: ${dir}`)\n }\n\n const diffs: string[] = []\n if (!sgrColorEquals(accum.fg, fresh.fg)) diffs.push(`fg: ${formatColor(accum.fg)} vs ${formatColor(fresh.fg)}`)\n if (!sgrColorEquals(accum.bg, fresh.bg)) diffs.push(`bg: ${formatColor(accum.bg)} vs ${formatColor(fresh.bg)}`)\n if (accum.bold !== fresh.bold) diffs.push(`bold: ${accum.bold} vs ${fresh.bold}`)\n if (accum.dim !== fresh.dim) diffs.push(`dim: ${accum.dim} vs ${fresh.dim}`)\n if (accum.italic !== fresh.italic) diffs.push(`italic: ${accum.italic} vs ${fresh.italic}`)\n if (accum.underline !== fresh.underline) diffs.push(`underline: ${accum.underline} vs ${fresh.underline}`)\n if (accum.inverse !== fresh.inverse) diffs.push(`inverse: ${accum.inverse} vs ${fresh.inverse}`)\n if (accum.strikethrough !== fresh.strikethrough)\n diffs.push(`strikethrough: ${accum.strikethrough} vs ${fresh.strikethrough}`)\n\n if (diffs.length > 0) {\n const msg =\n `SILVERY_STRICT_ACCUMULATE style mismatch at (${x},${y}) char='${accum.char}' after ${accState.accumulateFrameCount} frames: ` +\n diffs.join(\", \")\n const dir2 = captureStrictFailureArtifacts({\n source: \"STRICT_ACCUMULATE\",\n errorMessage: msg,\n next: currentBuffer,\n freshOutput,\n ctx,\n frameCount: accState.accumulateFrameCount,\n renderFull,\n })\n log.error?.(`${msg}\\n Artifacts: ${dir2}`)\n throw new IncrementalRenderMismatchError(`${msg}\\n Artifacts: ${dir2}`)\n }\n }\n }\n}\n\n// =============================================================================\n// SILVERY_STRICT_TERMINAL: Independent xterm.js emulator verification\n// =============================================================================\n\n/** Lazily loaded termless factories — avoids import cost when STRICT_TERMINAL is off. */\nlet _createTerminal: typeof import(\"@termless/core\").createTerminal | null = null\nlet _createXtermBackend: typeof import(\"@termless/xtermjs\").createXtermBackend | null = null\nlet _createGhosttyBackend: typeof import(\"@termless/ghostty\").createGhosttyBackend | null = null\nlet _ghosttyInitPromise: Promise<void> | null = null\n\nfunction loadTermless(): {\n createTerminal: typeof import(\"@termless/core\").createTerminal\n createXtermBackend: typeof import(\"@termless/xtermjs\").createXtermBackend\n} {\n if (!_createTerminal || !_createXtermBackend) {\n _createTerminal = require(\"@termless/core\").createTerminal\n _createXtermBackend = require(\"@termless/xtermjs\").createXtermBackend\n }\n return { createTerminal: _createTerminal!, createXtermBackend: _createXtermBackend! }\n}\n\nfunction loadGhosttyBackend(): typeof import(\"@termless/ghostty\").createGhosttyBackend {\n if (!_createGhosttyBackend) {\n const mod = require(\"@termless/ghostty\")\n _createGhosttyBackend = mod.createGhosttyBackend\n // Start async WASM init — first call may block on this\n if (!_ghosttyInitPromise) {\n _ghosttyInitPromise = mod.initGhostty()\n }\n }\n return _createGhosttyBackend!\n}\n\n/**\n * Initialize the terminal verify state: create persistent terminal emulators\n * and feed the initial full render ANSI output.\n */\nexport function initTerminalVerifyState(\n state: TerminalVerifyState,\n width: number,\n height: number,\n initialAnsi: string,\n): void {\n // Close any existing terminals from a previous run\n if (state.terminal) void state.terminal.close()\n if (state.ghosttyTerminal) void state.ghosttyTerminal.close()\n\n // Create xterm.js terminal if requested\n if (state.backends.includes(\"xterm\")) {\n const { createTerminal, createXtermBackend } = loadTermless()\n state.terminal = createTerminal({ backend: createXtermBackend(), cols: width, rows: height })\n state.terminal.feed(initialAnsi)\n } else {\n state.terminal = null\n }\n\n // Create Ghostty terminal if requested\n if (state.backends.includes(\"ghostty\")) {\n const { createTerminal } = loadTermless()\n const createGhostty = loadGhosttyBackend()\n state.ghosttyTerminal = createTerminal({ backend: createGhostty(), cols: width, rows: height })\n state.ghosttyTerminal.feed(initialAnsi)\n } else {\n state.ghosttyTerminal = null\n }\n\n state.width = width\n state.height = height\n state.frameCount = 0\n}\n\n/**\n * Verify that the cumulative incremental ANSI output (fed through a persistent\n * xterm.js terminal) produces the same visible state as a fresh full render\n * (fed through a second, throwaway xterm.js terminal).\n *\n * This is the ONE invariant that catches both OSC 66 and buffer overflow bugs:\n * \"For a given terminal capability profile and viewport size, the actual\n * terminal state after incremental rendering must equal the actual terminal\n * state after a fresh full redraw\" — checked in an independent emulator.\n */\nexport function verifyTerminalEquivalence(\n state: TerminalVerifyState,\n incrOutput: string,\n nextBuffer: TerminalBuffer,\n ctx: OutputContext,\n renderFull: BufferToAnsiFn,\n): void {\n // Buffer dimensions may change between frames (test renderers use content-sized\n // buffers). When dimensions change, the persistent terminal can't be meaningfully\n // compared — CUP commands and scrolling behave differently at different sizes.\n // Reinitialize the persistent terminal with a fresh render at the new dimensions.\n if (nextBuffer.width !== state.width || nextBuffer.height !== state.height) {\n const freshAnsi = renderFull(nextBuffer, ctx)\n initTerminalVerifyState(state, nextBuffer.width, nextBuffer.height, freshAnsi)\n state.frameCount++\n return\n }\n\n const freshAnsi = renderFull(nextBuffer, ctx)\n\n // Verify xterm.js terminal\n if (state.terminal) {\n state.terminal.feed(incrOutput)\n const { createTerminal, createXtermBackend } = loadTermless()\n const freshTerm = createTerminal({\n backend: createXtermBackend(),\n cols: state.width,\n rows: state.height,\n })\n freshTerm.feed(freshAnsi)\n try {\n compareTerminals(state.terminal, freshTerm, state, \"xterm\")\n } catch (e) {\n if (e instanceof IncrementalRenderMismatchError) {\n const dir = captureStrictFailureArtifacts({\n source: \"STRICT_TERMINAL[xterm]\",\n errorMessage: e.message,\n next: nextBuffer,\n incrOutput,\n freshOutput: freshAnsi,\n ctx,\n frameCount: state.frameCount,\n renderFull,\n })\n throw new IncrementalRenderMismatchError(`${e.message}\\n Artifacts: ${dir}`)\n }\n throw e\n } finally {\n void freshTerm.close()\n }\n }\n\n // Verify Ghostty terminal\n if (state.ghosttyTerminal) {\n state.ghosttyTerminal.feed(incrOutput)\n const { createTerminal } = loadTermless()\n const createGhostty = loadGhosttyBackend()\n const freshTerm = createTerminal({\n backend: createGhostty(),\n cols: state.width,\n rows: state.height,\n })\n freshTerm.feed(freshAnsi)\n try {\n compareTerminals(state.ghosttyTerminal, freshTerm, state, \"ghostty\")\n } catch (e) {\n if (e instanceof IncrementalRenderMismatchError) {\n const dir = captureStrictFailureArtifacts({\n source: \"STRICT_TERMINAL[ghostty]\",\n errorMessage: e.message,\n next: nextBuffer,\n incrOutput,\n freshOutput: freshAnsi,\n ctx,\n frameCount: state.frameCount,\n renderFull,\n })\n throw new IncrementalRenderMismatchError(`${e.message}\\n Artifacts: ${dir}`)\n }\n throw e\n } finally {\n void freshTerm.close()\n }\n }\n}\n\n/** Compare two terminal states cell-by-cell. Throws IncrementalRenderMismatchError on divergence. */\nfunction compareTerminals(\n incrTerm: import(\"@termless/core\").Terminal,\n freshTerm: import(\"@termless/core\").Terminal,\n state: TerminalVerifyState,\n backendName: string,\n): void {\n const w = state.width\n const h = state.height\n const prefix = `SILVERY_STRICT_TERMINAL[${backendName}]`\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n const incrCell = incrTerm.getCell(y, x)\n const freshCell = freshTerm.getCell(y, x)\n const incrChar = incrCell.char || \" \"\n const freshChar = freshCell.char || \" \"\n\n if (incrChar !== freshChar) {\n const incrRow = Array.from({ length: w }, (_, cx) => incrTerm.getCell(y, cx).char || \" \").join(\"\")\n const freshRow = Array.from({ length: w }, (_, cx) => freshTerm.getCell(y, cx).char || \" \").join(\"\")\n const msg =\n `${prefix} char mismatch at (${x},${y}) frame ${state.frameCount}: ` +\n `incremental='${incrChar}' fresh='${freshChar}'\\n` +\n ` incr row: ${incrRow.trimEnd()}\\n` +\n ` fresh row: ${freshRow.trimEnd()}`\n log.error?.(msg)\n throw new IncrementalRenderMismatchError(msg)\n }\n\n if (!rgbEquals(incrCell.fg, freshCell.fg)) {\n const msg =\n `${prefix} fg color mismatch at (${x},${y}) char='${incrChar}' frame ${state.frameCount}: ` +\n `incremental=${formatRgb(incrCell.fg)} fresh=${formatRgb(freshCell.fg)}`\n log.error?.(msg)\n throw new IncrementalRenderMismatchError(msg)\n }\n\n if (!rgbEquals(incrCell.bg, freshCell.bg)) {\n const msg =\n `${prefix} bg color mismatch at (${x},${y}) char='${incrChar}' frame ${state.frameCount}: ` +\n `incremental=${formatRgb(incrCell.bg)} fresh=${formatRgb(freshCell.bg)}`\n log.error?.(msg)\n throw new IncrementalRenderMismatchError(msg)\n }\n\n const attrDiffs: string[] = []\n if (incrCell.bold !== freshCell.bold) attrDiffs.push(`bold: ${incrCell.bold} vs ${freshCell.bold}`)\n if (incrCell.dim !== freshCell.dim) attrDiffs.push(`dim: ${incrCell.dim} vs ${freshCell.dim}`)\n if (incrCell.italic !== freshCell.italic) attrDiffs.push(`italic: ${incrCell.italic} vs ${freshCell.italic}`)\n if (incrCell.inverse !== freshCell.inverse) attrDiffs.push(`inverse: ${incrCell.inverse} vs ${freshCell.inverse}`)\n if (incrCell.strikethrough !== freshCell.strikethrough)\n attrDiffs.push(`strikethrough: ${incrCell.strikethrough} vs ${freshCell.strikethrough}`)\n\n if (attrDiffs.length > 0) {\n const msg =\n `${prefix} attr mismatch at (${x},${y}) char='${incrChar}' frame ${state.frameCount}: ` + attrDiffs.join(\", \")\n log.error?.(msg)\n throw new IncrementalRenderMismatchError(msg)\n }\n }\n }\n}\n\n/** Compare two RGB color values (from termless Cell). */\nfunction rgbEquals(\n a: { r: number; g: number; b: number } | null,\n b: { r: number; g: number; b: number } | null,\n): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.r === b.r && a.g === b.g && a.b === b.b\n}\n\n/** Format an RGB value for diagnostic messages. */\nfunction formatRgb(c: { r: number; g: number; b: number } | null): string {\n if (c === null) return \"null\"\n return `rgb(${c.r},${c.g},${c.b})`\n}\n\n/** Compare two SGR color values. */\nexport function sgrColorEquals(\n a: number | { r: number; g: number; b: number } | null,\n b: number | { r: number; g: number; b: number } | null,\n): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n if (typeof a === \"number\" || typeof b === \"number\") return a === b\n return a.r === b.r && a.g === b.g && a.b === b.b\n}\n","/**\n * Buffer diffing for the output phase.\n *\n * Compares two TerminalBuffers and returns a list of changed cells via a\n * pre-allocated pool (zero per-frame allocation). Handles dimension changes\n * (growth and shrink) and wide→narrow character transitions.\n */\n\nimport type { TerminalBuffer } from \"../buffer\"\nimport type { CellChange } from \"./types\"\n\n// ============================================================================\n// Pre-allocated diff pool\n// ============================================================================\n\n/**\n * Create a fresh CellChange with empty cell data.\n * Used to populate the pre-allocated pool.\n */\nfunction createEmptyCellChange(): CellChange {\n return {\n x: 0,\n y: 0,\n cell: {\n char: \" \",\n fg: null,\n bg: null,\n underlineColor: null,\n attrs: {},\n wide: false,\n continuation: false,\n hyperlink: undefined,\n },\n }\n}\n\n/** Pre-allocated pool of CellChange objects, reused across frames. */\nconst diffPool: CellChange[] = []\n\n/** Current pool capacity. */\nlet diffPoolCapacity = 0\n\n/**\n * Ensure the diff pool has at least `capacity` entries.\n * Grows the pool if needed; never shrinks.\n */\nfunction ensureDiffPoolCapacity(capacity: number): void {\n if (capacity <= diffPoolCapacity) return\n for (let i = diffPoolCapacity; i < capacity; i++) {\n diffPool.push(createEmptyCellChange())\n }\n diffPoolCapacity = capacity\n}\n\n/**\n * Write cell data from a buffer into a pre-allocated CellChange entry.\n * Uses readCellInto for zero-allocation reads.\n */\nfunction writeCellChange(change: CellChange, x: number, y: number, buffer: TerminalBuffer): void {\n change.x = x\n change.y = y\n buffer.readCellInto(x, y, change.cell)\n}\n\n/**\n * Write empty cell data into a pre-allocated CellChange entry.\n * Used for shrink regions where cells need to be cleared.\n */\nfunction writeEmptyCellChange(change: CellChange, x: number, y: number): void {\n change.x = x\n change.y = y\n const cell = change.cell\n cell.char = \" \"\n cell.fg = null\n cell.bg = null\n cell.underlineColor = null\n // Reset attrs fields\n const attrs = cell.attrs\n attrs.bold = undefined\n attrs.dim = undefined\n attrs.italic = undefined\n attrs.underline = undefined\n attrs.underlineStyle = undefined\n attrs.blink = undefined\n attrs.inverse = undefined\n attrs.hidden = undefined\n attrs.strikethrough = undefined\n cell.wide = false\n cell.continuation = false\n cell.hyperlink = undefined\n}\n\n/**\n * Diff result: pool reference + count (avoids per-frame array allocation).\n */\nexport interface DiffResult {\n pool: CellChange[]\n count: number\n}\n\n/** Reusable diff result object (avoids allocating a new one per frame). */\nconst diffResult: DiffResult = { pool: diffPool, count: 0 }\n\n/**\n * Diff two buffers and return changes via pre-allocated pool.\n *\n * Optimization: Uses a pre-allocated pool of CellChange objects to avoid\n * allocating new objects per changed cell. Uses readCellInto for\n * zero-allocation cell reads. The pool grows as needed but is reused\n * between frames. Returns a pool+count pair instead of slicing the array.\n */\nexport function diffBuffers(prev: TerminalBuffer, next: TerminalBuffer): DiffResult {\n // Ensure pool is large enough for worst case (all cells changed).\n // Wide→narrow transitions emit an extra change for the continuation cell,\n // so worst case is 1.5x (every other cell could be a wide→narrow transition).\n const cells = Math.max(prev.width, next.width) * Math.max(prev.height, next.height)\n const maxChanges = cells + (cells >> 1) // 1.5x\n ensureDiffPoolCapacity(maxChanges)\n\n let changeCount = 0\n\n // Dimension mismatch means we need to re-render everything visible\n const height = Math.min(prev.height, next.height)\n const width = Math.min(prev.width, next.width)\n\n // Use dirty row bounding box to narrow the scan range.\n // If no rows are dirty, minDirtyRow is -1 and the loop body is skipped.\n const startRow = next.minDirtyRow === -1 ? 0 : next.minDirtyRow\n const endRow = next.maxDirtyRow === -1 ? -1 : Math.min(next.maxDirtyRow, height - 1)\n\n for (let y = startRow; y <= endRow; y++) {\n // Skip individual clean rows within the bounding box\n if (!next.isRowDirty(y)) continue\n\n // Fast row-level pre-check: if all packed metadata, chars, AND Map-based\n // extras (true colors, underline colors, hyperlinks) match, skip per-cell\n // comparison entirely. This catches rows marked dirty by fill() or\n // scrollRegion() that didn't actually change content.\n // NOTE: rowExtrasEquals is essential — rowMetadataEquals only checks packed\n // flags (e.g., \"has true color fg\"), not the actual RGB values in the Maps.\n if (next.rowMetadataEquals(y, prev) && next.rowCharsEquals(y, prev) && next.rowExtrasEquals(y, prev)) continue\n\n for (let x = 0; x < width; x++) {\n // Use buffer's optimized cellEquals which compares packed metadata first\n if (!next.cellEquals(x, y, prev)) {\n writeCellChange(diffPool[changeCount]!, x, y, next)\n changeCount++\n\n // Wide char transition: when prev had a wide char and next doesn't,\n // we must also emit the continuation position (x+1) as a change.\n // The terminal's state at x+1 contains the second half of the wide\n // char, but the buffer may show x+1 as \"unchanged\" (both prev and\n // next are ' '). Without this explicit change, changesToAnsi skips\n // x+1 and the terminal retains the wide char remnant, causing\n // cursor drift.\n if (x + 1 < width && prev.isCellWide(x, y) && !next.isCellWide(x, y)) {\n writeCellChange(diffPool[changeCount]!, x + 1, y, next)\n changeCount++\n }\n }\n }\n }\n\n // Handle size growth: add all cells in new areas.\n // Width growth covers the right strip (x >= prev.width) for ALL rows.\n // Height growth covers the bottom strip (y >= prev.height) but only up to\n // prev.width to avoid double-counting the corner with width growth.\n const widthGrew = next.width > prev.width\n if (widthGrew) {\n for (let y = 0; y < next.height; y++) {\n for (let x = prev.width; x < next.width; x++) {\n writeCellChange(diffPool[changeCount]!, x, y, next)\n changeCount++\n }\n }\n }\n if (next.height > prev.height) {\n // When width also grew, only iterate x=0..prev.width (the rest was\n // already covered by width growth above). Otherwise iterate full width.\n const xEnd = widthGrew ? prev.width : next.width\n for (let y = prev.height; y < next.height; y++) {\n for (let x = 0; x < xEnd; x++) {\n writeCellChange(diffPool[changeCount]!, x, y, next)\n changeCount++\n }\n }\n }\n\n // Handle size shrink: clear cells in old-but-not-new areas.\n // Width shrink covers x >= next.width for the shared height.\n // Height shrink covers y >= next.height but only up to next.width when\n // width also shrank, to avoid double-counting the corner.\n const widthShrank = prev.width > next.width\n if (widthShrank) {\n for (let y = 0; y < height; y++) {\n for (let x = next.width; x < prev.width; x++) {\n writeEmptyCellChange(diffPool[changeCount]!, x, y)\n changeCount++\n }\n }\n }\n if (prev.height > next.height) {\n // When width also shrank, the corner (x >= next.width, y >= next.height)\n // was NOT covered by width shrink (which only iterates y < height =\n // min(prev.height, next.height) = next.height). So iterate full prev.width.\n for (let y = next.height; y < prev.height; y++) {\n for (let x = 0; x < prev.width; x++) {\n writeEmptyCellChange(diffPool[changeCount]!, x, y)\n changeCount++\n }\n }\n }\n\n if (changeCount > maxChanges) {\n throw new Error(\n `diffBuffers: changeCount ${changeCount} exceeds pool capacity ${maxChanges} ` +\n `(prev ${prev.width}x${prev.height}, next ${next.width}x${next.height})`,\n )\n }\n\n diffResult.pool = diffPool\n diffResult.count = changeCount\n return diffResult\n}\n","/**\n * Phase 4: Output Phase\n *\n * Diff two buffers and produce minimal ANSI output.\n *\n * Debug: Set SILVERY_DEBUG_OUTPUT=1 to log diff changes and ANSI sequences.\n */\n\nimport {\n type Style,\n type TerminalBuffer,\n type UnderlineStyle,\n VISIBLE_SPACE_ATTR_MASK,\n colorEquals,\n createMutableCell,\n hasActiveAttrs,\n isDefaultBg,\n styleEquals,\n} from \"../buffer\"\nimport { fgColorCode, bgColorCode } from \"../ansi/sgr-codes\"\nimport type { CursorState } from \"@silvery/ag-react/hooks/useCursor\"\nimport { IncrementalRenderMismatchError } from \"../errors\"\nimport { textSized } from \"../text-sizing\"\nimport { graphemeWidth, isTextSizingEnabled } from \"../unicode\"\nimport type { CellChange } from \"./types\"\nimport { createLogger } from \"loggily\"\nimport {\n replayAnsiWithStyles,\n captureStrictFailureArtifacts as _captureArtifacts,\n verifyOutputEquivalence as _verifyOutputEquivalence,\n verifyAccumulatedOutput as _verifyAccumulatedOutput,\n verifyTerminalEquivalence as _verifyTerminalEquivalence,\n initTerminalVerifyState,\n createTerminalVerifyState,\n strictTerminalBackends,\n sgrColorEquals,\n formatColor,\n type AccumulateState,\n type TerminalVerifyState,\n} from \"./output-verify\"\n\nconst log = createLogger(\"silvery:output\")\n\nconst _env = typeof process !== \"undefined\" ? process.env : ({} as Record<string, string | undefined>)\nconst DEBUG_OUTPUT = !!_env.SILVERY_DEBUG_OUTPUT\nconst FULL_RENDER = !!_env.SILVERY_FULL_RENDER\nconst DEBUG_CAPTURE = !!_env.SILVERY_DEBUG_CAPTURE\nconst CAPTURE_RAW = !!_env.SILVERY_CAPTURE_RAW\nlet _debugFrameCount = 0\nlet _captureRawFrameCount = 0\n\n// Re-export verification functions for external consumers (test files import from output-phase)\nexport { replayAnsiWithStyles } from \"./output-verify\"\nexport type { StyledCell } from \"./output-verify\"\n// Wrap captureStrictFailureArtifacts to bind bufferToAnsi (avoids circular dep in output-verify.ts)\nexport function captureStrictFailureArtifacts(opts: Parameters<typeof _captureArtifacts>[0]): string {\n return _captureArtifacts({ ...opts, renderFull: opts.renderFull ?? bufferToAnsi })\n}\n\n// ============================================================================\n// Terminal Capability Flags (suppress unsupported SGR codes)\n// ============================================================================\n\nimport type { TerminalCaps } from \"../terminal-caps\"\n\n/**\n * @deprecated Use createOutputPhase(caps) instead. This is a no-op.\n */\nexport function setOutputCaps(\n _caps: Partial<Pick<TerminalCaps, \"underlineStyles\" | \"underlineColor\" | \"colorLevel\">>,\n): void {\n // No-op: use createOutputPhase(caps) instead\n}\n\n// ============================================================================\n// Output Phase Factory (per-term instance, no globals)\n// ============================================================================\n\n/** Output-phase capabilities type. */\nexport type OutputCaps = Pick<TerminalCaps, \"underlineStyles\" | \"underlineColor\" | \"colorLevel\">\n\n// ============================================================================\n// Output Context (per-instance state, replaces module-level globals)\n// ============================================================================\n\n/**\n * Per-instance output context containing terminal capabilities, measurer,\n * caches, and per-frame viewport state. Threaded through internal functions\n * to eliminate module-level mutable state and prevent \"forgot to thread\n * parameter\" failures. Caches are per-context because SGR output depends on caps.\n *\n * Per-frame fields (mode, termRows) are set by the caller before each frame:\n * - createOutputPhase() closure sets them in scopedOutputPhase()\n * - bare outputPhase() sets them from its parameters\n */\nexport interface OutputContext {\n readonly caps: OutputCaps\n readonly measurer: OutputMeasurer | null\n readonly sgrCache: Map<string, string>\n readonly transitionCache: Map<string, string>\n /** Render mode for the current frame. Set per-frame by the output phase entry point. */\n mode: \"fullscreen\" | \"inline\"\n /** Terminal height in rows for the current frame. Caps output to prevent\n * scrollback corruption when content exceeds terminal height. Set per-frame. */\n termRows: number | undefined\n}\n\n/** Default context used by bare outputPhase() calls (full capability support, no measurer). */\nconst defaultContext: OutputContext = {\n caps: {\n underlineStyles: true,\n underlineColor: true,\n colorLevel: \"truecolor\",\n },\n measurer: null,\n sgrCache: new Map(),\n transitionCache: new Map(),\n mode: \"fullscreen\",\n termRows: undefined,\n}\n\n/** Output phase function signature. */\nexport interface OutputPhaseFn {\n (\n prev: TerminalBuffer | null,\n next: TerminalBuffer,\n mode?: \"fullscreen\" | \"inline\",\n scrollbackOffset?: number,\n termRows?: number,\n cursorPos?: CursorState | null,\n ): string\n /** Reset inline cursor state. Used by useScrollback to clear cursor tracking on resize. */\n resetInlineState?: () => void\n /** Get the current inline cursor row (relative to render region start). -1 if unknown. */\n getInlineCursorRow?: () => number\n /** Promote frozen content to scrollback. Called by useScrollback to queue\n * frozen content for the next render — the output phase writes frozen + live\n * content in a single target.write() to avoid flicker. */\n promoteScrollback?: (frozenContent: string, frozenLineCount: number) => void\n}\n\n// ============================================================================\n// Output Phase Measurer (module-local, avoids dual-module-loading issues)\n// ============================================================================\n// bun can load the same .ts file via symlink + real path as separate module\n// instances. This means `_scopedMeasurer` set by `runWithMeasurer()` in\n// pipeline/index.ts's instance of unicode.ts is invisible to output-phase.ts's\n// instance. We avoid this by closing over the measurer in createOutputPhase()\n// and setting a module-local variable that all output-phase functions read.\n\nexport interface OutputMeasurer {\n graphemeWidth(grapheme: string): number\n readonly textSizingEnabled: boolean\n}\n\n/** Get grapheme width using the output context measurer (falls back to unicode.ts import). */\nfunction outputGraphemeWidth(g: string, ctx: OutputContext): number {\n return ctx.measurer ? ctx.measurer.graphemeWidth(g) : graphemeWidth(g)\n}\n\n/** Check if text sizing is enabled using the output context measurer. */\nfunction outputTextSizingEnabled(ctx: OutputContext): boolean {\n return ctx.measurer ? ctx.measurer.textSizingEnabled : isTextSizingEnabled()\n}\n\n/**\n * Create a scoped output phase that uses specific terminal capabilities.\n *\n * @param caps - Terminal capabilities for SGR code generation\n * @param measurer - Width measurer for graphemeWidth/textSizingEnabled (avoids dual-module-loading issues)\n */\nexport function createOutputPhase(caps: Partial<OutputCaps>, measurer?: OutputMeasurer): OutputPhaseFn {\n // Instance-scoped context — caps, measurer, and caches are all per-instance.\n // mode and termRows are set per-frame in scopedOutputPhase() below.\n // No module-level globals are read or modified.\n const ctx: OutputContext = {\n caps: {\n underlineStyles: caps.underlineStyles ?? true,\n underlineColor: caps.underlineColor ?? true,\n colorLevel: caps.colorLevel ?? \"truecolor\",\n },\n measurer: measurer ?? null,\n sgrCache: new Map(),\n transitionCache: new Map(),\n mode: \"fullscreen\",\n termRows: undefined,\n }\n // Instance-scoped inline cursor state — persists across frames for incremental rendering.\n // Each createOutputPhase() call gets its own state, eliminating module-level globals.\n const inlineState = createInlineCursorState()\n\n // Instance-scoped accumulated ANSI state for SILVERY_STRICT_ACCUMULATE verification.\n // Tracks per-instance verification state rather than using module-level globals.\n const accState = {\n accumulatedAnsi: \"\",\n accumulateWidth: 0,\n accumulateHeight: 0,\n accumulateFrameCount: 0,\n }\n\n // Instance-scoped terminal verify state for SILVERY_STRICT_TERMINAL verification.\n const tvState = createTerminalVerifyState()\n\n // Pending scrollback promotion — queued by useScrollback, consumed by the next render.\n let pendingPromotion: { frozenContent: string; frozenLineCount: number } | null = null\n\n const fn: OutputPhaseFn = function scopedOutputPhase(\n prev: TerminalBuffer | null,\n next: TerminalBuffer,\n mode: \"fullscreen\" | \"inline\" = \"fullscreen\",\n scrollbackOffset = 0,\n termRows?: number,\n cursorPos?: CursorState | null,\n ): string {\n // Set per-frame viewport state on the context — internal functions read from ctx\n // instead of accepting mode/termRows as separate parameters.\n ctx.mode = mode\n ctx.termRows = termRows\n // Handle scrollback promotion: write frozen content + live content in one pass.\n if (pendingPromotion && mode === \"inline\") {\n const promo = pendingPromotion\n pendingPromotion = null\n return handleScrollbackPromotion(inlineState, promo.frozenContent, promo.frozenLineCount, next, cursorPos, ctx)\n }\n return outputPhase(prev, next, mode, scrollbackOffset, termRows, cursorPos, inlineState, ctx, accState, tvState)\n }\n\n fn.resetInlineState = () => {\n Object.assign(inlineState, createInlineCursorState())\n inlineState.forceFirstRender = true\n // Clear any queued promotion — the resize handler re-emits all frozen items\n // directly, so any pending promotion from the freeze effect is redundant.\n // Without this, freeze+resize in the same frame causes duplicate frozen content.\n pendingPromotion = null\n }\n\n fn.getInlineCursorRow = () => inlineState.prevCursorRow\n\n fn.promoteScrollback = (frozenContent: string, frozenLineCount: number) => {\n if (pendingPromotion) {\n pendingPromotion.frozenContent += frozenContent\n pendingPromotion.frozenLineCount += frozenLineCount\n } else {\n pendingPromotion = { frozenContent, frozenLineCount }\n }\n }\n\n return fn\n}\n\n/**\n * Handle scrollback promotion: write frozen content + live content in a single output string.\n *\n * Instead of useScrollback writing directly to stdout (which blanks the screen and\n * causes flicker), this function builds one output string that:\n * 1. Moves cursor to the render region start (no clearing)\n * 2. Writes frozen content (each line overwrites in-place via \\x1b[K])\n * 3. Writes live content via bufferToAnsi (also with per-line \\x1b[K])\n * 4. Erases any leftover lines from the previous frame\n * 5. Positions the hardware cursor\n *\n * Result: a single target.write() with no blanking — no flicker.\n */\nfunction handleScrollbackPromotion(\n state: InlineCursorState,\n frozenContent: string,\n frozenLineCount: number,\n next: TerminalBuffer,\n cursorPos: CursorState | null | undefined,\n ctx: OutputContext,\n): string {\n const { termRows } = ctx\n // 1. Move cursor to render region start\n let output = \"\"\n if (state.prevCursorRow > 0) {\n output += `\\x1b[${state.prevCursorRow}A`\n }\n output += \"\\r\" // column 0, NO \\x1b[J clear\n\n // 2. Write frozen content (overwrites old content in-place, OSC markers included)\n output += frozenContent\n\n // 3. Write live content via bufferToAnsi (each line has \\x1b[K — no blanking)\n const nextContentLines = findLastContentLine(next) + 1\n const maxOutputLines = termRows != null ? Math.min(nextContentLines, termRows) : nextContentLines\n output += bufferToAnsi(next, ctx, maxOutputLines)\n\n // Total lines on-screen: frozen + live. The terminal may scroll if this exceeds\n // termRows, naturally pushing frozen lines into scrollback. No padding needed —\n // we track ALL on-screen lines so the next render can overwrite them cleanly.\n const totalOnScreen = frozenLineCount + maxOutputLines\n\n // 4. Erase leftover lines at bottom (if content shrank)\n const oldTotalLines = state.prevOutputLines\n const nextLastLine = totalOnScreen - 1\n const terminalScroll = termRows != null ? Math.max(0, totalOnScreen - termRows) : 0\n const lastOccupied = Math.max(oldTotalLines - 1 - terminalScroll, 0)\n if (lastOccupied > nextLastLine) {\n for (let y = nextLastLine + 1; y <= lastOccupied; y++) {\n output += \"\\n\\r\\x1b[K\"\n }\n const up = lastOccupied - nextLastLine\n if (up > 0) output += `\\x1b[${up}A`\n }\n\n // 5. Cursor suffix (hardware cursor positioning)\n // Cursor is at the end of live content (row totalOnScreen - 1 relative to\n // render region start). inlineCursorSuffix moves it to the useCursor position\n // within the live content area.\n output += inlineCursorSuffix(cursorPos ?? null, next, ctx)\n\n // 6. Update tracking for subsequent incremental renders.\n // Track cursor position and output lines relative to the LIVE content only.\n // Frozen content has been written as raw ANSI above the live content and is\n // now \"owned\" by the terminal — it stays on screen until natural scrolling\n // pushes it into terminal scrollback. The next render only needs to cursor-up\n // to the start of the live content area, not past the frozen content.\n //\n // This is critical for real terminals where pre-existing content (shell prompt,\n // direnv output) sits above the app. If prevCursorRow included frozenLineCount,\n // the cursor-up would overshoot into the shell prompt area, clearing it.\n let startLine = 0\n if (termRows != null && nextContentLines > termRows) startLine = nextContentLines - termRows\n state.prevBuffer = next\n\n // Cursor row within the LIVE content area only (not including frozen lines).\n // inlineCursorSuffix already positioned the cursor within the live content.\n if (cursorPos?.visible) {\n const visibleRow = cursorPos.y - startLine\n state.prevCursorRow = visibleRow >= 0 && visibleRow < maxOutputLines ? visibleRow : maxOutputLines - 1\n } else {\n state.prevCursorRow = maxOutputLines - 1\n }\n state.prevOutputLines = maxOutputLines\n\n return output\n}\n\n// These use getters so they can be set after module load (e.g., in test files).\n// SILVERY_STRICT enables buffer + output checks (per-frame), including vt100 output verification.\n// SILVERY_STRICT_ACCUMULATE is separate — it replays ALL frames (O(N²)) and is opt-in only.\n// Note: \"0\" and \"false\" are treated as disabled, consistent with renderer.ts strictMode check.\nfunction isStrictOutput(): boolean {\n if (typeof process === \"undefined\") return false\n const val = process.env.SILVERY_STRICT\n return !!val && val !== \"0\" && val !== \"false\"\n}\nfunction isStrictAccumulate(): boolean {\n if (typeof process === \"undefined\") return false\n const val = process.env.SILVERY_STRICT_ACCUMULATE\n return !!val && val !== \"0\" && val !== \"false\"\n}\n\n/** Default accumulate state used by bare outputPhase() calls. */\nconst defaultAccState: AccumulateState = {\n accumulatedAnsi: \"\",\n accumulateWidth: 0,\n accumulateHeight: 0,\n accumulateFrameCount: 0,\n}\n\n/** Default terminal verify state used by bare outputPhase() calls. */\nconst defaultTerminalVerifyState = createTerminalVerifyState()\n\n// ============================================================================\n// Inline Mode: Inter-frame Cursor Tracking (instance-scoped)\n// ============================================================================\n\n/**\n * Mutable state for inline mode inter-frame cursor tracking.\n * Captured in the createOutputPhase() closure — no module-level globals.\n */\ninterface InlineCursorState {\n /** Row within render region after last inline frame's cursor suffix. -1 = unknown. */\n prevCursorRow: number\n /** Total output lines rendered in last frame. Used to clear old content on resize. */\n prevOutputLines: number\n /** Previous frame's buffer — used for incremental rendering when runtime invalidates (resize). */\n prevBuffer: TerminalBuffer | null\n /** When true, the next inline render treats prev as null (first-render path).\n * Set by resetInlineState() after useScrollback clears and re-emits frozen items. */\n forceFirstRender: boolean\n}\n\n/** Create fresh inline cursor state (unknown position → first call falls back to full render). */\nfunction createInlineCursorState(): InlineCursorState {\n return {\n prevCursorRow: -1,\n prevOutputLines: 0,\n prevBuffer: null,\n forceFirstRender: false,\n }\n}\n\n/**\n * Update cursor tracking after an inline render frame.\n * Records where the terminal cursor ends up after inlineCursorSuffix().\n */\nfunction updateInlineCursorRow(\n state: InlineCursorState,\n cursorPos: CursorState | null | undefined,\n maxOutputLines: number,\n startLine: number,\n): void {\n if (cursorPos?.visible) {\n const visibleRow = cursorPos.y - startLine\n state.prevCursorRow = visibleRow >= 0 && visibleRow < maxOutputLines ? visibleRow : maxOutputLines - 1\n } else {\n // Cursor hidden: cursor stays at end of last content line\n state.prevCursorRow = maxOutputLines - 1\n }\n state.prevOutputLines = maxOutputLines\n}\n\n/**\n * Wrap a cell character in OSC 66 if text sizing is enabled and the cell is\n * wide. OSC 66 tells the terminal to render the character in exactly `width`\n * cells, matching the layout engine's measurement.\n *\n * Previously this only wrapped specific categories (PUA, text-presentation\n * emoji, flag emoji) — a whack-a-mole approach that missed new categories\n * as Unicode evolved. Now wraps ALL wide chars unconditionally: if the buffer\n * says width 2, the terminal is told width 2. CJK chars don't strictly need\n * it (terminals agree on their width), but the ~8-byte overhead per wide char\n * is negligible and eliminates any future width disagreement.\n */\nfunction wrapTextSizing(char: string, wide: boolean, ctx: OutputContext): string {\n if (!wide || !outputTextSizingEnabled(ctx)) return char\n return textSized(char, 2)\n}\n\n// ============================================================================\n// Style Interning + SGR Cache\n// ============================================================================\n\n// SGR caches are now per-OutputContext (see OutputContext interface).\n// This is correct because SGR output depends on caps (underlineStyles,\n// underlineColor), so caches populated under one caps configuration\n// would produce wrong results under a different one.\n\n/**\n * Serialize a Style into a cache key string.\n * Fast path: most styles are simple (256-color or null fg/bg, no true color).\n */\nfunction styleToKey(style: Style): string {\n const fg = style.fg\n const bg = style.bg\n const attrs = style.attrs\n\n // Fast path: common case of simple colors + few attrs\n let key = \"\"\n\n // fg\n if (fg === null) {\n key = \"n\"\n } else if (typeof fg === \"number\") {\n key = `${fg}`\n } else {\n key = `r${fg.r},${fg.g},${fg.b}`\n }\n\n key += \"|\"\n\n // bg\n if (bg === null) {\n key += \"n\"\n } else if (typeof bg === \"number\") {\n key += `${bg}`\n } else {\n key += `r${bg.r},${bg.g},${bg.b}`\n }\n\n // attrs packed as bitmask for speed\n let attrBits = 0\n if (attrs.bold) attrBits |= 1\n if (attrs.dim) attrBits |= 2\n if (attrs.italic) attrBits |= 4\n if (attrs.underline) attrBits |= 8\n if (attrs.inverse) attrBits |= 16\n if (attrs.strikethrough) attrBits |= 32\n if (attrs.blink) attrBits |= 64\n if (attrs.hidden) attrBits |= 128\n\n key += `|${attrBits}`\n\n // Underline style (rare)\n if (attrs.underlineStyle) {\n key += `|u${attrs.underlineStyle}`\n }\n\n // Underline color (rare)\n const ul = style.underlineColor\n if (ul !== null && ul !== undefined) {\n if (typeof ul === \"number\") {\n key += `|l${ul}`\n } else {\n key += `|lr${ul.r},${ul.g},${ul.b}`\n }\n }\n\n // Hyperlink URL (rare)\n if (style.hyperlink) {\n key += `|h${style.hyperlink}`\n }\n\n return key\n}\n\n/**\n * Get the SGR escape string for a style, using the intern cache.\n * Cache hit: O(1) Map lookup + key serialization.\n * Cache miss: builds the SGR string and caches it.\n */\nfunction cachedStyleToAnsi(style: Style, ctx: OutputContext): string {\n const key = styleToKey(style)\n let sgr = ctx.sgrCache.get(key)\n if (sgr !== undefined) return sgr\n sgr = styleToAnsi(style, ctx)\n ctx.sgrCache.set(key, sgr)\n if (ctx.sgrCache.size > 1000) ctx.sgrCache.clear()\n return sgr\n}\n\n/**\n * Compute the minimal SGR transition between two styles.\n *\n * When oldStyle is null (first cell or after reset), falls through to\n * full SGR generation via cachedStyleToAnsi. Otherwise, diffs attribute\n * by attribute and emits only changed SGR codes. Caches the result for\n * each (oldKey, newKey) pair.\n */\nfunction styleTransition(oldStyle: Style | null, newStyle: Style, ctx: OutputContext): string {\n // First cell or after reset — full generation\n if (!oldStyle) return cachedStyleToAnsi(newStyle, ctx)\n\n // Same style — nothing to emit\n if (styleEquals(oldStyle, newStyle)) return \"\"\n\n // Check transition cache\n const oldKey = styleToKey(oldStyle)\n const newKey = styleToKey(newStyle)\n const cacheKey = `${oldKey}\\x00${newKey}`\n const cached = ctx.transitionCache.get(cacheKey)\n if (cached !== undefined) return cached\n\n // Build minimal diff\n const codes: string[] = []\n\n // Check attributes that can only be \"turned off\" via reset or specific off-codes.\n // If an attribute was on and is now off, we need either the off-code or a full reset.\n const oa = oldStyle.attrs\n const na = newStyle.attrs\n\n // Bold and dim share SGR 22 as their off-code, so handle them together\n // to avoid emitting duplicate codes.\n const boldChanged = Boolean(oa.bold) !== Boolean(na.bold)\n const dimChanged = Boolean(oa.dim) !== Boolean(na.dim)\n if (boldChanged || dimChanged) {\n const boldOff = boldChanged && !na.bold\n const dimOff = dimChanged && !na.dim\n if (boldOff || dimOff) {\n // SGR 22 resets both bold and dim\n codes.push(\"22\")\n // Re-enable whichever should stay on\n if (na.bold) codes.push(\"1\")\n if (na.dim) codes.push(\"2\")\n } else {\n // Only turning attributes on\n if (boldChanged && na.bold) codes.push(\"1\")\n if (dimChanged && na.dim) codes.push(\"2\")\n }\n }\n if (Boolean(oa.italic) !== Boolean(na.italic)) {\n codes.push(na.italic ? \"3\" : \"23\")\n }\n\n // Underline: compare both underline flag and underlineStyle\n const oldUl = Boolean(oa.underline)\n const newUl = Boolean(na.underline)\n const oldUlStyle = oa.underlineStyle ?? false\n const newUlStyle = na.underlineStyle ?? false\n if (oldUl !== newUl || oldUlStyle !== newUlStyle) {\n if (!ctx.caps.underlineStyles) {\n // Terminal doesn't support SGR 4:x — fall back to simple SGR 4/24\n codes.push(newUl || na.underlineStyle ? \"4\" : \"24\")\n } else {\n const sgrSub = underlineStyleToSgr(na.underlineStyle)\n if (sgrSub !== null && sgrSub !== 0) {\n codes.push(`4:${sgrSub}`)\n } else if (newUl) {\n codes.push(\"4\")\n } else {\n codes.push(\"24\")\n }\n }\n }\n\n if (Boolean(oa.inverse) !== Boolean(na.inverse)) {\n codes.push(na.inverse ? \"7\" : \"27\")\n }\n if (Boolean(oa.hidden) !== Boolean(na.hidden)) {\n codes.push(na.hidden ? \"8\" : \"28\")\n }\n if (Boolean(oa.strikethrough) !== Boolean(na.strikethrough)) {\n codes.push(na.strikethrough ? \"9\" : \"29\")\n }\n if (Boolean(oa.blink) !== Boolean(na.blink)) {\n codes.push(na.blink ? \"5\" : \"25\")\n }\n\n // Foreground color — stripped at monochrome tier (hierarchy via attrs)\n if (!colorEquals(oldStyle.fg, newStyle.fg)) {\n if (newStyle.fg === null || ctx.caps.colorLevel === \"none\") {\n codes.push(\"39\")\n } else {\n codes.push(fgColorCode(newStyle.fg))\n }\n }\n\n // Background color — stripped at monochrome tier (hierarchy via attrs)\n if (!colorEquals(oldStyle.bg, newStyle.bg)) {\n if (newStyle.bg === null || ctx.caps.colorLevel === \"none\") {\n codes.push(\"49\")\n } else {\n codes.push(bgColorCode(newStyle.bg))\n }\n }\n\n // Underline color (SGR 58/59) — skip for terminals that don't support it\n if (ctx.caps.underlineColor && !colorEquals(oldStyle.underlineColor, newStyle.underlineColor)) {\n if (newStyle.underlineColor === null || newStyle.underlineColor === undefined) {\n // SGR 59 resets underline color\n codes.push(\"59\")\n } else if (typeof newStyle.underlineColor === \"number\") {\n codes.push(`58;5;${newStyle.underlineColor}`)\n } else {\n codes.push(`58;2;${newStyle.underlineColor.r};${newStyle.underlineColor.g};${newStyle.underlineColor.b}`)\n }\n }\n\n // Hyperlink (OSC 8) is handled separately in the render loops, not here.\n\n let result: string\n if (codes.length === 0) {\n // Styles differ but no SGR codes emitted (e.g., hyperlink-only change).\n // Fall back to full generation to be safe.\n result = cachedStyleToAnsi(newStyle, ctx)\n } else {\n result = `\\x1b[${codes.join(\";\")}m`\n }\n\n ctx.transitionCache.set(cacheKey, result)\n if (ctx.transitionCache.size > 1000) ctx.transitionCache.clear()\n return result\n}\n\n/**\n * Map underline style to SGR 4:x subparameter.\n */\nfunction underlineStyleToSgr(style: UnderlineStyle | undefined): number | null {\n switch (style) {\n case false:\n return 0 // SGR 4:0 = no underline\n case \"single\":\n return 1 // SGR 4:1 = single underline\n case \"double\":\n return 2 // SGR 4:2 = double underline\n case \"curly\":\n return 3 // SGR 4:3 = curly underline\n case \"dotted\":\n return 4 // SGR 4:4 = dotted underline\n case \"dashed\":\n return 5 // SGR 4:5 = dashed underline\n default:\n return null // Use simple SGR 4 or no underline\n }\n}\n\n/**\n * Diff two buffers and produce minimal ANSI output.\n *\n * @param prev Previous buffer (null on first render)\n * @param next Current buffer\n * @param mode Render mode: fullscreen or inline\n * @param scrollbackOffset Lines written to stdout between renders (inline mode)\n * @param termRows Terminal height in rows (inline mode) — caps output to prevent\n * scrollback corruption when content exceeds terminal height\n * @returns ANSI escape sequence string\n */\nexport function outputPhase(\n prev: TerminalBuffer | null,\n next: TerminalBuffer,\n mode: \"fullscreen\" | \"inline\" = \"fullscreen\",\n scrollbackOffset = 0,\n termRows?: number,\n cursorPos?: CursorState | null,\n _inlineState?: InlineCursorState,\n _ctx?: OutputContext,\n _accState?: AccumulateState,\n _tvState?: TerminalVerifyState,\n): string {\n // Bare outputPhase() calls use a fresh cursor state each time.\n // prevCursorRow = -1 means incremental rendering always falls back to full render.\n // Instance-scoped state (via createOutputPhase) enables incremental across frames.\n const inlineState = _inlineState ?? createInlineCursorState()\n const ctx = _ctx ?? defaultContext\n const accState = _accState ?? defaultAccState\n\n // Set per-frame viewport state on the context — internal functions read from ctx.\n // For bare outputPhase() calls (no createOutputPhase), this updates defaultContext\n // each call. For scoped calls, ctx.mode/termRows were already set by the closure.\n ctx.mode = mode\n ctx.termRows = termRows\n const tvState = _tvState ?? defaultTerminalVerifyState\n\n // After resetInlineState (e.g., useScrollback cleared and re-emitted frozen items),\n // treat the next render as a first render. The cursor is at a known position\n // (right after the re-emitted frozen items) and prev is stale.\n if (mode === \"inline\" && inlineState.forceFirstRender) {\n inlineState.forceFirstRender = false\n prev = null // may already be null (runtime.invalidate on resize), consume flag regardless\n }\n\n // First render: output entire buffer\n if (!prev) {\n // Accumulate timing for full-render path\n const fullRenderAcc = (globalThis as any).__silvery_bench_output_detail\n if (fullRenderAcc) {\n fullRenderAcc.fullRenderCalls = (fullRenderAcc.fullRenderCalls ?? 0) + 1\n fullRenderAcc.fullRenderCells = (fullRenderAcc.fullRenderCells ?? 0) + next.width * next.height\n }\n // Inline mode resize optimization: if the runtime invalidated prevBuffer (resize)\n // but we have a stored buffer with matching dimensions, use incremental rendering\n // instead of clear+full render. This avoids wiping content when the buffer is unchanged\n // (e.g., content narrower than both old and new terminal widths).\n if (mode === \"inline\" && inlineState.prevBuffer && inlineState.prevCursorRow >= 0) {\n const stored = inlineState.prevBuffer\n if (stored.width === next.width && stored.height === next.height) {\n // Dimensions match — use incremental rendering (skip clear entirely)\n inlineState.prevBuffer = next\n return inlineIncrementalRender(inlineState, stored, next, scrollbackOffset, cursorPos, ctx, tvState)\n }\n }\n\n // Cap output to terminal height to prevent scroll desync.\n // In inline mode: prevents scrollback corruption (cursor-up clamped at row 0).\n // In fullscreen mode: prevents terminal scroll that desynchronizes prevBuffer\n // from actual terminal state, causing ghost pixels on subsequent incremental renders.\n const tFullStart = performance.now()\n const firstOutput = bufferToAnsi(next, ctx, termRows)\n const tFullEnd = performance.now()\n if (fullRenderAcc) {\n fullRenderAcc.fullRenderMs = (fullRenderAcc.fullRenderMs ?? 0) + (tFullEnd - tFullStart)\n fullRenderAcc.fullRenderBytes = (fullRenderAcc.fullRenderBytes ?? 0) + firstOutput.length\n }\n // For inline first render, append cursor positioning and initialize tracking\n if (mode === \"inline\") {\n const firstContentLines = findLastContentLine(next) + 1\n const firstMaxOutput = termRows != null ? Math.min(firstContentLines, termRows) : firstContentLines\n let firstStartLine = 0\n if (termRows != null && firstContentLines > termRows) firstStartLine = firstContentLines - termRows\n\n // Resize: clear the entire visible screen and re-render.\n // Terminal reflow is unpredictable — lines wrap differently based on content,\n // unicode, wrap points. Rather than guessing cursor-up distances, overshoot:\n // ESC[nA is clamped at row 0 of the visible screen (can't touch scrollback),\n // so using termRows is safe. Frozen scrollback content above is preserved.\n let prefix = \"\"\n if (inlineState.prevCursorRow >= 0) {\n const clearDistance = termRows ?? Math.max(inlineState.prevCursorRow, inlineState.prevOutputLines - 1)\n if (clearDistance > 0) {\n prefix += `\\x1b[${clearDistance}A`\n }\n prefix += \"\\r\\x1b[J\" // column 0, clear from cursor to end of screen\n }\n\n inlineState.prevBuffer = next\n updateInlineCursorRow(inlineState, cursorPos, firstMaxOutput, firstStartLine)\n return prefix + firstOutput + inlineCursorSuffix(cursorPos ?? null, next, ctx)\n }\n if (isStrictAccumulate()) {\n accState.accumulatedAnsi = firstOutput\n accState.accumulateWidth = next.width\n accState.accumulateHeight = next.height\n accState.accumulateFrameCount = 0\n }\n if (tvState.backends.length > 0) {\n initTerminalVerifyState(tvState, next.width, next.height, firstOutput)\n }\n if (CAPTURE_RAW) {\n try {\n const fs = require(\"fs\")\n _captureRawFrameCount = 0\n // Write initial render with frame separator\n fs.writeFileSync(\"/tmp/silvery-raw.ansi\", firstOutput)\n fs.writeFileSync(\n \"/tmp/silvery-raw-frames.jsonl\",\n JSON.stringify({\n frame: 0,\n type: \"full\",\n bytes: firstOutput.length,\n width: next.width,\n height: next.height,\n }) + \"\\n\",\n )\n } catch {}\n }\n return firstOutput\n }\n\n // Inline mode: use incremental rendering when safe, fall back to full render.\n if (mode === \"inline\") {\n inlineState.prevBuffer = next\n return inlineIncrementalRender(inlineState, prev, next, scrollbackOffset, cursorPos, ctx, tvState)\n }\n\n // SILVERY_FULL_RENDER: bypass incremental diff, always render full buffer.\n // Use to diagnose garbled rendering — if FULL_RENDER fixes it, the bug\n // is in changesToAnsi (diff → ANSI serialization).\n if (FULL_RENDER) {\n return bufferToAnsi(next, ctx, termRows)\n }\n\n // Dimension change: fall back to full render.\n // When prev and next buffers have different dimensions (e.g., terminal resize\n // without prevBuffer invalidation, or test renderer dimension changes),\n // incremental diff produces CUP sequences targeting positions beyond the\n // current terminal bounds. Terminals clamp out-of-bounds CUP to the last\n // valid row/column, causing stale cells from the diff's shrink-region clears\n // to overwrite valid content at the terminal edge.\n if (prev.width !== next.width || prev.height !== next.height) {\n return bufferToAnsi(next, ctx, termRows)\n }\n\n // Fullscreen mode: diff and emit only changes\n const tDiff0 = performance.now()\n const { pool, count: rawCount } = diffBuffers(prev, next)\n const tDiff1 = performance.now()\n\n // Filter out changes beyond terminal height to prevent CUP targeting rows\n // past the terminal, which causes scrolling and prevBuffer desync.\n let count = rawCount\n if (termRows != null) {\n let writeIdx = 0\n for (let i = 0; i < rawCount; i++) {\n if (pool[i]!.y < termRows) {\n pool[writeIdx++] = pool[i]!\n }\n }\n count = writeIdx\n }\n\n if (DEBUG_OUTPUT) {\n log.error?.(\n `diffBuffers: ${count} changes${rawCount !== count ? ` (${rawCount - count} clamped beyond termRows)` : \"\"}`,\n )\n const debugLimit = Math.min(count, 10)\n for (let i = 0; i < debugLimit; i++) {\n const change = pool[i]!\n log.error?.(` (${change.x},${change.y}): \"${change.cell.char}\"`)\n }\n if (count > 10) {\n log.error?.(` ... and ${count - 10} more`)\n }\n }\n\n if (count === 0) {\n // Accumulate timing even for zero-change frames\n const acc = (globalThis as any).__silvery_bench_output_detail\n if (acc) {\n acc.diffMs += tDiff1 - tDiff0\n acc.calls += 1\n }\n return \"\" // No changes\n }\n\n // Wide characters are handled atomically in changesToAnsi():\n // - Wide char main cells emit the character and advance cursor by 2\n // - Continuation cells are skipped (handled with their main cell)\n // - Orphaned continuation cells (main cell unchanged) trigger a\n // re-emit of the main cell from the buffer\n const tAnsi0 = performance.now()\n const incrOutput = changesToAnsi(pool, count, ctx, next).output\n const tAnsi1 = performance.now()\n\n // Accumulate output-phase sub-timing for benchmarks\n const outputDetailAcc = (globalThis as any).__silvery_bench_output_detail\n if (outputDetailAcc) {\n outputDetailAcc.diffMs += tDiff1 - tDiff0\n outputDetailAcc.ansiMs += tAnsi1 - tAnsi0\n outputDetailAcc.calls += 1\n outputDetailAcc.totalChanges += count\n // Count dirty rows\n let dirtyRowCount = 0\n const minRow = next.minDirtyRow\n const maxRow = next.maxDirtyRow\n if (minRow >= 0) {\n for (let r = minRow; r <= maxRow; r++) {\n if (next.isRowDirty(r)) dirtyRowCount++\n }\n }\n outputDetailAcc.dirtyRows += dirtyRowCount\n outputDetailAcc.outputBytes += incrOutput.length\n }\n\n // Log output sizes when debug or strict-accumulate is enabled\n if (DEBUG_OUTPUT || isStrictAccumulate()) {\n const bytes = Buffer.byteLength(incrOutput)\n try {\n const fs = require(\"fs\")\n fs.appendFileSync(\"/tmp/silvery-sizes.log\", `changesToAnsi: ${count} changes, ${bytes} bytes\\n`)\n } catch {}\n }\n\n // Debug capture: write both incremental and fresh ANSI to files for comparison.\n if (DEBUG_CAPTURE) {\n _debugFrameCount++\n try {\n const fs = require(\"fs\")\n const freshOutput = bufferToAnsi(next, ctx)\n const freshPrev = prev ? bufferToAnsi(prev, ctx) : \"\"\n // Replay incremental on top of fresh prev\n const w = Math.max(prev?.width ?? next.width, next.width)\n const h = Math.max(prev?.height ?? next.height, next.height)\n const screenIncr = replayAnsiWithStyles(w, h, freshPrev + incrOutput, ctx)\n const screenFresh = replayAnsiWithStyles(w, h, freshOutput, ctx)\n // Find first mismatch\n let mismatchInfo = \"\"\n for (let y = 0; y < h && !mismatchInfo; y++) {\n for (let x = 0; x < w && !mismatchInfo; x++) {\n const ic = screenIncr[y]?.[x]\n const fc = screenFresh[y]?.[x]\n if (ic && fc && (ic.char !== fc.char || !sgrColorEquals(ic.fg, fc.fg) || !sgrColorEquals(ic.bg, fc.bg))) {\n mismatchInfo = `MISMATCH at (${x},${y}): incr='${ic.char}' fresh='${fc.char}' incrFg=${formatColor(ic.fg)} freshFg=${formatColor(fc.fg)} incrBg=${formatColor(ic.bg)} freshBg=${formatColor(fc.bg)}`\n // Show row context\n const incrRow = screenIncr[y]!.map((c) => c.char).join(\"\")\n const freshRow = screenFresh[y]!.map((c) => c.char).join(\"\")\n mismatchInfo += `\\n incr row ${y}: ${incrRow.slice(Math.max(0, x - 20), x + 40)}\\n fresh row ${y}: ${freshRow.slice(Math.max(0, x - 20), x + 40)}`\n }\n }\n }\n const status = mismatchInfo || \"MATCH\"\n fs.appendFileSync(\"/tmp/silvery-capture.log\", `Frame ${_debugFrameCount}: ${count} changes, ${status}\\n`)\n if (mismatchInfo) {\n fs.writeFileSync(`/tmp/silvery-incr-${_debugFrameCount}.ansi`, freshPrev + incrOutput)\n fs.writeFileSync(`/tmp/silvery-fresh-${_debugFrameCount}.ansi`, freshOutput)\n fs.appendFileSync(\n \"/tmp/silvery-capture.log\",\n ` Saved ANSI files: /tmp/silvery-incr-${_debugFrameCount}.ansi and /tmp/silvery-fresh-${_debugFrameCount}.ansi\\n`,\n )\n }\n } catch (e) {\n try {\n require(\"fs\").appendFileSync(\"/tmp/silvery-capture.log\", `Frame ${_debugFrameCount}: ERROR ${e}\\n`)\n } catch {}\n }\n }\n\n // vt100 output verification: verify that the incremental ANSI output produces\n // the same visible terminal state as a fresh render. Uses the internal\n // replayAnsiWithStyles parser (stateless). Enabled by SILVERY_STRICT or\n // SILVERY_STRICT_TERMINAL containing \"vt100\".\n if (isStrictOutput() || tvState.hasVt100) {\n _verifyOutputEquivalence(prev, next, incrOutput, ctx, bufferToAnsi, outputGraphemeWidth, outputTextSizingEnabled)\n }\n\n // SILVERY_STRICT_ACCUMULATE: verify that the accumulated output from ALL frames\n // produces the same terminal state as a fresh render of the current buffer.\n // Catches compounding errors that per-frame verification misses.\n if (isStrictAccumulate()) {\n accState.accumulatedAnsi += incrOutput\n accState.accumulateFrameCount++\n _verifyAccumulatedOutput(next, ctx, accState, bufferToAnsi)\n }\n\n // SILVERY_STRICT_TERMINAL (xterm/ghostty backends): verify via independent\n // terminal emulators that the cumulative incremental ANSI output produces the\n // same terminal state as a fresh full render. Unlike the vt100 backend (which\n // uses replayAnsiWithStyles — the same ANSI parser as the output generator),\n // these feed output through real terminal emulators, catching bugs where our\n // parser and generator agree but a real terminal disagrees (e.g., OSC 66, wide\n // char cursor drift, buffer overflow scrolling).\n if (tvState.backends.length > 0 && (tvState.terminal || tvState.ghosttyTerminal)) {\n tvState.frameCount++\n _verifyTerminalEquivalence(tvState, incrOutput, next, ctx, bufferToAnsi)\n }\n\n if (CAPTURE_RAW) {\n try {\n const fs = require(\"fs\")\n _captureRawFrameCount++\n // Append output to cumulative ANSI file\n fs.appendFileSync(\"/tmp/silvery-raw.ansi\", incrOutput)\n // Also save the fresh render of this frame for comparison\n const freshOutput = bufferToAnsi(next, ctx)\n fs.writeFileSync(`/tmp/silvery-raw-fresh-${_captureRawFrameCount}.ansi`, freshOutput)\n fs.appendFileSync(\n \"/tmp/silvery-raw-frames.jsonl\",\n JSON.stringify({\n frame: _captureRawFrameCount,\n type: \"incremental\",\n changes: count,\n bytes: incrOutput.length,\n width: next.width,\n height: next.height,\n }) + \"\\n\",\n )\n } catch {}\n }\n\n return incrOutput\n}\n\n/**\n * Check if a line has any non-space content or styling.\n * A row with only spaces but with background color or other styling\n * (bold, inverse, underline, etc.) is visually meaningful.\n */\nfunction lineHasContent(buffer: TerminalBuffer, y: number): boolean {\n for (let x = 0; x < buffer.width; x++) {\n const ch = buffer.getCellChar(x, y)\n if (ch !== \" \" && ch !== \"\") return true\n // Styled blank cells are visually meaningful:\n // - background color (colored spacer rows)\n // - inverse (visible block of fg color)\n // - underline (visible line under space)\n // - strikethrough (visible line through space)\n const bg = buffer.getCellBg(x, y)\n if (bg !== null) return true\n if (buffer.getCellAttrs(x, y) & VISIBLE_SPACE_ATTR_MASK) return true\n }\n return false\n}\n\n/**\n * Find the last line with content in the buffer.\n */\nfunction findLastContentLine(buffer: TerminalBuffer): number {\n for (let y = buffer.height - 1; y >= 0; y--) {\n if (lineHasContent(buffer, y)) {\n return y\n }\n }\n return 0 // At least render first line\n}\n\n/**\n * Compute the ANSI suffix that positions the real terminal cursor for inline mode.\n *\n * After inline rendering, the terminal cursor sits at the end of the last\n * content line. If a component used useCursor(), we move the cursor to\n * that position (relative to the rendered output). Otherwise we just show\n * the cursor at its current position.\n *\n * @param cursorPos The cursor state from useCursor() (or null if none)\n * @param buffer The rendered buffer\n * @param ctx Output context (termRows read from ctx.termRows)\n */\nfunction inlineCursorSuffix(\n cursorPos: CursorState | null | undefined,\n buffer: TerminalBuffer,\n ctx: OutputContext,\n): string {\n const { termRows } = ctx\n if (!cursorPos?.visible) {\n // No active cursor — hide it\n return \"\\x1b[?25l\"\n }\n\n // Determine the visible row range (same logic as bufferToAnsi for inline)\n const lastContentLine = findLastContentLine(buffer)\n const maxLine = lastContentLine\n let startLine = 0\n const maxOutputLines = termRows != null ? Math.min(lastContentLine + 1, termRows) : lastContentLine + 1\n if (termRows != null && maxLine >= termRows) {\n startLine = maxLine - termRows + 1\n }\n\n // Convert absolute buffer cursor position to visible row index\n const visibleRow = cursorPos.y - startLine\n if (visibleRow < 0 || visibleRow >= maxOutputLines) {\n // Cursor is outside the visible area (scrolled off) — hide it\n return \"\\x1b[?25l\"\n }\n\n // After rendering, the terminal cursor is at the end of the last output line.\n // The last output line is at visible row (maxOutputLines - 1).\n const currentRow = maxOutputLines - 1\n const rowDelta = currentRow - visibleRow\n\n let suffix = \"\"\n // Move up to the correct row\n if (rowDelta > 0) {\n suffix += `\\x1b[${rowDelta}A`\n }\n // Move to column 0, then right to the correct column\n suffix += \"\\r\"\n if (cursorPos.x > 0) {\n suffix += `\\x1b[${cursorPos.x}C`\n }\n // Show cursor\n suffix += \"\\x1b[?25h\"\n return suffix\n}\n\n/**\n * Incremental rendering for inline mode.\n *\n * When conditions are safe (no external writes, dimensions unchanged),\n * diffs prev/next buffers and emits only changed cells using relative\n * cursor positioning. Falls back to full render otherwise.\n *\n * This reduces output from ~5,848 bytes (full re-render at 50 items)\n * to ~50-100 bytes per keystroke, matching fullscreen efficiency.\n */\nfunction inlineIncrementalRender(\n state: InlineCursorState,\n prev: TerminalBuffer,\n next: TerminalBuffer,\n scrollbackOffset: number,\n cursorPos?: CursorState | null,\n ctx: OutputContext = defaultContext,\n tvState?: TerminalVerifyState,\n): string {\n const { termRows } = ctx\n // Guard: fall back to full render for complex cases\n if (scrollbackOffset > 0 || prev.width !== next.width || prev.height !== next.height || state.prevCursorRow < 0) {\n return inlineFullRender(state, prev, next, scrollbackOffset, cursorPos, ctx)\n }\n\n const nextContentLines = findLastContentLine(next) + 1\n const prevContentLines = findLastContentLine(prev) + 1\n\n // Compute visible ranges for both prev and next content\n const prevMaxOutputLines = termRows != null ? Math.min(prevContentLines, termRows) : prevContentLines\n const maxOutputLines = termRows != null ? Math.min(nextContentLines, termRows) : nextContentLines\n let prevStartLine = 0\n if (termRows != null && prevContentLines > termRows) {\n prevStartLine = prevContentLines - termRows\n }\n let startLine = 0\n if (termRows != null && nextContentLines > termRows) {\n startLine = nextContentLines - termRows\n }\n\n // When the visible window shifts (content exceeds termRows and startLine changes),\n // the entire visible region is different — fall back to full render.\n if (startLine !== prevStartLine) {\n return inlineFullRender(state, prev, next, scrollbackOffset, cursorPos, ctx)\n }\n\n // Diff buffers\n const { pool, count } = diffBuffers(prev, next)\n if (count === 0 && nextContentLines === prevContentLines) {\n // No buffer changes, but cursor position may have changed.\n // Emit cursor suffix to update the terminal cursor.\n const suffix = inlineCursorSuffix(cursorPos ?? null, next, ctx)\n updateInlineCursorRow(state, cursorPos, maxOutputLines, startLine)\n return suffix\n }\n\n // Move cursor from tracked row to row 0 of render region\n let output = \"\"\n if (state.prevCursorRow > 0) {\n output += `\\x1b[${state.prevCursorRow}A`\n }\n output += \"\\r\"\n output += \"\\x1b[?25l\" // hide cursor during update\n\n // Emit changes with relative positioning.\n // Use the larger of prev/next output lines so changesToAnsi processes all\n // visible cells including rows that shrank (need clearing) or grew (need writing).\n const effectiveOutputLines = Math.max(prevMaxOutputLines, maxOutputLines)\n const changes = changesToAnsi(pool, count, ctx, next, startLine, effectiveOutputLines)\n output += changes.output\n\n // After changesToAnsi, cursor is at changes.finalY (render-relative).\n // We need to position cursor at the effective bottom row, then handle\n // growth/shrinkage, and end at (maxOutputLines - 1) for inlineCursorSuffix.\n const finalY = changes.finalY\n const prevBottomRow = prevMaxOutputLines - 1\n const bottomRow = maxOutputLines - 1\n\n if (maxOutputLines > prevMaxOutputLines) {\n // Content grew: rows beyond the previous bottom don't exist on the terminal.\n // CUD (\\x1b[nB) is clamped at the terminal edge and won't create new lines.\n // Use \\r\\n for each new row to ensure the terminal extends naturally.\n //\n // changesToAnsi may have already moved past prevBottomRow using \\r\\n\n // (creating new terminal lines in the process). Only add \\r\\n for\n // rows beyond what changesToAnsi already reached.\n const fromRow = finalY >= 0 ? finalY : 0\n if (fromRow >= bottomRow) {\n // changesToAnsi already reached or passed the new bottom — nothing to do\n } else if (fromRow >= prevBottomRow) {\n // Cursor already past old bottom (changesToAnsi extended the terminal).\n // Only need \\r\\n for remaining rows.\n const remainingRows = bottomRow - fromRow\n for (let i = 0; i < remainingRows; i++) {\n output += \"\\r\\n\"\n }\n } else {\n // Cursor is still within the old content area.\n // First, move to the old bottom row using CUD (safe, rows exist on terminal)\n if (fromRow < prevBottomRow) {\n const dy = prevBottomRow - fromRow\n output += dy === 1 ? \"\\r\\n\" : `\\r\\x1b[${dy}B`\n }\n // Then extend to new bottom with \\r\\n for each new row\n const newRows = bottomRow - prevBottomRow\n for (let i = 0; i < newRows; i++) {\n output += \"\\r\\n\"\n }\n }\n } else if (maxOutputLines < prevMaxOutputLines) {\n // Content shrank: erase orphan lines below the new content.\n // changesToAnsi already wrote empty cells to clear the old content,\n // but we need \\x1b[K to clear any residual characters.\n // The cursor is at finalY after changesToAnsi — move to the new bottom first.\n const fromRow = finalY >= 0 ? finalY : 0\n if (fromRow < bottomRow) {\n const dy = bottomRow - fromRow\n output += dy === 1 ? \"\\r\\n\" : `\\r\\x1b[${dy}B`\n } else if (fromRow > bottomRow) {\n // Cursor is past the new bottom (was erasing orphan rows) — move back up\n output += `\\x1b[${fromRow - bottomRow}A`\n }\n // Now at new bottom row (bottomRow). Erase orphan lines below by moving\n // down one line at a time, erasing each. This leaves cursor at the last\n // orphan row (prevMaxOutputLines - 1).\n const orphanCount = prevMaxOutputLines - maxOutputLines\n for (let y = 0; y < orphanCount; y++) {\n output += \"\\n\\r\\x1b[K\"\n }\n // Move back up from last orphan row to new bottom row\n if (orphanCount > 0) output += `\\x1b[${orphanCount}A`\n } else {\n // Same height: move to bottom row if not already there\n if (finalY >= 0 && finalY < bottomRow) {\n const dy = bottomRow - finalY\n output += dy === 1 ? \"\\r\\n\" : `\\r\\x1b[${dy}B`\n }\n }\n\n output += inlineCursorSuffix(cursorPos ?? null, next, ctx)\n\n // STRICT verification for inline incremental renders.\n // Inline mode uses relative cursor positioning (CUU/CUD/CR) instead of\n // absolute CUP, so we can't pass the inline output directly to\n // verifyOutputEquivalence (which replays freshPrev + incrOutput — the cursor\n // position after freshPrev differs from the tracked prevCursorRow). Instead,\n // re-diff in fullscreen mode for vt100 verification. This verifies the buffer\n // diff logic produces correct ANSI output, even though it doesn't test the\n // inline cursor positioning specifically.\n if (isStrictOutput() || tvState?.hasVt100) {\n const savedMode = ctx.mode\n ctx.mode = \"fullscreen\"\n const fsIncrOutput = changesToAnsi(pool, count, ctx, next).output\n _verifyOutputEquivalence(prev, next, fsIncrOutput, ctx, bufferToAnsi, outputGraphemeWidth, outputTextSizingEnabled)\n ctx.mode = savedMode\n }\n // TODO: verifyTerminalEquivalence (xterm/ghostty) is skipped for inline mode.\n // The persistent terminal emulators track cumulative state across frames, but\n // inline mode's cursor management (relative positioning, scrollback promotion,\n // cursor tracking via prevCursorRow) is incompatible with this model.\n // verifyAccumulatedOutput is also skipped — inline has a different accumulation\n // model (scrollback promotion, frozen content).\n\n // Update tracking\n updateInlineCursorRow(state, cursorPos, maxOutputLines, startLine)\n\n return output\n}\n\n/**\n * Full re-render for inline mode.\n *\n * Moves cursor to the start of the render region, writes the entire\n * buffer fresh, and erases any leftover lines from the previous render.\n *\n * When content exceeds terminal height, output is capped to termRows lines.\n * Lines beyond the terminal can't be managed (cursor-up is clamped at row 0),\n * so we truncate to prevent scrollback corruption.\n */\nfunction inlineFullRender(\n state: InlineCursorState,\n prev: TerminalBuffer,\n next: TerminalBuffer,\n scrollbackOffset: number,\n cursorPos?: CursorState | null,\n ctx: OutputContext = defaultContext,\n): string {\n const { termRows } = ctx\n const nextContentLines = findLastContentLine(next) + 1\n\n // Use tracked state from the previous frame for cursor position and output height.\n // state.prevCursorRow tracks where the terminal cursor actually is (row within render\n // region), and state.prevOutputLines tracks how many lines the previous frame rendered.\n // Re-deriving from the prev buffer can disagree (e.g., when cursor was positioned at a\n // visible row via useCursor, not at the bottom), causing the cursor-up to overshoot\n // and leaving orphan lines below the content (\"inline-bleed\").\n // Fall back to prev-buffer derivation only when cursor tracking is uninitialized.\n let prevOutputLines: number\n let cursorRowInRegion: number\n if (state.prevCursorRow >= 0) {\n prevOutputLines = state.prevOutputLines\n cursorRowInRegion = state.prevCursorRow\n } else {\n const prevContentLines = findLastContentLine(prev) + 1\n prevOutputLines = termRows != null ? Math.min(prevContentLines, termRows) : prevContentLines\n cursorRowInRegion = prevOutputLines - 1\n }\n\n // How far the cursor is below the start of the render region:\n // tracked cursor row + any lines written to stdout between renders.\n // Cap to termRows-1: terminal clamps cursor-up at row 0.\n const rawCursorOffset = cursorRowInRegion + scrollbackOffset\n const cursorOffset = termRows != null && !isStrictOutput() ? Math.min(rawCursorOffset, termRows - 1) : rawCursorOffset\n\n // Cap output at terminal height to prevent scrollback corruption.\n // Content taller than the terminal pushes lines into scrollback where\n // they can never be overwritten (cursor-up is clamped at terminal row 0).\n const maxOutputLines = termRows != null ? Math.min(nextContentLines, termRows) : nextContentLines\n\n // Quick check: if nothing changed and no scrollback displacement, skip\n if (scrollbackOffset === 0) {\n const { count } = diffBuffers(prev, next)\n if (count === 0) return \"\"\n }\n\n // Move cursor up to the start of the render region\n let prefix = \"\"\n if (cursorOffset > 0) {\n prefix = `\\x1b[${cursorOffset}A\\r`\n }\n // bufferToAnsi handles: hide cursor, render content lines with\n // \\x1b[K (clear to EOL) on each line, and reset style at end.\n let output = prefix + bufferToAnsi(next, ctx, maxOutputLines)\n\n // Erase leftover lines if visible area shrank.\n // Account for terminal scroll: when useScrollback writes frozen items and the\n // cursor overflows the terminal, the terminal scrolls up. The scroll amount\n // equals how far rawCursorOffset exceeds termRows-1 (the terminal's last row).\n // That many old render lines were pushed into scrollback and no longer need\n // erasing. The remaining visible old render lines end at lastOccupiedLine.\n // Lines beyond that contain frozen items — those must NOT be erased.\n // Note: computed from terminal geometry, independent of strict-output cursor bypass.\n const terminalScroll = termRows != null ? Math.max(0, rawCursorOffset - (termRows - 1)) : 0\n const lastOccupiedLine = Math.max(prevOutputLines - 1 - terminalScroll, 0)\n const nextLastLine = maxOutputLines - 1\n if (lastOccupiedLine > nextLastLine) {\n for (let y = nextLastLine + 1; y <= lastOccupiedLine; y++) {\n output += \"\\n\\r\\x1b[K\"\n }\n const up = lastOccupiedLine - nextLastLine\n if (up > 0) output += `\\x1b[${up}A`\n }\n\n // Position the real terminal cursor and show it.\n // If a component called useCursor(), place the cursor there.\n // Otherwise, just show it at the current position (end of content).\n output += inlineCursorSuffix(cursorPos ?? null, next, ctx)\n\n // Update cursor tracking for incremental rendering on next frame\n let startLine = 0\n if (termRows != null && nextContentLines > termRows) startLine = nextContentLines - termRows\n updateInlineCursorRow(state, cursorPos, maxOutputLines, startLine)\n\n return output\n}\n\n/**\n * Convert entire buffer to ANSI string.\n *\n * Mode is read from ctx.mode. maxRows is an explicit parameter because callers\n * sometimes pass a pre-computed value (e.g., maxOutputLines) rather than raw\n * ctx.termRows.\n *\n * @param maxRows Optional cap on number of rows to output (inline mode).\n * When content exceeds terminal height, this prevents scrollback corruption.\n */\nfunction bufferToAnsi(buffer: TerminalBuffer, ctx: OutputContext = defaultContext, maxRows?: number): string {\n const { mode } = ctx\n let output = \"\"\n let currentStyle: Style | null = null\n let currentHyperlink: string | undefined\n\n // Cap output to prevent rendering beyond terminal height.\n // Inline mode: render up to last content line; if taller than terminal, show bottom\n // (footer and latest content stay visible in scrollback).\n // Fullscreen mode: always start from top; cap at terminal height to prevent scroll\n // that desynchronizes prevBuffer from actual terminal state.\n let maxLine = mode === \"inline\" ? findLastContentLine(buffer) : buffer.height - 1\n let startLine = 0\n if (maxRows != null && maxLine >= maxRows) {\n if (mode === \"fullscreen\") {\n maxLine = maxRows - 1 // cap at terminal height, always from top\n } else {\n startLine = maxLine - maxRows + 1 // show bottom of content\n }\n }\n\n // Move cursor to start position based on mode\n if (mode === \"fullscreen\") {\n // Fullscreen: Move cursor to home position (top-left)\n output += \"\\x1b[H\"\n } else {\n // Inline: Hide cursor, start from current position\n output += \"\\x1b[?25l\"\n }\n\n // Reusable objects to avoid per-cell allocation in the inner loop\n const cell = createMutableCell()\n const cellStyle: Style = {\n fg: null,\n bg: null,\n underlineColor: null,\n attrs: {},\n }\n\n for (let y = startLine; y <= maxLine; y++) {\n // Move to start of line.\n // Fullscreen: CUP (absolute positioning) for rows after startLine.\n // After writing exactly `cols` chars, cursor enters pending-wrap state.\n // \\r goes to col 0 of the CURRENT row (doesn't resolve wrap in real\n // terminals), overwriting the row. CUP is unambiguous across all\n // terminals and our internal ANSI parser (replayAnsiWithStyles).\n // First row skips CUP — cursor is already at home via \\x1b[H.\n // Inline: \\r on EVERY row (including first) to ensure column 0.\n if (mode === \"inline\") {\n output += \"\\r\"\n } else if (y > startLine) {\n output += `\\x1b[${y + 1};1H`\n }\n\n // Render the line content\n for (let x = 0; x < buffer.width; x++) {\n buffer.readCellInto(x, y, cell)\n\n // No continuation skip here. Valid continuation cells are never reached\n // because `if (cell.wide) x++` below jumps past them. Orphaned\n // continuation cells (wide char overwritten by region clear) must NOT\n // be skipped — they write a space to keep the VT cursor in sync.\n\n // Handle OSC 8 hyperlink transitions (separate from SGR style)\n const cellHyperlink = cell.hyperlink\n if (cellHyperlink !== currentHyperlink) {\n if (currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\" // Close previous hyperlink\n }\n if (cellHyperlink) {\n output += `\\x1b]8;;${cellHyperlink}\\x1b\\\\` // Open new hyperlink\n }\n currentHyperlink = cellHyperlink\n }\n\n // Build style from cell and check if changed.\n // readCellInto mutates cell.attrs in place, so we must snapshot attrs\n // only when the style actually changes (which is rare -- most adjacent\n // cells share the same style). This avoids per-cell object allocation.\n cellStyle.fg = cell.fg\n cellStyle.bg = cell.bg\n cellStyle.underlineColor = cell.underlineColor\n cellStyle.attrs = cell.attrs\n if (!styleEquals(currentStyle, cellStyle)) {\n // Snapshot: copy attrs so currentStyle isn't invalidated by next readCellInto\n const saved: Style = {\n fg: cell.fg,\n bg: cell.bg,\n underlineColor: cell.underlineColor,\n attrs: { ...cell.attrs },\n }\n output += styleTransition(currentStyle, saved, ctx)\n currentStyle = saved\n }\n\n // Write character — empty-string chars are treated as space to ensure\n // the terminal cursor advances (an empty string writes nothing, causing\n // all subsequent characters on the row to shift left by one column).\n const char = cell.char || \" \"\n output += wrapTextSizing(char, cell.wide, ctx)\n\n // Wide characters occupy 2 columns in the terminal. Skip the next cell\n // position since the terminal cursor already advanced by 2. We skip\n // unconditionally (not relying on the next cell's continuation flag)\n // because the buffer may have a corrupted continuation cell — e.g., when\n // an adjacent container's region clear overwrites the continuation.\n // Without this, the non-continuation cell at x+1 would also be written,\n // causing every subsequent character on the row to shift right by 1.\n if (cell.wide) {\n x++\n // Cursor re-sync: some terminals treat multi-codepoint wide chars\n // (flag emoji like 🇨🇦) as two width-1 chars instead of one width-2\n // char. This causes the terminal cursor to be 1 column behind where\n // we expect. Emit an explicit cursor position to re-sync, mirroring\n // the re-sync in changesToAnsi. Cost: ~8 bytes per wide char; wide\n // chars are rare so overhead is negligible.\n // After x++, x points to the continuation cell. The next character\n // to write is at x+1 (after the loop increment), so position the\n // cursor at 0-indexed column x+1 = 1-indexed column x+2.\n if (mode === \"fullscreen\") {\n output += `\\x1b[${y - startLine + 1};${x + 2}H`\n } else {\n // Inline: \\r resets to column 0, CUF moves to expected position.\n // Reset bg first to prevent bleed across traversed cells.\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n const nextCol = x + 1\n output += \"\\r\"\n if (nextCol > 0) output += nextCol === 1 ? \"\\x1b[C\" : `\\x1b[${nextCol}C`\n }\n }\n }\n\n // Close any open hyperlink at end of row\n if (currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\"\n currentHyperlink = undefined\n }\n\n // Reset style before newline to prevent background color from\n // bleeding into the next line via the terminal's right margin fill.\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n // Note: \\x1b[K (Erase to End of Line) is intentionally omitted.\n // bufferToAnsi writes every cell in the row (buffer.width == terminal cols),\n // so there is nothing beyond the cursor to erase. More importantly, after\n // writing the last column the cursor enters pending-wrap state, and EL\n // behavior in pending-wrap is terminal-dependent — some terminals resolve\n // the wrap first, causing the next line's content to shift down by one row.\n\n // Move to next line (except for last line)\n if (y < maxLine) {\n if (mode === \"inline\") {\n // In inline mode, use \\r\\n to cancel DECAWM pending-wrap state.\n // When the line fills exactly `cols` characters, the cursor enters\n // pending-wrap. A bare \\n in that state causes a double line advance\n // in some terminals (Ghostty, iTerm2). The \\r first moves to column 0\n // (canceling pending-wrap), then \\n advances one row cleanly.\n output += \"\\r\\n\"\n }\n // Fullscreen: no \\n needed — CUP at the start of the next row handles\n // positioning. Bare \\n in pending-wrap state is terminal-dependent\n // (some terminals double-advance, potentially causing scroll at the\n // bottom of the alternate screen).\n }\n }\n\n // Close any open hyperlink at end\n if (currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\"\n }\n\n // Reset style at end\n output += \"\\x1b[0m\"\n\n return output\n}\n\n// ============================================================================\n// Buffer diffing (extracted to diff-buffers.ts)\n// ============================================================================\n\nimport { diffBuffers } from \"./diff-buffers\"\n\n/** Result from changesToAnsi: ANSI output string and final cursor position. */\ninterface ChangesResult {\n output: string\n /** Final render-relative cursor Y after emitting changes (-1 if no changes emitted). */\n finalY: number\n}\n\n/** Pre-allocated style object reused across changesToAnsi calls. */\nconst reusableCellStyle: Style = {\n fg: null,\n bg: null,\n underlineColor: null,\n attrs: {},\n}\n\n/**\n * Pre-allocated cell for looking up wide char main cells from the buffer\n * when an orphaned continuation cell is encountered in changesToAnsi.\n */\nconst wideCharLookupCell = createMutableCell()\n\n/**\n * Sort a sub-range of the pool by position for optimal cursor movement.\n * Uses a simple in-place sort on pool[0..count).\n */\nfunction sortPoolByPosition(pool: CellChange[], count: number): void {\n // Insertion sort is efficient for the typical case (mostly sorted or small count)\n for (let i = 1; i < count; i++) {\n const item = pool[i]!\n const iy = item.y\n const ix = item.x\n let j = i - 1\n while (j >= 0 && (pool[j]!.y > iy || (pool[j]!.y === iy && pool[j]!.x > ix))) {\n pool[j + 1] = pool[j]!\n j--\n }\n pool[j + 1] = item\n }\n}\n\n/**\n * Convert cell changes to optimized ANSI output.\n *\n * Wide characters are handled atomically: the main cell (wide:true) and its\n * continuation cell are treated as a single unit. When the main cell is in\n * the pool, it's emitted and the cursor advances by 2. When only the\n * continuation cell changed (e.g., bg color), the main cell is read from\n * the buffer and emitted to cover both columns.\n *\n * @param pool Pre-allocated pool of CellChange objects\n * @param count Number of valid entries in the pool\n * @param ctx Output context (mode read from ctx.mode)\n * @param buffer The current buffer, used to look up main cells for orphaned\n * continuation cells (optional for backward compatibility)\n * @param startLine For inline mode: first visible buffer row (for termRows capping)\n * @param maxOutputLines For inline mode: number of visible rows\n */\nfunction changesToAnsi(\n pool: CellChange[],\n count: number,\n ctx: OutputContext = defaultContext,\n buffer?: TerminalBuffer,\n startLine = 0,\n maxOutputLines = Infinity,\n): ChangesResult {\n const { mode } = ctx\n if (count === 0) return { output: \"\", finalY: -1 }\n\n // Sort by position for optimal cursor movement (in-place, no allocation)\n sortPoolByPosition(pool, count)\n\n // ========================================================================\n // Hybrid emission: analyze per-row density and choose strategy per row.\n //\n // Dense rows (>50% of cells changed): emit the entire row from the buffer\n // with a single cursor positioning — avoids per-cell CUP overhead.\n //\n // Sparse rows: cell-by-cell emission (current behavior) — optimal for\n // isolated changes since it skips unchanged cells entirely.\n //\n // The threshold is checked only when the buffer is available (incremental\n // renders always pass it; bare changesToAnsi calls may not).\n // ========================================================================\n\n // Build a set of dense rows by scanning the sorted pool.\n // A row is dense if its changed cell count exceeds 50% of the buffer width.\n // We collect row boundaries (start/end indices in the pool) for dense rows\n // so we can skip their individual changes in the main loop.\n const denseRows = new Set<number>()\n const bufWidth = buffer?.width ?? 0\n const densityThreshold = bufWidth > 0 ? bufWidth * 0.5 : Infinity\n\n if (buffer && bufWidth > 0) {\n let rowStart = 0\n while (rowStart < count) {\n const rowY = pool[rowStart]!.y\n let rowEnd = rowStart + 1\n while (rowEnd < count && pool[rowEnd]!.y === rowY) rowEnd++\n const rowChanges = rowEnd - rowStart\n if (rowChanges >= densityThreshold) {\n denseRows.add(rowY)\n }\n rowStart = rowEnd\n }\n }\n\n let output = \"\"\n let currentStyle: Style | null = null\n let currentHyperlink: string | undefined\n const isInline = mode === \"inline\"\n const endLine = startLine + maxOutputLines // exclusive upper bound for inline filtering\n let finalY = -1\n let cursorX = -1\n let cursorY = -1\n let prevY = -1\n // Track the last emitted cell position to detect when a continuation\n // cell's main cell was already emitted in this pass.\n let lastEmittedX = -1\n let lastEmittedY = -1\n\n // Pre-allocated cell for full-row reads (dense row emission).\n // Separate from wideCharLookupCell to avoid aliasing issues.\n const denseRowCell = createMutableCell()\n\n for (let i = 0; i < count; i++) {\n const change = pool[i]!\n let x = change.x\n const y = change.y\n let cell = change.cell\n\n // In inline mode, skip changes outside the visible range\n if (isInline && (y < startLine || y >= endLine)) continue\n\n // ====================================================================\n // Dense row: emit the full row from the buffer.\n // Skip all pool entries for this row — we read directly from the buffer.\n // ====================================================================\n if (buffer && denseRows.has(y)) {\n // Skip remaining pool entries for this row\n while (i + 1 < count && pool[i + 1]!.y === y) i++\n\n const renderY = isInline ? y - startLine : y\n\n // Close hyperlink on row change\n if (y !== prevY && currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\"\n currentHyperlink = undefined\n }\n prevY = y\n\n // Position cursor at start of row (column 0)\n if (renderY !== cursorY || cursorX !== 0) {\n // Reset style before cursor movement to prevent bg bleed\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n\n if (cursorY >= 0 && renderY === cursorY + 1) {\n output += \"\\r\\n\"\n } else if (cursorY >= 0 && renderY > cursorY) {\n const dy = renderY - cursorY\n output += dy === 1 ? \"\\r\\n\" : `\\r\\x1b[${dy}B`\n } else if (isInline) {\n const fromRow = cursorY >= 0 ? cursorY : 0\n if (renderY > fromRow) {\n output += `\\x1b[${renderY - fromRow}B\\r`\n } else if (renderY < fromRow) {\n output += `\\x1b[${fromRow - renderY}A\\r`\n } else {\n output += \"\\r\"\n }\n } else {\n output += `\\x1b[${renderY + 1};1H`\n }\n }\n\n // Emit the entire row from the buffer (like bufferToAnsi per-row logic)\n for (let bx = 0; bx < bufWidth; bx++) {\n buffer.readCellInto(bx, y, denseRowCell)\n\n // Handle hyperlink transitions\n const cellHyperlink = denseRowCell.hyperlink\n if (cellHyperlink !== currentHyperlink) {\n if (currentHyperlink) output += \"\\x1b]8;;\\x1b\\\\\"\n if (cellHyperlink) output += `\\x1b]8;;${cellHyperlink}\\x1b\\\\`\n currentHyperlink = cellHyperlink\n }\n\n // Style transition\n reusableCellStyle.fg = denseRowCell.fg\n reusableCellStyle.bg = denseRowCell.bg\n reusableCellStyle.underlineColor = denseRowCell.underlineColor\n reusableCellStyle.attrs = denseRowCell.attrs\n if (!styleEquals(currentStyle, reusableCellStyle)) {\n const prevStyle = currentStyle\n currentStyle = {\n fg: denseRowCell.fg,\n bg: denseRowCell.bg,\n underlineColor: denseRowCell.underlineColor,\n attrs: { ...denseRowCell.attrs },\n }\n output += styleTransition(prevStyle, currentStyle, ctx)\n }\n\n // Write character\n const char = denseRowCell.char || \" \"\n output += wrapTextSizing(char, denseRowCell.wide, ctx)\n\n // Skip continuation cell for wide chars\n if (denseRowCell.wide) {\n bx++\n // Cursor re-sync for wide chars (same logic as bufferToAnsi)\n if (isInline) {\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n const nextCol = bx + 1\n output += \"\\r\"\n if (nextCol > 0) output += nextCol === 1 ? \"\\x1b[C\" : `\\x1b[${nextCol}C`\n } else {\n output += `\\x1b[${renderY + 1};${bx + 2}H`\n }\n }\n }\n\n // Close hyperlink at end of row\n if (currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\"\n currentHyperlink = undefined\n }\n\n // Reset style at end of row to prevent bg bleed into next row\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n\n cursorX = bufWidth\n cursorY = renderY\n lastEmittedX = bufWidth - 1\n lastEmittedY = y\n continue\n }\n\n // ====================================================================\n // Sparse cell: standard cell-by-cell emission\n // ====================================================================\n\n // Handle continuation cells: these are the second column of a wide\n // character. If their main cell (x-1) was already emitted in this\n // pass, skip. Otherwise, look up and emit the main cell from the\n // buffer so the wide char covers both columns.\n if (cell.continuation) {\n // Main cell was already emitted — skip\n if (lastEmittedX === x - 1 && lastEmittedY === y) continue\n\n // Orphaned continuation cell: main cell didn't change but this\n // cell's style did. Read the main cell from the buffer and emit it.\n if (buffer && x > 0) {\n x = x - 1\n buffer.readCellInto(x, y, wideCharLookupCell)\n cell = wideCharLookupCell\n // If the looked-up cell is itself a continuation (shouldn't happen\n // with valid buffers) or not wide, fall back to skipping\n if (cell.continuation || !cell.wide) continue\n } else {\n continue\n }\n }\n\n // For inline mode, use render-region-relative row indices\n const renderY = isInline ? y - startLine : y\n\n // Close hyperlink on row change (hyperlinks must not span across rows)\n if (y !== prevY && currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\"\n currentHyperlink = undefined\n }\n prevY = y\n\n // Move cursor if needed (cursor must be exactly at target position)\n if (renderY !== cursorY || x !== cursorX) {\n // Use \\r\\n optimization only if cursor is initialized AND we're moving\n // to the next line at column 0. Don't use it when cursorY is -1\n // (uninitialized) because that would incorrectly emit a newline at start.\n // Bug km-x7ih: This was causing the first row to appear at the bottom.\n if (cursorY >= 0 && renderY === cursorY + 1 && x === 0) {\n // Next line at column 0, use newline (more efficient)\n // Reset style before newline to prevent background color bleeding\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n output += \"\\r\\n\"\n } else if (cursorY >= 0 && renderY === cursorY && x > cursorX) {\n // Same row, forward: use CUF (Cursor Forward) for small jumps.\n // Reset bg before CUF to prevent background color bleeding into\n // skipped cells. Some terminals (e.g., Ghostty) may apply the\n // current bg to cells traversed by CUF, causing visual artifacts\n // when bg transitions from undefined→color (km-tui.col-header-dup).\n if (currentStyle && currentStyle.bg !== null) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n const dx = x - cursorX\n output += dx === 1 ? \"\\x1b[C\" : `\\x1b[${dx}C`\n } else if (cursorY >= 0 && renderY > cursorY && x === 0) {\n // Same column (0), down N rows: use \\r + CUD\n const dy = renderY - cursorY\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n output += dy === 1 ? \"\\r\\n\" : `\\r\\x1b[${dy}B`\n } else if (isInline) {\n // Inline mode: relative positioning (no absolute row numbers)\n if (currentStyle && (currentStyle.bg !== null || hasActiveAttrs(currentStyle.attrs))) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n // When cursorY === -1 (first change in incremental render),\n // the cursor is at row 0 (set by inlineIncrementalRender prefix).\n const fromRow = cursorY >= 0 ? cursorY : 0\n if (renderY > fromRow) {\n output += `\\x1b[${renderY - fromRow}B\\r`\n } else if (renderY < fromRow) {\n output += `\\x1b[${fromRow - renderY}A\\r`\n } else {\n output += \"\\r\"\n }\n if (x > 0) output += x === 1 ? \"\\x1b[C\" : `\\x1b[${x}C`\n } else {\n // Fullscreen: absolute position (1-indexed)\n output += `\\x1b[${renderY + 1};${x + 1}H`\n }\n }\n\n // Handle OSC 8 hyperlink transitions (separate from SGR style)\n const cellHyperlink = cell.hyperlink\n if (cellHyperlink !== currentHyperlink) {\n if (currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\" // Close previous hyperlink\n }\n if (cellHyperlink) {\n output += `\\x1b]8;;${cellHyperlink}\\x1b\\\\` // Open new hyperlink\n }\n currentHyperlink = cellHyperlink\n }\n\n // Update style if changed (reuse pre-allocated style object)\n reusableCellStyle.fg = cell.fg\n reusableCellStyle.bg = cell.bg\n reusableCellStyle.underlineColor = cell.underlineColor\n reusableCellStyle.attrs = cell.attrs\n if (!styleEquals(currentStyle, reusableCellStyle)) {\n // Snapshot: copy attrs so currentStyle isn't invalidated by next iteration\n const prevStyle = currentStyle\n currentStyle = {\n fg: cell.fg,\n bg: cell.bg,\n underlineColor: cell.underlineColor,\n attrs: { ...cell.attrs },\n }\n output += styleTransition(prevStyle, currentStyle, ctx)\n }\n\n // Write character — empty-string chars are treated as space to ensure\n // the terminal cursor advances and cursorX tracking stays correct.\n const char = cell.char || \" \"\n output += wrapTextSizing(char, cell.wide, ctx)\n cursorX = x + (cell.wide ? 2 : 1)\n cursorY = renderY\n lastEmittedX = x\n lastEmittedY = y\n\n // Wide char cursor re-sync: terminals may advance the cursor by 1\n // instead of 2 for certain emoji (flag sequences, text-presentation\n // emoji without OSC 66 support). In bufferToAnsi (full render) this\n // only causes a consistent per-row shift since every cell is written\n // sequentially. But in changesToAnsi, contiguous runs rely on cursor\n // auto-advance, so a width mismatch causes progressive drift —\n // characters appear at wrong positions, mixing old and new content.\n // Fix: emit an explicit cursor position after each wide char to\n // re-sync the terminal cursor with our tracking. Cost: ~8 bytes per\n // wide char (CUP in fullscreen, \\r+CUF in inline). Wide chars are\n // rare so the overhead is negligible.\n if (cell.wide) {\n if (isInline) {\n // Inline: \\r resets to column 0, CUF moves to expected position.\n // Reset bg first to prevent bleed across traversed cells.\n if (currentStyle && currentStyle.bg !== null) {\n output += \"\\x1b[0m\"\n currentStyle = null\n }\n output += \"\\r\"\n if (cursorX > 0) output += cursorX === 1 ? \"\\x1b[C\" : `\\x1b[${cursorX}C`\n } else {\n // Fullscreen: CUP (absolute position) — no style reset needed.\n output += `\\x1b[${cursorY + 1};${cursorX + 1}H`\n }\n }\n }\n\n finalY = cursorY\n\n // Close any open hyperlink\n if (currentHyperlink) {\n output += \"\\x1b]8;;\\x1b\\\\\"\n }\n\n // Reset style at end\n if (currentStyle) {\n output += \"\\x1b[0m\"\n }\n\n return { output, finalY }\n}\n\n// =============================================================================\n// Color code helpers (imported from ansi/sgr-codes.ts)\n// =============================================================================\n\n/**\n * Convert style to ANSI escape sequence (chalk-compatible format).\n *\n * Emits only non-default attributes with no reset prefix. Called when there\n * is no previous style context (first cell or after all attributes are off),\n * so the terminal is already in reset state.\n *\n * Uses native 4-bit codes for basic colors (0-7), 256-color for extended,\n * and true-color for RGB. Each attribute gets its own \\x1b[Xm sequence to\n * match chalk's output format.\n *\n * Emits SGR codes including:\n * - Basic colors (30-37, 40-47)\n * - 256-color (38;5;N, 48;5;N)\n * - True color (38;2;r;g;b, 48;2;r;g;b)\n * - Underline styles (4:x where x = 0-5)\n * - Underline color (58;5;N or 58;2;r;g;b)\n * - Inverse uses SGR 7 so terminals swap fg/bg correctly (including default colors)\n */\nfunction styleToAnsi(style: Style, ctx: OutputContext = defaultContext): string {\n const fg = style.fg\n const bg = style.bg\n const monoTier = ctx.caps.colorLevel === \"none\"\n\n // Collect all SGR codes into one combined sequence: \\x1b[code1;code2;...m\n // This is more spec-compliant and produces fewer bytes than separate sequences.\n const codes: string[] = []\n\n // Foreground color — stripped at monochrome tier (hierarchy via attrs)\n if (fg !== null && !monoTier) {\n codes.push(fgColorCode(fg))\n }\n\n // Background color (DEFAULT_BG sentinel = terminal default, skip) — stripped at mono tier\n if (bg !== null && !isDefaultBg(bg) && !monoTier) {\n codes.push(bgColorCode(bg))\n }\n\n // Attributes\n if (style.attrs.bold) codes.push(\"1\")\n if (style.attrs.dim) codes.push(\"2\")\n if (style.attrs.italic) codes.push(\"3\")\n\n // Underline: use SGR 4:x if style specified, otherwise simple SGR 4\n if (!ctx.caps.underlineStyles) {\n // Terminal doesn't support SGR 4:x — use simple SGR 4\n if (style.attrs.underline || style.attrs.underlineStyle) codes.push(\"4\")\n } else {\n const underlineStyle = style.attrs.underlineStyle\n const sgrSubparam = underlineStyleToSgr(underlineStyle)\n if (sgrSubparam !== null && sgrSubparam !== 0) {\n codes.push(`4:${sgrSubparam}`)\n } else if (style.attrs.underline) {\n codes.push(\"4\")\n }\n }\n\n // Use SGR 7 for inverse — lets the terminal correctly swap fg/bg\n // (including default terminal colors that have no explicit ANSI code)\n if (style.attrs.blink) codes.push(\"5\")\n if (style.attrs.inverse) codes.push(\"7\")\n if (style.attrs.hidden) codes.push(\"8\")\n if (style.attrs.strikethrough) codes.push(\"9\")\n\n // Append underline color if specified (SGR 58) — skip for limited terminals\n if (ctx.caps.underlineColor && style.underlineColor !== null && style.underlineColor !== undefined) {\n if (typeof style.underlineColor === \"number\") {\n codes.push(`58;5;${style.underlineColor}`)\n } else {\n codes.push(`58;2;${style.underlineColor.r};${style.underlineColor.g};${style.underlineColor.b}`)\n }\n }\n\n if (codes.length === 0) return \"\"\n return `\\x1b[${codes.join(\";\")}m`\n}\n\n// =============================================================================\n// STRICT/Verification code lives in output-verify.ts (~990 LOC extracted).\n// =============================================================================\n","export {\n detectCursor,\n detectInput,\n detectColor,\n detectUnicode,\n detectExtendedUnderline,\n detectTerminalCaps,\n defaultCaps,\n} from \"@silvery/ansi\"\nexport type { TerminalCaps } from \"@silvery/ansi\"\n\nexport {\n createBgModeDetector,\n parseBgModeResponse,\n ENABLE_BG_MODE_REPORTING,\n DISABLE_BG_MODE_REPORTING,\n} from \"@silvery/ansi\"\nexport type { BgModeDetector, BgModeDetectorOptions, BgMode } from \"@silvery/ansi\"\n","/**\n * SGR mouse event parsing (mode 1006).\n *\n * SGR format: CSI < button;x;y M (press) or CSI < button;x;y m (release)\n *\n * Button encoding:\n * - Bits 0-1: 0=left, 1=middle, 2=right, 3=release (X10 only, not SGR)\n * - Bit 2 (+4): Shift held\n * - Bit 3 (+8): Meta/Alt held\n * - Bit 4 (+16): Ctrl held\n * - Bit 5 (+32): Motion event (mouse moved while button held)\n * - Bits 6-7: 64=wheel-up, 65=wheel-down, 66=wheel-left, 67=wheel-right\n */\n\n/**\n * Parsed mouse event from SGR mouse protocol (mode 1006).\n */\nexport interface ParsedMouse {\n /** Mouse button: 0=left, 1=middle, 2=right */\n button: number\n /** Column (0-indexed) */\n x: number\n /** Row (0-indexed) */\n y: number\n /** Event action */\n action: \"down\" | \"up\" | \"move\" | \"wheel\"\n /** Wheel delta: -1 for up, +1 for down */\n delta?: number\n /** Shift was held */\n shift: boolean\n /** Alt/Meta was held */\n meta: boolean\n /** Ctrl was held */\n ctrl: boolean\n}\n\nconst SGR_MOUSE_RE = /^\\x1b\\[<(\\d+);(\\d+);(\\d+)([Mm])$/\n\n/**\n * Parse an SGR mouse sequence.\n *\n * @returns ParsedMouse or null if not a valid mouse sequence\n */\nexport function parseMouseSequence(input: string): ParsedMouse | null {\n const m = SGR_MOUSE_RE.exec(input)\n if (!m) return null\n\n const raw = parseInt(m[1]!)\n const x = parseInt(m[2]!) - 1 // 1-indexed → 0-indexed\n const y = parseInt(m[3]!) - 1\n const terminator = m[4]!\n\n const shift = !!(raw & 4)\n const meta = !!(raw & 8)\n const ctrl = !!(raw & 16)\n const motion = !!(raw & 32)\n const isWheel = !!(raw & 64)\n\n if (isWheel) {\n const wheelButton = raw & 3 // 0=up, 1=down, 2=left, 3=right\n return {\n button: 0,\n x,\n y,\n action: \"wheel\",\n delta: wheelButton === 0 ? -1 : 1,\n shift,\n meta,\n ctrl,\n }\n }\n\n const button = raw & 3\n const action = motion ? \"move\" : terminator === \"M\" ? \"down\" : \"up\"\n return { button, x, y, action, shift, meta, ctrl }\n}\n\nconst SGR_MOUSE_TEST_RE = /^\\x1b\\[<\\d+;\\d+;\\d+[Mm]$/\n\n/** Check if a raw input string is a mouse sequence */\nexport function isMouseSequence(input: string): boolean {\n return SGR_MOUSE_TEST_RE.test(input)\n}\n","/**\n * Bracketed Paste Mode\n *\n * Enables bracketed paste so the terminal wraps pasted text with markers.\n * This lets the app distinguish pasted text from typed input and receive\n * it as a single event rather than individual keystrokes.\n *\n * Protocol: DEC private mode 2004\n * - Enable: CSI ? 2004 h\n * - Disable: CSI ? 2004 l\n * - Paste start marker: CSI 200 ~\n * - Paste end marker: CSI 201 ~\n *\n * Supported by: Ghostty, Kitty, WezTerm, iTerm2, Alacritty, xterm, tmux, foot\n */\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Escape sequence that marks the beginning of pasted text */\nexport const PASTE_START = \"\\x1b[200~\"\n\n/** Escape sequence that marks the end of pasted text */\nexport const PASTE_END = \"\\x1b[201~\"\n\n// ============================================================================\n// Protocol Control\n// ============================================================================\n\n/**\n * Enable bracketed paste mode.\n * Writes CSI ? 2004 h to the output stream.\n */\nexport function enableBracketedPaste(stdout: NodeJS.WriteStream): void {\n stdout.write(\"\\x1b[?2004h\")\n}\n\n/**\n * Disable bracketed paste mode.\n * Writes CSI ? 2004 l to the output stream.\n */\nexport function disableBracketedPaste(stdout: NodeJS.WriteStream): void {\n stdout.write(\"\\x1b[?2004l\")\n}\n\n// ============================================================================\n// Parsing\n// ============================================================================\n\n/** Result of parsing a bracketed paste sequence */\nexport interface BracketedPasteResult {\n type: \"paste\"\n content: string\n}\n\n/**\n * Detect and extract bracketed paste content from raw terminal input.\n *\n * Returns the paste content if the input contains a complete bracketed paste\n * sequence (PASTE_START ... PASTE_END), or null if no paste markers are found.\n */\nexport function parseBracketedPaste(input: string): BracketedPasteResult | null {\n const startIdx = input.indexOf(PASTE_START)\n if (startIdx === -1) return null\n\n const contentStart = startIdx + PASTE_START.length\n const endIdx = input.indexOf(PASTE_END, contentStart)\n if (endIdx === -1) return null\n\n return {\n type: \"paste\",\n content: input.slice(contentStart, endIdx),\n }\n}\n\n// ============================================================================\n// Paste Event\n// ============================================================================\n\n/**\n * Structured paste event with source tracking and optional rich data.\n *\n * Fired when text is pasted into the application, either from the system\n * clipboard (via bracketed paste) or from the internal clipboard store.\n */\nexport interface PasteEvent {\n /** The pasted plain text */\n text: string\n /** Where the paste came from */\n source: \"bracketed\" | \"internal\"\n /** Rich clipboard data, if available (internal paste only) */\n structured?: import(\"./clipboard\").ClipboardData\n}\n\n/**\n * Create a PasteEvent from a bracketed paste result.\n */\nexport function createBracketedPasteEvent(result: BracketedPasteResult): PasteEvent {\n return {\n text: result.content,\n source: \"bracketed\",\n }\n}\n\n/**\n * Create a PasteEvent from internal clipboard data.\n */\nexport function createInternalPasteEvent(data: import(\"./clipboard\").ClipboardData): PasteEvent {\n return {\n text: data.text,\n source: \"internal\",\n structured: data,\n }\n}\n","/**\n * Focus Reporting (CSI ?1004h)\n *\n * Enables/disables terminal focus-in/focus-out event reporting.\n * When enabled, the terminal sends CSI I on focus-in and CSI O on focus-out.\n *\n * Protocol:\n * - Enable: CSI ? 1004 h\n * - Disable: CSI ? 1004 l\n * - Focus In: CSI I (\\x1b[I)\n * - Focus Out: CSI O (\\x1b[O)\n *\n * Supported by: xterm (v282+), Ghostty, Kitty, WezTerm, iTerm2, foot, VTE\n */\n\nconst CSI = \"\\x1b[\"\n\n/**\n * Enable terminal focus reporting.\n * After enabling, the terminal will send CSI I / CSI O sequences\n * when the terminal window gains or loses focus.\n */\nexport function enableFocusReporting(write: (data: string) => void): void {\n write(`${CSI}?1004h`)\n}\n\n/**\n * Disable terminal focus reporting.\n */\nexport function disableFocusReporting(write: (data: string) => void): void {\n write(`${CSI}?1004l`)\n}\n\n/**\n * Parse a focus event from terminal input.\n *\n * @param input Raw terminal input string\n * @returns Parsed focus event, or null if not a focus sequence\n */\nexport function parseFocusEvent(input: string): { type: \"focus-in\" | \"focus-out\" } | null {\n if (input.includes(`${CSI}I`)) {\n return { type: \"focus-in\" }\n }\n if (input.includes(`${CSI}O`)) {\n return { type: \"focus-out\" }\n }\n return null\n}\n","/**\n * Terminal provider - wraps stdin/stdout as a Provider.\n *\n * This makes the terminal \"just another provider\" - no special handling needed.\n *\n * @example\n * ```typescript\n * const term = createTermProvider(process.stdin, process.stdout);\n *\n * // State\n * console.log(term.getState()); // { cols: 80, rows: 24 }\n *\n * // Events\n * for await (const event of term.events()) {\n * if (event.type === 'key') console.log('Key:', event.data.input);\n * if (event.type === 'resize') console.log('Resize:', event.data);\n * }\n *\n * // Cleanup\n * term[Symbol.dispose]();\n * ```\n */\n\nimport { type Key, parseKey } from \"./keys\"\nimport { isMouseSequence, parseMouseSequence, type ParsedMouse } from \"../mouse\"\nimport { parseBracketedPaste, enableBracketedPaste, disableBracketedPaste } from \"../bracketed-paste\"\nimport { enableFocusReporting, disableFocusReporting, parseFocusEvent } from \"../focus-reporting\"\nimport type { Dims, Provider, ProviderEvent } from \"./types\"\n\n// ============================================================================\n// Input Splitting\n// ============================================================================\n\n/**\n * Result of splitting raw input — includes parsed sequences and any\n * trailing incomplete CSI sequence that needs cross-chunk buffering.\n */\ninterface SplitResult {\n /** Fully parsed key/mouse sequences */\n sequences: string[]\n /** Incomplete CSI sequence at end of chunk (needs next chunk to complete) */\n incomplete: string | null\n}\n\n/**\n * Split a raw stdin chunk into individual key sequences.\n *\n * When the OS buffers key repeat events, stdin delivers multiple keystrokes\n * in a single read (e.g., \"jjjjj\" for held 'j'). parseKey expects one\n * keystroke at a time, so we must split first.\n *\n * When a CSI sequence (ESC [ ...) ends at the chunk boundary without a\n * terminator, it is returned as `incomplete` so the caller can buffer it\n * and prepend to the next chunk. This handles SGR mouse sequences that\n * split across stdin data events (e.g., '\\x1b[<0;58;8' + 'M').\n *\n * Strategy:\n * - ESC followed by [ or O starts a multi-byte sequence — consume until terminator\n * - ESC alone or ESC + single char is a 2-byte meta sequence\n * - Everything else is a single byte\n */\nfunction splitRawInput(raw: string): SplitResult {\n const sequences: string[] = []\n let i = 0\n while (i < raw.length) {\n if (raw[i] === \"\\x1b\") {\n // Escape sequence\n if (i + 1 >= raw.length) {\n // Bare ESC at end\n sequences.push(\"\\x1b\")\n i++\n } else if (raw[i + 1] === \"[\") {\n // CSI sequence: ESC [ ... <letter or ~>\n let j = i + 2\n while (j < raw.length && !isCSITerminator(raw[j]!)) j++\n if (j < raw.length) {\n j++ // include terminator\n sequences.push(raw.slice(i, j))\n i = j\n } else {\n // Incomplete CSI — hit end of chunk without finding terminator.\n // Return it as incomplete so caller can buffer for next chunk.\n return { sequences, incomplete: raw.slice(i) }\n }\n } else if (raw[i + 1] === \"O\") {\n // SS3 sequence: ESC O <letter>\n const end = Math.min(i + 3, raw.length)\n sequences.push(raw.slice(i, end))\n i = end\n } else if (raw[i + 1] === \"\\x1b\") {\n // Double ESC: meta + escape, OR meta + CSI/SS3 sequence\n if (i + 2 < raw.length && raw[i + 2] === \"[\") {\n // Meta + CSI: ESC ESC [ params terminator (e.g., meta+arrow)\n let j = i + 3\n while (j < raw.length && !isCSITerminator(raw[j]!)) j++\n if (j < raw.length) {\n j++ // include terminator\n sequences.push(raw.slice(i, j))\n i = j\n } else {\n return { sequences, incomplete: raw.slice(i) }\n }\n } else if (i + 2 < raw.length && raw[i + 2] === \"O\") {\n // Meta + SS3: ESC ESC O letter\n const end = Math.min(i + 4, raw.length)\n sequences.push(raw.slice(i, end))\n i = end\n } else {\n // Plain double ESC (meta+escape)\n sequences.push(\"\\x1b\\x1b\")\n i += 2\n }\n } else {\n // Meta key: ESC + char\n sequences.push(raw.slice(i, i + 2))\n i += 2\n }\n } else {\n // Single byte (printable char, ctrl code, etc.)\n sequences.push(raw[i]!)\n i++\n }\n }\n return { sequences, incomplete: null }\n}\n\n/** CSI sequences end with a letter (A-Z, a-z) or ~ */\nfunction isCSITerminator(ch: string): boolean {\n return (ch >= \"A\" && ch <= \"Z\") || (ch >= \"a\" && ch <= \"z\") || ch === \"~\"\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Terminal state.\n */\nexport interface TermState {\n cols: number\n rows: number\n}\n\n/**\n * Terminal events.\n */\nexport interface TermEvents {\n key: { input: string; key: Key }\n mouse: ParsedMouse\n paste: { text: string }\n resize: Dims\n focus: { focused: boolean }\n [key: string]: unknown\n}\n\n/**\n * Terminal provider type.\n */\nexport type TermProvider = Provider<TermState, TermEvents>\n\n/**\n * Options for createTermProvider.\n */\nexport interface TermProviderOptions {\n /** Initial columns (default: from stdout or 80) */\n cols?: number\n /** Initial rows (default: from stdout or 24) */\n rows?: number\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Create a terminal provider from stdin/stdout.\n *\n * The provider:\n * - Exposes terminal dimensions as state\n * - Yields keyboard and resize events\n * - Cleans up stdin/stdout listeners on dispose\n */\nexport function createTermProvider(\n stdin: NodeJS.ReadStream,\n stdout: NodeJS.WriteStream,\n options: TermProviderOptions = {},\n): TermProvider {\n const { cols = stdout.columns || 80, rows = stdout.rows || 24 } = options\n\n // Current state\n let state: TermState = { cols, rows }\n\n // Subscribers\n const listeners = new Set<(state: TermState) => void>()\n\n // Disposed flag\n let disposed = false\n\n // Abort controller for cleanup\n const controller = new AbortController()\n const signal = controller.signal\n\n // Shared stdin cleanup — set by events(), callable from dispose as safety net\n let stdinCleanup: (() => void) | null = null\n\n // Resize handler\n const onResize = () => {\n state = {\n cols: stdout.columns || 80,\n rows: stdout.rows || 24,\n }\n listeners.forEach((l) => l(state))\n }\n\n // Increase max listeners to avoid warnings in apps with many subscribers\n // (e.g., ScrollbackList items each using useTerm for reactive state)\n if (typeof stdout.setMaxListeners === \"function\") {\n const current = stdout.getMaxListeners?.() ?? 10\n if (current < 50) stdout.setMaxListeners(50)\n }\n\n // Subscribe to resize\n stdout.on(\"resize\", onResize)\n\n return {\n getState(): TermState {\n return state\n },\n\n subscribe(listener: (state: TermState) => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n\n async *events(): AsyncGenerator<ProviderEvent<TermEvents>, void, undefined> {\n if (disposed) return\n\n // Set up stdin for raw mode if TTY\n if (stdin.isTTY) {\n stdin.setRawMode(true)\n stdin.resume()\n stdin.setEncoding(\"utf8\")\n }\n\n // Queued events\n const queue: ProviderEvent<TermEvents>[] = []\n let eventResolve: (() => void) | null = null\n\n // Single-key handler: parses one key sequence and enqueues an event.\n // Focus, mouse sequences are detected and parsed separately.\n const onKey = (raw: string) => {\n // Focus events: CSI I (focus-in) / CSI O (focus-out)\n const focusEvent = parseFocusEvent(raw)\n if (focusEvent) {\n queue.push({ type: \"focus\", data: { focused: focusEvent.type === \"focus-in\" } })\n return\n }\n if (isMouseSequence(raw)) {\n const parsed = parseMouseSequence(raw)\n if (parsed) {\n queue.push({ type: \"mouse\", data: parsed })\n return\n }\n }\n const [input, key] = parseKey(raw)\n queue.push({ type: \"key\", data: { input, key } })\n }\n\n // Cross-chunk buffer for incomplete CSI sequences.\n // When an SGR mouse sequence (or other CSI) splits across two stdin\n // data events, we buffer the incomplete prefix and prepend it to the\n // next chunk so the sequence can be reassembled.\n let incompleteCSI: string | null = null\n\n // Input pipeline Stage 1: Terminal Provider — see docs/guide/input-architecture.md\n // Splits multi-char chunks into individual keystrokes.\n // When the OS buffers key repeat events, stdin delivers \"jjjjj\" as a\n // single read — splitRawInput breaks it into individual keys for onKey.\n const onChunk = (chunk: string) => {\n // Prepend any buffered incomplete CSI from the previous chunk\n if (incompleteCSI !== null) {\n chunk = incompleteCSI + chunk\n incompleteCSI = null\n }\n\n // Check for bracketed paste before splitting into individual keys.\n // Paste content is delivered as a single event, not individual keystrokes.\n const pasteResult = parseBracketedPaste(chunk)\n if (pasteResult) {\n queue.push({ type: \"paste\", data: { text: pasteResult.content } })\n if (eventResolve) {\n const resolve = eventResolve\n eventResolve = null\n resolve()\n }\n return\n }\n\n const { sequences, incomplete } = splitRawInput(chunk)\n for (const raw of sequences) onKey(raw)\n incompleteCSI = incomplete\n if (eventResolve) {\n const resolve = eventResolve\n eventResolve = null\n resolve()\n }\n }\n\n // Resize handler for events\n const onResizeEvent = () => {\n const event: ProviderEvent<TermEvents> = {\n type: \"resize\",\n data: {\n cols: stdout.columns || 80,\n rows: stdout.rows || 24,\n },\n }\n queue.push(event)\n if (eventResolve) {\n const resolve = eventResolve\n eventResolve = null\n resolve()\n }\n }\n\n // Enable bracketed paste for TTY input.\n // Note: focus reporting is NOT enabled here — it's controlled by the\n // focusReporting option in create-app.tsx and run.tsx. Unconditionally\n // enabling it causes CSI I/O sequences to leak to screen in inline mode.\n if (stdin.isTTY) {\n enableBracketedPaste(stdout)\n }\n\n // Subscribe — track the cleanup function for use by both finally and dispose\n stdin.on(\"data\", onChunk)\n stdout.on(\"resize\", onResizeEvent)\n stdinCleanup = () => {\n if (stdin.isTTY) {\n disableBracketedPaste(stdout)\n }\n stdin.off(\"data\", onChunk)\n stdout.off(\"resize\", onResizeEvent)\n if (stdin.isTTY) {\n stdin.setRawMode(false)\n }\n // Always pause stdin — on(\"data\") unconditionally sets readableFlowing=true,\n // so we must unconditionally pause to release the event loop reference.\n stdin.pause()\n }\n\n try {\n while (!disposed && !signal.aborted) {\n // Wait for event\n if (queue.length === 0) {\n await new Promise<void>((resolve) => {\n eventResolve = resolve\n signal.addEventListener(\"abort\", () => resolve(), { once: true })\n })\n }\n\n // Check if aborted while waiting\n if (disposed || signal.aborted) break\n\n // Yield queued events\n while (queue.length > 0) {\n yield queue.shift()!\n }\n }\n } finally {\n if (stdinCleanup) {\n const fn = stdinCleanup\n stdinCleanup = null\n fn()\n }\n }\n },\n\n [Symbol.dispose](): void {\n if (disposed) return\n disposed = true\n\n // Abort pending waits\n controller.abort()\n\n // Remove resize listener\n stdout.off(\"resize\", onResize)\n\n // Clear listeners\n listeners.clear()\n\n // Safety net: clean up stdin in case events() generator's finally\n // hasn't run yet (e.g., async .return() propagation is delayed)\n if (stdinCleanup) {\n const fn = stdinCleanup\n stdinCleanup = null\n fn()\n }\n },\n }\n}\n","/**\n * Term interface and createTerm() factory.\n *\n * Term is the central abstraction for terminal interaction:\n * - Detection: hasCursor(), hasInput(), hasColor(), hasUnicode()\n * - Dimensions: cols, rows\n * - I/O: stdout, stdin, write(), writeLine()\n * - Provider: getState(), subscribe(), events() — typed key/mouse/resize\n * - Styling: Chainable styles via Proxy (term.bold.red('text'))\n * - Lifecycle: Disposable pattern via Symbol.dispose\n *\n * @example\n * ```ts\n * // Styling\n * const term = createTerm()\n * console.log(term.bold.red('error'))\n *\n * // Full terminal app\n * using term = createTerm()\n * await run(<App />, term)\n * ```\n */\n\nimport { createMixedStyle, createStyle, type Style } from \"@silvery/ansi\"\nimport type {\n ColorLevel,\n CreateTermOptions,\n TermEmulator,\n TermEmulatorBackend,\n TermScreen,\n TerminalCaps,\n} from \"./types\"\nimport type { TerminalBuffer } from \"../buffer\"\nimport { createTextFrame } from \"../buffer\"\nimport type { TextFrame } from \"@silvery/ag/text-frame\"\nimport { outputPhase } from \"../pipeline/output-phase\"\nimport { defaultCaps, detectColor, detectCursor, detectInput, detectTerminalCaps, detectUnicode } from \"./detection\"\nimport type { ProviderEvent } from \"../runtime/types\"\nimport { createTermProvider, type TermState, type TermEvents } from \"../runtime/term-provider\"\nimport { splitRawInput, parseKey } from \"@silvery/ag/keys\"\nimport { isMouseSequence, parseMouseSequence } from \"../mouse\"\nimport { parseFocusEvent } from \"../focus-reporting\"\nimport { parseBracketedPaste } from \"../bracketed-paste\"\n\n// Re-export Provider-related types for convenience\nexport type { TermState, TermEvents } from \"../runtime/term-provider\"\n\n// =============================================================================\n// ANSI Utilities\n// =============================================================================\n\n/**\n * ANSI escape code pattern for stripping.\n */\nconst ANSI_REGEX =\n /\\x1b\\[[0-9;:]*m|\\x9b[0-9;:]*m|\\x1b\\]8;;[^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)|\\x9d8;;[^\\x07\\x1b\\x9c]*(?:\\x07|\\x1b\\\\|\\x9c)/g\n\n/**\n * Strip all ANSI escape codes from a string.\n */\nfunction stripAnsi(text: string): string {\n return text.replace(ANSI_REGEX, \"\")\n}\n\n// =============================================================================\n// Style Chain Types\n// =============================================================================\n\n/**\n * All chalk style method names that can be chained.\n */\ntype ChalkStyleName =\n // Modifiers\n | \"reset\"\n | \"bold\"\n | \"dim\"\n | \"italic\"\n | \"underline\"\n | \"overline\"\n | \"inverse\"\n | \"hidden\"\n | \"strikethrough\"\n | \"visible\"\n // Foreground colors\n | \"black\"\n | \"red\"\n | \"green\"\n | \"yellow\"\n | \"blue\"\n | \"magenta\"\n | \"cyan\"\n | \"white\"\n | \"gray\"\n | \"grey\"\n | \"blackBright\"\n | \"redBright\"\n | \"greenBright\"\n | \"yellowBright\"\n | \"blueBright\"\n | \"magentaBright\"\n | \"cyanBright\"\n | \"whiteBright\"\n // Background colors\n | \"bgBlack\"\n | \"bgRed\"\n | \"bgGreen\"\n | \"bgYellow\"\n | \"bgBlue\"\n | \"bgMagenta\"\n | \"bgCyan\"\n | \"bgWhite\"\n | \"bgGray\"\n | \"bgGrey\"\n | \"bgBlackBright\"\n | \"bgRedBright\"\n | \"bgGreenBright\"\n | \"bgYellowBright\"\n | \"bgBlueBright\"\n | \"bgMagentaBright\"\n | \"bgCyanBright\"\n | \"bgWhiteBright\"\n\n/**\n * StyleChain provides chainable styling methods.\n * Each property returns a new chain, and the chain is callable.\n */\nexport type StyleChain = {\n /**\n * Apply styles to text.\n */\n (text: string): string\n (template: TemplateStringsArray, ...values: unknown[]): string\n\n /**\n * RGB foreground color.\n */\n rgb(r: number, g: number, b: number): StyleChain\n\n /**\n * Hex foreground color.\n */\n hex(color: string): StyleChain\n\n /**\n * 256-color foreground.\n */\n ansi256(code: number): StyleChain\n\n /**\n * RGB background color.\n */\n bgRgb(r: number, g: number, b: number): StyleChain\n\n /**\n * Hex background color.\n */\n bgHex(color: string): StyleChain\n\n /**\n * 256-color background.\n */\n bgAnsi256(code: number): StyleChain\n} & {\n /**\n * Chainable style properties.\n */\n readonly [K in ChalkStyleName]: StyleChain\n}\n\n// =============================================================================\n// Term Interface\n// =============================================================================\n\n/**\n * Term — the central abstraction for terminal interaction.\n *\n * Term is both a styling helper (chainable ANSI via Proxy) and a\n * Provider (state + typed events). Pass it to `run()` or `createApp()`.\n *\n * Provides:\n * - Capability detection (cached on creation)\n * - Dimensions (live from stream)\n * - I/O (stdout, stdin, write, writeLine)\n * - Provider (getState, subscribe, events — key/mouse/resize)\n * - Styling (chainable via Proxy)\n * - Disposable lifecycle\n *\n * @example\n * ```ts\n * using term = createTerm()\n * await run(<App />, term)\n * ```\n */\nexport interface Term extends Disposable, StyleChain {\n // -------------------------------------------------------------------------\n // Detection Methods\n // -------------------------------------------------------------------------\n\n /**\n * Check if terminal supports cursor control (repositioning).\n * Returns false for dumb terminals and piped output.\n */\n hasCursor(): boolean\n\n /**\n * Check if terminal can read raw keystrokes.\n * Requires stdin to be a TTY with raw mode support.\n */\n hasInput(): boolean\n\n /**\n * Check color level supported by terminal.\n * Returns null if no color support.\n */\n hasColor(): ColorLevel | null\n\n /**\n * Check if terminal can render unicode symbols.\n */\n hasUnicode(): boolean\n\n /**\n * Terminal capabilities profile.\n * Detected when stdin is a TTY, undefined otherwise.\n * Override via createTerm({ caps: { ... } }).\n */\n readonly caps: TerminalCaps | undefined\n\n // -------------------------------------------------------------------------\n // Dimensions\n // -------------------------------------------------------------------------\n\n /**\n * Terminal width in columns.\n * Undefined if not a TTY or dimensions unavailable.\n */\n readonly cols: number | undefined\n\n /**\n * Terminal height in rows.\n * Undefined if not a TTY or dimensions unavailable.\n */\n readonly rows: number | undefined\n\n // -------------------------------------------------------------------------\n // Streams\n // -------------------------------------------------------------------------\n\n /**\n * Output stream (defaults to process.stdout).\n */\n readonly stdout: NodeJS.WriteStream\n\n /**\n * Input stream (defaults to process.stdin).\n */\n readonly stdin: NodeJS.ReadStream\n\n // -------------------------------------------------------------------------\n // I/O Methods\n // -------------------------------------------------------------------------\n\n /**\n * Write string to stdout.\n */\n write(str: string): void\n\n /**\n * Write string followed by newline to stdout.\n */\n writeLine(str: string): void\n\n // -------------------------------------------------------------------------\n // Provider (state + events)\n // -------------------------------------------------------------------------\n\n /**\n * Get current terminal state (dimensions).\n * Always returns defined values (falls back to 80x24).\n */\n getState(): TermState\n\n /**\n * Subscribe to terminal state changes (resize).\n * Returns unsubscribe function.\n */\n subscribe(listener: (state: TermState) => void): () => void\n\n /**\n * Event stream — yields typed key, mouse, and resize events.\n * Enables raw mode on stdin when iterated. Cleans up on return.\n */\n events(): AsyncIterable<ProviderEvent<TermEvents>>\n\n // -------------------------------------------------------------------------\n // Utilities\n // -------------------------------------------------------------------------\n\n /**\n * Strip ANSI escape codes from string.\n */\n stripAnsi(str: string): string\n\n // -------------------------------------------------------------------------\n // Terminal Emulator (present when created with a termless backend)\n // -------------------------------------------------------------------------\n\n /**\n * Visible screen region. Only available when created with a terminal backend.\n * Provides getText(), getLines(), containsText() for assertions.\n */\n readonly screen?: TermScreen\n\n /**\n * Scrollback region. Only available when created with a terminal backend.\n * Provides getText(), getLines(), containsText() for assertions.\n */\n readonly scrollback?: TermScreen\n\n /**\n * Cell-level access for the visible screen — row-first order.\n * Returns resolved RGB colors, attributes, wide-char info.\n * Only available on emulator-backed terms (createTermless).\n */\n cell?(row: number, col: number): { readonly fg: unknown; readonly bg: unknown; readonly char: string }\n\n /**\n * Row-level access for the visible screen.\n * Only available on emulator-backed terms (createTermless).\n */\n row?(n: number): {\n getText(): string\n cell(col: number): { readonly fg: unknown; readonly bg: unknown; readonly char: string }\n }\n\n /**\n * Resize the terminal emulator. Only available when created with a terminal backend.\n * Resizes the underlying emulator and triggers a re-render in the app.\n */\n resize?(cols: number, rows: number): void\n\n // -------------------------------------------------------------------------\n // Paint (rendered buffer → output)\n // -------------------------------------------------------------------------\n\n /**\n * Paint a rendered buffer to produce ANSI output.\n * Diffs buffer against prev (fresh render if prev is null).\n * Updates term.frame with an immutable TextFrame snapshot.\n * Returns the ANSI output string.\n * For emulator backends, also feeds the output to the emulator.\n * For headless terms, returns empty string.\n */\n paint?(buffer: TerminalBuffer, prev: TerminalBuffer | null): string\n\n /**\n * Last painted TextFrame. Set after each paint() call.\n * Immutable snapshot with cell-level access and resolved RGB colors.\n */\n readonly frame?: TextFrame\n}\n\n// =============================================================================\n// Shared Helpers\n// =============================================================================\n\n/** Parse raw terminal input into typed events (key, mouse, paste, focus). */\nfunction parseInputEvents(data: string): ProviderEvent<TermEvents>[] {\n const events: ProviderEvent<TermEvents>[] = []\n const pasteResult = parseBracketedPaste(data)\n if (pasteResult) {\n events.push({ type: \"paste\", data: { text: pasteResult.content } })\n } else {\n for (const raw of splitRawInput(data)) {\n const focusEvent = parseFocusEvent(raw)\n if (focusEvent) {\n events.push({ type: \"focus\", data: { focused: focusEvent.type === \"focus-in\" } })\n continue\n }\n if (isMouseSequence(raw)) {\n const parsed = parseMouseSequence(raw)\n if (parsed) events.push({ type: \"mouse\", data: parsed })\n continue\n }\n const [input, key] = parseKey(raw)\n events.push({ type: \"key\", data: { input, key } })\n }\n }\n return events\n}\n\n/** Event queue with async generator for term providers. */\nfunction createEventQueue(controller: AbortController) {\n const queue: ProviderEvent<TermEvents>[] = []\n let resolve: (() => void) | null = null\n let disposed = false\n\n function push(...events: ProviderEvent<TermEvents>[]) {\n queue.push(...events)\n if (resolve) {\n const r = resolve\n resolve = null\n r()\n }\n }\n\n async function* events(): AsyncIterable<ProviderEvent<TermEvents>> {\n if (disposed) return\n while (!disposed && !controller.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n resolve = r\n controller.signal.addEventListener(\"abort\", () => r(), { once: true })\n })\n }\n if (disposed || controller.signal.aborted) break\n while (queue.length > 0) yield queue.shift()!\n }\n }\n\n return {\n push,\n events,\n dispose() {\n disposed = true\n },\n }\n}\n\n/** Mock stdout that feeds a terminal emulator and supports resize events. */\nfunction createEmulatorStdout(feed: (data: string) => void, cols: number, rows: number) {\n const resizeListeners = new Set<() => void>()\n const stdout: { columns: number; rows: number } & Record<string, unknown> = {\n write: (data: string | Uint8Array) => {\n feed(typeof data === \"string\" ? data : new TextDecoder().decode(data))\n return true\n },\n on: (event: string, handler: () => void) => {\n if (event === \"resize\") resizeListeners.add(handler)\n },\n off: (event: string, handler: () => void) => {\n if (event === \"resize\") resizeListeners.delete(handler)\n },\n isTTY: true,\n columns: cols,\n rows: rows,\n }\n return {\n stdout: stdout as unknown as NodeJS.WriteStream,\n resizeListeners,\n updateDims(c: number, r: number) {\n stdout.columns = c\n stdout.rows = r\n },\n }\n}\n\n/**\n * Finalize termBase into a Term: add frame getter, delegate emulator properties,\n * wrap with style chain Proxy.\n */\nfunction finalizeTerm(\n style: Style,\n termBase: Record<string, unknown>,\n frame: { get: () => TextFrame | undefined },\n opts?: {\n defineProperties?: Record<string, PropertyDescriptor>\n delegateFrom?: object\n },\n): Term {\n Object.defineProperty(termBase, \"frame\", { get: frame.get, enumerable: true })\n if (opts?.defineProperties) Object.defineProperties(termBase, opts.defineProperties)\n if (opts?.delegateFrom) {\n for (const key of Object.keys(opts.delegateFrom)) {\n if (key in termBase) continue\n const val = (opts.delegateFrom as any)[key]\n Object.defineProperty(\n termBase,\n key,\n typeof val === \"function\"\n ? { value: (...args: unknown[]) => (opts.delegateFrom as any)[key](...args) }\n : { get: () => (opts.delegateFrom as any)[key] },\n )\n }\n }\n return createMixedStyle(style, termBase) as unknown as Term\n}\n\n// =============================================================================\n// createTerm Factory\n// =============================================================================\n\n/**\n * Create a Term instance.\n *\n * Factory overloads:\n * - `createTerm()` — Node.js terminal (auto-detect from process.stdin/stdout)\n * - `createTerm({ stdout, stdin, ... })` — Node.js with custom streams/overrides\n * - `createTerm({ cols, rows })` — Headless for testing (no I/O, fixed dims)\n * - `createTerm(backend, { cols, rows })` — Terminal emulator backend (termless) for testing\n * - `createTerm(emulator)` — Pre-created termless Terminal\n *\n * Detection results are cached at creation time for consistency.\n *\n * @example\n * ```ts\n * // Full terminal app\n * using term = createTerm()\n * await run(<App />, term)\n *\n * // Headless for testing\n * const term = createTerm({ cols: 80, rows: 24 })\n *\n * // Terminal emulator (termless) for full ANSI testing\n * using term = createTerm(createXtermBackend(), { cols: 80, rows: 24 })\n * await run(<App />, term)\n * expect(term.screen).toContainText(\"Hello\")\n *\n * // Custom streams\n * const term = createTerm({ stdout: customStream })\n * ```\n */\nexport function createTerm(options?: CreateTermOptions): Term\nexport function createTerm(dims: { cols: number; rows: number }): Term\nexport function createTerm(backend: TermEmulatorBackend, dims: { cols: number; rows: number }): Term\nexport function createTerm(emulator: TermEmulator): Term\nexport function createTerm(\n first?: CreateTermOptions | { cols: number; rows: number } | TermEmulator | TermEmulatorBackend,\n second?: { cols: number; rows: number },\n): Term {\n // Two-arg: createTerm(backend, { cols, rows }) — raw backend + dims\n if (second && first && isTermBackend(first)) {\n // Lazy require — @termless/core is an optional dependency, only needed\n // for emulator backends. Using a variable prevents static analysis from\n // trying to resolve it at bundle/parse time.\n const mod = \"@termless/core\"\n const { createTerminal } = require(mod) as {\n createTerminal: (opts: { backend: TermEmulatorBackend; cols: number; rows: number }) => TermEmulator\n }\n const emulator = createTerminal({ backend: first as TermEmulatorBackend, ...second })\n return createBackendTerm(emulator)\n }\n // Detect terminal emulator (termless Terminal): has feed + screen\n if (first && isTermEmulator(first)) {\n return createBackendTerm(first as TermEmulator)\n }\n // Detect headless dims: has cols + rows but no stdout/stdin/color/caps\n if (first && isHeadlessDims(first)) {\n return createHeadlessTerm(first as { cols: number; rows: number })\n }\n return createNodeTerm((first as CreateTermOptions) ?? {})\n}\n\n/** Detect terminal emulator (termless Terminal): has feed() + screen */\nfunction isTermEmulator(obj: unknown): obj is TermEmulator {\n if (typeof obj !== \"object\" || obj === null) return false\n const o = obj as Record<string, unknown>\n return typeof o.feed === \"function\" && typeof o.screen === \"object\" && o.screen !== null\n}\n\n/** Detect terminal emulator backend (termless TerminalBackend): has init() + name */\nfunction isTermBackend(obj: unknown): obj is TermEmulatorBackend {\n if (typeof obj !== \"object\" || obj === null) return false\n const o = obj as Record<string, unknown>\n return typeof o.init === \"function\" && typeof o.name === \"string\" && typeof o.destroy === \"function\"\n}\n\n/** Detect headless dims: has cols and rows numbers, no stdout */\nfunction isHeadlessDims(obj: unknown): boolean {\n if (typeof obj !== \"object\" || obj === null) return false\n const o = obj as Record<string, unknown>\n return typeof o.cols === \"number\" && typeof o.rows === \"number\" && !(\"stdout\" in o) && !(\"stdin\" in o)\n}\n\n/**\n * Create a Node.js terminal with full Provider capabilities.\n */\nfunction createNodeTerm(options: CreateTermOptions): Term {\n const stdout = options.stdout ?? process.stdout\n const stdin = options.stdin ?? process.stdin\n\n // Cache detection results\n const cachedCursor = options.cursor ?? detectCursor(stdout)\n const cachedInput = detectInput(stdin)\n const cachedColor = options.color !== undefined ? options.color : detectColor(stdout)\n const cachedUnicode = options.unicode ?? detectUnicode()\n\n // Detect terminal capabilities (only when interactive)\n const detectedCaps = options.caps\n ? { ...defaultCaps(), ...options.caps }\n : stdin.isTTY\n ? detectTerminalCaps()\n : undefined\n\n // Create style instance with appropriate color level\n const styleInstance = createStyle({ level: cachedColor })\n\n // Lazy Provider — only created when getState/subscribe/events is called.\n // This avoids adding a resize listener for styling-only usage.\n let provider: ReturnType<typeof createTermProvider> | null = null\n const getProvider = () => {\n if (!provider) {\n provider = createTermProvider(stdin, stdout, {\n cols: stdout.columns || 80,\n rows: stdout.rows || 24,\n })\n }\n return provider\n }\n\n let _frame: TextFrame | undefined\n\n const termBase = {\n hasCursor: () => cachedCursor,\n hasInput: () => cachedInput,\n hasColor: () => cachedColor,\n hasUnicode: () => cachedUnicode,\n caps: detectedCaps,\n stdout,\n stdin,\n write: (str: string) => {\n stdout.write(str)\n },\n writeLine: (str: string) => {\n stdout.write(str + \"\\n\")\n },\n getState: (): TermState => getProvider().getState(),\n subscribe: (listener: (state: TermState) => void): (() => void) => getProvider().subscribe(listener),\n events: (): AsyncIterable<ProviderEvent<TermEvents>> => getProvider().events(),\n stripAnsi,\n paint: (buffer: TerminalBuffer, prev: TerminalBuffer | null): string => {\n const output = outputPhase(prev, buffer)\n _frame = createTextFrame(buffer)\n return output\n },\n [Symbol.dispose]: () => {\n if (provider) provider[Symbol.dispose]()\n },\n }\n\n return finalizeTerm(\n styleInstance,\n termBase,\n { get: () => _frame },\n {\n defineProperties: {\n cols: { get: () => (stdout.isTTY ? stdout.columns : undefined), enumerable: true },\n rows: { get: () => (stdout.isTTY ? stdout.rows : undefined), enumerable: true },\n },\n },\n )\n}\n\n/** Create a headless terminal for testing — no I/O, fixed dimensions. */\nfunction createHeadlessTerm(dims: { cols: number; rows: number }): Term {\n let disposed = false\n const controller = new AbortController()\n let _frame: TextFrame | undefined\n\n const termBase = {\n hasCursor: () => false,\n hasInput: () => false,\n hasColor: () => null as ColorLevel | null,\n hasUnicode: () => false,\n caps: undefined as TerminalCaps | undefined,\n stdout: process.stdout,\n stdin: process.stdin,\n write: () => {},\n writeLine: () => {},\n getState: (): TermState => dims,\n subscribe: (): (() => void) => () => {},\n async *events(): AsyncIterable<ProviderEvent<TermEvents>> {\n if (disposed) return\n await new Promise<void>((r) => controller.signal.addEventListener(\"abort\", () => r(), { once: true }))\n },\n stripAnsi,\n paint: (_buffer: TerminalBuffer, _prev: TerminalBuffer | null): string => {\n _frame = createTextFrame(_buffer)\n return \"\"\n },\n [Symbol.dispose]: () => {\n if (disposed) return\n disposed = true\n controller.abort()\n },\n }\n\n return finalizeTerm(\n createStyle({ level: null }),\n termBase,\n { get: () => _frame },\n {\n defineProperties: {\n cols: { get: () => dims.cols, enumerable: true },\n rows: { get: () => dims.rows, enumerable: true },\n },\n },\n )\n}\n\n/** Create a terminal backed by a termless emulator — real ANSI processing, screen/scrollback. */\nfunction createBackendTerm(emulator: TermEmulator): Term {\n const controller = new AbortController()\n const eq = createEventQueue(controller)\n const { stdout, resizeListeners, updateDims } = createEmulatorStdout(\n (s) => emulator.feed(s),\n emulator.cols,\n emulator.rows,\n )\n const subscribers = new Set<(state: TermState) => void>()\n let _frame: TextFrame | undefined\n\n const termBase = {\n hasCursor: () => true,\n hasInput: () => true,\n hasColor: () => \"truecolor\" as ColorLevel | null,\n hasUnicode: () => true,\n caps: undefined as TerminalCaps | undefined,\n stdout,\n stdin: process.stdin,\n write: (str: string) => emulator.feed(str),\n writeLine: (str: string) => emulator.feed(str + \"\\n\"),\n getState: (): TermState => ({ cols: emulator.cols, rows: emulator.rows }),\n subscribe: (listener: (state: TermState) => void): (() => void) => {\n subscribers.add(listener)\n return () => subscribers.delete(listener)\n },\n events: () => eq.events(),\n resize: (cols: number, rows: number) => {\n emulator.resize(cols, rows)\n subscribers.forEach((l) => l({ cols, rows }))\n eq.push({ type: \"resize\", data: { cols, rows } })\n updateDims(cols, rows)\n resizeListeners.forEach((l) => l())\n },\n sendInput: (data: string) => eq.push(...parseInputEvents(data)),\n stripAnsi,\n paint: (buffer: TerminalBuffer, prev: TerminalBuffer | null): string => {\n const output = outputPhase(prev, buffer)\n if (output) emulator.feed(output)\n _frame = createTextFrame(buffer)\n return output\n },\n _emulator: emulator,\n [Symbol.dispose]: () => {\n eq.dispose()\n controller.abort()\n subscribers.clear()\n emulator.close().catch(() => {})\n },\n }\n\n return finalizeTerm(\n createStyle({ level: \"truecolor\" }),\n termBase,\n { get: () => _frame },\n {\n defineProperties: {\n cols: { get: () => emulator.cols, enumerable: true },\n rows: { get: () => emulator.rows, enumerable: true },\n screen: { get: () => emulator.screen, enumerable: true },\n scrollback: { get: () => emulator.scrollback, enumerable: true },\n },\n delegateFrom: emulator,\n },\n )\n}\n","/**\n * Console patching with subscribable store for useSyncExternalStore.\n */\n\nimport type { ConsoleEntry, ConsoleMethod } from \"./types\"\n\n/**\n * Aggregate counts of console output by severity.\n */\nexport interface ConsoleStats {\n total: number\n errors: number\n warnings: number\n}\n\n/**\n * A patched console that intercepts methods and accumulates entries.\n * Compatible with React's useSyncExternalStore.\n */\nexport interface PatchedConsole extends Disposable {\n /** Read current entries (for useSyncExternalStore). Empty when capture=false. */\n getSnapshot(): readonly ConsoleEntry[]\n\n /** Get aggregate counts (total, errors, warnings). Works in all modes. */\n getStats(): ConsoleStats\n\n /** Subscribe to changes - called when new entry arrives. Returns unsubscribe function. */\n subscribe(onStoreChange: () => void): () => void\n\n dispose(): void\n [Symbol.dispose](): void\n}\n\nconst METHODS: ConsoleMethod[] = [\"log\", \"info\", \"warn\", \"error\", \"debug\"]\n\nconst STDERR_METHODS = new Set<ConsoleMethod>([\"error\", \"warn\"])\n\nexport interface PatchConsoleOptions {\n /**\n * Suppress original console output when true.\n * Use in TUI mode where you want console output only in a component.\n */\n suppress?: boolean\n\n /**\n * Store full entries in memory (default: true).\n * Set to false for count-only mode — getSnapshot() returns empty array,\n * but getStats() still tracks counts. Avoids unbounded memory growth.\n */\n capture?: boolean\n}\n\n/**\n * Patch console methods to intercept and track output.\n * Returns a disposable that restores original methods.\n *\n * @param console - The console object to patch\n * @param options - Configuration options\n * @param options.suppress - If true, don't call original methods (for TUI mode)\n * @param options.capture - If false, only count entries (no memory storage)\n */\nexport function patchConsole(console: Console, options?: PatchConsoleOptions): PatchedConsole {\n const suppress = options?.suppress ?? false\n const capture = options?.capture ?? true\n\n // Entry storage (only when capture=true)\n const entries: ConsoleEntry[] = []\n // Snapshot must be a new reference on each change for useSyncExternalStore\n // (React uses Object.is to detect changes — same reference = no re-render)\n let snapshot: readonly ConsoleEntry[] = entries\n const EMPTY: readonly ConsoleEntry[] = Object.freeze([])\n\n // Stats (always tracked)\n const stats: ConsoleStats = { total: 0, errors: 0, warnings: 0 }\n\n const subscribers = new Set<() => void>()\n\n // Save original methods\n const originals = new Map<ConsoleMethod, Console[ConsoleMethod]>()\n for (const method of METHODS) {\n originals.set(method, console[method].bind(console))\n }\n\n // Batch subscriber notifications to prevent synchronous feedback loops.\n // Without batching, console.debug() during a React render triggers\n // useSyncExternalStore → re-render → more console output → infinite loop.\n let notifyPending = false\n\n function scheduleNotify() {\n if (notifyPending) return\n notifyPending = true\n queueMicrotask(() => {\n notifyPending = false\n subscribers.forEach((subscriber) => subscriber())\n })\n }\n\n // Replace with interceptors\n for (const method of METHODS) {\n const original = originals.get(method)!\n console[method] = (...args: unknown[]) => {\n // Update stats\n stats.total++\n if (method === \"error\") stats.errors++\n else if (method === \"warn\") stats.warnings++\n\n // Store entry if capturing\n if (capture) {\n const entry: ConsoleEntry = {\n method,\n args,\n stream: STDERR_METHODS.has(method) ? \"stderr\" : \"stdout\",\n }\n entries.push(entry)\n snapshot = entries.slice()\n }\n\n // Call original unless suppressed (TUI mode)\n if (!suppress) {\n original(...args)\n }\n\n // Notify subscribers (batched via microtask)\n scheduleNotify()\n }\n }\n\n function restore() {\n for (const method of METHODS) {\n console[method] = originals.get(method)!\n }\n }\n\n return {\n getSnapshot(): readonly ConsoleEntry[] {\n return capture ? snapshot : EMPTY\n },\n\n getStats(): ConsoleStats {\n return { ...stats }\n },\n\n subscribe(onStoreChange: () => void): () => void {\n subscribers.add(onStoreChange)\n return () => {\n subscribers.delete(onStoreChange)\n }\n },\n\n dispose() {\n restore()\n subscribers.clear()\n },\n\n [Symbol.dispose]() {\n this.dispose()\n },\n }\n}\n","/**\n * Output guard -- intercepts process.stdout/stderr writes AND console methods\n * in alt screen mode.\n *\n * When active:\n * - stdout: only allows writes from silvery's render pipeline (via writeStdout).\n * All other stdout writes are suppressed.\n * - stderr: redirected to DEBUG_LOG file if set, otherwise suppressed.\n * - console.log/info/warn/error/debug: redirected same as stderr.\n * - Restores all original methods on dispose.\n *\n * This solves the problem where ANY write to process.stdout, process.stderr,\n * or console.* outside silvery's render pipeline corrupts the alt screen display.\n */\n\nimport { openSync, writeSync, closeSync } from \"node:fs\"\nimport { createLogger } from \"loggily\"\n\nconst log = createLogger(\"silvery:guard\")\n\nexport interface OutputGuard extends Disposable {\n /** Allow a write through stdout (called by silvery's render pipeline) */\n writeStdout(data: string | Uint8Array): boolean\n /** Whether the guard is currently active */\n readonly active: boolean\n /** Number of stdout writes suppressed since activation */\n readonly suppressedCount: number\n /** Number of stderr writes redirected since activation */\n readonly redirectedCount: number\n dispose(): void\n [Symbol.dispose](): void\n}\n\nexport interface OutputGuardOptions {\n /** File path to redirect stderr to (default: process.env.DEBUG_LOG) */\n stderrLog?: string\n /** If true, buffer stderr and flush on dispose instead of redirecting to file */\n bufferStderr?: boolean\n}\n\nexport function createOutputGuard(options?: OutputGuardOptions): OutputGuard {\n // Save the original write methods for restoration (exact reference)\n const savedStdoutWrite = process.stdout.write\n const savedStderrWrite = process.stderr.write\n // Bound versions for calling during interception (needs correct `this`)\n const origStdoutWrite = savedStdoutWrite.bind(process.stdout)\n const origStderrWrite = savedStderrWrite.bind(process.stderr)\n\n // Track whether silvery is currently writing (to allow its output through)\n let silveryWriting = false\n let disposed = false\n let suppressedCount = 0\n let redirectedCount = 0\n\n // Stderr buffer or file\n const stderrLog = options?.stderrLog ?? process.env.DEBUG_LOG\n let stderrFd: number | null = null\n const stderrBuffer: string[] = []\n\n if (stderrLog) {\n try {\n stderrFd = openSync(stderrLog, \"a\")\n } catch {\n // If we can't open the log file, fall back to suppression\n }\n }\n\n // Intercept stdout -- only allow silvery's own writes\n process.stdout.write = function (chunk: any, ...args: any[]): boolean {\n if (silveryWriting) {\n return origStdoutWrite(chunk, ...args)\n }\n // Non-silvery stdout write -- suppress in alt screen\n suppressedCount++\n const preview = typeof chunk === \"string\" ? chunk.slice(0, 60) : \"<binary>\"\n log?.debug?.(`suppressed stdout write (${suppressedCount}): ${JSON.stringify(preview)}`)\n return true\n } as any\n\n // Intercept stderr -- redirect to file or buffer\n process.stderr.write = function (chunk: any, ..._args: any[]): boolean {\n const str = typeof chunk === \"string\" ? chunk : chunk.toString()\n redirectedCount++\n if (stderrFd !== null) {\n try {\n writeSync(stderrFd, str)\n } catch {\n // File may have been closed externally\n }\n return true\n }\n if (options?.bufferStderr) {\n stderrBuffer.push(str)\n return true\n }\n // No file, no buffer -- suppress\n return true\n } as any\n\n // Intercept console methods — they write to stderr in Bun/Node and bypass\n // the process.stderr.write patch (they use internal C++ bindings).\n const savedConsoleLog = console.log\n const savedConsoleInfo = console.info\n const savedConsoleWarn = console.warn\n const savedConsoleError = console.error\n const savedConsoleDebug = console.debug\n\n function redirectConsole(...args: unknown[]): void {\n const str = args.map((a) => (typeof a === \"string\" ? a : String(a))).join(\" \") + \"\\n\"\n redirectedCount++\n if (stderrFd !== null) {\n try {\n writeSync(stderrFd, str)\n } catch {\n // File may have been closed\n }\n return\n }\n if (options?.bufferStderr) {\n stderrBuffer.push(str)\n return\n }\n // Suppress\n }\n\n console.log = redirectConsole as typeof console.log\n console.info = redirectConsole as typeof console.info\n console.warn = redirectConsole as typeof console.warn\n console.error = redirectConsole as typeof console.error\n console.debug = redirectConsole as typeof console.debug\n\n // Log after all intercepts installed so the message goes through the guard\n log?.info?.(\"activated\" + (stderrLog ? ` (stderr -> ${stderrLog})` : \" (stderr suppressed)\"))\n\n function dispose() {\n if (disposed) return\n disposed = true\n\n process.stdout.write = savedStdoutWrite\n process.stderr.write = savedStderrWrite\n console.log = savedConsoleLog\n console.info = savedConsoleInfo\n console.warn = savedConsoleWarn\n console.error = savedConsoleError\n console.debug = savedConsoleDebug\n\n log?.info?.(`deactivated (suppressed ${suppressedCount} stdout, redirected ${redirectedCount} stderr)`)\n\n // Flush buffered stderr\n for (const line of stderrBuffer) {\n origStderrWrite(line)\n }\n\n // Close log file\n if (stderrFd !== null) {\n try {\n closeSync(stderrFd)\n } catch {\n // Already closed\n }\n stderrFd = null\n }\n }\n\n return {\n writeStdout(data) {\n silveryWriting = true\n try {\n return origStdoutWrite(data)\n } finally {\n silveryWriting = false\n }\n },\n get active() {\n return !disposed\n },\n get suppressedCount() {\n return suppressedCount\n },\n get redirectedCount() {\n return redirectedCount\n },\n dispose,\n [Symbol.dispose]: dispose,\n }\n}\n","export { ANSI_REGEX, stripAnsi, displayLength } from \"@silvery/ansi\"\n","/**\n * Extended underline style functions.\n *\n * All functions have moved to @silvery/ansi (underline-ext.ts).\n * Re-exported here to preserve the @silvery/ag-term/ansi import path.\n */\n\nexport {\n underline,\n curlyUnderline,\n dottedUnderline,\n dashedUnderline,\n doubleUnderline,\n underlineColor,\n styledUnderline,\n} from \"@silvery/ansi\"\n","/**\n * Terminal hyperlink functions using OSC 8.\n *\n * The hyperlink function has moved to @silvery/ansi (hyperlink.ts).\n * Re-exported here to preserve the @silvery/ag-term/ansi import path.\n */\n\nexport { hyperlink } from \"@silvery/ansi\"\n","/**\n * ANSI terminal control helpers.\n *\n * All functions have moved to @silvery/ansi (terminal-control.ts).\n * Re-exported here to preserve the @silvery/ag-term/ansi import path.\n */\n\nexport {\n enterAltScreen,\n leaveAltScreen,\n clearScreen,\n clearLine,\n cursorTo,\n cursorHome,\n cursorHide,\n cursorShow,\n cursorStyle,\n setTitle,\n enableMouse,\n disableMouse,\n enableBracketedPaste,\n disableBracketedPaste,\n enableSyncUpdate,\n disableSyncUpdate,\n setScrollRegion,\n resetScrollRegion,\n scrollUp,\n scrollDown,\n enableKittyKeyboard,\n disableKittyKeyboard,\n} from \"@silvery/ansi\"\n","/**\n * Advanced Clipboard — OSC 5522 (Kitty clipboard protocol)\n *\n * Extends OSC 52 with MIME type support, large payload chunking,\n * and paste events. Falls back to OSC 52 when 5522 is not available.\n *\n * Protocol overview (from kitty docs):\n * - Write: ESC ] 5522 ; type=write ST → wdata chunks → empty wdata\n * - Read: ESC ] 5522 ; type=read ; <base64 mime list> ST\n * - Paste mode: CSI ? 5522 h (enable) / CSI ? 5522 l (disable)\n *\n * Metadata is colon-separated key=value pairs. Payloads are base64-encoded.\n * Data chunks are at most 4096 bytes before base64 encoding.\n *\n * Supported by: Kitty 0.28+. Ghostty is considering adoption.\n *\n * @see https://sw.kovidgoyal.net/kitty/clipboard/\n * @module\n */\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst ESC = \"\\x1b\"\nconst ST = `${ESC}\\\\`\nconst OSC_5522 = `${ESC}]5522;`\n\n/** Default chunk size in bytes (before base64 encoding) */\nconst DEFAULT_CHUNK_SIZE = 4096\n\n/** Enable paste events mode */\nexport const ENABLE_PASTE_EVENTS = `${ESC}[?5522h`\n\n/** Disable paste events mode */\nexport const DISABLE_PASTE_EVENTS = `${ESC}[?5522l`\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** A single clipboard entry with MIME type and data. */\nexport interface ClipboardEntry {\n /** MIME type (e.g. \"text/plain\", \"text/html\", \"image/png\") */\n mime: string\n /** Content — string for text types, Uint8Array for binary */\n data: string | Uint8Array\n}\n\n/** Options for creating an advanced clipboard. */\nexport interface AdvancedClipboardOptions {\n /** Write escape sequences to the terminal */\n write: (data: string) => void\n /** Subscribe to terminal input data. Returns unsubscribe function. */\n onData: (handler: (data: string) => void) => () => void\n /** Max bytes per chunk before base64 encoding (default: 4096) */\n chunkSize?: number\n /** Whether the terminal supports OSC 5522 (default: false — uses OSC 52 fallback) */\n supported?: boolean\n}\n\n/** Advanced clipboard with MIME type support and paste events. */\nexport interface AdvancedClipboard {\n /** Copy entries with MIME type support */\n copy(entries: ClipboardEntry[]): void\n /** Copy plain text (convenience) */\n copyText(text: string): void\n /** Copy with HTML alternative */\n copyRich(text: string, html: string): void\n /** Subscribe to paste events. Returns unsubscribe function. */\n onPaste(handler: (entries: ClipboardEntry[]) => void): () => void\n /** Whether the terminal supports OSC 5522 */\n readonly supported: boolean\n /** Clean up subscriptions */\n dispose(): void\n}\n\n// ============================================================================\n// Encoding Helpers\n// ============================================================================\n\n/** Encode string as base64 */\nfunction toBase64(text: string): string {\n return Buffer.from(text, \"utf-8\").toString(\"base64\")\n}\n\n/** Encode bytes as base64 */\nfunction bytesToBase64(data: Uint8Array): string {\n return Buffer.from(data).toString(\"base64\")\n}\n\n/** Decode base64 to string */\nfunction fromBase64(base64: string): string {\n return Buffer.from(base64, \"base64\").toString(\"utf-8\")\n}\n\n/** Decode base64 to bytes */\nfunction base64ToBytes(base64: string): Uint8Array {\n return new Uint8Array(Buffer.from(base64, \"base64\"))\n}\n\n/** Convert entry data to a Buffer for chunking */\nfunction entryDataToBuffer(data: string | Uint8Array): Buffer {\n if (typeof data === \"string\") {\n return Buffer.from(data, \"utf-8\")\n }\n return Buffer.from(data)\n}\n\n// ============================================================================\n// Protocol Helpers\n// ============================================================================\n\n/**\n * Build an OSC 5522 sequence.\n *\n * @param metadata - colon-separated key=value pairs\n * @param payload - optional base64 payload\n */\nfunction osc5522(metadata: string, payload?: string): string {\n if (payload !== undefined) {\n return `${OSC_5522}${metadata};${payload}${ST}`\n }\n return `${OSC_5522}${metadata}${ST}`\n}\n\n/**\n * Generate chunked wdata sequences for a single MIME entry.\n *\n * Each chunk is at most chunkSize bytes before base64 encoding.\n * An empty wdata with just the mime signals end of data for that type.\n */\nfunction* generateChunks(entry: ClipboardEntry, chunkSize: number): Generator<string> {\n const mimeB64 = toBase64(entry.mime)\n const raw = entryDataToBuffer(entry.data)\n\n if (raw.length === 0) {\n // Even empty data sends one chunk then a terminator\n yield osc5522(`type=wdata:mime=${mimeB64}`, \"\")\n } else {\n for (let offset = 0; offset < raw.length; offset += chunkSize) {\n const chunk = raw.subarray(offset, offset + chunkSize)\n const b64 = bytesToBase64(new Uint8Array(chunk))\n yield osc5522(`type=wdata:mime=${mimeB64}`, b64)\n }\n }\n\n // Empty wdata signals end of this MIME type's data\n yield osc5522(\"type=wdata\")\n}\n\n// ============================================================================\n// OSC 52 Fallback\n// ============================================================================\n\n/**\n * Copy plain text via OSC 52 (fallback for terminals without 5522 support).\n */\nfunction osc52Copy(write: (data: string) => void, text: string): void {\n const base64 = toBase64(text)\n write(`${ESC}]52;c;${base64}\\x07`)\n}\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\n/** Parsed OSC 5522 response from terminal */\ninterface ParsedResponse {\n type: string\n status?: string\n mime?: string\n payload?: string\n}\n\n/**\n * Parse an OSC 5522 response sequence.\n *\n * Format: ESC ] 5522 ; metadata ; payload ST\n * Metadata: colon-separated key=value pairs\n */\nexport function parseOsc5522Response(input: string): ParsedResponse | null {\n // Find OSC 5522 prefix\n const prefixIdx = input.indexOf(OSC_5522)\n if (prefixIdx === -1) return null\n\n const afterPrefix = prefixIdx + OSC_5522.length\n\n // Find ST terminator (ESC \\)\n const stIdx = input.indexOf(ST, afterPrefix)\n if (stIdx === -1) return null\n\n const body = input.slice(afterPrefix, stIdx)\n\n // Split metadata and payload at first semicolon\n const semiIdx = body.indexOf(\";\")\n const metadataStr = semiIdx === -1 ? body : body.slice(0, semiIdx)\n const payload = semiIdx === -1 ? undefined : body.slice(semiIdx + 1)\n\n // Parse metadata key=value pairs\n const pairs = metadataStr.split(\":\")\n const result: ParsedResponse = { type: \"\" }\n\n for (const pair of pairs) {\n const eqIdx = pair.indexOf(\"=\")\n if (eqIdx === -1) continue\n const key = pair.slice(0, eqIdx)\n const value = pair.slice(eqIdx + 1)\n\n switch (key) {\n case \"type\":\n result.type = value\n break\n case \"status\":\n result.status = value\n break\n case \"mime\":\n result.mime = value\n break\n }\n }\n\n if (payload !== undefined) {\n result.payload = payload\n }\n\n return result\n}\n\n/**\n * Parse a paste event notification from terminal.\n *\n * When paste events mode is enabled (CSI ? 5522 h), the terminal\n * sends available MIME types when the user pastes.\n *\n * Format: ESC ] 5522 ; type=read:status=DATA:mime=<b64mime> ; <b64data> ST\n */\nexport function parsePasteData(input: string): ClipboardEntry | null {\n const parsed = parseOsc5522Response(input)\n if (!parsed) return null\n if (parsed.type !== \"read\" || parsed.status !== \"DATA\") return null\n if (!parsed.mime || parsed.payload === undefined) return null\n\n const mime = fromBase64(parsed.mime)\n const isText = mime.startsWith(\"text/\")\n\n if (isText) {\n return { mime, data: fromBase64(parsed.payload) }\n }\n return { mime, data: base64ToBytes(parsed.payload) }\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\n/**\n * Create an advanced clipboard with OSC 5522 support.\n *\n * When `supported` is true, uses the full OSC 5522 protocol for\n * MIME-typed clipboard operations. When false (default), falls back\n * to OSC 52 for plain text only.\n *\n * @example\n * ```ts\n * const clipboard = createAdvancedClipboard({\n * write: (data) => process.stdout.write(data),\n * onData: (handler) => {\n * process.stdin.on(\"data\", (buf) => handler(buf.toString()))\n * return () => process.stdin.removeListener(\"data\", handler)\n * },\n * supported: true,\n * })\n *\n * // Copy with MIME types\n * clipboard.copy([\n * { mime: \"text/plain\", data: \"Hello\" },\n * { mime: \"text/html\", data: \"<b>Hello</b>\" },\n * ])\n *\n * // Subscribe to paste events\n * const unsub = clipboard.onPaste((entries) => {\n * for (const entry of entries) {\n * console.log(entry.mime, entry.data)\n * }\n * })\n *\n * clipboard.dispose()\n * ```\n */\nexport function createAdvancedClipboard(options: AdvancedClipboardOptions): AdvancedClipboard {\n const { write, onData, chunkSize = DEFAULT_CHUNK_SIZE, supported = false } = options\n\n const pasteHandlers = new Set<(entries: ClipboardEntry[]) => void>()\n let inputUnsub: (() => void) | undefined\n\n // Accumulate paste data entries from multiple DATA responses\n let pendingEntries: ClipboardEntry[] = []\n\n // Set up input listener for paste events when we have handlers\n function ensureInputListener(): void {\n if (inputUnsub) return\n\n inputUnsub = onData((data: string) => {\n if (pasteHandlers.size === 0) return\n\n // Try to parse paste data from the input\n const entry = parsePasteData(data)\n if (entry) {\n pendingEntries.push(entry)\n }\n\n // Check for DONE signal — flush accumulated entries to handlers\n const parsed = parseOsc5522Response(data)\n if (parsed?.type === \"read\" && parsed.status === \"DONE\") {\n if (pendingEntries.length > 0) {\n const entries = pendingEntries\n pendingEntries = []\n for (const handler of pasteHandlers) {\n handler(entries)\n }\n }\n }\n })\n }\n\n return {\n get supported(): boolean {\n return supported\n },\n\n copy(entries: ClipboardEntry[]): void {\n if (!supported) {\n // Fallback: find text/plain entry and use OSC 52\n const textEntry = entries.find((e) => e.mime === \"text/plain\")\n if (textEntry) {\n const text = typeof textEntry.data === \"string\" ? textEntry.data : fromBase64(bytesToBase64(textEntry.data))\n osc52Copy(write, text)\n }\n return\n }\n\n // OSC 5522 write protocol:\n // 1. Send write start\n write(osc5522(\"type=write\"))\n\n // 2. Send chunked data for each MIME entry\n for (const entry of entries) {\n for (const chunk of generateChunks(entry, chunkSize)) {\n write(chunk)\n }\n }\n },\n\n copyText(text: string): void {\n this.copy([{ mime: \"text/plain\", data: text }])\n },\n\n copyRich(text: string, html: string): void {\n this.copy([\n { mime: \"text/plain\", data: text },\n { mime: \"text/html\", data: html },\n ])\n },\n\n onPaste(handler: (entries: ClipboardEntry[]) => void): () => void {\n pasteHandlers.add(handler)\n ensureInputListener()\n\n return () => {\n pasteHandlers.delete(handler)\n if (pasteHandlers.size === 0 && inputUnsub) {\n inputUnsub()\n inputUnsub = undefined\n }\n }\n },\n\n dispose(): void {\n pasteHandlers.clear()\n pendingEntries = []\n if (inputUnsub) {\n inputUnsub()\n inputUnsub = undefined\n }\n },\n }\n}\n","/**\n * ANSI primitives — Term factory, styling, detection, underlines, hyperlinks.\n *\n * Pure ANSI utilities (detection, SGR codes, constants, types) live in\n * `@silvery/ansi` and are re-exported here for backwards compatibility.\n *\n * ```ts\n * import { createTerm, patchConsole } from '@silvery/ag-term'\n *\n * using term = createTerm()\n * term.red('error')\n * term.bold.green('success')\n *\n * using patched = patchConsole(console)\n * patched.subscribe(() => console.log('new entry'))\n * ```\n *\n * @module\n */\n\n// =============================================================================\n// Term API (NewWay)\n// =============================================================================\n\nexport { createTerm } from \"./term\"\nexport type { Term, StyleChain, TermState, TermEvents } from \"./term\"\n\nimport { createTerm as _createTerm } from \"./term\"\nimport type { Term } from \"./term\"\n\n/**\n * Default term instance for convenience, lazily initialized on first access.\n * This avoids running terminal detection (including spawnSync) at import time.\n * Use this for simple scripts. For apps, prefer createTerm() with `using`.\n *\n * @example\n * ```ts\n * import { term } from '@silvery/ag-term'\n *\n * console.log(term.green('success'))\n * if (term.hasColor()) { ... }\n * ```\n */\nlet _lazyTerm: Term | undefined\nexport const term: Term = new Proxy({} as Term, {\n get(_target, prop, receiver) {\n if (!_lazyTerm) _lazyTerm = _createTerm()\n return Reflect.get(_lazyTerm, prop, receiver)\n },\n apply(_target, thisArg, args) {\n if (!_lazyTerm) _lazyTerm = _createTerm()\n return Reflect.apply(_lazyTerm as unknown as (...args: unknown[]) => unknown, thisArg, args)\n },\n has(_target, prop) {\n if (!_lazyTerm) _lazyTerm = _createTerm()\n return Reflect.has(_lazyTerm, prop)\n },\n})\n\nexport { patchConsole } from \"./patch-console\"\nexport type { PatchedConsole, PatchConsoleOptions, ConsoleStats } from \"./patch-console\"\n\nexport { createOutputGuard } from \"./output-guard\"\nexport type { OutputGuard, OutputGuardOptions } from \"./output-guard\"\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type {\n UnderlineStyle,\n RGB,\n ColorLevel,\n Color,\n AnsiColorName,\n StyleOptions,\n ConsoleMethod,\n ConsoleEntry,\n CreateTermOptions,\n TermEmulator,\n TermEmulatorBackend,\n TermScreen,\n} from \"./types\"\n\n// =============================================================================\n// Detection Functions\n// =============================================================================\n\nexport {\n detectCursor,\n detectInput,\n detectColor,\n detectUnicode,\n detectExtendedUnderline,\n detectTerminalCaps,\n defaultCaps,\n createBgModeDetector,\n parseBgModeResponse,\n ENABLE_BG_MODE_REPORTING,\n DISABLE_BG_MODE_REPORTING,\n} from \"./detection\"\nexport type { TerminalCaps, BgModeDetector, BgModeDetectorOptions, BgMode } from \"./detection\"\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nexport { ANSI_REGEX, stripAnsi, displayLength } from \"./utils\"\n\n// =============================================================================\n// Underline Functions\n// =============================================================================\n\nexport {\n underline,\n curlyUnderline,\n dottedUnderline,\n dashedUnderline,\n doubleUnderline,\n underlineColor,\n styledUnderline,\n} from \"./underline\"\n\n// =============================================================================\n// Hyperlink Functions\n// =============================================================================\n\nexport { hyperlink } from \"./hyperlink\"\n\n// =============================================================================\n// ANSI Terminal Control Helpers\n// =============================================================================\n\nexport {\n enterAltScreen,\n leaveAltScreen,\n clearScreen,\n clearLine,\n cursorTo,\n cursorHome,\n cursorHide,\n cursorShow,\n cursorStyle,\n setTitle,\n enableMouse,\n disableMouse,\n enableBracketedPaste,\n disableBracketedPaste,\n enableSyncUpdate,\n disableSyncUpdate,\n setScrollRegion,\n resetScrollRegion,\n scrollUp,\n scrollDown,\n enableKittyKeyboard,\n disableKittyKeyboard,\n} from \"./ansi\"\n\n// =============================================================================\n// Background Override — Compose styled text inside Box with backgroundColor\n// =============================================================================\n\n/**\n * SGR code recognized by silvery to signal intentional bg override.\n * When text is wrapped with this, silvery won't warn/throw about chalk bg + silvery bg conflicts.\n * Exported for silvery to detect this marker in text content.\n */\nexport const BG_OVERRIDE_CODE = 9999\n\n/**\n * Compose styled text with an explicit background inside a Box that has its own\n * `backgroundColor`. This is the correct way to layer chalk/term background\n * colors on top of an silvery Box background.\n *\n * Without `bgOverride`, silvery throws (by default) when it detects both an ANSI\n * background in the text content AND a `backgroundColor` prop on an ancestor\n * Box, because the two conflict and produce visual artifacts (the ANSI bg\n * only covers the text, leaving gaps at line edges).\n *\n * `bgOverride` wraps the text with a private SGR marker that tells silvery\n * \"this background is intentional — don't throw.\" Use it when you need\n * pixel-precise background control within a styled container.\n *\n * @param text - Text containing ANSI background codes (e.g. from `chalk.bgBlack()`)\n * @returns The same text prefixed with a marker SGR code\n *\n * @example\n * ```tsx\n * import { bgOverride } from '@silvery/chalk'\n *\n * // Without bgOverride — silvery throws:\n * <Box backgroundColor=\"cyan\">\n * <Text>{chalk.bgBlack('text')}</Text> // Error!\n * </Box>\n *\n * // With bgOverride — explicitly allowed:\n * <Box backgroundColor=\"cyan\">\n * <Text>{bgOverride(chalk.bgBlack('text'))}</Text> // OK\n * </Box>\n *\n * // Also works with term styling:\n * <Box backgroundColor=\"$surface-bg\">\n * <Text>{bgOverride(term.bgRgb(30, 30, 30)('highlighted'))}</Text>\n * </Box>\n * ```\n */\nexport function bgOverride(text: string): string {\n return `\\x1b[${BG_OVERRIDE_CODE}m${text}`\n}\n\n// =============================================================================\n// Advanced Clipboard (OSC 5522)\n// =============================================================================\n\nexport {\n createAdvancedClipboard,\n parseOsc5522Response,\n parsePasteData,\n ENABLE_PASTE_EVENTS,\n DISABLE_PASTE_EVENTS,\n} from \"./advanced-clipboard\"\nexport type { AdvancedClipboard, AdvancedClipboardOptions, ClipboardEntry } from \"./advanced-clipboard\"\n","/**\n * Render Epoch + Bit-Packed Dirty Flags\n *\n * A monotonically increasing counter that replaces boolean dirty flags.\n * Instead of setting `node.contentDirty = true` and later clearing with\n * `node.contentDirty = false`, the reconciler stamps `node.dirtyEpoch = renderEpoch`\n * and sets the appropriate bit in `node.dirtyBits`. The render phase checks\n * `node.dirtyEpoch === renderEpoch && (node.dirtyBits & BIT) !== 0`.\n *\n * Clearing all flags is O(1): just `renderEpoch++`. The old O(N) tree walk\n * in clearDirtyFlags becomes unnecessary — stale epoch stamps automatically\n * read as \"not dirty\" once the epoch advances.\n *\n * INITIAL_EPOCH (-1) is the sentinel for \"never dirty\". New nodes use the\n * current epoch so they appear dirty on first render.\n *\n * ## Bit-Packed Dirty Flags (S-MEM)\n *\n * Seven dirty flags are packed into a single `dirtyBits` number field:\n * bit 0: content (text content or content-affecting props changed)\n * bit 1: styleProps (visual props changed: color, bg, border, etc.)\n * bit 2: bg (backgroundColor specifically changed)\n * bit 3: children (direct children added/removed/reordered)\n * bit 4: subtree (this node or any descendant has dirty content/layout)\n * bit 5: absoluteChildMutated (absolute child had structural changes)\n * bit 6: descendantOverflow (descendant overflow changed)\n *\n * Note: outlines do NOT get a dirty bit — they're handled by the separate\n * decoration phase (see pipeline/decoration-phase.ts) which redraws them\n * every frame using per-cell snapshots.\n *\n * Combined with `dirtyEpoch`, this reduces per-node memory from 56 bytes\n * (7 separate epoch fields × 8 bytes) to 16 bytes (2 fields × 8 bytes).\n */\n\n/** Sentinel value: node has never been marked dirty for this flag. */\nexport const INITIAL_EPOCH = -1\n\n// ============================================================================\n// Dirty Bit Constants\n// ============================================================================\n\n/** Content changed (text content or content-affecting props). */\nexport const CONTENT_BIT = 1 << 0 // 0b0000001\n/** Visual style props changed (color, bg, border, etc.). */\nexport const STYLE_PROPS_BIT = 1 << 1 // 0b0000010\n/** backgroundColor specifically changed. */\nexport const BG_BIT = 1 << 2 // 0b0000100\n/** Direct children added, removed, or reordered. */\nexport const CHILDREN_BIT = 1 << 3 // 0b0001000\n/** This node or any descendant has dirty content/layout. */\nexport const SUBTREE_BIT = 1 << 4 // 0b0010000\n/** Absolute-positioned child had structural changes. */\nexport const ABS_CHILD_BIT = 1 << 5 // 0b0100000\n/** Descendant overflow changed. */\nexport const DESC_OVERFLOW_BIT = 1 << 6 // 0b1000000\n\n/** All reconciler-owned bits (content + styleProps + bg + children + subtree). */\nexport const ALL_RECONCILER_BITS = CONTENT_BIT | STYLE_PROPS_BIT | BG_BIT | CHILDREN_BIT | SUBTREE_BIT\n\n/** All bits combined. */\nexport const ALL_BITS =\n CONTENT_BIT | STYLE_PROPS_BIT | BG_BIT | CHILDREN_BIT | SUBTREE_BIT | ABS_CHILD_BIT | DESC_OVERFLOW_BIT\n\n/**\n * The current render epoch. Incremented after each render pass.\n * Reconciler stamps dirty nodes with this value; render phase checks equality.\n */\nlet renderEpoch = 0\n\n/** Get the current render epoch value. */\nexport function getRenderEpoch(): number {\n return renderEpoch\n}\n\n/**\n * Advance the render epoch. Called once at the end of each render pass.\n * All nodes stamped with the old epoch instantly become \"not dirty\".\n */\nexport function advanceRenderEpoch(): void {\n renderEpoch++\n}\n\n/**\n * Check if an epoch stamp matches the current render epoch (i.e., \"is dirty\").\n */\nexport function isCurrentEpoch(epoch: number): boolean {\n return epoch === renderEpoch\n}\n\n// ============================================================================\n// Bit-Packed Dirty Flag Helpers\n// ============================================================================\n\n/**\n * Check if a specific dirty bit is set for the current epoch.\n * Returns true if dirtyEpoch matches the current render epoch AND the bit is set.\n */\nexport function isDirty(dirtyBits: number, dirtyEpoch: number, bit: number): boolean {\n return dirtyEpoch === renderEpoch && (dirtyBits & bit) !== 0\n}\n\n/**\n * Check if ANY dirty bit is set for the current epoch.\n */\nexport function isAnyDirty(dirtyBits: number, dirtyEpoch: number): boolean {\n return dirtyEpoch === renderEpoch && dirtyBits !== 0\n}\n\n/**\n * Set a dirty bit on a node. If the epoch has changed since last write,\n * resets all bits and starts fresh with only the new bit.\n *\n * @returns The new dirtyBits value (caller must assign to node.dirtyBits).\n */\nexport function setDirtyBit(dirtyBits: number, dirtyEpoch: number, bit: number): number {\n if (dirtyEpoch !== renderEpoch) {\n return bit // new epoch — reset to just this bit\n }\n return dirtyBits | bit // same epoch — add bit\n}\n","/**\n * Shared text content collection primitives.\n *\n * Multiple pipeline phases need to collect plain text from node trees:\n * - Measure phase: to compute intrinsic size for fit-content nodes\n * - Render phase: to compute DOM-level truncation budget before ANSI serialization\n * - Reconciler: to feed text to the Yoga measure function\n *\n * All share the same traversal logic: walk children, apply internal_transform,\n * concatenate text. The only difference is whether hidden nodes are skipped\n * (the reconciler skips them because Suspense hides the primary tree;\n * the render phases don't because hidden nodes are already laid out with 0 size).\n *\n * The ANSI-styled variants (collectTextContent in render-text.ts) and the\n * styled-segment variants (collectStyledSegments in render-phase-adapter.ts)\n * have fundamentally different output shapes and child processing logic,\n * so they remain separate.\n */\n\nimport type { AgNode } from \"@silvery/ag/types\"\n\n/**\n * Collect plain text from a node tree, applying internal_transform.\n *\n * This is the base traversal used by:\n * - measure-phase.ts (fit-content measurement)\n * - render-text.ts (DOM-level truncation budget)\n *\n * Does NOT filter hidden or display:none nodes — those are handled by\n * the layout engine (display:none gets 0x0 size) or by other phases.\n */\nexport function collectPlainText(node: AgNode): string {\n if (node.textContent !== undefined) return node.textContent\n let result = \"\"\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i]!\n let childText = collectPlainText(child)\n if (childText.length > 0 && (child.props as any).internal_transform) {\n childText = (child.props as any).internal_transform(childText, i)\n }\n result += childText\n }\n return result\n}\n\n/**\n * Collect plain text from a node tree, skipping hidden children.\n *\n * Used by the reconciler's Yoga measure function where hidden nodes\n * (from Suspense) must not contribute to measured size.\n *\n * Identical to collectPlainText except for the hidden check.\n */\nexport function collectPlainTextSkipHidden(node: AgNode): string {\n if (node.textContent !== undefined) return node.textContent\n let result = \"\"\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i]!\n if (child.hidden) continue\n let childText = collectPlainTextSkipHidden(child)\n if (childText.length > 0 && (child.props as any).internal_transform) {\n childText = (child.props as any).internal_transform(childText, i)\n }\n result += childText\n }\n return result\n}\n","/**\n * Profiling counters for measure function performance analysis (dev only).\n *\n * Shared between @silvery/ag-react/reconciler/nodes (where measure happens)\n * and @silvery/ag-term/pipeline/layout-phase (where stats are logged).\n *\n * Lives in @silvery/ag-term to keep the @silvery/ag-term barrel React-free.\n */\n\nexport const measureStats = {\n calls: 0,\n cacheHits: 0,\n textCollects: 0,\n displayWidthCalls: 0,\n reset() {\n this.calls = 0\n this.cacheHits = 0\n this.textCollects = 0\n this.displayWidthCalls = 0\n },\n}\n","/**\n * Dirty Node Tracking\n *\n * Module-level Set<AgNode> that enables O(1) dirty checks for pipeline phases.\n * The reconciler adds nodes when dirty flags are set; pipeline phases query\n * the set to skip unnecessary work; the set is cleared after each render pass.\n *\n * Two categories tracked:\n * - contentDirtyNodes: nodes with any content/style dirty flag (need re-render)\n * - styleOnlyDirtyNodes: nodes where ONLY style changed (no content, no layout,\n * no children) — eligible for the style-only fast path\n *\n * Layout dirty tracking is NOT here — Flexily owns it via isDirty() propagation.\n * The layout gate in ag.ts / layout-phase.ts checks root.layoutNode.isDirty().\n */\n\nimport type { AgNode } from \"./types\"\n\n/**\n * Nodes with any content/style dirty flag. Written by reconciler,\n * read by render phase for targeted subtree entry.\n */\nconst contentDirtyNodes: Set<AgNode> = new Set()\n\n/**\n * Nodes where ONLY style props changed (no content, layout, or children changes).\n * These are eligible for the style-only fast path in the render phase, which\n * updates cell styles without re-collecting text or re-computing layout.\n *\n * A node is style-only when commitUpdate classifies contentChanged=\"style\"\n * AND layoutChanged=false. The render phase checks this set to decide whether\n * to use restyleRegion() instead of full renderText()/renderBox().\n */\nconst styleOnlyDirtyNodes: Set<AgNode> = new Set()\n\n/**\n * Nodes where scrollTo/scrollOffset changed. These don't affect Flexily layout\n * dimensions, but the scroll, sticky, scrollRect, and notify phases must still\n * run to update visible children positions.\n *\n * Written by reconciler (host-config.ts commitUpdate), read by ag.ts\n * layout-on-demand gate.\n */\nconst scrollDirtyNodes: Set<AgNode> = new Set()\n\n// ---------------------------------------------------------------------------\n// Write API (reconciler)\n// ---------------------------------------------------------------------------\n\n/** Mark a node as content-dirty. Called when content/style flags are set. */\nexport function trackContentDirty(node: AgNode): void {\n contentDirtyNodes.add(node)\n}\n\n/**\n * Mark a node as style-only dirty. Called when commitUpdate sees\n * contentChanged=\"style\" AND layoutChanged=false.\n * If a node is later marked with contentDirty, the render phase ignores\n * the style-only flag (full path takes precedence).\n */\nexport function trackStyleOnlyDirty(node: AgNode): void {\n styleOnlyDirtyNodes.add(node)\n}\n\n/** Mark a node as scroll-dirty. Called when scrollTo/scrollOffset props change. */\nexport function trackScrollDirty(node: AgNode): void {\n scrollDirtyNodes.add(node)\n}\n\n// ---------------------------------------------------------------------------\n// Read API (pipeline phases)\n// ---------------------------------------------------------------------------\n\n/** O(1) check: are there any content-dirty nodes? */\nexport function hasContentDirty(): boolean {\n return contentDirtyNodes.size > 0\n}\n\n/** O(1) check: are there any scroll-dirty nodes? */\nexport function hasScrollDirty(): boolean {\n return scrollDirtyNodes.size > 0\n}\n\n/** O(1) check: is this node style-only dirty (eligible for fast path)? */\nexport function isStyleOnlyDirty(node: AgNode): boolean {\n return styleOnlyDirtyNodes.has(node)\n}\n\n/** Get the set of content-dirty nodes (for iteration). */\nexport function getContentDirtyNodes(): ReadonlySet<AgNode> {\n return contentDirtyNodes\n}\n\n// ---------------------------------------------------------------------------\n// Clear API (after render pass)\n// ---------------------------------------------------------------------------\n\n/** Clear all dirty tracking. Called after each render pass completes. */\nexport function clearDirtyTracking(): void {\n contentDirtyNodes.clear()\n styleOnlyDirtyNodes.clear()\n scrollDirtyNodes.clear()\n}\n","/**\n * Reconciler Helper Functions\n *\n * Utility functions for props comparison and change detection\n * used by the React reconciler during updates.\n */\n\n/**\n * Set of layout-affecting props.\n */\nexport const LAYOUT_PROPS = new Set([\n \"width\",\n \"height\",\n \"minWidth\",\n \"minHeight\",\n \"maxWidth\",\n \"maxHeight\",\n \"flexDirection\",\n \"flexWrap\",\n \"justifyContent\",\n \"alignItems\",\n \"alignContent\",\n \"alignSelf\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexBasis\",\n \"padding\",\n \"paddingX\",\n \"paddingY\",\n \"paddingTop\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"paddingRight\",\n \"margin\",\n \"marginX\",\n \"marginY\",\n \"marginTop\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginRight\",\n \"gap\",\n \"columnGap\",\n \"rowGap\",\n \"borderStyle\",\n \"borderTop\",\n \"borderBottom\",\n \"borderLeft\",\n \"borderRight\",\n \"display\",\n \"position\",\n \"top\",\n \"left\",\n \"bottom\",\n \"right\",\n \"aspectRatio\",\n \"overflow\",\n \"overflowX\",\n \"overflowY\",\n // Note: scrollTo intentionally excluded - it doesn't affect layout dimensions,\n // only scroll offset which is handled in scrollPhase (reads props.scrollTo directly)\n])\n\n/**\n * Set of content props that affect layout dimensions (trigger contentDirty + Flexily markDirty()).\n * wrap changes text line count; internal_transform changes text width.\n */\nconst TEXT_CONTENT_PROPS = new Set([\"wrap\", \"internal_transform\"])\n\n/**\n * Set of style props that affect content (paint) but NOT layout dimensions.\n * borderColor, color, bold, etc. don't change how much space a node takes.\n * borderStyle is also a layout prop (affects border widths), but it's included\n * here so stylePropsDirty is set — otherwise border add/remove doesn't trigger\n * renderBox to draw/clear border characters.\n */\nconst STYLE_PROPS = new Set([\n \"color\",\n \"backgroundColor\",\n \"bold\",\n \"dim\",\n \"dimColor\",\n \"italic\",\n \"underline\",\n \"underlineStyle\",\n \"underlineColor\",\n \"strikethrough\",\n \"inverse\",\n \"borderColor\",\n \"borderBackgroundColor\",\n \"borderTopBackgroundColor\",\n \"borderBottomBackgroundColor\",\n \"borderLeftBackgroundColor\",\n \"borderRightBackgroundColor\",\n \"borderStyle\",\n \"outlineStyle\",\n \"outlineColor\",\n \"outlineDimColor\",\n \"outlineTop\",\n \"outlineBottom\",\n \"outlineLeft\",\n \"outlineRight\",\n \"theme\",\n])\n\n// ============================================================================\n// Single-pass prop change classification\n// ============================================================================\n\n/**\n * Result of classifying prop changes in a single pass.\n */\nexport interface PropChangeResult {\n /** Whether any prop changed (replaces propsEqual) */\n anyChanged: boolean\n /** Whether layout-affecting props changed (replaces layoutPropsChanged) */\n layoutChanged: boolean\n /**\n * Content change type (replaces contentPropsChanged):\n * - \"text\": text content changed (affects layout dimensions)\n * - \"style\": style-only change (affects paint but not layout)\n * - false: no content change\n */\n contentChanged: \"text\" | \"style\" | false\n}\n\n/** Shared singleton for the no-changes fast path (identity check). */\nconst NO_CHANGES: PropChangeResult = { anyChanged: false, layoutChanged: false, contentChanged: false }\n\n/**\n * Classify all prop changes in a single pass over the union of old and new keys.\n *\n * Replaces the previous 3-pass approach (propsEqual + layoutPropsChanged +\n * contentPropsChanged) with one iteration. Includes an identity fast path\n * and early exit when both layout and content flags are fully determined.\n */\nexport function classifyPropChanges(\n oldProps: Record<string, unknown>,\n newProps: Record<string, unknown>,\n): PropChangeResult {\n // Identity check — fastest path\n if (oldProps === newProps) return NO_CHANGES\n\n const keysA = Object.keys(oldProps)\n const keysB = Object.keys(newProps)\n\n // Different key count means something definitely changed\n const sameKeyCount = keysA.length === keysB.length\n\n let layoutChanged = false\n let contentChanged: \"text\" | \"style\" | false = false\n let anyChanged = false\n\n // Iterate old keys — covers changed values and keys removed in newProps\n for (const key of keysA) {\n if (oldProps[key] !== newProps[key]) {\n anyChanged = true\n if (LAYOUT_PROPS.has(key)) layoutChanged = true\n // Classify content change (text > style priority)\n if (contentChanged !== \"text\") {\n if (key === \"children\") {\n // Only primitive children (string, number) affect text rendering.\n // Array/object children are React elements reconciled separately.\n const oldIsPrimitive = typeof oldProps[key] === \"string\" || typeof oldProps[key] === \"number\"\n const newIsPrimitive = typeof newProps[key] === \"string\" || typeof newProps[key] === \"number\"\n if (oldIsPrimitive || newIsPrimitive) {\n contentChanged = \"text\"\n }\n } else if (TEXT_CONTENT_PROPS.has(key)) {\n contentChanged = \"text\"\n } else if (contentChanged !== \"style\" && STYLE_PROPS.has(key)) {\n contentChanged = \"style\"\n }\n }\n // Early exit: both layout and text-content detected — can't escalate further\n if (layoutChanged && contentChanged === \"text\") break\n }\n }\n\n // Check for keys added in newProps (present in newProps but absent in oldProps).\n // If key counts are the same and we found changes above, all keys that exist in\n // newProps also exist in oldProps (no new keys were added). Skip this loop.\n if (!sameKeyCount) {\n for (const key of keysB) {\n if (!(key in oldProps)) {\n anyChanged = true\n if (LAYOUT_PROPS.has(key)) layoutChanged = true\n if (contentChanged !== \"text\") {\n if (key === \"children\") {\n const newIsPrimitive = typeof newProps[key] === \"string\" || typeof newProps[key] === \"number\"\n if (newIsPrimitive) {\n contentChanged = \"text\"\n }\n } else if (TEXT_CONTENT_PROPS.has(key)) {\n contentChanged = \"text\"\n } else if (contentChanged !== \"style\" && STYLE_PROPS.has(key)) {\n contentChanged = \"style\"\n }\n }\n if (layoutChanged && contentChanged === \"text\") break\n }\n }\n }\n\n // If key counts differ, something definitely changed even if no individual\n // key comparison flagged it (e.g., a key was removed from newProps and its\n // old value was undefined — oldProps[key] === newProps[key] === undefined).\n if (!anyChanged && !sameKeyCount) {\n anyChanged = true\n }\n\n if (!anyChanged) return NO_CHANGES\n return { anyChanged, layoutChanged, contentChanged }\n}\n","/**\n * Node Creation and Layout Application\n *\n * Functions for creating SilveryNodes and applying layout properties.\n */\n\nimport { createLogger } from \"loggily\"\nimport type { LayoutNode } from \"@silvery/ag/layout-types\"\nimport { getConstants, getLayoutEngine } from \"@silvery/ag-term/layout-engine\"\nimport { collectPlainTextSkipHidden as collectNodeTextContent } from \"@silvery/ag-term/pipeline/collect-text\"\nimport { type BoxProps, type AgNode, type AgNodeType, type TextProps, rectEqual } from \"@silvery/ag/types\"\nimport { type Measurer, displayWidth, wrapText, getActiveLineHeight } from \"@silvery/ag-term/unicode\"\nimport {\n getRenderEpoch,\n INITIAL_EPOCH,\n isDirty,\n CONTENT_BIT,\n STYLE_PROPS_BIT,\n BG_BIT,\n CHILDREN_BIT,\n SUBTREE_BIT,\n ABS_CHILD_BIT,\n DESC_OVERFLOW_BIT,\n ALL_RECONCILER_BITS,\n} from \"@silvery/ag/epoch\"\n\nconst measureLog = createLogger(\"silvery:measure\")\n\n// Import from shared module (lives in @silvery/ag-term to keep barrel React-free)\n// Re-exported for consumers that imported from here previously\nimport { measureStats } from \"@silvery/ag-term/pipeline/measure-stats\"\nexport { measureStats }\n\nimport { syncRectSignals } from \"@silvery/ag/layout-signals\"\n\n// ============================================================================\n// Node Creation\n// ============================================================================\n\n/**\n * Create a new SilveryNode with a fresh layout node.\n */\nexport function createNode(\n type: AgNodeType,\n props: BoxProps | TextProps | Record<string, unknown>,\n measurer?: Measurer,\n): AgNode {\n const layoutNode = getLayoutEngine().createNode()\n const epoch = getRenderEpoch()\n\n const node: AgNode = {\n type,\n props,\n children: [],\n parent: null,\n layoutNode,\n boxRect: null,\n scrollRect: null,\n screenRect: null,\n prevLayout: null,\n prevScrollRect: null,\n prevScreenRect: null,\n layoutChangedThisFrame: epoch,\n dirtyBits: ALL_RECONCILER_BITS,\n dirtyEpoch: epoch,\n }\n\n // Apply initial flexbox props to layout node\n if (type === \"silvery-box\") {\n applyBoxProps(layoutNode, props as BoxProps)\n }\n\n // Set up measure function for text nodes\n // This tells the layout engine how to calculate the text's intrinsic size\n if (type === \"silvery-text\") {\n // Cache for measure results - avoid recalculating if text and constraints unchanged\n // Cache multiple (width, widthMode) -> result entries since layout calls measure with different widths\n let cachedText: string | null = null\n const measureCache = new Map<string, { width: number; height: number }>()\n\n layoutNode.setMeasureFunc((width, widthMode, height, heightMode) => {\n measureStats.calls++\n // Log measure calls through loggily (zero-cost when disabled via optional chaining)\n measureLog.debug?.(\n `measure \"${collectNodeTextContent(node).slice(0, 40)}\" width=${width} widthMode=${widthMode} height=${height} heightMode=${heightMode}`,\n )\n\n // Fast path: check if we have a cached result for this exact constraint\n // This avoids text collection entirely if we've measured this before\n const cacheKey = `${width}|${widthMode}|${height}|${heightMode}`\n const cached = measureCache.get(cacheKey)\n if (cached && cachedText !== null && !isDirty(node.dirtyBits, node.dirtyEpoch, CONTENT_BIT)) {\n measureStats.cacheHits++\n return cached\n }\n\n // Collect text content from this node and its raw text children\n // Use cached text if node hasn't been marked dirty (contentDirty)\n let text: string\n if (cachedText !== null && !isDirty(node.dirtyBits, node.dirtyEpoch, CONTENT_BIT)) {\n text = cachedText\n } else {\n measureStats.textCollects++\n const newText = collectNodeTextContent(node)\n // Only clear measurement cache if text actually changed\n if (newText !== cachedText) {\n measureCache.clear()\n }\n text = newText\n cachedText = text\n // Clear CONTENT_BIT so subsequent measure calls in same layout pass use cache.\n // NOTE: This means the render phase won't see contentDirty=true for text nodes\n // whose content changed. The render phase uses stylePropsDirty (which survives the\n // measure phase) combined with the node type check to correctly identify text\n // nodes that need region clearing. See contentAreaAffected in render-phase.ts.\n node.dirtyBits &= ~CONTENT_BIT\n }\n if (!text) {\n return { width: 0, height: 0 }\n }\n\n // Check cache again (may have been preserved if text unchanged)\n const cachedAfterCollect = measureCache.get(cacheKey)\n if (cachedAfterCollect) {\n measureStats.cacheHits++\n return cachedAfterCollect\n }\n\n // Calculate text dimensions\n const lines = text.split(\"\\n\")\n // Treat NaN width the same as unconstrained (can happen with auto-sized parents)\n const maxWidth = widthMode === \"undefined\" || Number.isNaN(width) ? Number.POSITIVE_INFINITY : width\n\n // Check if text will be truncated (not wrapped) — affects height calculation\n const { wrap } = node.props as TextProps\n const isTruncate =\n wrap === \"truncate\" ||\n wrap === \"truncate-start\" ||\n wrap === \"truncate-middle\" ||\n wrap === \"truncate-end\" ||\n wrap === \"clip\" ||\n wrap === false\n // Hard wrap: character-level wrapping, not word-aware. Each line that\n // exceeds maxWidth is sliced into chunks of exactly maxWidth. Intrinsic\n // width is maxWidth (since hard-wrapped lines fill the available width).\n const isHardWrap = wrap === \"hard\"\n\n // Calculate actual dimensions based on wrapping\n // Use wrapText() for accurate line count — must match the render phase\n // (render-text.ts formatTextLines) which also uses wrapText()\n let totalHeight = 0\n let actualWidth = 0\n\n // Use explicit measurer when available, fall back to module-level convenience functions\n const dw = measurer ? measurer.displayWidth.bind(measurer) : displayWidth\n const wt = measurer ? measurer.wrapText.bind(measurer) : wrapText\n\n const lh = getActiveLineHeight() // 1 in cell mode, lineHeightPx in pixel mode\n\n for (const line of lines) {\n measureStats.displayWidthCalls++\n const lineWidth = dw(line)\n if (isTruncate || lineWidth <= maxWidth) {\n totalHeight += lh\n actualWidth = Math.max(actualWidth, isTruncate ? Math.min(lineWidth, maxWidth) : lineWidth)\n } else if (isHardWrap) {\n // Character-level hard wrap: ceil(lineWidth / maxWidth) lines.\n // Guard: when maxWidth is not finite (unconstrained), treat as 1 line.\n if (Number.isFinite(maxWidth) && maxWidth > 0) {\n totalHeight += Math.ceil(lineWidth / maxWidth) * lh\n actualWidth = Math.max(actualWidth, maxWidth)\n } else {\n totalHeight += lh\n actualWidth = Math.max(actualWidth, lineWidth)\n }\n } else {\n const wrapped = wt(line, maxWidth, false, true)\n totalHeight += wrapped.length * lh\n for (const wl of wrapped) {\n actualWidth = Math.max(actualWidth, dw(wl))\n }\n }\n }\n\n // Respect height constraint from layout engine.\n // When heightMode is \"at-most\", the text should not exceed the available height.\n // When heightMode is \"exactly\", the text should be exactly that height.\n // This prevents text from overflowing into parent border rows.\n let resultHeight = Math.max(lh, totalHeight)\n if (heightMode === \"exactly\" && Number.isFinite(height)) {\n resultHeight = height\n } else if (heightMode === \"at-most\" && Number.isFinite(height)) {\n resultHeight = Math.min(resultHeight, height)\n }\n\n // Cache and return result\n const result = {\n width: Math.min(actualWidth, maxWidth),\n height: resultHeight,\n }\n measureCache.set(cacheKey, result)\n return result\n })\n }\n\n return node\n}\n\n// collectNodeTextContent is imported from @silvery/ag-term/pipeline/collect-text\n// as collectPlainTextSkipHidden. Previously duplicated here; now shared with\n// measure-phase.ts and render-text.ts via the shared collect-text module.\n\n/**\n * Create the root node for the Silvery tree.\n * Root is always column (document flow is top-to-bottom), regardless of\n * flexily's default flexDirection.\n */\nexport function createRootNode(): AgNode {\n const node = createNode(\"silvery-root\", {})\n const c = getConstants()\n node.layoutNode!.setFlexDirection(c.FLEX_DIRECTION_COLUMN)\n return node\n}\n\n/**\n * Create a virtual text node (for nested text elements).\n * Virtual text nodes don't have layout nodes and don't participate in layout.\n * They're used when Text is nested inside another Text.\n */\nexport function createVirtualTextNode(props: TextProps): AgNode {\n const epoch = getRenderEpoch()\n return {\n type: \"silvery-text\",\n props,\n children: [],\n parent: null,\n layoutNode: null, // No layout node for virtual text\n boxRect: null,\n scrollRect: null,\n screenRect: null,\n prevLayout: null,\n prevScrollRect: null,\n prevScreenRect: null,\n layoutChangedThisFrame: INITIAL_EPOCH,\n dirtyBits: CONTENT_BIT | STYLE_PROPS_BIT | BG_BIT | SUBTREE_BIT,\n dirtyEpoch: epoch,\n isRawText: false, // Not raw text, but virtual (nested) text\n inlineRects: null,\n }\n}\n\n// ============================================================================\n// Layout Property Application\n// ============================================================================\n\n/**\n * Apply BoxProps to a layout node.\n * This maps Ink/Silvery props to the layout engine API.\n */\nexport function applyBoxProps(layoutNode: LayoutNode, props: BoxProps, oldProps?: BoxProps): void {\n const c = getConstants()\n // Helper: true when a prop was set in oldProps but not in newProps (prop removed on rerender)\n const wasRemoved = (prop: keyof BoxProps): boolean => oldProps?.[prop] !== undefined && props[prop] === undefined\n\n // Dimensions\n if (props.width !== undefined) {\n if (typeof props.width === \"string\" && props.width.endsWith(\"%\")) {\n layoutNode.setWidthPercent(Number.parseFloat(props.width))\n } else if (typeof props.width === \"number\") {\n layoutNode.setWidth(props.width)\n } else if (props.width === \"auto\") {\n layoutNode.setWidthAuto()\n } else if (props.width === \"fit-content\") {\n layoutNode.setWidthFitContent()\n } else if (props.width === \"snug-content\") {\n layoutNode.setWidthSnugContent()\n }\n } else if (wasRemoved(\"width\")) {\n layoutNode.setWidthAuto()\n }\n\n if (props.height !== undefined) {\n if (typeof props.height === \"string\" && props.height.endsWith(\"%\")) {\n layoutNode.setHeightPercent(Number.parseFloat(props.height))\n } else if (typeof props.height === \"number\") {\n layoutNode.setHeight(props.height)\n } else if (props.height === \"auto\") {\n layoutNode.setHeightAuto()\n }\n } else if (wasRemoved(\"height\")) {\n layoutNode.setHeightAuto()\n }\n\n // Min/Max dimensions\n if (props.minWidth !== undefined) {\n if (typeof props.minWidth === \"string\" && props.minWidth.endsWith(\"%\")) {\n layoutNode.setMinWidthPercent(Number.parseFloat(props.minWidth))\n } else if (typeof props.minWidth === \"number\") {\n layoutNode.setMinWidth(props.minWidth)\n }\n } else if (wasRemoved(\"minWidth\")) {\n layoutNode.setMinWidth(0)\n }\n\n if (props.minHeight !== undefined) {\n if (typeof props.minHeight === \"string\" && props.minHeight.endsWith(\"%\")) {\n layoutNode.setMinHeightPercent(Number.parseFloat(props.minHeight))\n } else if (typeof props.minHeight === \"number\") {\n layoutNode.setMinHeight(props.minHeight)\n }\n } else if (wasRemoved(\"minHeight\")) {\n layoutNode.setMinHeight(0)\n }\n\n if (props.maxWidth !== undefined) {\n if (typeof props.maxWidth === \"string\" && props.maxWidth.endsWith(\"%\")) {\n layoutNode.setMaxWidthPercent(Number.parseFloat(props.maxWidth))\n } else if (typeof props.maxWidth === \"number\") {\n layoutNode.setMaxWidth(props.maxWidth)\n }\n } else if (wasRemoved(\"maxWidth\")) {\n layoutNode.setMaxWidth(Number.POSITIVE_INFINITY)\n }\n\n if (props.maxHeight !== undefined) {\n if (typeof props.maxHeight === \"string\" && props.maxHeight.endsWith(\"%\")) {\n layoutNode.setMaxHeightPercent(Number.parseFloat(props.maxHeight))\n } else if (typeof props.maxHeight === \"number\") {\n layoutNode.setMaxHeight(props.maxHeight)\n }\n } else if (wasRemoved(\"maxHeight\")) {\n layoutNode.setMaxHeight(Number.POSITIVE_INFINITY)\n }\n\n // Flex properties\n if (props.flexGrow !== undefined) {\n layoutNode.setFlexGrow(props.flexGrow)\n } else if (wasRemoved(\"flexGrow\")) {\n layoutNode.setFlexGrow(0)\n }\n\n if (props.flexShrink !== undefined) {\n layoutNode.setFlexShrink(props.flexShrink)\n } else if (wasRemoved(\"flexShrink\")) {\n layoutNode.setFlexShrink(1)\n }\n\n if (props.flexBasis !== undefined) {\n if (typeof props.flexBasis === \"string\" && props.flexBasis.endsWith(\"%\")) {\n layoutNode.setFlexBasisPercent(Number.parseFloat(props.flexBasis))\n } else if (props.flexBasis === \"auto\") {\n layoutNode.setFlexBasisAuto()\n } else if (typeof props.flexBasis === \"number\") {\n layoutNode.setFlexBasis(props.flexBasis)\n }\n } else if (wasRemoved(\"flexBasis\")) {\n layoutNode.setFlexBasisAuto()\n }\n\n // Flex direction\n if (props.flexDirection !== undefined) {\n const directionMap: Record<string, number> = {\n row: c.FLEX_DIRECTION_ROW,\n column: c.FLEX_DIRECTION_COLUMN,\n \"row-reverse\": c.FLEX_DIRECTION_ROW_REVERSE,\n \"column-reverse\": c.FLEX_DIRECTION_COLUMN_REVERSE,\n }\n layoutNode.setFlexDirection(directionMap[props.flexDirection] ?? c.FLEX_DIRECTION_ROW)\n } else if (wasRemoved(\"flexDirection\")) {\n layoutNode.setFlexDirection(c.FLEX_DIRECTION_ROW)\n }\n\n // Flex wrap\n if (props.flexWrap !== undefined) {\n const wrapMap: Record<string, number> = {\n nowrap: c.WRAP_NO_WRAP,\n wrap: c.WRAP_WRAP,\n \"wrap-reverse\": c.WRAP_WRAP_REVERSE,\n }\n layoutNode.setFlexWrap(wrapMap[props.flexWrap] ?? c.WRAP_NO_WRAP)\n } else if (wasRemoved(\"flexWrap\")) {\n layoutNode.setFlexWrap(c.WRAP_NO_WRAP)\n }\n\n // Alignment\n if (props.alignItems !== undefined) {\n layoutNode.setAlignItems(alignToConstant(props.alignItems))\n } else if (wasRemoved(\"alignItems\")) {\n layoutNode.setAlignItems(c.ALIGN_STRETCH)\n }\n\n if (props.alignSelf !== undefined) {\n if (props.alignSelf === \"auto\") {\n layoutNode.setAlignSelf(c.ALIGN_AUTO)\n } else {\n layoutNode.setAlignSelf(alignToConstant(props.alignSelf))\n }\n } else if (wasRemoved(\"alignSelf\")) {\n layoutNode.setAlignSelf(c.ALIGN_AUTO)\n }\n\n if (props.alignContent !== undefined) {\n layoutNode.setAlignContent(alignToConstant(props.alignContent))\n } else if (wasRemoved(\"alignContent\")) {\n layoutNode.setAlignContent(c.ALIGN_FLEX_START)\n }\n\n if (props.justifyContent !== undefined) {\n layoutNode.setJustifyContent(justifyToConstant(props.justifyContent))\n } else if (wasRemoved(\"justifyContent\")) {\n layoutNode.setJustifyContent(c.JUSTIFY_FLEX_START)\n }\n\n // Padding\n applySpacing(layoutNode, \"padding\", props)\n\n // Margin\n applySpacing(layoutNode, \"margin\", props)\n\n // Gap\n if (props.gap !== undefined) {\n layoutNode.setGap(c.GUTTER_ALL, props.gap)\n } else if (wasRemoved(\"gap\")) {\n layoutNode.setGap(c.GUTTER_ALL, 0)\n }\n\n if (props.columnGap !== undefined) {\n layoutNode.setGap(c.GUTTER_COLUMN, props.columnGap)\n } else if (wasRemoved(\"columnGap\")) {\n layoutNode.setGap(c.GUTTER_COLUMN, 0)\n }\n\n if (props.rowGap !== undefined) {\n layoutNode.setGap(c.GUTTER_ROW, props.rowGap)\n } else if (wasRemoved(\"rowGap\")) {\n layoutNode.setGap(c.GUTTER_ROW, 0)\n }\n\n // Display\n if (props.display !== undefined) {\n layoutNode.setDisplay(props.display === \"none\" ? c.DISPLAY_NONE : c.DISPLAY_FLEX)\n } else if (wasRemoved(\"display\")) {\n layoutNode.setDisplay(c.DISPLAY_FLEX)\n }\n\n // Position\n // Note: 'sticky' is handled at render-time, not by layout engine. For layout purposes, treat as relative.\n if (props.position !== undefined) {\n if (props.position === \"absolute\") {\n layoutNode.setPositionType(c.POSITION_TYPE_ABSOLUTE)\n } else if (props.position === \"static\") {\n layoutNode.setPositionType(c.POSITION_TYPE_STATIC)\n } else {\n layoutNode.setPositionType(c.POSITION_TYPE_RELATIVE)\n }\n } else if (wasRemoved(\"position\")) {\n layoutNode.setPositionType(c.POSITION_TYPE_RELATIVE)\n }\n\n // Position offsets (top, left, bottom, right)\n // Skip offsets for position=\"static\" — static positioning ignores offsets (CSS spec).\n if (props.position !== \"static\") {\n applyPositionOffset(layoutNode, c.EDGE_TOP, props.top)\n applyPositionOffset(layoutNode, c.EDGE_LEFT, props.left)\n applyPositionOffset(layoutNode, c.EDGE_BOTTOM, props.bottom)\n applyPositionOffset(layoutNode, c.EDGE_RIGHT, props.right)\n }\n\n // Aspect ratio\n if (props.aspectRatio !== undefined) {\n layoutNode.setAspectRatio(props.aspectRatio)\n } else if (wasRemoved(\"aspectRatio\")) {\n layoutNode.setAspectRatio(NaN)\n }\n\n // Overflow\n // Derive effective overflow: explicit overflow takes precedence, then per-axis (hidden if either axis is hidden)\n const effectiveOverflow =\n props.overflow ?? (props.overflowX === \"hidden\" || props.overflowY === \"hidden\" ? \"hidden\" : undefined)\n if (effectiveOverflow !== undefined) {\n if (effectiveOverflow === \"hidden\") {\n layoutNode.setOverflow(c.OVERFLOW_HIDDEN)\n } else if (effectiveOverflow === \"scroll\") {\n // Use OVERFLOW_HIDDEN for layout so children are constrained to parent width\n // (text wraps instead of overflowing). The render phase reads props.overflow\n // to enable vertical scroll behavior independently of the layout constraint.\n layoutNode.setOverflow(c.OVERFLOW_HIDDEN)\n } else {\n layoutNode.setOverflow(c.OVERFLOW_VISIBLE)\n }\n } else if (wasRemoved(\"overflow\") || wasRemoved(\"overflowX\") || wasRemoved(\"overflowY\")) {\n layoutNode.setOverflow(c.OVERFLOW_VISIBLE)\n }\n\n // Border (affects layout - 1 cell per border side in terminal mode).\n // In pixel/canvas mode (lineHeight > 1), borders are visual-only — drawn by\n // fillRoundedRect, not layout-affecting box-drawing characters. Set width to 0\n // so flexily doesn't steal space from content for invisible character borders.\n if (props.borderStyle) {\n const borderWidth = getActiveLineHeight() > 1 ? 0 : 1\n if (props.borderTop !== false) {\n layoutNode.setBorder(c.EDGE_TOP, borderWidth)\n } else {\n layoutNode.setBorder(c.EDGE_TOP, 0)\n }\n if (props.borderBottom !== false) {\n layoutNode.setBorder(c.EDGE_BOTTOM, borderWidth)\n } else {\n layoutNode.setBorder(c.EDGE_BOTTOM, 0)\n }\n if (props.borderLeft !== false) {\n layoutNode.setBorder(c.EDGE_LEFT, borderWidth)\n } else {\n layoutNode.setBorder(c.EDGE_LEFT, 0)\n }\n if (props.borderRight !== false) {\n layoutNode.setBorder(c.EDGE_RIGHT, borderWidth)\n } else {\n layoutNode.setBorder(c.EDGE_RIGHT, 0)\n }\n } else {\n // Reset all border widths when borderStyle is removed\n layoutNode.setBorder(c.EDGE_TOP, 0)\n layoutNode.setBorder(c.EDGE_BOTTOM, 0)\n layoutNode.setBorder(c.EDGE_LEFT, 0)\n layoutNode.setBorder(c.EDGE_RIGHT, 0)\n }\n}\n\n/**\n * Apply padding or margin to a layout node.\n */\nfunction applySpacing(layoutNode: LayoutNode, type: \"padding\" | \"margin\", props: BoxProps): void {\n const c = getConstants()\n const set = type === \"padding\" ? layoutNode.setPadding.bind(layoutNode) : layoutNode.setMargin.bind(layoutNode)\n\n const all = props[type] as number | undefined\n const x = props[`${type}X` as keyof BoxProps] as number | undefined\n const yy = props[`${type}Y` as keyof BoxProps] as number | undefined\n const top = props[`${type}Top` as keyof BoxProps] as number | undefined\n const bottom = props[`${type}Bottom` as keyof BoxProps] as number | undefined\n const left = props[`${type}Left` as keyof BoxProps] as number | undefined\n const right = props[`${type}Right` as keyof BoxProps] as number | undefined\n\n // Compute effective value per edge, resolving CSS-like specificity cascade:\n // individual > axis (X/Y) > all > 0\n // This handles the case where props are REMOVED (e.g., paddingLeft: 1 → undefined):\n // the edge is reset to 0 instead of retaining the stale Yoga value.\n set(c.EDGE_TOP, top ?? yy ?? all ?? 0)\n set(c.EDGE_BOTTOM, bottom ?? yy ?? all ?? 0)\n set(c.EDGE_LEFT, left ?? x ?? all ?? 0)\n set(c.EDGE_RIGHT, right ?? x ?? all ?? 0)\n}\n\n/**\n * Apply a position offset (top/left/bottom/right) to a layout node.\n * Supports both numeric (absolute) and percentage string values.\n */\nfunction applyPositionOffset(layoutNode: LayoutNode, edge: number, value: number | string | undefined): void {\n if (value === undefined) {\n // Unset stale position offset when prop is removed on rerender\n layoutNode.setPosition(edge, NaN)\n return\n }\n if (typeof value === \"string\" && value.endsWith(\"%\")) {\n layoutNode.setPositionPercent(edge, Number.parseFloat(value))\n } else if (typeof value === \"number\") {\n layoutNode.setPosition(edge, value)\n }\n}\n\n/**\n * Convert align value to layout constant.\n */\nfunction alignToConstant(align: string): number {\n const c = getConstants()\n const map: Record<string, number> = {\n \"flex-start\": c.ALIGN_FLEX_START,\n \"flex-end\": c.ALIGN_FLEX_END,\n center: c.ALIGN_CENTER,\n stretch: c.ALIGN_STRETCH,\n baseline: c.ALIGN_BASELINE,\n \"space-between\": c.ALIGN_SPACE_BETWEEN,\n \"space-around\": c.ALIGN_SPACE_AROUND,\n \"space-evenly\": c.ALIGN_SPACE_EVENLY,\n }\n return map[align] ?? c.ALIGN_STRETCH\n}\n\n/**\n * Convert justify value to layout constant.\n */\nfunction justifyToConstant(justify: string): number {\n const c = getConstants()\n const map: Record<string, number> = {\n \"flex-start\": c.JUSTIFY_FLEX_START,\n \"flex-end\": c.JUSTIFY_FLEX_END,\n center: c.JUSTIFY_CENTER,\n \"space-between\": c.JUSTIFY_SPACE_BETWEEN,\n \"space-around\": c.JUSTIFY_SPACE_AROUND,\n \"space-evenly\": c.JUSTIFY_SPACE_EVENLY,\n }\n return map[justify] ?? c.JUSTIFY_FLEX_START\n}\n\n// ============================================================================\n// Layout Calculation\n// ============================================================================\n\n/**\n * Calculate layout for the entire tree starting from root.\n */\nexport function calculateLayout(root: AgNode, width: number, height: number): void {\n const c = getConstants()\n if (!root.layoutNode) {\n throw new Error(\"Root node must have a layout node\")\n }\n root.layoutNode.calculateLayout(width, height, c.DIRECTION_LTR)\n propagateLayout(root, 0, 0)\n notifyLayoutSubscribers(root)\n}\n\n/**\n * Propagate computed layout from layout nodes to SilveryNodes.\n */\nfunction propagateLayout(node: AgNode, parentX: number, parentY: number): void {\n // Save previous layout for change detection\n node.prevLayout = node.boxRect\n\n // Get computed layout from layout node\n if (!node.layoutNode) {\n // Virtual nodes (raw text, nested text) inherit parent layout\n return\n }\n const left = node.layoutNode.getComputedLeft()\n const top = node.layoutNode.getComputedTop()\n const width = node.layoutNode.getComputedWidth()\n const height = node.layoutNode.getComputedHeight()\n\n node.boxRect = {\n x: parentX + left,\n y: parentY + top,\n width,\n height,\n }\n\n // If dimensions changed, content needs re-render\n if (!rectEqual(node.prevLayout, node.boxRect)) {\n const epoch = getRenderEpoch()\n if (node.dirtyEpoch !== epoch) {\n node.dirtyBits = CONTENT_BIT\n node.dirtyEpoch = epoch\n } else {\n node.dirtyBits |= CONTENT_BIT\n }\n }\n\n // Recursively propagate to children\n for (const child of node.children) {\n propagateLayout(child, node.boxRect.x, node.boxRect.y)\n }\n}\n\n/**\n * Sync layout signals for nodes whose rects changed.\n */\nfunction notifyLayoutSubscribers(node: AgNode): void {\n // Sync rect values into alien-signals (for signal-based hooks)\n syncRectSignals(node)\n\n for (const child of node.children) {\n notifyLayoutSubscribers(child)\n }\n}\n","/**\n * React Reconciler Host Config\n *\n * Defines how React creates, updates, and manages SilveryNodes.\n * This is the bridge between React's reconciliation algorithm\n * and our custom terminal node tree.\n */\n\nimport { createContext } from \"react\"\nimport { DefaultEventPriority, DiscreteEventPriority, NoEventPriority } from \"react-reconciler/constants.js\"\nimport type { BoxProps, AgNode, AgNodeType, TextProps } from \"@silvery/ag/types\"\nimport { trackContentDirty, trackStyleOnlyDirty, trackScrollDirty } from \"@silvery/ag/dirty-tracking\"\nimport { syncTextContentSignal } from \"@silvery/ag/layout-signals\"\nimport {\n getRenderEpoch,\n INITIAL_EPOCH,\n isDirty,\n setDirtyBit,\n CONTENT_BIT,\n STYLE_PROPS_BIT,\n BG_BIT,\n CHILDREN_BIT,\n SUBTREE_BIT,\n ALL_RECONCILER_BITS,\n} from \"@silvery/ag/epoch\"\nimport { classifyPropChanges } from \"./helpers\"\nimport { applyBoxProps, createNode, createVirtualTextNode } from \"./nodes\"\nimport { createLogger } from \"loggily\"\n\nconst log = createLogger(\"silvery:reconciler\")\n\n/**\n * Normalize Ink intrinsic element types to Silvery equivalents.\n * Ink uses `ink-box` / `ink-text` as intrinsic element names;\n * Silvery uses `silvery-box` / `silvery-text`.\n */\nfunction normalizeNodeType(type: string): AgNodeType {\n if (type === \"ink-box\") return \"silvery-box\"\n if (type === \"ink-text\") return \"silvery-text\"\n return type as AgNodeType\n}\n\n// ============================================================================\n// Node Removal Hook\n// ============================================================================\n\n/**\n * Callback invoked when a node is removed from the tree.\n * Used by the app layer to coordinate focus cleanup — if the focused element\n * is within a removed subtree, focus must be cleared to prevent dangling\n * references and broken navigation (indexOf → -1, hasFocusWithin lies).\n */\nlet onNodeRemovedCallback: ((removedNode: AgNode) => void) | null = null\n\n/**\n * Register a callback to be called when any node is removed from the tree.\n * Returns a cleanup function to unregister. Only one callback at a time.\n */\nexport function setOnNodeRemoved(callback: ((removedNode: AgNode) => void) | null): void {\n onNodeRemovedCallback = callback\n}\n\n// ============================================================================\n// Subtree Dirty Propagation\n// ============================================================================\n\n/**\n * Mark this node and all ancestors as having dirty content/layout.\n * Used to enable fast-path subtree skipping in renderPhase.\n */\nfunction markSubtreeDirty(node: AgNode | null): void {\n const epoch = getRenderEpoch()\n while (node && !isDirty(node.dirtyBits, node.dirtyEpoch, SUBTREE_BIT)) {\n if (node.dirtyEpoch !== epoch) {\n node.dirtyBits = SUBTREE_BIT\n node.dirtyEpoch = epoch\n } else {\n node.dirtyBits |= SUBTREE_BIT\n }\n node = node.parent\n }\n}\n\n/**\n * When a child change (append/remove/insert/text-update) occurs inside a\n * virtual text subtree (no layoutNode), the nearest layout ancestor must be\n * notified so its measure function re-collects descendant text and the layout\n * engine recalculates dimensions. Without this, the measure cache stays stale\n * and renderPhase renders at the wrong size / doesn't clear old content.\n *\n * No-op when the node already has a layoutNode (normal path handles it).\n */\nfunction markLayoutAncestorDirty(node: AgNode): void {\n if (node.layoutNode) return\n let ancestor: AgNode | null = node.parent\n while (ancestor && !ancestor.layoutNode) {\n ancestor = ancestor.parent\n }\n if (ancestor?.layoutNode) {\n const epoch = getRenderEpoch()\n if (ancestor.dirtyEpoch !== epoch) {\n ancestor.dirtyBits = CONTENT_BIT | STYLE_PROPS_BIT\n ancestor.dirtyEpoch = epoch\n } else {\n ancestor.dirtyBits |= CONTENT_BIT | STYLE_PROPS_BIT\n }\n ancestor.layoutNode.markDirty()\n trackContentDirty(ancestor)\n }\n}\n\n// ============================================================================\n// Dev Warnings\n// ============================================================================\n\n/**\n * Track whether we've already warned about Box-inside-Text\n * to avoid spamming the console on every re-render.\n */\nlet hasWarnedBoxInsideText = false\n\n/** Reset the warning flag (for testing). */\nexport function _resetBoxInsideTextWarning(): void {\n hasWarnedBoxInsideText = false\n}\n\n/**\n * Ink-compatible strict validation mode.\n * When enabled, the reconciler throws errors instead of warnings for:\n * - Raw text directly inside a Box (must be inside Text)\n * - Box nested inside Text\n */\nlet inkStrictValidation = false\n\n/** Enable/disable Ink-compatible strict validation. */\nexport function setInkStrictValidation(enabled: boolean): void {\n inkStrictValidation = enabled\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Container type - the root of our Silvery tree\n */\nexport interface Container {\n root: AgNode\n onRender: () => void\n}\n\n/**\n * Host context tracks whether we're inside a Text component\n */\ninterface HostContext {\n isInsideText: boolean\n}\n\n// ============================================================================\n// Update Priority Management (for react-reconciler 0.33+)\n// ============================================================================\n\nlet currentUpdatePriority = NoEventPriority\n\n/**\n * Run a callback with DiscreteEventPriority so React treats state\n * updates inside it as user-interaction priority (synchronous commit).\n * Use this for keyboard input handling to prevent React's concurrent\n * scheduler from deferring the commit.\n */\nexport function runWithDiscreteEvent(fn: () => void): void {\n const prev = currentUpdatePriority\n currentUpdatePriority = DiscreteEventPriority\n try {\n fn()\n } finally {\n currentUpdatePriority = prev\n }\n}\n\n// ============================================================================\n// Host Config\n// ============================================================================\n\n/**\n * The React Reconciler host config.\n * This defines how React creates, updates, and manages our custom SilveryNodes.\n */\nexport const hostConfig = {\n // Renderer identity (used by React DevTools to identify this renderer)\n rendererPackageName: \"@silvery/ag-react\",\n rendererVersion: \"0.0.1\",\n\n // Feature flags\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n isPrimaryRenderer: true,\n\n // Scheduling\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n supportsMicrotasks: true,\n scheduleMicrotask: queueMicrotask,\n\n // Context - tracks whether we're inside a Text component\n getRootHostContext(): HostContext {\n return { isInsideText: false }\n },\n\n getChildHostContext(parentHostContext: HostContext, type: AgNodeType): HostContext {\n // Normalize Ink intrinsic types (ink-box → silvery-box, ink-text → silvery-text)\n const normalizedType = normalizeNodeType(type)\n // Once inside a text node, stay inside\n const isInsideText = parentHostContext.isInsideText || normalizedType === \"silvery-text\"\n if (isInsideText === parentHostContext.isInsideText) {\n return parentHostContext\n }\n return { isInsideText }\n },\n\n // Instance creation\n createInstance(\n type: AgNodeType,\n props: BoxProps | TextProps,\n _rootContainer: unknown,\n hostContext: HostContext,\n ): AgNode {\n // Normalize Ink intrinsic types (ink-box → silvery-box, ink-text → silvery-text)\n type = normalizeNodeType(type)\n // Ink-compat: flatten `style` prop from intrinsic ink-box/ink-text elements.\n // Ink's intrinsic elements use `<ink-box style={{marginLeft: 1}}>` where the\n // style object contains layout props. Silvery expects them as top-level props.\n if (\"style\" in props && props.style && typeof props.style === \"object\") {\n props = { ...props.style, ...props } as BoxProps | TextProps\n }\n // Ink-compat: throw when a Box is nested inside a Text\n if (type === \"silvery-box\" && hostContext.isInsideText) {\n if (inkStrictValidation) {\n throw new Error(\"<Box> can\\u2019t be nested inside <Text> component\")\n }\n if (process.env.NODE_ENV !== \"production\" && !hasWarnedBoxInsideText) {\n hasWarnedBoxInsideText = true\n log.warn?.(\"<Box> cannot be nested inside <Text>. This produces undefined layout behavior.\")\n }\n }\n\n // Nested text nodes become \"virtual\" - no layout node\n if (type === \"silvery-text\" && hostContext.isInsideText) {\n return createVirtualTextNode(props as TextProps)\n }\n return createNode(type, props)\n },\n\n createTextInstance(text: string, _rootContainer: unknown, hostContext: HostContext): AgNode {\n // Ink-compat: throw when text appears directly in a Box (outside Text)\n if (inkStrictValidation && !hostContext.isInsideText && text.trim().length > 0) {\n throw new Error(`Text string \"${text}\" must be rendered inside <Text> component`)\n }\n // Raw text nodes don't have layout nodes - they're just data nodes\n // Their content is rendered by their parent silvery-text element\n const epoch = getRenderEpoch()\n const node: AgNode = {\n type: \"silvery-text\",\n props: { children: text } as TextProps,\n children: [],\n parent: null,\n layoutNode: null, // No layout node for raw text\n boxRect: null,\n scrollRect: null,\n screenRect: null,\n prevLayout: null,\n prevScrollRect: null,\n prevScreenRect: null,\n layoutChangedThisFrame: INITIAL_EPOCH,\n dirtyBits: CONTENT_BIT | STYLE_PROPS_BIT | BG_BIT | SUBTREE_BIT,\n dirtyEpoch: epoch,\n textContent: text,\n isRawText: true,\n }\n return node\n },\n\n // Tree operations\n appendChild(parentInstance: AgNode, child: AgNode) {\n // React calls appendChild to move an existing child during keyed reorder.\n // Remove from old position first to avoid duplicating in the children array.\n const existingIndex = parentInstance.children.indexOf(child)\n if (existingIndex !== -1) {\n parentInstance.children.splice(existingIndex, 1)\n if (parentInstance.layoutNode && child.layoutNode) {\n parentInstance.layoutNode.removeChild(child.layoutNode)\n }\n }\n child.parent = parentInstance\n parentInstance.children.push(child)\n // Only add to layout tree if both nodes have layout nodes\n if (parentInstance.layoutNode && child.layoutNode) {\n // Count non-raw-text children for proper layout index\n const layoutIndex = parentInstance.children.filter((c) => c.layoutNode !== null).length - 1\n parentInstance.layoutNode.insertChild(child.layoutNode, layoutIndex)\n }\n {\n const epoch = getRenderEpoch()\n const bits = CHILDREN_BIT | CONTENT_BIT\n parentInstance.dirtyBits = parentInstance.dirtyEpoch !== epoch ? bits : parentInstance.dirtyBits | bits\n parentInstance.dirtyEpoch = epoch\n }\n parentInstance.layoutNode?.markDirty()\n trackContentDirty(parentInstance)\n markLayoutAncestorDirty(parentInstance)\n markSubtreeDirty(parentInstance)\n },\n\n appendInitialChild(parentInstance: AgNode, child: AgNode) {\n child.parent = parentInstance\n parentInstance.children.push(child)\n // Only add to layout tree if both nodes have layout nodes\n if (parentInstance.layoutNode && child.layoutNode) {\n const layoutIndex = parentInstance.children.filter((c) => c.layoutNode !== null).length - 1\n parentInstance.layoutNode.insertChild(child.layoutNode, layoutIndex)\n }\n },\n\n appendChildToContainer(container: Container, child: AgNode) {\n // Remove from old position if already a child (keyed reorder)\n const existingIndex = container.root.children.indexOf(child)\n if (existingIndex !== -1) {\n container.root.children.splice(existingIndex, 1)\n if (container.root.layoutNode && child.layoutNode) {\n container.root.layoutNode.removeChild(child.layoutNode)\n }\n }\n child.parent = container.root\n container.root.children.push(child)\n if (container.root.layoutNode && child.layoutNode) {\n const layoutIndex = container.root.children.filter((c) => c.layoutNode !== null).length - 1\n container.root.layoutNode.insertChild(child.layoutNode, layoutIndex)\n }\n {\n const epoch = getRenderEpoch()\n const bits = CHILDREN_BIT | CONTENT_BIT\n container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits\n container.root.dirtyEpoch = epoch\n }\n container.root.layoutNode?.markDirty()\n trackContentDirty(container.root)\n markSubtreeDirty(container.root)\n },\n\n removeChild(parentInstance: AgNode, child: AgNode) {\n const index = parentInstance.children.indexOf(child)\n if (index !== -1) {\n // Notify focus manager before detaching (needs parent chain intact for subtree check)\n onNodeRemovedCallback?.(child)\n parentInstance.children.splice(index, 1)\n if (parentInstance.layoutNode && child.layoutNode) {\n parentInstance.layoutNode.removeChild(child.layoutNode)\n child.layoutNode.free()\n }\n child.parent = null\n {\n const epoch = getRenderEpoch()\n const bits = CHILDREN_BIT | CONTENT_BIT\n parentInstance.dirtyBits = parentInstance.dirtyEpoch !== epoch ? bits : parentInstance.dirtyBits | bits\n parentInstance.dirtyEpoch = epoch\n }\n parentInstance.layoutNode?.markDirty()\n trackContentDirty(parentInstance)\n markLayoutAncestorDirty(parentInstance)\n markSubtreeDirty(parentInstance)\n }\n },\n\n removeChildFromContainer(container: Container, child: AgNode) {\n const index = container.root.children.indexOf(child)\n if (index !== -1) {\n // Notify focus manager before detaching\n onNodeRemovedCallback?.(child)\n container.root.children.splice(index, 1)\n if (container.root.layoutNode && child.layoutNode) {\n container.root.layoutNode.removeChild(child.layoutNode)\n child.layoutNode.free()\n }\n child.parent = null\n {\n const epoch = getRenderEpoch()\n const bits = CHILDREN_BIT | CONTENT_BIT\n container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits\n container.root.dirtyEpoch = epoch\n }\n container.root.layoutNode?.markDirty()\n trackContentDirty(container.root)\n markSubtreeDirty(container.root)\n }\n },\n\n insertBefore(parentInstance: AgNode, child: AgNode, beforeChild: AgNode) {\n // React calls insertBefore to move an existing child during keyed reorder.\n // Remove from old position first to avoid duplicating in the children array.\n const existingIndex = parentInstance.children.indexOf(child)\n if (existingIndex !== -1) {\n parentInstance.children.splice(existingIndex, 1)\n if (parentInstance.layoutNode && child.layoutNode) {\n parentInstance.layoutNode.removeChild(child.layoutNode)\n }\n }\n const beforeIndex = parentInstance.children.indexOf(beforeChild)\n if (beforeIndex !== -1) {\n child.parent = parentInstance\n parentInstance.children.splice(beforeIndex, 0, child)\n if (parentInstance.layoutNode && child.layoutNode) {\n // Count non-raw-text children before this position for proper layout index\n const layoutIndex = parentInstance.children.slice(0, beforeIndex).filter((c) => c.layoutNode !== null).length\n parentInstance.layoutNode.insertChild(child.layoutNode, layoutIndex)\n }\n {\n const epoch = getRenderEpoch()\n const bits = CHILDREN_BIT | CONTENT_BIT\n parentInstance.dirtyBits = parentInstance.dirtyEpoch !== epoch ? bits : parentInstance.dirtyBits | bits\n parentInstance.dirtyEpoch = epoch\n }\n parentInstance.layoutNode?.markDirty()\n trackContentDirty(parentInstance)\n markLayoutAncestorDirty(parentInstance)\n markSubtreeDirty(parentInstance)\n }\n },\n\n insertInContainerBefore(container: Container, child: AgNode, beforeChild: AgNode) {\n // Remove from old position if already a child (keyed reorder)\n const existingIndex = container.root.children.indexOf(child)\n if (existingIndex !== -1) {\n container.root.children.splice(existingIndex, 1)\n if (container.root.layoutNode && child.layoutNode) {\n container.root.layoutNode.removeChild(child.layoutNode)\n }\n }\n const beforeIndex = container.root.children.indexOf(beforeChild)\n if (beforeIndex !== -1) {\n child.parent = container.root\n container.root.children.splice(beforeIndex, 0, child)\n if (container.root.layoutNode && child.layoutNode) {\n const layoutIndex = container.root.children.slice(0, beforeIndex).filter((c) => c.layoutNode !== null).length\n container.root.layoutNode.insertChild(child.layoutNode, layoutIndex)\n }\n {\n const epoch = getRenderEpoch()\n const bits = CHILDREN_BIT | CONTENT_BIT\n container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits\n container.root.dirtyEpoch = epoch\n }\n container.root.layoutNode?.markDirty()\n trackContentDirty(container.root)\n markSubtreeDirty(container.root)\n }\n },\n\n // Updates\n prepareUpdate(\n _instance: AgNode,\n _type: AgNodeType,\n oldProps: BoxProps | TextProps,\n newProps: BoxProps | TextProps,\n ): boolean | null {\n // Return true if we need to update\n return classifyPropChanges(oldProps as Record<string, unknown>, newProps as Record<string, unknown>).anyChanged\n },\n\n // Note: react-reconciler 0.33+ changed the signature from\n // commitUpdate(instance, updatePayload, type, oldProps, newProps) to\n // commitUpdate(instance, type, oldProps, newProps, finishedWork)\n commitUpdate(\n instance: AgNode,\n _type: AgNodeType,\n oldProps: BoxProps | TextProps,\n newProps: BoxProps | TextProps,\n _finishedWork: unknown,\n ) {\n // Ink-compat: flatten `style` prop from intrinsic ink-box/ink-text elements\n if (\"style\" in oldProps && oldProps.style && typeof oldProps.style === \"object\") {\n oldProps = { ...oldProps.style, ...oldProps } as BoxProps | TextProps\n }\n if (\"style\" in newProps && newProps.style && typeof newProps.style === \"object\") {\n newProps = { ...newProps.style, ...newProps } as BoxProps | TextProps\n }\n\n // Single-pass prop classification — replaces 3 separate iterations\n // (propsEqual + layoutPropsChanged + contentPropsChanged)\n const { anyChanged, layoutChanged, contentChanged } = classifyPropChanges(\n oldProps as Record<string, unknown>,\n newProps as Record<string, unknown>,\n )\n\n // Early exit if props are equal (React may call commitUpdate even when nothing changed)\n if (!anyChanged) {\n instance.props = newProps\n return\n }\n\n // Apply layout-affecting prop changes\n if (layoutChanged) {\n if (instance.layoutNode) {\n applyBoxProps(instance.layoutNode, newProps as BoxProps, oldProps as BoxProps)\n instance.layoutNode.markDirty()\n }\n }\n if (contentChanged) {\n const epoch = getRenderEpoch()\n // stylePropsDirty: always set for any visual change. Render phase uses this\n // to know the node needs re-rendering (border, text style, bg, etc.).\n let bits = STYLE_PROPS_BIT\n // contentDirty: only for text content changes (not style-only changes).\n // Style-only changes (borderColor, color, bold) set stylePropsDirty but NOT\n // contentDirty, so render phase won't cascade to children for border-only\n // changes where the content area is unchanged.\n if (contentChanged === \"text\") {\n bits |= CONTENT_BIT\n if (instance.layoutNode) {\n instance.layoutNode.markDirty()\n }\n }\n // bgDirty: specifically track backgroundColor changes (added/changed/removed).\n // Render phase uses this to cascade re-renders only when the content area\n // was actually affected (not for border-only paint changes).\n if (\n (oldProps as Record<string, unknown>).backgroundColor !== (newProps as Record<string, unknown>).backgroundColor\n ) {\n bits |= BG_BIT\n }\n // Border removal: when borderStyle goes from truthy to falsy, stale border\n // characters (╭╮╰╯│─) persist in the cloned buffer because renderBox doesn't\n // draw anything at those positions. Setting bgDirty makes contentAreaAffected\n // true, triggering clearNodeRegion to fill the area with inherited bg.\n // Border *addition* doesn't need this — renderBorder overwrites the old cells.\n if ((oldProps as Record<string, unknown>).borderStyle && !(newProps as Record<string, unknown>).borderStyle) {\n bits |= BG_BIT\n }\n // NOTE: outline removal does NOT need a dirty bit here — the decoration\n // phase walks every frame and clears previous outline cells from\n // per-cell snapshots. See pipeline/decoration-phase.ts.\n // Theme change: all descendants need re-rendering with new token values.\n // bgDirty makes contentAreaAffected=true, cascading childrenNeedFreshRender\n // to force children to re-render with the new theme context.\n if ((oldProps as Record<string, unknown>).theme !== (newProps as Record<string, unknown>).theme) {\n bits |= BG_BIT\n }\n instance.dirtyBits = instance.dirtyEpoch !== epoch ? bits : instance.dirtyBits | bits\n instance.dirtyEpoch = epoch\n }\n\n // Track dirty node in module-level set for O(1) pipeline phase checks\n if (contentChanged) {\n trackContentDirty(instance)\n }\n\n // Track style-only dirty nodes for the fast path.\n // A node is style-only when: contentChanged is \"style\" (not \"text\"),\n // layoutChanged is false, bgDirty is false, AND the node doesn't already\n // have contentDirty or childrenDirty (which may have been set by\n // commitTextUpdate on a child BEFORE this commitUpdate runs — React\n // processes children before parents in the commit phase).\n if (\n contentChanged === \"style\" &&\n !layoutChanged &&\n !isDirty(instance.dirtyBits, instance.dirtyEpoch, BG_BIT) &&\n !isDirty(instance.dirtyBits, instance.dirtyEpoch, CONTENT_BIT) &&\n !isDirty(instance.dirtyBits, instance.dirtyEpoch, CHILDREN_BIT)\n ) {\n trackStyleOnlyDirty(instance)\n }\n\n instance.props = newProps\n\n // Only mark subtree/ancestor dirty when visual changes were detected.\n // Data attributes (data-*), event handlers, and other non-visual props\n // don't affect rendering, so propagating dirty flags wastes render phase\n // time traversing unchanged subtrees.\n //\n // scrollTo/scrollOffset changes affect rendering via scroll phase (children\n // shift position), so they must propagate subtreeDirty for render phase\n // traversal. Without this, the render phase fast-path skips ancestors of\n // the scroll container, never reaching the container to re-render at the\n // new scroll position.\n const scrollToChanged =\n (oldProps as Record<string, unknown>).scrollTo !== (newProps as Record<string, unknown>).scrollTo\n const scrollOffsetChanged =\n (oldProps as Record<string, unknown>).scrollOffset !== (newProps as Record<string, unknown>).scrollOffset\n if (scrollToChanged || scrollOffsetChanged) {\n trackScrollDirty(instance)\n }\n if (layoutChanged || contentChanged || scrollToChanged || scrollOffsetChanged) {\n markLayoutAncestorDirty(instance)\n markSubtreeDirty(instance)\n }\n },\n\n commitTextUpdate(textInstance: AgNode, _oldText: string, newText: string) {\n textInstance.textContent = newText\n syncTextContentSignal(textInstance)\n textInstance.props = { children: newText } as TextProps\n const epoch = getRenderEpoch()\n const bits = CONTENT_BIT | STYLE_PROPS_BIT\n textInstance.dirtyBits = textInstance.dirtyEpoch !== epoch ? bits : textInstance.dirtyBits | bits\n textInstance.dirtyEpoch = epoch\n trackContentDirty(textInstance)\n // Text content change affects layout (measure function will return different size)\n // Walk up to the nearest layout ancestor so its measure cache is invalidated\n markLayoutAncestorDirty(textInstance)\n markSubtreeDirty(textInstance)\n },\n\n // Finalization\n finalizeInitialChildren() {\n return false\n },\n\n prepareForCommit() {\n return null\n },\n\n resetAfterCommit(container: Container) {\n // Trigger render after React finishes committing\n container.onRender()\n },\n\n // Misc\n getPublicInstance(instance: AgNode) {\n return instance\n },\n\n shouldSetTextContent() {\n return false\n },\n\n clearContainer(container: Container) {\n // Notify focus manager before clearing — any child subtree may contain focus\n for (const child of container.root.children) {\n onNodeRemovedCallback?.(child)\n }\n for (const child of container.root.children) {\n if (container.root.layoutNode && child.layoutNode) {\n container.root.layoutNode.removeChild(child.layoutNode)\n child.layoutNode.free()\n }\n }\n container.root.children = []\n // Must invalidate dirty flags — same as removeChildFromContainer.\n // Without this, the pipeline can skip re-rendering after a root clear,\n // leaving stale buffer content (tree/buffer mismatch).\n {\n const epoch = getRenderEpoch()\n const bits = CHILDREN_BIT | CONTENT_BIT\n container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits\n container.root.dirtyEpoch = epoch\n }\n container.root.layoutNode?.markDirty()\n trackContentDirty(container.root)\n markSubtreeDirty(container.root)\n },\n\n preparePortalMount() {\n // No-op for terminal\n },\n\n getCurrentEventPriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority\n }\n return DefaultEventPriority\n },\n\n getInstanceFromNode() {\n return null\n },\n\n beforeActiveInstanceBlur() {\n // No-op\n },\n\n afterActiveInstanceBlur() {\n // No-op\n },\n\n prepareScopeUpdate() {\n // No-op\n },\n\n getInstanceFromScope() {\n return null\n },\n\n detachDeletedInstance() {\n // No-op\n },\n\n // React 19 / react-reconciler 0.33+ required methods\n setCurrentUpdatePriority(newPriority: number) {\n currentUpdatePriority = newPriority\n },\n\n getCurrentUpdatePriority() {\n return currentUpdatePriority\n },\n\n resolveUpdatePriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority\n }\n return DefaultEventPriority\n },\n\n maySuspendCommit() {\n return false\n },\n\n NotPendingTransition: null,\n HostTransitionContext: createContext(null),\n\n resetFormInstance() {\n // No-op\n },\n\n requestPostPaintCallback() {\n // No-op\n },\n\n shouldAttemptEagerTransition() {\n return false\n },\n\n trackSchedulerEvent() {\n // No-op\n },\n\n resolveEventType() {\n return null\n },\n\n resolveEventTimeStamp() {\n return -1.1\n },\n\n preloadInstance() {\n return true\n },\n\n startSuspendingCommit() {\n // No-op\n },\n\n suspendInstance() {\n // No-op\n },\n\n waitForCommitToBeReady() {\n return null\n },\n\n // ========================================================================\n // Suspense Support (hide/unhide)\n // ========================================================================\n\n /**\n * Hide an instance during Suspense.\n * Called when React needs to hide content while showing a fallback.\n *\n * Must set stylePropsDirty (render phase fast-path skip includes stylePropsDirty check),\n * layoutNode.markDirty() (hiding changes measured content — the layout engine\n * must recalculate dimensions), and markLayoutAncestorDirty (virtual text nodes\n * without layoutNode need the nearest layout ancestor dirty).\n */\n hideInstance(instance: AgNode) {\n instance.hidden = true\n const epoch = getRenderEpoch()\n const bits = CONTENT_BIT | STYLE_PROPS_BIT\n instance.dirtyBits = instance.dirtyEpoch !== epoch ? bits : instance.dirtyBits | bits\n instance.dirtyEpoch = epoch\n if (instance.layoutNode) {\n instance.layoutNode.markDirty()\n }\n trackContentDirty(instance)\n // Mark parent dirty to trigger re-render\n if (instance.parent) {\n if (instance.parent.dirtyEpoch !== epoch) {\n instance.parent.dirtyBits = CONTENT_BIT\n instance.parent.dirtyEpoch = epoch\n } else {\n instance.parent.dirtyBits |= CONTENT_BIT\n }\n trackContentDirty(instance.parent)\n }\n markLayoutAncestorDirty(instance)\n markSubtreeDirty(instance)\n },\n\n /**\n * Unhide an instance after Suspense resolves.\n * Called when the suspended content is ready to show.\n *\n * Same invalidation as hideInstance — the node's visibility change affects\n * layout (measured content changes) and paint (content must be re-rendered).\n */\n unhideInstance(instance: AgNode, _props: BoxProps | TextProps) {\n instance.hidden = false\n const epoch = getRenderEpoch()\n const bits = CONTENT_BIT | STYLE_PROPS_BIT\n instance.dirtyBits = instance.dirtyEpoch !== epoch ? bits : instance.dirtyBits | bits\n instance.dirtyEpoch = epoch\n if (instance.layoutNode) {\n instance.layoutNode.markDirty()\n }\n trackContentDirty(instance)\n // Mark parent dirty to trigger re-render\n if (instance.parent) {\n if (instance.parent.dirtyEpoch !== epoch) {\n instance.parent.dirtyBits = CONTENT_BIT\n instance.parent.dirtyEpoch = epoch\n } else {\n instance.parent.dirtyBits |= CONTENT_BIT\n }\n trackContentDirty(instance.parent)\n }\n markLayoutAncestorDirty(instance)\n markSubtreeDirty(instance)\n },\n\n /**\n * Hide a text instance during Suspense.\n *\n * Text instances don't have layout nodes. markLayoutAncestorDirty walks up\n * to the nearest layout ancestor and marks it dirty so the measure function\n * re-collects descendant text (collectNodeTextContent skips hidden children).\n */\n hideTextInstance(textInstance: AgNode) {\n textInstance.hidden = true\n const epoch = getRenderEpoch()\n const bits = CONTENT_BIT | STYLE_PROPS_BIT\n textInstance.dirtyBits = textInstance.dirtyEpoch !== epoch ? bits : textInstance.dirtyBits | bits\n textInstance.dirtyEpoch = epoch\n trackContentDirty(textInstance)\n if (textInstance.parent) {\n if (textInstance.parent.dirtyEpoch !== epoch) {\n textInstance.parent.dirtyBits = CONTENT_BIT\n textInstance.parent.dirtyEpoch = epoch\n } else {\n textInstance.parent.dirtyBits |= CONTENT_BIT\n }\n trackContentDirty(textInstance.parent)\n }\n markLayoutAncestorDirty(textInstance)\n markSubtreeDirty(textInstance)\n },\n\n /**\n * Unhide a text instance after Suspense resolves.\n *\n * Same invalidation as hideTextInstance — the text content changes when\n * hidden children become visible again.\n */\n unhideTextInstance(textInstance: AgNode, _text: string) {\n textInstance.hidden = false\n const epoch = getRenderEpoch()\n const bits = CONTENT_BIT | STYLE_PROPS_BIT\n textInstance.dirtyBits = textInstance.dirtyEpoch !== epoch ? bits : textInstance.dirtyBits | bits\n textInstance.dirtyEpoch = epoch\n trackContentDirty(textInstance)\n if (textInstance.parent) {\n if (textInstance.parent.dirtyEpoch !== epoch) {\n textInstance.parent.dirtyBits = CONTENT_BIT\n textInstance.parent.dirtyEpoch = epoch\n } else {\n textInstance.parent.dirtyBits |= CONTENT_BIT\n }\n trackContentDirty(textInstance.parent)\n }\n markLayoutAncestorDirty(textInstance)\n markSubtreeDirty(textInstance)\n },\n}\n","/**\n * Silvery React Reconciler\n *\n * Custom React reconciler that builds a tree of SilveryNodes, each with a Yoga layout node.\n * This is the core of Silvery's architecture - separating structure (React reconciliation)\n * from content (terminal rendering).\n *\n * The reconciler creates SilveryNodes during React's reconciliation phase,\n * but actual terminal content is rendered later after Yoga computes layout.\n */\n\n// @ts-expect-error - react-reconciler has no type declarations\nimport Reconciler from \"react-reconciler\"\nimport type { AgNode } from \"@silvery/ag/types\"\nimport { type Container, hostConfig } from \"./host-config\"\nimport { createRootNode } from \"./nodes\"\n\n// Re-export only what's needed by render.tsx and testing/index.tsx\nexport type { Container } from \"./host-config\"\nexport {\n runWithDiscreteEvent,\n _resetBoxInsideTextWarning,\n setInkStrictValidation,\n setOnNodeRemoved,\n} from \"./host-config\"\n\n// ============================================================================\n// Reconciler Export\n// ============================================================================\n\n/**\n * Create the React reconciler instance.\n */\nexport const reconciler = Reconciler(hostConfig)\n\n/**\n * Create a container for rendering.\n */\nexport function createContainer(onRender: () => void): Container {\n const root = createRootNode()\n return { root, onRender }\n}\n\n/**\n * Create a React fiber root for a container (wraps the 10-argument reconciler call).\n */\nexport function createFiberRoot(container: Container) {\n return reconciler.createContainer(\n container,\n 1, // ConcurrentRoot\n null, // hydrationCallbacks\n false, // isStrictMode\n null, // concurrentUpdatesByDefaultOverride\n \"\", // identifierPrefix\n () => {}, // onUncaughtError\n () => {}, // onCaughtError\n () => {}, // onRecoverableError\n null, // onDefaultTransitionIndicator\n )\n}\n\n/**\n * Get the root SilveryNode from a container.\n */\nexport function getContainerRoot(container: Container): AgNode {\n return container.root\n}\n"],"x_google_ignoreList":[25,28],"mappings":"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AK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KAAK;KAAC,CAAC,MAAK,KA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"}
|