ng-terminal
Version:
NgTerminal is a terminal component on Angular 17 or higher.
335 lines • 33.8 kB
JavaScript
/**
*
* It is a CSI sequences generator
* https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Functions-using-CSI-_-ordered-by-the-final-character_s_
*/
let CSI = '\x9b';
export class FunctionsUsingCSI {
static get CSI() {
return CSI;
}
/**
* CSI Ps @ Insert Ps (Blank) Character(s) (default = 1) (ICH).
*
* */
static insertBlank(count) {
return `${CSI}${count}@`;
}
/**
* CSI Ps SP @ */
/**
* CSI Ps A Cursor Up Ps Times (default = 1) (CUU).
* \x9b3A */
static cursorUp(count) {
return `${CSI}${count}A`;
}
/**
* CSI Ps SP A */
/**
* CSI Ps B Cursor Down Ps Times (default = 1) (CUD).
* \x9b3B */
static cursorDown(count) {
return `${CSI}${count}B`;
}
/**
* CSI Ps C Cursor Forward Ps Times (default = 1) (CUF).
* \x9b3C */
static cursorForward(count) {
return `${CSI}${count}C`;
}
/**
* CSI Ps D Cursor Backward Ps Times (default = 1) (CUB).
* \x9b3D */
static cursorBackward(count) {
return `${CSI}${count}D`;
}
/**
* CSI Ps E Cursor Next Line Ps Times (default = 1) (CNL).
* \x9b3E
* */
static cursorNextLine(count) {
return `${CSI}${count}E`;
}
/**
* CSI Ps F Cursor Preceding Line Ps Times (default = 1) (CPL).
* \x9b3F
* */
static cursorPrecedingLine(count) {
return `${CSI}${count}F`;
}
/**
* CSI Ps G Cursor Character Absolute [column] (default = [row,1]) (CHA).
* \x9b9G
* */
static cursorColumn(count) {
return `${CSI}${count}G`;
}
/**
* CSI Ps ; Ps H Cursor Position [row;column] (default = [1,1]) (CUP).
* \x9b2;2H
* */
static cursorPosition(row, col) {
return `${CSI}${row};${col}H`;
}
/**
* CSI Ps I Cursor Forward Tabulation Ps tab stops (default = 1) (CHT). */
/**
* CSI Ps J Erase in Display (ED), VT100.
* Ps = 0 -> Erase Below (default).
* Ps = 1 -> Erase Above.
* Ps = 2 -> Erase All.
* Ps = 3 -> Erase Saved Lines (xterm).
* \x9b2J
* */
static eraseInDisplay(category) {
return `${CSI}${category}J`;
}
/**
* CSI ? Ps J
* Erase in Display (DECSED), VT220.
* Ps = 0 -> Selective Erase Below (default).
* Ps = 1 -> Selective Erase Above.
* Ps = 2 -> Selective Erase All.
* Ps = 3 -> Selective Erase Saved Lines (xterm).
* \x9b?2J
* */
static eraseSelectiveThingsInDisplay(category) {
return `${CSI}?${category}J`;
}
/**
* CSI Ps K
* Erase in Line (EL), VT100.
* Ps = 0 -> Erase to Right (default).
* Ps = 1 -> Erase to Left.
* Ps = 2 -> Erase All.
* \x9b?1K
* */
static eraseInLine(category) {
return `${CSI}${category}K`;
}
/**
* CSI ? Ps K
* Erase in Line (DECSEL), VT220.
* Ps = 0 -> Selective Erase to Right (default).
* Ps = 1 -> Selective Erase to Left.
* Ps = 2 -> Selective Erase All.
* \x9b?1K
* */
static eraseSelectiveThingsInLine(category) {
return `${CSI}?${category}K`;
}
/**
* CSI Ps L Insert Ps Line(s) (default = 1) (IL).
* \x9b2L
* */
static insertLines(count) {
return `${CSI}${count}L`;
}
/**
* CSI Ps M Delete Ps Line(s) (default = 1) (DL).
* \x9b2M
* */
static deleteLines(count) {
return `${CSI}${count}M`;
}
/**
* CSI Ps P Delete Ps Character(s) (default = 1) (DCH).
* \x9b2P
* */
static deleteCharacter(count) {
return `${CSI}${count}P`;
}
/**
* CSI Ps S Scroll up Ps lines (default = 1) (SU), VT420, ECMA-48.
* \x9b2S
* */
static scrollUpLines(count) {
return `${CSI}${count}S`;
}
/**
* CSI ? Pi ; Pa ; Pv S */
/**
* CSI Ps T Scroll down Ps lines (default = 1) (SD), VT420.
* \x9b2T
* */
static scrollDownLines(count) {
return `${CSI}${count}T`;
}
/**
* CSI Ps ; Ps ; Ps ; Ps ; Ps T */
/**
* CSI > Ps ; Ps T */
/**
* CSI Ps X Erase Ps Character(s) (default = 1) (ECH).
* \x9b2X
* */
static eraseCharacters(count) {
return `${CSI}${count}X`;
}
/**
* CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).
* \x9b2Z
* */
static cursorBackwardTabulationPstabstops(count) {
return `${CSI}${count}Z`;
}
/**
* CSI Ps ^ Scroll down Ps lines (default = 1) (SD), ECMA-48.
* \x9b2^
* */
static scrolldownPslines(count) {
return `${CSI}${count}^`;
}
/**
* CSI Ps ` Character Position Absolute [column] (default = [row,1])
* \x9b1` */
static characterPositionAbsolute(count) {
return `${CSI}${count}\``;
}
/**
* CSI Ps a Character Position Relative [columns] (default = [row,col+1])
* \x9b1a */
static characterPositionRelative(count) {
return `${CSI}${count}a`;
}
/**
* CSI Ps b Repeat the preceding graphic character Ps times (REP).
* \x9b1b
* */
static repeatThePrecedingGraphicCharacter(count) {
return `${CSI}${count}b`;
}
/**
* CSI Pm d Line Position Absolute [row] (default = [1,column]) (VPA).
* \x9b4d
* */
static linePositionAbsolute(count) {
return `${CSI}${count}d`;
}
/**
* CSI Pm e Line Position Relative [rows] (default = [row+1,column])
* \x9b1e
* */
static linePositionRelative(count) {
return `${CSI}${count}e`;
}
/**
* CSI Ps ; Ps f Horizontal and Vertical Position [row;column] (default =
* [1,1])
* \x9b3;5f
* */
static horizontalandVerticalPosition(row, column) {
return `${CSI}${row};${column}f`;
}
/**
* CSI Ps g Tab Clear (TBC).
* \x9b3g
* */
/**
* CSI Pm h Set Mode (SM).
* \x9b4h
* */
static setMode(mode, ...additionalModes) {
const modes = [mode, ...(additionalModes ?? [])];
return `${CSI}${modes.join(";")}h`;
}
/**
* CSI ? Pm h DEC Private Mode Set (DECSET).
* */
/**
* CSI Pm i Media Copy (MC). */
/**
* CSI ? Pm i */
/**
* CSI Pm l Reset Mode (RM).
* \x9b4l
* */
static resetMode(mode, ...additionalModes) {
const modes = [mode, ...(additionalModes ?? [])];
return `${CSI}${modes.join(";")}l`;
}
/**
* CSI ? Pm l */
/**
* CSI Pm m Character Attributes (SGR).
* \x9b31m
* */
static characterAttributes(firstAttribute, ...additionalAttributes) {
const chars = [
firstAttribute,
...(additionalAttributes ?? []),
];
return `${CSI}${chars.join(';')}m`;
}
}
export var KindOfEraseInDisplay;
(function (KindOfEraseInDisplay) {
KindOfEraseInDisplay[KindOfEraseInDisplay["Below"] = 0] = "Below";
KindOfEraseInDisplay[KindOfEraseInDisplay["Above"] = 1] = "Above";
KindOfEraseInDisplay[KindOfEraseInDisplay["All"] = 2] = "All";
KindOfEraseInDisplay[KindOfEraseInDisplay["SavedLines"] = 3] = "SavedLines";
})(KindOfEraseInDisplay || (KindOfEraseInDisplay = {}));
export var KindOfEraseInLine;
(function (KindOfEraseInLine) {
KindOfEraseInLine[KindOfEraseInLine["Right"] = 0] = "Right";
KindOfEraseInLine[KindOfEraseInLine["Left"] = 1] = "Left";
KindOfEraseInLine[KindOfEraseInLine["All"] = 2] = "All";
})(KindOfEraseInLine || (KindOfEraseInLine = {}));
export var KindOfTabClear;
(function (KindOfTabClear) {
KindOfTabClear[KindOfTabClear["ClearCurrentColumn"] = 0] = "ClearCurrentColumn";
KindOfTabClear[KindOfTabClear["ClearAll"] = 3] = "ClearAll";
})(KindOfTabClear || (KindOfTabClear = {}));
export var KindOfSetMode;
(function (KindOfSetMode) {
KindOfSetMode[KindOfSetMode["KeyboardActionMode"] = 2] = "KeyboardActionMode";
KindOfSetMode[KindOfSetMode["InsertMode"] = 4] = "InsertMode";
KindOfSetMode[KindOfSetMode["SendReceive"] = 12] = "SendReceive";
KindOfSetMode[KindOfSetMode["AutomaticNewline"] = 20] = "AutomaticNewline";
})(KindOfSetMode || (KindOfSetMode = {}));
export var KindOfResetMode;
(function (KindOfResetMode) {
KindOfResetMode[KindOfResetMode["KeyboardActionMode"] = 2] = "KeyboardActionMode";
KindOfResetMode[KindOfResetMode["ReplaceMode"] = 4] = "ReplaceMode";
KindOfResetMode[KindOfResetMode["SendReceive"] = 12] = "SendReceive";
KindOfResetMode[KindOfResetMode["NormalNewline"] = 20] = "NormalNewline";
})(KindOfResetMode || (KindOfResetMode = {}));
export var KindOfCharacterAttributes;
(function (KindOfCharacterAttributes) {
KindOfCharacterAttributes[KindOfCharacterAttributes["Normal"] = 0] = "Normal";
KindOfCharacterAttributes[KindOfCharacterAttributes["Bold"] = 1] = "Bold";
KindOfCharacterAttributes[KindOfCharacterAttributes["Faint"] = 2] = "Faint";
KindOfCharacterAttributes[KindOfCharacterAttributes["Italicized"] = 3] = "Italicized";
KindOfCharacterAttributes[KindOfCharacterAttributes["Underlined"] = 4] = "Underlined";
KindOfCharacterAttributes[KindOfCharacterAttributes["Blink"] = 5] = "Blink";
KindOfCharacterAttributes[KindOfCharacterAttributes["Inverse"] = 7] = "Inverse";
KindOfCharacterAttributes[KindOfCharacterAttributes["Invisible"] = 8] = "Invisible";
KindOfCharacterAttributes[KindOfCharacterAttributes["CrossedOutcharacters"] = 9] = "CrossedOutcharacters";
KindOfCharacterAttributes[KindOfCharacterAttributes["DoublyUnderlined"] = 21] = "DoublyUnderlined";
KindOfCharacterAttributes[KindOfCharacterAttributes["NormalNeitherBoldNorFaint"] = 22] = "NormalNeitherBoldNorFaint";
KindOfCharacterAttributes[KindOfCharacterAttributes["Notitalicized"] = 23] = "Notitalicized";
KindOfCharacterAttributes[KindOfCharacterAttributes["Notunderlined"] = 24] = "Notunderlined";
KindOfCharacterAttributes[KindOfCharacterAttributes["Steady"] = 25] = "Steady";
KindOfCharacterAttributes[KindOfCharacterAttributes["Positive"] = 27] = "Positive";
KindOfCharacterAttributes[KindOfCharacterAttributes["Visible"] = 28] = "Visible";
KindOfCharacterAttributes[KindOfCharacterAttributes["NotcrossedOut"] = 29] = "NotcrossedOut";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoBlack"] = 30] = "SetforegroundcolortoBlack";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoRed"] = 31] = "SetforegroundcolortoRed";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoGreen"] = 32] = "SetforegroundcolortoGreen";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoYellow"] = 33] = "SetforegroundcolortoYellow";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoBlue"] = 34] = "SetforegroundcolortoBlue";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoMagenta"] = 35] = "SetforegroundcolortoMagenta";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoCyan"] = 36] = "SetforegroundcolortoCyan";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoWhite"] = 37] = "SetforegroundcolortoWhite";
KindOfCharacterAttributes[KindOfCharacterAttributes["Setforegroundcolortodefault"] = 39] = "Setforegroundcolortodefault";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoBlack"] = 40] = "SetbackgroundcolortoBlack";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoRed"] = 41] = "SetbackgroundcolortoRed";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoGreen"] = 42] = "SetbackgroundcolortoGreen";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoYellow"] = 43] = "SetbackgroundcolortoYellow";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoBlue"] = 44] = "SetbackgroundcolortoBlue";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoMagenta"] = 45] = "SetbackgroundcolortoMagenta";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoCyan"] = 46] = "SetbackgroundcolortoCyan";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoWhite"] = 47] = "SetbackgroundcolortoWhite";
KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoDefault"] = 49] = "SetbackgroundcolortoDefault";
})(KindOfCharacterAttributes || (KindOfCharacterAttributes = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLXVzaW5nLWNzaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRlcm1pbmFsL3NyYy9saWIvZnVuY3Rpb25zLXVzaW5nLWNzaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBRWpCLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O1NBR0s7SUFDTCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWE7UUFDOUIsT0FBTyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBQ0Q7c0JBQ2tCO0lBQ2xCOztnQkFFWTtJQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBYTtRQUMzQixPQUFPLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFDRDtzQkFDa0I7SUFDbEI7O2dCQUVZO0lBQ1osTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQzdCLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUNEOztnQkFFWTtJQUNaLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBYTtRQUNoQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFDRDs7Z0JBRVk7SUFDWixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWE7UUFDakMsT0FBTyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBQ0Q7OztTQUdLO0lBQ0wsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUNEOzs7VUFHTTtJQUNOLE1BQU0sQ0FBQyxtQkFB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YyxDQUFBO0lBQ2QsMkVBQVMsQ0FBQTtJQUNULCtFQUFXLENBQUE7SUFDWCxtRkFBYSxDQUFBO0lBQ2IseUdBQXdCLENBQUE7SUFDeEIsa0dBQXFCLENBQUE7SUFDckIsb0hBQThCLENBQUE7SUFDOUIsNEZBQWtCLENBQUE7SUFDbEIsNEZBQWtCLENBQUE7SUFDbEIsOEVBQVcsQ0FBQTtJQUNYLGtGQUFhLENBQUE7SUFDYixnRkFBWSxDQUFBO0lBQ1osNEZBQWtCLENBQUE7SUFDbEIsb0hBQThCLENBQUE7SUFDOUIsZ0hBQTRCLENBQUE7SUFDNUIsb0hBQThCLENBQUE7SUFDOUIsc0hBQStCLENBQUE7SUFDL0Isa0hBQTZCLENBQUE7SUFDN0Isd0hBQWdDLENBQUE7SUFDaEMsa0hBQTZCLENBQUE7SUFDN0Isb0hBQThCLENBQUE7SUFDOUIsd0hBQWdDLENBQUE7SUFDaEMsb0hBQThCLENBQUE7SUFDOUIsZ0hBQTRCLENBQUE7SUFDNUIsb0hBQThCLENBQUE7SUFDOUIsc0hBQStCLENBQUE7SUFDL0Isa0hBQTZCLENBQUE7SUFDN0Isd0hBQWdDLENBQUE7SUFDaEMsa0hBQTZCLENBQUE7SUFDN0Isb0hBQThCLENBQUE7SUFDOUIsd0hBQWdDLENBQUE7QUFDbEMsQ0FBQyxFQXBDVyx5QkFBeUIsS0FBekIseUJBQXlCLFFBb0NwQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIEl0IGlzIGEgQ1NJIHNlcXVlbmNlcyBnZW5lcmF0b3JcbiAqIGh0dHBzOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQveHRlcm0vY3Rsc2Vxcy9jdGxzZXFzLmh0bWwjaDItRnVuY3Rpb25zLXVzaW5nLUNTSS1fLW9yZGVyZWQtYnktdGhlLWZpbmFsLWNoYXJhY3Rlcl9zX1xuICovXG5sZXQgQ1NJID0gJ1xceDliJztcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uc1VzaW5nQ1NJIHtcbiAgc3RhdGljIGdldCBDU0koKSB7XG4gICAgcmV0dXJuIENTSTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ1NJIFBzIEAgIEluc2VydCBQcyAoQmxhbmspIENoYXJhY3RlcihzKSAoZGVmYXVsdCA9IDEpIChJQ0gpLlxuICAgKlxuICAgKiAqL1xuICBzdGF0aWMgaW5zZXJ0QmxhbmsoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1AYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBTUCBAICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIEEgIEN1cnNvciBVcCBQcyBUaW1lcyAoZGVmYXVsdCA9IDEpIChDVVUpLlxuICAgKiBcXHg5YjNBICovXG4gIHN0YXRpYyBjdXJzb3JVcChjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fUFgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIFNQIEEgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgQiAgQ3Vyc29yIERvd24gUHMgVGltZXMgKGRlZmF1bHQgPSAxKSAoQ1VEKS5cbiAgICogXFx4OWIzQiAqL1xuICBzdGF0aWMgY3Vyc29yRG93bihjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fUJgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIEMgIEN1cnNvciBGb3J3YXJkIFBzIFRpbWVzIChkZWZhdWx0ID0gMSkgKENVRikuXG4gICAqIFxceDliM0MgKi9cbiAgc3RhdGljIGN1cnNvckZvcndhcmQoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1DYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBEICBDdXJzb3IgQmFja3dhcmQgUHMgVGltZXMgKGRlZmF1bHQgPSAxKSAoQ1VCKS5cbiAgICogXFx4OWIzRCAqL1xuICBzdGF0aWMgY3Vyc29yQmFja3dhcmQoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1EYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBFICBDdXJzb3IgTmV4dCBMaW5lIFBzIFRpbWVzIChkZWZhdWx0ID0gMSkgKENOTCkuXG4gICAqIFxceDliM0VcbiAgICogKi9cbiAgc3RhdGljIGN1cnNvck5leHRMaW5lKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9RWA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgRiAgQ3Vyc29yIFByZWNlZGluZyBMaW5lIFBzIFRpbWVzIChkZWZhdWx0ID0gMSkgKENQTCkuXG4gICAqIFxceDliM0ZcbiAgICogICovXG4gIHN0YXRpYyBjdXJzb3JQcmVjZWRpbmdMaW5lKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9RmA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgRyAgQ3Vyc29yIENoYXJhY3RlciBBYnNvbHV0ZSAgW2NvbHVtbl0gKGRlZmF1bHQgPSBbcm93LDFdKSAoQ0hBKS5cbiAgICogIFxceDliOUdcbiAgICogICovXG4gIHN0YXRpYyBjdXJzb3JDb2x1bW4oY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1HYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyA7IFBzIEggIEN1cnNvciBQb3NpdGlvbiBbcm93O2NvbHVtbl0gKGRlZmF1bHQgPSBbMSwxXSkgKENVUCkuXG4gICAqIFxceDliMjsySFxuICAgKiAqL1xuICBzdGF0aWMgY3Vyc29yUG9zaXRpb24ocm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke3Jvd307JHtjb2x9SGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgSSAgQ3Vyc29yIEZvcndhcmQgVGFidWxhdGlvbiBQcyB0YWIgc3RvcHMgKGRlZmF1bHQgPSAxKSAoQ0hUKS4gKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgSiAgRXJhc2UgaW4gRGlzcGxheSAoRUQpLCBWVDEwMC5cbiAgICogICAgICBQcyA9IDAgIC0+IEVyYXNlIEJlbG93IChkZWZhdWx0KS5cbiAgICogICAgICBQcyA9IDEgIC0+IEVyYXNlIEFib3ZlLlxuICAgKiAgICAgIFBzID0gMiAgLT4gRXJhc2UgQWxsLlxuICAgKiAgICAgIFBzID0gMyAgLT4gRXJhc2UgU2F2ZWQgTGluZXMgKHh0ZXJtKS5cbiAgICogXFx4OWIySlxuICAgKiAgKi9cbiAgc3RhdGljIGVyYXNlSW5EaXNwbGF5KGNhdGVnb3J5OiBLaW5kT2ZFcmFzZUluRGlzcGxheSkge1xuICAgIHJldHVybiBgJHtDU0l9JHtjYXRlZ29yeX1KYDtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ1NJID8gUHMgSlxuICAgKiAgRXJhc2UgaW4gRGlzcGxheSAoREVDU0VEKSwgVlQyMjAuXG4gICAqICAgIFBzID0gMCAgLT4gU2VsZWN0aXZlIEVyYXNlIEJlbG93IChkZWZhdWx0KS5cbiAgICogICAgUHMgPSAxICAtPiBTZWxlY3RpdmUgRXJhc2UgQWJvdmUuXG4gICAqICAgIFBzID0gMiAgLT4gU2VsZWN0aXZlIEVyYXNlIEFsbC5cbiAgICogICAgUHMgPSAzICAtPiBTZWxlY3RpdmUgRXJhc2UgU2F2ZWQgTGluZXMgKHh0ZXJtKS5cbiAgICogXFx4OWI/MkpcbiAgICogKi9cbiAgc3RhdGljIGVyYXNlU2VsZWN0aXZlVGhpbmdzSW5EaXNwbGF5KGNhdGVnb3J5OiBLaW5kT2ZFcmFzZUluRGlzcGxheSkge1xuICAgIHJldHVybiBgJHtDU0l9PyR7Y2F0ZWdvcnl9SmA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgS1xuICAgKiAgIEVyYXNlIGluIExpbmUgKEVMKSwgVlQxMDAuXG4gICAqICAgICBQcyA9IDAgIC0+IEVyYXNlIHRvIFJpZ2h0IChkZWZhdWx0KS5cbiAgICogICAgIFBzID0gMSAgLT4gRXJhc2UgdG8gTGVmdC5cbiAgICogICAgIFBzID0gMiAgLT4gRXJhc2UgQWxsLlxuICAgKiBcXHg5Yj8xS1xuICAgKiAqL1xuICBzdGF0aWMgZXJhc2VJbkxpbmUoY2F0ZWdvcnk6IEtpbmRPZkVyYXNlSW5MaW5lKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NhdGVnb3J5fUtgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJID8gUHMgS1xuICAgKiAgICBFcmFzZSBpbiBMaW5lIChERUNTRUwpLCBWVDIyMC5cbiAgICogICAgICBQcyA9IDAgIC0+IFNlbGVjdGl2ZSBFcmFzZSB0byBSaWdodCAoZGVmYXVsdCkuXG4gICAqICAgICAgUHMgPSAxICAtPiBTZWxlY3RpdmUgRXJhc2UgdG8gTGVmdC5cbiAgICogICAgICBQcyA9IDIgIC0+IFNlbGVjdGl2ZSBFcmFzZSBBbGwuXG4gICAqIFxceDliPzFLXG4gICAqICovXG4gIHN0YXRpYyBlcmFzZVNlbGVjdGl2ZVRoaW5nc0luTGluZShjYXRlZ29yeTogS2luZE9mRXJhc2VJbkxpbmUpIHtcbiAgICByZXR1cm4gYCR7Q1NJfT8ke2NhdGVnb3J5fUtgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIEwgIEluc2VydCBQcyBMaW5lKHMpIChkZWZhdWx0ID0gMSkgKElMKS5cbiAgICogXFx4OWIyTFxuICAgKiAgKi9cbiAgc3RhdGljIGluc2VydExpbmVzKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9TGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgTSAgRGVsZXRlIFBzIExpbmUocykgKGRlZmF1bHQgPSAxKSAoREwpLlxuICAgKiBcXHg5YjJNXG4gICAqICAqL1xuICBzdGF0aWMgZGVsZXRlTGluZXMoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1NYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBQICBEZWxldGUgUHMgQ2hhcmFjdGVyKHMpIChkZWZhdWx0ID0gMSkgKERDSCkuXG4gICAqIFxceDliMlBcbiAgICogICovXG4gIHN0YXRpYyBkZWxldGVDaGFyYWN0ZXIoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1QYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBTICBTY3JvbGwgdXAgUHMgbGluZXMgKGRlZmF1bHQgPSAxKSAoU1UpLCBWVDQyMCwgRUNNQS00OC5cbiAgICogXFx4OWIyU1xuICAgKiAgKi9cbiAgc3RhdGljIHNjcm9sbFVwTGluZXMoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1TYDtcbiAgfVxuICAvKipcbiAgICogIENTSSA/IFBpIDsgUGEgOyBQdiBTICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIFQgIFNjcm9sbCBkb3duIFBzIGxpbmVzIChkZWZhdWx0ID0gMSkgKFNEKSwgVlQ0MjAuXG4gICAqIFxceDliMlRcbiAgICogKi9cbiAgc3RhdGljIHNjcm9sbERvd25MaW5lcyhjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fVRgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgOyBQcyA7IFBzIDsgUHMgVCAqL1xuICAvKipcbiAgICogIENTSSA+IFBzIDsgUHMgVCAqL1xuICAvKipcbiAgICogIENTSSBQcyBYICBFcmFzZSBQcyBDaGFyYWN0ZXIocykgKGRlZmF1bHQgPSAxKSAoRUNIKS5cbiAgICogXFx4OWIyWFxuICAgKiAgKi9cbiAgc3RhdGljIGVyYXNlQ2hhcmFjdGVycyhjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fVhgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIFogIEN1cnNvciBCYWNrd2FyZCBUYWJ1bGF0aW9uIFBzIHRhYiBzdG9wcyAoZGVmYXVsdCA9IDEpIChDQlQpLlxuICAgKiBcXHg5YjJaXG4gICAqICovXG4gIHN0YXRpYyBjdXJzb3JCYWNrd2FyZFRhYnVsYXRpb25Qc3RhYnN0b3BzKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9WmA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgXiAgU2Nyb2xsIGRvd24gUHMgbGluZXMgKGRlZmF1bHQgPSAxKSAoU0QpLCBFQ01BLTQ4LlxuICAgKiBcXHg5YjJeXG4gICAqICovXG4gIHN0YXRpYyBzY3JvbGxkb3duUHNsaW5lcyhjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fV5gO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIGAgIENoYXJhY3RlciBQb3NpdGlvbiBBYnNvbHV0ZSAgW2NvbHVtbl0gKGRlZmF1bHQgPSBbcm93LDFdKVxuICAgKiBcXHg5YjFgICovXG4gIHN0YXRpYyBjaGFyYWN0ZXJQb3NpdGlvbkFic29sdXRlKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9XFxgYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBhICBDaGFyYWN0ZXIgUG9zaXRpb24gUmVsYXRpdmUgIFtjb2x1bW5zXSAoZGVmYXVsdCA9IFtyb3csY29sKzFdKVxuICAgKiBcXHg5YjFhICovXG4gIHN0YXRpYyBjaGFyYWN0ZXJQb3NpdGlvblJlbGF0aXZlKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9YWA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgYiAgUmVwZWF0IHRoZSBwcmVjZWRpbmcgZ3JhcGhpYyBjaGFyYWN0ZXIgUHMgdGltZXMgKFJFUCkuXG4gICAqIFxceDliMWJcbiAgICogKi9cbiAgc3RhdGljIHJlcGVhdFRoZVByZWNlZGluZ0dyYXBoaWNDaGFyYWN0ZXIoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1iYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQbSBkICBMaW5lIFBvc2l0aW9uIEFic29sdXRlICBbcm93XSAoZGVmYXVsdCA9IFsxLGNvbHVtbl0pIChWUEEpLiBcbiAgICogXFx4OWI0ZFxuICAgKiAqL1xuICBzdGF0aWMgbGluZVBvc2l0aW9uQWJzb2x1dGUoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1kYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQbSBlICBMaW5lIFBvc2l0aW9uIFJlbGF0aXZlICBbcm93c10gKGRlZmF1bHQgPSBbcm93KzEsY29sdW1uXSkgXG4gICAqIFxceDliMWVcbiAgICogKi9cbiAgc3RhdGljIGxpbmVQb3NpdGlvblJlbGF0aXZlKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9ZWA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgOyBQcyBmICBIb3Jpem9udGFsIGFuZCBWZXJ0aWNhbCBQb3NpdGlvbiBbcm93O2NvbHVtbl0gKGRlZmF1bHQgPVxuICAgKiAgICAgICBbMSwxXSkgXG4gICAqIFxceDliMzs1ZlxuICAgKiAqL1xuICBzdGF0aWMgaG9yaXpvbnRhbGFuZFZlcnRpY2FsUG9zaXRpb24ocm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke3Jvd307JHtjb2x1bW59ZmA7XG4gIH1cblxuICAvKipcbiAgICogIENTSSBQcyBnICBUYWIgQ2xlYXIgKFRCQykuIFxuICAgKiBcXHg5YjNnXG4gICAqICovXG4gIC8qKlxuICAgKiAgQ1NJIFBtIGggIFNldCBNb2RlIChTTSkuXG4gICAqICBcXHg5YjRoXG4gICAqICAqL1xuICBzdGF0aWMgc2V0TW9kZShtb2RlOiBLaW5kT2ZTZXRNb2RlLCAuLi5hZGRpdGlvbmFsTW9kZXM6IEtpbmRPZlNldE1vZGVbXSkge1xuICAgIGNvbnN0IG1vZGVzID0gW21vZGUsIC4uLihhZGRpdGlvbmFsTW9kZXMgPz8gW10pXTtcbiAgICByZXR1cm4gYCR7Q1NJfSR7bW9kZXMuam9pbihcIjtcIil9aGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgPyBQbSBoICBERUMgUHJpdmF0ZSBNb2RlIFNldCAoREVDU0VUKS5cbiAgICogKi9cbiAgLyoqXG4gICAqICBDU0kgUG0gaSAgTWVkaWEgQ29weSAoTUMpLiAqL1xuICAvKipcbiAgICogIENTSSA/IFBtIGkgKi9cbiAgLyoqXG4gICAqICBDU0kgUG0gbCAgUmVzZXQgTW9kZSAoUk0pLiBcbiAgICogXFx4OWI0bFxuICAgKiAqL1xuICBzdGF0aWMgcmVzZXRNb2RlKG1vZGU6IEtpbmRPZlJlc2V0TW9kZSwgLi4uYWRkaXRpb25hbE1vZGVzOiBLaW5kT2ZSZXNldE1vZGVbXSkge1xuICAgIGNvbnN0IG1vZGVzID0gW21vZGUsIC4uLihhZGRpdGlvbmFsTW9kZXMgPz8gW10pXTtcbiAgICByZXR1cm4gYCR7Q1NJfSR7bW9kZXMuam9pbihcIjtcIil9bGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgPyBQbSBsICovXG4gIC8qKlxuICAgKiAgQ1NJIFBtIG0gIENoYXJhY3RlciBBdHRyaWJ1dGVzIChTR1IpLlxuICAgKiBcXHg5YjMxbVxuICAgKiAqL1xuICBzdGF0aWMgY2hhcmFjdGVyQXR0cmlidXRlcyhcbiAgICBmaXJzdEF0dHJpYnV0ZTogS2luZE9mQ2hhcmFjdGVyQXR0cmlidXRlcyxcbiAgICAuLi5hZGRpdGlvbmFsQXR0cmlidXRlczogS2luZE9mQ2hhcmFjdGVyQXR0cmlidXRlc1tdXG4gICkge1xuICAgIGNvbnN0IGNoYXJzOiBLaW5kT2ZDaGFyYWN0ZXJBdHRyaWJ1dGVzW10gPSBbXG4gICAgICBmaXJzdEF0dHJpYnV0ZSxcbiAgICAgIC4uLihhZGRpdGlvbmFsQXR0cmlidXRlcyA/PyBbXSksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y2hhcnMuam9pbignOycpfW1gO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJID4gUHMgOyBQcyBtICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIG4gIERldmljZSBTdGF0dXMgUmVwb3J0IChEU1IpLiAqL1xuICAvKipcbiAgICogIENTSSA+IFBzIG4gKi9cbiAgLyoqXG4gICAqICBDU0kgPyBQcyBuICovXG4gIC8qKlxuICAgKiAgQ1NJID4gUHMgcCAqL1xuICAvKipcbiAgICogIENTSSAhIHAgICBTb2Z0IHRlcm1pbmFsIHJlc2V0IChERUNTVFIpLCBWVDIyMCBhbmQgdXAuICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgXCIgcCAqL1xuICAvKipcbiAgICogIENTSSBQcyAkIHAgKi9cbiAgLyoqXG4gICAqICBDU0kgPyBQcyAkIHAgKi9cbiAgLyoqXG4gICAqICBDU0kgIyBwICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgIyBwICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIHEgIExvYWQgTEVEcyAoREVDTEwpLCBWVDEwMC4gKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgU1AgcSAqL1xuICAvKipcbiAgICogIENTSSBQcyBcIiBxICovXG4gIC8qKlxuICAgKiAgQ1NJICMgcSAgIFBvcCB2aWRlbyBhdHRyaWJ1dGVzIGZyb20gc3RhY2sgKFhUUE9QU0dSKSwgeHRlcm0uICBUaGlzIGlzIGFuICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgciAqL1xuICAvKipcbiAgICogIENTSSA/IFBtIHIgKi9cbiAgLyoqXG4gICAqICBDU0kgUHQgOyBQbCA7IFBiIDsgUHIgOyBQcyAkIHIgKi9cbiAgLyoqXG4gICAqICBDU0kgcyAgICAgU2F2ZSBjdXJzb3IsIGF2YWlsYWJsZSBvbmx5IHdoZW4gREVDTFJNTSBpcyBkaXNhYmxlZCAoU0NPU0MsICovXG4gIC8qKlxuICAgKiAgQ1NJIFBsIDsgUHIgcyAqL1xuICAvKipcbiAgICogIENTSSA/IFBtIHMgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgOyBQcyA7IFBzIHQgKi9cbiAgLyoqXG4gICAqICBDU0kgPiBQcyA7IFBzIHQgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgU1AgdCAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciA7IFBzICQgdCAqL1xuICAvKipcbiAgICogIENTSSB1ICAgICBSZXN0b3JlIGN1cnNvciAoU0NPUkMsIGFsc28gQU5TSS5TWVMpLiAqL1xuICAvKipcbiAgICogIENTSSBQcyBTUCB1ICovXG4gIC8qKlxuICAgKiAgQ1NJIFB0IDsgUGwgOyBQYiA7IFByIDsgUHAgOyBQdCA7IFBsIDsgUHAgJCB2ICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzICQgdyAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciAnIHcgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgeCAgUmVxdWVzdCBUZXJtaW5hbCBQYXJhbWV0ZXJzIChERUNSRVFUUEFSTSkuICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzICogeCAqL1xuICAvKipcbiAgICogIENTSSBQYyA7IFB0IDsgUGwgOyBQYiA7IFByICQgeCAqL1xuICAvKipcbiAgICogIENTSSBQcyAjIHkgKi9cbiAgLyoqXG4gICAqICBDU0kgUGkgOyBQZyA7IFB0IDsgUGwgOyBQYiA7IFByICogeSAqL1xuICAvKipcbiAgICogIENTSSBQcyA7IFB1ICcgeiAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciAkIHogKi9cbiAgLyoqXG4gICAqICBDU0kgUG0gJyB7ICovXG4gIC8qKlxuICAgKiAgQ1NJICMgeyAqL1xuICAvKipcbiAgICogIENTSSBQcyA7IFBzICMgeyAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciAkIHsgKi9cbiAgLyoqXG4gICAqICBDU0kgUHQgOyBQbCA7IFBiIDsgUHIgIyB8ICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzICQgfCAqL1xuICAvKipcbiAgICogIENTSSBQcyAnIHwgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgKiB8ICovXG4gIC8qKlxuICAgKiAgQ1NJICMgfSAgIFBvcCB2aWRlbyBhdHRyaWJ1dGVzIGZyb20gc3RhY2sgKFhUUE9QU0dSKSwgeHRlcm0uICBQb3BwaW5nICovXG4gIC8qKlxuICAgKiAgQ1NJIFBtICcgfSAqL1xuICAvKipcbiAgICogIENTSSBQbSAnIH4gKi9cbn1cbmV4cG9ydCBlbnVtIEtpbmRPZkVyYXNlSW5EaXNwbGF5IHtcbiAgQmVsb3cgPSAwLFxuICBBYm92ZSA9IDEsXG4gIEFsbCA9IDIsXG4gIFNhdmVkTGluZXMgPSAzLFxufVxuZXhwb3J0IGVudW0gS2luZE9mRXJhc2VJbkxpbmUge1xuICBSaWdodCA9IDAsXG4gIExlZnQgPSAxLFxuICBBbGwgPSAyLFxufVxuXG5leHBvcnQgZW51bSBLaW5kT2ZUYWJDbGVhcntcbiAgICBDbGVhckN1cnJlbnRDb2x1bW4gPSAwLFxuICAgIENsZWFyQWxsID0gM1xufVxuXG5cbmV4cG9ydCBlbnVtIEtpbmRPZlNldE1vZGV7XG4gICAgS2V5Ym9hcmRBY3Rpb25Nb2RlID0gMixcbiAgICBJbnNlcnRNb2RlID0gNCxcbiAgICBTZW5kUmVjZWl2ZSA9IDEyLFxuICAgIEF1dG9tYXRpY05ld2xpbmUgPSAyMFxufVxuZXhwb3J0IGVudW0gS2luZE9mUmVzZXRNb2Rle1xuICAgIEtleWJvYXJkQWN0aW9uTW9kZSA9IDIsXG4gICAgUmVwbGFjZU1vZGUgPSA0LFxuICAgIFNlbmRSZWNlaXZlID0gMTIsXG4gICAgTm9ybWFsTmV3bGluZSA9IDIwXG59XG5leHBvcnQgZW51bSBLaW5kT2ZDaGFyYWN0ZXJBdHRyaWJ1dGVzIHtcbiAgTm9ybWFsID0gMCxcbiAgQm9sZCA9IDEsXG4gIEZhaW50ID0gMixcbiAgSXRhbGljaXplZCA9IDMsXG4gIFVuZGVybGluZWQgPSA0LFxuICBCbGluayA9IDUsXG4gIEludmVyc2UgPSA3LFxuICBJbnZpc2libGUgPSA4LFxuICBDcm9zc2VkT3V0Y2hhcmFjdGVycyA9IDksXG4gIERvdWJseVVuZGVybGluZWQgPSAyMSxcbiAgTm9ybWFsTmVpdGhlckJvbGROb3JGYWludCA9IDIyLFxuICBOb3RpdGFsaWNpemVkID0gMjMsXG4gIE5vdHVuZGVybGluZWQgPSAyNCxcbiAgU3RlYWR5ID0gMjUsXG4gIFBvc2l0aXZlID0gMjcsXG4gIFZpc2libGUgPSAyOCxcbiAgTm90Y3Jvc3NlZE91dCA9IDI5LFxuICBTZXRmb3JlZ3JvdW5kY29sb3J0b0JsYWNrID0gMzAsXG4gIFNldGZvcmVncm91bmRjb2xvcnRvUmVkID0gMzEsXG4gIFNldGZvcmVncm91bmRjb2xvcnRvR3JlZW4gPSAzMixcbiAgU2V0Zm9yZWdyb3VuZGNvbG9ydG9ZZWxsb3cgPSAzMyxcbiAgU2V0Zm9yZWdyb3VuZGNvbG9ydG9CbHVlID0gMzQsXG4gIFNldGZvcmVncm91bmRjb2xvcnRvTWFnZW50YSA9IDM1LFxuICBTZXRmb3JlZ3JvdW5kY29sb3J0b0N5YW4gPSAzNixcbiAgU2V0Zm9yZWdyb3VuZGNvbG9ydG9XaGl0ZSA9IDM3LFxuICBTZXRmb3JlZ3JvdW5kY29sb3J0b2RlZmF1bHQgPSAzOSxcbiAgU2V0YmFja2dyb3VuZGNvbG9ydG9CbGFjayA9IDQwLFxuICBTZXRiYWNrZ3JvdW5kY29sb3J0b1JlZCA9IDQxLFxuICBTZXRiYWNrZ3JvdW5kY29sb3J0b0dyZWVuID0gNDIsXG4gIFNldGJhY2tncm91bmRjb2xvcnRvWWVsbG93ID0gNDMsXG4gIFNldGJhY2tncm91bmRjb2xvcnRvQmx1ZSA9IDQ0LFxuICBTZXRiYWNrZ3JvdW5kY29sb3J0b01hZ2VudGEgPSA0NSxcbiAgU2V0YmFja2dyb3VuZGNvbG9ydG9DeWFuID0gNDYsXG4gIFNldGJhY2tncm91bmRjb2xvcnRvV2hpdGUgPSA0NyxcbiAgU2V0YmFja2dyb3VuZGNvbG9ydG9EZWZhdWx0ID0gNDksXG59XG4iXX0=