mirror of
http://10.0.2.1:3031/sauer/claude-code.git
synced 2026-06-30 18:46:58 +10:00
358 lines
32 KiB
TypeScript
358 lines
32 KiB
TypeScript
|
|
import { c as _c } from "react/compiler-runtime";
|
||
|
|
import { feature } from 'bun:bundle';
|
||
|
|
import * as React from 'react';
|
||
|
|
import { Box, Text } from 'src/ink.js';
|
||
|
|
import { getPlatform } from 'src/utils/platform.js';
|
||
|
|
import { isKeybindingCustomizationEnabled } from '../../keybindings/loadUserBindings.js';
|
||
|
|
import { useShortcutDisplay } from '../../keybindings/useShortcutDisplay.js';
|
||
|
|
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js';
|
||
|
|
import { isFastModeAvailable, isFastModeEnabled } from '../../utils/fastMode.js';
|
||
|
|
import { getNewlineInstructions } from './utils.js';
|
||
|
|
|
||
|
|
/** Format a shortcut for display in the help menu (e.g., "ctrl+o" → "ctrl + o") */
|
||
|
|
function formatShortcut(shortcut: string): string {
|
||
|
|
return shortcut.replace(/\+/g, ' + ');
|
||
|
|
}
|
||
|
|
type Props = {
|
||
|
|
dimColor?: boolean;
|
||
|
|
fixedWidth?: boolean;
|
||
|
|
gap?: number;
|
||
|
|
paddingX?: number;
|
||
|
|
};
|
||
|
|
export function PromptInputHelpMenu(props) {
|
||
|
|
const $ = _c(99);
|
||
|
|
const {
|
||
|
|
dimColor,
|
||
|
|
fixedWidth,
|
||
|
|
gap,
|
||
|
|
paddingX
|
||
|
|
} = props;
|
||
|
|
const t0 = useShortcutDisplay("app:toggleTranscript", "Global", "ctrl+o");
|
||
|
|
let t1;
|
||
|
|
if ($[0] !== t0) {
|
||
|
|
t1 = formatShortcut(t0);
|
||
|
|
$[0] = t0;
|
||
|
|
$[1] = t1;
|
||
|
|
} else {
|
||
|
|
t1 = $[1];
|
||
|
|
}
|
||
|
|
const transcriptShortcut = t1;
|
||
|
|
const t2 = useShortcutDisplay("app:toggleTodos", "Global", "ctrl+t");
|
||
|
|
let t3;
|
||
|
|
if ($[2] !== t2) {
|
||
|
|
t3 = formatShortcut(t2);
|
||
|
|
$[2] = t2;
|
||
|
|
$[3] = t3;
|
||
|
|
} else {
|
||
|
|
t3 = $[3];
|
||
|
|
}
|
||
|
|
const todosShortcut = t3;
|
||
|
|
const t4 = useShortcutDisplay("chat:undo", "Chat", "ctrl+_");
|
||
|
|
let t5;
|
||
|
|
if ($[4] !== t4) {
|
||
|
|
t5 = formatShortcut(t4);
|
||
|
|
$[4] = t4;
|
||
|
|
$[5] = t5;
|
||
|
|
} else {
|
||
|
|
t5 = $[5];
|
||
|
|
}
|
||
|
|
const undoShortcut = t5;
|
||
|
|
const t6 = useShortcutDisplay("chat:stash", "Chat", "ctrl+s");
|
||
|
|
let t7;
|
||
|
|
if ($[6] !== t6) {
|
||
|
|
t7 = formatShortcut(t6);
|
||
|
|
$[6] = t6;
|
||
|
|
$[7] = t7;
|
||
|
|
} else {
|
||
|
|
t7 = $[7];
|
||
|
|
}
|
||
|
|
const stashShortcut = t7;
|
||
|
|
const t8 = useShortcutDisplay("chat:cycleMode", "Chat", "shift+tab");
|
||
|
|
let t9;
|
||
|
|
if ($[8] !== t8) {
|
||
|
|
t9 = formatShortcut(t8);
|
||
|
|
$[8] = t8;
|
||
|
|
$[9] = t9;
|
||
|
|
} else {
|
||
|
|
t9 = $[9];
|
||
|
|
}
|
||
|
|
const cycleModeShortcut = t9;
|
||
|
|
const t10 = useShortcutDisplay("chat:modelPicker", "Chat", "alt+p");
|
||
|
|
let t11;
|
||
|
|
if ($[10] !== t10) {
|
||
|
|
t11 = formatShortcut(t10);
|
||
|
|
$[10] = t10;
|
||
|
|
$[11] = t11;
|
||
|
|
} else {
|
||
|
|
t11 = $[11];
|
||
|
|
}
|
||
|
|
const modelPickerShortcut = t11;
|
||
|
|
const t12 = useShortcutDisplay("chat:fastMode", "Chat", "alt+o");
|
||
|
|
let t13;
|
||
|
|
if ($[12] !== t12) {
|
||
|
|
t13 = formatShortcut(t12);
|
||
|
|
$[12] = t12;
|
||
|
|
$[13] = t13;
|
||
|
|
} else {
|
||
|
|
t13 = $[13];
|
||
|
|
}
|
||
|
|
const fastModeShortcut = t13;
|
||
|
|
const t14 = useShortcutDisplay("chat:externalEditor", "Chat", "ctrl+g");
|
||
|
|
let t15;
|
||
|
|
if ($[14] !== t14) {
|
||
|
|
t15 = formatShortcut(t14);
|
||
|
|
$[14] = t14;
|
||
|
|
$[15] = t15;
|
||
|
|
} else {
|
||
|
|
t15 = $[15];
|
||
|
|
}
|
||
|
|
const externalEditorShortcut = t15;
|
||
|
|
const t16 = useShortcutDisplay("app:toggleTerminal", "Global", "meta+j");
|
||
|
|
let t17;
|
||
|
|
if ($[16] !== t16) {
|
||
|
|
t17 = formatShortcut(t16);
|
||
|
|
$[16] = t16;
|
||
|
|
$[17] = t17;
|
||
|
|
} else {
|
||
|
|
t17 = $[17];
|
||
|
|
}
|
||
|
|
const terminalShortcut = t17;
|
||
|
|
const t18 = useShortcutDisplay("chat:imagePaste", "Chat", "ctrl+v");
|
||
|
|
let t19;
|
||
|
|
if ($[18] !== t18) {
|
||
|
|
t19 = formatShortcut(t18);
|
||
|
|
$[18] = t18;
|
||
|
|
$[19] = t19;
|
||
|
|
} else {
|
||
|
|
t19 = $[19];
|
||
|
|
}
|
||
|
|
const imagePasteShortcut = t19;
|
||
|
|
let t20;
|
||
|
|
if ($[20] !== dimColor || $[21] !== terminalShortcut) {
|
||
|
|
t20 = feature("TERMINAL_PANEL") ? getFeatureValue_CACHED_MAY_BE_STALE("tengu_terminal_panel", false) ? <Box><Text dimColor={dimColor}>{terminalShortcut} for terminal</Text></Box> : null : null;
|
||
|
|
$[20] = dimColor;
|
||
|
|
$[21] = terminalShortcut;
|
||
|
|
$[22] = t20;
|
||
|
|
} else {
|
||
|
|
t20 = $[22];
|
||
|
|
}
|
||
|
|
const terminalShortcutElement = t20;
|
||
|
|
const t21 = fixedWidth ? 24 : undefined;
|
||
|
|
let t22;
|
||
|
|
if ($[23] !== dimColor) {
|
||
|
|
t22 = <Box><Text dimColor={dimColor}>! for bash mode</Text></Box>;
|
||
|
|
$[23] = dimColor;
|
||
|
|
$[24] = t22;
|
||
|
|
} else {
|
||
|
|
t22 = $[24];
|
||
|
|
}
|
||
|
|
let t23;
|
||
|
|
if ($[25] !== dimColor) {
|
||
|
|
t23 = <Box><Text dimColor={dimColor}>/ for commands</Text></Box>;
|
||
|
|
$[25] = dimColor;
|
||
|
|
$[26] = t23;
|
||
|
|
} else {
|
||
|
|
t23 = $[26];
|
||
|
|
}
|
||
|
|
let t24;
|
||
|
|
if ($[27] !== dimColor) {
|
||
|
|
t24 = <Box><Text dimColor={dimColor}>@ for file paths</Text></Box>;
|
||
|
|
$[27] = dimColor;
|
||
|
|
$[28] = t24;
|
||
|
|
} else {
|
||
|
|
t24 = $[28];
|
||
|
|
}
|
||
|
|
let t25;
|
||
|
|
if ($[29] !== dimColor) {
|
||
|
|
t25 = <Box><Text dimColor={dimColor}>{"& for background"}</Text></Box>;
|
||
|
|
$[29] = dimColor;
|
||
|
|
$[30] = t25;
|
||
|
|
} else {
|
||
|
|
t25 = $[30];
|
||
|
|
}
|
||
|
|
let t26;
|
||
|
|
if ($[31] !== dimColor) {
|
||
|
|
t26 = <Box><Text dimColor={dimColor}>/btw for side question</Text></Box>;
|
||
|
|
$[31] = dimColor;
|
||
|
|
$[32] = t26;
|
||
|
|
} else {
|
||
|
|
t26 = $[32];
|
||
|
|
}
|
||
|
|
let t27;
|
||
|
|
if ($[33] !== t21 || $[34] !== t22 || $[35] !== t23 || $[36] !== t24 || $[37] !== t25 || $[38] !== t26) {
|
||
|
|
t27 = <Box flexDirection="column" width={t21}>{t22}{t23}{t24}{t25}{t26}</Box>;
|
||
|
|
$[33] = t21;
|
||
|
|
$[34] = t22;
|
||
|
|
$[35] = t23;
|
||
|
|
$[36] = t24;
|
||
|
|
$[37] = t25;
|
||
|
|
$[38] = t26;
|
||
|
|
$[39] = t27;
|
||
|
|
} else {
|
||
|
|
t27 = $[39];
|
||
|
|
}
|
||
|
|
const t28 = fixedWidth ? 35 : undefined;
|
||
|
|
let t29;
|
||
|
|
if ($[40] !== dimColor) {
|
||
|
|
t29 = <Box><Text dimColor={dimColor}>double tap esc to clear input</Text></Box>;
|
||
|
|
$[40] = dimColor;
|
||
|
|
$[41] = t29;
|
||
|
|
} else {
|
||
|
|
t29 = $[41];
|
||
|
|
}
|
||
|
|
let t30;
|
||
|
|
if ($[42] !== cycleModeShortcut || $[43] !== dimColor) {
|
||
|
|
t30 = <Box><Text dimColor={dimColor}>{cycleModeShortcut}{" "}{false ? "to cycle modes" : "to auto-accept edits"}</Text></Box>;
|
||
|
|
$[42] = cycleModeShortcut;
|
||
|
|
$[43] = dimColor;
|
||
|
|
$[44] = t30;
|
||
|
|
} else {
|
||
|
|
t30 = $[44];
|
||
|
|
}
|
||
|
|
let t31;
|
||
|
|
if ($[45] !== dimColor || $[46] !== transcriptShortcut) {
|
||
|
|
t31 = <Box><Text dimColor={dimColor}>{transcriptShortcut} for verbose output</Text></Box>;
|
||
|
|
$[45] = dimColor;
|
||
|
|
$[46] = transcriptShortcut;
|
||
|
|
$[47] = t31;
|
||
|
|
} else {
|
||
|
|
t31 = $[47];
|
||
|
|
}
|
||
|
|
let t32;
|
||
|
|
if ($[48] !== dimColor || $[49] !== todosShortcut) {
|
||
|
|
t32 = <Box><Text dimColor={dimColor}>{todosShortcut} to toggle tasks</Text></Box>;
|
||
|
|
$[48] = dimColor;
|
||
|
|
$[49] = todosShortcut;
|
||
|
|
$[50] = t32;
|
||
|
|
} else {
|
||
|
|
t32 = $[50];
|
||
|
|
}
|
||
|
|
let t33;
|
||
|
|
if ($[51] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t33 = getNewlineInstructions();
|
||
|
|
$[51] = t33;
|
||
|
|
} else {
|
||
|
|
t33 = $[51];
|
||
|
|
}
|
||
|
|
let t34;
|
||
|
|
if ($[52] !== dimColor) {
|
||
|
|
t34 = <Box><Text dimColor={dimColor}>{t33}</Text></Box>;
|
||
|
|
$[52] = dimColor;
|
||
|
|
$[53] = t34;
|
||
|
|
} else {
|
||
|
|
t34 = $[53];
|
||
|
|
}
|
||
|
|
let t35;
|
||
|
|
if ($[54] !== t28 || $[55] !== t29 || $[56] !== t30 || $[57] !== t31 || $[58] !== t32 || $[59] !== t34 || $[60] !== terminalShortcutElement) {
|
||
|
|
t35 = <Box flexDirection="column" width={t28}>{t29}{t30}{t31}{t32}{terminalShortcutElement}{t34}</Box>;
|
||
|
|
$[54] = t28;
|
||
|
|
$[55] = t29;
|
||
|
|
$[56] = t30;
|
||
|
|
$[57] = t31;
|
||
|
|
$[58] = t32;
|
||
|
|
$[59] = t34;
|
||
|
|
$[60] = terminalShortcutElement;
|
||
|
|
$[61] = t35;
|
||
|
|
} else {
|
||
|
|
t35 = $[61];
|
||
|
|
}
|
||
|
|
let t36;
|
||
|
|
if ($[62] !== dimColor || $[63] !== undoShortcut) {
|
||
|
|
t36 = <Box><Text dimColor={dimColor}>{undoShortcut} to undo</Text></Box>;
|
||
|
|
$[62] = dimColor;
|
||
|
|
$[63] = undoShortcut;
|
||
|
|
$[64] = t36;
|
||
|
|
} else {
|
||
|
|
t36 = $[64];
|
||
|
|
}
|
||
|
|
let t37;
|
||
|
|
if ($[65] !== dimColor) {
|
||
|
|
t37 = getPlatform() !== "windows" && <Box><Text dimColor={dimColor}>ctrl + z to suspend</Text></Box>;
|
||
|
|
$[65] = dimColor;
|
||
|
|
$[66] = t37;
|
||
|
|
} else {
|
||
|
|
t37 = $[66];
|
||
|
|
}
|
||
|
|
let t38;
|
||
|
|
if ($[67] !== dimColor || $[68] !== imagePasteShortcut) {
|
||
|
|
t38 = <Box><Text dimColor={dimColor}>{imagePasteShortcut} to paste images</Text></Box>;
|
||
|
|
$[67] = dimColor;
|
||
|
|
$[68] = imagePasteShortcut;
|
||
|
|
$[69] = t38;
|
||
|
|
} else {
|
||
|
|
t38 = $[69];
|
||
|
|
}
|
||
|
|
let t39;
|
||
|
|
if ($[70] !== dimColor || $[71] !== modelPickerShortcut) {
|
||
|
|
t39 = <Box><Text dimColor={dimColor}>{modelPickerShortcut} to switch model</Text></Box>;
|
||
|
|
$[70] = dimColor;
|
||
|
|
$[71] = modelPickerShortcut;
|
||
|
|
$[72] = t39;
|
||
|
|
} else {
|
||
|
|
t39 = $[72];
|
||
|
|
}
|
||
|
|
let t40;
|
||
|
|
if ($[73] !== dimColor || $[74] !== fastModeShortcut) {
|
||
|
|
t40 = isFastModeEnabled() && isFastModeAvailable() && <Box><Text dimColor={dimColor}>{fastModeShortcut} to toggle fast mode</Text></Box>;
|
||
|
|
$[73] = dimColor;
|
||
|
|
$[74] = fastModeShortcut;
|
||
|
|
$[75] = t40;
|
||
|
|
} else {
|
||
|
|
t40 = $[75];
|
||
|
|
}
|
||
|
|
let t41;
|
||
|
|
if ($[76] !== dimColor || $[77] !== stashShortcut) {
|
||
|
|
t41 = <Box><Text dimColor={dimColor}>{stashShortcut} to stash prompt</Text></Box>;
|
||
|
|
$[76] = dimColor;
|
||
|
|
$[77] = stashShortcut;
|
||
|
|
$[78] = t41;
|
||
|
|
} else {
|
||
|
|
t41 = $[78];
|
||
|
|
}
|
||
|
|
let t42;
|
||
|
|
if ($[79] !== dimColor || $[80] !== externalEditorShortcut) {
|
||
|
|
t42 = <Box><Text dimColor={dimColor}>{externalEditorShortcut} to edit in $EDITOR</Text></Box>;
|
||
|
|
$[79] = dimColor;
|
||
|
|
$[80] = externalEditorShortcut;
|
||
|
|
$[81] = t42;
|
||
|
|
} else {
|
||
|
|
t42 = $[81];
|
||
|
|
}
|
||
|
|
let t43;
|
||
|
|
if ($[82] !== dimColor) {
|
||
|
|
t43 = isKeybindingCustomizationEnabled() && <Box><Text dimColor={dimColor}>/keybindings to customize</Text></Box>;
|
||
|
|
$[82] = dimColor;
|
||
|
|
$[83] = t43;
|
||
|
|
} else {
|
||
|
|
t43 = $[83];
|
||
|
|
}
|
||
|
|
let t44;
|
||
|
|
if ($[84] !== t36 || $[85] !== t37 || $[86] !== t38 || $[87] !== t39 || $[88] !== t40 || $[89] !== t41 || $[90] !== t42 || $[91] !== t43) {
|
||
|
|
t44 = <Box flexDirection="column">{t36}{t37}{t38}{t39}{t40}{t41}{t42}{t43}</Box>;
|
||
|
|
$[84] = t36;
|
||
|
|
$[85] = t37;
|
||
|
|
$[86] = t38;
|
||
|
|
$[87] = t39;
|
||
|
|
$[88] = t40;
|
||
|
|
$[89] = t41;
|
||
|
|
$[90] = t42;
|
||
|
|
$[91] = t43;
|
||
|
|
$[92] = t44;
|
||
|
|
} else {
|
||
|
|
t44 = $[92];
|
||
|
|
}
|
||
|
|
let t45;
|
||
|
|
if ($[93] !== gap || $[94] !== paddingX || $[95] !== t27 || $[96] !== t35 || $[97] !== t44) {
|
||
|
|
t45 = <Box paddingX={paddingX} flexDirection="row" gap={gap}>{t27}{t35}{t44}</Box>;
|
||
|
|
$[93] = gap;
|
||
|
|
$[94] = paddingX;
|
||
|
|
$[95] = t27;
|
||
|
|
$[96] = t35;
|
||
|
|
$[97] = t44;
|
||
|
|
$[98] = t45;
|
||
|
|
} else {
|
||
|
|
t45 = $[98];
|
||
|
|
}
|
||
|
|
return t45;
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZWF0dXJlIiwiUmVhY3QiLCJCb3giLCJUZXh0IiwiZ2V0UGxhdGZvcm0iLCJpc0tleWJpbmRpbmdDdXN0b21pemF0aW9uRW5hYmxlZCIsInVzZVNob3J0Y3V0RGlzcGxheSIsImdldEZlYXR1cmVWYWx1ZV9DQUNIRURfTUFZX0JFX1NUQUxFIiwiaXNGYXN0TW9kZUF2YWlsYWJsZSIsImlzRmFzdE1vZGVFbmFibGVkIiwiZ2V0TmV3bGluZUluc3RydWN0aW9ucyIsImZvcm1hdFNob3J0Y3V0Iiwic2hvcnRjdXQiLCJyZXBsYWNlIiwiUHJvcHMiLCJkaW1Db2xvciIsImZpeGVkV2lkdGgiLCJnYXAiLCJwYWRkaW5nWCIsIlByb21wdElucHV0SGVscE1lbnUiLCJwcm9wcyIsIiQiLCJfYyIsInQwIiwidDEiLCJ0cmFuc2NyaXB0U2hvcnRjdXQiLCJ0MiIsInQzIiwidG9kb3NTaG9ydGN1dCIsInQ0IiwidDUiLCJ1bmRvU2hvcnRjdXQiLCJ0NiIsInQ3Iiwic3Rhc2hTaG9ydGN1dCIsInQ4IiwidDkiLCJjeWNsZU1vZGVTaG9ydGN1dCIsInQxMCIsInQxMSIsIm1vZGVsUGlja2VyU2hvcnRjdXQiLCJ0MTIiLCJ0MTMiLCJmYXN0TW9kZVNob3J0Y3V0IiwidDE0IiwidDE1IiwiZXh0ZXJuYWxFZGl0b3JTaG9ydGN1dCIsInQxNiIsInQxNyIsInRlcm1pbmFsU2hvcnRjdXQiLCJ0MTgiLCJ0MTkiLCJpbWFnZVBhc3RlU2hvcnRjdXQiLCJ0MjAiLCJ0ZXJtaW5hbFNob3J0Y3V0RWxlbWVudCIsInQyMSIsInVuZGVmaW5lZCIsInQyMiIsInQyMyIsInQyNCIsInQyNSIsInQyNiIsInQyNyIsInQyOCIsInQyOSIsInQzMCIsInQzMSIsInQzMiIsInQzMyIsIlN5bWJvbCIsImZvciIsInQzNCIsInQzNSIsInQzNiIsInQzNyIsInQzOCIsInQzOSIsInQ0MCIsInQ0MSIsInQ0MiIsInQ0MyIsInQ0NCIsInQ0NSJdLCJzb3VyY2VzIjpbIlByb21wdElucHV0SGVscE1lbnUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZlYXR1cmUgfSBmcm9tICdidW46YnVuZGxlJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdzcmMvaW5rLmpzJ1xuaW1wb3J0IHsgZ2V0UGxhdGZvcm0gfSBmcm9tICdzcmMvdXRpbHMvcGxhdGZvcm0uanMnXG5pbXBvcnQgeyBpc0tleWJpbmRpbmdDdXN0b21pemF0aW9uRW5hYmxlZCB9IGZyb20gJy4uLy4uL2tleWJpbmRpbmdzL2xvYWRVc2VyQmluZGluZ3MuanMnXG5pbXBvcnQgeyB1c2VTaG9ydGN1dERpc3BsYXkgfSBmcm9tICcuLi8uLi9rZXliaW5kaW5ncy91c2VTaG9ydGN1dERpc3BsYXkuanMnXG5pbXBvcnQgeyBnZXRGZWF0dXJlVmFsdWVfQ0FDSEVEX01BWV9CRV9TVEFMRSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuYWx5dGljcy9ncm93dGhib29rLmpzJ1xuaW1wb3J0IHsgaXNGYXN0TW9kZUF2YWlsYWJsZSwgaXNGYXN0TW9kZUVuYWJsZWQgfSBmcm9tICcuLi8uLi91dGlscy9mYXN0TW9kZS5qcydcbmltcG9ydCB7IGdldE5ld2xpbmVJbnN0cnVjdGlvbnMgfSBmcm9tICcuL3V0aWxzLmpzJ1xuXG4vKiogRm9ybWF0IGEgc2hvcnRjdXQgZm9yIGRpc3BsYXkgaW4gdGhlIGhlbHAgbWVudSAoZS5nLiwgXCJjdHJsK29cIiDihpIgXCJjdHJsICsgb1wiKSAqL1xuZnVuY3Rpb24gZm9ybWF0U2hvcnRjdXQoc2hvcnRjdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzaG9ydGN1dC5yZXBsYWNlKC9cXCsvZywgJyArICcpXG59XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRpbUNvbG9yPzogYm9vbGVhblxuICBmaXhlZFdpZHRoPzogYm9vbGVhblxuICBnYXA/OiBudW1iZXJcbiAgcGFkZGluZ1g/OiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb21wdElucHV0SGVscE1lbnUocHJvcHM6IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBkaW1Db2xvciwgZml4ZWRXaWR0aCwgZ2FwLCBwYWRkaW5nWCB9ID0gcHJvcHNcblxuICAvLyBHZXQgY29uZmlndXJlZCBzaG9ydGN1dHMgZnJvbSBrZXliaW5kaW5nIHN5c3RlbVxuICBjb25zdCB0cmFuc2NyaXB0U2hvcnRjdXQgPSBmb3JtYXRTaG9ydGN1dChcbiAgICB1c2VTaG9ydGN1dERpc3BsYXkoJ2FwcDp0b2dnbGVUcmFuc2NyaXB0JywgJ0dsb2JhbCcsICdjdHJsK28nKSxcbiAgKVxuICBjb25zdCB0b2Rvc1Nob3J0Y3V0ID0gZm9ybWF0U2hvcnRjdXQoXG4gICAgdXNlU2hvcnRjdXREaXNwbGF5KCdhcHA6dG9nZ2xlVG9kb3MnLCAnR2xvYmFsJywgJ2N0cmwrdCcpLFxuICApXG4gIGNvbnN0IHVuZG9TaG9ydGN1dCA9IGZvcm1hdFNob3J0Y3V0KFxuICAgIHVzZVNob3J0Y3V0RGlzcGxheSgnY2hhdDp1bmRvJywgJ0NoYXQnLCAnY3RybCtfJyksXG4gIClcbiAgY29uc3Qgc3Rhc2hTaG9ydGN1dCA9IGZvcm1hdFNob3J0Y3V0KFxuICAgIHVzZVNob3J0Y3V0RGlzcGxheSgnY2hhdDpzdGFzaCcsICdDaGF0JywgJ2N0cmwrcycpLFxuICApXG4gIGNvbnN0IGN5Y2xlTW9kZVNob3J0Y3V0ID0gZm9ybWF0U2hvcnRjdXQoXG4gICAgdXNlU2hvcnRjdXREaXNwbGF5KCdjaGF0OmN5Y2xlTW9kZScsICdDaGF0JywgJ3NoaWZ0K3RhYicpLFxuICApXG4gIGNvbnN0IG1vZGVsUGlja2VyU2hvcnRjdXQgPSBmb3JtYXRTaG9ydGN1dChcbiAgICB1c2VTaG9ydGN1dERpc3BsYXkoJ2NoYXQ6bW9kZWxQaWNrZXInLCAnQ2hhdCcsICdhbHQrcCcpLFxuICApXG4gIGNvbnN0IGZhc3RNb2RlU2hvcnRjdXQgPSBmb3JtYXRTaG9ydGN1dChcbiAgICB1c2VTaG9ydGN1dERpc3BsYXkoJ2NoYXQ6ZmFzdE1vZGUnLCAnQ2hhdCcsICdhbHQrbycpLFxuICApXG4gIGNvbnN0IGV4dGVybmFsRWRpdG9yU2hvcnRjdXQgPSBmb3JtYXRTaG9ydGN1dChcbiAgICB1c2VTaG9ydGN1dERpc3BsYXkoJ2NoYXQ6ZXh0ZXJuYWxFZGl0b3InLCAnQ2hhdCcsICdjdHJsK2cnKSxcbiAgKVxuICBjb25zdCB0ZXJtaW5hbFNob3J0Y3V0ID0gZm9ybWF0U2hvcnRjdXQoXG4gICAgdXNlU2hvcnRjdXREaXNwbGF5KCdhcHA6dG9nZ2xlVGVybWluYWwnLCAnR2xvYmFsJywgJ21ldGEraicpLFxuICApXG4gIGNvbnN0IGltYWdlUGFzdGVTaG9ydGN1dCA9IGZvcm1hdFNob3J0Y3V0KFxuICAgIHV
|