@eui/components 14.0.2 → 14.0.3-snapshot-1657872717239
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/docs/components/EuiPopoverComponent.html +47 -1
- package/docs/components/UxEditorComponent.html +11 -1
- package/docs/dependencies.html +1 -1
- package/docs/js/menu-wc.js +6 -6
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/esm2020/eui-autocomplete/eui-autocomplete.component.mjs +2 -2
- package/esm2020/eui-popover/eui-popover.component.mjs +48 -27
- package/esm2020/legacy/ux-editor/ux-editor.component.mjs +49 -19
- package/eui-popover/eui-popover.component.d.ts +14 -0
- package/eui-popover/eui-popover.component.d.ts.map +1 -1
- package/fesm2015/eui-components-eui-autocomplete.mjs +2 -2
- package/fesm2015/eui-components-eui-autocomplete.mjs.map +1 -1
- package/fesm2015/eui-components-eui-popover.mjs +47 -26
- package/fesm2015/eui-components-eui-popover.mjs.map +1 -1
- package/fesm2015/eui-components-legacy-ux-editor.mjs +48 -18
- package/fesm2015/eui-components-legacy-ux-editor.mjs.map +1 -1
- package/fesm2020/eui-components-eui-autocomplete.mjs +2 -2
- package/fesm2020/eui-components-eui-autocomplete.mjs.map +1 -1
- package/fesm2020/eui-components-eui-popover.mjs +47 -26
- package/fesm2020/eui-components-eui-popover.mjs.map +1 -1
- package/fesm2020/eui-components-legacy-ux-editor.mjs +48 -18
- package/fesm2020/eui-components-legacy-ux-editor.mjs.map +1 -1
- package/legacy/ux-editor/ux-editor.component.d.ts +2 -0
- package/legacy/ux-editor/ux-editor.component.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -92,6 +92,9 @@ export class UxEditorComponent {
|
|
|
92
92
|
this.sanitize = true; // Security: always set sanitizing to true!
|
|
93
93
|
this.isEnabledOnFocusBackup = false; // backup & restore of the isEnabledOnFocus original option
|
|
94
94
|
this.displayAbout = false;
|
|
95
|
+
// Counters
|
|
96
|
+
this.charactersCounter = 0;
|
|
97
|
+
this.wordsCounter = 0;
|
|
95
98
|
this.charactersLabel = 'characters';
|
|
96
99
|
this.wordsLabel = 'words';
|
|
97
100
|
this.isMaxLengthValid = true;
|
|
@@ -285,6 +288,7 @@ export class UxEditorComponent {
|
|
|
285
288
|
if (this.debug === 'log') {
|
|
286
289
|
console.log('editor-changed', event);
|
|
287
290
|
}
|
|
291
|
+
console.warn('onEditorChange() event is DEPRECATED please use onContentChange() event instead.');
|
|
288
292
|
this.onEditorChanged.emit(event);
|
|
289
293
|
this.hasEditorChanged = true; // For debugger
|
|
290
294
|
}
|
|
@@ -294,6 +298,7 @@ export class UxEditorComponent {
|
|
|
294
298
|
}
|
|
295
299
|
this.onTextChange.emit(event); // OLD KEEP! TO BE DEPRECATED
|
|
296
300
|
this.onContentChanged.emit(event);
|
|
301
|
+
this.onEditorChangedEmit(event); // Sync with editor change event since it's duplicated event
|
|
297
302
|
this.hasContentChanged = true; // For debugger
|
|
298
303
|
// Update editor's value
|
|
299
304
|
switch (this.format) {
|
|
@@ -415,30 +420,50 @@ export class UxEditorComponent {
|
|
|
415
420
|
}
|
|
416
421
|
}
|
|
417
422
|
_calculateCounters(content) {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
text = this._stripHtml(content);
|
|
423
|
-
}
|
|
424
|
-
else {
|
|
425
|
-
text = content;
|
|
426
|
-
}
|
|
423
|
+
let text;
|
|
424
|
+
if (this.format === 'html') {
|
|
425
|
+
if (content && content.length > 0 && this.quillEditor) {
|
|
426
|
+
text = this._stripHtml(content);
|
|
427
427
|
this.charactersCounter = text.length;
|
|
428
|
+
text = this._cleanHtml(content);
|
|
428
429
|
this.wordsCounter = !text ? 0 : text.trim().split(/\s+/).length;
|
|
429
430
|
}
|
|
430
431
|
else {
|
|
431
|
-
// Empty content
|
|
432
432
|
this.charactersCounter = 0;
|
|
433
433
|
this.wordsCounter = 0;
|
|
434
434
|
}
|
|
435
|
-
// Output counters (for custom toolbar usage)
|
|
436
|
-
this.getCharactersCounter.emit(this.charactersCounter);
|
|
437
|
-
this.getWordsCounter.emit(this.wordsCounter);
|
|
438
|
-
// Update maxLength & validity
|
|
439
|
-
this._refreshMaxLength();
|
|
440
435
|
}
|
|
441
|
-
|
|
436
|
+
if (this.format === 'json') {
|
|
437
|
+
if (content && content.length > 0 && this.quillEditor) {
|
|
438
|
+
text = this._stripHtml(this.quillEditor.root.innerHTML);
|
|
439
|
+
this.charactersCounter = text.length;
|
|
440
|
+
text = this._cleanHtml(this.quillEditor.root.innerHTML);
|
|
441
|
+
this.wordsCounter = !text ? 0 : text.trim().split(/\s+/).length;
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
this.charactersCounter = 0;
|
|
445
|
+
this.wordsCounter = 0;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
// Format text will be DEPRECATED in next major eUI releases (13+)
|
|
449
|
+
if (this.format === 'text') {
|
|
450
|
+
if (content && content.length > 0 && this.quillEditor) {
|
|
451
|
+
this.charactersCounter = content.length - 1;
|
|
452
|
+
this.wordsCounter = this._getWordCount(content);
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
this.charactersCounter = 0;
|
|
456
|
+
this.wordsCounter = 0;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
// Output counters (for custom toolbar usage)
|
|
460
|
+
this.getCharactersCounter.emit(this.charactersCounter);
|
|
461
|
+
this.getWordsCounter.emit(this.wordsCounter);
|
|
462
|
+
// Update maxLength & validity
|
|
463
|
+
this._refreshMaxLength();
|
|
464
|
+
}
|
|
465
|
+
_getWordCount(str) {
|
|
466
|
+
return str.trim().split(/\s+/).length;
|
|
442
467
|
}
|
|
443
468
|
_refreshMaxLength() {
|
|
444
469
|
if (this.maxLength && this.maxLength > 0) {
|
|
@@ -458,12 +483,17 @@ export class UxEditorComponent {
|
|
|
458
483
|
const regex = /(<([^>]+)>)/gm;
|
|
459
484
|
return content.replace(regex, '');
|
|
460
485
|
}
|
|
486
|
+
_cleanHtml(content) {
|
|
487
|
+
const exceptTags = /<strong>|<\/strong>|<b>|<\/b>|<i>|<\/i>|<em>|<\/em>|<s>|<\/s>|<strike>|<\/strike>|<u>|<\/u>/gm;
|
|
488
|
+
const regex = /(<([^>]+)>)/gm;
|
|
489
|
+
return content.replace(exceptTags, '').replace(regex, ' ').replace(' ', ' ');
|
|
490
|
+
}
|
|
461
491
|
}
|
|
462
492
|
/** @nocollapse */ UxEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: UxEditorComponent, deps: [{ token: forwardRef(() => UxFormGroupComponent), host: true, optional: true }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
463
|
-
/** @nocollapse */ UxEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: UxEditorComponent, selector: "ux-editor", inputs: { e2eAttr: "e2eAttr", id: "id", style: "style", styleClass: "styleClass", placeholder: "placeholder", formats: "formats", format: "format", isEnabledOnFocus: "isEnabledOnFocus", isReadOnly: "isReadOnly", isUsedNativeEditorInReadMode: "isUsedNativeEditorInReadMode", customToolbarOptions: "customToolbarOptions", theme: "theme", debug: "debug", isEditable: "isEditable", formControlName: "formControlName", feedbackTypeClass: "feedbackTypeClass", validationErrorMessage: "validationErrorMessage", tabindex: "tabindex", hasReadOnlyStyles: "hasReadOnlyStyles", isMinimalToolbar: "isMinimalToolbar", modules: "modules", maxLength: "maxLength", minLength: "minLength", isRequired: "isRequired", customToolbarPosition: "customToolbarPosition", strict: "strict", isUsedSanitizationForHtml: "isUsedSanitizationForHtml", scrollingContainer: "scrollingContainer", bounds: "bounds", customOptions: "customOptions", trackChanges: "trackChanges", preserveWhitespace: "preserveWhitespace", spellcheck: "spellcheck", showCounters: "showCounters", isImageUrl: "isImageUrl" }, outputs: { onInit: "onInit", onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", onEditorCreated: "onEditorCreated", onEditorChanged: "onEditorChanged", onContentChanged: "onContentChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", getCharactersCounter: "getCharactersCounter", getWordsCounter: "getWordsCounter" }, queries: [{ propertyName: "customEditorToolbar", first: true, predicate: i0.forwardRef(function () { return UxEditorCustomToolbarTagDirective; }), descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ux-editor-wrapper\">\n <quill-editor *ngIf=\"!isReadOnly || isUsedNativeEditorInReadMode\"\n [id]=\"generatedId\"\n class=\"ux-editor {{styleClass}}\"\n [class.ux-editor--readonly]=\"isReadOnly\"\n [class.ux-editor--focused]=\"isFocused\"\n [class.ux-editor--editable]=\"!isReadOnly\"\n [format]=\"format\"\n [formats]=\"formats\"\n [maxLength]=\"maxLength\"\n [minLength]=\"minLength\"\n [readOnly]=\"isReadOnly\"\n [required]=\"isRequired\"\n [sanitize]=\"isUsedSanitizationForHtml\"\n [modules]=\"modules\"\n [theme]=\"theme\"\n [placeholder]=\"placeholder\"\n [styles]=\"style\"\n [customToolbarPosition]=\"customToolbarPosition\"\n [preserveWhitespace]=\"preserveWhitespace\"\n [spellcheck]=\"spellcheck\"\n [formControl]=\"formControl\"\n [debug]=\"false\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n (onEditorCreated)=\"onEditorCreatedEmit($event)\"\n (onEditorChanged)=\"onEditorChangedEmit($event)\"\n (onContentChanged)=\"onContentChangedEmit($event)\"\n (onSelectionChanged)=\"onSelectionChangedEmit($event)\"\n (onFocus)=\"onFocusEmit($event)\"\n (onBlur)=\"onBlurEmit($event)\">\n\n <!-- PREDEFINED DEFAULT TOOLBAR -->\n <div *ngIf=\"!customToolbarOptions && !customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <span class=\"ql-formats\">\n <select class=\"ql-header\" title=\"Style{{crlf}}Apply an HTML tag or CSS class to the selected text\">\n <option value=\"1\">Heading 1</option>\n <option value=\"2\">Heading 2</option>\n <option value=\"3\">Heading 3</option>\n <option value=\"4\">Heading 4</option>\n <option value=\"5\">Heading 5</option>\n <option value=\"6\">Heading 6</option>\n <option selected>Normal</option>\n </select>\n </span>\n <!-- <span class=\"ql-formats\">\n <select class=\"ql-size\" title=\"Font size{{crlf}}Change the font size of the selected text\">\n <option value=\"small\">Small</option>\n <option selected>Normal</option>\n <option value=\"large\">Large</option>\n <option value=\"huge\">Huge</option>\n </select>\n </span> -->\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <select class=\"ql-font\" title=\"Font{{crlf}}Change the font face\">\n <option selected>Sans Serif</option>\n <option value=\"serif\">Serif</option>\n <option value=\"monospace\">Monospace</option>\n </select>\n </span>\n <span class=\"ql-formats\">\n <button class=\"ql-bold\" aria-label=\"Bold (Ctrl + B)\" title=\"Bold (Ctrl + B){{crlf}}Make the selected text bold\"></button>\n <button class=\"ql-italic\" aria-label=\"Italic (Ctrl + I)\" title=\"Italic (Ctrl + I){{crlf}}Italicize the selected text\"></button>\n <button class=\"ql-underline\" aria-label=\"Underline (Ctrl + U)\" title=\"Underline (Ctrl + U){{crlf}}Underline the selected text\"></button>\n <button class=\"ql-strike\" aria-label=\"Strikethrough\" title=\"Strikethrough{{crlf}}Draw a line to the middle of the selected text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-color\" aria-label=\"Font Color\" title=\"Font Color{{crlf}}Change the text color\"></select>\n <select class=\"ql-background\" aria-label=\"Text Highlight Color\" title=\"Text Highlight Color{{crlf}}Change the background color of the text\"></select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-script\" value=\"sub\" aria-label=\"Subscript\" title=\"Subscript{{crlf}}Create ssmall letters below the text baseline\"></button>\n <button class=\"ql-script\" value=\"super\" aria-label=\"Superscript\" title=\"Superscript{{crlf}}Create small letters above the line of the text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-align\" aria-label=\"Text Align\" title=\"Text Align{{crlf}}Align the text to the selected position: left (default), center, right or justify\">\n <option selected></option>\n <option value=\"center\"></option>\n <option value=\"right\"></option>\n <option value=\"justify\"></option>\n </select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-list\" value=\"ordered\" aria-label=\"Ordered List\" title=\"Numbering{{crlf}}Start an ordered list\"></button>\n <button class=\"ql-list\" value=\"bullet\" aria-label=\"Unordered List\" title=\"Bullets{{crlf}}Start a bulleted list\"></button>\n <button class=\"ql-indent\" value=\"-1\" type=\"button\" aria-label=\"Decrease Indent\" title=\"Decrease Indent{{crlf}}Decrease the indent level of the paragraph\"></button>\n <button class=\"ql-indent\" value=\"+1\" type=\"button\" aria-label=\"Increase Indent\" title=\"Increase Indent{{crlf}}Increase the indent level of the paragraph\"></button>\n </span>\n <!-- Insert group -->\n <span class=\"ql-formats\">\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-blockquote\" aria-label=\"Blockquote\" title=\"Blockquote{{crlf}}Create a quoted block of the selected text\"></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-code-block\" aria-label=\"Insert Code Block\" title=\"Insert Code Block{{crlf}}Insert a code block at the cursor row position\"></button>\n <button class=\"ql-link\" aria-label=\"Insert Link\" title=\"Insert Hyperlink (Ctrl + K){{crlf}}Create a link to a Web page, a picture, an e-mail address or a program\"></button>\n <button *ngIf=\"!isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image\" title=\"Insert Picture{{crlf}}Insert a picture from a file\"></button>\n <button *ngIf=\"isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image from URL\" title=\"Insert Picture from URL{{crlf}}Insert a picture from a remote URL\">\n <span class=\"eui-icon eui-icon-image-add\"></span></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-video\" aria-label=\"Insert Video\" title=\"Insert Video{{crlf}}Insert a video from a file\"></button>\n </span>\n <!-- Clean / Clear -->\n <span class=\"ql-formats\">\n <button class=\"ql-clean\" aria-label=\"Remove Styles\" title=\"Remove Styles{{crlf}}Remove the styles of the selected text\"></button>\n <button aria-label=\"Delete\" title=\"Delete content{{crlf}}Permanently deletes editor's contents\" (click)=\"editorDeleteContent($event)\"><span class=\"eui-icon eui-icon-delete-forever\"></span></button>\n </span>\n\n <!-- Undo/Redo -->\n <span class=\"ql-formats\">\n <button aria-label=\"Undo (Ctrl + Z)\" title=\"Undo (Ctrl + Z){{crlf}}Cancels the previous action\" (click)=\"editorUndo()\"><span class=\"eui-icon eui-icon-undo\"></span></button>\n <button aria-label=\"Redo (Ctrl + Y)\" title=\"Redo (Ctrl + Y){{crlf}}Do the next history action again\" (click)=\"editorRedo()\"><span class=\"eui-icon eui-icon-redo\"></span></button>\n </span>\n <!-- Counters -->\n <span *ngIf=\"showCounters && (format === 'html' || format === 'text')\" class=\"ql-formats\">\n <ux-editor-counters [charactersCounter]=\"charactersCounter\"\n [charactersLabel]=\"charactersLabel\"\n [wordsCounter]=\"wordsCounter\"\n [wordsLabel]=\"wordsLabel\"\n [isMaxLengthValid]=\"isMaxLengthValid\"\n aria-label=\"Counters\"\n title=\"Counters{{crlf}}Characters and words counters (stripped Html)\">\n </ux-editor-counters>\n </span>\n </div>\n\n <!-- USER CUSTOM TOOLBAR (HTML FORMAT) -->\n <div *ngIf=\"customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <ng-content select=\"uxEditorCustomToolbar\"></ng-content>\n </div>\n </quill-editor>\n\n <!-- MAXLENGTH INDICATOR -->\n <div *ngIf=\"!isReadOnly && charactersLeft > -1\" class=\"maxlength-wrapper\" [class.maxlength-wrapper--error]=\"!isMaxLengthValid\">{{ charactersLeft }}</div>\n</div>\n\n\n<!-- READONLY MODE -->\n<div *ngIf=\"isReadOnly && !isUsedNativeEditorInReadMode\" class=\"ux-editor ux-editor--readonly {{styleClass}}\" [class.ux-editor--empty]=\"!value\" tabindex=\"{{tabindex}}\" (click)=\"enableEditorOnClickFocus($event)\" (focusin)=\"enableEditorOnClickFocus($event)\">\n <ux-editor-view-html *ngIf=\"format === 'html' || format === 'text'\" [content]=\"value\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view-html>\n <ux-editor-view *ngIf=\"format === 'object' || format === 'json'\" [content]=\"value\" [format]=\"format\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view>\n</div>\n\n\n<!-- DEBUGGER -->\n<div *ngIf=\"debug\" class=\"ux-editor__debug\">\n <div class=\"ux-editor__debug-title\">UX-EDITOR debug</div>\n <div class=\"ux-editor__debug-section\">\n <strong>OPTIONS:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">id: <span class=\"eui-u-color-black\">{{generatedId}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">toolbarPosition: {{customToolbarPosition}}</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isReadOnly\" [class.ux-editor__debug-badge--off]=\"!isReadOnly\">isReadOnly</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEnabledOnFocus\" [class.ux-editor__debug-badge--off]=\"!isEnabledOnFocus\">isEnabledOnFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"preserveWhitespace\" [class.ux-editor__debug-badge--off]=\"!preserveWhitespace\">preserveWhitespace</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"spellcheck\" [class.ux-editor__debug-badge--off]=\"!spellcheck\">spellcheck</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">maxLength: <span class=\"eui-u-color-black\">{{maxLength}}</span></span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>EVENTS:</strong>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFocused\" [class.ux-editor__debug-badge--off]=\"!isFocused\">onFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isBlured\" [class.ux-editor__debug-badge--off]=\"!isBlured\">onBlur</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEditorCreated\" [class.ux-editor__debug-badge--off]=\"!isEditorCreated\">onEditorCreated</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasEditorChanged\" [class.ux-editor__debug-badge--off]=\"!hasEditorChanged\">onEditorChanged</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasContentChanged\" [class.ux-editor__debug-badge--off]=\"!hasContentChanged\">onContentChanged</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasSelectionChanged\" [class.ux-editor__debug-badge--off]=\"!hasSelectionChanged\">onSelectionChanged</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>FORM:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">controlName: <span class=\"eui-u-color-black\">{{formControlName}}</span></span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isRequired\" [class.ux-editor__debug-badge--off]=\"!isRequired\">isRequired</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFormControlValid\" [class.ux-editor__debug-badge--alert]=\"!isFormControlValid\">isFormControlValid</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">validationErrorMessage: <span class=\"eui-u-color-{{feedbackTypeClass}}\">{{formValidationErrorMessage}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--on\" [class.ux-editor__debug-badge--alert]=\"!isMaxLengthValid\">isMaxLengthValid</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>STYLE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">{{ style | json}}</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>SOURCE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">format: <span class=\"eui-u-color-black\">{{format}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">charactersLeft: <span [ngClass]=\"isMaxLengthValid ? 'eui-u-color-black' : 'eui-u-color-danger'\">{{charactersLeft}}</span></span>\n\n </div>\n <div class=\"ux-editor__debug-source\">\n <code *ngIf=\"format === 'text' || format === 'html'\">{{formControl.value}}</code>\n <code *ngIf=\"format === 'json' || format === 'object'\"><pre class=\"ux-editor__debug-source-code\">{{formControl.value | json}}</pre></code>\n </div>\n</div>\n", styles: ["/*!\n* eUI alignments & improvements for ux-editor based on (Ngx-)QuillJS Editor v1.3.7+\n*/.ux-editor-wrapper{position:relative}.ux-editor-wrapper .maxlength-wrapper{background-color:var(--eui-base-color-primary-50);border:1px solid var(--eui-base-color-primary-100);border-radius:3px;color:var(--eui-base-color-white);font-size:.75rem;padding:1px 3px;position:absolute;right:-.5rem;top:-.75rem;z-index:2}.ux-editor-wrapper .maxlength-wrapper.maxlength-wrapper--error{background-color:var(--eui-base-color-danger-75);border:1px solid var(--eui-base-color-danger-100)}.ux-editor{display:block;position:relative}.ux-editor--readonly{padding:var(--eui-base-spacing-s) 0 0 0}.ux-editor--readonly .ql-toolbar{display:none}.ux-editor--readonly .ql-container{border:none}.ux-editor--readonly .ql-editor{min-height:calc(var(--eui-base-spacing-2xl) + 2px);padding:0 var(--eui-base-spacing-m) 0 0!important}.ux-editor--readonly.ux-editor--empty .ql-container{border:none;outline:1px dashed var(--eui-base-color-grey-15)}.ux-editor--readonly.ux-editor--empty .ql-container:hover{outline:1px solid var(--eui-base-color-grey-20)}.ux-editor--focused .ql-container{outline:1px solid var(--eui-base-color-accent-110);box-shadow:var(--eui-base-shadow-1)}.ux-editor--editable .ql-container{background-color:var(--eui-base-color-white);border:1px solid #ccc;padding:.35rem}.ux-editor .ql-toolbar{background-color:var(--eui-base-color-grey-2);border:1px solid var(--eui-base-color-grey-15);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) 0 var(--eui-base-spacing-xs);font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-toolbar.ql-snow button{background:none;border:none;cursor:pointer;display:inline-flex;padding:3px 5px;width:28px}.ux-editor .ql-toolbar.ql-snow .ql-formats{align-items:center;background-color:var(--eui-base-color-grey-5);border:1px solid var(--eui-base-color-grey-15);border-radius:5px;display:inline-flex;margin-bottom:var(--eui-base-spacing-xs);margin-right:var(--eui-base-spacing-xs);vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker{align-items:center;color:var(--eui-base-color-grey-90);display:inline-flex;font-size:var(--eui-base-font-size);height:var(--eui-base-spacing-xl);max-height:var(--eui-base-spacing-xl);position:relative;vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker.ql-expanded .ql-picker-label{border-color:transparent}.ux-editor .ql-toolbar.ql-snow .ql-formats button{align-items:center;background-color:transparent;border:0 solid var(--eui-base-color-grey-15);box-shadow:none;color:var(--eui-base-color-grey-90);display:inline-flex;height:var(--eui-base-spacing-xl);justify-content:center;min-width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:hover{background:var(--eui-base-color-grey-10);color:var(--eui-base-color-info-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.active,.ux-editor .ql-toolbar.ql-snow .ql-formats button.ql-active{background:var(--eui-base-color-accent-100);color:var(--eui-base-color-primary-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:first-child{border-radius:5px 0 0 5px}.ux-editor .ql-toolbar.ql-snow .ql-formats button:last-child{border-radius:0 5px 5px 0}.ux-editor .ql-toolbar.ql-snow .ql-formats button .eui-icon{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:active,.ux-editor .ql-toolbar.ql-snow .ql-formats button:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters{align-items:center;cursor:default;display:inline-flex;width:auto}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter.chars-counter--error{color:var(--eui-base-color-danger-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-label,.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-label{color:var(--eui-base-color-grey-80);font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-formats select{background-color:transparent;border:.5px solid var(--eui-base-color-black);border-radius:5px;cursor:pointer;font-size:var(--eui-base-font-size-s);outline:0;padding:.4rem;vertical-align:middle;width:90px}.ux-editor .ql-toolbar.ql-snow .ql-formats select:active,.ux-editor .ql-toolbar.ql-snow .ql-formats select:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:1px}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(7 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before{content:\"Small\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smaller]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{content:\"Smaller\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smallest]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{content:\"Smallest\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before{content:\"Large\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before{content:\"Huge\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-small{font-size:var(--eui-base-font-size-s)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{font-size:var(--eui-base-font-size-2xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-large{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-huge{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"1\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{content:\"Heading 1\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"2\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{content:\"Heading 2\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"3\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{content:\"Heading 3\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"4\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{content:\"Heading 4\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"5\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{content:\"Heading 5\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"6\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{content:\"Heading 6\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{font-size:var(--eui-base-font-size-3xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{font-size:var(--eui-base-font-size-l)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{font-size:var(--eui-base-font-size-m)}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item:before{content:\"Sans Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=serif]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{content:\"Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=monospace]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{content:\"Monospace\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=sans-serif]:before{font-family:arial,sans-serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{font-family:times new roman,serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{font-family:courier new,monospace!important}.ux-editor .ql-toolbar.ql-snow .ql-color-picker{width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px;display:inline-flex}.ux-editor .ql-container{box-sizing:border-box;height:100%;margin:0;position:relative;resize:vertical;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-container:focus{outline:1px solid var(--eui-base-color-accent-110)}.ux-editor .ql-editor{box-sizing:border-box;height:100%;line-height:var(--eui-base-line-height);outline:none;overflow-y:auto;padding:var(--eui-base-spacing-s);tab-size:4;text-align:left;white-space:pre-wrap;word-break:normal;word-wrap:break-word;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-editor h1{font-size:var(--eui-base-font-size-4xl)!important}.ux-editor .ql-editor h2{font-size:var(--eui-base-font-size-3xl)!important}.ux-editor .ql-editor h3{font-size:var(--eui-base-font-size-2xl)!important}.ux-editor .ql-editor h4{font-size:var(--eui-base-font-size-xl)!important}.ux-editor .ql-editor h5{font-size:var(--eui-base-font-size-l)!important}.ux-editor .ql-editor h6{font-size:var(--eui-base-font-size-m)!important}.ux-editor .ql-editor .h7{font-size:var(--eui-base-font-size-s)!important}.ux-editor .ql-editor .h8{font-size:var(--eui-base-font-size-xs)!important}.ux-editor .ql-editor .h9{font-size:var(--eui-base-font-size-2xs)!important}.ux-editor .ql-editor p{padding-bottom:var(--eui-base-spacing-s)!important}.ux-editor .ql-editor p:last-child{padding-bottom:0!important}.ux-editor .ql-editor em,.ux-editor .ql-editor i{font-style:italic!important}.ux-editor .ql-editor strong,.ux-editor .ql-editor b{font-weight:700!important}.ux-editor .ql-editor strong em,.ux-editor .ql-editor strong i,.ux-editor .ql-editor b em,.ux-editor .ql-editor b i{font-style:italic!important;font-weight:700!important}.ux-editor .ql-editor strong em u,.ux-editor .ql-editor strong i u,.ux-editor .ql-editor b em u,.ux-editor .ql-editor b i u{text-decoration:underline!important}.ux-editor .ql-editor blockquote{border-left:var(--eui-base-spacing-xs) solid var(--eui-base-color-grey-20);margin-bottom:0;margin-top:0;padding-left:var(--eui-base-spacing-m)}.ux-editor .ql-editor code,.ux-editor .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ux-editor .ql-editor pre{margin-bottom:var(--eui-base-spacing-xs);margin-top:var(--eui-base-spacing-xs);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-m);white-space:pre-wrap}.ux-editor .ql-editor code{font-size:85%;padding:2px 4px;word-break:break-word}.ux-editor .ql-editor ol,.ux-editor .ql-editor ul{padding-left:0}.ux-editor .ql-editor ol{counter-reset:inherit}.ux-editor .ql-editor pre.ql-syntax{background-color:var(--eui-base-color-grey-80);color:#f5f5f5;overflow:visible}.ux-editor .ql-editor iframe,.ux-editor .ql-editor img{display:inline-block;height:1;width:1}.ux-editor .ql-editor.ql-blank:before{left:var(--eui-base-spacing-m);position:absolute;right:0}.ux-editor .ql-tooltip{background-color:var(--eui-base-color-grey-10);left:50%!important;margin:0 auto;outline:2px solid var(--eui-base-color-primary-100);position:absolute;top:50%!important;transform:translate(-50%,-50%)!important;width:70%;box-shadow:var(--eui-base-shadow-1)}.ux-editor .ql-tooltip input[type=text]{border:1px solid #ccc;display:none;font-size:13px;height:26px;margin:0;padding:3px 5px;width:75%}.ux-editor .ql-tooltip a.ql-preview{display:inline-block;max-width:60%;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top;width:100%}.ux-editor__debug{background-color:#fff3cd;border:1px solid #f5c6cb;border-radius:.25rem;color:#856404;font:.85rem consolas,monospace,sans-serif;margin:var(--eui-base-spacing-m) 0;padding:var(--eui-base-spacing-s) 1.25rem;position:relative}.ux-editor__debug-section{align-items:center;display:flex;flex-wrap:wrap;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-title{color:#e83e8c;font-size:var(--eui-base-font-size-xl);font-weight:900;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-badge{font-size:var(--eui-base-font-size-xs);font-weight:400;margin:0 var(--eui-base-spacing-2xs);padding:var(--eui-base-spacing-3xs) var(--eui-base-spacing-xs)}.ux-editor__debug-badge--off{background-color:#e8e0c4;border:1px solid #d2d2d2;color:#888}.ux-editor__debug-badge--on{background-color:#28a745;border:1px solid #218037;color:var(--eui-base-color-white)}.ux-editor__debug-badge--alert{background-color:#dc3545;border:1px solid #721d25;color:var(--eui-base-color-white)}.ux-editor__debug-source{background-color:#ffeeba;font-size:var(--eui-base-font-size);height:auto;max-height:150px;outline:1px dashed silver;overflow-y:auto;padding:var(--eui-base-spacing-xs);position:relative}.ux-editor__debug-source-code{color:#e83e8c;font:90% consolas,monospace}.ux-editor__debug code{font-size:var(--eui-base-font-size-xs)}.ux-editor__about{background:var(--eui-base-color-white);display:block;height:10rem;left:50%;overflow-y:auto;padding:var(--eui-base-spacing-m);position:absolute;transform:translate(-50%,25%);width:20rem;z-index:1;box-shadow:var(--eui-base-shadow-3)}ux-editor.ng-invalid.ng-touched .ux-editor:not(.ux-editor--readonly) .ql-container{outline:1px solid var(--eui-base-color-danger-100)}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgSelectOption; }), selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.ɵNgSelectMultipleOption; }), selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i1.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.FormControlDirective; }), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i0.forwardRef(function () { return i3.QuillEditorComponent; }), selector: "quill-editor", inputs: ["format", "theme", "modules", "debug", "readOnly", "placeholder", "maxLength", "minLength", "required", "formats", "customToolbarPosition", "sanitize", "styles", "strict", "scrollingContainer", "bounds", "customOptions", "trackChanges", "preserveWhitespace", "valueGetter", "valueSetter"], outputs: ["onEditorCreated", "onContentChanged", "onSelectionChanged", "onFocus", "onBlur"] }, { kind: "component", type: i0.forwardRef(function () { return UxEditorViewComponent; }), selector: "ux-editor-view", inputs: ["format", "theme", "modules", "debug", "formats", "strict", "content", "customOptions", "preserveWhitespace", "styles"] }, { kind: "component", type: i0.forwardRef(function () { return UxEditorViewHTMLComponent; }), selector: "ux-editor-view-html", inputs: ["content", "theme", "styles"] }, { kind: "component", type: i0.forwardRef(function () { return UxEditorCountersComponent; }), selector: "ux-editor-counters", inputs: ["charactersCounter", "charactersLabel", "wordsCounter", "wordsLabel", "isMaxLengthValid"] }, { kind: "pipe", type: i0.forwardRef(function () { return i2.JsonPipe; }), name: "json" }], encapsulation: i0.ViewEncapsulation.None });
|
|
493
|
+
/** @nocollapse */ UxEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: UxEditorComponent, selector: "ux-editor", inputs: { e2eAttr: "e2eAttr", id: "id", style: "style", styleClass: "styleClass", placeholder: "placeholder", formats: "formats", format: "format", isEnabledOnFocus: "isEnabledOnFocus", isReadOnly: "isReadOnly", isUsedNativeEditorInReadMode: "isUsedNativeEditorInReadMode", customToolbarOptions: "customToolbarOptions", theme: "theme", debug: "debug", isEditable: "isEditable", formControlName: "formControlName", feedbackTypeClass: "feedbackTypeClass", validationErrorMessage: "validationErrorMessage", tabindex: "tabindex", hasReadOnlyStyles: "hasReadOnlyStyles", isMinimalToolbar: "isMinimalToolbar", modules: "modules", maxLength: "maxLength", minLength: "minLength", isRequired: "isRequired", customToolbarPosition: "customToolbarPosition", strict: "strict", isUsedSanitizationForHtml: "isUsedSanitizationForHtml", scrollingContainer: "scrollingContainer", bounds: "bounds", customOptions: "customOptions", trackChanges: "trackChanges", preserveWhitespace: "preserveWhitespace", spellcheck: "spellcheck", showCounters: "showCounters", isImageUrl: "isImageUrl" }, outputs: { onInit: "onInit", onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", onEditorCreated: "onEditorCreated", onEditorChanged: "onEditorChanged", onContentChanged: "onContentChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", getCharactersCounter: "getCharactersCounter", getWordsCounter: "getWordsCounter" }, queries: [{ propertyName: "customEditorToolbar", first: true, predicate: i0.forwardRef(function () { return UxEditorCustomToolbarTagDirective; }), descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ux-editor-wrapper\">\n <quill-editor *ngIf=\"!isReadOnly || isUsedNativeEditorInReadMode\"\n [id]=\"generatedId\"\n class=\"ux-editor {{styleClass}}\"\n [class.ux-editor--readonly]=\"isReadOnly\"\n [class.ux-editor--focused]=\"isFocused\"\n [class.ux-editor--editable]=\"!isReadOnly\"\n [format]=\"format\"\n [formats]=\"formats\"\n [maxLength]=\"maxLength\"\n [minLength]=\"minLength\"\n [readOnly]=\"isReadOnly\"\n [required]=\"isRequired\"\n [sanitize]=\"isUsedSanitizationForHtml\"\n [modules]=\"modules\"\n [theme]=\"theme\"\n [placeholder]=\"placeholder\"\n [styles]=\"style\"\n [customToolbarPosition]=\"customToolbarPosition\"\n [preserveWhitespace]=\"preserveWhitespace\"\n [spellcheck]=\"spellcheck\"\n [formControl]=\"formControl\"\n [debug]=\"false\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n (onEditorCreated)=\"onEditorCreatedEmit($event)\"\n (onEditorChanged)=\"onEditorChangedEmit($event)\"\n (onContentChanged)=\"onContentChangedEmit($event)\"\n (onSelectionChanged)=\"onSelectionChangedEmit($event)\"\n (onFocus)=\"onFocusEmit($event)\"\n (onBlur)=\"onBlurEmit($event)\">\n\n <!-- PREDEFINED DEFAULT TOOLBAR -->\n <div *ngIf=\"!customToolbarOptions && !customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <span class=\"ql-formats\">\n <select class=\"ql-header\" title=\"Style{{crlf}}Apply an HTML tag or CSS class to the selected text\">\n <option value=\"1\">Heading 1</option>\n <option value=\"2\">Heading 2</option>\n <option value=\"3\">Heading 3</option>\n <option value=\"4\">Heading 4</option>\n <option value=\"5\">Heading 5</option>\n <option value=\"6\">Heading 6</option>\n <option selected>Normal</option>\n </select>\n </span>\n <!-- <span class=\"ql-formats\">\n <select class=\"ql-size\" title=\"Font size{{crlf}}Change the font size of the selected text\">\n <option value=\"small\">Small</option>\n <option selected>Normal</option>\n <option value=\"large\">Large</option>\n <option value=\"huge\">Huge</option>\n </select>\n </span> -->\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <select class=\"ql-font\" title=\"Font{{crlf}}Change the font face\">\n <option selected>Sans Serif</option>\n <option value=\"serif\">Serif</option>\n <option value=\"monospace\">Monospace</option>\n </select>\n </span>\n <span class=\"ql-formats\">\n <button class=\"ql-bold\" aria-label=\"Bold (Ctrl + B)\" title=\"Bold (Ctrl + B){{crlf}}Make the selected text bold\"></button>\n <button class=\"ql-italic\" aria-label=\"Italic (Ctrl + I)\" title=\"Italic (Ctrl + I){{crlf}}Italicize the selected text\"></button>\n <button class=\"ql-underline\" aria-label=\"Underline (Ctrl + U)\" title=\"Underline (Ctrl + U){{crlf}}Underline the selected text\"></button>\n <button class=\"ql-strike\" aria-label=\"Strikethrough\" title=\"Strikethrough{{crlf}}Draw a line to the middle of the selected text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-color\" aria-label=\"Font Color\" title=\"Font Color{{crlf}}Change the text color\"></select>\n <select class=\"ql-background\" aria-label=\"Text Highlight Color\" title=\"Text Highlight Color{{crlf}}Change the background color of the text\"></select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-script\" value=\"sub\" aria-label=\"Subscript\" title=\"Subscript{{crlf}}Create ssmall letters below the text baseline\"></button>\n <button class=\"ql-script\" value=\"super\" aria-label=\"Superscript\" title=\"Superscript{{crlf}}Create small letters above the line of the text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-align\" aria-label=\"Text Align\" title=\"Text Align{{crlf}}Align the text to the selected position: left (default), center, right or justify\">\n <option selected></option>\n <option value=\"center\"></option>\n <option value=\"right\"></option>\n <option value=\"justify\"></option>\n </select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-list\" value=\"ordered\" aria-label=\"Ordered List\" title=\"Numbering{{crlf}}Start an ordered list\"></button>\n <button class=\"ql-list\" value=\"bullet\" aria-label=\"Unordered List\" title=\"Bullets{{crlf}}Start a bulleted list\"></button>\n <button class=\"ql-indent\" value=\"-1\" type=\"button\" aria-label=\"Decrease Indent\" title=\"Decrease Indent{{crlf}}Decrease the indent level of the paragraph\"></button>\n <button class=\"ql-indent\" value=\"+1\" type=\"button\" aria-label=\"Increase Indent\" title=\"Increase Indent{{crlf}}Increase the indent level of the paragraph\"></button>\n </span>\n <!-- Insert group -->\n <span class=\"ql-formats\">\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-blockquote\" aria-label=\"Blockquote\" title=\"Blockquote{{crlf}}Create a quoted block of the selected text\"></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-code-block\" aria-label=\"Insert Code Block\" title=\"Insert Code Block{{crlf}}Insert a code block at the cursor row position\"></button>\n <button class=\"ql-link\" aria-label=\"Insert Link\" title=\"Insert Hyperlink (Ctrl + K){{crlf}}Create a link to a Web page, a picture, an e-mail address or a program\"></button>\n <button *ngIf=\"!isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image\" title=\"Insert Picture{{crlf}}Insert a picture from a file\"></button>\n <button *ngIf=\"isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image from URL\" title=\"Insert Picture from URL{{crlf}}Insert a picture from a remote URL\">\n <span class=\"eui-icon eui-icon-image-add\"></span></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-video\" aria-label=\"Insert Video\" title=\"Insert Video{{crlf}}Insert a video from a file\"></button>\n </span>\n <!-- Clean / Clear -->\n <span class=\"ql-formats\">\n <button class=\"ql-clean\" aria-label=\"Remove Styles\" title=\"Remove Styles{{crlf}}Remove the styles of the selected text\"></button>\n <button aria-label=\"Delete\" title=\"Delete content{{crlf}}Permanently deletes editor's contents\" (click)=\"editorDeleteContent($event)\"><span class=\"eui-icon eui-icon-delete-forever\"></span></button>\n </span>\n\n <!-- Undo/Redo -->\n <span class=\"ql-formats\">\n <button aria-label=\"Undo (Ctrl + Z)\" title=\"Undo (Ctrl + Z){{crlf}}Cancels the previous action\" (click)=\"editorUndo()\"><span class=\"eui-icon eui-icon-undo\"></span></button>\n <button aria-label=\"Redo (Ctrl + Y)\" title=\"Redo (Ctrl + Y){{crlf}}Do the next history action again\" (click)=\"editorRedo()\"><span class=\"eui-icon eui-icon-redo\"></span></button>\n </span>\n <!-- Counters -->\n <span *ngIf=\"showCounters && (format === 'html' || format === 'text')\" class=\"ql-formats\">\n <ux-editor-counters [charactersCounter]=\"charactersCounter\"\n [charactersLabel]=\"charactersLabel\"\n [wordsCounter]=\"wordsCounter\"\n [wordsLabel]=\"wordsLabel\"\n [isMaxLengthValid]=\"isMaxLengthValid\"\n aria-label=\"Counters\"\n title=\"Counters{{crlf}}Characters and words counters (stripped Html)\">\n </ux-editor-counters>\n </span>\n </div>\n\n <!-- USER CUSTOM TOOLBAR (HTML FORMAT) -->\n <div *ngIf=\"customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <ng-content select=\"uxEditorCustomToolbar\"></ng-content>\n </div>\n </quill-editor>\n\n <!-- MAXLENGTH INDICATOR -->\n <div *ngIf=\"!isReadOnly && charactersLeft > -1\" class=\"maxlength-wrapper\" [class.maxlength-wrapper--error]=\"!isMaxLengthValid\">{{ charactersLeft }}</div>\n</div>\n\n\n<!-- READONLY MODE -->\n<div *ngIf=\"isReadOnly && !isUsedNativeEditorInReadMode\" class=\"ux-editor ux-editor--readonly {{styleClass}}\" [class.ux-editor--empty]=\"!value\" tabindex=\"{{tabindex}}\" (click)=\"enableEditorOnClickFocus($event)\" (focusin)=\"enableEditorOnClickFocus($event)\">\n <ux-editor-view-html *ngIf=\"format === 'html' || format === 'text'\" [content]=\"value\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view-html>\n <ux-editor-view *ngIf=\"format === 'object' || format === 'json'\" [content]=\"value\" [format]=\"format\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view>\n</div>\n\n\n<!-- DEBUGGER -->\n<div *ngIf=\"debug\" class=\"ux-editor__debug\">\n <div class=\"ux-editor__debug-title\">UX-EDITOR debug</div>\n <div class=\"ux-editor__debug-section\">\n <strong>OPTIONS:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">id: <span class=\"eui-u-color-black\">{{generatedId}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">toolbarPosition: {{customToolbarPosition}}</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isReadOnly\" [class.ux-editor__debug-badge--off]=\"!isReadOnly\">isReadOnly</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEnabledOnFocus\" [class.ux-editor__debug-badge--off]=\"!isEnabledOnFocus\">isEnabledOnFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"preserveWhitespace\" [class.ux-editor__debug-badge--off]=\"!preserveWhitespace\">preserveWhitespace</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"spellcheck\" [class.ux-editor__debug-badge--off]=\"!spellcheck\">spellcheck</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">maxLength: <span class=\"eui-u-color-black\">{{maxLength}}</span></span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>EVENTS:</strong>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFocused\" [class.ux-editor__debug-badge--off]=\"!isFocused\">onFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isBlured\" [class.ux-editor__debug-badge--off]=\"!isBlured\">onBlur</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEditorCreated\" [class.ux-editor__debug-badge--off]=\"!isEditorCreated\">onEditorCreated</span>\n <!-- <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasEditorChanged\" [class.ux-editor__debug-badge--off]=\"!hasEditorChanged\">onEditorChanged</span> -->\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasContentChanged\" [class.ux-editor__debug-badge--off]=\"!hasContentChanged\">onContentChanged</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasSelectionChanged\" [class.ux-editor__debug-badge--off]=\"!hasSelectionChanged\">onSelectionChanged</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>FORM:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">controlName: <span class=\"eui-u-color-black\">{{formControlName}}</span></span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isRequired\" [class.ux-editor__debug-badge--off]=\"!isRequired\">isRequired</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFormControlValid\" [class.ux-editor__debug-badge--alert]=\"!isFormControlValid\">isFormControlValid</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">validationErrorMessage: <span class=\"eui-u-color-{{feedbackTypeClass}}\">{{formValidationErrorMessage}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--on\" [class.ux-editor__debug-badge--alert]=\"!isMaxLengthValid\">isMaxLengthValid</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>STYLE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">{{ style | json}}</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>SOURCE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">format: <span class=\"eui-u-color-black\">{{format}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">charactersLeft: <span [ngClass]=\"isMaxLengthValid ? 'eui-u-color-black' : 'eui-u-color-danger'\">{{charactersLeft}}</span></span>\n\n </div>\n <div class=\"ux-editor__debug-source\">\n <code *ngIf=\"format === 'text' || format === 'html'\">{{formControl.value}}</code>\n <code *ngIf=\"format === 'json' || format === 'object'\"><pre class=\"ux-editor__debug-source-code\">{{formControl.value | json}}</pre></code>\n </div>\n</div>\n", styles: ["/*!\n* eUI alignments & improvements for ux-editor based on (Ngx-)QuillJS Editor v1.3.7+\n*/.ux-editor-wrapper{position:relative}.ux-editor-wrapper .maxlength-wrapper{background-color:var(--eui-base-color-primary-50);border:1px solid var(--eui-base-color-primary-100);border-radius:3px;color:var(--eui-base-color-white);font-size:.75rem;padding:1px 3px;position:absolute;right:-.5rem;top:-.75rem;z-index:2}.ux-editor-wrapper .maxlength-wrapper.maxlength-wrapper--error{background-color:var(--eui-base-color-danger-75);border:1px solid var(--eui-base-color-danger-100)}.ux-editor{display:block;position:relative}.ux-editor--readonly{padding:var(--eui-base-spacing-s) 0 0 0}.ux-editor--readonly .ql-toolbar{display:none}.ux-editor--readonly .ql-container{border:none}.ux-editor--readonly .ql-editor{min-height:calc(var(--eui-base-spacing-2xl) + 2px);padding:0 var(--eui-base-spacing-m) 0 0!important}.ux-editor--readonly.ux-editor--empty .ql-container{border:none;outline:1px dashed var(--eui-base-color-grey-15)}.ux-editor--readonly.ux-editor--empty .ql-container:hover{outline:1px solid var(--eui-base-color-grey-20)}.ux-editor--focused .ql-container{outline:1px solid var(--eui-base-color-accent-110);box-shadow:var(--eui-base-shadow-1)}.ux-editor--editable .ql-container{background-color:var(--eui-base-color-white);border:1px solid #ccc;padding:.35rem}.ux-editor .ql-toolbar{background-color:var(--eui-base-color-grey-2);border:1px solid var(--eui-base-color-grey-15);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) 0 var(--eui-base-spacing-xs);font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-toolbar.ql-snow button{background:none;border:none;cursor:pointer;display:inline-flex;padding:3px 5px;width:28px}.ux-editor .ql-toolbar.ql-snow .ql-formats{align-items:center;background-color:var(--eui-base-color-grey-5);border:1px solid var(--eui-base-color-grey-15);border-radius:5px;display:inline-flex;margin-bottom:var(--eui-base-spacing-xs);margin-right:var(--eui-base-spacing-xs);vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker{align-items:center;color:var(--eui-base-color-grey-90);display:inline-flex;font-size:var(--eui-base-font-size);height:var(--eui-base-spacing-xl);max-height:var(--eui-base-spacing-xl);position:relative;vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker.ql-expanded .ql-picker-label{border-color:transparent}.ux-editor .ql-toolbar.ql-snow .ql-formats button{align-items:center;background-color:transparent;border:0 solid var(--eui-base-color-grey-15);box-shadow:none;color:var(--eui-base-color-grey-90);display:inline-flex;height:var(--eui-base-spacing-xl);justify-content:center;min-width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:hover{background:var(--eui-base-color-grey-10);color:var(--eui-base-color-info-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.active,.ux-editor .ql-toolbar.ql-snow .ql-formats button.ql-active{background:var(--eui-base-color-accent-100);color:var(--eui-base-color-primary-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:first-child{border-radius:5px 0 0 5px}.ux-editor .ql-toolbar.ql-snow .ql-formats button:last-child{border-radius:0 5px 5px 0}.ux-editor .ql-toolbar.ql-snow .ql-formats button .eui-icon{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:active,.ux-editor .ql-toolbar.ql-snow .ql-formats button:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters{align-items:center;cursor:default;display:inline-flex;width:auto}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter.chars-counter--error{color:var(--eui-base-color-danger-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-label,.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-label{color:var(--eui-base-color-grey-80);font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-formats select{background-color:transparent;border:.5px solid var(--eui-base-color-black);border-radius:5px;cursor:pointer;font-size:var(--eui-base-font-size-s);outline:0;padding:.4rem;vertical-align:middle;width:90px}.ux-editor .ql-toolbar.ql-snow .ql-formats select:active,.ux-editor .ql-toolbar.ql-snow .ql-formats select:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:1px}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(7 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before{content:\"Small\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smaller]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{content:\"Smaller\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smallest]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{content:\"Smallest\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before{content:\"Large\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before{content:\"Huge\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-small{font-size:var(--eui-base-font-size-s)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{font-size:var(--eui-base-font-size-2xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-large{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-huge{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"1\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{content:\"Heading 1\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"2\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{content:\"Heading 2\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"3\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{content:\"Heading 3\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"4\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{content:\"Heading 4\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"5\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{content:\"Heading 5\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"6\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{content:\"Heading 6\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{font-size:var(--eui-base-font-size-3xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{font-size:var(--eui-base-font-size-l)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{font-size:var(--eui-base-font-size-m)}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item:before{content:\"Sans Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=serif]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{content:\"Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=monospace]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{content:\"Monospace\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=sans-serif]:before{font-family:arial,sans-serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{font-family:times new roman,serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{font-family:courier new,monospace!important}.ux-editor .ql-toolbar.ql-snow .ql-color-picker{width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px;display:inline-flex}.ux-editor .ql-container{box-sizing:border-box;height:100%;margin:0;position:relative;resize:vertical;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-container:focus{outline:1px solid var(--eui-base-color-accent-110)}.ux-editor .ql-editor{box-sizing:border-box;height:100%;line-height:var(--eui-base-line-height);outline:none;overflow-y:auto;padding:var(--eui-base-spacing-s);tab-size:4;text-align:left;white-space:pre-wrap;word-break:normal;word-wrap:break-word;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-editor h1{font-size:var(--eui-base-font-size-4xl)!important}.ux-editor .ql-editor h2{font-size:var(--eui-base-font-size-3xl)!important}.ux-editor .ql-editor h3{font-size:var(--eui-base-font-size-2xl)!important}.ux-editor .ql-editor h4{font-size:var(--eui-base-font-size-xl)!important}.ux-editor .ql-editor h5{font-size:var(--eui-base-font-size-l)!important}.ux-editor .ql-editor h6{font-size:var(--eui-base-font-size-m)!important}.ux-editor .ql-editor .h7{font-size:var(--eui-base-font-size-s)!important}.ux-editor .ql-editor .h8{font-size:var(--eui-base-font-size-xs)!important}.ux-editor .ql-editor .h9{font-size:var(--eui-base-font-size-2xs)!important}.ux-editor .ql-editor p{padding-bottom:var(--eui-base-spacing-s)!important}.ux-editor .ql-editor p:last-child{padding-bottom:0!important}.ux-editor .ql-editor em,.ux-editor .ql-editor i{font-style:italic!important}.ux-editor .ql-editor strong,.ux-editor .ql-editor b{font-weight:700!important}.ux-editor .ql-editor strong em,.ux-editor .ql-editor strong i,.ux-editor .ql-editor b em,.ux-editor .ql-editor b i{font-style:italic!important;font-weight:700!important}.ux-editor .ql-editor strong em u,.ux-editor .ql-editor strong i u,.ux-editor .ql-editor b em u,.ux-editor .ql-editor b i u{text-decoration:underline!important}.ux-editor .ql-editor blockquote{border-left:var(--eui-base-spacing-xs) solid var(--eui-base-color-grey-20);margin-bottom:0;margin-top:0;padding-left:var(--eui-base-spacing-m)}.ux-editor .ql-editor code,.ux-editor .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ux-editor .ql-editor pre{margin-bottom:var(--eui-base-spacing-xs);margin-top:var(--eui-base-spacing-xs);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-m);white-space:pre-wrap}.ux-editor .ql-editor code{font-size:85%;padding:2px 4px;word-break:break-word}.ux-editor .ql-editor ol,.ux-editor .ql-editor ul{padding-left:0}.ux-editor .ql-editor ol{counter-reset:inherit}.ux-editor .ql-editor pre.ql-syntax{background-color:var(--eui-base-color-grey-80);color:#f5f5f5;overflow:visible}.ux-editor .ql-editor iframe,.ux-editor .ql-editor img{display:inline-block;height:1;width:1}.ux-editor .ql-editor.ql-blank:before{left:var(--eui-base-spacing-m);position:absolute;right:0}.ux-editor .ql-tooltip{background-color:var(--eui-base-color-grey-10);left:50%!important;margin:0 auto;outline:2px solid var(--eui-base-color-primary-100);position:absolute;top:50%!important;transform:translate(-50%,-50%)!important;width:70%;box-shadow:var(--eui-base-shadow-1)}.ux-editor .ql-tooltip input[type=text]{border:1px solid #ccc;display:none;font-size:13px;height:26px;margin:0;padding:3px 5px;width:75%}.ux-editor .ql-tooltip a.ql-preview{display:inline-block;max-width:60%;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top;width:100%}.ux-editor__debug{background-color:#fff3cd;border:1px solid #f5c6cb;border-radius:.25rem;color:#856404;font:.85rem consolas,monospace,sans-serif;margin:var(--eui-base-spacing-m) 0;padding:var(--eui-base-spacing-s) 1.25rem;position:relative}.ux-editor__debug-section{align-items:center;display:flex;flex-wrap:wrap;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-title{color:#e83e8c;font-size:var(--eui-base-font-size-xl);font-weight:900;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-badge{font-size:var(--eui-base-font-size-xs);font-weight:400;margin:0 var(--eui-base-spacing-2xs);padding:var(--eui-base-spacing-3xs) var(--eui-base-spacing-xs)}.ux-editor__debug-badge--off{background-color:#e8e0c4;border:1px solid #d2d2d2;color:#888}.ux-editor__debug-badge--on{background-color:#28a745;border:1px solid #218037;color:var(--eui-base-color-white)}.ux-editor__debug-badge--alert{background-color:#dc3545;border:1px solid #721d25;color:var(--eui-base-color-white)}.ux-editor__debug-source{background-color:#ffeeba;font-size:var(--eui-base-font-size);height:auto;max-height:150px;outline:1px dashed silver;overflow-y:auto;padding:var(--eui-base-spacing-xs);position:relative}.ux-editor__debug-source-code{color:#e83e8c;font:90% consolas,monospace}.ux-editor__debug code{font-size:var(--eui-base-font-size-xs)}.ux-editor__about{background:var(--eui-base-color-white);display:block;height:10rem;left:50%;overflow-y:auto;padding:var(--eui-base-spacing-m);position:absolute;transform:translate(-50%,25%);width:20rem;z-index:1;box-shadow:var(--eui-base-shadow-3)}ux-editor.ng-invalid.ng-touched .ux-editor:not(.ux-editor--readonly) .ql-container{outline:1px solid var(--eui-base-color-danger-100)}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgSelectOption; }), selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.ɵNgSelectMultipleOption; }), selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i1.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.FormControlDirective; }), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i0.forwardRef(function () { return i3.QuillEditorComponent; }), selector: "quill-editor", inputs: ["format", "theme", "modules", "debug", "readOnly", "placeholder", "maxLength", "minLength", "required", "formats", "customToolbarPosition", "sanitize", "styles", "strict", "scrollingContainer", "bounds", "customOptions", "trackChanges", "preserveWhitespace", "valueGetter", "valueSetter"], outputs: ["onEditorCreated", "onContentChanged", "onSelectionChanged", "onFocus", "onBlur"] }, { kind: "component", type: i0.forwardRef(function () { return UxEditorViewComponent; }), selector: "ux-editor-view", inputs: ["format", "theme", "modules", "debug", "formats", "strict", "content", "customOptions", "preserveWhitespace", "styles"] }, { kind: "component", type: i0.forwardRef(function () { return UxEditorViewHTMLComponent; }), selector: "ux-editor-view-html", inputs: ["content", "theme", "styles"] }, { kind: "component", type: i0.forwardRef(function () { return UxEditorCountersComponent; }), selector: "ux-editor-counters", inputs: ["charactersCounter", "charactersLabel", "wordsCounter", "wordsLabel", "isMaxLengthValid"] }, { kind: "pipe", type: i0.forwardRef(function () { return i2.JsonPipe; }), name: "json" }], encapsulation: i0.ViewEncapsulation.None });
|
|
464
494
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: UxEditorComponent, decorators: [{
|
|
465
495
|
type: Component,
|
|
466
|
-
args: [{ selector: 'ux-editor', encapsulation: ViewEncapsulation.None, template: "<div class=\"ux-editor-wrapper\">\n <quill-editor *ngIf=\"!isReadOnly || isUsedNativeEditorInReadMode\"\n [id]=\"generatedId\"\n class=\"ux-editor {{styleClass}}\"\n [class.ux-editor--readonly]=\"isReadOnly\"\n [class.ux-editor--focused]=\"isFocused\"\n [class.ux-editor--editable]=\"!isReadOnly\"\n [format]=\"format\"\n [formats]=\"formats\"\n [maxLength]=\"maxLength\"\n [minLength]=\"minLength\"\n [readOnly]=\"isReadOnly\"\n [required]=\"isRequired\"\n [sanitize]=\"isUsedSanitizationForHtml\"\n [modules]=\"modules\"\n [theme]=\"theme\"\n [placeholder]=\"placeholder\"\n [styles]=\"style\"\n [customToolbarPosition]=\"customToolbarPosition\"\n [preserveWhitespace]=\"preserveWhitespace\"\n [spellcheck]=\"spellcheck\"\n [formControl]=\"formControl\"\n [debug]=\"false\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n (onEditorCreated)=\"onEditorCreatedEmit($event)\"\n (onEditorChanged)=\"onEditorChangedEmit($event)\"\n (onContentChanged)=\"onContentChangedEmit($event)\"\n (onSelectionChanged)=\"onSelectionChangedEmit($event)\"\n (onFocus)=\"onFocusEmit($event)\"\n (onBlur)=\"onBlurEmit($event)\">\n\n <!-- PREDEFINED DEFAULT TOOLBAR -->\n <div *ngIf=\"!customToolbarOptions && !customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <span class=\"ql-formats\">\n <select class=\"ql-header\" title=\"Style{{crlf}}Apply an HTML tag or CSS class to the selected text\">\n <option value=\"1\">Heading 1</option>\n <option value=\"2\">Heading 2</option>\n <option value=\"3\">Heading 3</option>\n <option value=\"4\">Heading 4</option>\n <option value=\"5\">Heading 5</option>\n <option value=\"6\">Heading 6</option>\n <option selected>Normal</option>\n </select>\n </span>\n <!-- <span class=\"ql-formats\">\n <select class=\"ql-size\" title=\"Font size{{crlf}}Change the font size of the selected text\">\n <option value=\"small\">Small</option>\n <option selected>Normal</option>\n <option value=\"large\">Large</option>\n <option value=\"huge\">Huge</option>\n </select>\n </span> -->\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <select class=\"ql-font\" title=\"Font{{crlf}}Change the font face\">\n <option selected>Sans Serif</option>\n <option value=\"serif\">Serif</option>\n <option value=\"monospace\">Monospace</option>\n </select>\n </span>\n <span class=\"ql-formats\">\n <button class=\"ql-bold\" aria-label=\"Bold (Ctrl + B)\" title=\"Bold (Ctrl + B){{crlf}}Make the selected text bold\"></button>\n <button class=\"ql-italic\" aria-label=\"Italic (Ctrl + I)\" title=\"Italic (Ctrl + I){{crlf}}Italicize the selected text\"></button>\n <button class=\"ql-underline\" aria-label=\"Underline (Ctrl + U)\" title=\"Underline (Ctrl + U){{crlf}}Underline the selected text\"></button>\n <button class=\"ql-strike\" aria-label=\"Strikethrough\" title=\"Strikethrough{{crlf}}Draw a line to the middle of the selected text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-color\" aria-label=\"Font Color\" title=\"Font Color{{crlf}}Change the text color\"></select>\n <select class=\"ql-background\" aria-label=\"Text Highlight Color\" title=\"Text Highlight Color{{crlf}}Change the background color of the text\"></select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-script\" value=\"sub\" aria-label=\"Subscript\" title=\"Subscript{{crlf}}Create ssmall letters below the text baseline\"></button>\n <button class=\"ql-script\" value=\"super\" aria-label=\"Superscript\" title=\"Superscript{{crlf}}Create small letters above the line of the text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-align\" aria-label=\"Text Align\" title=\"Text Align{{crlf}}Align the text to the selected position: left (default), center, right or justify\">\n <option selected></option>\n <option value=\"center\"></option>\n <option value=\"right\"></option>\n <option value=\"justify\"></option>\n </select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-list\" value=\"ordered\" aria-label=\"Ordered List\" title=\"Numbering{{crlf}}Start an ordered list\"></button>\n <button class=\"ql-list\" value=\"bullet\" aria-label=\"Unordered List\" title=\"Bullets{{crlf}}Start a bulleted list\"></button>\n <button class=\"ql-indent\" value=\"-1\" type=\"button\" aria-label=\"Decrease Indent\" title=\"Decrease Indent{{crlf}}Decrease the indent level of the paragraph\"></button>\n <button class=\"ql-indent\" value=\"+1\" type=\"button\" aria-label=\"Increase Indent\" title=\"Increase Indent{{crlf}}Increase the indent level of the paragraph\"></button>\n </span>\n <!-- Insert group -->\n <span class=\"ql-formats\">\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-blockquote\" aria-label=\"Blockquote\" title=\"Blockquote{{crlf}}Create a quoted block of the selected text\"></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-code-block\" aria-label=\"Insert Code Block\" title=\"Insert Code Block{{crlf}}Insert a code block at the cursor row position\"></button>\n <button class=\"ql-link\" aria-label=\"Insert Link\" title=\"Insert Hyperlink (Ctrl + K){{crlf}}Create a link to a Web page, a picture, an e-mail address or a program\"></button>\n <button *ngIf=\"!isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image\" title=\"Insert Picture{{crlf}}Insert a picture from a file\"></button>\n <button *ngIf=\"isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image from URL\" title=\"Insert Picture from URL{{crlf}}Insert a picture from a remote URL\">\n <span class=\"eui-icon eui-icon-image-add\"></span></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-video\" aria-label=\"Insert Video\" title=\"Insert Video{{crlf}}Insert a video from a file\"></button>\n </span>\n <!-- Clean / Clear -->\n <span class=\"ql-formats\">\n <button class=\"ql-clean\" aria-label=\"Remove Styles\" title=\"Remove Styles{{crlf}}Remove the styles of the selected text\"></button>\n <button aria-label=\"Delete\" title=\"Delete content{{crlf}}Permanently deletes editor's contents\" (click)=\"editorDeleteContent($event)\"><span class=\"eui-icon eui-icon-delete-forever\"></span></button>\n </span>\n\n <!-- Undo/Redo -->\n <span class=\"ql-formats\">\n <button aria-label=\"Undo (Ctrl + Z)\" title=\"Undo (Ctrl + Z){{crlf}}Cancels the previous action\" (click)=\"editorUndo()\"><span class=\"eui-icon eui-icon-undo\"></span></button>\n <button aria-label=\"Redo (Ctrl + Y)\" title=\"Redo (Ctrl + Y){{crlf}}Do the next history action again\" (click)=\"editorRedo()\"><span class=\"eui-icon eui-icon-redo\"></span></button>\n </span>\n <!-- Counters -->\n <span *ngIf=\"showCounters && (format === 'html' || format === 'text')\" class=\"ql-formats\">\n <ux-editor-counters [charactersCounter]=\"charactersCounter\"\n [charactersLabel]=\"charactersLabel\"\n [wordsCounter]=\"wordsCounter\"\n [wordsLabel]=\"wordsLabel\"\n [isMaxLengthValid]=\"isMaxLengthValid\"\n aria-label=\"Counters\"\n title=\"Counters{{crlf}}Characters and words counters (stripped Html)\">\n </ux-editor-counters>\n </span>\n </div>\n\n <!-- USER CUSTOM TOOLBAR (HTML FORMAT) -->\n <div *ngIf=\"customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <ng-content select=\"uxEditorCustomToolbar\"></ng-content>\n </div>\n </quill-editor>\n\n <!-- MAXLENGTH INDICATOR -->\n <div *ngIf=\"!isReadOnly && charactersLeft > -1\" class=\"maxlength-wrapper\" [class.maxlength-wrapper--error]=\"!isMaxLengthValid\">{{ charactersLeft }}</div>\n</div>\n\n\n<!-- READONLY MODE -->\n<div *ngIf=\"isReadOnly && !isUsedNativeEditorInReadMode\" class=\"ux-editor ux-editor--readonly {{styleClass}}\" [class.ux-editor--empty]=\"!value\" tabindex=\"{{tabindex}}\" (click)=\"enableEditorOnClickFocus($event)\" (focusin)=\"enableEditorOnClickFocus($event)\">\n <ux-editor-view-html *ngIf=\"format === 'html' || format === 'text'\" [content]=\"value\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view-html>\n <ux-editor-view *ngIf=\"format === 'object' || format === 'json'\" [content]=\"value\" [format]=\"format\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view>\n</div>\n\n\n<!-- DEBUGGER -->\n<div *ngIf=\"debug\" class=\"ux-editor__debug\">\n <div class=\"ux-editor__debug-title\">UX-EDITOR debug</div>\n <div class=\"ux-editor__debug-section\">\n <strong>OPTIONS:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">id: <span class=\"eui-u-color-black\">{{generatedId}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">toolbarPosition: {{customToolbarPosition}}</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isReadOnly\" [class.ux-editor__debug-badge--off]=\"!isReadOnly\">isReadOnly</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEnabledOnFocus\" [class.ux-editor__debug-badge--off]=\"!isEnabledOnFocus\">isEnabledOnFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"preserveWhitespace\" [class.ux-editor__debug-badge--off]=\"!preserveWhitespace\">preserveWhitespace</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"spellcheck\" [class.ux-editor__debug-badge--off]=\"!spellcheck\">spellcheck</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">maxLength: <span class=\"eui-u-color-black\">{{maxLength}}</span></span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>EVENTS:</strong>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFocused\" [class.ux-editor__debug-badge--off]=\"!isFocused\">onFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isBlured\" [class.ux-editor__debug-badge--off]=\"!isBlured\">onBlur</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEditorCreated\" [class.ux-editor__debug-badge--off]=\"!isEditorCreated\">onEditorCreated</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasEditorChanged\" [class.ux-editor__debug-badge--off]=\"!hasEditorChanged\">onEditorChanged</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasContentChanged\" [class.ux-editor__debug-badge--off]=\"!hasContentChanged\">onContentChanged</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasSelectionChanged\" [class.ux-editor__debug-badge--off]=\"!hasSelectionChanged\">onSelectionChanged</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>FORM:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">controlName: <span class=\"eui-u-color-black\">{{formControlName}}</span></span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isRequired\" [class.ux-editor__debug-badge--off]=\"!isRequired\">isRequired</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFormControlValid\" [class.ux-editor__debug-badge--alert]=\"!isFormControlValid\">isFormControlValid</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">validationErrorMessage: <span class=\"eui-u-color-{{feedbackTypeClass}}\">{{formValidationErrorMessage}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--on\" [class.ux-editor__debug-badge--alert]=\"!isMaxLengthValid\">isMaxLengthValid</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>STYLE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">{{ style | json}}</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>SOURCE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">format: <span class=\"eui-u-color-black\">{{format}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">charactersLeft: <span [ngClass]=\"isMaxLengthValid ? 'eui-u-color-black' : 'eui-u-color-danger'\">{{charactersLeft}}</span></span>\n\n </div>\n <div class=\"ux-editor__debug-source\">\n <code *ngIf=\"format === 'text' || format === 'html'\">{{formControl.value}}</code>\n <code *ngIf=\"format === 'json' || format === 'object'\"><pre class=\"ux-editor__debug-source-code\">{{formControl.value | json}}</pre></code>\n </div>\n</div>\n", styles: ["/*!\n* eUI alignments & improvements for ux-editor based on (Ngx-)QuillJS Editor v1.3.7+\n*/.ux-editor-wrapper{position:relative}.ux-editor-wrapper .maxlength-wrapper{background-color:var(--eui-base-color-primary-50);border:1px solid var(--eui-base-color-primary-100);border-radius:3px;color:var(--eui-base-color-white);font-size:.75rem;padding:1px 3px;position:absolute;right:-.5rem;top:-.75rem;z-index:2}.ux-editor-wrapper .maxlength-wrapper.maxlength-wrapper--error{background-color:var(--eui-base-color-danger-75);border:1px solid var(--eui-base-color-danger-100)}.ux-editor{display:block;position:relative}.ux-editor--readonly{padding:var(--eui-base-spacing-s) 0 0 0}.ux-editor--readonly .ql-toolbar{display:none}.ux-editor--readonly .ql-container{border:none}.ux-editor--readonly .ql-editor{min-height:calc(var(--eui-base-spacing-2xl) + 2px);padding:0 var(--eui-base-spacing-m) 0 0!important}.ux-editor--readonly.ux-editor--empty .ql-container{border:none;outline:1px dashed var(--eui-base-color-grey-15)}.ux-editor--readonly.ux-editor--empty .ql-container:hover{outline:1px solid var(--eui-base-color-grey-20)}.ux-editor--focused .ql-container{outline:1px solid var(--eui-base-color-accent-110);box-shadow:var(--eui-base-shadow-1)}.ux-editor--editable .ql-container{background-color:var(--eui-base-color-white);border:1px solid #ccc;padding:.35rem}.ux-editor .ql-toolbar{background-color:var(--eui-base-color-grey-2);border:1px solid var(--eui-base-color-grey-15);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) 0 var(--eui-base-spacing-xs);font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-toolbar.ql-snow button{background:none;border:none;cursor:pointer;display:inline-flex;padding:3px 5px;width:28px}.ux-editor .ql-toolbar.ql-snow .ql-formats{align-items:center;background-color:var(--eui-base-color-grey-5);border:1px solid var(--eui-base-color-grey-15);border-radius:5px;display:inline-flex;margin-bottom:var(--eui-base-spacing-xs);margin-right:var(--eui-base-spacing-xs);vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker{align-items:center;color:var(--eui-base-color-grey-90);display:inline-flex;font-size:var(--eui-base-font-size);height:var(--eui-base-spacing-xl);max-height:var(--eui-base-spacing-xl);position:relative;vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker.ql-expanded .ql-picker-label{border-color:transparent}.ux-editor .ql-toolbar.ql-snow .ql-formats button{align-items:center;background-color:transparent;border:0 solid var(--eui-base-color-grey-15);box-shadow:none;color:var(--eui-base-color-grey-90);display:inline-flex;height:var(--eui-base-spacing-xl);justify-content:center;min-width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:hover{background:var(--eui-base-color-grey-10);color:var(--eui-base-color-info-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.active,.ux-editor .ql-toolbar.ql-snow .ql-formats button.ql-active{background:var(--eui-base-color-accent-100);color:var(--eui-base-color-primary-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:first-child{border-radius:5px 0 0 5px}.ux-editor .ql-toolbar.ql-snow .ql-formats button:last-child{border-radius:0 5px 5px 0}.ux-editor .ql-toolbar.ql-snow .ql-formats button .eui-icon{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:active,.ux-editor .ql-toolbar.ql-snow .ql-formats button:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters{align-items:center;cursor:default;display:inline-flex;width:auto}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter.chars-counter--error{color:var(--eui-base-color-danger-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-label,.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-label{color:var(--eui-base-color-grey-80);font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-formats select{background-color:transparent;border:.5px solid var(--eui-base-color-black);border-radius:5px;cursor:pointer;font-size:var(--eui-base-font-size-s);outline:0;padding:.4rem;vertical-align:middle;width:90px}.ux-editor .ql-toolbar.ql-snow .ql-formats select:active,.ux-editor .ql-toolbar.ql-snow .ql-formats select:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:1px}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(7 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before{content:\"Small\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smaller]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{content:\"Smaller\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smallest]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{content:\"Smallest\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before{content:\"Large\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before{content:\"Huge\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-small{font-size:var(--eui-base-font-size-s)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{font-size:var(--eui-base-font-size-2xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-large{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-huge{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"1\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{content:\"Heading 1\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"2\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{content:\"Heading 2\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"3\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{content:\"Heading 3\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"4\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{content:\"Heading 4\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"5\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{content:\"Heading 5\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"6\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{content:\"Heading 6\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{font-size:var(--eui-base-font-size-3xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{font-size:var(--eui-base-font-size-l)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{font-size:var(--eui-base-font-size-m)}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item:before{content:\"Sans Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=serif]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{content:\"Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=monospace]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{content:\"Monospace\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=sans-serif]:before{font-family:arial,sans-serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{font-family:times new roman,serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{font-family:courier new,monospace!important}.ux-editor .ql-toolbar.ql-snow .ql-color-picker{width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px;display:inline-flex}.ux-editor .ql-container{box-sizing:border-box;height:100%;margin:0;position:relative;resize:vertical;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-container:focus{outline:1px solid var(--eui-base-color-accent-110)}.ux-editor .ql-editor{box-sizing:border-box;height:100%;line-height:var(--eui-base-line-height);outline:none;overflow-y:auto;padding:var(--eui-base-spacing-s);tab-size:4;text-align:left;white-space:pre-wrap;word-break:normal;word-wrap:break-word;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-editor h1{font-size:var(--eui-base-font-size-4xl)!important}.ux-editor .ql-editor h2{font-size:var(--eui-base-font-size-3xl)!important}.ux-editor .ql-editor h3{font-size:var(--eui-base-font-size-2xl)!important}.ux-editor .ql-editor h4{font-size:var(--eui-base-font-size-xl)!important}.ux-editor .ql-editor h5{font-size:var(--eui-base-font-size-l)!important}.ux-editor .ql-editor h6{font-size:var(--eui-base-font-size-m)!important}.ux-editor .ql-editor .h7{font-size:var(--eui-base-font-size-s)!important}.ux-editor .ql-editor .h8{font-size:var(--eui-base-font-size-xs)!important}.ux-editor .ql-editor .h9{font-size:var(--eui-base-font-size-2xs)!important}.ux-editor .ql-editor p{padding-bottom:var(--eui-base-spacing-s)!important}.ux-editor .ql-editor p:last-child{padding-bottom:0!important}.ux-editor .ql-editor em,.ux-editor .ql-editor i{font-style:italic!important}.ux-editor .ql-editor strong,.ux-editor .ql-editor b{font-weight:700!important}.ux-editor .ql-editor strong em,.ux-editor .ql-editor strong i,.ux-editor .ql-editor b em,.ux-editor .ql-editor b i{font-style:italic!important;font-weight:700!important}.ux-editor .ql-editor strong em u,.ux-editor .ql-editor strong i u,.ux-editor .ql-editor b em u,.ux-editor .ql-editor b i u{text-decoration:underline!important}.ux-editor .ql-editor blockquote{border-left:var(--eui-base-spacing-xs) solid var(--eui-base-color-grey-20);margin-bottom:0;margin-top:0;padding-left:var(--eui-base-spacing-m)}.ux-editor .ql-editor code,.ux-editor .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ux-editor .ql-editor pre{margin-bottom:var(--eui-base-spacing-xs);margin-top:var(--eui-base-spacing-xs);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-m);white-space:pre-wrap}.ux-editor .ql-editor code{font-size:85%;padding:2px 4px;word-break:break-word}.ux-editor .ql-editor ol,.ux-editor .ql-editor ul{padding-left:0}.ux-editor .ql-editor ol{counter-reset:inherit}.ux-editor .ql-editor pre.ql-syntax{background-color:var(--eui-base-color-grey-80);color:#f5f5f5;overflow:visible}.ux-editor .ql-editor iframe,.ux-editor .ql-editor img{display:inline-block;height:1;width:1}.ux-editor .ql-editor.ql-blank:before{left:var(--eui-base-spacing-m);position:absolute;right:0}.ux-editor .ql-tooltip{background-color:var(--eui-base-color-grey-10);left:50%!important;margin:0 auto;outline:2px solid var(--eui-base-color-primary-100);position:absolute;top:50%!important;transform:translate(-50%,-50%)!important;width:70%;box-shadow:var(--eui-base-shadow-1)}.ux-editor .ql-tooltip input[type=text]{border:1px solid #ccc;display:none;font-size:13px;height:26px;margin:0;padding:3px 5px;width:75%}.ux-editor .ql-tooltip a.ql-preview{display:inline-block;max-width:60%;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top;width:100%}.ux-editor__debug{background-color:#fff3cd;border:1px solid #f5c6cb;border-radius:.25rem;color:#856404;font:.85rem consolas,monospace,sans-serif;margin:var(--eui-base-spacing-m) 0;padding:var(--eui-base-spacing-s) 1.25rem;position:relative}.ux-editor__debug-section{align-items:center;display:flex;flex-wrap:wrap;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-title{color:#e83e8c;font-size:var(--eui-base-font-size-xl);font-weight:900;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-badge{font-size:var(--eui-base-font-size-xs);font-weight:400;margin:0 var(--eui-base-spacing-2xs);padding:var(--eui-base-spacing-3xs) var(--eui-base-spacing-xs)}.ux-editor__debug-badge--off{background-color:#e8e0c4;border:1px solid #d2d2d2;color:#888}.ux-editor__debug-badge--on{background-color:#28a745;border:1px solid #218037;color:var(--eui-base-color-white)}.ux-editor__debug-badge--alert{background-color:#dc3545;border:1px solid #721d25;color:var(--eui-base-color-white)}.ux-editor__debug-source{background-color:#ffeeba;font-size:var(--eui-base-font-size);height:auto;max-height:150px;outline:1px dashed silver;overflow-y:auto;padding:var(--eui-base-spacing-xs);position:relative}.ux-editor__debug-source-code{color:#e83e8c;font:90% consolas,monospace}.ux-editor__debug code{font-size:var(--eui-base-font-size-xs)}.ux-editor__about{background:var(--eui-base-color-white);display:block;height:10rem;left:50%;overflow-y:auto;padding:var(--eui-base-spacing-m);position:absolute;transform:translate(-50%,25%);width:20rem;z-index:1;box-shadow:var(--eui-base-shadow-3)}ux-editor.ng-invalid.ng-touched .ux-editor:not(.ux-editor--readonly) .ql-container{outline:1px solid var(--eui-base-color-danger-100)}\n"] }]
|
|
496
|
+
args: [{ selector: 'ux-editor', encapsulation: ViewEncapsulation.None, template: "<div class=\"ux-editor-wrapper\">\n <quill-editor *ngIf=\"!isReadOnly || isUsedNativeEditorInReadMode\"\n [id]=\"generatedId\"\n class=\"ux-editor {{styleClass}}\"\n [class.ux-editor--readonly]=\"isReadOnly\"\n [class.ux-editor--focused]=\"isFocused\"\n [class.ux-editor--editable]=\"!isReadOnly\"\n [format]=\"format\"\n [formats]=\"formats\"\n [maxLength]=\"maxLength\"\n [minLength]=\"minLength\"\n [readOnly]=\"isReadOnly\"\n [required]=\"isRequired\"\n [sanitize]=\"isUsedSanitizationForHtml\"\n [modules]=\"modules\"\n [theme]=\"theme\"\n [placeholder]=\"placeholder\"\n [styles]=\"style\"\n [customToolbarPosition]=\"customToolbarPosition\"\n [preserveWhitespace]=\"preserveWhitespace\"\n [spellcheck]=\"spellcheck\"\n [formControl]=\"formControl\"\n [debug]=\"false\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n (onEditorCreated)=\"onEditorCreatedEmit($event)\"\n (onEditorChanged)=\"onEditorChangedEmit($event)\"\n (onContentChanged)=\"onContentChangedEmit($event)\"\n (onSelectionChanged)=\"onSelectionChangedEmit($event)\"\n (onFocus)=\"onFocusEmit($event)\"\n (onBlur)=\"onBlurEmit($event)\">\n\n <!-- PREDEFINED DEFAULT TOOLBAR -->\n <div *ngIf=\"!customToolbarOptions && !customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <span class=\"ql-formats\">\n <select class=\"ql-header\" title=\"Style{{crlf}}Apply an HTML tag or CSS class to the selected text\">\n <option value=\"1\">Heading 1</option>\n <option value=\"2\">Heading 2</option>\n <option value=\"3\">Heading 3</option>\n <option value=\"4\">Heading 4</option>\n <option value=\"5\">Heading 5</option>\n <option value=\"6\">Heading 6</option>\n <option selected>Normal</option>\n </select>\n </span>\n <!-- <span class=\"ql-formats\">\n <select class=\"ql-size\" title=\"Font size{{crlf}}Change the font size of the selected text\">\n <option value=\"small\">Small</option>\n <option selected>Normal</option>\n <option value=\"large\">Large</option>\n <option value=\"huge\">Huge</option>\n </select>\n </span> -->\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <select class=\"ql-font\" title=\"Font{{crlf}}Change the font face\">\n <option selected>Sans Serif</option>\n <option value=\"serif\">Serif</option>\n <option value=\"monospace\">Monospace</option>\n </select>\n </span>\n <span class=\"ql-formats\">\n <button class=\"ql-bold\" aria-label=\"Bold (Ctrl + B)\" title=\"Bold (Ctrl + B){{crlf}}Make the selected text bold\"></button>\n <button class=\"ql-italic\" aria-label=\"Italic (Ctrl + I)\" title=\"Italic (Ctrl + I){{crlf}}Italicize the selected text\"></button>\n <button class=\"ql-underline\" aria-label=\"Underline (Ctrl + U)\" title=\"Underline (Ctrl + U){{crlf}}Underline the selected text\"></button>\n <button class=\"ql-strike\" aria-label=\"Strikethrough\" title=\"Strikethrough{{crlf}}Draw a line to the middle of the selected text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-color\" aria-label=\"Font Color\" title=\"Font Color{{crlf}}Change the text color\"></select>\n <select class=\"ql-background\" aria-label=\"Text Highlight Color\" title=\"Text Highlight Color{{crlf}}Change the background color of the text\"></select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-script\" value=\"sub\" aria-label=\"Subscript\" title=\"Subscript{{crlf}}Create ssmall letters below the text baseline\"></button>\n <button class=\"ql-script\" value=\"super\" aria-label=\"Superscript\" title=\"Superscript{{crlf}}Create small letters above the line of the text\"></button>\n </span>\n <span class=\"ql-formats\">\n <select class=\"ql-align\" aria-label=\"Text Align\" title=\"Text Align{{crlf}}Align the text to the selected position: left (default), center, right or justify\">\n <option selected></option>\n <option value=\"center\"></option>\n <option value=\"right\"></option>\n <option value=\"justify\"></option>\n </select>\n </span>\n <span *ngIf=\"!isMinimalToolbar\" class=\"ql-formats\">\n <button class=\"ql-list\" value=\"ordered\" aria-label=\"Ordered List\" title=\"Numbering{{crlf}}Start an ordered list\"></button>\n <button class=\"ql-list\" value=\"bullet\" aria-label=\"Unordered List\" title=\"Bullets{{crlf}}Start a bulleted list\"></button>\n <button class=\"ql-indent\" value=\"-1\" type=\"button\" aria-label=\"Decrease Indent\" title=\"Decrease Indent{{crlf}}Decrease the indent level of the paragraph\"></button>\n <button class=\"ql-indent\" value=\"+1\" type=\"button\" aria-label=\"Increase Indent\" title=\"Increase Indent{{crlf}}Increase the indent level of the paragraph\"></button>\n </span>\n <!-- Insert group -->\n <span class=\"ql-formats\">\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-blockquote\" aria-label=\"Blockquote\" title=\"Blockquote{{crlf}}Create a quoted block of the selected text\"></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-code-block\" aria-label=\"Insert Code Block\" title=\"Insert Code Block{{crlf}}Insert a code block at the cursor row position\"></button>\n <button class=\"ql-link\" aria-label=\"Insert Link\" title=\"Insert Hyperlink (Ctrl + K){{crlf}}Create a link to a Web page, a picture, an e-mail address or a program\"></button>\n <button *ngIf=\"!isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image\" title=\"Insert Picture{{crlf}}Insert a picture from a file\"></button>\n <button *ngIf=\"isImageUrl\" class=\"ql-image\" aria-label=\"Insert Image from URL\" title=\"Insert Picture from URL{{crlf}}Insert a picture from a remote URL\">\n <span class=\"eui-icon eui-icon-image-add\"></span></button>\n <button *ngIf=\"!isMinimalToolbar\" class=\"ql-video\" aria-label=\"Insert Video\" title=\"Insert Video{{crlf}}Insert a video from a file\"></button>\n </span>\n <!-- Clean / Clear -->\n <span class=\"ql-formats\">\n <button class=\"ql-clean\" aria-label=\"Remove Styles\" title=\"Remove Styles{{crlf}}Remove the styles of the selected text\"></button>\n <button aria-label=\"Delete\" title=\"Delete content{{crlf}}Permanently deletes editor's contents\" (click)=\"editorDeleteContent($event)\"><span class=\"eui-icon eui-icon-delete-forever\"></span></button>\n </span>\n\n <!-- Undo/Redo -->\n <span class=\"ql-formats\">\n <button aria-label=\"Undo (Ctrl + Z)\" title=\"Undo (Ctrl + Z){{crlf}}Cancels the previous action\" (click)=\"editorUndo()\"><span class=\"eui-icon eui-icon-undo\"></span></button>\n <button aria-label=\"Redo (Ctrl + Y)\" title=\"Redo (Ctrl + Y){{crlf}}Do the next history action again\" (click)=\"editorRedo()\"><span class=\"eui-icon eui-icon-redo\"></span></button>\n </span>\n <!-- Counters -->\n <span *ngIf=\"showCounters && (format === 'html' || format === 'text')\" class=\"ql-formats\">\n <ux-editor-counters [charactersCounter]=\"charactersCounter\"\n [charactersLabel]=\"charactersLabel\"\n [wordsCounter]=\"wordsCounter\"\n [wordsLabel]=\"wordsLabel\"\n [isMaxLengthValid]=\"isMaxLengthValid\"\n aria-label=\"Counters\"\n title=\"Counters{{crlf}}Characters and words counters (stripped Html)\">\n </ux-editor-counters>\n </span>\n </div>\n\n <!-- USER CUSTOM TOOLBAR (HTML FORMAT) -->\n <div *ngIf=\"customEditorToolbar\" quill-editor-toolbar (focusin)=\"onToolbarFocusIn($event)\" (focusout)=\"onToolbarFocusOut($event)\">\n <ng-content select=\"uxEditorCustomToolbar\"></ng-content>\n </div>\n </quill-editor>\n\n <!-- MAXLENGTH INDICATOR -->\n <div *ngIf=\"!isReadOnly && charactersLeft > -1\" class=\"maxlength-wrapper\" [class.maxlength-wrapper--error]=\"!isMaxLengthValid\">{{ charactersLeft }}</div>\n</div>\n\n\n<!-- READONLY MODE -->\n<div *ngIf=\"isReadOnly && !isUsedNativeEditorInReadMode\" class=\"ux-editor ux-editor--readonly {{styleClass}}\" [class.ux-editor--empty]=\"!value\" tabindex=\"{{tabindex}}\" (click)=\"enableEditorOnClickFocus($event)\" (focusin)=\"enableEditorOnClickFocus($event)\">\n <ux-editor-view-html *ngIf=\"format === 'html' || format === 'text'\" [content]=\"value\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view-html>\n <ux-editor-view *ngIf=\"format === 'object' || format === 'json'\" [content]=\"value\" [format]=\"format\" [theme]=\"theme\" [styles]=\"hasReadOnlyStyles ? style : null\"></ux-editor-view>\n</div>\n\n\n<!-- DEBUGGER -->\n<div *ngIf=\"debug\" class=\"ux-editor__debug\">\n <div class=\"ux-editor__debug-title\">UX-EDITOR debug</div>\n <div class=\"ux-editor__debug-section\">\n <strong>OPTIONS:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">id: <span class=\"eui-u-color-black\">{{generatedId}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">toolbarPosition: {{customToolbarPosition}}</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isReadOnly\" [class.ux-editor__debug-badge--off]=\"!isReadOnly\">isReadOnly</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEnabledOnFocus\" [class.ux-editor__debug-badge--off]=\"!isEnabledOnFocus\">isEnabledOnFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"preserveWhitespace\" [class.ux-editor__debug-badge--off]=\"!preserveWhitespace\">preserveWhitespace</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"spellcheck\" [class.ux-editor__debug-badge--off]=\"!spellcheck\">spellcheck</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">maxLength: <span class=\"eui-u-color-black\">{{maxLength}}</span></span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>EVENTS:</strong>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFocused\" [class.ux-editor__debug-badge--off]=\"!isFocused\">onFocus</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isBlured\" [class.ux-editor__debug-badge--off]=\"!isBlured\">onBlur</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isEditorCreated\" [class.ux-editor__debug-badge--off]=\"!isEditorCreated\">onEditorCreated</span>\n <!-- <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasEditorChanged\" [class.ux-editor__debug-badge--off]=\"!hasEditorChanged\">onEditorChanged</span> -->\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasContentChanged\" [class.ux-editor__debug-badge--off]=\"!hasContentChanged\">onContentChanged</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"hasSelectionChanged\" [class.ux-editor__debug-badge--off]=\"!hasSelectionChanged\">onSelectionChanged</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>FORM:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">controlName: <span class=\"eui-u-color-black\">{{formControlName}}</span></span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isRequired\" [class.ux-editor__debug-badge--off]=\"!isRequired\">isRequired</span>\n <span class=\"ux-editor__debug-badge\" [class.ux-editor__debug-badge--on]=\"isFormControlValid\" [class.ux-editor__debug-badge--alert]=\"!isFormControlValid\">isFormControlValid</span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">validationErrorMessage: <span class=\"eui-u-color-{{feedbackTypeClass}}\">{{formValidationErrorMessage}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--on\" [class.ux-editor__debug-badge--alert]=\"!isMaxLengthValid\">isMaxLengthValid</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>STYLE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">{{ style | json}}</span>\n </div>\n <div class=\"ux-editor__debug-section\">\n <strong>SOURCE:</strong>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">format: <span class=\"eui-u-color-black\">{{format}}</span></span>\n <span class=\"ux-editor__debug-badge ux-editor__debug-badge--off\">charactersLeft: <span [ngClass]=\"isMaxLengthValid ? 'eui-u-color-black' : 'eui-u-color-danger'\">{{charactersLeft}}</span></span>\n\n </div>\n <div class=\"ux-editor__debug-source\">\n <code *ngIf=\"format === 'text' || format === 'html'\">{{formControl.value}}</code>\n <code *ngIf=\"format === 'json' || format === 'object'\"><pre class=\"ux-editor__debug-source-code\">{{formControl.value | json}}</pre></code>\n </div>\n</div>\n", styles: ["/*!\n* eUI alignments & improvements for ux-editor based on (Ngx-)QuillJS Editor v1.3.7+\n*/.ux-editor-wrapper{position:relative}.ux-editor-wrapper .maxlength-wrapper{background-color:var(--eui-base-color-primary-50);border:1px solid var(--eui-base-color-primary-100);border-radius:3px;color:var(--eui-base-color-white);font-size:.75rem;padding:1px 3px;position:absolute;right:-.5rem;top:-.75rem;z-index:2}.ux-editor-wrapper .maxlength-wrapper.maxlength-wrapper--error{background-color:var(--eui-base-color-danger-75);border:1px solid var(--eui-base-color-danger-100)}.ux-editor{display:block;position:relative}.ux-editor--readonly{padding:var(--eui-base-spacing-s) 0 0 0}.ux-editor--readonly .ql-toolbar{display:none}.ux-editor--readonly .ql-container{border:none}.ux-editor--readonly .ql-editor{min-height:calc(var(--eui-base-spacing-2xl) + 2px);padding:0 var(--eui-base-spacing-m) 0 0!important}.ux-editor--readonly.ux-editor--empty .ql-container{border:none;outline:1px dashed var(--eui-base-color-grey-15)}.ux-editor--readonly.ux-editor--empty .ql-container:hover{outline:1px solid var(--eui-base-color-grey-20)}.ux-editor--focused .ql-container{outline:1px solid var(--eui-base-color-accent-110);box-shadow:var(--eui-base-shadow-1)}.ux-editor--editable .ql-container{background-color:var(--eui-base-color-white);border:1px solid #ccc;padding:.35rem}.ux-editor .ql-toolbar{background-color:var(--eui-base-color-grey-2);border:1px solid var(--eui-base-color-grey-15);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) 0 var(--eui-base-spacing-xs);font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-toolbar.ql-snow button{background:none;border:none;cursor:pointer;display:inline-flex;padding:3px 5px;width:28px}.ux-editor .ql-toolbar.ql-snow .ql-formats{align-items:center;background-color:var(--eui-base-color-grey-5);border:1px solid var(--eui-base-color-grey-15);border-radius:5px;display:inline-flex;margin-bottom:var(--eui-base-spacing-xs);margin-right:var(--eui-base-spacing-xs);vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker{align-items:center;color:var(--eui-base-color-grey-90);display:inline-flex;font-size:var(--eui-base-font-size);height:var(--eui-base-spacing-xl);max-height:var(--eui-base-spacing-xl);position:relative;vertical-align:middle}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-picker.ql-expanded .ql-picker-label{border-color:transparent}.ux-editor .ql-toolbar.ql-snow .ql-formats button{align-items:center;background-color:transparent;border:0 solid var(--eui-base-color-grey-15);box-shadow:none;color:var(--eui-base-color-grey-90);display:inline-flex;height:var(--eui-base-spacing-xl);justify-content:center;min-width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:hover{background:var(--eui-base-color-grey-10);color:var(--eui-base-color-info-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.active,.ux-editor .ql-toolbar.ql-snow .ql-formats button.ql-active{background:var(--eui-base-color-accent-100);color:var(--eui-base-color-primary-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:first-child{border-radius:5px 0 0 5px}.ux-editor .ql-toolbar.ql-snow .ql-formats button:last-child{border-radius:0 5px 5px 0}.ux-editor .ql-toolbar.ql-snow .ql-formats button .eui-icon{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-formats button:active,.ux-editor .ql-toolbar.ql-snow .ql-formats button:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters{align-items:center;cursor:default;display:inline-flex;width:auto}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-counter.chars-counter--error{color:var(--eui-base-color-danger-100)}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-counter{color:var(--eui-base-color-info-100);font-size:var(--eui-base-font-size-s);font-weight:900}.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .chars-label,.ux-editor .ql-toolbar.ql-snow .ql-formats button.editor-counters .words-label{color:var(--eui-base-color-grey-80);font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-formats select{background-color:transparent;border:.5px solid var(--eui-base-color-black);border-radius:5px;cursor:pointer;font-size:var(--eui-base-font-size-s);outline:0;padding:.4rem;vertical-align:middle;width:90px}.ux-editor .ql-toolbar.ql-snow .ql-formats select:active,.ux-editor .ql-toolbar.ql-snow .ql-formats select:focus{z-index:auto;border-color:var(--eui-base-color-accessible-focus)!important;box-shadow:inset 0 0 0 1px var(--eui-base-color-accessible-focus),inset 0 0 0 2px var(--eui-base-color-grey-5);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.ux-editor .ql-toolbar.ql-snow .ql-formats .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:1px}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(7 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before{content:\"Small\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smaller]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{content:\"Smaller\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=smallest]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{content:\"Smallest\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before{content:\"Large\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-label[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before{content:\"Huge\"}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=small]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-small{font-size:var(--eui-base-font-size-s)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smaller]:before{font-size:var(--eui-base-font-size-xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=smallest]:before{font-size:var(--eui-base-font-size-2xs)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=large]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-large{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-picker-item[data-value=huge]:before,.ux-editor .ql-toolbar.ql-snow .ql-size.ql-picker .ql-size-huge{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item:before{content:\"Normal\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"1\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{content:\"Heading 1\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"2\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{content:\"Heading 2\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"3\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{content:\"Heading 3\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"4\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{content:\"Heading 4\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"5\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{content:\"Heading 5\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-label[data-value=\"6\"]:before,.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{content:\"Heading 6\"}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"1\"]:before{font-size:var(--eui-base-font-size-4xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"2\"]:before{font-size:var(--eui-base-font-size-3xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"3\"]:before{font-size:var(--eui-base-font-size-2xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"4\"]:before{font-size:var(--eui-base-font-size-xl)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"5\"]:before{font-size:var(--eui-base-font-size-l)}.ux-editor .ql-toolbar.ql-snow .ql-header.ql-picker .ql-picker-item[data-value=\"6\"]:before{font-size:var(--eui-base-font-size-m)}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker{height:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-2xs) 0;width:calc(8 * var(--eui-base-spacing-m))}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item:before{content:\"Sans Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=serif]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{content:\"Serif\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-label[data-value=monospace]:before,.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{content:\"Monospace\"}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=sans-serif]:before{font-family:arial,sans-serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=serif]:before{font-family:times new roman,serif!important}.ux-editor .ql-toolbar.ql-snow .ql-font.ql-picker .ql-picker-item[data-value=monospace]:before{font-family:courier new,monospace!important}.ux-editor .ql-toolbar.ql-snow .ql-color-picker{width:var(--eui-base-spacing-xl)}.ux-editor .ql-toolbar.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px;display:inline-flex}.ux-editor .ql-container{box-sizing:border-box;height:100%;margin:0;position:relative;resize:vertical;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-container:focus{outline:1px solid var(--eui-base-color-accent-110)}.ux-editor .ql-editor{box-sizing:border-box;height:100%;line-height:var(--eui-base-line-height);outline:none;overflow-y:auto;padding:var(--eui-base-spacing-s);tab-size:4;text-align:left;white-space:pre-wrap;word-break:normal;word-wrap:break-word;font-family:var(--eui-base-font-family);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400}.ux-editor .ql-editor h1{font-size:var(--eui-base-font-size-4xl)!important}.ux-editor .ql-editor h2{font-size:var(--eui-base-font-size-3xl)!important}.ux-editor .ql-editor h3{font-size:var(--eui-base-font-size-2xl)!important}.ux-editor .ql-editor h4{font-size:var(--eui-base-font-size-xl)!important}.ux-editor .ql-editor h5{font-size:var(--eui-base-font-size-l)!important}.ux-editor .ql-editor h6{font-size:var(--eui-base-font-size-m)!important}.ux-editor .ql-editor .h7{font-size:var(--eui-base-font-size-s)!important}.ux-editor .ql-editor .h8{font-size:var(--eui-base-font-size-xs)!important}.ux-editor .ql-editor .h9{font-size:var(--eui-base-font-size-2xs)!important}.ux-editor .ql-editor p{padding-bottom:var(--eui-base-spacing-s)!important}.ux-editor .ql-editor p:last-child{padding-bottom:0!important}.ux-editor .ql-editor em,.ux-editor .ql-editor i{font-style:italic!important}.ux-editor .ql-editor strong,.ux-editor .ql-editor b{font-weight:700!important}.ux-editor .ql-editor strong em,.ux-editor .ql-editor strong i,.ux-editor .ql-editor b em,.ux-editor .ql-editor b i{font-style:italic!important;font-weight:700!important}.ux-editor .ql-editor strong em u,.ux-editor .ql-editor strong i u,.ux-editor .ql-editor b em u,.ux-editor .ql-editor b i u{text-decoration:underline!important}.ux-editor .ql-editor blockquote{border-left:var(--eui-base-spacing-xs) solid var(--eui-base-color-grey-20);margin-bottom:0;margin-top:0;padding-left:var(--eui-base-spacing-m)}.ux-editor .ql-editor code,.ux-editor .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ux-editor .ql-editor pre{margin-bottom:var(--eui-base-spacing-xs);margin-top:var(--eui-base-spacing-xs);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-m);white-space:pre-wrap}.ux-editor .ql-editor code{font-size:85%;padding:2px 4px;word-break:break-word}.ux-editor .ql-editor ol,.ux-editor .ql-editor ul{padding-left:0}.ux-editor .ql-editor ol{counter-reset:inherit}.ux-editor .ql-editor pre.ql-syntax{background-color:var(--eui-base-color-grey-80);color:#f5f5f5;overflow:visible}.ux-editor .ql-editor iframe,.ux-editor .ql-editor img{display:inline-block;height:1;width:1}.ux-editor .ql-editor.ql-blank:before{left:var(--eui-base-spacing-m);position:absolute;right:0}.ux-editor .ql-tooltip{background-color:var(--eui-base-color-grey-10);left:50%!important;margin:0 auto;outline:2px solid var(--eui-base-color-primary-100);position:absolute;top:50%!important;transform:translate(-50%,-50%)!important;width:70%;box-shadow:var(--eui-base-shadow-1)}.ux-editor .ql-tooltip input[type=text]{border:1px solid #ccc;display:none;font-size:13px;height:26px;margin:0;padding:3px 5px;width:75%}.ux-editor .ql-tooltip a.ql-preview{display:inline-block;max-width:60%;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top;width:100%}.ux-editor__debug{background-color:#fff3cd;border:1px solid #f5c6cb;border-radius:.25rem;color:#856404;font:.85rem consolas,monospace,sans-serif;margin:var(--eui-base-spacing-m) 0;padding:var(--eui-base-spacing-s) 1.25rem;position:relative}.ux-editor__debug-section{align-items:center;display:flex;flex-wrap:wrap;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-title{color:#e83e8c;font-size:var(--eui-base-font-size-xl);font-weight:900;padding-bottom:var(--eui-base-spacing-xs)}.ux-editor__debug-badge{font-size:var(--eui-base-font-size-xs);font-weight:400;margin:0 var(--eui-base-spacing-2xs);padding:var(--eui-base-spacing-3xs) var(--eui-base-spacing-xs)}.ux-editor__debug-badge--off{background-color:#e8e0c4;border:1px solid #d2d2d2;color:#888}.ux-editor__debug-badge--on{background-color:#28a745;border:1px solid #218037;color:var(--eui-base-color-white)}.ux-editor__debug-badge--alert{background-color:#dc3545;border:1px solid #721d25;color:var(--eui-base-color-white)}.ux-editor__debug-source{background-color:#ffeeba;font-size:var(--eui-base-font-size);height:auto;max-height:150px;outline:1px dashed silver;overflow-y:auto;padding:var(--eui-base-spacing-xs);position:relative}.ux-editor__debug-source-code{color:#e83e8c;font:90% consolas,monospace}.ux-editor__debug code{font-size:var(--eui-base-font-size-xs)}.ux-editor__about{background:var(--eui-base-color-white);display:block;height:10rem;left:50%;overflow-y:auto;padding:var(--eui-base-spacing-m);position:absolute;transform:translate(-50%,25%);width:20rem;z-index:1;box-shadow:var(--eui-base-shadow-3)}ux-editor.ng-invalid.ng-touched .ux-editor:not(.ux-editor--readonly) .ql-container{outline:1px solid var(--eui-base-color-danger-100)}\n"] }]
|
|
467
497
|
}], ctorParameters: function () { return [{ type: i4.UxFormGroupComponent, decorators: [{
|
|
468
498
|
type: Optional
|
|
469
499
|
}, {
|
|
@@ -619,4 +649,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImpor
|
|
|
619
649
|
],
|
|
620
650
|
}]
|
|
621
651
|
}] });
|
|
622
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXgtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC1lZGl0b3IvdXgtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC1lZGl0b3IvdXgtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXFCLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQzNGLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQXdCLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsTUFBTTtBQUNOLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTVFLFFBQVE7QUFDUixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRSxRQUFRO0FBQ1IsT0FBTyxFQUFFLFdBQVcsRUFBOEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBQzlELHlD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bmUtbGVuZ3RoXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgTmdNb2R1bGUsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgT25EZXN0cm95LCBPcHRpb25hbCwgSG9zdCwgSW5qZWN0LCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSxcbiAgICAgICAgIFF1ZXJ5TGlzdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBTZWxmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLy8gZVVJXG5pbXBvcnQgeyBVeEZvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9sZWdhY3kvdXgtZm9ybS1ncm91cCc7XG5cbi8vIExvY2FsXG5pbXBvcnQgeyBVeEVkaXRvclZpZXdDb21wb25lbnQgfSBmcm9tICcuL3V4LWVkaXRvci12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVeEVkaXRvclZpZXdIVE1MQ29tcG9uZW50IH0gZnJvbSAnLi91eC1lZGl0b3Itdmlldy1odG1sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVeEVkaXRvckNvdW50ZXJzQ29tcG9uZW50IH0gZnJvbSAnLi91eC1lZGl0b3ItY291bnRlcnMuY29tcG9uZW50JztcblxuLy8gUXVpbGxcbmltcG9ydCB7IFF1aWxsTW9kdWxlLCBRdWlsbE1vZHVsZXMsIEN1c3RvbU9wdGlvbiB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9leHRlcm5hbHMvcXVpbGwnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG5sZXQgUXVpbGw6IGFueSA9IHdpbmRvd1snUXVpbGwnXTtcblxuLy8gRGVmYXVsdCBlZGl0b3Igb3B0aW9ucyAodG8gYmUgcGFzc2VkIHRocm91Z2ggbW9kdWxlcylcbmNvbnN0IGRlZmF1bHRFZGl0b3JPcHRpb25zID0ge1xuICAgIHRvb2xiYXI6IHRydWUsXG4gICAgY2xpcGJvYXJkOiB0cnVlLFxuICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgZGVsYXk6IDEwMDAsXG4gICAgICAgIG1heFN0YWNrOiAxMDAsXG4gICAgICAgIHVzZXJPbmx5OiB0cnVlXG4gICAgfVxufTtcbmNvbnN0IGN1c3RvbUVkaXRvck9wdGlvbnMgPSB7XG4gICAgaW1wb3J0OiAnZm9ybWF0cy9mb250JyxcbiAgICB3aGl0ZWxpc3Q6IFsncm9ib3RvJ10sXG59O1xuXG5pbnRlcmZhY2UgTGlua1BsdWdpbiB7XG4gICAgY3JlYXRlKHZhbHVlKTtcbiAgICBmb3JtYXRzKGRvbU5vZGUpO1xuICAgIHNhbml0aXplKHVybCk7XG4gICAgZm9ybWF0KG5hbWUsIHZhbHVlKTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1eC1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91eC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgLy8gVmFsdWUgYWNjZXNzb3JzICYgdmFsaWRhdG9ycyBhbHJlYWR5IHVzZWQgYnkgUXVpbGwgZWRpdG9yXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vS2lsbGVyQ29kZU1vbmtleS9uZ3gtcXVpbGwvYmxvYi9tYXN0ZXIvc3JjL3F1aWxsLWVkaXRvci5jb21wb25lbnQudHNcbn0pXG5cbmV4cG9ydCBjbGFzcyBVeEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICAgIEBJbnB1dCgpIGUyZUF0dHI6IHN0cmluZyA9ICd1eC1lZGl0b3InO1xuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG5cbiAgICAvLyBDT01NT04gT1BUSU9OUyAoT0xEIEJBU0UpXG4gICAgQElucHV0KCkgc3R5bGU6IGFueSA9IG51bGw7ICAgIC8vIG1hcHBlZCB0byBORVcgc3R5bGVzXG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgZm9ybWF0cz86IHN0cmluZ1tdIHwgbnVsbDsgICAgICAvLyBtdWx0aXBsZSBmb3JtYXRzIGNvbnRlbnQgKHNlZSBpbnNlcnRUZXh0IG1ldGhvZClcbiAgICBASW5wdXQoKSBmb3JtYXQ/OiAnb2JqZWN0JyB8ICdodG1sJyB8ICd0ZXh0JyB8ICdqc29uJyA9ICdodG1sJzsgICAgIC8vIHNpbmdsZSBmb3JtYXQgY29udGVudFxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzRW5hYmxlZE9uRm9jdXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc0VuYWJsZWRPbkZvY3VzOyB9XG4gICAgc2V0IGlzRW5hYmxlZE9uRm9jdXModmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzRW5hYmxlZE9uRm9jdXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNFbmFibGVkT25Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVhZE9ubHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1JlYWRPbmx5OyB9XG4gICAgc2V0IGlzUmVhZE9ubHkodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzUmVhZE9ubHkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlOyAgIC8vIG1hcHBlZCB0byBORVcgcmVhZE9ubHlcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1VzZWROYXRpdmVFZGl0b3JJblJlYWRNb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNVc2VkTmF0aXZlRWRpdG9ySW5SZWFkTW9kZTsgfSAvLyB1c2VkIHRvIGFsbG93IG5hdGl2ZSBlZGl0b3IgUXVpbGwgdG8gcmVuZGVyIHRoZSBIdG1sIGFuZCBhcHBseSBpdHMgc3R5bGVzLlxuICAgIHNldCBpc1VzZWROYXRpdmVFZGl0b3JJblJlYWRNb2RlKHZhbHVlOiBib29sZWFufHN0cmluZykgeyB0aGlzLl9pc1VzZWROYXRpdmVFZGl0b3JJblJlYWRNb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzVXNlZE5hdGl2ZUVkaXRvckluUmVhZE1vZGU/OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgY3VzdG9tVG9vbGJhck9wdGlvbnM/OiBhbnk7XG4gICAgQElucHV0KCkgdGhlbWU/OiAnc25vdycgfCAnYnViYmxlJyA9ICdzbm93JztcbiAgICBASW5wdXQoKSBkZWJ1Zz86ICd3YXJuJyB8ICdsb2cnIHwgJ2Vycm9yJyB8IHRydWUgfCBmYWxzZSA9IGZhbHNlOyAgIC8vIHRydWUgPSBsb2dcbiAgICBASW5wdXQoKSAvLyBERVBSRUNBVEVEIC0gTm8gbW9yZSBuZWVkZWQhIGlzUmVhZE9ubHkgaXMgZW5vdWdoXG4gICAgZ2V0IGlzRWRpdGFibGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc0VkaXRhYmxlOyB9XG4gICAgc2V0IGlzRWRpdGFibGUodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzRWRpdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNFZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gTkVXIEZPUk0gT1BUSU9OUyBGT1IgRk9STSBWQUxEQVRJT04gKHNlZSBPbkluaXQpXG4gICAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZmVlZGJhY2tUeXBlQ2xhc3M6IHN0cmluZyA9ICdkYW5nZXInO1xuICAgIEBJbnB1dCgpIHZhbGlkYXRpb25FcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICAgIC8vIE5FVyBJTlBVVCBPUFRJT05TXG4gICAgQElucHV0KCkgdGFiaW5kZXg6IHN0cmluZyA9ICcwJztcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNSZWFkT25seVN0eWxlcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2hhc1JlYWRPbmx5U3R5bGVzOyB9XG4gICAgc2V0IGhhc1JlYWRPbmx5U3R5bGVzKHZhbHVlOiBib29sZWFufHN0cmluZykgeyB0aGlzLl9oYXNSZWFkT25seVN0eWxlcyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9oYXNSZWFkT25seVN0eWxlczogYm9vbGVhbiA9IGZhbHNlOyAgLy8gQWxsb3dzIHRoZSB2aWV3ZXIgdG8gdXNlIHN0eWxlcyB3aGVuIGlzUmVhZE9ubHk9dHJ1ZVxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTWluaW1hbFRvb2xiYXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc01pbmltYWxUb29sYmFyOyB9XG4gICAgc2V0IGlzTWluaW1hbFRvb2xiYXIodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzTWluaW1hbFRvb2xiYXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNNaW5pbWFsVG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlOyAgLy8gQWxsb3dzIHRvIGRpc3BsYXkgbWluaW1hbCBmZWF0dXJlcyBmcm9tIGRlZmF1bHQgdG9vbGJhclxuICAgIEBJbnB1dCgpIG1vZHVsZXM/OiBRdWlsbE1vZHVsZXMgPSBkZWZhdWx0RWRpdG9yT3B0aW9ucztcbiAgICBASW5wdXQoKSBtYXhMZW5ndGg/OiBudW1iZXI7XG4gICAgQElucHV0KCkgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpIC8vIGZvcm0gdmFsaWRhdG9yIHJlcXVpcmVkIVxuICAgIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNSZXF1aXJlZDsgfVxuICAgIHNldCBpc1JlcXVpcmVkKHZhbHVlOiBib29sZWFufHN0cmluZykgeyB0aGlzLl9pc1JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjdXN0b21Ub29sYmFyUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgPSAndG9wJztcbiAgICAvLyBASW5wdXQoKSBzYW5pdGl6ZT86IHRydWUgfCBmYWxzZSA9IHRydWU7ICAgICAvLyBTZWN1cml0eTogcmVtb3ZlZCBhcyBpbnB1dCBvcHRpb24hIEFsd2F5cyB0cnVlIVxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHN0cmljdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3N0cmljdDsgfVxuICAgIHNldCBzdHJpY3QodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX3N0cmljdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9zdHJpY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzVXNlZFNhbml0aXphdGlvbkZvckh0bWwoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1VzZWRTYW5pdGl6YXRpb25Gb3JIdG1sOyB9XG4gICAgc2V0IGlzVXNlZFNhbml0aXphdGlvbkZvckh0bWwodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzVXNlZFNhbml0aXphdGlvbkZvckh0bWwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNVc2VkU2FuaXRpemF0aW9uRm9ySHRtbDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgc2Nyb2xsaW5nQ29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBzdHJpbmcgfCBudWxsO1xuICAgIEBJbnB1dCgpIGJvdW5kcz86IEhUTUxFbGVtZW50IHwgc3RyaW5nO1xuICAgIEBJbnB1dCgpIGN1c3RvbU9wdGlvbnM6IEN1c3RvbU9wdGlvbltdID0gW2N1c3RvbUVkaXRvck9wdGlvbnNdIHx8IFtdO1xuICAgIEBJbnB1dCgpIHRyYWNrQ2hhbmdlcz86ICd1c2VyJyB8ICdhbGwnO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHByZXNlcnZlV2hpdGVzcGFjZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3ByZXNlcnZlV2hpdGVzcGFjZTsgfVxuICAgIHNldCBwcmVzZXJ2ZVdoaXRlc3BhY2UodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX3ByZXNlcnZlV2hpdGVzcGFjZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9wcmVzZXJ2ZVdoaXRlc3BhY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBzcGVsbGNoZWNrKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fc3BlbGxjaGVjazsgfVxuICAgIHNldCBzcGVsbGNoZWNrKHZhbHVlOiBib29sZWFufHN0cmluZykgeyB0aGlzLl9zcGVsbGNoZWNrID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX3NwZWxsY2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBzaG93Q291bnRlcnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zaG93Q291bnRlcnM7IH1cbiAgICBzZXQgc2hvd0NvdW50ZXJzKHZhbHVlOiBib29sZWFufHN0cmluZykgeyB0aGlzLl9zaG93Q291bnRlcnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfc2hvd0NvdW50ZXJzOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0ltYWdlVXJsKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNJbWFnZVVybDsgfVxuICAgIHNldCBpc0ltYWdlVXJsKHZhbHVlOiBib29sZWFufHN0cmluZykgeyB0aGlzLl9pc0ltYWdlVXJsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzSW1hZ2VVcmw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qICBERVBSRUNBVEVEIChPTEQpICAgICAgICAgICAgICAgIE5FV1xuICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIChvbkluaXQpICAgICAgICAgICAgICAgID0+ICAgICAgKG9uRWRpdG9yQ3JlYXRlZClcbiAgICAgICAgKG9uVGV4dENoYW5nZSkgICAgICAgICAgPT4gICAgICAob25Db250ZW50Q2hhbmdlZClcbiAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKSAgICAgPT4gICAgICAob25TZWxlY3Rpb25DaGFuZ2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkVkaXRvckNyZWF0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uRWRpdG9yQ2hhbmdlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Db250ZW50Q2hhbmdlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Gb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25CbHVyKSAgICAgICAgICAgICAqL1xuXG4gICAgLy8gT0xEIEVNSVRURVJTIChLZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSAtIFRPIEJFIERFUFJFQ0FURURcbiAgICBAT3V0cHV0KCkgb25Jbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLy8gTkVXIEVNSVRURVJTXG4gICAgQE91dHB1dCgpIG9uRWRpdG9yQ3JlYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uRWRpdG9yQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uQ29udGVudENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBnZXRDaGFyYWN0ZXJzQ291bnRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGdldFdvcmRzQ291bnRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBxdWlsbEVkaXRvcjogYW55OyAgIC8vIFRoaXMgUXVpbGwgaW5zdGFuY2VcbiAgICBjcmxmOiBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDEwLCAxMyk7ICAgICAvLyBmb3IgdG9vbHRpcCBDUitMRlxuICAgIGVkaXRvckNvbmZpZyA9IFtdO1xuICAgIHZhbHVlOiBhbnkgPSAnJztcbiAgICBsYXN0VmFsaWRWYWx1ZTogYW55O1xuICAgIHNhbml0aXplID0gdHJ1ZTsgICAgLy8gU2VjdXJpdHk6IGFsd2F5cyBzZXQgc2FuaXRpemluZyB0byB0cnVlIVxuICAgIGlzRW5hYmxlZE9uRm9jdXNCYWNrdXA6IGJvb2xlYW4gPSBmYWxzZTsgICAvLyBiYWNrdXAgJiByZXN0b3JlIG9mIHRoZSBpc0VuYWJsZWRPbkZvY3VzIG9yaWdpbmFsIG9wdGlvblxuICAgIGRpc3BsYXlBYm91dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gQ291bnRlcnNcbiAgICBwdWJsaWMgY2hhcmFjdGVyc0NvdW50ZXI6IG51bWJlcjtcbiAgICBwdWJsaWMgd29yZHNDb3VudGVyOiBudW1iZXI7XG4gICAgcHVibGljIGNoYXJhY3RlcnNMYWJlbCA9ICdjaGFyYWN0ZXJzJztcbiAgICBwdWJsaWMgd29yZHNMYWJlbCA9ICd3b3Jkcyc7XG4gICAgcHVibGljIGlzTWF4TGVuZ3RoVmFsaWQgPSB0cnVlO1xuICAgIHB1YmxpYyBjaGFyYWN0ZXJzTGVmdDogbnVtYmVyO1xuXG4gICAgLy8gRGVidWdnZXIgZXZlbnRzICYgbWlzY1xuICAgIHB1YmxpYyBpc0JsdXJlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNFZGl0b3JDcmVhdGVkID0gZmFsc2U7XG4gICAgcHVibGljIGhhc0VkaXRvckNoYW5nZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaGFzQ29udGVudENoYW5nZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaGFzU2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc1Rvb2xiYXJUb3VjaGVkID0gZmFsc2U7XG4gICAgcHVibGljIGZvcm1WYWxpZGF0aW9uRXJyb3JNZXNzYWdlID0gJyc7XG4gICAgcHVibGljIGZvcm1Db250cm9sU3RhdHVzOiBzdHJpbmc7XG4gICAgcHVibGljIGlzRm9ybUNvbnRyb2xWYWxpZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBhcmlhSW52YWxpZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBnZW5lcmF0ZWRJZDogc3RyaW5nO1xuICAgIHB1YmxpYyBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAgIHByaXZhdGUgdXhGb3JtR3JvdXBDb21wb25lbnQ6IFV4Rm9ybUdyb3VwQ29tcG9uZW50O1xuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBVeEVkaXRvckN1c3RvbVRvb2xiYXJUYWdEaXJlY3RpdmUpLCB7IHN0YXRpYzogdHJ1ZSB9KSBjdXN0b21FZGl0b3JUb29sYmFyOiBRdWVyeUxpc3Q8VXhFZGl0b3JDdXN0b21Ub29sYmFyVGFnRGlyZWN0aXZlPjtcblxuICAgIGNvbnN0cnVjdG9yKCBAT3B0aW9uYWwoKSBASG9zdCgpIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBVeEZvcm1Hcm91cENvbXBvbmVudCkpIHV4Rm9ybUdyb3VwQ29tcG9uZW50OiBVeEZvcm1Hcm91cENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sKSB7XG4gICAgICAgIC8vIEluamVjdCBOZ0NvbnRyb2wgdmFsdWUgYWNjZXNzb3IgdG8gc2VsZlxuICAgICAgICAvLyBUaGlzIHJlcGxhY2VzIGluamVjdG9yLmdldChOZ0NvbnRyb2wpIHdoaWNoIGlzIHRocm93aW5nIGEgZGVwcmVjYXRpb24gd2FybmluZ1xuICAgICAgICAvLyBBbHNvIHJlbW92ZWQgTkdfVkFMVUVfQUNDRVNTT1IgZnJvbSB0aGUgcHJvdmlkZXJzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnV4Rm9ybUdyb3VwQ29tcG9uZW50ID0gdXhGb3JtR3JvdXBDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlcGxhY2UgZGVmYXVsdCBUb29sYmFyIHdpdGggY3VzdG9tXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVRvb2xiYXJPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZXMgPSB7IC4uLnRoaXMubW9kdWxlcywgLi4ueyB0b29sYmFyOiB0aGlzLmN1c3RvbVRvb2xiYXJPcHRpb25zIH0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhY2t1cCBvcmlnaW5hbCB2YWx1ZSBvZiBpc0VuYWJsZWRPbkZvY3VzIG9wdGlvblxuICAgICAgICB0aGlzLmlzRW5hYmxlZE9uRm9jdXNCYWNrdXAgPSB0aGlzLmlzRW5hYmxlZE9uRm9jdXM7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIGlkIGZvciB1eC1lZGl0b3IgaW5zdGFuY2VcbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRJZCA9IHRoaXMuaWQgPyB0aGlzLmlkIDogJ3V4LWVkaXRvci0nICsgKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApICsgMSkudG9TdHJpbmcoKTtcblxuICAgICAgICBpZiAodGhpcy51eEZvcm1Hcm91cENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudC5pZCA9IHRoaXMuZ2VuZXJhdGVkSWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV4Rm9ybUdyb3VwQ29tcG9uZW50LnZhbGlkYXRpb25FcnJvck1lc3NhZ2UgPSB0aGlzLnZhbGlkYXRpb25FcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudC52YWxpZGF0aW9uRXJyb3JGZWVkYmFja0NsYXNzID0gdGhpcy5mZWVkYmFja1R5cGVDbGFzcztcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3JNZXNzYWdlID0gdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudC52YWxpZGF0aW9uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQuaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQuaXNSZXF1aXJlZCA9IHRoaXMuaXNSZXF1aXJlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlcXVpcmVkID0gdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudC5pc1JlcXVpcmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sU3RhdHVzQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ25nT25DaGFuZ2VzKCkgY2hhbmdlczonLCBjaGFuZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGlmICggY2hhbmdlcy5pc0VuYWJsZWRPbkZvY3VzICYmIGNoYW5nZXMuaXNFbmFibGVkT25Gb2N1cy5jdXJyZW50VmFsdWUgPT09IHRydWUgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRPbkZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHRoZSBpc0VuYWJsZWRPbkZvY3VzPXRydWUgb3B0aW9uXG4gICAgICAgICAgICBpZiAoIGNoYW5nZXMuaXNSZWFkT25seSApIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlcy5pc1JlYWRPbmx5LmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRW5hYmxlZE9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRWRpdGlvbiBtb2RlXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZXMuaXNSZWFkT25seS5jdXJyZW50VmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sU3RhdHVzQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZXMgZGVmYXVsdCBpbWFnZSBoYW5kbGVyIChlbWJlZGRlZCBCNjQgY29udGVudCBmcm9tIGZpbGUpIHdpdGggVVJMIGltYWdlcyBpbnN0ZWFkXG4gICAgcHVibGljIHNldEltYWdlVXJsSGFuZGxlcihlZGl0b3JJbnN0YW5jZTogYW55KSB7XG4gICAgICAgIGlmIChlZGl0b3JJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5xdWlsbEVkaXRvciA9IGVkaXRvckluc3RhbmNlO1xuICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IGVkaXRvckluc3RhbmNlLmdldE1vZHVsZSgndG9vbGJhcicpO1xuICAgICAgICAgICAgdG9vbGJhci5hZGRIYW5kbGVyKCdpbWFnZScsIHRoaXMuaW1hZ2VIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpbWFnZUhhbmRsZXIgPSAoaW1hZ2UsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbEVkaXRvci5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9tcHQoJ0VudGVyIGltYWdlIGxpbmsgVVJMJyk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5xdWlsbEVkaXRvci5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgJ2ltYWdlJywgdmFsdWUsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT09MQkFSIEVYVFJBUyAoZVVJIEN1c3RvbXMpXG4gICAgcHVibGljIGVkaXRvclVuZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucXVpbGxFZGl0b3IuaGlzdG9yeS51bmRvKCk7XG4gICAgfVxuICAgIHB1YmxpYyBlZGl0b3JSZWRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1aWxsRWRpdG9yLmhpc3RvcnkucmVkbygpO1xuICAgIH1cbiAgICBwdWJsaWMgZWRpdG9yRGVsZXRlQ29udGVudChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGFsbCBlZGl0b3JcXCdzIGNvbnRlbnQ/JykpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3Iuc2V0Q29udGVudHMoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3Iuc2V0VGV4dCgnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGVkaXRvckFib3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlBYm91dCA9ICF0aGlzLmRpc3BsYXlBYm91dDtcbiAgICB9XG5cbiAgICAvLyBUT0dHTEVTXG4gICAgcHVibGljIHRvZ2dsZVJlYWRPbmx5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSAhdGhpcy5pc1JlYWRPbmx5O1xuICAgIH1cbiAgICBwdWJsaWMgdG9nZ2xlUmVxdWlyZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNSZXF1aXJlZCA9ICF0aGlzLmlzUmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgLy8gUkVBRE9OTFkgTU9ERSBGdW5jdGlvbnNcbiAgICBwdWJsaWMgZW5hYmxlRWRpdG9yT25DbGlja0ZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkT25Gb2N1cykge1xuICAgICAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gZmFsc2U7ICAgICAgICAvLyBzaG93IHRvb2xiYXJcbiAgICAgICAgICAgIC8vIHRoaXMuaXNFbmFibGVkT25Gb2N1cyA9IGZhbHNlOyAgLy8gRGlzYWJsZSB0aGUgaXNFbmFibGVkT25Gb2N1cyB3aGVuIGZvY3VzZWQgdG8gYXZvaWQgbG9zdCBmb2N1cyB3aGVuIHVzaW5nIHRvb2xiYXIgYWN0aW9uc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9PTEJBUiBFVkVOVFMgLyBGVU5DVElPTlNcbiAgICAvLyBGb3JjZSByZW1haW5pbmcgb24gRWRpdG9yIHdoZW4gdG91Y2hpbmcgdGhlIHRvb2xiYXIgYWN0aW9uc1xuICAgIHB1YmxpYyBvblRvb2xiYXJGb2N1c0luKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uVG9vbGJhckZvY3VzSW4oKSB0cmlnZ2VyZWQnKTtcbiAgICAgICAgdGhpcy5pc1Rvb2xiYXJUb3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gUmVzZXQgdG9vbGJhciB0b3VjaGVkIHN0YXRlIG9uIGV4aXRcbiAgICBwdWJsaWMgb25Ub29sYmFyRm9jdXNPdXQoZXZlbnQ6IGFueSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnb25Ub29sYmFyRm9jdXNPdXQoKSB0cmlnZ2VyZWQnKTtcbiAgICAgICAgdGhpcy5pc1Rvb2xiYXJUb3VjaGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRVZFTlQgSEFORExFUlMgRU1JVFRFUlNcbiAgICBwdWJsaWMgb25FZGl0b3JDcmVhdGVkRW1pdCggZXZlbnQ6IGFueSApIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcgPT09ICdsb2cnKSB7IGNvbnNvbGUubG9nKCdlZGl0b3ItY3JlYXRlZCcsIGV2ZW50KTsgfVxuICAgICAgICAvLyBTdGFydGluZyBwb2ludCBldmVudCByZXR1cm5zIHRoZSBRdWlsbCBpbnN0YW5jZVxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3IgPSBldmVudDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSAnaHRtbCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMucXVpbGxFZGl0b3IuY2xpcGJvYXJkLmNvbnZlcnQoeyBodG1sOiB0aGlzLnZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkZWx0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWlsbEVkaXRvci5zZXRDb250ZW50cyhkZWx0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25Jbml0LmVtaXQoZXZlbnQpOyAgICAvLyBPTEQgS0VFUCEgVE8gQkUgREVQUkVDQVRFRFxuICAgICAgICAgICAgdGhpcy5vbkVkaXRvckNyZWF0ZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdG9yQ3JlYXRlZCA9IHRydWU7ICAgIC8vIEZvciBkZWJ1Z2dlclxuICAgICAgICAgICAgLy8gU2V0IGZvY3VzIHdoZW4gbmF2aWdhdGluZyB3aXRoIHRhYiBrZXlcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZE9uRm9jdXNCYWNrdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JTZXRGb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSW1wb3J0ICYgcmVnaXN0ZXIgbmV3IG1vZHVsZSBmb3IgY3VzdG9tIExpbmsgaW5zZXJ0IHdpdGggZW5jb2RlZCBVUkkgKEVVSS0xNTc1KVxuICAgICAgICAgICAgdGhpcy5fZ2V0RW5jb2RlZFVSSUxpbmsoKTtcbiAgICAgICAgICAgIC8vIFVzZSBVUkwgaW1hZ2VzIGluc3RlYWQgb2YgZW1iZWRkZWQgQjY0IGNvbnRlbnQgKG92ZXJyaWRlcyBkZWZhdWx0IGltYWdlIGhhbmRsZXIpXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ltYWdlVXJsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZVVybEhhbmRsZXIodGhpcy5xdWlsbEVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIG9uRWRpdG9yQ2hhbmdlZEVtaXQoIGV2ZW50OiBhbnkgKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnZWRpdG9yLWNoYW5nZWQnLCBldmVudCk7IH1cbiAgICAgICAgdGhpcy5vbkVkaXRvckNoYW5nZWQuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuaGFzRWRpdG9yQ2hhbmdlZCA9IHRydWU7ICAgIC8vIEZvciBkZWJ1Z2dlclxuICAgIH1cbiAgICBwdWJsaWMgb25Db250ZW50Q2hhbmdlZEVtaXQoIGV2ZW50OiBhbnkgKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnY29udGVudC1jaGFuZ2VkJywgZXZlbnQpOyB9XG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoZXZlbnQpOyAgLy8gT0xEIEtFRVAhIFRPIEJFIERFUFJFQ0FURURcbiAgICAgICAgdGhpcy5vbkNvbnRlbnRDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLmhhc0NvbnRlbnRDaGFuZ2VkID0gdHJ1ZTsgICAgLy8gRm9yIGRlYnVnZ2VyXG4gICAgICAgIC8vIFVwZGF0ZSBlZGl0b3IncyB2YWx1ZVxuICAgICAgICBzd2l0Y2ggKHRoaXMuZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50LnRleHQ7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVDb3VudGVycyggdGhpcy52YWx1ZSApOyAgICAvLyBVcGRhdGUgY291bnRlcnNcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBKU09OLnN0cmluZ2lmeSggZXZlbnQuY29udGVudCApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZXZlbnQuY29udGVudDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50Lmh0bWw7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVDb3VudGVycyggdGhpcy52YWx1ZSApOyAgICAvLyBVcGRhdGUgY291bnRlcnNcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSggdGhpcy52YWx1ZSApO1xuICAgIH1cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2VkRW1pdCggZXZlbnQ6IGFueSApIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcgPT09ICdsb2cnKSB7IGNvbnNvbGUubG9nKCdzZWxlY3Rpb24tY2hhbmdlZCcsIGV2ZW50KTsgfVxuICAgICAgICB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyAgICAvLyBGb3IgZGVidWdnZXJcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTsgLy8gT0xEIEtFRVAhIFRPIEJFIERFUFJFQ0FURURcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChldmVudCk7XG4gICAgfVxuICAgIHB1YmxpYyBvbkZvY3VzRW1pdCggZXZlbnQ6IGFueSApIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcgPT09ICdsb2cnKSB7IGNvbnNvbGUubG9nKCdvbkZvY3VzJywgZXZlbnQpOyB9XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0JsdXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdCh0cnVlKTtcbiAgICB9XG4gICAgcHVibGljIG9uQmx1ckVtaXQoIGV2ZW50OiBhbnkgKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnb25CbHVyJywgZXZlbnQpOyB9XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNCbHVyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8vIENPTlRST0wgVkFMVUUgQUNDRVNTT1JTXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChtb2RlbFZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlZCA9IGZuO1xuICAgIH1cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIEVVSS0zNTY4XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcgPT09ICdsb2cnKSB7IGNvbnNvbGUubG9nKCdDb250cm9sVmFsdWVBY2Nlc3NvcnM6IHdyaXRlVmFsdWUoKTonLCB2YWx1ZSk7IH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSB8fCBudWxsO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ291bnRlcnModGhpcy52YWx1ZSk7ICAgIC8vIFNldCBpbml0aWFsIGNvdW50ZXJzXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIGxhc3QgY29ycmVjdCBpbnB1dCB2YWx1ZSB3aGVuIGZvcm1Db250cm9sIGlzIHZhbGlkXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmZvcm1Db250cm9sU3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0VmFsaWRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gICAgcHVibGljIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKSA9PiB7IH07XG4gICAgcHVibGljIG9uVmFsaWRhdG9yQ2hhbmdlZCA9ICgpID0+IHsgfTtcblxuICAgIC8vIFBSSVZBVEUgRlVOQ1RJT05TXG4gICAgcHJpdmF0ZSBfZWRpdG9yU2V0Rm9jdXMoKSB7XG4gICAgICAgIC8vIFNldCBmb2N1cyB0byBxbC1lZGl0b3IgZGl2IGNvbnRhaW5lclxuICAgICAgICBpZiAodGhpcy5xdWlsbEVkaXRvcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWlsbEVkaXRvci5mb2N1cygpO1xuICAgICAgICAgICAgICAgIC8vIERvIE5PVCB1c2UgcGF0Y2hWYWx1ZSBoZXJlIHNpbmNlIGl0IHJlc2V0cyBlZGl0b3IncyBjdXJzb3IgcG9zaXRpb24gISFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9tIExpbmsgaW5zZXJ0IHdpdGggZW5jb2RlZCBVUkkgb3ZlcnJpZGVcbiAgICBwcml2YXRlIF9nZXRFbmNvZGVkVVJJTGluaygpIHtcbiAgICAgICAgbGV0IExpbms6IExpbmtQbHVnaW4gPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvbGluaycpO1xuICAgICAgICBjbGFzcyBNeUxpbmsgZXh0ZW5kcyAoTGluayBhcyBhbnkpIHtcbiAgICAgICAgICAgIHN0YXRpYyBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IHN1cGVyLmNyZWF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBlbmNvZGVVUkkoIHRoaXMuc2FuaXRpemUodmFsdWUpICk7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gSG93IHRvIHJlbW92ZSB0YXJnZXRcbiAgICAgICAgICAgICAgICAvLyBpZiAodmFsdWUuc3RhcnRzV2l0aCgnaHR0cHM6Ly9xdWlsbGpzLmNvbScpKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgUXVpbGwucmVnaXN0ZXIoJ3NpbGVudCcsIE15TGluayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9ybUNvbnRyb2xTdGF0dXNDaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0V2l0aCh0aGlzLm5nQ29udHJvbC5zdGF0dXMpLFxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xTdGF0dXMgPSAnVkFMSUQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRm9ybUNvbnRyb2xWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJpYUludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sU3RhdHVzID0gJ0lOVkFMSUQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRm9ybUNvbnRyb2xWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyaWFJbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudC5pc1ZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sVmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQudmFsaWRhdGlvbkVycm9yTWVzc2FnZSA9IHRoaXMudmFsaWRhdGlvbkVycm9yTWVzc2FnZSB8fCB0aGlzLnV4Rm9ybUdyb3VwQ29tcG9uZW50LnZhbGlkYXRpb25FcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUNvdW50ZXJzKGNvbnRlbnQ6IGFueSkge1xuICAgICAgICBpZiAoIHRoaXMuZm9ybWF0ID09PSAnaHRtbCcgfHwgdGhpcy5mb3JtYXQgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgaWYgKCBjb250ZW50ICYmIGNvbnRlbnQubGVuZ3RoICYmIGNvbnRlbnQgIT09IG51bGwgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtYXQgPT09ICdodG1sJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGhpcy5fc3RyaXBIdG1sKGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJhY3RlcnNDb3VudGVyID0gdGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy53b3Jkc0NvdW50ZXIgPSAhdGV4dCA/IDAgOiB0ZXh0LnRyaW0oKS5zcGxpdCgvXFxzKy8pLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRW1wdHkgY29udGVudFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyc0NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMud29yZHNDb3VudGVyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE91dHB1dCBjb3VudGVycyAoZm9yIGN1c3RvbSB0b29sYmFyIHVzYWdlKVxuICAgICAgICAgICAgdGhpcy5nZXRDaGFyYWN0ZXJzQ291bnRlci5lbWl0KHRoaXMuY2hhcmFjdGVyc0NvdW50ZXIpO1xuICAgICAgICAgICAgdGhpcy5nZXRXb3Jkc0NvdW50ZXIuZW1pdCh0aGlzLndvcmRzQ291bnRlcik7XG4gICAgICAgICAgICAvLyBVcGRhdGUgbWF4TGVuZ3RoICYgdmFsaWRpdHlcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hNYXhMZW5ndGgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaE1heExlbmd0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICYmIHRoaXMubWF4TGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGFyYWN0ZXJzTGVmdCA9IHRoaXMubWF4TGVuZ3RoIC0gdGhpcy5jaGFyYWN0ZXJzQ291bnRlcjtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJhY3RlcnNMZWZ0IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyc0xlZnQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNNYXhMZW5ndGhWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb3JtQ29udHJvbFZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNNYXhMZW5ndGhWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N0cmlwSHRtbChjb250ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKDwoW14+XSspPikvZ207XG4gICAgICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UocmVnZXgsICcnKTtcbiAgICB9XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAndXhFZGl0b3JDdXN0b21Ub29sYmFyJyB9KVxuZXhwb3J0IGNsYXNzIFV4RWRpdG9yQ3VzdG9tVG9vbGJhclRhZ0RpcmVjdGl2ZSB7XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBRdWlsbE1vZHVsZS5mb3JSb290KCksXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIFV4RWRpdG9yQ29tcG9uZW50LFxuICAgICAgICBVeEVkaXRvclZpZXdDb21wb25lbnQsXG4gICAgICAgIFV4RWRpdG9yVmlld0hUTUxDb21wb25lbnQsXG4gICAgICAgIFV4RWRpdG9yQ291bnRlcnNDb21wb25lbnQsXG4gICAgICAgIFV4RWRpdG9yQ3VzdG9tVG9vbGJhclRhZ0RpcmVjdGl2ZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBVeEVkaXRvckNvbXBvbmVudCxcbiAgICAgICAgVXhFZGl0b3JWaWV3Q29tcG9uZW50LFxuICAgICAgICBVeEVkaXRvclZpZXdIVE1MQ29tcG9uZW50LFxuICAgICAgICBVeEVkaXRvckNvdW50ZXJzQ29tcG9uZW50LFxuICAgICAgICBVeEVkaXRvckN1c3RvbVRvb2xiYXJUYWdEaXJlY3RpdmUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVXhFZGl0b3JDb21wb25lbnRNb2R1bGUge31cbiIsIjxkaXYgY2xhc3M9XCJ1eC1lZGl0b3Itd3JhcHBlclwiPlxuICAgIDxxdWlsbC1lZGl0b3IgKm5nSWY9XCIhaXNSZWFkT25seSB8fCBpc1VzZWROYXRpdmVFZGl0b3JJblJlYWRNb2RlXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZ2VuZXJhdGVkSWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtZWRpdG9yIHt7c3R5bGVDbGFzc319XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtZWRpdG9yLS1yZWFkb25seV09XCJpc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtZWRpdG9yLS1mb2N1c2VkXT1cImlzRm9jdXNlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnV4LWVkaXRvci0tZWRpdGFibGVdPVwiIWlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0c109XCJmb3JtYXRzXCJcbiAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgICAgICAgICAgICAgW21pbkxlbmd0aF09XCJtaW5MZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgW3Nhbml0aXplXT1cImlzVXNlZFNhbml0aXphdGlvbkZvckh0bWxcIlxuICAgICAgICAgICAgICAgIFttb2R1bGVzXT1cIm1vZHVsZXNcIlxuICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ0aGVtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVzXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tVG9vbGJhclBvc2l0aW9uXT1cImN1c3RvbVRvb2xiYXJQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgW3ByZXNlcnZlV2hpdGVzcGFjZV09XCJwcmVzZXJ2ZVdoaXRlc3BhY2VcIlxuICAgICAgICAgICAgICAgIFtzcGVsbGNoZWNrXT1cInNwZWxsY2hlY2tcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJhcmlhSW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAob25FZGl0b3JDcmVhdGVkKT1cIm9uRWRpdG9yQ3JlYXRlZEVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uRWRpdG9yQ2hhbmdlZCk9XCJvbkVkaXRvckNoYW5nZWRFbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbkNvbnRlbnRDaGFuZ2VkKT1cIm9uQ29udGVudENoYW5nZWRFbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvblNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkRW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25Gb2N1cyk9XCJvbkZvY3VzRW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25CbHVyKT1cIm9uQmx1ckVtaXQoJGV2ZW50KVwiPlxuXG4gICAgICAgIDwhLS0gUFJFREVGSU5FRCBERUZBVUxUIFRPT0xCQVIgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhY3VzdG9tVG9vbGJhck9wdGlvbnMgJiYgIWN1c3RvbUVkaXRvclRvb2xiYXJcIiBxdWlsbC1lZGl0b3ItdG9vbGJhciAoZm9jdXNpbik9XCJvblRvb2xiYXJGb2N1c0luKCRldmVudClcIiAoZm9jdXNvdXQpPVwib25Ub29sYmFyRm9jdXNPdXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWhlYWRlclwiIHRpdGxlPVwiU3R5bGV7e2NybGZ9fUFwcGx5IGFuIEhUTUwgdGFnIG9yIENTUyBjbGFzcyB0byB0aGUgc2VsZWN0ZWQgdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPkhlYWRpbmcgMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPkhlYWRpbmcgMjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiM1wiPkhlYWRpbmcgMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNFwiPkhlYWRpbmcgNDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNVwiPkhlYWRpbmcgNTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNlwiPkhlYWRpbmcgNjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtc2l6ZVwiIHRpdGxlPVwiRm9udCBzaXple3tjcmxmfX1DaGFuZ2UgdGhlIGZvbnQgc2l6ZSBvZiB0aGUgc2VsZWN0ZWQgdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic21hbGxcIj5TbWFsbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGFyZ2VcIj5MYXJnZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaHVnZVwiPkh1Z2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc01pbmltYWxUb29sYmFyXCIgY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWZvbnRcIiB0aXRsZT1cIkZvbnR7e2NybGZ9fUNoYW5nZSB0aGUgZm9udCBmYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+U2FucyBTZXJpZjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VyaWZcIj5TZXJpZjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9ub3NwYWNlXCI+TW9ub3NwYWNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtYm9sZFwiIGFyaWEtbGFiZWw9XCJCb2xkIChDdHJsICsgQilcIiB0aXRsZT1cIkJvbGQgKEN0cmwgKyBCKXt7Y3JsZn19TWFrZSB0aGUgc2VsZWN0ZWQgdGV4dCBib2xkXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWl0YWxpY1wiIGFyaWEtbGFiZWw9XCJJdGFsaWMgKEN0cmwgKyBJKVwiIHRpdGxlPVwiSXRhbGljIChDdHJsICsgSSl7e2NybGZ9fUl0YWxpY2l6ZSB0aGUgc2VsZWN0ZWQgdGV4dFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC11bmRlcmxpbmVcIiBhcmlhLWxhYmVsPVwiVW5kZXJsaW5lIChDdHJsICsgVSlcIiB0aXRsZT1cIlVuZGVybGluZSAoQ3RybCArIFUpe3tjcmxmfX1VbmRlcmxpbmUgdGhlIHNlbGVjdGVkIHRleHRcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtc3RyaWtlXCIgYXJpYS1sYWJlbD1cIlN0cmlrZXRocm91Z2hcIiB0aXRsZT1cIlN0cmlrZXRocm91Z2h7e2NybGZ9fURyYXcgYSBsaW5lIHRvIHRoZSBtaWRkbGUgb2YgdGhlIHNlbGVjdGVkIHRleHRcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1jb2xvclwiIGFyaWEtbGFiZWw9XCJGb250IENvbG9yXCIgdGl0bGU9XCJGb250IENvbG9ye3tjcmxmfX1DaGFuZ2UgdGhlIHRleHQgY29sb3JcIj48L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtYmFja2dyb3VuZFwiIGFyaWEtbGFiZWw9XCJUZXh0IEhpZ2hsaWdodCBDb2xvclwiIHRpdGxlPVwiVGV4dCBIaWdobGlnaHQgQ29sb3J7e2NybGZ9fUNoYW5nZSB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgdGV4dFwiPjwvc2VsZWN0PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNNaW5pbWFsVG9vbGJhclwiIGNsYXNzPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1zY3JpcHRcIiB2YWx1ZT1cInN1YlwiIGFyaWEtbGFiZWw9XCJTdWJzY3JpcHRcIiB0aXRsZT1cIlN1YnNjcmlwdHt7Y3JsZn19Q3JlYXRlIHNzbWFsbCBsZXR0ZXJzIGJlbG93IHRoZSB0ZXh0IGJhc2VsaW5lXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXNjcmlwdFwiIHZhbHVlPVwic3VwZXJcIiBhcmlhLWxhYmVsPVwiU3VwZXJzY3JpcHRcIiB0aXRsZT1cIlN1cGVyc2NyaXB0e3tjcmxmfX1DcmVhdGUgc21hbGwgbGV0dGVycyBhYm92ZSB0aGUgbGluZSBvZiB0aGUgdGV4dFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWFsaWduXCIgYXJpYS1sYWJlbD1cIlRleHQgQWxpZ25cIiB0aXRsZT1cIlRleHQgQWxpZ257e2NybGZ9fUFsaWduIHRoZSB0ZXh0IHRvIHRoZSBzZWxlY3RlZCBwb3NpdGlvbjogbGVmdCAoZGVmYXVsdCksIGNlbnRlciwgcmlnaHQgb3IganVzdGlmeVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY2VudGVyXCI+PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyaWdodFwiPjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwianVzdGlmeVwiPjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNNaW5pbWFsVG9vbGJhclwiIGNsYXNzPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJvcmRlcmVkXCIgYXJpYS1sYWJlbD1cIk9yZGVyZWQgTGlzdFwiIHRpdGxlPVwiTnVtYmVyaW5ne3tjcmxmfX1TdGFydCBhbiBvcmRlcmVkIGxpc3RcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlzdFwiIHZhbHVlPVwiYnVsbGV0XCIgYXJpYS1sYWJlbD1cIlVub3JkZXJlZCBMaXN0XCIgdGl0bGU9XCJCdWxsZXRze3tjcmxmfX1TdGFydCBhIGJ1bGxldGVkIGxpc3RcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaW5kZW50XCIgdmFsdWU9XCItMVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiRGVjcmVhc2UgSW5kZW50XCIgdGl0bGU9XCJEZWNyZWFzZSBJbmRlbnR7e2NybGZ9fURlY3JlYXNlIHRoZSBpbmRlbnQgbGV2ZWwgb2YgdGhlIHBhcmFncmFwaFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1pbmRlbnRcIiB2YWx1ZT1cIisxXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBJbmRlbnRcIiB0aXRsZT1cIkluY3JlYXNlIEluZGVudHt7Y3JsZn19SW5jcmVhc2UgdGhlIGluZGVudCBsZXZlbCBvZiB0aGUgcGFyYWdyYXBoXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIEluc2VydCBncm91cCAtLT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaXNNaW5pbWFsVG9vbGJhclwiIGNsYXNzPVwicWwtYmxvY2txdW90ZVwiIGFyaWEtbGFiZWw9XCJCbG9ja3F1b3RlXCIgdGl0bGU9XCJCbG9ja3F1b3Rle3tjcmxmfX1DcmVhdGUgYSBxdW90ZWQgYmxvY2sgb2YgdGhlIHNlbGVjdGVkIHRleHRcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWlzTWluaW1hbFRvb2xiYXJcIiBjbGFzcz1cInFsLWNvZGUtYmxvY2tcIiBhcmlhLWxhYmVsPVwiSW5zZXJ0IENvZGUgQmxvY2tcIiB0aXRsZT1cIkluc2VydCBDb2RlIEJsb2Nre3tjcmxmfX1JbnNlcnQgYSBjb2RlIGJsb2NrIGF0IHRoZSBjdXJzb3Igcm93IHBvc2l0aW9uXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpbmtcIiBhcmlhLWxhYmVsPVwiSW5zZXJ0IExpbmtcIiB0aXRsZT1cIkluc2VydCBIeXBlcmxpbmsgKEN0cmwgKyBLKXt7Y3JsZn19Q3JlYXRlIGEgbGluayB0byBhIFdlYiBwYWdlLCBhIHBpY3R1cmUsIGFuIGUtbWFpbCBhZGRyZXNzIG9yIGEgcHJvZ3JhbVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaXNJbWFnZVVybFwiIGNsYXNzPVwicWwtaW1hZ2VcIiBhcmlhLWxhYmVsPVwiSW5zZXJ0IEltYWdlXCIgdGl0bGU9XCJJbnNlcnQgUGljdHVyZXt7Y3JsZn19SW5zZXJ0IGEgcGljdHVyZSBmcm9tIGEgZmlsZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0ltYWdlVXJsXCIgY2xhc3M9XCJxbC1pbWFnZVwiIGFyaWEtbGFiZWw9XCJJbnNlcnQgSW1hZ2UgZnJvbSBVUkxcIiB0aXRsZT1cIkluc2VydCBQaWN0dXJlIGZyb20gVVJMe3tjcmxmfX1JbnNlcnQgYSBwaWN0dXJlIGZyb20gYSByZW1vdGUgVVJMXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXVpLWljb24gZXVpLWljb24taW1hZ2UtYWRkXCI+PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaXNNaW5pbWFsVG9vbGJhclwiIGNsYXNzPVwicWwtdmlkZW9cIiBhcmlhLWxhYmVsPVwiSW5zZXJ0IFZpZGVvXCIgdGl0bGU9XCJJbnNlcnQgVmlkZW97e2NybGZ9fUluc2VydCBhIHZpZGVvIGZyb20gYSBmaWxlXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIENsZWFuIC8gQ2xlYXIgLS0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtY2xlYW5cIiBhcmlhLWxhYmVsPVwiUmVtb3ZlIFN0eWxlc1wiIHRpdGxlPVwiUmVtb3ZlIFN0eWxlc3t7Y3JsZn19UmVtb3ZlIHRoZSBzdHlsZXMgb2YgdGhlIHNlbGVjdGVkIHRleHRcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGFyaWEtbGFiZWw9XCJEZWxldGVcIiB0aXRsZT1cIkRlbGV0ZSBjb250ZW50e3tjcmxmfX1QZXJtYW5lbnRseSBkZWxldGVzIGVkaXRvcidzIGNvbnRlbnRzXCIgKGNsaWNrKT1cImVkaXRvckRlbGV0ZUNvbnRlbnQoJGV2ZW50KVwiPjxzcGFuIGNsYXNzPVwiZXVpLWljb24gZXVpLWljb24tZGVsZXRlLWZvcmV2ZXJcIj48L3NwYW4+PC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gVW5kby9SZWRvIC0tPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBhcmlhLWxhYmVsPVwiVW5kbyAoQ3RybCArIFopXCIgdGl0bGU9XCJVbmRvIChDdHJsICsgWil7e2NybGZ9fUNhbmNlbHMgdGhlIHByZXZpb3VzIGFjdGlvblwiIChjbGljayk9XCJlZGl0b3JVbmRvKClcIj48c3BhbiBjbGFzcz1cImV1aS1pY29uIGV1aS1pY29uLXVuZG9cIj48L3NwYW4+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVkbyAoQ3RybCArIFkpXCIgdGl0bGU9XCJSZWRvIChDdHJsICsgWSl7e2NybGZ9fURvIHRoZSBuZXh0IGhpc3RvcnkgYWN0aW9uIGFnYWluXCIgKGNsaWNrKT1cImVkaXRvclJlZG8oKVwiPjxzcGFuIGNsYXNzPVwiZXVpLWljb24gZXVpLWljb24tcmVkb1wiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gQ291bnRlcnMgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dDb3VudGVycyAmJiAoZm9ybWF0ID09PSAnaHRtbCcgfHwgZm9ybWF0ID09PSAndGV4dCcpXCIgY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPHV4LWVkaXRvci1jb3VudGVycyBbY2hhcmFjdGVyc0NvdW50ZXJdPVwiY2hhcmFjdGVyc0NvdW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoYXJhY3RlcnNMYWJlbF09XCJjaGFyYWN0ZXJzTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dvcmRzQ291bnRlcl09XCJ3b3Jkc0NvdW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dvcmRzTGFiZWxdPVwid29yZHNMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNNYXhMZW5ndGhWYWxpZF09XCJpc01heExlbmd0aFZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb3VudGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvdW50ZXJze3tjcmxmfX1DaGFyYWN0ZXJzIGFuZCB3b3JkcyBjb3VudGVycyAoc3RyaXBwZWQgSHRtbClcIj5cbiAgICAgICAgICAgICAgICA8L3V4LWVkaXRvci1jb3VudGVycz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBVU0VSIENVU1RPTSBUT09MQkFSIChIVE1MIEZPUk1BVCkgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21FZGl0b3JUb29sYmFyXCIgcXVpbGwtZWRpdG9yLXRvb2xiYXIgKGZvY3VzaW4pPVwib25Ub29sYmFyRm9jdXNJbigkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cIm9uVG9vbGJhckZvY3VzT3V0KCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInV4RWRpdG9yQ3VzdG9tVG9vbGJhclwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9xdWlsbC1lZGl0b3I+XG5cbiAgICA8IS0tIE1BWExFTkdUSCBJTkRJQ0FUT1IgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFpc1JlYWRPbmx5ICYmIGNoYXJhY3RlcnNMZWZ0ID4gLTFcIiBjbGFzcz1cIm1heGxlbmd0aC13cmFwcGVyXCIgW2NsYXNzLm1heGxlbmd0aC13cmFwcGVyLS1lcnJvcl09XCIhaXNNYXhMZW5ndGhWYWxpZFwiPnt7IGNoYXJhY3RlcnNMZWZ0IH19PC9kaXY+XG48L2Rpdj5cblxuXG48IS0tIFJFQURPTkxZIE1PREUgLS0+XG48ZGl2ICpuZ0lmPVwiaXNSZWFkT25seSAmJiAhaXNVc2VkTmF0aXZlRWRpdG9ySW5SZWFkTW9kZVwiIGNsYXNzPVwidXgtZWRpdG9yIHV4LWVkaXRvci0tcmVhZG9ubHkge3tzdHlsZUNsYXNzfX1cIiBbY2xhc3MudXgtZWRpdG9yLS1lbXB0eV09XCIhdmFsdWVcIiB0YWJpbmRleD1cInt7dGFiaW5kZXh9fVwiIChjbGljayk9XCJlbmFibGVFZGl0b3JPbkNsaWNrRm9jdXMoJGV2ZW50KVwiIChmb2N1c2luKT1cImVuYWJsZUVkaXRvck9uQ2xpY2tGb2N1cygkZXZlbnQpXCI+XG4gICAgPHV4LWVkaXRvci12aWV3LWh0bWwgKm5nSWY9XCJmb3JtYXQgPT09ICdodG1sJyB8fCBmb3JtYXQgPT09ICd0ZXh0J1wiIFtjb250ZW50XT1cInZhbHVlXCIgW3RoZW1lXT1cInRoZW1lXCIgW3N0eWxlc109XCJoYXNSZWFkT25seVN0eWxlcyA/IHN0eWxlIDogbnVsbFwiPjwvdXgtZWRpdG9yLXZpZXctaHRtbD5cbiAgICA8dXgtZWRpdG9yLXZpZXcgKm5nSWY9XCJmb3JtYXQgPT09ICdvYmplY3QnIHx8IGZvcm1hdCA9PT0gJ2pzb24nXCIgW2NvbnRlbnRdPVwidmFsdWVcIiBbZm9ybWF0XT1cImZvcm1hdFwiIFt0aGVtZV09XCJ0aGVtZVwiIFtzdHlsZXNdPVwiaGFzUmVhZE9ubHlTdHlsZXMgPyBzdHlsZSA6IG51bGxcIj48L3V4LWVkaXRvci12aWV3PlxuPC9kaXY+XG5cblxuPCEtLSBERUJVR0dFUiAtLT5cbjxkaXYgKm5nSWY9XCJkZWJ1Z1wiIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Z1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLXRpdGxlXCI+VVgtRURJVE9SIGRlYnVnPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctc2VjdGlvblwiPlxuICAgICAgICA8c3Ryb25nPk9QVElPTlM6PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZcIj5pZDogPHNwYW4gY2xhc3M9XCJldWktdS1jb2xvci1ibGFja1wiPnt7Z2VuZXJhdGVkSWR9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZcIj50b29sYmFyUG9zaXRpb246IHt7Y3VzdG9tVG9vbGJhclBvc2l0aW9ufX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJpc1JlYWRPbmx5XCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaXNSZWFkT25seVwiPmlzUmVhZE9ubHk8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJpc0VuYWJsZWRPbkZvY3VzXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaXNFbmFibGVkT25Gb2N1c1wiPmlzRW5hYmxlZE9uRm9jdXM8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJwcmVzZXJ2ZVdoaXRlc3BhY2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFwcmVzZXJ2ZVdoaXRlc3BhY2VcIj5wcmVzZXJ2ZVdoaXRlc3BhY2U8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJzcGVsbGNoZWNrXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhc3BlbGxjaGVja1wiPnNwZWxsY2hlY2s8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZcIj5tYXhMZW5ndGg6IDxzcGFuIGNsYXNzPVwiZXVpLXUtY29sb3ItYmxhY2tcIj57e21heExlbmd0aH19PC9zcGFuPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1zZWN0aW9uXCI+XG4gICAgICAgIDxzdHJvbmc+RVZFTlRTOjwvc3Ryb25nPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb25dPVwiaXNGb2N1c2VkXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaXNGb2N1c2VkXCI+b25Gb2N1czwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXT1cImlzQmx1cmVkXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaXNCbHVyZWRcIj5vbkJsdXI8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJpc0VkaXRvckNyZWF0ZWRcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFpc0VkaXRvckNyZWF0ZWRcIj5vbkVkaXRvckNyZWF0ZWQ8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJoYXNFZGl0b3JDaGFuZ2VkXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaGFzRWRpdG9yQ2hhbmdlZFwiPm9uRWRpdG9yQ2hhbmdlZDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXT1cImhhc0NvbnRlbnRDaGFuZ2VkXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaGFzQ29udGVudENoYW5nZWRcIj5vbkNvbnRlbnRDaGFuZ2VkPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb25dPVwiaGFzU2VsZWN0aW9uQ2hhbmdlZFwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZdPVwiIWhhc1NlbGVjdGlvbkNoYW5nZWRcIj5vblNlbGVjdGlvbkNoYW5nZWQ8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctc2VjdGlvblwiPlxuICAgICAgICA8c3Ryb25nPkZPUk06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZcIj5jb250cm9sTmFtZTogPHNwYW4gY2xhc3M9XCJldWktdS1jb2xvci1ibGFja1wiPnt7Zm9ybUNvbnRyb2xOYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb25dPVwiaXNSZXF1aXJlZFwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZdPVwiIWlzUmVxdWlyZWRcIj5pc1JlcXVpcmVkPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb25dPVwiaXNGb3JtQ29udHJvbFZhbGlkXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLWFsZXJ0XT1cIiFpc0Zvcm1Db250cm9sVmFsaWRcIj5pc0Zvcm1Db250cm9sVmFsaWQ8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZcIj52YWxpZGF0aW9uRXJyb3JNZXNzYWdlOiA8c3BhbiBjbGFzcz1cImV1aS11LWNvbG9yLXt7ZmVlZGJhY2tUeXBlQ2xhc3N9fVwiPnt7Zm9ybVZhbGlkYXRpb25FcnJvck1lc3NhZ2V9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vblwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1hbGVydF09XCIhaXNNYXhMZW5ndGhWYWxpZFwiPmlzTWF4TGVuZ3RoVmFsaWQ8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctc2VjdGlvblwiPlxuICAgICAgICA8c3Ryb25nPlNUWUxFOjwvc3Ryb25nPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2UgdXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXCI+e3sgc3R5bGUgfCBqc29ufX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctc2VjdGlvblwiPlxuICAgICAgICA8c3Ryb25nPlNPVVJDRTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlIHV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZlwiPmZvcm1hdDogPHNwYW4gY2xhc3M9XCJldWktdS1jb2xvci1ibGFja1wiPnt7Zm9ybWF0fX08L3NwYW4+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2UgdXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXCI+Y2hhcmFjdGVyc0xlZnQ6IDxzcGFuIFtuZ0NsYXNzXT1cImlzTWF4TGVuZ3RoVmFsaWQgPyAnZXVpLXUtY29sb3ItYmxhY2snIDogJ2V1aS11LWNvbG9yLWRhbmdlcidcIj57e2NoYXJhY3RlcnNMZWZ0fX08L3NwYW4+PC9zcGFuPlxuXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctc291cmNlXCI+XG4gICAgICAgIDxjb2RlICpuZ0lmPVwiZm9ybWF0ID09PSAndGV4dCcgfHwgZm9ybWF0ID09PSAnaHRtbCdcIj57e2Zvcm1Db250cm9sLnZhbHVlfX08L2NvZGU+XG4gICAgICAgIDxjb2RlICpuZ0lmPVwiZm9ybWF0ID09PSAnanNvbicgfHwgZm9ybWF0ID09PSAnb2JqZWN0J1wiPjxwcmUgY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLXNvdXJjZS1jb2RlXCI+e3tmb3JtQ29udHJvbC52YWx1ZSB8IGpzb259fTwvcHJlPjwvY29kZT5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
652
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXgtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC1lZGl0b3IvdXgtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC1lZGl0b3IvdXgtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXFCLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQzNGLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQXdCLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsTUFBTTtBQUNOLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTVFLFFBQVE7QUFDUixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRSxRQUFRO0FBQ1IsT0FBTyxFQUFFLFdBQVcsRUFBOEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBQzlELHlD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WixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLFdBQVcsQ0FBQyxPQUFPLEVBQUU7MkZBaUJoQix1QkFBdUI7a0JBdEJuQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixXQUFXLENBQUMsT0FBTyxFQUFFO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLHlCQUF5Qjt3QkFDekIseUJBQXlCO3dCQUN6QixpQ0FBaUM7cUJBQ3BDO29CQUNELFlBQVksRUFBRTt3QkFDVixpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIseUJBQXlCO3dCQUN6Qix5QkFBeUI7d0JBQ3pCLGlDQUFpQztxQkFDcEM7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBOZ01vZHVsZSwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBIb3N0LCBJbmplY3QsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLFxuICAgICAgICAgUXVlcnlMaXN0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFNlbGYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vLyBlVUlcbmltcG9ydCB7IFV4Rm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2xlZ2FjeS91eC1mb3JtLWdyb3VwJztcblxuLy8gTG9jYWxcbmltcG9ydCB7IFV4RWRpdG9yVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdXgtZWRpdG9yLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IFV4RWRpdG9yVmlld0hUTUxDb21wb25lbnQgfSBmcm9tICcuL3V4LWVkaXRvci12aWV3LWh0bWwuY29tcG9uZW50JztcbmltcG9ydCB7IFV4RWRpdG9yQ291bnRlcnNDb21wb25lbnQgfSBmcm9tICcuL3V4LWVkaXRvci1jb3VudGVycy5jb21wb25lbnQnO1xuXG4vLyBRdWlsbFxuaW1wb3J0IHsgUXVpbGxNb2R1bGUsIFF1aWxsTW9kdWxlcywgQ3VzdG9tT3B0aW9uIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V4dGVybmFscy9xdWlsbCc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbmxldCBRdWlsbDogYW55ID0gd2luZG93WydRdWlsbCddO1xuXG4vLyBEZWZhdWx0IGVkaXRvciBvcHRpb25zICh0byBiZSBwYXNzZWQgdGhyb3VnaCBtb2R1bGVzKVxuY29uc3QgZGVmYXVsdEVkaXRvck9wdGlvbnMgPSB7XG4gICAgdG9vbGJhcjogdHJ1ZSxcbiAgICBjbGlwYm9hcmQ6IHRydWUsXG4gICAgaGlzdG9yeToge1xuICAgICAgICBkZWxheTogMTAwMCxcbiAgICAgICAgbWF4U3RhY2s6IDEwMCxcbiAgICAgICAgdXNlck9ubHk6IHRydWVcbiAgICB9XG59O1xuY29uc3QgY3VzdG9tRWRpdG9yT3B0aW9ucyA9IHtcbiAgICBpbXBvcnQ6ICdmb3JtYXRzL2ZvbnQnLFxuICAgIHdoaXRlbGlzdDogWydyb2JvdG8nXSxcbn07XG5cbmludGVyZmFjZSBMaW5rUGx1Z2luIHtcbiAgICBjcmVhdGUodmFsdWUpO1xuICAgIGZvcm1hdHMoZG9tTm9kZSk7XG4gICAgc2FuaXRpemUodXJsKTtcbiAgICBmb3JtYXQobmFtZSwgdmFsdWUpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3V4LWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3V4LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICAvLyBWYWx1ZSBhY2Nlc3NvcnMgJiB2YWxpZGF0b3JzIGFscmVhZHkgdXNlZCBieSBRdWlsbCBlZGl0b3JcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9LaWxsZXJDb2RlTW9ua2V5L25neC1xdWlsbC9ibG9iL21hc3Rlci9zcmMvcXVpbGwtZWRpdG9yLmNvbXBvbmVudC50c1xufSlcblxuZXhwb3J0IGNsYXNzIFV4RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgZTJlQXR0cjogc3RyaW5nID0gJ3V4LWVkaXRvcic7XG4gICAgQElucHV0KCkgaWQ6IHN0cmluZztcblxuICAgIC8vIENPTU1PTiBPUFRJT05TIChPTEQgQkFTRSlcbiAgICBASW5wdXQoKSBzdHlsZTogYW55ID0gbnVsbDsgICAgLy8gbWFwcGVkIHRvIE5FVyBzdHlsZXNcbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBmb3JtYXRzPzogc3RyaW5nW10gfCBudWxsOyAgICAgIC8vIG11bHRpcGxlIGZvcm1hdHMgY29udGVudCAoc2VlIGluc2VydFRleHQgbWV0aG9kKVxuICAgIEBJbnB1dCgpIGZvcm1hdD86ICdvYmplY3QnIHwgJ2h0bWwnIHwgJ3RleHQnIHwgJ2pzb24nID0gJ2h0bWwnOyAgICAgLy8gc2luZ2xlIGZvcm1hdCBjb250ZW50XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNFbmFibGVkT25Gb2N1cygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzRW5hYmxlZE9uRm9jdXM7IH1cbiAgICBzZXQgaXNFbmFibGVkT25Gb2N1cyh2YWx1ZTogYm9vbGVhbnxzdHJpbmcpIHsgdGhpcy5faXNFbmFibGVkT25Gb2N1cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0VuYWJsZWRPbkZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWFkT25seSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzUmVhZE9ubHk7IH1cbiAgICBzZXQgaXNSZWFkT25seSh2YWx1ZTogYm9vbGVhbnxzdHJpbmcpIHsgdGhpcy5faXNSZWFkT25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1JlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7ICAgLy8gbWFwcGVkIHRvIE5FVyByZWFkT25seVxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzVXNlZE5hdGl2ZUVkaXRvckluUmVhZE1vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1VzZWROYXRpdmVFZGl0b3JJblJlYWRNb2RlOyB9IC8vIHVzZWQgdG8gYWxsb3cgbmF0aXZlIGVkaXRvciBRdWlsbCB0byByZW5kZXIgdGhlIEh0bWwgYW5kIGFwcGx5IGl0cyBzdHlsZXMuXG4gICAgc2V0IGlzVXNlZE5hdGl2ZUVkaXRvckluUmVhZE1vZGUodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzVXNlZE5hdGl2ZUVkaXRvckluUmVhZE1vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNVc2VkTmF0aXZlRWRpdG9ySW5SZWFkTW9kZT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjdXN0b21Ub29sYmFyT3B0aW9ucz86IGFueTtcbiAgICBASW5wdXQoKSB0aGVtZT86ICdzbm93JyB8ICdidWJibGUnID0gJ3Nub3cnO1xuICAgIEBJbnB1dCgpIGRlYnVnPzogJ3dhcm4nIHwgJ2xvZycgfCAnZXJyb3InIHwgdHJ1ZSB8IGZhbHNlID0gZmFsc2U7ICAgLy8gdHJ1ZSA9IGxvZ1xuICAgIEBJbnB1dCgpIC8vIERFUFJFQ0FURUQgLSBObyBtb3JlIG5lZWRlZCEgaXNSZWFkT25seSBpcyBlbm91Z2hcbiAgICBnZXQgaXNFZGl0YWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzRWRpdGFibGU7IH1cbiAgICBzZXQgaXNFZGl0YWJsZSh2YWx1ZTogYm9vbGVhbnxzdHJpbmcpIHsgdGhpcy5faXNFZGl0YWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0VkaXRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBORVcgRk9STSBPUFRJT05TIEZPUiBGT1JNIFZBTERBVElPTiAoc2VlIE9uSW5pdClcbiAgICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBmZWVkYmFja1R5cGVDbGFzczogc3RyaW5nID0gJ2Rhbmdlcic7XG4gICAgQElucHV0KCkgdmFsaWRhdGlvbkVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLy8gTkVXIElOUFVUIE9QVElPTlNcbiAgICBASW5wdXQoKSB0YWJpbmRleDogc3RyaW5nID0gJzAnO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1JlYWRPbmx5U3R5bGVzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faGFzUmVhZE9ubHlTdHlsZXM7IH1cbiAgICBzZXQgaGFzUmVhZE9ubHlTdHlsZXModmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2hhc1JlYWRPbmx5U3R5bGVzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2hhc1JlYWRPbmx5U3R5bGVzOiBib29sZWFuID0gZmFsc2U7ICAvLyBBbGxvd3MgdGhlIHZpZXdlciB0byB1c2Ugc3R5bGVzIHdoZW4gaXNSZWFkT25seT10cnVlXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNNaW5pbWFsVG9vbGJhcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzTWluaW1hbFRvb2xiYXI7IH1cbiAgICBzZXQgaXNNaW5pbWFsVG9vbGJhcih2YWx1ZTogYm9vbGVhbnxzdHJpbmcpIHsgdGhpcy5faXNNaW5pbWFsVG9vbGJhciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc01pbmltYWxUb29sYmFyOiBib29sZWFuID0gZmFsc2U7ICAvLyBBbGxvd3MgdG8gZGlzcGxheSBtaW5pbWFsIGZlYXR1cmVzIGZyb20gZGVmYXVsdCB0b29sYmFyXG4gICAgQElucHV0KCkgbW9kdWxlcz86IFF1aWxsTW9kdWxlcyA9IGRlZmF1bHRFZGl0b3JPcHRpb25zO1xuICAgIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5MZW5ndGg/OiBudW1iZXI7XG4gICAgQElucHV0KCkgLy8gZm9ybSB2YWxpZGF0b3IgcmVxdWlyZWQhXG4gICAgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1JlcXVpcmVkOyB9XG4gICAgc2V0IGlzUmVxdWlyZWQodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzUmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGN1c3RvbVRvb2xiYXJQb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyA9ICd0b3AnO1xuICAgIC8vIEBJbnB1dCgpIHNhbml0aXplPzogdHJ1ZSB8IGZhbHNlID0gdHJ1ZTsgICAgIC8vIFNlY3VyaXR5OiByZW1vdmVkIGFzIGlucHV0IG9wdGlvbiEgQWx3YXlzIHRydWUhXG4gICAgQElucHV0KClcbiAgICBnZXQgc3RyaWN0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fc3RyaWN0OyB9XG4gICAgc2V0IHN0cmljdCh2YWx1ZTogYm9vbGVhbnxzdHJpbmcpIHsgdGhpcy5fc3RyaWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX3N0cmljdDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNVc2VkU2FuaXRpemF0aW9uRm9ySHRtbCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzVXNlZFNhbml0aXphdGlvbkZvckh0bWw7IH1cbiAgICBzZXQgaXNVc2VkU2FuaXRpemF0aW9uRm9ySHRtbCh2YWx1ZTogYm9vbGVhbnxzdHJpbmcpIHsgdGhpcy5faXNVc2VkU2FuaXRpemF0aW9uRm9ySHRtbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1VzZWRTYW5pdGl6YXRpb25Gb3JIdG1sOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzY3JvbGxpbmdDb250YWluZXI/OiBIVE1MRWxlbWVudCB8IHN0cmluZyB8IG51bGw7XG4gICAgQElucHV0KCkgYm91bmRzPzogSFRNTEVsZW1lbnQgfCBzdHJpbmc7XG4gICAgQElucHV0KCkgY3VzdG9tT3B0aW9uczogQ3VzdG9tT3B0aW9uW10gPSBbY3VzdG9tRWRpdG9yT3B0aW9uc10gfHwgW107XG4gICAgQElucHV0KCkgdHJhY2tDaGFuZ2VzPzogJ3VzZXInIHwgJ2FsbCc7XG4gICAgQElucHV0KClcbiAgICBnZXQgcHJlc2VydmVXaGl0ZXNwYWNlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fcHJlc2VydmVXaGl0ZXNwYWNlOyB9XG4gICAgc2V0IHByZXNlcnZlV2hpdGVzcGFjZSh2YWx1ZTogYm9vbGVhbnxzdHJpbmcpIHsgdGhpcy5fcHJlc2VydmVXaGl0ZXNwYWNlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX3ByZXNlcnZlV2hpdGVzcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNwZWxsY2hlY2soKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zcGVsbGNoZWNrOyB9XG4gICAgc2V0IHNwZWxsY2hlY2sodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX3NwZWxsY2hlY2sgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfc3BlbGxjaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNob3dDb3VudGVycygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3Nob3dDb3VudGVyczsgfVxuICAgIHNldCBzaG93Q291bnRlcnModmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX3Nob3dDb3VudGVycyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9zaG93Q291bnRlcnM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSW1hZ2VVcmwoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc0ltYWdlVXJsOyB9XG4gICAgc2V0IGlzSW1hZ2VVcmwodmFsdWU6IGJvb2xlYW58c3RyaW5nKSB7IHRoaXMuX2lzSW1hZ2VVcmwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNJbWFnZVVybDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyogIERFUFJFQ0FURUQgKE9MRCkgICAgICAgICAgICAgICAgTkVXXG4gICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgKG9uSW5pdCkgICAgICAgICAgICAgICAgPT4gICAgICAob25FZGl0b3JDcmVhdGVkKVxuICAgICAgICAob25UZXh0Q2hhbmdlKSAgICAgICAgICA9PiAgICAgIChvbkNvbnRlbnRDaGFuZ2VkKVxuICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpICAgICA9PiAgICAgIChvblNlbGVjdGlvbkNoYW5nZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uRWRpdG9yQ3JlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25FZGl0b3JDaGFuZ2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNvbnRlbnRDaGFuZ2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpICAgICAgICAgICAgICovXG5cbiAgICAvLyBPTEQgRU1JVFRFUlMgKEtlZXAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIC0gVE8gQkUgREVQUkVDQVRFRFxuICAgIEBPdXRwdXQoKSBvbkluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvblRleHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvLyBORVcgRU1JVFRFUlNcbiAgICBAT3V0cHV0KCkgb25FZGl0b3JDcmVhdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25FZGl0b3JDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25Db250ZW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIGdldENoYXJhY3RlcnNDb3VudGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgZ2V0V29yZHNDb3VudGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHF1aWxsRWRpdG9yOiBhbnk7ICAgLy8gVGhpcyBRdWlsbCBpbnN0YW5jZVxuICAgIGNybGY6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTAsIDEzKTsgICAgIC8vIGZvciB0b29sdGlwIENSK0xGXG4gICAgZWRpdG9yQ29uZmlnID0gW107XG4gICAgdmFsdWU6IGFueSA9ICcnO1xuICAgIGxhc3RWYWxpZFZhbHVlOiBhbnk7XG4gICAgc2FuaXRpemUgPSB0cnVlOyAgICAvLyBTZWN1cml0eTogYWx3YXlzIHNldCBzYW5pdGl6aW5nIHRvIHRydWUhXG4gICAgaXNFbmFibGVkT25Gb2N1c0JhY2t1cDogYm9vbGVhbiA9IGZhbHNlOyAgIC8vIGJhY2t1cCAmIHJlc3RvcmUgb2YgdGhlIGlzRW5hYmxlZE9uRm9jdXMgb3JpZ2luYWwgb3B0aW9uXG4gICAgZGlzcGxheUFib3V0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBDb3VudGVyc1xuICAgIHB1YmxpYyBjaGFyYWN0ZXJzQ291bnRlcjogbnVtYmVyID0gMDtcbiAgICBwdWJsaWMgd29yZHNDb3VudGVyOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjaGFyYWN0ZXJzTGFiZWwgPSAnY2hhcmFjdGVycyc7XG4gICAgcHVibGljIHdvcmRzTGFiZWwgPSAnd29yZHMnO1xuICAgIHB1YmxpYyBpc01heExlbmd0aFZhbGlkID0gdHJ1ZTtcbiAgICBwdWJsaWMgY2hhcmFjdGVyc0xlZnQ6IG51bWJlcjtcblxuICAgIC8vIERlYnVnZ2VyIGV2ZW50cyAmIG1pc2NcbiAgICBwdWJsaWMgaXNCbHVyZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgcHVibGljIGlzRWRpdG9yQ3JlYXRlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBoYXNFZGl0b3JDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHVibGljIGhhc0NvbnRlbnRDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHVibGljIGhhc1NlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNUb29sYmFyVG91Y2hlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBmb3JtVmFsaWRhdGlvbkVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHB1YmxpYyBmb3JtQ29udHJvbFN0YXR1czogc3RyaW5nO1xuICAgIHB1YmxpYyBpc0Zvcm1Db250cm9sVmFsaWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgYXJpYUludmFsaWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgZ2VuZXJhdGVkSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgICBwcml2YXRlIHV4Rm9ybUdyb3VwQ29tcG9uZW50OiBVeEZvcm1Hcm91cENvbXBvbmVudDtcbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gVXhFZGl0b3JDdXN0b21Ub29sYmFyVGFnRGlyZWN0aXZlKSwgeyBzdGF0aWM6IHRydWUgfSkgY3VzdG9tRWRpdG9yVG9vbGJhcjogUXVlcnlMaXN0PFV4RWRpdG9yQ3VzdG9tVG9vbGJhclRhZ0RpcmVjdGl2ZT47XG5cbiAgICBjb25zdHJ1Y3RvciggQE9wdGlvbmFsKCkgQEhvc3QoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gVXhGb3JtR3JvdXBDb21wb25lbnQpKSB1eEZvcm1Hcm91cENvbXBvbmVudDogVXhGb3JtR3JvdXBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xuICAgICAgICAvLyBJbmplY3QgTmdDb250cm9sIHZhbHVlIGFjY2Vzc29yIHRvIHNlbGZcbiAgICAgICAgLy8gVGhpcyByZXBsYWNlcyBpbmplY3Rvci5nZXQoTmdDb250cm9sKSB3aGljaCBpcyB0aHJvd2luZyBhIGRlcHJlY2F0aW9uIHdhcm5pbmdcbiAgICAgICAgLy8gQWxzbyByZW1vdmVkIE5HX1ZBTFVFX0FDQ0VTU09SIGZyb20gdGhlIHByb3ZpZGVycyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudCA9IHV4Rm9ybUdyb3VwQ29tcG9uZW50O1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBSZXBsYWNlIGRlZmF1bHQgVG9vbGJhciB3aXRoIGN1c3RvbVxuICAgICAgICBpZiAodGhpcy5jdXN0b21Ub29sYmFyT3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0geyAuLi50aGlzLm1vZHVsZXMsIC4uLnsgdG9vbGJhcjogdGhpcy5jdXN0b21Ub29sYmFyT3B0aW9ucyB9IH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrdXAgb3JpZ2luYWwgdmFsdWUgb2YgaXNFbmFibGVkT25Gb2N1cyBvcHRpb25cbiAgICAgICAgdGhpcy5pc0VuYWJsZWRPbkZvY3VzQmFja3VwID0gdGhpcy5pc0VuYWJsZWRPbkZvY3VzO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBpZCBmb3IgdXgtZWRpdG9yIGluc3RhbmNlXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkSWQgPSB0aGlzLmlkID8gdGhpcy5pZCA6ICd1eC1lZGl0b3ItJyArIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKSArIDEpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQuaWQgPSB0aGlzLmdlbmVyYXRlZElkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uRXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudC52YWxpZGF0aW9uRXJyb3JNZXNzYWdlID0gdGhpcy52YWxpZGF0aW9uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQudmFsaWRhdGlvbkVycm9yRmVlZGJhY2tDbGFzcyA9IHRoaXMuZmVlZGJhY2tUeXBlQ2xhc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yTWVzc2FnZSA9IHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQudmFsaWRhdGlvbkVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLnV4Rm9ybUdyb3VwQ29tcG9uZW50LmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV4Rm9ybUdyb3VwQ29tcG9uZW50LmlzUmVxdWlyZWQgPSB0aGlzLmlzUmVxdWlyZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNSZXF1aXJlZCA9IHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQuaXNSZXF1aXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbFN0YXR1c0NoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCduZ09uQ2hhbmdlcygpIGNoYW5nZXM6JywgY2hhbmdlcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIGNoYW5nZXMuaXNFbmFibGVkT25Gb2N1cyAmJiBjaGFuZ2VzLmlzRW5hYmxlZE9uRm9jdXMuY3VycmVudFZhbHVlID09PSB0cnVlICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkT25Gb2N1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE92ZXJyaWRlcyB0aGUgaXNFbmFibGVkT25Gb2N1cz10cnVlIG9wdGlvblxuICAgICAgICAgICAgaWYgKCBjaGFuZ2VzLmlzUmVhZE9ubHkgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZXMuaXNSZWFkT25seS5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRPbkZvY3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZWFkT25seSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVkaXRpb24gbW9kZVxuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzLmlzUmVhZE9ubHkuY3VycmVudFZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtQ29udHJvbFN0YXR1c0NoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLy8gT3ZlcnJpZGVzIGRlZmF1bHQgaW1hZ2UgaGFuZGxlciAoZW1iZWRkZWQgQjY0IGNvbnRlbnQgZnJvbSBmaWxlKSB3aXRoIFVSTCBpbWFnZXMgaW5zdGVhZFxuICAgIHB1YmxpYyBzZXRJbWFnZVVybEhhbmRsZXIoZWRpdG9ySW5zdGFuY2U6IGFueSkge1xuICAgICAgICBpZiAoZWRpdG9ySW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3IgPSBlZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBlZGl0b3JJbnN0YW5jZS5nZXRNb2R1bGUoJ3Rvb2xiYXInKTtcbiAgICAgICAgICAgIHRvb2xiYXIuYWRkSGFuZGxlcignaW1hZ2UnLCB0aGlzLmltYWdlSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaW1hZ2VIYW5kbGVyID0gKGltYWdlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucXVpbGxFZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvbXB0KCdFbnRlciBpbWFnZSBsaW5rIFVSTCcpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3IuaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdpbWFnZScsIHZhbHVlLCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9PTEJBUiBFWFRSQVMgKGVVSSBDdXN0b21zKVxuICAgIHB1YmxpYyBlZGl0b3JVbmRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1aWxsRWRpdG9yLmhpc3RvcnkudW5kbygpO1xuICAgIH1cbiAgICBwdWJsaWMgZWRpdG9yUmVkbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xdWlsbEVkaXRvci5oaXN0b3J5LnJlZG8oKTtcbiAgICB9XG4gICAgcHVibGljIGVkaXRvckRlbGV0ZUNvbnRlbnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgZWRpdG9yXFwncyBjb250ZW50PycpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWxsRWRpdG9yLnNldENvbnRlbnRzKFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWxsRWRpdG9yLnNldFRleHQoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKCcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBlZGl0b3JBYm91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5QWJvdXQgPSAhdGhpcy5kaXNwbGF5QWJvdXQ7XG4gICAgfVxuXG4gICAgLy8gVE9HR0xFU1xuICAgIHB1YmxpYyB0b2dnbGVSZWFkT25seSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gIXRoaXMuaXNSZWFkT25seTtcbiAgICB9XG4gICAgcHVibGljIHRvZ2dsZVJlcXVpcmVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUmVxdWlyZWQgPSAhdGhpcy5pc1JlcXVpcmVkO1xuICAgIH1cblxuICAgIC8vIFJFQURPTkxZIE1PREUgRnVuY3Rpb25zXG4gICAgcHVibGljIGVuYWJsZUVkaXRvck9uQ2xpY2tGb2N1cyhldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZE9uRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkT25seSA9IGZhbHNlOyAgICAgICAgLy8gc2hvdyB0b29sYmFyXG4gICAgICAgICAgICAvLyB0aGlzLmlzRW5hYmxlZE9uRm9jdXMgPSBmYWxzZTsgIC8vIERpc2FibGUgdGhlIGlzRW5hYmxlZE9uRm9jdXMgd2hlbiBmb2N1c2VkIHRvIGF2b2lkIGxvc3QgZm9jdXMgd2hlbiB1c2luZyB0b29sYmFyIGFjdGlvbnNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPT0xCQVIgRVZFTlRTIC8gRlVOQ1RJT05TXG4gICAgLy8gRm9yY2UgcmVtYWluaW5nIG9uIEVkaXRvciB3aGVuIHRvdWNoaW5nIHRoZSB0b29sYmFyIGFjdGlvbnNcbiAgICBwdWJsaWMgb25Ub29sYmFyRm9jdXNJbihldmVudDogYW55KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdvblRvb2xiYXJGb2N1c0luKCkgdHJpZ2dlcmVkJyk7XG4gICAgICAgIHRoaXMuaXNUb29sYmFyVG91Y2hlZCA9IHRydWU7XG4gICAgfVxuICAgIC8vIFJlc2V0IHRvb2xiYXIgdG91Y2hlZCBzdGF0ZSBvbiBleGl0XG4gICAgcHVibGljIG9uVG9vbGJhckZvY3VzT3V0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uVG9vbGJhckZvY3VzT3V0KCkgdHJpZ2dlcmVkJyk7XG4gICAgICAgIHRoaXMuaXNUb29sYmFyVG91Y2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEVWRU5UIEhBTkRMRVJTIEVNSVRURVJTXG4gICAgcHVibGljIG9uRWRpdG9yQ3JlYXRlZEVtaXQoIGV2ZW50OiBhbnkgKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnZWRpdG9yLWNyZWF0ZWQnLCBldmVudCk7IH1cbiAgICAgICAgLy8gU3RhcnRpbmcgcG9pbnQgZXZlbnQgcmV0dXJucyB0aGUgUXVpbGwgaW5zdGFuY2VcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnF1aWxsRWRpdG9yID0gZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gJ2h0bWwnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLnF1aWxsRWRpdG9yLmNsaXBib2FyZC5jb252ZXJ0KHsgaHRtbDogdGhpcy52YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZGVsdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3Iuc2V0Q29udGVudHMoZGVsdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KGV2ZW50KTsgICAgLy8gT0xEIEtFRVAhIFRPIEJFIERFUFJFQ0FURURcbiAgICAgICAgICAgIHRoaXMub25FZGl0b3JDcmVhdGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5pc0VkaXRvckNyZWF0ZWQgPSB0cnVlOyAgICAvLyBGb3IgZGVidWdnZXJcbiAgICAgICAgICAgIC8vIFNldCBmb2N1cyB3aGVuIG5hdmlnYXRpbmcgd2l0aCB0YWIga2V5XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRPbkZvY3VzQmFja3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdG9yU2V0Rm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEltcG9ydCAmIHJlZ2lzdGVyIG5ldyBtb2R1bGUgZm9yIGN1c3RvbSBMaW5rIGluc2VydCB3aXRoIGVuY29kZWQgVVJJIChFVUktMTU3NSlcbiAgICAgICAgICAgIHRoaXMuX2dldEVuY29kZWRVUklMaW5rKCk7XG4gICAgICAgICAgICAvLyBVc2UgVVJMIGltYWdlcyBpbnN0ZWFkIG9mIGVtYmVkZGVkIEI2NCBjb250ZW50IChvdmVycmlkZXMgZGVmYXVsdCBpbWFnZSBoYW5kbGVyKVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbWFnZVVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VVcmxIYW5kbGVyKHRoaXMucXVpbGxFZGl0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBvbkVkaXRvckNoYW5nZWRFbWl0KCBldmVudDogYW55ICkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZyA9PT0gJ2xvZycpIHsgY29uc29sZS5sb2coJ2VkaXRvci1jaGFuZ2VkJywgZXZlbnQpOyB9XG4gICAgICAgIGNvbnNvbGUud2Fybignb25FZGl0b3JDaGFuZ2UoKSBldmVudCBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2Ugb25Db250ZW50Q2hhbmdlKCkgZXZlbnQgaW5zdGVhZC4nKTtcbiAgICAgICAgdGhpcy5vbkVkaXRvckNoYW5nZWQuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuaGFzRWRpdG9yQ2hhbmdlZCA9IHRydWU7ICAgIC8vIEZvciBkZWJ1Z2dlclxuICAgIH1cbiAgICBwdWJsaWMgb25Db250ZW50Q2hhbmdlZEVtaXQoIGV2ZW50OiBhbnkgKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnY29udGVudC1jaGFuZ2VkJywgZXZlbnQpOyB9XG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoZXZlbnQpOyAgLy8gT0xEIEtFRVAhIFRPIEJFIERFUFJFQ0FURURcbiAgICAgICAgdGhpcy5vbkNvbnRlbnRDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLm9uRWRpdG9yQ2hhbmdlZEVtaXQoZXZlbnQpOyAgIC8vIFN5bmMgd2l0aCBlZGl0b3IgY2hhbmdlIGV2ZW50IHNpbmNlIGl0J3MgZHVwbGljYXRlZCBldmVudFxuICAgICAgICB0aGlzLmhhc0NvbnRlbnRDaGFuZ2VkID0gdHJ1ZTsgICAgIC8vIEZvciBkZWJ1Z2dlclxuICAgICAgICAvLyBVcGRhdGUgZWRpdG9yJ3MgdmFsdWVcbiAgICAgICAgc3dpdGNoICh0aGlzLmZvcm1hdCkge1xuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBldmVudC50ZXh0O1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ291bnRlcnMoIHRoaXMudmFsdWUgKTsgICAgLy8gVXBkYXRlIGNvdW50ZXJzXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoIGV2ZW50LmNvbnRlbnQgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50LmNvbnRlbnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBldmVudC5odG1sO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ291bnRlcnMoIHRoaXMudmFsdWUgKTsgICAgLy8gVXBkYXRlIGNvdW50ZXJzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoIHRoaXMudmFsdWUgKTtcbiAgICB9XG4gICAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlZEVtaXQoIGV2ZW50OiBhbnkgKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnc2VsZWN0aW9uLWNoYW5nZWQnLCBldmVudCk7IH1cbiAgICAgICAgdGhpcy5oYXNTZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgICAgLy8gRm9yIGRlYnVnZ2VyXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdChldmVudCk7IC8vIE9MRCBLRUVQISBUTyBCRSBERVBSRUNBVEVEXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgICBwdWJsaWMgb25Gb2N1c0VtaXQoIGV2ZW50OiBhbnkgKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnb25Gb2N1cycsIGV2ZW50KTsgfVxuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNCbHVyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQodHJ1ZSk7XG4gICAgfVxuICAgIHB1YmxpYyBvbkJsdXJFbWl0KCBldmVudDogYW55ICkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZyA9PT0gJ2xvZycpIHsgY29uc29sZS5sb2coJ29uQmx1cicsIGV2ZW50KTsgfVxuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQmx1cmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBDT05UUk9MIFZBTFVFIEFDQ0VTU09SU1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAobW9kZWxWYWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZWQgPSBmbjtcbiAgICB9XG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBFVUktMzU2OFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnID09PSAnbG9nJykgeyBjb25zb2xlLmxvZygnQ29udHJvbFZhbHVlQWNjZXNzb3JzOiB3cml0ZVZhbHVlKCk6JywgdmFsdWUpOyB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvdW50ZXJzKHRoaXMudmFsdWUpOyAgICAvLyBTZXQgaW5pdGlhbCBjb3VudGVyc1xuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBsYXN0IGNvcnJlY3QgaW5wdXQgdmFsdWUgd2hlbiBmb3JtQ29udHJvbCBpcyB2YWxpZFxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy5mb3JtQ29udHJvbFN0YXR1cyA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFZhbGlkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuICAgIHB1YmxpYyBwcm9wYWdhdGVUb3VjaGVkID0gKCkgPT4geyB9O1xuICAgIHB1YmxpYyBvblZhbGlkYXRvckNoYW5nZWQgPSAoKSA9PiB7IH07XG5cbiAgICAvLyBQUklWQVRFIEZVTkNUSU9OU1xuICAgIHByaXZhdGUgX2VkaXRvclNldEZvY3VzKCkge1xuICAgICAgICAvLyBTZXQgZm9jdXMgdG8gcWwtZWRpdG9yIGRpdiBjb250YWluZXJcbiAgICAgICAgaWYgKHRoaXMucXVpbGxFZGl0b3IpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAvLyBEbyBOT1QgdXNlIHBhdGNoVmFsdWUgaGVyZSBzaW5jZSBpdCByZXNldHMgZWRpdG9yJ3MgY3Vyc29yIHBvc2l0aW9uICEhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEN1c3RvbSBMaW5rIGluc2VydCB3aXRoIGVuY29kZWQgVVJJIG92ZXJyaWRlXG4gICAgcHJpdmF0ZSBfZ2V0RW5jb2RlZFVSSUxpbmsoKSB7XG4gICAgICAgIGxldCBMaW5rOiBMaW5rUGx1Z2luID0gUXVpbGwuaW1wb3J0KCdmb3JtYXRzL2xpbmsnKTtcbiAgICAgICAgY2xhc3MgTXlMaW5rIGV4dGVuZHMgKExpbmsgYXMgYW55KSB7XG4gICAgICAgICAgICBzdGF0aWMgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBzdXBlci5jcmVhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZW5jb2RlVVJJKCB0aGlzLnNhbml0aXplKHZhbHVlKSApO1xuICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIEhvdyB0byByZW1vdmUgdGFyZ2V0XG4gICAgICAgICAgICAgICAgLy8gaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vcXVpbGxqcy5jb20nKSkge1xuICAgICAgICAgICAgICAgIC8vICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndGFyZ2V0Jyk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFF1aWxsLnJlZ2lzdGVyKCdzaWxlbnQnLCBNeUxpbmspO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Zvcm1Db250cm9sU3RhdHVzQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICYmIHRoaXMubmdDb250cm9sLnN0YXR1c0NoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLnN0YXR1c0NoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAvLyBzdGFydFdpdGgodGhpcy5uZ0NvbnRyb2wuc3RhdHVzKSxcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sU3RhdHVzID0gJ1ZBTElEJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zvcm1Db250cm9sVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyaWFJbnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbFN0YXR1cyA9ICdJTlZBTElEJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zvcm1Db250cm9sVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmlhSW52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnV4Rm9ybUdyb3VwQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXhGb3JtR3JvdXBDb21wb25lbnQuaXNWYWxpZCA9IHRoaXMuaXNGb3JtQ29udHJvbFZhbGlkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV4Rm9ybUdyb3VwQ29tcG9uZW50LnZhbGlkYXRpb25FcnJvck1lc3NhZ2UgPSB0aGlzLnZhbGlkYXRpb25FcnJvck1lc3NhZ2UgfHwgdGhpcy51eEZvcm1Hcm91cENvbXBvbmVudC52YWxpZGF0aW9uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDb3VudGVycyhjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IHRleHQ6IHN0cmluZztcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSAnaHRtbCcpIHtcbiAgICAgICAgICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQubGVuZ3RoID4gMCAmJiB0aGlzLnF1aWxsRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMuX3N0cmlwSHRtbChjb250ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJhY3RlcnNDb3VudGVyID0gdGV4dC5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGhpcy5fY2xlYW5IdG1sKGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMud29yZHNDb3VudGVyID0gIXRleHQgPyAwIDogdGV4dC50cmltKCkuc3BsaXQoL1xccysvKS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyc0NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMud29yZHNDb3VudGVyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBpZiAoY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCA+IDAgJiYgdGhpcy5xdWlsbEVkaXRvcikge1xuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLl9zdHJpcEh0bWwodGhpcy5xdWlsbEVkaXRvci5yb290LmlubmVySFRNTCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFyYWN0ZXJzQ291bnRlciA9IHRleHQubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMuX2NsZWFuSHRtbCh0aGlzLnF1aWxsRWRpdG9yLnJvb3QuaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgICB0aGlzLndvcmRzQ291bnRlciA9ICF0ZXh0ID8gMCA6IHRleHQudHJpbSgpLnNwbGl0KC9cXHMrLykubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJhY3RlcnNDb3VudGVyID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLndvcmRzQ291bnRlciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9ybWF0IHRleHQgd2lsbCBiZSBERVBSRUNBVEVEIGluIG5leHQgbWFqb3IgZVVJIHJlbGVhc2VzICgxMyspXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBpZiAoY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCA+IDAgJiYgdGhpcy5xdWlsbEVkaXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyc0NvdW50ZXIgPSBjb250ZW50Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy53b3Jkc0NvdW50ZXIgPSB0aGlzLl9nZXRXb3JkQ291bnQoY29udGVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyc0NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMud29yZHNDb3VudGVyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE91dHB1dCBjb3VudGVycyAoZm9yIGN1c3RvbSB0b29sYmFyIHVzYWdlKVxuICAgICAgICB0aGlzLmdldENoYXJhY3RlcnNDb3VudGVyLmVtaXQodGhpcy5jaGFyYWN0ZXJzQ291bnRlcik7XG4gICAgICAgIHRoaXMuZ2V0V29yZHNDb3VudGVyLmVtaXQodGhpcy53b3Jkc0NvdW50ZXIpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBtYXhMZW5ndGggJiB2YWxpZGl0eVxuICAgICAgICB0aGlzLl9yZWZyZXNoTWF4TGVuZ3RoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0V29yZENvdW50KHN0cjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrLykubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hNYXhMZW5ndGgoKSB7XG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCAmJiB0aGlzLm1heExlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2hhcmFjdGVyc0xlZnQgPSB0aGlzLm1heExlbmd0aCAtIHRoaXMuY2hhcmFjdGVyc0NvdW50ZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGFyYWN0ZXJzTGVmdCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJhY3RlcnNMZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTWF4TGVuZ3RoVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9ybUNvbnRyb2xWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTWF4TGVuZ3RoVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdHJpcEh0bWwoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKDwoW14+XSspPikvZ207XG4gICAgICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UocmVnZXgsICcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGVhbkh0bWwoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXhjZXB0VGFncyA9IC88c3Ryb25nPnw8XFwvc3Ryb25nPnw8Yj58PFxcL2I+fDxpPnw8XFwvaT58PGVtPnw8XFwvZW0+fDxzPnw8XFwvcz58PHN0cmlrZT58PFxcL3N0cmlrZT58PHU+fDxcXC91Pi9nbTtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKDwoW14+XSspPikvZ207XG4gICAgICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UoZXhjZXB0VGFncywgJycpLnJlcGxhY2UocmVnZXgsICcgJykucmVwbGFjZSgnICAnLCAnICcpO1xuICAgIH1cbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICd1eEVkaXRvckN1c3RvbVRvb2xiYXInIH0pXG5leHBvcnQgY2xhc3MgVXhFZGl0b3JDdXN0b21Ub29sYmFyVGFnRGlyZWN0aXZlIHtcbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFF1aWxsTW9kdWxlLmZvclJvb3QoKSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgVXhFZGl0b3JDb21wb25lbnQsXG4gICAgICAgIFV4RWRpdG9yVmlld0NvbXBvbmVudCxcbiAgICAgICAgVXhFZGl0b3JWaWV3SFRNTENvbXBvbmVudCxcbiAgICAgICAgVXhFZGl0b3JDb3VudGVyc0NvbXBvbmVudCxcbiAgICAgICAgVXhFZGl0b3JDdXN0b21Ub29sYmFyVGFnRGlyZWN0aXZlLFxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIFV4RWRpdG9yQ29tcG9uZW50LFxuICAgICAgICBVeEVkaXRvclZpZXdDb21wb25lbnQsXG4gICAgICAgIFV4RWRpdG9yVmlld0hUTUxDb21wb25lbnQsXG4gICAgICAgIFV4RWRpdG9yQ291bnRlcnNDb21wb25lbnQsXG4gICAgICAgIFV4RWRpdG9yQ3VzdG9tVG9vbGJhclRhZ0RpcmVjdGl2ZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBVeEVkaXRvckNvbXBvbmVudE1vZHVsZSB7fVxuIiwiPGRpdiBjbGFzcz1cInV4LWVkaXRvci13cmFwcGVyXCI+XG4gICAgPHF1aWxsLWVkaXRvciAqbmdJZj1cIiFpc1JlYWRPbmx5IHx8IGlzVXNlZE5hdGl2ZUVkaXRvckluUmVhZE1vZGVcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJnZW5lcmF0ZWRJZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC1lZGl0b3Ige3tzdHlsZUNsYXNzfX1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC1lZGl0b3ItLXJlYWRvbmx5XT1cImlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC1lZGl0b3ItLWZvY3VzZWRdPVwiaXNGb2N1c2VkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtZWRpdG9yLS1lZGl0YWJsZV09XCIhaXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRzXT1cImZvcm1hdHNcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwibWF4TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbWluTGVuZ3RoXT1cIm1pbkxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbc2FuaXRpemVdPVwiaXNVc2VkU2FuaXRpemF0aW9uRm9ySHRtbFwiXG4gICAgICAgICAgICAgICAgW21vZHVsZXNdPVwibW9kdWxlc1wiXG4gICAgICAgICAgICAgICAgW3RoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZXNdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgIFtjdXN0b21Ub29sYmFyUG9zaXRpb25dPVwiY3VzdG9tVG9vbGJhclBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICBbcHJlc2VydmVXaGl0ZXNwYWNlXT1cInByZXNlcnZlV2hpdGVzcGFjZVwiXG4gICAgICAgICAgICAgICAgW3NwZWxsY2hlY2tdPVwic3BlbGxjaGVja1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImFyaWFJbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIChvbkVkaXRvckNyZWF0ZWQpPVwib25FZGl0b3JDcmVhdGVkRW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25FZGl0b3JDaGFuZ2VkKT1cIm9uRWRpdG9yQ2hhbmdlZEVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uQ29udGVudENoYW5nZWQpPVwib25Db250ZW50Q2hhbmdlZEVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJvblNlbGVjdGlvbkNoYW5nZWRFbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbkZvY3VzKT1cIm9uRm9jdXNFbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25CbHVyRW1pdCgkZXZlbnQpXCI+XG5cbiAgICAgICAgPCEtLSBQUkVERUZJTkVEIERFRkFVTFQgVE9PTEJBUiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjdXN0b21Ub29sYmFyT3B0aW9ucyAmJiAhY3VzdG9tRWRpdG9yVG9vbGJhclwiIHF1aWxsLWVkaXRvci10b29sYmFyIChmb2N1c2luKT1cIm9uVG9vbGJhckZvY3VzSW4oJGV2ZW50KVwiIChmb2N1c291dCk9XCJvblRvb2xiYXJGb2N1c091dCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtaGVhZGVyXCIgdGl0bGU9XCJTdHlsZXt7Y3JsZn19QXBwbHkgYW4gSFRNTCB0YWcgb3IgQ1NTIGNsYXNzIHRvIHRoZSBzZWxlY3RlZCB0ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+SGVhZGluZyAxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyXCI+SGVhZGluZyAyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzXCI+SGVhZGluZyAzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI0XCI+SGVhZGluZyA0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI1XCI+SGVhZGluZyA1PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI2XCI+SGVhZGluZyA2PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Tm9ybWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1zaXplXCIgdGl0bGU9XCJGb250IHNpemV7e2NybGZ9fUNoYW5nZSB0aGUgZm9udCBzaXplIG9mIHRoZSBzZWxlY3RlZCB0ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzbWFsbFwiPlNtYWxsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Tm9ybWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsYXJnZVwiPkxhcmdlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJodWdlXCI+SHVnZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9zcGFuPiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTWluaW1hbFRvb2xiYXJcIiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtZm9udFwiIHRpdGxlPVwiRm9udHt7Y3JsZn19Q2hhbmdlIHRoZSBmb250IGZhY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD5TYW5zIFNlcmlmPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzZXJpZlwiPlNlcmlmPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtb25vc3BhY2VcIj5Nb25vc3BhY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1ib2xkXCIgYXJpYS1sYWJlbD1cIkJvbGQgKEN0cmwgKyBCKVwiIHRpdGxlPVwiQm9sZCAoQ3RybCArIEIpe3tjcmxmfX1NYWtlIHRoZSBzZWxlY3RlZCB0ZXh0IGJvbGRcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaXRhbGljXCIgYXJpYS1sYWJlbD1cIkl0YWxpYyAoQ3RybCArIEkpXCIgdGl0bGU9XCJJdGFsaWMgKEN0cmwgKyBJKXt7Y3JsZn19SXRhbGljaXplIHRoZSBzZWxlY3RlZCB0ZXh0XCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXVuZGVybGluZVwiIGFyaWEtbGFiZWw9XCJVbmRlcmxpbmUgKEN0cmwgKyBVKVwiIHRpdGxlPVwiVW5kZXJsaW5lIChDdHJsICsgVSl7e2NybGZ9fVVuZGVybGluZSB0aGUgc2VsZWN0ZWQgdGV4dFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1zdHJpa2VcIiBhcmlhLWxhYmVsPVwiU3RyaWtldGhyb3VnaFwiIHRpdGxlPVwiU3RyaWtldGhyb3VnaHt7Y3JsZn19RHJhdyBhIGxpbmUgdG8gdGhlIG1pZGRsZSBvZiB0aGUgc2VsZWN0ZWQgdGV4dFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWNvbG9yXCIgYXJpYS1sYWJlbD1cIkZvbnQgQ29sb3JcIiB0aXRsZT1cIkZvbnQgQ29sb3J7e2NybGZ9fUNoYW5nZSB0aGUgdGV4dCBjb2xvclwiPjwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1iYWNrZ3JvdW5kXCIgYXJpYS1sYWJlbD1cIlRleHQgSGlnaGxpZ2h0IENvbG9yXCIgdGl0bGU9XCJUZXh0IEhpZ2hsaWdodCBDb2xvcnt7Y3JsZn19Q2hhbmdlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0ZXh0XCI+PC9zZWxlY3Q+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc01pbmltYWxUb29sYmFyXCIgY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXNjcmlwdFwiIHZhbHVlPVwic3ViXCIgYXJpYS1sYWJlbD1cIlN1YnNjcmlwdFwiIHRpdGxlPVwiU3Vic2NyaXB0e3tjcmxmfX1DcmVhdGUgc3NtYWxsIGxldHRlcnMgYmVsb3cgdGhlIHRleHQgYmFzZWxpbmVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtc2NyaXB0XCIgdmFsdWU9XCJzdXBlclwiIGFyaWEtbGFiZWw9XCJTdXBlcnNjcmlwdFwiIHRpdGxlPVwiU3VwZXJzY3JpcHR7e2NybGZ9fUNyZWF0ZSBzbWFsbCBsZXR0ZXJzIGFib3ZlIHRoZSBsaW5lIG9mIHRoZSB0ZXh0XCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtYWxpZ25cIiBhcmlhLWxhYmVsPVwiVGV4dCBBbGlnblwiIHRpdGxlPVwiVGV4dCBBbGlnbnt7Y3JsZn19QWxpZ24gdGhlIHRleHQgdG8gdGhlIHNlbGVjdGVkIHBvc2l0aW9uOiBsZWZ0IChkZWZhdWx0KSwgY2VudGVyLCByaWdodCBvciBqdXN0aWZ5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjZW50ZXJcIj48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJpZ2h0XCI+PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJqdXN0aWZ5XCI+PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc01pbmltYWxUb29sYmFyXCIgY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cIm9yZGVyZWRcIiBhcmlhLWxhYmVsPVwiT3JkZXJlZCBMaXN0XCIgdGl0bGU9XCJOdW1iZXJpbmd7e2NybGZ9fVN0YXJ0IGFuIG9yZGVyZWQgbGlzdFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJidWxsZXRcIiBhcmlhLWxhYmVsPVwiVW5vcmRlcmVkIExpc3RcIiB0aXRsZT1cIkJ1bGxldHN7e2NybGZ9fVN0YXJ0IGEgYnVsbGV0ZWQgbGlzdFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1pbmRlbnRcIiB2YWx1ZT1cIi0xXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJEZWNyZWFzZSBJbmRlbnRcIiB0aXRsZT1cIkRlY3JlYXNlIEluZGVudHt7Y3JsZn19RGVjcmVhc2UgdGhlIGluZGVudCBsZXZlbCBvZiB0aGUgcGFyYWdyYXBoXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWluZGVudFwiIHZhbHVlPVwiKzFcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkluY3JlYXNlIEluZGVudFwiIHRpdGxlPVwiSW5jcmVhc2UgSW5kZW50e3tjcmxmfX1JbmNyZWFzZSB0aGUgaW5kZW50IGxldmVsIG9mIHRoZSBwYXJhZ3JhcGhcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gSW5zZXJ0IGdyb3VwIC0tPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc01pbmltYWxUb29sYmFyXCIgY2xhc3M9XCJxbC1ibG9ja3F1b3RlXCIgYXJpYS1sYWJlbD1cIkJsb2NrcXVvdGVcIiB0aXRsZT1cIkJsb2NrcXVvdGV7e2NybGZ9fUNyZWF0ZSBhIHF1b3RlZCBibG9jayBvZiB0aGUgc2VsZWN0ZWQgdGV4dFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaXNNaW5pbWFsVG9vbGJhclwiIGNsYXNzPVwicWwtY29kZS1ibG9ja1wiIGFyaWEtbGFiZWw9XCJJbnNlcnQgQ29kZSBCbG9ja1wiIHRpdGxlPVwiSW5zZXJ0IENvZGUgQmxvY2t7e2NybGZ9fUluc2VydCBhIGNvZGUgYmxvY2sgYXQgdGhlIGN1cnNvciByb3cgcG9zaXRpb25cIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlua1wiIGFyaWEtbGFiZWw9XCJJbnNlcnQgTGlua1wiIHRpdGxlPVwiSW5zZXJ0IEh5cGVybGluayAoQ3RybCArIEspe3tjcmxmfX1DcmVhdGUgYSBsaW5rIHRvIGEgV2ViIHBhZ2UsIGEgcGljdHVyZSwgYW4gZS1tYWlsIGFkZHJlc3Mgb3IgYSBwcm9ncmFtXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0ltYWdlVXJsXCIgY2xhc3M9XCJxbC1pbWFnZVwiIGFyaWEtbGFiZWw9XCJJbnNlcnQgSW1hZ2VcIiB0aXRsZT1cIkluc2VydCBQaWN0dXJle3tjcmxmfX1JbnNlcnQgYSBwaWN0dXJlIGZyb20gYSBmaWxlXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzSW1hZ2VVcmxcIiBjbGFzcz1cInFsLWltYWdlXCIgYXJpYS1sYWJlbD1cIkluc2VydCBJbWFnZSBmcm9tIFVSTFwiIHRpdGxlPVwiSW5zZXJ0IFBpY3R1cmUgZnJvbSBVUkx7e2NybGZ9fUluc2VydCBhIHBpY3R1cmUgZnJvbSBhIHJlbW90ZSBVUkxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktaWNvbiBldWktaWNvbi1pbWFnZS1hZGRcIj48L3NwYW4+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc01pbmltYWxUb29sYmFyXCIgY2xhc3M9XCJxbC12aWRlb1wiIGFyaWEtbGFiZWw9XCJJbnNlcnQgVmlkZW9cIiB0aXRsZT1cIkluc2VydCBWaWRlb3t7Y3JsZn19SW5zZXJ0IGEgdmlkZW8gZnJvbSBhIGZpbGVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gQ2xlYW4gLyBDbGVhciAtLT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0c1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1jbGVhblwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgU3R5bGVzXCIgdGl0bGU9XCJSZW1vdmUgU3R5bGVze3tjcmxmfX1SZW1vdmUgdGhlIHN0eWxlcyBvZiB0aGUgc2VsZWN0ZWQgdGV4dFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gYXJpYS1sYWJlbD1cIkRlbGV0ZVwiIHRpdGxlPVwiRGVsZXRlIGNvbnRlbnR7e2NybGZ9fVBlcm1hbmVudGx5IGRlbGV0ZXMgZWRpdG9yJ3MgY29udGVudHNcIiAoY2xpY2spPVwiZWRpdG9yRGVsZXRlQ29udGVudCgkZXZlbnQpXCI+PHNwYW4gY2xhc3M9XCJldWktaWNvbiBldWktaWNvbi1kZWxldGUtZm9yZXZlclwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBVbmRvL1JlZG8gLS0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGFyaWEtbGFiZWw9XCJVbmRvIChDdHJsICsgWilcIiB0aXRsZT1cIlVuZG8gKEN0cmwgKyBaKXt7Y3JsZn19Q2FuY2VscyB0aGUgcHJldmlvdXMgYWN0aW9uXCIgKGNsaWNrKT1cImVkaXRvclVuZG8oKVwiPjxzcGFuIGNsYXNzPVwiZXVpLWljb24gZXVpLWljb24tdW5kb1wiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGFyaWEtbGFiZWw9XCJSZWRvIChDdHJsICsgWSlcIiB0aXRsZT1cIlJlZG8gKEN0cmwgKyBZKXt7Y3JsZn19RG8gdGhlIG5leHQgaGlzdG9yeSBhY3Rpb24gYWdhaW5cIiAoY2xpY2spPVwiZWRpdG9yUmVkbygpXCI+PHNwYW4gY2xhc3M9XCJldWktaWNvbiBldWktaWNvbi1yZWRvXCI+PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSBDb3VudGVycyAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0NvdW50ZXJzICYmIChmb3JtYXQgPT09ICdodG1sJyB8fCBmb3JtYXQgPT09ICd0ZXh0JylcIiBjbGFzcz1cInFsLWZvcm1hdHNcIj5cbiAgICAgICAgICAgICAgICA8dXgtZWRpdG9yLWNvdW50ZXJzIFtjaGFyYWN0ZXJzQ291bnRlcl09XCJjaGFyYWN0ZXJzQ291bnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hhcmFjdGVyc0xhYmVsXT1cImNoYXJhY3RlcnNMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd29yZHNDb3VudGVyXT1cIndvcmRzQ291bnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd29yZHNMYWJlbF09XCJ3b3Jkc0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc01heExlbmd0aFZhbGlkXT1cImlzTWF4TGVuZ3RoVmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNvdW50ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ291bnRlcnN7e2NybGZ9fUNoYXJhY3RlcnMgYW5kIHdvcmRzIGNvdW50ZXJzIChzdHJpcHBlZCBIdG1sKVwiPlxuICAgICAgICAgICAgICAgIDwvdXgtZWRpdG9yLWNvdW50ZXJzPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFVTRVIgQ1VTVE9NIFRPT0xCQVIgKEhUTUwgRk9STUFUKSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImN1c3RvbUVkaXRvclRvb2xiYXJcIiBxdWlsbC1lZGl0b3ItdG9vbGJhciAoZm9jdXNpbik9XCJvblRvb2xiYXJGb2N1c0luKCRldmVudClcIiAoZm9jdXNvdXQpPVwib25Ub29sYmFyRm9jdXNPdXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidXhFZGl0b3JDdXN0b21Ub29sYmFyXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3F1aWxsLWVkaXRvcj5cblxuICAgIDwhLS0gTUFYTEVOR1RIIElORElDQVRPUiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzUmVhZE9ubHkgJiYgY2hhcmFjdGVyc0xlZnQgPiAtMVwiIGNsYXNzPVwibWF4bGVuZ3RoLXdyYXBwZXJcIiBbY2xhc3MubWF4bGVuZ3RoLXdyYXBwZXItLWVycm9yXT1cIiFpc01heExlbmd0aFZhbGlkXCI+e3sgY2hhcmFjdGVyc0xlZnQgfX08L2Rpdj5cbjwvZGl2PlxuXG5cbjwhLS0gUkVBRE9OTFkgTU9ERSAtLT5cbjxkaXYgKm5nSWY9XCJpc1JlYWRPbmx5ICYmICFpc1VzZWROYXRpdmVFZGl0b3JJblJlYWRNb2RlXCIgY2xhc3M9XCJ1eC1lZGl0b3IgdXgtZWRpdG9yLS1yZWFkb25seSB7e3N0eWxlQ2xhc3N9fVwiIFtjbGFzcy51eC1lZGl0b3ItLWVtcHR5XT1cIiF2YWx1ZVwiIHRhYmluZGV4PVwie3t0YWJpbmRleH19XCIgKGNsaWNrKT1cImVuYWJsZUVkaXRvck9uQ2xpY2tGb2N1cygkZXZlbnQpXCIgKGZvY3VzaW4pPVwiZW5hYmxlRWRpdG9yT25DbGlja0ZvY3VzKCRldmVudClcIj5cbiAgICA8dXgtZWRpdG9yLXZpZXctaHRtbCAqbmdJZj1cImZvcm1hdCA9PT0gJ2h0bWwnIHx8IGZvcm1hdCA9PT0gJ3RleHQnXCIgW2NvbnRlbnRdPVwidmFsdWVcIiBbdGhlbWVdPVwidGhlbWVcIiBbc3R5bGVzXT1cImhhc1JlYWRPbmx5U3R5bGVzID8gc3R5bGUgOiBudWxsXCI+PC91eC1lZGl0b3Itdmlldy1odG1sPlxuICAgIDx1eC1lZGl0b3ItdmlldyAqbmdJZj1cImZvcm1hdCA9PT0gJ29iamVjdCcgfHwgZm9ybWF0ID09PSAnanNvbidcIiBbY29udGVudF09XCJ2YWx1ZVwiIFtmb3JtYXRdPVwiZm9ybWF0XCIgW3RoZW1lXT1cInRoZW1lXCIgW3N0eWxlc109XCJoYXNSZWFkT25seVN0eWxlcyA/IHN0eWxlIDogbnVsbFwiPjwvdXgtZWRpdG9yLXZpZXc+XG48L2Rpdj5cblxuXG48IS0tIERFQlVHR0VSIC0tPlxuPGRpdiAqbmdJZj1cImRlYnVnXCIgY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnXCI+XG4gICAgPGRpdiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctdGl0bGVcIj5VWC1FRElUT1IgZGVidWc8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1zZWN0aW9uXCI+XG4gICAgICAgIDxzdHJvbmc+T1BUSU9OUzo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlIHV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZlwiPmlkOiA8c3BhbiBjbGFzcz1cImV1aS11LWNvbG9yLWJsYWNrXCI+e3tnZW5lcmF0ZWRJZH19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlIHV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZlwiPnRvb2xiYXJQb3NpdGlvbjoge3tjdXN0b21Ub29sYmFyUG9zaXRpb259fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXT1cImlzUmVhZE9ubHlcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFpc1JlYWRPbmx5XCI+aXNSZWFkT25seTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXT1cImlzRW5hYmxlZE9uRm9jdXNcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFpc0VuYWJsZWRPbkZvY3VzXCI+aXNFbmFibGVkT25Gb2N1czwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXT1cInByZXNlcnZlV2hpdGVzcGFjZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZdPVwiIXByZXNlcnZlV2hpdGVzcGFjZVwiPnByZXNlcnZlV2hpdGVzcGFjZTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXT1cInNwZWxsY2hlY2tcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFzcGVsbGNoZWNrXCI+c3BlbGxjaGVjazwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlIHV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZlwiPm1heExlbmd0aDogPHNwYW4gY2xhc3M9XCJldWktdS1jb2xvci1ibGFja1wiPnt7bWF4TGVuZ3RofX08L3NwYW4+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLXNlY3Rpb25cIj5cbiAgICAgICAgPHN0cm9uZz5FVkVOVFM6PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJpc0ZvY3VzZWRcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFpc0ZvY3VzZWRcIj5vbkZvY3VzPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb25dPVwiaXNCbHVyZWRcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFpc0JsdXJlZFwiPm9uQmx1cjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXT1cImlzRWRpdG9yQ3JlYXRlZFwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZdPVwiIWlzRWRpdG9yQ3JlYXRlZFwiPm9uRWRpdG9yQ3JlYXRlZDwvc3Bhbj5cbiAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb25dPVwiaGFzRWRpdG9yQ2hhbmdlZFwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZdPVwiIWhhc0VkaXRvckNoYW5nZWRcIj5vbkVkaXRvckNoYW5nZWQ8L3NwYW4+IC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2VcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb25dPVwiaGFzQ29udGVudENoYW5nZWRcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXT1cIiFoYXNDb250ZW50Q2hhbmdlZFwiPm9uQ29udGVudENoYW5nZWQ8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJoYXNTZWxlY3Rpb25DaGFuZ2VkXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaGFzU2VsZWN0aW9uQ2hhbmdlZFwiPm9uU2VsZWN0aW9uQ2hhbmdlZDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1zZWN0aW9uXCI+XG4gICAgICAgIDxzdHJvbmc+Rk9STTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlIHV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZlwiPmNvbnRyb2xOYW1lOiA8c3BhbiBjbGFzcz1cImV1aS11LWNvbG9yLWJsYWNrXCI+e3tmb3JtQ29udHJvbE5hbWV9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJpc1JlcXVpcmVkXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZl09XCIhaXNSZXF1aXJlZFwiPmlzUmVxdWlyZWQ8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZVwiIFtjbGFzcy51eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vbl09XCJpc0Zvcm1Db250cm9sVmFsaWRcIiBbY2xhc3MudXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tYWxlcnRdPVwiIWlzRm9ybUNvbnRyb2xWYWxpZFwiPmlzRm9ybUNvbnRyb2xWYWxpZDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlIHV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9mZlwiPnZhbGlkYXRpb25FcnJvck1lc3NhZ2U6IDxzcGFuIGNsYXNzPVwiZXVpLXUtY29sb3Ite3tmZWVkYmFja1R5cGVDbGFzc319XCI+e3tmb3JtVmFsaWRhdGlvbkVycm9yTWVzc2FnZX19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC1lZGl0b3JfX2RlYnVnLWJhZGdlIHV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLW9uXCIgW2NsYXNzLnV4LWVkaXRvcl9fZGVidWctYmFkZ2UtLWFsZXJ0XT1cIiFpc01heExlbmd0aFZhbGlkXCI+aXNNYXhMZW5ndGhWYWxpZDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1zZWN0aW9uXCI+XG4gICAgICAgIDxzdHJvbmc+U1RZTEU6PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZcIj57eyBzdHlsZSB8IGpzb259fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1zZWN0aW9uXCI+XG4gICAgICAgIDxzdHJvbmc+U09VUkNFOjwvc3Ryb25nPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctYmFkZ2UgdXgtZWRpdG9yX19kZWJ1Zy1iYWRnZS0tb2ZmXCI+Zm9ybWF0OiA8c3BhbiBjbGFzcz1cImV1aS11LWNvbG9yLWJsYWNrXCI+e3tmb3JtYXR9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1iYWRnZSB1eC1lZGl0b3JfX2RlYnVnLWJhZGdlLS1vZmZcIj5jaGFyYWN0ZXJzTGVmdDogPHNwYW4gW25nQ2xhc3NdPVwiaXNNYXhMZW5ndGhWYWxpZCA/ICdldWktdS1jb2xvci1ibGFjaycgOiAnZXVpLXUtY29sb3ItZGFuZ2VyJ1wiPnt7Y2hhcmFjdGVyc0xlZnR9fTwvc3Bhbj48L3NwYW4+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidXgtZWRpdG9yX19kZWJ1Zy1zb3VyY2VcIj5cbiAgICAgICAgPGNvZGUgKm5nSWY9XCJmb3JtYXQgPT09ICd0ZXh0JyB8fCBmb3JtYXQgPT09ICdodG1sJ1wiPnt7Zm9ybUNvbnRyb2wudmFsdWV9fTwvY29kZT5cbiAgICAgICAgPGNvZGUgKm5nSWY9XCJmb3JtYXQgPT09ICdqc29uJyB8fCBmb3JtYXQgPT09ICdvYmplY3QnXCI+PHByZSBjbGFzcz1cInV4LWVkaXRvcl9fZGVidWctc291cmNlLWNvZGVcIj57e2Zvcm1Db250cm9sLnZhbHVlIHwganNvbn19PC9wcmU+PC9jb2RlPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|