@rangertechnologies/ngnxt 2.1.174 → 2.1.176
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/esm2022/environments/version.mjs +2 -2
- package/esm2022/lib/components/button/nxt-button.component.mjs +42 -39
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +48 -7
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +41 -4
- package/esm2022/lib/components/datatable/datatable.component.mjs +6 -3
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +24 -59
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +2822 -0
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +19 -5
- package/esm2022/lib/components/search-box/search-box.component.mjs +19 -13
- package/esm2022/lib/nxt-app.module.mjs +13 -292
- package/esm2022/lib/pages/booklet/booklet.component.mjs +20 -7
- package/esm2022/lib/pages/builder/element/element.component.mjs +8 -5
- package/esm2022/lib/pages/builder/form/form.component.mjs +6 -5
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +7 -5
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +4 -5
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +2 -2
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +14 -30
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +21 -40
- package/esm2022/public-api.mjs +2 -11
- package/fesm2022/rangertechnologies-ngnxt.mjs +15904 -14727
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/button/nxt-button.component.d.ts +13 -12
- package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +11 -4
- package/lib/components/custom-radio/custom-radio.component.d.ts +14 -3
- package/lib/components/datatable/datatable.component.d.ts +2 -1
- package/lib/components/file-upload/file-upload.component.d.ts +6 -5
- package/lib/components/nxt-input/nxt-input.component.d.ts +159 -0
- package/lib/components/pick-location/pick-location.component.d.ts +5 -3
- package/lib/components/search-box/search-box.component.d.ts +3 -2
- package/lib/nxt-app.module.d.ts +30 -55
- package/lib/pages/booklet/booklet.component.d.ts +3 -1
- package/lib/pages/builder/element/element.component.d.ts +1 -1
- package/lib/pages/builder/form/form.component.d.ts +1 -1
- package/lib/pages/builder/properties/properties.component.d.ts +1 -1
- package/lib/pages/questionbook/questionbook.component.d.ts +3 -3
- package/lib/pages/questionnaire/questionnaire.component.d.ts +6 -10
- package/package.json +1 -1
- package/public-api.d.ts +1 -9
- package/rangertechnologies-ngnxt-2.1.176.tgz +0 -0
- package/src/lib/style.css +0 -1
- package/esm2022/lib/components/cards/group-card/group-card.component.mjs +0 -36
- package/esm2022/lib/components/cards/group-info/group-info.component.mjs +0 -102
- package/esm2022/lib/components/cards/image-card/image-card.component.mjs +0 -83
- package/esm2022/lib/components/cards/info-card/info-card.component.mjs +0 -109
- package/esm2022/lib/components/custom-button/custom-button.component.mjs +0 -42
- package/esm2022/lib/components/custom-date/custom-date.component.mjs +0 -48
- package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +0 -53
- package/esm2022/lib/components/custom-image/custom-image.component.mjs +0 -34
- package/esm2022/lib/components/custom-input/custom-input.component.mjs +0 -101
- package/esm2022/lib/components/custom-label/custom-label.component.mjs +0 -24
- package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +0 -182
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +0 -252
- package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +0 -71
- package/esm2022/lib/components/custom-time/custom-time.component.mjs +0 -66
- package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +0 -45
- package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +0 -44
- package/esm2022/lib/components/file-view/file-view.component.mjs +0 -49
- package/esm2022/lib/components/loader/loader.component.mjs +0 -23
- package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +0 -128
- package/esm2022/lib/model/tableWrapper.mjs +0 -20
- package/esm2022/lib/pages/summary-page/summary-page.component.mjs +0 -79
- package/lib/components/cards/group-card/group-card.component.d.ts +0 -13
- package/lib/components/cards/group-info/group-info.component.d.ts +0 -47
- package/lib/components/cards/image-card/image-card.component.d.ts +0 -34
- package/lib/components/cards/info-card/info-card.component.d.ts +0 -39
- package/lib/components/custom-button/custom-button.component.d.ts +0 -16
- package/lib/components/custom-date/custom-date.component.d.ts +0 -16
- package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +0 -20
- package/lib/components/custom-image/custom-image.component.d.ts +0 -13
- package/lib/components/custom-input/custom-input.component.d.ts +0 -28
- package/lib/components/custom-label/custom-label.component.d.ts +0 -10
- package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +0 -29
- package/lib/components/custom-table/custom-table.component.d.ts +0 -53
- package/lib/components/custom-text-area/custom-text-area.component.d.ts +0 -22
- package/lib/components/custom-time/custom-time.component.d.ts +0 -18
- package/lib/components/dependent-table/dependent-table.component.d.ts +0 -15
- package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +0 -16
- package/lib/components/file-view/file-view.component.d.ts +0 -16
- package/lib/components/loader/loader.component.d.ts +0 -11
- package/lib/components/table-appendix/table-appendix.component.d.ts +0 -30
- package/lib/model/tableWrapper.d.ts +0 -18
- package/lib/pages/summary-page/summary-page.component.d.ts +0 -20
- package/rangertechnologies-ngnxt-2.1.174.tgz +0 -0
|
@@ -5,26 +5,18 @@ import { CommonModule, DOCUMENT } from '@angular/common';
|
|
|
5
5
|
import { BehaviorSubject } from 'rxjs';
|
|
6
6
|
import { FormsModule } from '@angular/forms';
|
|
7
7
|
import { ImageCropperComponent } from '../../components/image-cropper/component/image-cropper.component';
|
|
8
|
-
import { DependentTableComponent } from '../../components/dependent-table/dependent-table.component';
|
|
9
8
|
import { CustomRadioComponent } from '../../components/custom-radio/custom-radio.component';
|
|
10
9
|
import { FileUploadComponent } from '../../components/file-upload/file-upload.component';
|
|
11
10
|
import { CustomDropdownComponent } from '../../components/custom-dropdown/custom-dropdown.component';
|
|
12
|
-
import { CustomButtonComponent } from '../../components/custom-button/custom-button.component';
|
|
13
|
-
import { CustomLabelComponent } from '../../components/custom-label/custom-label.component';
|
|
14
11
|
import { SearchBoxComponent } from '../../components/search-box/search-box.component';
|
|
15
|
-
import { TableAppendixComponent } from '../../components/table-appendix/table-appendix.component';
|
|
16
12
|
import { NxtDatatable } from '../../components/datatable/datatable.component';
|
|
17
|
-
import { CustomRichTextComponent } from '../../components/custom-rich-text/custom-rich-text.component';
|
|
18
13
|
import { PickLocationComponent } from '../../components/pick-location/pick-location.component';
|
|
19
|
-
import { CustomInputComponent } from '../../components/custom-input/custom-input.component';
|
|
20
14
|
import { CustomModelComponent } from '../../components/custom-model/custom-model.component';
|
|
21
15
|
import { CustomCalendarComponent } from '../../components/custom-calendar/custom-calendar.component';
|
|
22
16
|
import { I18nPipe } from '../../i18n.pipe';
|
|
23
|
-
import { CustomTextAreaComponent } from '../../components/custom-text-area/custom-text-area.component';
|
|
24
|
-
import { CustomTimeComponent } from '../../components/custom-time/custom-time.component';
|
|
25
|
-
import { CustomDateComponent } from '../../components/custom-date/custom-date.component';
|
|
26
|
-
import { CustomDatePickerComponent } from '../../components/custom-date-picker/custom-date-picker.component';
|
|
27
17
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
18
|
+
import { NxtInput } from '../../components/nxt-input/nxt-input.component';
|
|
19
|
+
import { NxtButtonComponent } from '../../components/button/nxt-button.component';
|
|
28
20
|
import * as i0 from "@angular/core";
|
|
29
21
|
import * as i1 from "../../services/salesforce.service";
|
|
30
22
|
import * as i2 from "../../services/data.service";
|
|
@@ -32,9 +24,8 @@ import * as i3 from "../../services/change.service";
|
|
|
32
24
|
import * as i4 from "../../services/storage.service";
|
|
33
25
|
import * as i5 from "../../i18n.service";
|
|
34
26
|
import * as i6 from "@angular/common";
|
|
35
|
-
import * as i7 from "@angular/
|
|
36
|
-
import * as i8 from "@angular/
|
|
37
|
-
import * as i9 from "@angular/cdk/bidi";
|
|
27
|
+
import * as i7 from "@angular/material/tooltip";
|
|
28
|
+
import * as i8 from "@angular/cdk/bidi";
|
|
38
29
|
export class QuestionbookComponent {
|
|
39
30
|
sfService;
|
|
40
31
|
dataService;
|
|
@@ -53,6 +44,7 @@ export class QuestionbookComponent {
|
|
|
53
44
|
isEdit;
|
|
54
45
|
handleDropDown = new EventEmitter();
|
|
55
46
|
handleQuestion = new EventEmitter(); // VD 19Jul01 - get updated question
|
|
47
|
+
singleFieldChangeEmit = new EventEmitter();
|
|
56
48
|
dropDownData;
|
|
57
49
|
dataBind;
|
|
58
50
|
//@ViewChild(ComponenthostDirective, { static: true }) dynamicHost: ComponenthostDirective;
|
|
@@ -140,19 +132,6 @@ export class QuestionbookComponent {
|
|
|
140
132
|
}
|
|
141
133
|
});
|
|
142
134
|
}
|
|
143
|
-
// AP-19MAY25 - Update questions' read-only state based on isEdit changes
|
|
144
|
-
ngOnChanges(changes) {
|
|
145
|
-
if (changes['isEdit']) {
|
|
146
|
-
this.questions.forEach(ques => {
|
|
147
|
-
if (!this.isEdit && !ques.isHidden) {
|
|
148
|
-
ques.isReadOnly = true;
|
|
149
|
-
}
|
|
150
|
-
else if (this.isEdit && !ques.isHidden) {
|
|
151
|
-
ques.isReadOnly = false;
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
135
|
ngAfterViewInit() {
|
|
157
136
|
// SKS20MAR25 Ensure the child component is available before calling the method
|
|
158
137
|
// AP-26MAR25 Ensure ques.subText is always an object by parsing it if it's a string
|
|
@@ -568,6 +547,9 @@ export class QuestionbookComponent {
|
|
|
568
547
|
// VD 19Jul01 - get updated question
|
|
569
548
|
this.handleQuestion.emit(ques);
|
|
570
549
|
}
|
|
550
|
+
if (ques?.singleFieldChange) {
|
|
551
|
+
this.singleFieldChangeEmit.emit(ques);
|
|
552
|
+
}
|
|
571
553
|
}
|
|
572
554
|
deleteFile(fileData) {
|
|
573
555
|
console.log('fileDATA', fileData);
|
|
@@ -802,14 +784,14 @@ export class QuestionbookComponent {
|
|
|
802
784
|
return questions;
|
|
803
785
|
}
|
|
804
786
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
805
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- HA 20DEC23 Book Style from salesforce -->\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\n<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <div *ngIf=\"ques.type === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <!-- // VD 02Aug24 - label value style-->\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean'): (ques.style?.showLabel !== false && ques.type !== 'Boolean')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{\n removeCharacters(ques?.questionText) }}\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.type === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\"\n [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\"\n (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.type === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\"\n [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.type === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\"\n [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n <!-- Text -->\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\"\n [focusEvent]=\"clearSQError(ques.id)\" [error]=\"ques.error\" [placeholder]=\"ques.question\"\n (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n\n <!-- for pick location -->\n <!-- VD 21DEC23 - dependent field change -->\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <!-- AP-02APR25 - default placeholder empty string -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\"\n [error]=\"ques.error\" [placeholder]=\"ques.question || ''\"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n <!-- RS 06JAN25 -->\n <!-- for rich text editor -->\n <div *ngIf=\"ques.type === 'RichTextArea'\">\n <app-custom-rich-text [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input || ''\"\n [error]=\"ques.error\" [placeholder]=\"ques.question\"\n (textValueChange)=\"childEventCapture($event, ques)\">\n </app-custom-rich-text>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" class=\"she-line-input form-control\"\n [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\" style.border-color=\"{{ ques.error ? 'red' : '' }}\"\n placeholder=\"{{ ques.question }}\" />\n </div>\n\n <!--AP-24MAR25 Number -->\n <!-- AP-02APR25 - default placeholder empty string -->\n <div *ngIf=\"ques.type === 'Number'\">\n <input type=\"number\" [attr.readonly]=\"ques.isReadOnly ? true : null\"[value]=\"ques.input\" class=\"she-line-input form-control\"\n [id]=\"ques.id\" required (focus)=\"clearSQError(ques.id)\" [style.borderColor]=\"ques.error ? 'red' : ''\"\n [placeholder]=\"ques.question || ''\" (input)=\"childEventCapture($event.target.value, ques)\" />\n </div> \n \n <!-- AP-28MAR25 Boolean -->\n <div *ngIf=\"ques.type === 'Boolean'\" class=\"boolean-question\">\n <div>{{ ques.questionText }}</div>\n <input type=\"checkbox\" [attr.disabled]=\"ques.isReadOnly ? true : null\" [checked]=\"ques.input\"\n [id]=\"ques.id\" required (focus)=\"clearSQError(ques.id)\"\n [style.borderColor]=\"ques.error ? 'red' : ''\"\n (change)=\"childEventCapture($event.target.checked, ques)\" /> \n </div> \n\n <!-- SKS21MAR25 line -->\n <div *ngIf=\"ques.type === 'Line'\">\n <hr class=\"custom-line\" style=\"display: inline-flex\" />\n </div>\n <!-- Table -->\n <!-- RS 03FEB2025 -->\n <!-- Added handleTableSave to handle table data persistence, enabling saving table contents to local storage when save button is clicked -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-table> -->\n <!-- SKS13MAR25 data table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\" [tableConfig]=\"ques.tableConfig\"\n tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <!-- VD 20Aug24 used correct attribute -->\n <!-- AP-02APR25 - default placeholder empty string -->\n <!-- AP-16APR25 Format the input value before binding it to filterName -->\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [filterName]=\"ques.input\" \n (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <!-- AP 10FEB25 - Dynamically binding selectedValue based on isShengel condition -->\n <app-custom-dropdown [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [allFiles]=\"ques.input\" [tableFile]=\"false\" (selectedFileData)=\"childEventCapture($event, ques)\"\n (deletedFileData)=\"deleteFile($event)\" [isDeleteFileButtonVisible]=\"isEdit && !ques.isReadOnly\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <!-- // VD 02Aug24 image component -->\n <!-- <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <app-custom-image [question]=\"ques\">\n </app-custom-image>\n </div> -->\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" [width]=\"'150px'\" [buttonText]=\"ques?.question\"\n [value]=\"ques?.question\" (buttonValue)=\"childEventCapture($event, ques)\">\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.type === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>\n\n<!-- 06-09-24 for calendar type-->\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "component", type: DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "component", type: CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "component", type: CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "styleMap", "readOnly"], outputs: ["dateChange"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i9.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }] });
|
|
787
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", singleFieldChangeEmit: "singleFieldChangeEmit", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, providers: [ChangeService], ngImport: i0, template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{\n removeCharacters(ques?.questionText) }}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <lib-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [filterName]=\"ques.input\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event, ques)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind"], outputs: ["handleDropDown", "handleQuestion", "singleFieldChangeEmit", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "component", type: FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "mode", "isShowNoFileIcon", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "question", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "btnBgColor", "btnBorder", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "buttonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode"], outputs: ["buttonClickEmit"] }, { kind: "component", type: SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "mode", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "clearInputEmit", "nativeInputRef"] }] });
|
|
806
788
|
}
|
|
807
789
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, decorators: [{
|
|
808
790
|
type: Component,
|
|
809
791
|
args: [{ selector: 'lib-questionbook', providers: [ChangeService], standalone: true, imports: [
|
|
810
792
|
CommonModule,
|
|
811
|
-
FormsModule, ImageCropperComponent,
|
|
812
|
-
], template: "<!-- HA 20DEC23 Book Style from salesforce -->\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\n<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <div *ngIf=\"ques.type === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <!-- // VD 02Aug24 - label value style-->\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean'): (ques.style?.showLabel !== false && ques.type !== 'Boolean')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{\n removeCharacters(ques?.questionText) }}\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.type === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\"\n [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\"\n (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.type === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\"\n [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.type === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\"\n [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n <!-- Text -->\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\"\n [focusEvent]=\"clearSQError(ques.id)\" [error]=\"ques.error\" [placeholder]=\"ques.question\"\n (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n\n <!-- for pick location -->\n <!-- VD 21DEC23 - dependent field change -->\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <!-- AP-02APR25 - default placeholder empty string -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\"\n [error]=\"ques.error\" [placeholder]=\"ques.question || ''\"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n <!-- RS 06JAN25 -->\n <!-- for rich text editor -->\n <div *ngIf=\"ques.type === 'RichTextArea'\">\n <app-custom-rich-text [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input || ''\"\n [error]=\"ques.error\" [placeholder]=\"ques.question\"\n (textValueChange)=\"childEventCapture($event, ques)\">\n </app-custom-rich-text>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" class=\"she-line-input form-control\"\n [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\" style.border-color=\"{{ ques.error ? 'red' : '' }}\"\n placeholder=\"{{ ques.question }}\" />\n </div>\n\n <!--AP-24MAR25 Number -->\n <!-- AP-02APR25 - default placeholder empty string -->\n <div *ngIf=\"ques.type === 'Number'\">\n <input type=\"number\" [attr.readonly]=\"ques.isReadOnly ? true : null\"[value]=\"ques.input\" class=\"she-line-input form-control\"\n [id]=\"ques.id\" required (focus)=\"clearSQError(ques.id)\" [style.borderColor]=\"ques.error ? 'red' : ''\"\n [placeholder]=\"ques.question || ''\" (input)=\"childEventCapture($event.target.value, ques)\" />\n </div> \n \n <!-- AP-28MAR25 Boolean -->\n <div *ngIf=\"ques.type === 'Boolean'\" class=\"boolean-question\">\n <div>{{ ques.questionText }}</div>\n <input type=\"checkbox\" [attr.disabled]=\"ques.isReadOnly ? true : null\" [checked]=\"ques.input\"\n [id]=\"ques.id\" required (focus)=\"clearSQError(ques.id)\"\n [style.borderColor]=\"ques.error ? 'red' : ''\"\n (change)=\"childEventCapture($event.target.checked, ques)\" /> \n </div> \n\n <!-- SKS21MAR25 line -->\n <div *ngIf=\"ques.type === 'Line'\">\n <hr class=\"custom-line\" style=\"display: inline-flex\" />\n </div>\n <!-- Table -->\n <!-- RS 03FEB2025 -->\n <!-- Added handleTableSave to handle table data persistence, enabling saving table contents to local storage when save button is clicked -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-table> -->\n <!-- SKS13MAR25 data table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\" [tableConfig]=\"ques.tableConfig\"\n tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <!-- VD 20Aug24 used correct attribute -->\n <!-- AP-02APR25 - default placeholder empty string -->\n <!-- AP-16APR25 Format the input value before binding it to filterName -->\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [filterName]=\"ques.input\" \n (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <!-- AP 10FEB25 - Dynamically binding selectedValue based on isShengel condition -->\n <app-custom-dropdown [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [allFiles]=\"ques.input\" [tableFile]=\"false\" (selectedFileData)=\"childEventCapture($event, ques)\"\n (deletedFileData)=\"deleteFile($event)\" [isDeleteFileButtonVisible]=\"isEdit && !ques.isReadOnly\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <!-- // VD 02Aug24 image component -->\n <!-- <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <app-custom-image [question]=\"ques\">\n </app-custom-image>\n </div> -->\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" [width]=\"'150px'\" [buttonText]=\"ques?.question\"\n [value]=\"ques?.question\" (buttonValue)=\"childEventCapture($event, ques)\">\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.type === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>\n\n<!-- 06-09-24 for calendar type-->\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"] }]
|
|
793
|
+
FormsModule, ImageCropperComponent, FileUploadComponent, CustomRadioComponent, CustomDropdownComponent, NxtButtonComponent, SearchBoxComponent, NxtDatatable, PickLocationComponent, CustomModelComponent, CustomCalendarComponent, I18nPipe, MatTooltipModule, NxtInput
|
|
794
|
+
], template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{\n removeCharacters(ques?.questionText) }}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <lib-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [filterName]=\"ques.input\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event, ques)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"] }]
|
|
813
795
|
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
814
796
|
type: Inject,
|
|
815
797
|
args: [DOCUMENT]
|
|
@@ -833,6 +815,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
833
815
|
type: Output
|
|
834
816
|
}], handleQuestion: [{
|
|
835
817
|
type: Output
|
|
818
|
+
}], singleFieldChangeEmit: [{
|
|
819
|
+
type: Output
|
|
836
820
|
}], dropDownData: [{
|
|
837
821
|
type: Input
|
|
838
822
|
}], dataBind: [{
|
|
@@ -844,4 +828,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
844
828
|
}], handleCalendarEvent: [{
|
|
845
829
|
type: Output
|
|
846
830
|
}] } });
|
|
847
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQUlqSyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFJakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFD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QUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNwSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENB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QyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUM7d0JBQ3BHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNqSCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakgsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2hJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNqSCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakgsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzlHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO3dCQUNoSCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUgsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDakksQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFFMUksT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckYsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkYsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckYsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFL0YsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FB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QUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCO3FCQUN0ZDs7MEJBOEZFLE1BQU07MkJBQUMsUUFBUTt5Q0F6RlQsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFtRUksc0JBQXNCO3NCQUEvQixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFNpbXBsZUNoYW5nZXMsIENvbXBvbmVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXInO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5TWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGVwZW5kZW5jeU1ldGEnO1xuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYXBpbWV0YSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2ltYWdlLWNyb3BwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERlcGVuZGVudFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kZXBlbmRlbnQtdGFibGUvZGVwZW5kZW50LXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21SYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLXJhZGlvL2N1c3RvbS1yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tZHJvcGRvd24vY3VzdG9tLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1idXR0b24vY3VzdG9tLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tTGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1sYWJlbC9jdXN0b20tbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUFwcGVuZGl4Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy90YWJsZS1hcHBlbmRpeC90YWJsZS1hcHBlbmRpeC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0RGF0YXRhYmxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kYXRhdGFibGUvZGF0YXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21SaWNoVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLXJpY2gtdGV4dC9jdXN0b20tcmljaC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaWNrTG9jYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BpY2stbG9jYXRpb24vcGljay1sb2NhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1pbnB1dC9jdXN0b20taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbU1vZGVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tbW9kZWwvY3VzdG9tLW1vZGVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21DYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLWNhbGVuZGFyL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tICcuLi8uLi9pMThuLnBpcGUnO1xuaW1wb3J0IHsgQ3VzdG9tVGV4dEFyZWFDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS10ZXh0LWFyZWEvY3VzdG9tLXRleHQtYXJlYS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tVGltZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLXRpbWUvY3VzdG9tLXRpbWUuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbURhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1kYXRlL2N1c3RvbS1kYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21EYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tZGF0ZS1waWNrZXIvY3VzdG9tLWRhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbmJvb2snLFxuICBwcm92aWRlcnM6IFtDaGFuZ2VTZXJ2aWNlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSwgSW1hZ2VDcm9wcGVyQ29tcG9uZW50LCBEZXBlbmRlbnRUYWJsZUNvbXBvbmVudCwgRmlsZVVwbG9hZENvbXBvbmVudCwgQ3VzdG9tUmFkaW9Db21wb25lbnQsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBDdXN0b21CdXR0b25Db21wb25lbnQsIEN1c3RvbUxhYmVsQ29tcG9uZW50LCBTZWFyY2hCb3hDb21wb25lbnQsIFRhYmxlQXBwZW5kaXhDb21wb25lbnQsIE54dERhdGF0YWJsZSwgQ3VzdG9tUmljaFRleHRDb21wb25lbnQsIFBpY2tMb2NhdGlvbkNvbXBvbmVudCwgQ3VzdG9tSW5wdXRDb21wb25lbnQsIEN1c3RvbU1vZGVsQ29tcG9uZW50LCBDdXN0b21DYWxlbmRhckNvbXBvbmVudCwgSTE4blBpcGUsIEN1c3RvbVRleHRBcmVhQ29tcG9uZW50LCBDdXN0b21UaW1lQ29tcG9uZW50LCBDdXN0b21EYXRlQ29tcG9uZW50LCBDdXN0b21EYXRlUGlja2VyQ29tcG9uZW50LCBNYXRUb29sdGlwTW9kdWxlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xuICBASW5wdXQoKSBxdWVzdGlvbkl0ZW06IFF1ZXN0aW9uO1xuICBASW5wdXQoKSB0cmFuc2xhdGVkUXVlc3Rpb25zOiBhbnlbXSA9IFtdICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICBASW5wdXQoKSBxdWVzdGlvbnM6IGFueVtdO1xuICBASW5wdXQoKSBlcnJvckZpZWxkSWQ6IGFueTtcbiAgQElucHV0KCkgbGFiZWxWYWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKSB0b2tlbjogc3RyaW5nOyAvLyBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dFxuICBASW5wdXQoKSBpc0VkaXQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBoYW5kbGVEcm9wRG93bjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGhhbmRsZVF1ZXN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cbiAgQElucHV0KCkgZHJvcERvd25EYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGRhdGFCaW5kOiBhbnk7XG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcbiAgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdO1xuICBzZWxlY3RlZEZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuICBsb2FkQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICBxYlJlZjogUXVlc3Rpb25Cb29rO1xuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXG4gIHN0eWxlOiBhbnk7XG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJztcbiAgYm9va1N0eWxlOiBhbnk7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBpc0ltYWdlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEltYWdlRWxlbWVudDogYW55O1xuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge1xuICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgc2NhbGU6IDEsXG4gICAgcm90YXRlOiAwLFxuICAgIGZsaXBIOiBmYWxzZSxcbiAgICBmbGlwVjogZmFsc2UsXG4gICAgdHJhbnNsYXRlSDogMCxcbiAgICB0cmFuc2xhdGVWOiAwXG4gIH07XG4gIGNhbnZhc1JvdGF0aW9uID0gMDtcbiAgY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbjtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjcm9wcGVyTWF4SGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1heFdpZHRoID0gMDtcbiAgY3JvcHBlck1pbkhlaWdodCA9IDA7XG4gIGNyb3BwZXJNaW5XaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNXaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNIZWlnaHQgPSAwO1xuICBhc3BlY3RSYXRpbyA9IDQgLyAzO1xuICByb3VuZENyb3BwZXIgPSBmYWxzZTtcbiAgaW1hZ2VDaGFuZ2VkRXZlbnQ6IEV2ZW50IHwgbnVsbCA9IG51bGw7XG4gIGFsaWduSW1hZ2UgPSAnY2VudGVyJyBhcyBjb25zdDtcbiAgaXNJbWFnZUhvdmVyID0gZmFsc2U7XG5cbiAgLy8gUlMgMTdKQU4yMDI1XG4gIC8vRm9ybWF0cyBhbmQgcmV0dXJucyBmaWxlIHVwbG9hZCByZXF1aXJlbWVudHMgZnJvbSBhIEpTT04gc3RyaW5nXG4gIGdldEZpbGVSZXF1aXJlbWVudHMoZmllbGRzTWV0YTogYW55KTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YURhdGEgPSB0eXBlb2YgZmllbGRzTWV0YSA9PT0gJ29iamVjdCcgID8gIGZpZWxkc01ldGEgOiBKU09OLnBhcnNlKGZpZWxkc01ldGEpIDtcbiAgICAgIGNvbnN0IGZpbGVDb25maWcgPSBtZXRhRGF0YVswXTtcblxuICAgICAgaWYgKCFmaWxlQ29uZmlnKSByZXR1cm4gJyc7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50cyA9IFtdO1xuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXM/Lmxlbmd0aCkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgQWNjZXB0ZWQgZm9ybWF0czogJHtmaWxlQ29uZmlnLmFsbG93ZWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBzaXplIHBlciBmaWxlOiAke2ZpbGVDb25maWcubWF4RmlsZVNpemUgLyAxMDQ4NTc2fU1CYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlQ29uZmlnLm1heEZpbGVzKSB7XG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIG51bWJlciBvZiBmaWxlczogJHtmaWxlQ29uZmlnLm1heEZpbGVzfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWlyZW1lbnRzLm1hcChyZXEgPT4gcmVxLnRyaW0oKSkuam9pbignXFxuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgZmllbGRzTWV0YTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckRhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcbiAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgLy8gVkQgc2VwMTMyNCBjaGFuZ2VzIC0gcHJvY2VzcyBkYXRhIHdoZW4gZGF0YWJpbmQgdmFsdWUgY2hhbmdlXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXG4gICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8vIEFQLTE5TUFZMjUgLSBVcGRhdGUgcXVlc3Rpb25zJyByZWFkLW9ubHkgc3RhdGUgYmFzZWQgb24gaXNFZGl0IGNoYW5nZXNcbm5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgaWYgKGNoYW5nZXNbJ2lzRWRpdCddKSB7XG4gICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChxdWVzID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0VkaXQgJiYgIXF1ZXMuaXNIaWRkZW4pIHtcbiAgICAgICAgcXVlcy5pc1JlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgIH1lbHNlIGlmICh0aGlzLmlzRWRpdCAmJiAhcXVlcy5pc0hpZGRlbikge1xuICAgICAgICBxdWVzLmlzUmVhZE9ubHkgPSBmYWxzZTsgXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gU0tTMjBNQVIyNSBFbnN1cmUgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcgdGhlIG1ldGhvZFxuICAgICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICAvLyAgQVAtMjhNQVIyNSBBZGQgQm9vbGVhblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChxdWVzID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVzKHF1ZXMpO1xuICAgICAgICBsZXQgaW5wdXQ6IGFueTtcbiAgICAgICAgaWYgKHF1ZXMudHlwZSA9PSAnRHJvcGRvd24nIHx8IHF1ZXMudHlwZSA9PSAnUmFkaW8nIHx8IHF1ZXMudHlwZSA9PSAnTG9jYXRpb24nKSB7XG4gICAgICAgICAgaW5wdXQgPSB7fVxuICAgICAgICAgIGlucHV0Wyd2YWx1ZU9iaiddID0gcXVlcy5pbnB1dCAgfHwgcXVlcy5kZWZhdWx0VmFsdWUgfHwgbnVsbFxuICAgICAgICAgIGlucHV0WydyZWZlcmVuY2VGaWVsZCddID0gcXVlcy5yZWZlcmVuY2VGaWVsZCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ2Zyb21RdWVzdGlvbklkJ10gPSBxdWVzLmlkIHx8IG51bGxcbiAgICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKSB7XG4gICAgICAgICAgaW5wdXQgPSB7fVxuICAgICAgICAgIGlucHV0Wyd2YWx1ZSddID0gcXVlcy5pbnB1dCB8fCBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBudWxsXG4gICAgICAgIH0gXG4gICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnSW1hZ2UnKSB7XG4gICAgICAgICAgaW5wdXQgPSBxdWVzLm9yZ0ltYWdlRGF0YVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYocXVlcy50eXBlID09PSAnQm9vbGVhbicpe1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlucHV0ID0gcXVlcy5pbnB1dCB8fCBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBudWxsXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShpbnB1dCwgcXVlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBhc3luYyBoYW5kbGVRdWVzKHF1ZXM6IGFueSkge1xuICAgIC8vIEhBIDE5LUpBTi0yNCBJZiBjb25kaXRpb24gaXMgZm9yIGJpbmQtaW4sIGNvcnJlY3Rpb25cbiAgICAvLyBIQSAwOUZFQjI0IEFkZGluZyBjb25kaXRpb24gdG8gYXZvaWQgdW5kZWZpbmVkIGVycm9yXG4gICAgaWYgKHRoaXMuZGF0YUJpbmQgJiYgT2JqZWN0LmtleXModGhpcy5kYXRhQmluZCkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZmxhdHRlbk9iamVjdCh0aGlzLmRhdGFCaW5kKVxuICAgICAgZm9yIChsZXQgW2tleSwgdmFsXSBvZiByZXN1bHQpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSB2YWw7XG4gICAgICAgIGlmIChxdWVzLnJlZmVyZW5jZUZpZWxkID09PSBrZXkpIHtcbiAgICAgICAgICBpZiAocXVlcy50eXBlID09PSAnRHJvcGRvd24nIHx8IHF1ZXMudHlwZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgLy8gdGhpcy5zcU9wdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIC8vICAgaWYgKGVsZW1lbnRbJ3JlZmVyZW5jZUZpZWxkJ10gPT09IGtleSkge1xuICAgICAgICAgICAgLy8gICAgIGVsZW1lbnRbJ2lucHV0J10gPSBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAvLyAgICAgZWxlbWVudFsnc2VsZWN0ZWRWYWx1ZSddID0gcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAyNEpBTjI0IFRvIGJpbmQtaW4gRGF0ZSBhbmQgRGF0ZVRpbWVcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IG5ldyBEYXRlKHZhbHVlPy50b1N0cmluZygpKSAgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDEyRkVCMjQgVG8gYmluZC1pbiBMb2NhdGlvbiBUeXBlXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnTG9jYXRpb24nKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVsnYWRkcmVzcyddID8gdmFsdWVbJ2FkZHJlc3MnXSA6IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXMgZm9yIGRhdGEgYmluZEluXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnQ2FsZW5kYXInKSB7XG4gICAgICAgICAgICBsZXQgZW50cmllcyA9IHR5cGVvZiBxdWVzWydmaWVsZHNNZXRhJ10gPT09ICdvYmplY3QnID8gcXVlc1snZmllbGRzTWV0YSddIDogSlNPTi5wYXJzZShxdWVzWydmaWVsZHNNZXRhJ10pO1xuICAgICAgICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgbGV0IHJlZmVyZW5jZVF1ZXN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHFSZWZlcmVuY2UgPSBKU09OLnBhcnNlKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMucHVzaChxUmVmZXJlbmNlPy5xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZVF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWU/LmZvckVhY2goY2FsZW5kYXJBcnJheSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGNhbGVuZGFyQXJyYXkuZGF0ZSk7XG4gICAgICAgICAgICAgICAgICBjYWxlbmRhckFycmF5LmVudHJpZXMuZm9yRWFjaChpbnB1dEVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0RW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUXVlc3Rpb25zLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlZmVyZW5jZUZpZWxkID09IGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdEYXRlJyB8fCBmaWVsZC50eXBlID09ICdEYXRlVGltZScgfHwgZmllbGQudHlwZSA9PSAnVGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IG5ldyBEYXRlKHY/LnRvU3RyaW5nKCkpIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGlmIChmaWVsZC50eXBlID09PSAnRHJvcGRvd24nIHx8IGZpZWxkLnR5cGUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5zZWxlY3RlZFZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHYgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdiB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYWRkRXZlbnQoZGF0ZSwgcmVmZXJlbmNlUXVlc3Rpb25zKTsvL1NLUyAyN1NFUDI0IGVhY2ggZXZlbnQgYWRkZWQgdG8gYWxsRXZlbnRzIGFycmF5XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5hZGRFdmVudChkYXRlLHJlZmVyZW5jZVF1ZXN0aW9ucyk7IC8vdGhpcyBpcyBvbmx5IGxhc3QgZXZlbnQgYWRkZWQgdG8gYWxsRXZlbnRzIGFycmF5XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgMjMgT2N0MjQgLSBmaWxlIHR5cGUgY2hhbmdlc1xuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gW107XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0ge307XG4gICAgICBxdWVzdGlvblsnaWQnXSA9IHF1ZXMuaWQ7XG4gICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAvLyBIQSAxMkZFQjI0IFRvIGJpbmQtb3V0IExvY2F0aW9uIFR5cGVcbiAgICAgIGlmIChxdWVzLnR5cGUgPT09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdGaWxlJykge1xuICAgICAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXG4gICAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCA/IHF1ZXMuaW5wdXQgOiBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBbXTtcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uWyd0eXBlJ10gPSBxdWVzLnR5cGU7XG4gICAgICBxdWVzdGlvblsncXVlc3Rpb25OdW1iZXInXSA9IHF1ZXMucXVlc3Rpb25OdW1iZXI7XG4gICAgICBxdWVzdGlvblsncmVmZXJlbmNlRmllbGQnXSA9IHF1ZXM/LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgcXVlc3Rpb25bJ3NlbGVjdGVkVmFsdWUnXSA9IHF1ZXM/LnNlbGVjdGVkVmFsdWU7ICAvLyBNUiAzMUpBTjI0IE5lZWQgdG8gcGFzcyB0aGUgc2VsZWN0ZWQgdmFsdWUgdG9vXG4gICAgfVxuICB9XG4gLy8gU0tTMjBNQVIyNSBmbGF0dGVuaW5nIG5lc3RlZCBvYmplY3RzLCBtYXBwaW5nIHZhbHVlcyB1c2luZyAgcmVmZXJlbmNlRmllbGRcbiBmbGF0dGVuT2JqZWN0KG9iajogYW55LCBwYXJlbnRLZXkgPSAnJywgaW5jbHVkZU9iamVjdHMgPSB0cnVlKSB7XG4gIGxldCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgZm9yIChsZXQgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgbGV0IG5ld0tleSA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX0uJHtrZXl9YCA6IGtleTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBJbmNsdWRlIGZ1bGwgYXJyYXlcblxuICAgICAgdmFsLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmxhdHRlbk9iamVjdChpdGVtLCBgJHtuZXdLZXl9WyR7aW5kZXh9XWAsIGZhbHNlKSk7IC8vIEZsYXR0ZW4gb2JqZWN0cyBpbiBhcnJheXNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChbYCR7bmV3S2V5fVske2luZGV4fV1gLCBpdGVtXSk7IC8vIFN0b3JlIHByaW1pdGl2ZSB2YWx1ZXMgaW4gYXJyYXlzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW5jbHVkZU9iamVjdHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIEluY2x1ZGUgZnVsbCBvYmplY3RcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmxhdHRlbk9iamVjdCh2YWwsIG5ld0tleSwgZmFsc2UpKTsgLy8gRmxhdHRlbiBuZXN0ZWQgb2JqZWN0c1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gU3RvcmUga2V5LXZhbHVlIHBhaXJzXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiAgLy8gVkQgMTNTZXAyNCBjaGFuZ2VzXG4gIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIHByb2Nlc3NEYXRhKCkge1xuICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBCb29rIFN0eWxpbmcoU2xhZXNmb3JjZSlcbiAgICAvLyBIQSAwOUZFQjI0IEFkZGVkIHRlcm5hcnlcbiAgICBpZiAodGhpcy5xYkl0ZW0/LnN0eWxlKSB7XG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB0eXBlb2YgdGhpcy5xYkl0ZW0uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIHRoaXMucWJJdGVtPy5zdHlsZSkgOiB0aGlzLnFiSXRlbS5zdHlsZTtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmxhYmVsQ2xhc3MgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmxhYmVsU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmlucHV0Q2xhc3MgPSB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmlucHV0U3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dFN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmJvb2tTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuc2hvd0xhYmVsID0gdGhpcy5xYkl0ZW0uc3R5bGU/LnNob3dMYWJlbCA/IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnFiSXRlbSkge1xuICAgICAgICB0aGlzLnFiSXRlbS5zdHlsZSA9IHtcbiAgICAgICAgICBcImxhYmVsQ2xhc3NcIjogXCJcIixcbiAgICAgICAgICBcImxhYmVsU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImxhYmVsVmFsdWVTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwiaW5wdXRDbGFzc1wiOiBcIlwiLFxuICAgICAgICAgIFwiaW5wdXRTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwiYm9va1N0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJzaG93TGFiZWxcIjogdHJ1ZSxcbiAgICAgICAgICBcImRpcmVjdGlvblwiOiBcImx0clwiLFxuICAgICAgICAgIFwicXVlc3Rpb25TdHlsZVwiOiBcIlwiXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucWJJdGVtLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSB0aGlzLnFiSXRlbT8uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyB0aGlzLnFiSXRlbT8uc3R5bGUucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gdGhpcy5xYkl0ZW0uc3R5bGUuZGlyZWN0aW9uID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5kaXJlY3Rpb24gPyB0aGlzLnFiSXRlbT8uc3R5bGU/LmRpcmVjdGlvbiA6ICdsdHInO1xuICAgIHRoaXMuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5ib29rU3R5bGU7XG4gICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBodG1sRWxlbWVudCA9IGVsZW1lbnQ/LnF1ZXN0aW9uVGV4dDtcbiAgICAgIHZhciB0ZXh0T25seSA9IGh0bWxFbGVtZW50Py5yZXBsYWNlKC88W14+XSo+L2csICcnKVxuICAgICAgZWxlbWVudC5xdWVzdGlvblRleHQgPSB0ZXh0T25seTtcbiAgICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0Jvb2snKSB7XG4gICAgICAgIGlmIChlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKSB7XG4gICAgICAgICAgdmFyIHFiID0gdHlwZW9mIGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10gPT09ICdvYmplY3QnICA/ICBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddIDogSlNPTi5wYXJzZSggZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSkgO1xuICAgICAgICAgIGlmIChxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpIHtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHR5cGVvZiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSkgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQm9vayB0eXBlIHF1ZXN0aW9uIHN0eWxpbmdcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5pbnB1dENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmJvb2tTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uYm9va1N0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5zaG93TGFiZWwgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ2xhbmdEaXJlY3Rpb24nXSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5kaXJlY3Rpb24gPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcblxuICAgICAgICAgIC8vIExvb3AgZm9yIGVhY2ggcXVlc3Rpb24gaW4gdGhlIGJvb2tcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10/LnN1YlF1ZXN0aW9ucz8uZm9yRWFjaChxdWVzdGlvbkZyb21Cb29rID0+IHtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA6IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUubGFiZWxDbGFzcyA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsQ2xhc3MgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUubGFiZWxTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuaW5wdXRDbGFzcyA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0Q2xhc3MgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuaW5wdXRTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0U3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuYm9va1N0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uYm9va1N0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuc2hvd0xhYmVsID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uc2hvd0xhYmVsID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUucXVlc3Rpb25TdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2tbJ2xhbmdEaXJlY3Rpb24nXSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmRpcmVjdGlvbiA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbGVtZW50WydxYkl0ZW0nXSA9IHFiWydxdWVzdGlvbmJvb2snXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5zdHlsZSA9IGVsZW1lbnQuc3R5bGUgPyB0eXBlb2YgZWxlbWVudC5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnICsgZWxlbWVudD8uc3R5bGUpIDogZWxlbWVudD8uc3R5bGUgOiB0aGlzLnFiSXRlbT8uc3R5bGU7XG5cbiAgICAgIGVsZW1lbnQuc3R5bGUubGFiZWxDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsQ2xhc3MgPyBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGFiZWxTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gZWxlbWVudC5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gZWxlbWVudC5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5pbnB1dENsYXNzID0gZWxlbWVudC5zdHlsZT8uaW5wdXRDbGFzcyA/IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5pbnB1dFN0eWxlID0gZWxlbWVudC5zdHlsZS5pbnB1dFN0eWxlID8gZWxlbWVudC5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmJvb2tTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmJvb2tTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLnNob3dMYWJlbCA9IGVsZW1lbnQuc3R5bGU/LnNob3dMYWJlbCA/IGVsZW1lbnQuc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICBlbGVtZW50LnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5xdWVzdGlvblN0eWxlID8gZWxlbWVudC5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG5cbiAgICAgIGVsZW1lbnRbJ2xhbmdEaXJlY3Rpb24nXSA9IGVsZW1lbnQuc3R5bGU/LmRpcmVjdGlvbiA/IGVsZW1lbnQuc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcblxuXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXG4gICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgICAgaWYgKGVsZW1lbnQucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgZWxlbWVudC5kZXBlbmRlbnRSZWYgPSBlbGVtZW50LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuc3ViVGV4dCkge1xuICAgICAgICBlbGVtZW50WydzdWJUZXh0J10gPSB0eXBlb2YgZWxlbWVudD8uc3ViVGV4dCA9PT0gJ29iamVjdCcgPyBlbGVtZW50Py5zdWJUZXh0IDogSlNPTi5wYXJzZShlbGVtZW50WydzdWJUZXh0J10gfHwge30pO1xuICAgICAgICBsZXQgZGVwZW5kZW5jeU9iajogRGVwZW5kZW5jeU1ldGEgPSBlbGVtZW50LnN1YlRleHQ7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBWRCAyMEF1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQgJiYgZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudC5pc0hpZGRlbkZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeU9iai5kZXBlbmRlbnRWYWx1ZSA9PSBjaGFuZ2VWYWx1ZS52YWx1ZU9iaikge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9ICcnO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50LmlkKTtcbiAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGRlcGVuZGVudCBzZWxlY3Rpb24gcmVtb3ZlIHRoZSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZmVyZW5jZUZpZWxkID0gJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIC8vIHN1bmRheSBjb21tZW50XG4gICAgICAvLyBpZiAoZWxlbWVudC50eXBlID09PSAnQ2FsZW5kYXInKSB7XG4gICAgICAvLyAgIHRoaXMub3BlbkNhbGVuZGFyQ29tcG9uZW50KGVsZW1lbnQpO1xuICAgICAgLy8gfVxuICAgIH0pO1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbnMpO1xuICAgIHRoaXMucHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKTtcbiAgfVxuICAvLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICBoaWRlRGVwZW5kZW50RWxlbWVudHMoZWxlbWVudElkKSB7XG4gICAgbGV0IGVsZW1lbnRzVG9IaWRlID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKGVsID0+IHtcbiAgICAgIGlmIChlbC5zdWJUZXh0KSB7XG4gICAgICAgIGVsWydzdWJUZXh0J10gPSB0eXBlb2YgZWw/LnN1YlRleHQgPT09ICdvYmplY3QnID8gZWw/LnN1YlRleHQgOiBKU09OLnBhcnNlKGVsWydzdWJUZXh0J10gfHwge30pO1xuICAgICAgICBsZXQgZGVwT2JqID0gZWwuc3ViVGV4dDtcbiAgICAgICAgcmV0dXJuIGRlcE9iai5zb3VyY2VRdWVzdGlvbklkID09IGVsZW1lbnRJZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGVsZW1lbnRzVG9IaWRlLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgZWwuaW5wdXQgPSAnJztcbiAgICAgIGVsLnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XG4gICAgICAvLyBSZWN1cnNpdmVseSBoaWRlIGVsZW1lbnRzIGRlcGVuZGVudCBvbiB0aGlzIG9uZVxuICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWwuaWQpO1xuICAgIH0pO1xuICB9XG4vL0FQLTE5TUFZMjUgRW5zdXJlIHNxTGlzdCBpcyBhbHdheXMgYW4gYXJyYXkgYnkgZGVmYXVsdGluZyB0byBbXVxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zPy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKSB8fCBbXTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgcHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucyAmJiB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaCgob3JnUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMuZm9yRWFjaCgodHJhbnNRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKG9yZ1F1ZXN0aW9uLnVuaXF1ZUlkZW50aWZpZXIgPT0gdHJhbnNRdWVzdGlvbi5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBvcmdRdWVzdGlvbi5xdWVzdGlvblRleHQgPSB0cmFuc1F1ZXN0aW9uLmxhYmVsO1xuICAgICAgICAgICAgb3JnUXVlc3Rpb24ucXVlc3Rpb24gPSB0cmFuc1F1ZXN0aW9uLnBsYWNlSG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocmVjb3Jkcyk7XG4gIH1cblxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzogYW55KSB7XG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9IHt9O1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAgaWYgKHF1ZXMpIHtcbiAgICAgIGlmIChxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT0gJ1JhZGlvJykge1xuICAgICAgICAvLyBIQSAxOUpBTjI0IENvcnJlY3Rpb24gb2YgZHJvcGRvd24gdmFsdWVzXG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRPYmogPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnNlbGVjdGVkT2JqID8gZXZlbnQuc2VsZWN0ZWRPYmogOiBldmVudC52YWx1ZU9iajtcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XG4gICAgICAgIC8vIGVtaXQgdGhlIGRyb3Bkb3duIGRhdGEgdG8gcGFyZW50XG4gICAgICAgIGRyb3Bkb3duRGF0YVsnZXZlbnQnXSA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XG4gICAgICAgIGlmIChkcm9wZG93bkRhdGFbJ2V2ZW50J10pIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZURyb3BEb3duLmVtaXQoZHJvcGRvd25EYXRhKTtcbiAgICAgICAgfSAgLy8gVkQgMjFERUMyMyAtIGRlcGVuZGVudCBmaWVsZCBjaGFuZ2VcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaj8gZXZlbnQudmFsdWVPYmouYWRkcmVzcyA6IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuc2VsZWN0ZWRGaWxlRGF0YSA9IGV2ZW50O1xuXG4gICAgICAgIC8vIEhhbmRsZSBmaWxlIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSAmJiBldmVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBObyBmaWxlcyB1cGxvYWRlZCB3aGVuIHJlcXVpcmVkXG4gICAgICAgICAgcXVlcy5lcnJvciA9IHF1ZXMuZXJyb3JNZXNzYWdlID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSAmJiBldmVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gRmlsZXMgd2VyZSBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcbiAgICAgICAgICBxdWVzLmVycm9yID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSB0aGUgZmlsZSB1cGxvYWQgY29tcG9uZW50XG4gICAgICAgIGlmIChldmVudD8udmFsaWRhdGlvbkVycm9ycyAmJiBldmVudC52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBxdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIHF1ZXMuZXJyb3IubWVzc2FnZSA9IGV2ZW50LnZhbGlkYXRpb25FcnJvcnNbMF07IC8vIFVzZSB0aGUgZmlyc3QgdmFsaWRhdGlvbiBlcnJvclxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykgeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXG4gICAgICAgIGlmIChldmVudC52YWx1ZSkge1xuICAgICAgICAgIGxldCBkID0gbmV3IERhdGUoZXZlbnQudmFsdWUpO1xuICAgICAgICAgIGlmICghaXNOYU4oZD8uZ2V0VGltZSgpKSkgeyAvL1NLUzIzQVBSMjUgQ2hlY2sgZm9yIHZhbGlkIGRhdGVcbiAgICAgICAgICAgICAgbGV0IHV0Y1N0cmluZyA9IGQ/LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB1dGNTdHJpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMaXN0Jykge1xuICAgICAgICAvLyBWRCAyMEF1ZzI0IGhhbmRsaW5nIHRoZSBsaXN0IHR5cGUgIGhhbmRsZSBtdWx0aXBsZSBvYmplY3QgdmFsdWVzXG4gICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGV2ZW50Py52YWx1ZU9iaiwgZXZlbnQ/LmZpZWxkKTtcbiAgICAgIH0vL1JTIDA2SkFOMjVcbiAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50IHx8IG51bGw7XG4gICAgICB9Ly8gIEFQLTI4TUFSMjUgQWRkIEJvb2xlYW5cbiAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nKXtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xuICAgICAgICBxdWVzLmJvb2xlYW4gPSBldmVudDtcbiAgICAgIH1cbiAgICAgIC8vIEFQLTEwQVBSMjUgTnVtYmVyXG4gICAgICAvLyBBUDE5UEFSMjUgLWlmIGNoYW5nZSBlbHNlIGlzXG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBOdW1iZXIoZXZlbnQpOyBcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICAvL1JTIDA2SkFOMjVcbiAgICAgIC8vIFZhbGlkYXRlIGVycm9yIG1lc3NhZ2UgLSBtb2RpZmllZCB0byBoYW5kbGUgcmljaCB0ZXh0XG4gICAgICBjb25zdCBoYXNFcnJvciA9IHF1ZXMuZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmIHF1ZXMuaW5wdXQubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyAmJiAoIXF1ZXMuaW5wdXQgfHwgcXVlcy5pbnB1dC50cmltKCkgPT09ICcnKSkgfHxcbiAgICAgICAgKHF1ZXMudHlwZSAhPT0gJ0ZpbGUnICYmIHF1ZXMuVHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgIXF1ZXMuaW5wdXQpXG4gICAgICApO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAvLyBPbmNlIHRoZSByaWdodCB2YWx1ZSBpcyBzdG9yZWQgaW4gcXVlcy5pbnB1dCBzdG9yZSB0aGUgcXVlcyAod2l0aCBpbnB1dCkgaW4gc3RvcmFnZVNlcnZpY2VcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKHF1ZXMpO1xuICAgICAgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlcyk7XG4gICAgfVxuICB9XG4gIGRlbGV0ZUZpbGUoZmlsZURhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdmaWxlREFUQScsIGZpbGVEYXRhKVxuICB9XG4gIGdldERyb3BEb3duKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XG4gIH1cbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIGdldEN1cnJlbnRDYWxlbmRhcihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckRhdGUuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXRDYWxlbmRhckV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBWRCAwNlNlcDI0IHJlbW92ZSB0aGUgc3BlY2lhbCBjaGFyZWN0ZXJzIGFuZCB0YWdzIFxuICAvLyBmcm9tIHRoZSBxdWVzdGlvblRleHRcbiAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvblRleHQ6IHN0cmluZykge1xuICAgIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XG4gICAgcmV0dXJuIHVwZGF0ZWRUZXh0O1xuICB9XG5cbiAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgLy8gb3BlbkNhbGVuZGFyQ29tcG9uZW50KHF1ZXMpIHtcbiAgLy8gICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljSG9zdC52aWV3Q29udGFpbmVyUmVmO1xuICAvLyAgIGlmKHZpZXdDb250YWluZXJSZWYpe1xuICAvLyAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAvLyAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnF1ZXN0aW9uID0gcXVlcztcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB0aGlzLmdldEN1cnJlbnRDYWxlbmRhcihldmVudCkpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmV2ZW50U2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDphbnkpID0+IHRoaXMuZ2V0Q2FsZW5kYXJFdmVudChldmVudCkpXG4gIC8vICAgfVxuICAvLyB9XG5cbiAgaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xuICBjYWxlbmRhck1vZGFsVGl0bGU6IGFueTtcbiAgY2FsZW5kYXJNb2RhbFNpemU6IGFueTtcbiAgY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWU6IGFueTtcbiAgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gIHFiUmVmcmVuY2VCb29rOiBhbnk7XG4gIG1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlcjogYW55O1xuXG4gIG9wZW5DYWxlbmRhck1vZGFsKGV2ZW50KSB7XG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnFiUmVmcmVuY2VCb29rID0gZXZlbnQucWJSZWZyZW5jZUJvb2s7XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBldmVudC5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gICAgdGhpcy5jYWxlbmRhck1vZGFsVGl0bGUgPSBldmVudC5tb2RhbFRpdGxlO1xuICAgIHRoaXMuY2FsZW5kYXJNb2RhbFNpemUgPSBldmVudC5tb2RhbFNpemU7XG4gICAgdGhpcy5jYWxlbmRhclNhdmVCdXR0b25WYWx1ZSA9IGV2ZW50LnNhdmVCdXR0b25WYWx1ZTtcbiAgICB0aGlzLm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlciA9IGV2ZW50Lm1vZGFsRm9vdGVyO1xuICB9XG5cblxuICBvbkNhbGVuZGFyTW9kYWxTYXZlKCkge1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5kYXRhQ2hhbmdlcygnY2FsZW5kYXItbW9kYWwtc2F2ZScpO1xuICB9XG5cblxuICBoYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coJ2hhbmRsZSBxdWVzdGlvbiBoZXJlJyk7XG4gIH1cblxuICBjbG9zZUNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzI1TUFSMjUgaW1hZ2UgYWRkXG4gIGFzeW5jIGZpbGVDaGFuZ2VFdmVudChxdWVzOiBhbnksIGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBhd2FpdCB0aGlzLnJlYWRGaWxlQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICBxdWVzLmltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSBpbWFnZURhdGE7XG4gICAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoIXF1ZXMuaW1hZ2VTaXplKSB7XG4gICAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGltYWdlRGF0YSwgcXVlcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkRmlsZUFzRGF0YVVSTChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgb25JbWFnZUVkaXQocXVlczogYW55KSB7XG4gICAgdGhpcy5pc0ltYWdlRWRpdCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCA9IHF1ZXM7XG4gICAgY29uc29sZS5sb2coXCJvbkltYWdlRWRpdFwiKVxuICB9XG4gIGFzeW5jIG9uSW1hZ2VEZWxldGUocXVlczogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHF1ZXMuaW1hZ2VEYXRhID0gJyc7XG4gICAgICBxdWVzLm9yZ0ltYWdlRGF0YSA9ICcnO1xuICAgICAgLy8gSW5pdGlhbGl6ZSBsb2dvIHNpemUgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICBpZiAoIXF1ZXMuaW1hZ2VTaXplKSB7XG4gICAgICAgIHF1ZXMuaW1hZ2VTaXplID0geyB3aWR0aDogMTUwLCBoZWlnaHQ6IDE1MCB9O1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShxdWVzLmltYWdlRGF0YSwgcXVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWFkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MyNU1BUjI1IGltYWdlIGVkaXQgZnVuY3Rpb25zXG4gIGZsaXBIb3Jpem9udGFsKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogIXRoaXMudHJhbnNmb3JtLmZsaXBIXG4gICAgfTtcbiAgfVxuXG4gIGZsaXBWZXJ0aWNhbCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcFY6ICF0aGlzLnRyYW5zZm9ybS5mbGlwVlxuICAgIH07XG4gIH1cblxuICByZXNldEltYWdlKCkge1xuICAgIHRoaXMuY2FudmFzUm90YXRpb24gPSAwO1xuICAgIHRoaXMuY3JvcHBlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIHJvdGF0ZTogMCxcbiAgICAgIGZsaXBIOiBmYWxzZSxcbiAgICAgIGZsaXBWOiBmYWxzZSxcbiAgICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgICB0cmFuc2xhdGVWOiAwXG4gICAgfTtcbiAgfVxuXG4gIHpvb21PdXQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgLSAuMVxuICAgIH07XG4gIH1cblxuICB6b29tSW4oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgKyAuMVxuICAgIH07XG4gIH1cbiAgcm90YXRlTGVmdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBVc2UgdGltZW91dCBiZWNhdXNlIHJvdGF0aW5nIGltYWdlIGlzIGEgaGVhdnkgb3BlcmF0aW9uIGFuZCB3aWxsIGJsb2NrIHRoZSB1aSB0aHJlYWRcbiAgICAgIHRoaXMuY2FudmFzUm90YXRpb24tLTtcbiAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICByb3RhdGVSaWdodCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbisrO1xuICAgICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVMZWZ0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISAtIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZVJpZ2h0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISArIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZURvd24oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhICsgMVxuICAgIH07XG4gIH1cblxuICBtb3ZlVXAoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhIC0gMVxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBmbGlwQWZ0ZXJSb3RhdGUoKSB7XG4gICAgY29uc3QgZmxpcHBlZEggPSB0aGlzLnRyYW5zZm9ybS5mbGlwSDtcbiAgICBjb25zdCBmbGlwcGVkViA9IHRoaXMudHJhbnNmb3JtLmZsaXBWO1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogZmxpcHBlZFYsXG4gICAgICBmbGlwVjogZmxpcHBlZEgsXG4gICAgICB0cmFuc2xhdGVIOiAwLFxuICAgICAgdHJhbnNsYXRlVjogMFxuICAgIH07XG4gIH1cbiAgYXN5bmMgaW1hZ2VDcm9wcGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5jb252ZXJ0QmxvYlRvQmFzZTY0KGV2ZW50Lm9iamVjdFVybCk7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2VFbGVtZW50LmltYWdlRGF0YSA9IGJhc2U2NDtcbiAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUoYmFzZTY0LCB0aGlzLnNlbGVjdGVkSW1hZ2VFbGVtZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIGltYWdlQ3JvcHBlZDpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG5cbiAgY3JvcHBlclJlYWR5KHNvdXJjZUltYWdlRGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG4gIC8vIFNLUzI1TUFSMjUgYmxvYiB0byBiYXNlIDY0IGNvbnZlcnRlclxuICBjb252ZXJ0QmxvYlRvQmFzZTY0KG9iamVjdFVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZmV0Y2gob2JqZWN0VXJsKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKVxuICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5pc0ltYWdlRWRpdCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMjhNQVIyNSBmb3IgbmVzdGVkIGJvb2sgcmVhZFxuICByZWFkUXVlc3Rpb25zKHFiSWQ6IGFueSwgcXVlczphbnkpIHtcbiAgICBsZXQgcXVlc3Rpb25zID0gW107XG4gICAgLy8gQWRkZWQgdGVybmFyeSB0byBhdm9pZCB1bmRlZmluZWRcbiAgICBmb3IgKHZhciBzcSBpbiBxdWVzLmJvb2tRdWVzdGlvbnNNYXBbcWJJZF0uc3ViUXVlc3Rpb25zKSB7XG4gICAgICBsZXQgcTogUXVlc3Rpb24gPSBxdWVzLmJvb2tRdWVzdGlvbnNNYXBbcWJJZF0uc3ViUXVlc3Rpb25zW3NxXTtcbiAgICAgIC8vIGlmIHF1ZXN0aW9uIGlzIHRoZXJlIHByb2Nlc3NcbiAgICAgIGlmIChxKSB7XG4gICAgICAgICAgcXVlc3Rpb25zLnB1c2gocSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbnM7XG4gIH1cbn1cbiIsIjwhLS0gSEEgMjBERUMyMyBCb29rIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbjwhLS0gSEEgMjhERUMyMyAgUmVtb3ZlZCBJc1NoZW5nZWwocmVtb3ZhbCBvZiBzaGVuZ2VsIHZhbHVlcyBhcHBsaWVzIGZvciB0aGlzIHJlYXNvbikgYW5kIGRpcmVjdCBzdHlsaW5nIG9mIGJvb2tzIHRvIGF2b2lkIHN0eWxpbmcgaXNzdWVzLS0+XG48IS0tIEhBIDE4SkFOMjQgIEFkZGVkIGNsYXNzIGZvciBzdHlsaW5nIC0tPlxuPGRpdiBbc3R5bGVdPVwiYm9va1N0eWxlXCIgY2xhc3M9XCJjb250ZW50LWJveCBmb3JtLWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBEaXJlY3RpdmUgYW5kIFF1ZXN0aW9uIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbiAgICAgICAgPCEtLSBSQTA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbGctJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCIgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbZGlyXT1cInF1ZXMubGFuZ0RpcmVjdGlvblwiIFtzdHlsZV09XCJxdWVzPy5zdHlsZT8ucXVlc3Rpb25TdHlsZVwiPlxuICAgICAgICAgICAgPCEtLSBTdWIgUXVlc3Rpb24gTGFiZWwgLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgTGFiZWwgU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxuICAgICAgICAgICAgPCEtLSBWRCAwOU1heTI0IGlzIGhpZGUgZmllbGQgY2hhbmdlLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaXNIaWRkZW5cIiBjbGFzcz1cIm54dElucHV0Q29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJ1wiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBWRCAyMEpVTjI0IC0gaGVscCB0ZXh0IGNoYW5nZXMtLT5cbiAgICAgICAgICAgICAgICA8IS0tIFZEIDAxQXVnMjQgLSB2YWxpZGF0aW9uIGNoYW5nZS0tPlxuICAgICAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCAtIGxhYmVsIHZhbHVlIHN0eWxlLS0+XG4gICAgICAgICAgICAgICAgIDwhLS0gQVAtMjhNQVIyNSBTaG93IGxhYmVsIGlmIGVuYWJsZWQgYW5kIG5vdCBhIEJvb2xlYW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsID8gKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAmJiBxdWVzLnR5cGUgIT09ICdCb29sZWFuJyk6IChxdWVzLnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlICYmIHF1ZXMudHlwZSAhPT0gJ0Jvb2xlYW4nKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFN0eWxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCInZGlzLWZsZXggc2hlbmdlbC1teXQtZm9udDMgbXl0LWZvbnQ3ICdcIiBbc3R5bGVdPVwicXVlcy5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogcXVlcy5mb250LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogcXVlcy5mb250Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogcXVlcy5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXdlaWdodCc6IHF1ZXMuZm9udFdlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5pc09wdGlvbmFsXCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiPio8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBvbmx5IHNob3cgb24gZmlsZSB0eXBlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERpc3BsYXlzIGljb25zIHdpdGggdG9vbHRpcHMgaGVscCB0ZXh0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMucXVlc3Rpb25UZXh0ICYmIHF1ZXM/LmhlbHBUZXh0ICYmIHF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCIgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJxdWVzPy5oZWxwVGV4dFwiIG1hdFRvb2x0aXBDbGFzcz1cIndoaXRlLXRvb2x0aXBcIj5pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJTIDE3SkFOMjAyNSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gIERpc3BsYXlzIGljb25zIHdpdGggdG9vbHRpcHMgZm9yIGZpbGUgcmVxdWlyZW1lbnRzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIiAqbmdJZj1cInF1ZXMuZmllbGRzTWV0YSAmJiBxdWVzLnR5cGUgPT09ICdGaWxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0RmlsZVJlcXVpcmVtZW50cyhxdWVzLmZpZWxkc01ldGEpXCIgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNHB4O1wiPmk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZS0tPlxuICAgICAgICAgICAgICAgIDwhLS0gRGF0ZVRpbWUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERhdGUtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZSBbZGF0ZV09XCJxdWVzLmlucHV0XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBUaW1lLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRpbWUgW3RpbWVdPVwicXVlcy5pbnB1dFwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLmVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgKHRpbWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tdGltZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGNhbGVuZGFyICAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQ2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWNhbGVuZGFyIFtxdWVzdGlvbl09XCJxdWVzXCIgKGV2ZW50U2VsZWN0ZWQpPVwiZ2V0Q2FsZW5kYXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIiAob3Blbk1vZGFsKT1cIm9wZW5DYWxlbmRhck1vZGFsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlTW9kYWwpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIj48L2FwcC1jdXN0b20tY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gbW9kZWwgdXNlZCBpbiBjYWxlbmRhciBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLW1vZGVsICpuZ0lmPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFRpdGxlXT1cImNhbGVuZGFyTW9kYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFNpemVdPVwiY2FsZW5kYXJNb2RhbFNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NhdmVCdXR0b25WYWx1ZV09XCJjYWxlbmRhclNhdmVCdXR0b25WYWx1ZVwiIFttb2RhbEZvb3Rlcl09XCJtb2RhbENhbGVuZGFyTW9kYWxGb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmVCdXR0b25FbWl0KT1cIm9uQ2FsZW5kYXJNb2RhbFNhdmUoKVwiIChjYW5jZWxCdXR0b25FbWl0KT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGVRdWVzdGlvbik9XCJoYW5kbGVRdWVzdGlvbkV2ZW50KCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1tb2RlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIFRleHQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnIHx8IHF1ZXMudHlwZSA9PT0gJ0xpbmsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NWYWx1ZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgYm9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgICAgICAgICAgIH1cIiBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbaWRWYWx1ZV09XCJxdWVzLnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzRXZlbnRdPVwiY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSAgIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMb2NhdGlvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBIQTEwMDEyMDI0IEFkZGVkIEFwaSBrZXkgYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYXBpS2V5XT1cInFiSXRlbVsnYXBpS2V5J11cIiBbYWRkcmVzc109XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAobG9jYXRpb25TZWxlY3RlZCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciAgdGV4dCBhcmVhICAgLS0+XG4gICAgICAgICAgICAgICAgIDwhLS0gQVAtMDJBUFIyNSAtIGRlZmF1bHQgcGxhY2Vob2xkZXIgZW1wdHkgc3RyaW5nIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGV4dC1hcmVhIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW3Jvd3NdPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gUlMgMDZKQU4yNSAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciByaWNoIHRleHQgZWRpdG9yIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJpY2gtdGV4dCBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbdmFsdWVdPVwicXVlcy5pbnB1dCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0ZXh0VmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmljaC10ZXh0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTS1MyNU1BUjI1IEltYWdlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJbWFnZSdcIiAobW91c2VlbnRlcik9XCJpc0ltYWdlSG92ZXIgPSB0cnVlO1wiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImlzSW1hZ2VIb3ZlciA9IGZhbHNlO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbWFnZUhvdmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VFZGl0KHF1ZXMpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS4xMDY3IDYuMDcxNzRMOS45MjgzMyA0Ljg5MzRMMi4xNjY2NyAxMi42NTUxVjEzLjgzMzRIMy4zNDVMMTEuMTA2NyA2LjA3MTc0Wk0xMi4yODUgNC44OTM0TDEzLjQ2MzMgMy43MTUwN0wxMi4yODUgMi41MzY3NEwxMS4xMDY3IDMuNzE1MDdMMTIuMjg1IDQuODkzNFpNNC4wMzUgMTUuNTAwMUgwLjVWMTEuOTY0MkwxMS42OTU4IDAuNzY4NDAzQzExLjg1MjEgMC42MTIxNzcgMTIuMDY0IDAuNTI0NDE0IDEyLjI4NSAwLjUyNDQxNEMxMi41MDYgMC41MjQ0MTQgMTIuNzE3OSAwLjYxMjE3NyAxMi44NzQyIDAuNzY4NDAzTDE1LjIzMTcgMy4xMjU5QzE1LjM4NzkgMy4yODIxOCAxNS40NzU3IDMuNDk0MSAxNS40NzU3IDMuNzE1MDdDMTUuNDc1NyAzLjkzNjA0IDE1LjM4NzkgNC4xNDc5NiAxNS4yMzE3IDQuMzA0MjRMNC4wMzU4MyAxNS41MDAxSDQuMDM1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNkM3NTdEXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzLmlzUmVhZE9ubHlcIiAoY2xpY2spPVwib25JbWFnZURlbGV0ZShxdWVzKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicXVlcy5pc1JlYWRPbmx5XCIgW3NyY109XCJxdWVzLmltYWdlRGF0YVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb2dvIHByZXZpZXcgYXJlYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLXByZXZpZXdcIiAqbmdJZj1cInF1ZXMuaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicXVlcy5pbWFnZURhdGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVXBsb2FkIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pbWFnZURhdGFcIiBjbGFzcz1cImxvZ28tdXBsb2FkLXBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImxvZ28tdXBsb2FkLXt7aX19XCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9JbWFnZS5zdmdcIiBhbHQ9XCJVcGxvYWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5VcGxvYWQgSW1hZ2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImxvZ28tdXBsb2FkLXt7aX19XCIgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KHF1ZXMsICRldmVudClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0VtYWlsJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcmVhZE9ubHk9XCJxdWVzLmlzUmVhZE9ubHlcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBjbGFzcz1cInNoZS1saW5lLWlucHV0IGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHF1ZXMucXVlc3Rpb24gfX1cIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLUFQLTI0TUFSMjUgTnVtYmVyIC0tPlxuICAgICAgICAgICAgICAgICA8IS0tIEFQLTAyQVBSMjUgLSBkZWZhdWx0IHBsYWNlaG9sZGVyIGVtcHR5IHN0cmluZyAtLT5cbiAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ051bWJlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbYXR0ci5yZWFkb25seV09XCJxdWVzLmlzUmVhZE9ubHkgPyB0cnVlIDogbnVsbFwiW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBjbGFzcz1cInNoZS1saW5lLWlucHV0IGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiByZXF1aXJlZCAoZm9jdXMpPVwiY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cInF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvbiB8fCAnJ1wiIChpbnB1dCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudGFyZ2V0LnZhbHVlLCBxdWVzKVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8IS0tIEFQLTI4TUFSMjUgQm9vbGVhbiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQm9vbGVhbidcIiBjbGFzcz1cImJvb2xlYW4tcXVlc3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBxdWVzLnF1ZXN0aW9uVGV4dCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2F0dHIuZGlzYWJsZWRdPVwicXVlcy5pc1JlYWRPbmx5ID8gdHJ1ZSA6IG51bGxcIiBbY2hlY2tlZF09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgcmVxdWlyZWQgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwicXVlcy5lcnJvciA/ICdyZWQnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudGFyZ2V0LmNoZWNrZWQsIHF1ZXMpXCIgLz4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzIxTUFSMjUgbGluZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGluZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwiY3VzdG9tLWxpbmVcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1mbGV4XCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gUlMgMDNGRUIyMDI1IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gQWRkZWQgaGFuZGxlVGFibGVTYXZlIHRvIGhhbmRsZSB0YWJsZSBkYXRhIHBlcnNpc3RlbmNlLCBlbmFibGluZyBzYXZpbmcgdGFibGUgY29udGVudHMgdG8gbG9jYWwgc3RvcmFnZSB3aGVuIHNhdmUgYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGFwcC1jdXN0b20tdGFibGUgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tdGFibGU+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzTUFSMjUgZGF0YSB0YWJsZSBjaGFuZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxueHQtZGF0YXRhYmxlIGlzRWRpdFJvdyBpc0RlbGV0ZVJvdyBhY3Rpb25CdXR0b24gaXNCdXR0b25zIFtxdWVzdGlvbl09XCJxdWVzXCIgZnJvbT1cImZvcm1CdWlsZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIiBbdGFibGVDb25maWddPVwicXVlcy50YWJsZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUlkPVwiXCIgZGlyZWN0aW9uPVwibHRyXCIgdGFibGVXaWR0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9ueHQtZGF0YXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBUYWJsZSBBcHBlbmRpeCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGFibGVBcHBlbmRpeCdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLXRhYmxlLWFwcGVuZGl4IFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtdGFibGUtYXBwZW5kaXg+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBsaXN0IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gVkQgMjBBdWcyNCB1c2VkIGNvcnJlY3QgYXR0cmlidXRlIC0tPlxuICAgICAgICAgICAgICAgICAgPCEtLSBBUC0wMkFQUjI1IC0gZGVmYXVsdCBwbGFjZWhvbGRlciBlbXB0eSBzdHJpbmcgLS0+XG4gICAgICAgICAgICAgICAgICAgPCEtLSBBUC0xNkFQUjI1IEZvcm1hdCB0aGUgaW5wdXQgdmFsdWUgYmVmb3JlIGJpbmRpbmcgaXQgdG8gZmlsdGVyTmFtZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGlzdCdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXNlYXJjaC1ib3ggW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgW3BsYWNlSG9sZGVyVGV4dF09XCJxdWVzLnF1ZXN0aW9uIHx8ICcnXCIgW2ZpbHRlck5hbWVdPVwicXVlcy5pbnB1dFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItc2VhcmNoLWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIGNvbmRpdGlvbiBvZiBzcU9wdGlvbiB0byB0aGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXM/LnR5cGUgPT09ICdEcm9wZG93bicgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+IDwhLS0gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQVAgMTBGRUIyNSAtIER5bmFtaWNhbGx5IGJpbmRpbmcgc2VsZWN0ZWRWYWx1ZSBiYXNlZCBvbiBpc1NoZW5nZWwgY29uZGl0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxYkl0ZW0uaXNTaGVuZ2VsID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tLXt7J3NlbGVjdCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19LS0tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXM/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCBjdXN0b20tcmFkaW8gY29tcG9uZW50IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSYWRpbycgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiIFt0b2tlbl09XCJ0b2tlblwiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiIFtpZF09XCJxdWVzLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVmZXJlbmNlRmllbGRdPVwicXVlcy5yZWZlcmVuY2VGaWVsZFwiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWZpbGUtdXBsb2FkIFtsaW1pdEZpbGVVcGxvYWRpbmddPVwiNVwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiBbdGFibGVGaWxlXT1cImZhbHNlXCIgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiIFtpc0RlbGV0ZUZpbGVCdXR0b25WaXNpYmxlXT1cImlzRWRpdCAmJiAhcXVlcy5pc1JlYWRPbmx5XCI+PC9hcHAtZmlsZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1BvcFVwTWVzc2FnZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWRlcGVuZGVudC10YWJsZSBbYWxlcnRNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWRlcGVuZGVudC10YWJsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGFiZWwnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbGFiZWwgW2xhYmVsU3R5bGVdPVwicXVlcy50aXRsZVwiIFtsYWJlbFZhbHVlXT1cInF1ZXMucXVlc3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCBpbWFnZSBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnSW1hZ2UnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20taW1hZ2UgW3F1ZXN0aW9uXT1cInF1ZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWltYWdlPlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIDA4Tk9WMjMgLSBidXR0b24gdHlwZSBxdWVzdGlvbiBhZGRlZCAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQnV0dG9uJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWJ1dHRvbiBbaGVpZ2h0XT1cIic1MHB4J1wiIFt3aWR0aF09XCInMTUwcHgnXCIgW2J1dHRvblRleHRdPVwicXVlcz8ucXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInF1ZXM/LnF1ZXN0aW9uXCIgKGJ1dHRvblZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgIFRoaXMgaXMgdG8gbG9hZCBib29rIHR5cGUgcXVlc3Rpb25zLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Jvb2snXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5IG9wZXJhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInF1ZXMucWJJdGVtXCIgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25zXT1cInJlYWRRdWVzdGlvbnMocXVlcy5xYlJlZmVyZW5jZSwgcXVlcy5xYlJlZmVyZW5jZVF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLVNLUzI1TUFSMjUgTW9kYWwgT3ZlcmxheSAtLT5cbjxkaXYgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCIgKm5nSWY9XCJpc0ltYWdlRWRpdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPsOXPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gSW1hZ2UgRWRpdG9yIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQ/LnR5cGUgPT09ICdJbWFnZSdcIj5cbiAgICAgICAgICAgIDxpbWFnZS1jcm9wcGVyICpuZ0lmPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQuaW1hZ2VEYXRhXCIgW2ltYWdlQmFzZTY0XT1cInNlbGVjdGVkSW1hZ2VFbGVtZW50Lm9yZ0ltYWdlRGF0YVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCIgW2FsaWduSW1hZ2VdPVwiYWxpZ25JbWFnZVwiIFtyb3VuZENyb3BwZXJdPVwicm91bmRDcm9wcGVyXCIgW2JhY2tncm91bmRDb2xvcl09XCInd2hpdGUnXCJcbiAgICAgICAgICAgICAgICBpbWFnZUFsdFRleHQ9XCJBbHRlcm5hdGl2ZSBpbWFnZSB0ZXh0XCIgW2FsbG93TW92ZUltYWdlXT1cImZhbHNlXCIgW2hpZGVSZXNpemVTcXVhcmVzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FudmFzUm90YXRpb25dPVwiY2FudmFzUm90YXRpb25cIiBbYXNwZWN0UmF0aW9dPVwiYXNwZWN0UmF0aW9cIiBbY29udGFpbldpdGhpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbbWFpbnRhaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiIFtjcm9wcGVyU3RhdGljV2lkdGhdPVwiY3JvcHBlclN0YXRpY1dpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlclN0YXRpY0hlaWdodF09XCJjcm9wcGVyU3RhdGljSGVpZ2h0XCIgW2Nyb3BwZXJNaW5XaWR0aF09XCJjcm9wcGVyTWluV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyTWluSGVpZ2h0XT1cImNyb3BwZXJNaW5IZWlnaHRcIiBbY3JvcHBlck1heFdpZHRoXT1cImNyb3BwZXJNYXhXaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJNYXhIZWlnaHRdPVwiY3JvcHBlck1heEhlaWdodFwiIFtyZXNldENyb3BPbkFzcGVjdFJhdGlvQ2hhbmdlXT0ndHJ1ZScgWyhjcm9wcGVyKV09XCJjcm9wcGVyXCJcbiAgICAgICAgICAgICAgICBbKHRyYW5zZm9ybSldPVwidHJhbnNmb3JtXCIgW29ubHlTY2FsZURvd25dPVwidHJ1ZVwiIG91dHB1dD1cImJsb2JcIiBmb3JtYXQ9XCJwbmdcIlxuICAgICAgICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwiaW1hZ2VDcm9wcGVkKCRldmVudClcIiAoY3JvcHBlclJlYWR5KT1cImNyb3BwZXJSZWFkeSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2ltYWdlLWNyb3BwZXI+XG5cbiAgICAgICAgICAgIDwhLS0gQ29udHJvbHMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQuaW1hZ2VEYXRhXCIgY2xhc3M9XCJjb250cm9sc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicm90YXRlTGVmdCgpXCIgdGl0bGU9XCJSb3RhdGUgTGVmdFwiPuKfsjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicm90YXRlUmlnaHQoKVwiIHRpdGxlPVwiUm90YXRlIFJpZ2h0XCI+4p+zPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJ6b29tT3V0KClcIiB0aXRsZT1cIlpvb20gT3V0XCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiem9vbUluKClcIiB0aXRsZT1cIlpvb20gSW5cIj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlTGVmdCgpXCIgdGl0bGU9XCJNb3ZlIExlZnRcIj7ihpA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVSaWdodCgpXCIgdGl0bGU9XCJNb3ZlIFJpZ2h0XCI+4oaSPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlVXAoKVwiIHRpdGxlPVwiTW92ZSBVcFwiPuKGkTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZURvd24oKVwiIHRpdGxlPVwiTW92ZSBEb3duXCI+4oaTPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwSG9yaXpvbnRhbCgpXCIgW2NsYXNzLmVuYWJsZWRdPVwidHJhbnNmb3JtLmZsaXBIXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJGbGlwIEhvcml6b250YWxseVwiPuKGlDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiZmxpcFZlcnRpY2FsKClcIiBbY2xhc3MuZW5hYmxlZF09XCJ0cmFuc2Zvcm0uZmxpcFZcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkZsaXAgVmVydGljYWxseVwiPuKGlTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicmVzZXRJbWFnZSgpXCIgdGl0bGU9XCJSZXNldFwiPsOXPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSAwNi0wOS0yNCBmb3IgY2FsZW5kYXIgdHlwZS0tPlxuPCEtLSA8bmctdGVtcGxhdGUgZHluYW1pY0NvbXBvbmVudEhvc3Q+PC9uZy10ZW1wbGF0ZT4gLS0+Il19
|
|
831
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQUlqSyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFHckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztB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QyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBRTFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxD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QXFCLGdKQUFFLG9CQUFvQixvTUFBRSx1QkFBdUIsOEtBQUUsUUFBUSw0Q0FBRSxnQkFBZ0IsaWJBQUUsUUFBUTs7NEZBSy9QLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxrQkFBa0IsYUFDakIsQ0FBQyxhQUFhLENBQUMsY0FDZCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRO3FCQUN6UTs7MEJBK0ZFLE1BQU07MkJBQUMsUUFBUTt5Q0ExRlQsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBbUVJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVwZW5kZW5jeU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RlcGVuZGVuY3lNZXRhJztcbmltcG9ydCB7IENyb3BwZXJQb3NpdGlvbiwgRGltZW5zaW9ucywgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEltYWdlQ3JvcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW1hZ2UtY3JvcHBlci9jb21wb25lbnQvaW1hZ2UtY3JvcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1yYWRpby9jdXN0b20tcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLWRyb3Bkb3duL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoQm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE54dERhdGF0YWJsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlja0xvY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9waWNrLWxvY2F0aW9uL3BpY2stbG9jYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbU1vZGVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tbW9kZWwvY3VzdG9tLW1vZGVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21DYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLWNhbGVuZGFyL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tICcuLi8uLi9pMThuLnBpcGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL254dC1pbnB1dC9ueHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE54dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYnV0dG9uL254dC1idXR0b24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1ZXN0aW9uYm9vaycsXG4gIHByb3ZpZGVyczogW0NoYW5nZVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLCBJbWFnZUNyb3BwZXJDb21wb25lbnQsIEZpbGVVcGxvYWRDb21wb25lbnQsIEN1c3RvbVJhZGlvQ29tcG9uZW50LCBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCwgTnh0QnV0dG9uQ29tcG9uZW50LCBTZWFyY2hCb3hDb21wb25lbnQsIE54dERhdGF0YWJsZSwgUGlja0xvY2F0aW9uQ29tcG9uZW50LCBDdXN0b21Nb2RlbENvbXBvbmVudCwgQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQsIEkxOG5QaXBlLCBNYXRUb29sdGlwTW9kdWxlLCBOeHRJbnB1dFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbmJvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgQElucHV0KCkgdHJhbnNsYXRlZFF1ZXN0aW9uczogYW55W10gPSBbXSAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgQElucHV0KCkgcXVlc3Rpb25zOiBhbnlbXTtcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOiBhbnk7XG4gIEBJbnB1dCgpIGxhYmVsVmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgdG9rZW46IHN0cmluZzsgLy8gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXRcbiAgQElucHV0KCkgaXNFZGl0OiBib29sZWFuO1xuICBAT3V0cHV0KCkgaGFuZGxlRHJvcERvd246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gIEBPdXRwdXQoKSBzaW5nbGVGaWVsZENoYW5nZUVtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGRyb3BEb3duRGF0YTogYW55O1xuICBASW5wdXQoKSBkYXRhQmluZDogYW55O1xuICAvL0BWaWV3Q2hpbGQoQ29tcG9uZW50aG9zdERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0hvc3Q6IENvbXBvbmVudGhvc3REaXJlY3RpdmU7XG4gIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcbiAgbG9hZENvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcbiAgLy8gIEhBIDE5REVDMjMgRGVjbGFyYXRpb24gZm9yIFNhbGVzZm9yY2UgU3R5bGluZ1xuICBzdHlsZTogYW55O1xuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XG4gIGJvb2tTdHlsZTogYW55O1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgaXNJbWFnZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRJbWFnZUVsZW1lbnQ6IGFueTtcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHtcbiAgICB0cmFuc2xhdGVVbml0OiAncHgnLFxuICAgIHNjYWxlOiAxLFxuICAgIHJvdGF0ZTogMCxcbiAgICBmbGlwSDogZmFsc2UsXG4gICAgZmxpcFY6IGZhbHNlLFxuICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgdHJhbnNsYXRlVjogMFxuICB9O1xuICBjYW52YXNSb3RhdGlvbiA9IDA7XG4gIGNyb3BwZXI/OiBDcm9wcGVyUG9zaXRpb247XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgY3JvcHBlck1heEhlaWdodCA9IDA7XG4gIGNyb3BwZXJNYXhXaWR0aCA9IDA7XG4gIGNyb3BwZXJNaW5IZWlnaHQgPSAwO1xuICBjcm9wcGVyTWluV2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljV2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljSGVpZ2h0ID0gMDtcbiAgYXNwZWN0UmF0aW8gPSA0IC8gMztcbiAgcm91bmRDcm9wcGVyID0gZmFsc2U7XG4gIGltYWdlQ2hhbmdlZEV2ZW50OiBFdmVudCB8IG51bGwgPSBudWxsO1xuICBhbGlnbkltYWdlID0gJ2NlbnRlcicgYXMgY29uc3Q7XG4gIGlzSW1hZ2VIb3ZlciA9IGZhbHNlO1xuXG4gIC8vIFJTIDE3SkFOMjAyNVxuICAvL0Zvcm1hdHMgYW5kIHJldHVybnMgZmlsZSB1cGxvYWQgcmVxdWlyZW1lbnRzIGZyb20gYSBKU09OIHN0cmluZ1xuICBnZXRGaWxlUmVxdWlyZW1lbnRzKGZpZWxkc01ldGE6IGFueSk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFEYXRhID0gdHlwZW9mIGZpZWxkc01ldGEgPT09ICdvYmplY3QnICA/ICBmaWVsZHNNZXRhIDogSlNPTi5wYXJzZShmaWVsZHNNZXRhKSA7XG4gICAgICBjb25zdCBmaWxlQ29uZmlnID0gbWV0YURhdGFbMF07XG5cbiAgICAgIGlmICghZmlsZUNvbmZpZykgcmV0dXJuICcnO1xuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHMgPSBbXTtcblxuICAgICAgaWYgKGZpbGVDb25maWcuYWxsb3dlZFR5cGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYEFjY2VwdGVkIGZvcm1hdHM6ICR7ZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVDb25maWcubWF4RmlsZVNpemUpIHtcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYE1heGltdW0gc2l6ZSBwZXIgZmlsZTogJHtmaWxlQ29uZmlnLm1heEZpbGVTaXplIC8gMTA0ODU3Nn1NQmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlcykge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBudW1iZXIgb2YgZmlsZXM6ICR7ZmlsZUNvbmZpZy5tYXhGaWxlc31gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcXVpcmVtZW50cy5tYXAocmVxID0+IHJlcS50cmltKCkpLmpvaW4oJ1xcbicpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGZpZWxkc01ldGE6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KCkgaGFkbGVEcm9wRG93bkRlcGVuZGVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gVkQgMTNTZXAyNCBjaGFuZ2VzXG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgIC8vIFZEIHNlcDEzMjQgY2hhbmdlcyAtIHByb2Nlc3MgZGF0YSB3aGVuIGRhdGFiaW5kIHZhbHVlIGNoYW5nZVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmN1c3RvbUNoYW5nZSQuc3Vic2NyaWJlKFxuICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2VWYWx1ZSA9PSAnZGF0YUJpbmQnKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBTS1MyME1BUjI1IEVuc3VyZSB0aGUgY2hpbGQgY29tcG9uZW50IGlzIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyB0aGUgbWV0aG9kXG4gICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgIC8vICBBUC0yOE1BUjI1IEFkZCBCb29sZWFuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVF1ZXMocXVlcyk7XG4gICAgICAgIGxldCBpbnB1dDogYW55O1xuICAgICAgICBpZiAocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycgfHwgcXVlcy50eXBlID09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgICAgaW5wdXRbJ3ZhbHVlT2JqJ10gPSBxdWVzLmlucHV0ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzLnJlZmVyZW5jZUZpZWxkIHx8IG51bGxcbiAgICAgICAgICBpbnB1dFsnZnJvbVF1ZXN0aW9uSWQnXSA9IHF1ZXMuaWQgfHwgbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHtcbiAgICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgICAgaW5wdXRbJ3ZhbHVlJ10gPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09ICdJbWFnZScpIHtcbiAgICAgICAgICBpbnB1dCA9IHF1ZXMub3JnSW1hZ2VEYXRhXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihxdWVzLnR5cGUgPT09ICdCb29sZWFuJyl7XG4gICAgICAgICAgcXVlcy5pbnB1dCA9IHF1ZXMuaW5wdXQgfHwgcXVlcy5kZWZhdWx0VmFsdWUgfHwgZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaW5wdXQgPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGlucHV0LCBxdWVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIGhhbmRsZVF1ZXMocXVlczogYW55KSB7XG4gICAgLy8gSEEgMTktSkFOLTI0IElmIGNvbmRpdGlvbiBpcyBmb3IgYmluZC1pbiwgY29ycmVjdGlvblxuICAgIC8vIEhBIDA5RkVCMjQgQWRkaW5nIGNvbmRpdGlvbiB0byBhdm9pZCB1bmRlZmluZWQgZXJyb3JcbiAgICBpZiAodGhpcy5kYXRhQmluZCAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGFCaW5kKS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5mbGF0dGVuT2JqZWN0KHRoaXMuZGF0YUJpbmQpXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIHJlc3VsdCkge1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IHZhbDtcbiAgICAgICAgaWYgKHF1ZXMucmVmZXJlbmNlRmllbGQgPT09IGtleSkge1xuICAgICAgICAgIGlmIChxdWVzLnR5cGUgPT09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnNxT3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgLy8gICBpZiAoZWxlbWVudFsncmVmZXJlbmNlRmllbGQnXSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAvLyAgICAgZWxlbWVudFsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8vICAgICBlbGVtZW50WydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDI0SkFOMjQgVG8gYmluZC1pbiBEYXRlIGFuZCBEYXRlVGltZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gbmV3IERhdGUodmFsdWU/LnRvU3RyaW5nKCkpICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLWluIExvY2F0aW9uIFR5cGVcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlWydhZGRyZXNzJ10gPyB2YWx1ZVsnYWRkcmVzcyddIDogdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcyBmb3IgZGF0YSBiaW5kSW5cbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gdHlwZW9mIHF1ZXNbJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyBxdWVzWydmaWVsZHNNZXRhJ10gOiBKU09OLnBhcnNlKHF1ZXNbJ2ZpZWxkc01ldGEnXSk7XG4gICAgICAgICAgICBpZiAoZW50cmllcykge1xuICAgICAgICAgICAgICBsZXQgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcVJlZmVyZW5jZSA9IEpTT04ucGFyc2UoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5wdXNoKHFSZWZlcmVuY2U/LnF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZT8uZm9yRWFjaChjYWxlbmRhckFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY2FsZW5kYXJBcnJheS5kYXRlKTtcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFyQXJyYXkuZW50cmllcy5mb3JFYWNoKGlucHV0RW50cnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXRFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQucmVmZXJlbmNlRmllbGQgPT0gaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ0RhdGUnIHx8IGZpZWxkLnR5cGUgPT0gJ0RhdGVUaW1lJyB8fCBmaWVsZC50eXBlID09ICdUaW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gbmV3IERhdGUodj8udG9TdHJpbmcoKSkgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gaWYgKGZpZWxkLnR5cGUgPT09ICdEcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdGVkVmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdiAgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5hZGRFdmVudChkYXRlLCByZWZlcmVuY2VRdWVzdGlvbnMpOy8vU0tTIDI3U0VQMjQgZWFjaCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUscmVmZXJlbmNlUXVlc3Rpb25zKTsgLy90aGlzIGlzIG9ubHkgbGFzdCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRmlsZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBbXTtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB7fTtcbiAgICAgIHF1ZXN0aW9uWydpZCddID0gcXVlcy5pZDtcbiAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIC8vIEhBIDEyRkVCMjQgVG8gYmluZC1vdXQgTG9jYXRpb24gVHlwZVxuICAgICAgaWYgKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJykge1xuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogcXVlcy5zZWxlY3RlZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IFtdO1xuICAgICAgfVxuICAgICAgcXVlc3Rpb25bJ3R5cGUnXSA9IHF1ZXMudHlwZTtcbiAgICAgIHF1ZXN0aW9uWydxdWVzdGlvbk51bWJlciddID0gcXVlcy5xdWVzdGlvbk51bWJlcjtcbiAgICAgIHF1ZXN0aW9uWydyZWZlcmVuY2VGaWVsZCddID0gcXVlcz8ucmVmZXJlbmNlRmllbGQ7XG4gICAgICBxdWVzdGlvblsnc2VsZWN0ZWRWYWx1ZSddID0gcXVlcz8uc2VsZWN0ZWRWYWx1ZTsgIC8vIE1SIDMxSkFOMjQgTmVlZCB0byBwYXNzIHRoZSBzZWxlY3RlZCB2YWx1ZSB0b29cbiAgICB9XG4gIH1cbiAvLyBTS1MyME1BUjI1IGZsYXR0ZW5pbmcgbmVzdGVkIG9iamVjdHMsIG1hcHBpbmcgdmFsdWVzIHVzaW5nICByZWZlcmVuY2VGaWVsZFxuIGZsYXR0ZW5PYmplY3Qob2JqOiBhbnksIHBhcmVudEtleSA9ICcnLCBpbmNsdWRlT2JqZWN0cyA9IHRydWUpIHtcbiAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBsZXQgbmV3S2V5ID0gcGFyZW50S2V5ID8gYCR7cGFyZW50S2V5fS4ke2tleX1gIDoga2V5O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIEluY2x1ZGUgZnVsbCBhcnJheVxuXG4gICAgICB2YWwuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5mbGF0dGVuT2JqZWN0KGl0ZW0sIGAke25ld0tleX1bJHtpbmRleH1dYCwgZmFsc2UpKTsgLy8gRmxhdHRlbiBvYmplY3RzIGluIGFycmF5c1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFtgJHtuZXdLZXl9WyR7aW5kZXh9XWAsIGl0ZW1dKTsgLy8gU3RvcmUgcHJpbWl0aXZlIHZhbHVlcyBpbiBhcnJheXNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlT2JqZWN0cykge1xuICAgICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIG9iamVjdFxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5mbGF0dGVuT2JqZWN0KHZhbCwgbmV3S2V5LCBmYWxzZSkpOyAvLyBGbGF0dGVuIG5lc3RlZCBvYmplY3RzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBTdG9yZSBrZXktdmFsdWUgcGFpcnNcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgcHJvY2Vzc0RhdGEoKSB7XG4gICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIEJvb2sgU3R5bGluZyhTbGFlc2ZvcmNlKVxuICAgIC8vIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeVxuICAgIGlmICh0aGlzLnFiSXRlbT8uc3R5bGUpIHtcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZSA9IHR5cGVvZiB0aGlzLnFiSXRlbS5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnICsgdGhpcy5xYkl0ZW0/LnN0eWxlKSA6IHRoaXMucWJJdGVtLnN0eWxlO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlLmlucHV0U3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5zaG93TGFiZWwgPSB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsID8gdGhpcy5xYkl0ZW0uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMucWJJdGVtKSB7XG4gICAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0ge1xuICAgICAgICAgIFwibGFiZWxDbGFzc1wiOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxWYWx1ZVN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dENsYXNzXCI6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dFN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJib29rU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgIFwiZGlyZWN0aW9uXCI6IFwibHRyXCIsXG4gICAgICAgICAgXCJxdWVzdGlvblN0eWxlXCI6IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xYkl0ZW0uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHRoaXMucWJJdGVtPy5zdHlsZS5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSB0aGlzLnFiSXRlbS5zdHlsZS5kaXJlY3Rpb24gPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmRpcmVjdGlvbiA/IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uIDogJ2x0cic7XG4gICAgdGhpcy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmJvb2tTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGh0bWxFbGVtZW50ID0gZWxlbWVudD8ucXVlc3Rpb25UZXh0O1xuICAgICAgdmFyIHRleHRPbmx5ID0gaHRtbEVsZW1lbnQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpXG4gICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IHRleHRPbmx5O1xuICAgICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIFN0eWxpbmcoU2xhZXNmb3JjZSlcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnQm9vaycpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pIHtcbiAgICAgICAgICB2YXIgcWIgPSB0eXBlb2YgZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSA9PT0gJ29iamVjdCcgID8gIGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10gOiBKU09OLnBhcnNlKCBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKSA7XG4gICAgICAgICAgaWYgKHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSkge1xuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdHlwZW9mIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnICsgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlKSA6IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBCb29rIHR5cGUgcXVlc3Rpb24gc3R5bGluZ1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmlucHV0Q2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0Q2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5pbnB1dFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuYm9va1N0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLnNob3dMYWJlbCA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uc2hvd0xhYmVsID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5xdWVzdGlvblN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsnbGFuZ0RpcmVjdGlvbiddID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmRpcmVjdGlvbiA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuXG4gICAgICAgICAgLy8gTG9vcCBmb3IgZWFjaCBxdWVzdGlvbiBpbiB0aGUgYm9va1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXT8uc3ViUXVlc3Rpb25zPy5mb3JFYWNoKHF1ZXN0aW9uRnJvbUJvb2sgPT4ge1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlIDogcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5pbnB1dENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5pbnB1dFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5ib29rU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5ib29rU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5zaG93TGFiZWwgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5xdWVzdGlvblN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9va1snbGFuZ0RpcmVjdGlvbiddID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uZGlyZWN0aW9uID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW1lbnRbJ3FiSXRlbSddID0gcWJbJ3F1ZXN0aW9uYm9vayddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50LnN0eWxlID0gZWxlbWVudC5zdHlsZSA/IHR5cGVvZiBlbGVtZW50LnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyBlbGVtZW50Py5zdHlsZSkgOiBlbGVtZW50Py5zdHlsZSA6IHRoaXMucWJJdGVtPy5zdHlsZTtcblxuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbENsYXNzID0gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA/IGVsZW1lbnQuc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbFN0eWxlID0gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmlucHV0Q2xhc3MgPSBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzID8gZWxlbWVudC5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPSBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPyBlbGVtZW50LnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuYm9va1N0eWxlID0gZWxlbWVudC5zdHlsZT8uYm9va1N0eWxlID8gZWxlbWVudC5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2hvd0xhYmVsID0gZWxlbWVudC5zdHlsZT8uc2hvd0xhYmVsID8gZWxlbWVudC5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICAgIGVsZW1lbnQuc3R5bGUucXVlc3Rpb25TdHlsZSA9IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcblxuICAgICAgZWxlbWVudFsnbGFuZ0RpcmVjdGlvbiddID0gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uID8gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuXG5cbiAgICAgIC8vVkQgMDJBdWcyNCBkZXBlbmRlbnQgZmllbGQgc2hvdy9oaWRlIGNoYW5nZXNcbiAgICAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gICAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gICAgICBpZiAoZWxlbWVudC5yZWZlcmVuY2VGaWVsZCkge1xuICAgICAgICBlbGVtZW50LmRlcGVuZGVudFJlZiA9IGVsZW1lbnQucmVmZXJlbmNlRmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5zdWJUZXh0KSB7XG4gICAgICAgIGVsZW1lbnRbJ3N1YlRleHQnXSA9IHR5cGVvZiBlbGVtZW50Py5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IGVsZW1lbnQ/LnN1YlRleHQgOiBKU09OLnBhcnNlKGVsZW1lbnRbJ3N1YlRleHQnXSB8fCB7fSk7XG4gICAgICAgIGxldCBkZXBlbmRlbmN5T2JqOiBEZXBlbmRlbmN5TWV0YSA9IGVsZW1lbnQuc3ViVGV4dDtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3lPYmouaXNEZXBlbmRlbnRGaWVsZCkge1xuICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIFZEIDIwQXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCAmJiBkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlLnZhbHVlT2JqICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PSBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LmlzSGlkZGVuRmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmRlcGVuZGVudFZhbHVlID09IGNoYW5nZVZhbHVlLnZhbHVlT2JqKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGVwZW5kZW50IHNlbGVjdGlvbiByZW1vdmUgdGhlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSAnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgICAgIC8vIGlmIChlbGVtZW50LnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgIC8vICAgdGhpcy5vcGVuQ2FsZW5kYXJDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgdGhpcy5wcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpO1xuICB9XG4gIC8vIFZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gIGhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50SWQpIHtcbiAgICBsZXQgZWxlbWVudHNUb0hpZGUgPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoZWwgPT4ge1xuICAgICAgaWYgKGVsLnN1YlRleHQpIHtcbiAgICAgICAgZWxbJ3N1YlRleHQnXSA9IHR5cGVvZiBlbD8uc3ViVGV4dCA9PT0gJ29iamVjdCcgPyBlbD8uc3ViVGV4dCA6IEpTT04ucGFyc2UoZWxbJ3N1YlRleHQnXSB8fCB7fSk7XG4gICAgICAgIGxldCBkZXBPYmogPSBlbC5zdWJUZXh0O1xuICAgICAgICByZXR1cm4gZGVwT2JqLnNvdXJjZVF1ZXN0aW9uSWQgPT0gZWxlbWVudElkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgZWxlbWVudHNUb0hpZGUuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5pc0hpZGRlbiA9IHRydWU7XG4gICAgICBlbC5pbnB1dCA9ICcnO1xuICAgICAgZWwuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsKTtcbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGhpZGUgZWxlbWVudHMgZGVwZW5kZW50IG9uIHRoaXMgb25lXG4gICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbC5pZCk7XG4gICAgfSk7XG4gIH1cbi8vQVAtMTlNQVkyNSBFbnN1cmUgc3FMaXN0IGlzIGFsd2F5cyBhbiBhcnJheSBieSBkZWZhdWx0aW5nIHRvIFtdXG4gIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcbiAgICB2YXIgc3FMaXN0ID0gdGhpcy5zdWJRdWVzdGlvbnM/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCA9PSBxdWVzSWQpIHx8IFtdO1xuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICAgc3EuZXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICBwcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpIHtcbiAgICBpZiAodGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zICYmIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKChvcmdRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5mb3JFYWNoKCh0cmFuc1F1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAob3JnUXVlc3Rpb24udW5pcXVlSWRlbnRpZmllciA9PSB0cmFuc1F1ZXN0aW9uLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uVGV4dCA9IHRyYW5zUXVlc3Rpb24ubGFiZWw7XG4gICAgICAgICAgICBvcmdRdWVzdGlvbi5xdWVzdGlvbiA9IHRyYW5zUXVlc3Rpb24ucGxhY2VIb2xkZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChyZWNvcmRzKTtcbiAgfVxuXG4gIC8vIENhcHR1cmUgYW5kIFByb2Nlc3MgQ2hpbGQgRXZlbnRcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OiBhbnkpIHtcbiAgICBsZXQgZHJvcGRvd25EYXRhID0ge307XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmFubm91bmNlQ2hhbmdlKGV2ZW50KTtcbiAgICBpZiAocXVlcykge1xuICAgICAgaWYgKHF1ZXMudHlwZSA9PSAnRHJvcGRvd24nIHx8IHF1ZXMudHlwZSA9PSAnUmFkaW8nKSB7XG4gICAgICAgIC8vIEhBIDE5SkFOMjQgQ29ycmVjdGlvbiBvZiBkcm9wZG93biB2YWx1ZXNcbiAgICAgICAgcXVlcy5zZWxlY3RlZE9iaiA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQuc2VsZWN0ZWRPYmogPyBldmVudC5zZWxlY3RlZE9iaiA6IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgICAgLy8gZW1pdCB0aGUgZHJvcGRvd24gZGF0YSB0byBwYXJlbnRcbiAgICAgICAgZHJvcGRvd25EYXRhWydldmVudCddID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIGRyb3Bkb3duRGF0YVsncXVlcyddID0gcXVlcztcbiAgICAgICAgaWYgKGRyb3Bkb3duRGF0YVsnZXZlbnQnXSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRHJvcERvd24uZW1pdChkcm9wZG93bkRhdGEpO1xuICAgICAgICB9ICAvLyBWRCAyMURFQzIzIC0gZGVwZW5kZW50IGZpZWxkIGNoYW5nZVxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0xvY2F0aW9uJykge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqPyBldmVudC52YWx1ZU9iai5hZGRyZXNzIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdGaWxlJykge1xuICAgICAgICBxdWVzLmlucHV0ID0gdGhpcy5zZWxlY3RlZEZpbGVEYXRhID0gZXZlbnQ7XG5cbiAgICAgICAgLy8gSGFuZGxlIGZpbGUgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpICYmIGV2ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIE5vIGZpbGVzIHVwbG9hZGVkIHdoZW4gcmVxdWlyZWRcbiAgICAgICAgICBxdWVzLmVycm9yID0gcXVlcy5lcnJvck1lc3NhZ2UgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBGaWxlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFxuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIHRoZSBmaWxlIHVwbG9hZCBjb21wb25lbnRcbiAgICAgICAgaWYgKGV2ZW50Py52YWxpZGF0aW9uRXJyb3JzICYmIGV2ZW50LnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgcXVlcy5lcnJvci5tZXNzYWdlID0gZXZlbnQudmFsaWRhdGlvbkVycm9yc1swXTsgLy8gVXNlIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGVycm9yXG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKSB7IC8vIEhBIDI0SkFOMjQgQ29udmVydGluZyBEYXRlIGFuZCBEYXRlVGltZSB0byBVVENcbiAgICAgICAgaWYgKGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgbGV0IGQgPSBuZXcgRGF0ZShldmVudC52YWx1ZSk7XG4gICAgICAgICAgaWYgKCFpc05hTihkPy5nZXRUaW1lKCkpKSB7IC8vU0tTMjNBUFIyNSBDaGVjayBmb3IgdmFsaWQgZGF0ZVxuICAgICAgICAgICAgICBsZXQgdXRjU3RyaW5nID0gZD8udG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHV0Y1N0cmluZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0xpc3QnKSB7XG4gICAgICAgIC8vIFZEIDIwQXVnMjQgaGFuZGxpbmcgdGhlIGxpc3QgdHlwZSAgaGFuZGxlIG11bHRpcGxlIG9iamVjdCB2YWx1ZXNcbiAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZXZlbnQ/LnZhbHVlT2JqLCBldmVudD8uZmllbGQpO1xuICAgICAgfS8vUlMgMDZKQU4yNVxuICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJykge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQgfHwgbnVsbDtcbiAgICAgIH0vLyAgQVAtMjhNQVIyNSBBZGQgQm9vbGVhblxuICAgICAgIGVsc2UgaWYocXVlcy50eXBlID09PSAnQm9vbGVhbicpe1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XG4gICAgICAgIHF1ZXMuYm9vbGVhbiA9IGV2ZW50O1xuICAgICAgfVxuICAgICAgLy8gQVAtMTBBUFIyNSBOdW1iZXJcbiAgICAgIC8vIEFQMTlQQVIyNSAtaWYgY2hhbmdlIGVsc2UgaXNcbiAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IE51bWJlcihldmVudCk7IFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudDtcbiAgICAgIH1cbiAgICAgIC8vUlMgMDZKQU4yNVxuICAgICAgLy8gVmFsaWRhdGUgZXJyb3IgbWVzc2FnZSAtIG1vZGlmaWVkIHRvIGhhbmRsZSByaWNoIHRleHRcbiAgICAgIGNvbnN0IGhhc0Vycm9yID0gcXVlcy5lcnJvck1lc3NhZ2UgJiYgKFxuICAgICAgICAocXVlcy50eXBlID09PSAnRmlsZScgJiYgcXVlcy5pbnB1dC5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnICYmICghcXVlcy5pbnB1dCB8fCBxdWVzLmlucHV0LnRyaW0oKSA9PT0gJycpKSB8fFxuICAgICAgICAocXVlcy50eXBlICE9PSAnRmlsZScgJiYgcXVlcy5UeXBlICE9PSAnUmljaFRleHRBcmVhJyAmJiAhcXVlcy5pbnB1dClcbiAgICAgICk7XG4gICAgICBxdWVzLmVycm9yID0gaGFzRXJyb3IgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIC8vIE9uY2UgdGhlIHJpZ2h0IHZhbHVlIGlzIHN0b3JlZCBpbiBxdWVzLmlucHV0IHN0b3JlIHRoZSBxdWVzICh3aXRoIGlucHV0KSBpbiBzdG9yYWdlU2VydmljZVxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUocXVlcyk7XG4gICAgICAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cbiAgICAgIHRoaXMuaGFuZGxlUXVlc3Rpb24uZW1pdChxdWVzKTtcbiAgICB9XG4gICAgaWYocXVlcz8uc2luZ2xlRmllbGRDaGFuZ2Upe1xuICAgICAgdGhpcy5zaW5nbGVGaWVsZENoYW5nZUVtaXQuZW1pdChxdWVzKTtcbiAgICB9XG4gIH1cbiAgZGVsZXRlRmlsZShmaWxlRGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ2ZpbGVEQVRBJywgZmlsZURhdGEpXG4gIH1cbiAgZ2V0RHJvcERvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaGFkbGVEcm9wRG93bkRlcGVuZGVudC5lbWl0KGV2ZW50KTtcbiAgfVxuICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldENhbGVuZGFyRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5oYW5kbGVDYWxlbmRhckV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZEIDA2U2VwMjQgcmVtb3ZlIHRoZSBzcGVjaWFsIGNoYXJlY3RlcnMgYW5kIHRhZ3MgXG4gIC8vIGZyb20gdGhlIHF1ZXN0aW9uVGV4dFxuICByZW1vdmVDaGFyYWN0ZXJzKHF1ZXN0aW9uVGV4dDogc3RyaW5nKSB7XG4gICAgbGV0IHVwZGF0ZWRUZXh0ID0gcXVlc3Rpb25UZXh0Py5yZXBsYWNlKC88W14+XSo+L2csICcnKTtcbiAgICByZXR1cm4gdXBkYXRlZFRleHQ7XG4gIH1cblxuICAvLyBzdW5kYXkgY29tbWVudFxuICAvLyBvcGVuQ2FsZW5kYXJDb21wb25lbnQocXVlcykge1xuICAvLyAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmR5bmFtaWNIb3N0LnZpZXdDb250YWluZXJSZWY7XG4gIC8vICAgaWYodmlld0NvbnRhaW5lclJlZil7XG4gIC8vICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gIC8vICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChDdXN0b21DYWxlbmRhckNvbXBvbmVudCk7XG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucXVlc3Rpb24gPSBxdWVzO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRhdGVTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHRoaXMuZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50KSk7XG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZXZlbnRTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OmFueSkgPT4gdGhpcy5nZXRDYWxlbmRhckV2ZW50KGV2ZW50KSlcbiAgLy8gICB9XG4gIC8vIH1cblxuICBpc0NhbGVuZGFyTW9kYWxPcGVuID0gZmFsc2U7XG4gIGNhbGVuZGFyTW9kYWxUaXRsZTogYW55O1xuICBjYWxlbmRhck1vZGFsU2l6ZTogYW55O1xuICBjYWxlbmRhclNhdmVCdXR0b25WYWx1ZTogYW55O1xuICByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgcWJSZWZyZW5jZUJvb2s6IGFueTtcbiAgbW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyOiBhbnk7XG5cbiAgb3BlbkNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMucWJSZWZyZW5jZUJvb2sgPSBldmVudC5xYlJlZnJlbmNlQm9vaztcbiAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyA9IGV2ZW50LnJlZmVyZW5jZVF1ZXN0aW9ucztcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxUaXRsZSA9IGV2ZW50Lm1vZGFsVGl0bGU7XG4gICAgdGhpcy5jYWxlbmRhck1vZGFsU2l6ZSA9IGV2ZW50Lm1vZGFsU2l6ZTtcbiAgICB0aGlzLmNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlID0gZXZlbnQuc2F2ZUJ1dHRvblZhbHVlO1xuICAgIHRoaXMubW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyID0gZXZlbnQubW9kYWxGb290ZXI7XG4gIH1cblxuXG4gIG9uQ2FsZW5kYXJNb2RhbFNhdmUoKSB7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmRhdGFDaGFuZ2VzKCdjYWxlbmRhci1tb2RhbC1zYXZlJyk7XG4gIH1cblxuXG4gIGhhbmRsZVF1ZXN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZygnaGFuZGxlIHF1ZXN0aW9uIGhlcmUnKTtcbiAgfVxuXG4gIGNsb3NlQ2FsZW5kYXJNb2RhbChldmVudCkge1xuICAgIHRoaXMuaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMjVNQVIyNSBpbWFnZSBhZGRcbiAgYXN5bmMgZmlsZUNoYW5nZUV2ZW50KHF1ZXM6IGFueSwgZXZlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGF3YWl0IHRoaXMucmVhZEZpbGVBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgIHF1ZXMuaW1hZ2VEYXRhID0gaW1hZ2VEYXRhO1xuICAgICAgICBxdWVzLm9yZ0ltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBsb2dvIHNpemUgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWFkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRGaWxlQXNEYXRhVVJMKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICB9KTtcbiAgfVxuICBhc3luYyBvbkltYWdlRWRpdChxdWVzOiBhbnkpIHtcbiAgICB0aGlzLmlzSW1hZ2VFZGl0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2VFbGVtZW50ID0gcXVlcztcbiAgICBjb25zb2xlLmxvZyhcIm9uSW1hZ2VFZGl0XCIpXG4gIH1cbiAgYXN5bmMgb25JbWFnZURlbGV0ZShxdWVzOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgcXVlcy5pbWFnZURhdGEgPSAnJztcbiAgICAgIHF1ZXMub3JnSW1hZ2VEYXRhID0gJyc7XG4gICAgICAvLyBJbml0aWFsaXplIGxvZ28gc2l6ZSBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKHF1ZXMuaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJlYWRpbmcgZmlsZTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzI1TUFSMjUgaW1hZ2UgZWRpdCBmdW5jdGlvbnNcbiAgZmxpcEhvcml6b250YWwoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBIOiAhdGhpcy50cmFuc2Zvcm0uZmxpcEhcbiAgICB9O1xuICB9XG5cbiAgZmxpcFZlcnRpY2FsKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwVjogIXRoaXMudHJhbnNmb3JtLmZsaXBWXG4gICAgfTtcbiAgfVxuXG4gIHJlc2V0SW1hZ2UoKSB7XG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbiA9IDA7XG4gICAgdGhpcy5jcm9wcGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgdHJhbnNsYXRlVW5pdDogJ3B4JyxcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgcm90YXRlOiAwLFxuICAgICAgZmxpcEg6IGZhbHNlLFxuICAgICAgZmxpcFY6IGZhbHNlLFxuICAgICAgdHJhbnNsYXRlSDogMCxcbiAgICAgIHRyYW5zbGF0ZVY6IDBcbiAgICB9O1xuICB9XG5cbiAgem9vbU91dCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgc2NhbGU6IHRoaXMudHJhbnNmb3JtLnNjYWxlISAtIC4xXG4gICAgfTtcbiAgfVxuXG4gIHpvb21JbigpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgc2NhbGU6IHRoaXMudHJhbnNmb3JtLnNjYWxlISArIC4xXG4gICAgfTtcbiAgfVxuICByb3RhdGVMZWZ0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIFVzZSB0aW1lb3V0IGJlY2F1c2Ugcm90YXRpbmcgaW1hZ2UgaXMgYSBoZWF2eSBvcGVyYXRpb24gYW5kIHdpbGwgYmxvY2sgdGhlIHVpIHRocmVhZFxuICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbi0tO1xuICAgICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJvdGF0ZVJpZ2h0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNhbnZhc1JvdGF0aW9uKys7XG4gICAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgbW92ZUxlZnQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZUg6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZUghIC0gMVxuICAgIH07XG4gIH1cblxuICBtb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZUg6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZUghICsgMVxuICAgIH07XG4gIH1cblxuICBtb3ZlRG93bigpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlVjogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlViEgKyAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVVcCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlVjogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlViEgLSAxXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGZsaXBBZnRlclJvdGF0ZSgpIHtcbiAgICBjb25zdCBmbGlwcGVkSCA9IHRoaXMudHJhbnNmb3JtLmZsaXBIO1xuICAgIGNvbnN0IGZsaXBwZWRWID0gdGhpcy50cmFuc2Zvcm0uZmxpcFY7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBIOiBmbGlwcGVkVixcbiAgICAgIGZsaXBWOiBmbGlwcGVkSCxcbiAgICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgICB0cmFuc2xhdGVWOiAwXG4gICAgfTtcbiAgfVxuICBhc3luYyBpbWFnZUNyb3BwZWQoZXZlbnQ6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLmNvbnZlcnRCbG9iVG9CYXNlNjQoZXZlbnQub2JqZWN0VXJsKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQuaW1hZ2VEYXRhID0gYmFzZTY0O1xuICAgICAgYXdhaXQgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShiYXNlNjQsIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gaW1hZ2VDcm9wcGVkOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cblxuICBjcm9wcGVyUmVhZHkoc291cmNlSW1hZ2VEaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cbiAgLy8gU0tTMjVNQVIyNSBibG9iIHRvIGJhc2UgNjQgY29udmVydGVyXG4gIGNvbnZlcnRCbG9iVG9CYXNlNjQob2JqZWN0VXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBmZXRjaChvYmplY3RVcmwpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5ibG9iKCkpXG4gICAgICAudGhlbihibG9iID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmlzSW1hZ2VFZGl0ID0gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MyOE1BUjI1IGZvciBuZXN0ZWQgYm9vayByZWFkXG4gIHJlYWRRdWVzdGlvbnMocWJJZDogYW55LCBxdWVzOmFueSkge1xuICAgIGxldCBxdWVzdGlvbnMgPSBbXTtcbiAgICAvLyBBZGRlZCB0ZXJuYXJ5IHRvIGF2b2lkIHVuZGVmaW5lZFxuICAgIGZvciAodmFyIHNxIGluIHF1ZXMuYm9va1F1ZXN0aW9uc01hcFtxYklkXS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgIGxldCBxOiBRdWVzdGlvbiA9IHF1ZXMuYm9va1F1ZXN0aW9uc01hcFtxYklkXS5zdWJRdWVzdGlvbnNbc3FdO1xuICAgICAgLy8gaWYgcXVlc3Rpb24gaXMgdGhlcmUgcHJvY2Vzc1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxufVxuIiwiPCEtLSBIQSAxOEpBTjI0ICBBZGRlZCBjbGFzcyBmb3Igc3R5bGluZyAtLT5cbjxkaXYgW3N0eWxlXT1cImJvb2tTdHlsZVwiIGNsYXNzPVwiY29udGVudC1ib3ggZm9ybS1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRGlyZWN0aXZlIGFuZCBRdWVzdGlvbiBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG4gICAgICAgIDwhLS0gUkEwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCInY29sLWxnLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiICpuZ0Zvcj1cImxldCBxdWVzIG9mIHF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgW2Rpcl09XCJxdWVzLmxhbmdEaXJlY3Rpb25cIiBbc3R5bGVdPVwicXVlcz8uc3R5bGU/LnF1ZXN0aW9uU3R5bGVcIj5cbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzSGlkZGVuXCIgY2xhc3M9XCJueHRJbnB1dENvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQVAtMjhNQVIyNSBTaG93IGxhYmVsIGlmIGVuYWJsZWQgYW5kIG5vdCBhIEJvb2xlYW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsID8gKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAmJiBxdWVzLnR5cGUgIT09ICdCb29sZWFuJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0JyAmJiBxdWVzLnR5cGUgIT09ICdMaXN0JyAmJiBxdWVzPy50eXBlICE9PSAnRHJvcGRvd24nICYmIHF1ZXMudHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnRGF0ZVRpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ0xvY2F0aW9uJyk6IChxdWVzLnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlICYmIHF1ZXMudHlwZSAhPT0gJ0Jvb2xlYW4nICYmIHF1ZXMudHlwZSAhPT0gJ1RleHQnICYmIHF1ZXMudHlwZSAhPT0gJ0xpc3QnICYmIHF1ZXM/LnR5cGUgIT09ICdEcm9wZG93bicgJiYgcXVlcy50eXBlICE9PSAnRGF0ZVRpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ0xvY2F0aW9uJylcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwicXVlcy5zdHlsZT8ubGFiZWxTdHlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2Rpcy1mbGV4IHNoZW5nZWwtbXl0LWZvbnQzIG15dC1mb250NyAnXCIgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBxdWVzLmZvbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiBxdWVzLmZvbnRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXNpemUnOiBxdWVzLmZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogcXVlcy5mb250V2VpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgfVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGFyYWN0ZXJzKHF1ZXM/LnF1ZXN0aW9uVGV4dCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLmlzT3B0aW9uYWwgJiYgIXF1ZXMuaXNSZWFkT25seVwiIHN0eWxlPVwiY29sb3I6IHJlZDtcIj4qPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzTUFSMjUgb25seSBzaG93IG9uIGZpbGUgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUlMgMTdKQU4yMDI1IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGhlbHAgdGV4dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnF1ZXN0aW9uVGV4dCAmJiBxdWVzPy5oZWxwVGV4dCAmJiBxdWVzLnR5cGUgPT09ICdGaWxlJ1wiIGNsYXNzPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwicXVlcz8uaGVscFRleHRcIiBtYXRUb29sdGlwQ2xhc3M9XCJ3aGl0ZS10b29sdGlwXCI+aTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGZvciBmaWxlIHJlcXVpcmVtZW50cyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgKm5nSWY9XCJxdWVzLmZpZWxkc01ldGEgJiYgcXVlcy50eXBlID09PSAnRmlsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldEZpbGVSZXF1aXJlbWVudHMocXVlcy5maWVsZHNNZXRhKVwiIG1hdFRvb2x0aXBDbGFzcz1cIndoaXRlLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDRweDtcIj5pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGNhbGVuZGFyICAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQ2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWNhbGVuZGFyIFtxdWVzdGlvbl09XCJxdWVzXCIgKGV2ZW50U2VsZWN0ZWQpPVwiZ2V0Q2FsZW5kYXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIiAob3Blbk1vZGFsKT1cIm9wZW5DYWxlbmRhck1vZGFsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlTW9kYWwpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIj48L2FwcC1jdXN0b20tY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gbW9kZWwgdXNlZCBpbiBjYWxlbmRhciBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLW1vZGVsICpuZ0lmPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFRpdGxlXT1cImNhbGVuZGFyTW9kYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFNpemVdPVwiY2FsZW5kYXJNb2RhbFNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NhdmVCdXR0b25WYWx1ZV09XCJjYWxlbmRhclNhdmVCdXR0b25WYWx1ZVwiIFttb2RhbEZvb3Rlcl09XCJtb2RhbENhbGVuZGFyTW9kYWxGb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmVCdXR0b25FbWl0KT1cIm9uQ2FsZW5kYXJNb2RhbFNhdmUoKVwiIChjYW5jZWxCdXR0b25FbWl0KT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGVRdWVzdGlvbik9XCJoYW5kbGVRdWVzdGlvbkV2ZW50KCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1tb2RlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gICpuZ0lmPVwicXVlcy50eXBlID09PSAnTG9jYXRpb24nXCIgW2FwaUtleV09XCJxYkl0ZW1bJ2FwaUtleSddXCIgW2FkZHJlc3NdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAobG9jYXRpb25TZWxlY3RlZCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjVNQVIyNSBJbWFnZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnSW1hZ2UnXCIgKG1vdXNlZW50ZXIpPVwiaXNJbWFnZUhvdmVyID0gdHJ1ZTtcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpc0ltYWdlSG92ZXIgPSBmYWxzZTtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzSW1hZ2VIb3ZlclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIChjbGljayk9XCJvbkltYWdlRWRpdChxdWVzKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VEZWxldGUocXVlcylcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0IDMuOTg3MjZDMTEuNzggMy43NjcyNiA5LjU0NjY3IDMuNjUzOTMgNy4zMiAzLjY1MzkzQzYgMy42NTM5MyA0LjY4IDMuNzIwNiAzLjM2IDMuODUzOTNMMiAzLjk4NzI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk01LjY2NjUgMy4zMTM2Mkw1LjgxMzE3IDIuNDQwMjhDNS45MTk4NCAxLjgwNjk1IDUuOTk5ODQgMS4zMzM2MiA3LjEyNjUgMS4zMzM2Mkg4Ljg3MzE3QzkuOTk5ODQgMS4zMzM2MiAxMC4wODY1IDEuODMzNjIgMTAuMTg2NSAyLjQ0Njk1TDEwLjMzMzIgMy4zMTM2MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTY2NyA2LjA5Mzc1TDEyLjEzMzQgMTIuODA3MUMxMi4wNiAxMy44NTM3IDEyIDE0LjY2NzEgMTAuMTQgMTQuNjY3MUg1Ljg2MDAyQzQuMDAwMDIgMTQuNjY3MSAzLjk0MDAyIDEzLjg1MzcgMy44NjY2OCAxMi44MDcxTDMuNDMzMzUgNi4wOTM3NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi44ODY0NyAxMS4wMDA0SDkuMTA2NDdcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMzMzNSA4LjMzMzI1SDkuNjY2ODNcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInF1ZXMuaXNSZWFkT25seVwiIFtzcmNdPVwicXVlcy5pbWFnZURhdGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9nbyBwcmV2aWV3IGFyZWEgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1wcmV2aWV3XCIgKm5nSWY9XCJxdWVzLmlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFVwbG9hZCBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaW1hZ2VEYXRhXCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJsb2dvLXVwbG9hZC17e2l9fVwiIGNsYXNzPVwibG9nby11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvSW1hZ2Uuc3ZnXCIgYWx0PVwiVXBsb2FkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXBsb2FkIEltYWdlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJsb2dvLXVwbG9hZC17e2l9fVwiIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudChxdWVzLCAkZXZlbnQpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzIxTUFSMjUgbGluZSAtLT5cbiAgICAgICAgICAgICAgICA8aHIgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMaW5lJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmVcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1mbGV4XCIgLz5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzEzTUFSMjUgZGF0YSB0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8bnh0LWRhdGF0YWJsZSAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlJ1wiIGlzRWRpdFJvdyBpc0RlbGV0ZVJvdyBhY3Rpb25CdXR0b24gaXNCdXR0b25zIFtxdWVzdGlvbl09XCJxdWVzXCIgZnJvbT1cImZvcm1CdWlsZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJsZUNvbmZpZ109XCJxdWVzLnRhYmxlQ29uZmlnXCIgdGFibGVJZD1cIlwiIGRpcmVjdGlvbj1cImx0clwiIHRhYmxlV2lkdGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgPC9ueHQtZGF0YXRhYmxlPlxuICAgICAgICAgICAgICAgIDwhLS0gbGlzdCAtLT5cbiAgICAgICAgICAgICAgICA8bGliLXNlYXJjaC1ib3ggICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGlzdCdcIiBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5pZFwiIFtwbGFjZUhvbGRlclRleHRdPVwicXVlcy5xdWVzdGlvbiB8fCAnJ1wiIFtmaWx0ZXJOYW1lXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAoc2VhcmNoVmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvbGliLXNlYXJjaC1ib3g+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCBjb25kaXRpb24gb2Ygc3FPcHRpb24gdG8gdGhlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duICpuZ0lmPVwicXVlcz8udHlwZSA9PT0gJ0Ryb3Bkb3duJyAmJiBxdWVzPy5vcHRpb25zXCIgW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3Rva2VuXT1cInRva2VuXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxYkl0ZW0uaXNTaGVuZ2VsID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcmVmZXJlbmNlRmllbGRdPVwicXVlcy5yZWZlcmVuY2VGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGN1c3RvbS1yYWRpbyBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JhZGlvJyAmJiBxdWVzPy5vcHRpb25zXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tcmFkaW8gW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIiBbaWRdPVwicXVlcy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbik7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLWZpbGUtdXBsb2FkICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIiBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiAoc2VsZWN0ZWRGaWxlRGF0YSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZWRGaWxlRGF0YSk9XCJkZWxldGVGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtZmlsZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICA8bnh0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0J1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICBbYnRuSGVpZ2h0XT1cIic1MHB4J1wiIFtidG5XaWR0aF09XCInMTUwcHgnXCIgW2J1dHRvblZhbHVlXT1cInF1ZXM/LnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrRW1pdCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb25ib29rICpuZ0lmPVwicXVlcy50eXBlID09PSAnQm9vaydcIiBbcWJJdGVtXT1cInF1ZXMucWJJdGVtXCIgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbnNdPVwicmVhZFF1ZXN0aW9ucyhxdWVzLnFiUmVmZXJlbmNlLCBxdWVzLnFiUmVmZXJlbmNlUXVlc3Rpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgIChoYW5kbGVEcm9wRG93bik9XCJnZXREcm9wRG93bigkZXZlbnQpXCI+PC9saWItcXVlc3Rpb25ib29rPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBUZXh0LCBFbWFpbCwgbGFiZWwsIG51bWJlciwgQm9vbGVhbiwgcmljaCB0ZXh0IGVkaXRvciwgRGF0ZVRpbWUsIERhdGUsIFRpbWUtLT5cbiAgICAgICAgICAgICAgICA8bnh0LWlucHV0ICAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnIHx8IHF1ZXMudHlwZSA9PT0gJ0VtYWlsJyB8fCBxdWVzLnR5cGUgPT09ICdOdW1iZXInIHx8IHF1ZXMudHlwZSA9PT0gJ0xhYmVsJyB8fCBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyB8fCBxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnIHx8IHF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT09ICdUaW1lJyB8fCBxdWVzLnR5cGUgPT09ICdUZXh0QXJlYSdcIlxuICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJxdWVzLnR5cGUgPT09ICdUZXh0JyA/ICd0ZXh0JyA6IHF1ZXMudHlwZSA9PT0gJ0VtYWlsJyA/ICdlbWFpbCcgOiBxdWVzLnR5cGUgPT09ICdOdW1iZXInID8gJ251bWJlcicgOiBxdWVzLnR5cGUgPT09ICdMYWJlbCcgPyAnbGFiZWwnIDogcXVlcy50eXBlID09PSAnQm9vbGVhbicgPyAnY2hlY2tib3gnIDogcXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyA/ICdyaWNodGV4dCcgOiBxdWVzLnR5cGUgPT09ICdEYXRlVGltZScgPyAnZGF0ZXRpbWUnIDogcXVlcy50eXBlID09PSAnRGF0ZScgPyAnZGF0ZScgOiAgcXVlcy50eXBlID09PSAnVGltZScgPyAndGltZScgOiBxdWVzLnR5cGUgPT09ICdUZXh0QXJlYScgPyAndGV4dGFyZWEnIDogJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbEZvbnRdPVwicXVlcy5mb250XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUNoYXJhY3RlcnMocXVlcz8ucXVlc3Rpb25UZXh0KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInF1ZXMuZm9udENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsU2l6ZV09XCJxdWVzLmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0VmFsdWVTaXplXT1cInF1ZXMuZm9udFNpemVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0V2VpZ2h0XT1cInF1ZXMuZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInF1ZXMuaXNPcHRpb25hbFwiIGlucHV0QmdDb2xvcj1cIiNGNUY1RjVcIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJxdWVzLnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlc109XCJ7IHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcgfVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dEljb25MZWZ0U3JjXT1cInF1ZXMuaWNvbkxlZnRTcmNcIiBcbiAgICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbnh0LWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS1TS1MyNU1BUjI1IE1vZGFsIE92ZXJsYXkgLS0+XG48ZGl2IGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiICpuZ0lmPVwiaXNJbWFnZUVkaXRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIj7Dlzwvc3Bhbj5cblxuICAgICAgICA8IS0tIEltYWdlIEVkaXRvciAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VFbGVtZW50Py50eXBlID09PSAnSW1hZ2UnXCI+XG4gICAgICAgICAgICA8aW1hZ2UtY3JvcHBlciAqbmdJZj1cInNlbGVjdGVkSW1hZ2VFbGVtZW50LmltYWdlRGF0YVwiIFtpbWFnZUJhc2U2NF09XCJzZWxlY3RlZEltYWdlRWxlbWVudC5vcmdJbWFnZURhdGFcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiIFthbGlnbkltYWdlXT1cImFsaWduSW1hZ2VcIiBbcm91bmRDcm9wcGVyXT1cInJvdW5kQ3JvcHBlclwiIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3doaXRlJ1wiXG4gICAgICAgICAgICAgICAgaW1hZ2VBbHRUZXh0PVwiQWx0ZXJuYXRpdmUgaW1hZ2UgdGV4dFwiIFthbGxvd01vdmVJbWFnZV09XCJmYWxzZVwiIFtoaWRlUmVzaXplU3F1YXJlc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uXCIgW2FzcGVjdFJhdGlvXT1cImFzcGVjdFJhdGlvXCIgW2NvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW21haW50YWluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIiBbY3JvcHBlclN0YXRpY1dpZHRoXT1cImNyb3BwZXJTdGF0aWNXaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJTdGF0aWNIZWlnaHRdPVwiY3JvcHBlclN0YXRpY0hlaWdodFwiIFtjcm9wcGVyTWluV2lkdGhdPVwiY3JvcHBlck1pbldpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlck1pbkhlaWdodF09XCJjcm9wcGVyTWluSGVpZ2h0XCIgW2Nyb3BwZXJNYXhXaWR0aF09XCJjcm9wcGVyTWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyTWF4SGVpZ2h0XT1cImNyb3BwZXJNYXhIZWlnaHRcIiBbcmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZV09J3RydWUnIFsoY3JvcHBlcildPVwiY3JvcHBlclwiXG4gICAgICAgICAgICAgICAgWyh0cmFuc2Zvcm0pXT1cInRyYW5zZm9ybVwiIFtvbmx5U2NhbGVEb3duXT1cInRydWVcIiBvdXRwdXQ9XCJibG9iXCIgZm9ybWF0PVwicG5nXCJcbiAgICAgICAgICAgICAgICAoaW1hZ2VDcm9wcGVkKT1cImltYWdlQ3JvcHBlZCgkZXZlbnQpXCIgKGNyb3BwZXJSZWFkeSk9XCJjcm9wcGVyUmVhZHkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9pbWFnZS1jcm9wcGVyPlxuXG4gICAgICAgICAgICA8IS0tIENvbnRyb2xzIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VFbGVtZW50LmltYWdlRGF0YVwiIGNsYXNzPVwiY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInJvdGF0ZUxlZnQoKVwiIHRpdGxlPVwiUm90YXRlIExlZnRcIj7in7I8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInJvdGF0ZVJpZ2h0KClcIiB0aXRsZT1cIlJvdGF0ZSBSaWdodFwiPuKfszwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiem9vbU91dCgpXCIgdGl0bGU9XCJab29tIE91dFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21JbigpXCIgdGl0bGU9XCJab29tIEluXCI+KzwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZUxlZnQoKVwiIHRpdGxlPVwiTW92ZSBMZWZ0XCI+4oaQPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlUmlnaHQoKVwiIHRpdGxlPVwiTW92ZSBSaWdodFwiPuKGkjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVVwKClcIiB0aXRsZT1cIk1vdmUgVXBcIj7ihpE8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVEb3duKClcIiB0aXRsZT1cIk1vdmUgRG93blwiPuKGkzwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiZmxpcEhvcml6b250YWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwSFwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmxpcCBIb3Jpem9udGFsbHlcIj7ihpQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cImZsaXBWZXJ0aWNhbCgpXCIgW2NsYXNzLmVuYWJsZWRdPVwidHJhbnNmb3JtLmZsaXBWXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJGbGlwIFZlcnRpY2FsbHlcIj7ihpU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInJlc2V0SW1hZ2UoKVwiIHRpdGxlPVwiUmVzZXRcIj7DlzwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|