@rangertechnologies/ngnxt 2.1.28 → 2.1.30

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.
Files changed (29) hide show
  1. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +194 -0
  2. package/esm2022/lib/components/custom-date/custom-date.component.mjs +19 -8
  3. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +19 -8
  4. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +5 -6
  5. package/esm2022/lib/components/custom-input/custom-input.component.mjs +3 -4
  6. package/esm2022/lib/components/custom-model/custom-model.component.mjs +48 -0
  7. package/esm2022/lib/components/custom-table/custom-table.component.mjs +8 -4
  8. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +3 -4
  9. package/esm2022/lib/components/custom-time/custom-time.component.mjs +39 -9
  10. package/esm2022/lib/components/file-upload/file-upload.component.mjs +76 -26
  11. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +1 -1
  12. package/esm2022/lib/nxt-app.module.mjs +7 -1
  13. package/esm2022/lib/pages/booklet/booklet.component.mjs +15 -4
  14. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +54 -42
  15. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +1 -1
  16. package/esm2022/lib/pipe/get-value.pipe.mjs +2 -2
  17. package/fesm2022/rangertechnologies-ngnxt.mjs +486 -126
  18. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  19. package/lib/components/custom-calendar/custom-calendar.component.d.ts +53 -0
  20. package/lib/components/custom-date/custom-date.component.d.ts +6 -2
  21. package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +6 -2
  22. package/lib/components/custom-model/custom-model.component.d.ts +19 -0
  23. package/lib/components/custom-time/custom-time.component.d.ts +8 -3
  24. package/lib/components/file-upload/file-upload.component.d.ts +2 -1
  25. package/lib/nxt-app.module.d.ts +31 -29
  26. package/lib/pages/questionbook/questionbook.component.d.ts +2 -1
  27. package/package.json +1 -1
  28. package/rangertechnologies-ngnxt-2.1.30.tgz +0 -0
  29. package/rangertechnologies-ngnxt-2.1.28.tgz +0 -0
@@ -15,17 +15,18 @@ import * as i10 from "../../components/pick-location/pick-location.component";
15
15
  import * as i11 from "../../components/custom-input/custom-input.component";
16
16
  import * as i12 from "../../components/custom-text-area/custom-text-area.component";
17
17
  import * as i13 from "../../components/custom-table/custom-table.component";
18
- import * as i14 from "../../components/custom-date-picker/custom-date-picker.component";
19
- import * as i15 from "../../components/custom-dropdown/custom-dropdown.component";
20
- import * as i16 from "../../components/search-box/search-box.component";
21
- import * as i17 from "../../components/file-upload/file-upload.component";
22
- import * as i18 from "../../components/dependent-table/dependent-table.component";
23
- import * as i19 from "../../components/custom-label/custom-label.component";
24
- import * as i20 from "../../components/table-appendix/table-appendix.component";
25
- import * as i21 from "../../components/custom-date/custom-date.component";
26
- import * as i22 from "../../components/custom-time/custom-time.component";
27
- import * as i23 from "../../components/custom-button/custom-button.component";
28
- import * as i24 from "../../i18n.pipe";
18
+ import * as i14 from "../../components/custom-calendar/custom-calendar.component";
19
+ import * as i15 from "../../components/custom-date-picker/custom-date-picker.component";
20
+ import * as i16 from "../../components/custom-dropdown/custom-dropdown.component";
21
+ import * as i17 from "../../components/search-box/search-box.component";
22
+ import * as i18 from "../../components/file-upload/file-upload.component";
23
+ import * as i19 from "../../components/dependent-table/dependent-table.component";
24
+ import * as i20 from "../../components/custom-label/custom-label.component";
25
+ import * as i21 from "../../components/table-appendix/table-appendix.component";
26
+ import * as i22 from "../../components/custom-date/custom-date.component";
27
+ import * as i23 from "../../components/custom-time/custom-time.component";
28
+ import * as i24 from "../../components/custom-button/custom-button.component";
29
+ import * as i25 from "../../i18n.pipe";
29
30
  export class QuestionbookComponent {
30
31
  sfService;
31
32
  dataService;
@@ -41,6 +42,7 @@ export class QuestionbookComponent {
41
42
  labelValue;
42
43
  token; // VD 19JAN24 - getting token as input
43
44
  handleDropDown = new EventEmitter();
45
+ handleQuestion = new EventEmitter(); // VD 19Jul01 - get updated question
44
46
  dropDownData;
45
47
  subQuestions;
46
48
  selectedFileData = [];
@@ -69,26 +71,28 @@ export class QuestionbookComponent {
69
71
  if (this.qbItem?.Style__c) {
70
72
  // HA 28DEC23 Added styling and logics to load the book type questions
71
73
  this.qbItem.Style__c = typeof this.qbItem.Style__c === 'string' ? JSON.parse('' + this.qbItem?.Style__c) : this.qbItem.Style__c;
72
- this.qbItem.Style__c.labelClass = this.qbItem.Style__c.labelClass ? this.qbItem.Style__c.labelClass : "";
73
- this.qbItem.Style__c.labelStyle = this.qbItem.Style__c.labelStyle ? this.qbItem.Style__c.labelStyle : "";
74
- this.qbItem.Style__c.inputClass = this.qbItem.Style__c.inputClass ? this.qbItem.Style__c.inputClass : "";
75
- this.qbItem.Style__c.inputStyle = this.qbItem.Style__c.inputStyle ? this.qbItem.Style__c.inputStyle : "";
76
- this.qbItem.Style__c.bookStyle = this.qbItem.Style__c.bookStyle ? this.qbItem.Style__c.bookStyle : "";
77
- this.qbItem.Style__c.showLabel = this.qbItem.Style__c.showLabel ? this.qbItem.Style__c.showLabel : true;
74
+ this.qbItem.Style__c.labelClass = this.qbItem.Style__c?.labelClass ? this.qbItem.Style__c?.labelClass : "";
75
+ this.qbItem.Style__c.labelStyle = this.qbItem.Style__c?.labelStyle ? this.qbItem.Style__c?.labelStyle : "";
76
+ this.qbItem.Style__c.inputClass = this.qbItem.Style__c?.inputClass ? this.qbItem.Style__c?.inputClass : "";
77
+ this.qbItem.Style__c.inputStyle = this.qbItem.Style__c.inputStyle ? this.qbItem.Style__c?.inputStyle : "";
78
+ this.qbItem.Style__c.bookStyle = this.qbItem.Style__c?.bookStyle ? this.qbItem.Style__c?.bookStyle : "";
79
+ this.qbItem.Style__c.showLabel = this.qbItem.Style__c?.showLabel ? this.qbItem.Style__c?.showLabel : true;
78
80
  }
79
81
  else {
80
- this.qbItem.Style__c = {
81
- "labelClass": "",
82
- "labelStyle": "",
83
- "inputClass": "",
84
- "inputStyle": "",
85
- "bookStyle": "",
86
- "showLabel": true,
87
- "direction": "ltr",
88
- "questionStyle": ""
89
- };
82
+ if (this.qbItem) {
83
+ this.qbItem.Style__c = {
84
+ "labelClass": "",
85
+ "labelStyle": "",
86
+ "inputClass": "",
87
+ "inputStyle": "",
88
+ "bookStyle": "",
89
+ "showLabel": true,
90
+ "direction": "ltr",
91
+ "questionStyle": ""
92
+ };
93
+ }
90
94
  }
91
- this.qbItem.Style__c.questionStyle = this.qbItem?.Style__c?.questionStyle ? this.qbItem.Style__c.questionStyle : "";
95
+ this.qbItem.Style__c.questionStyle = this.qbItem?.Style__c?.questionStyle ? this.qbItem?.Style__c.questionStyle : "";
92
96
  this.langDirection = this.qbItem.Style__c.direction = this.qbItem?.Style__c?.direction ? this.qbItem?.Style__c?.direction : 'ltr';
93
97
  this.bookStyle = this.qbItem?.Style__c?.bookStyle;
94
98
  this.questions.forEach(element => {
@@ -196,24 +200,30 @@ export class QuestionbookComponent {
196
200
  ques.input = this.selectedFileData = event;
197
201
  }
198
202
  else if (ques.Type__c == 'Date' || ques.Type__c == 'DateTime') { // HA 24JAN24 Converting Date and DateTime to UTC
199
- let d = new Date(event.value);
200
- // Convert to ISO string with timezone offset
201
- let utcString = d.toISOString();
202
- // console.log('utcString', utcString);
203
- ques.input = utcString;
203
+ if (event.value) {
204
+ let d = new Date(event.value);
205
+ let utcString = d.toISOString();
206
+ ques.input = utcString;
207
+ }
208
+ else {
209
+ ques.input = '';
210
+ }
204
211
  }
205
212
  else {
206
213
  ques.input = event;
207
214
  }
208
215
  // validating error message
209
- if (ques.Error_Message__c && !ques.input) {
210
- ques.error = new ErrorWrapper;
211
- }
212
- else {
213
- ques.error = null;
214
- }
216
+ const hasError = ques.Error_Message__c && ((ques.Type__c === 'File' && ques.input.length == 0) || (ques.Type__c != 'File' && !ques.input));
217
+ ques.error = hasError ? new ErrorWrapper() : null;
218
+ // if(ques.Is_Optional__c && !ques.input){
219
+ // ques.error = new ErrorWrapper
220
+ // }else{
221
+ // ques.error = null;
222
+ // }
215
223
  // Once the right value is stored in ques.input store the ques (with input) in storageService
216
224
  this.storageService.update(ques);
225
+ // VD 19Jul01 - get updated question
226
+ this.handleQuestion.emit(ques);
217
227
  }
218
228
  deleteFile(fileData) {
219
229
  console.log('fileDATA', fileData);
@@ -222,11 +232,11 @@ export class QuestionbookComponent {
222
232
  this.hadleDropDownDependent.emit(event);
223
233
  }
224
234
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
225
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", hadleDropDownDependent: "hadleDropDownDependent" }, 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 <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c.showLabel\" [style]=\"ques.Style__c.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\">{{ ques?.Question_Text__c }} <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (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__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [selectedValue]=\"ques.input\" (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__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\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\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelValue]=\"labelValue\">\n </app-custom-label>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\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:flex;flex-wrap:wrap}}\n"], dependencies: [{ 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: 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: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i9.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i10.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i11.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i12.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i13.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i14.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i15.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i16.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "hadleDropDownDependent"] }, { kind: "component", type: i17.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i18.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i19.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue"] }, { kind: "component", type: i20.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i21.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i22.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly"], outputs: ["timeChange"] }, { kind: "component", type: i23.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "pipe", type: i24.I18nPipe, name: "i18n" }] });
235
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent" }, 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 <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c.showLabel\" [style]=\"ques.Style__c.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\">{{ ques?.Question_Text__c }} \n <div *ngIf=\"ques.Is_Optional__c\" style=\"color: red;\">*</div>\n <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.Type__c === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"childEventCapture($event, ques)\"></app-custom-calendar>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (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__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [selectedValue]=\"ques.input\" (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__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\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\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelValue]=\"labelValue\">\n </app-custom-label>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\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:flex;flex-wrap:wrap}}\n"], dependencies: [{ 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: 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: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i9.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i10.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i11.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i12.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i13.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i14.CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question"], outputs: ["eventSelected"] }, { kind: "component", type: i15.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i16.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i17.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent"] }, { kind: "component", type: i18.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i19.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i20.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue"] }, { kind: "component", type: i21.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i22.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: i23.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: i24.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "pipe", type: i25.I18nPipe, name: "i18n" }] });
226
236
  }
227
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, decorators: [{
228
238
  type: Component,
229
- args: [{ selector: 'lib-questionbook', 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 <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c.showLabel\" [style]=\"ques.Style__c.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\">{{ ques?.Question_Text__c }} <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (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__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [selectedValue]=\"ques.input\" (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__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\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\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelValue]=\"labelValue\">\n </app-custom-label>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\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:flex;flex-wrap:wrap}}\n"] }]
239
+ args: [{ selector: 'lib-questionbook', 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 <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c.showLabel\" [style]=\"ques.Style__c.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\">{{ ques?.Question_Text__c }} \n <div *ngIf=\"ques.Is_Optional__c\" style=\"color: red;\">*</div>\n <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.Type__c === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"childEventCapture($event, ques)\"></app-custom-calendar>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (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__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [selectedValue]=\"ques.input\" (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__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\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\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelValue]=\"labelValue\">\n </app-custom-label>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\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:flex;flex-wrap:wrap}}\n"] }]
230
240
  }], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: Document, decorators: [{
231
241
  type: Inject,
232
242
  args: [DOCUMENT]
@@ -246,9 +256,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
246
256
  type: Input
247
257
  }], handleDropDown: [{
248
258
  type: Output
259
+ }], handleQuestion: [{
260
+ type: Output
249
261
  }], dropDownData: [{
250
262
  type: Input
251
263
  }], hadleDropDownDependent: [{
252
264
  type: Output
253
265
  }] } });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzNDLE1BQU0sT0FBTyxxQkFBcUI7SUFxQlo7SUFDVjtJQUNBO0lBQ0E7SUFDRDtJQUNtQjtJQXpCbkIsTUFBTSxDQUFlO0lBQ3JCLFlBQVksQ0FBVztJQUN2QixtQkFBbUIsR0FBVyxFQUFFLENBQUEsQ0FBRSxtQ0FBbUM7SUFDckUsU0FBUyxDQUFhO0lBQ3RCLFlBQVksQ0FBSztJQUNqQixVQUFVLENBQVE7SUFDbEIsS0FBSyxDQUFRLENBQUMsc0NBQXNDO0lBQ25ELGNBQWMsR0FBcUIsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUM1RCxZQUFZLENBQUs7SUFDMUIsWUFBWSxDQUFhO0lBQ3pCLGdCQUFnQixHQUFVLEVBQUUsQ0FBQztJQUM3Qix1RUFBdUU7SUFDdkUsS0FBSyxDQUFlO0lBQ3BCLGlEQUFpRDtJQUNqRCxLQUFLLENBQU07SUFDWCxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFNBQVMsQ0FBTTtJQUNMLHNCQUFzQixHQUFxQixJQUFJLFlBQVks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LEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0UsWUFBWTtzQkFBcEIsS0FBSztnQkFTSSxzQkFBc0I7c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcXVlc3Rpb25ib29rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25ib29rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIEBJbnB1dCgpIHRyYW5zbGF0ZWRRdWVzdGlvbnMgOiBhbnlbXSA9IFtdICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICBASW5wdXQoKSBxdWVzdGlvbnM6IFF1ZXN0aW9uW107XG4gIEBJbnB1dCgpIGVycm9yRmllbGRJZDphbnk7XG4gIEBJbnB1dCgpIGxhYmVsVmFsdWU6c3RyaW5nOyBcbiAgQElucHV0KCkgdG9rZW46c3RyaW5nOyAvLyBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dFxuICBAT3V0cHV0KCkgaGFuZGxlRHJvcERvd246RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgZHJvcERvd25EYXRhOmFueTtcbiAgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdO1xuICBzZWxlY3RlZEZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICBxYlJlZjogUXVlc3Rpb25Cb29rO1xuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXG4gIHN0eWxlOiBhbnk7XG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJztcbiAgYm9va1N0eWxlOiBhbnk7XG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHsgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uQm9va0NvbXBvbmVudCBPbkluaXQnKTtcbiAgICAvLyBjb25zb2xlLmxvZygncWJJdGVtJywgdGhpcy5xYkl0ZW0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25zKTtcbiAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gQm9vayBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XG4gICAgaWYodGhpcy5xYkl0ZW0/LlN0eWxlX19jKXtcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYyA9IHR5cGVvZiB0aGlzLnFiSXRlbS5TdHlsZV9fYyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnK3RoaXMucWJJdGVtPy5TdHlsZV9fYykgOiB0aGlzLnFiSXRlbS5TdHlsZV9fYztcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLmxhYmVsQ2xhc3MgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYy5sYWJlbENsYXNzID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2MubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5sYWJlbFN0eWxlID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2MubGFiZWxTdHlsZSA/IHRoaXMucWJJdGVtLlN0eWxlX19jLmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MuaW5wdXRDbGFzcyA9IHRoaXMucWJJdGVtLlN0eWxlX19jLmlucHV0Q2xhc3MgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLmlucHV0U3R5bGUgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYy5pbnB1dFN0eWxlID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2MuaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2Muc2hvd0xhYmVsID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2Muc2hvd0xhYmVsID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2Muc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jID0ge1xuICAgICAgICBcImxhYmVsQ2xhc3NcIiA6IFwiXCIsXG4gICAgICAgIFwibGFiZWxTdHlsZVwiIDogXCJcIixcbiAgICAgICAgXCJpbnB1dENsYXNzXCIgOiBcIlwiLFxuICAgICAgICBcImlucHV0U3R5bGVcIiA6IFwiXCIsXG4gICAgICAgIFwiYm9va1N0eWxlXCIgOiBcIlwiLFxuICAgICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICBcImRpcmVjdGlvblwiIDogXCJsdHJcIixcbiAgICAgICAgXCJxdWVzdGlvblN0eWxlXCI6IFwiXCJcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPSB0aGlzLnFiSXRlbT8uU3R5bGVfX2M/LnF1ZXN0aW9uU3R5bGUgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSB0aGlzLnFiSXRlbS5TdHlsZV9fYy5kaXJlY3Rpb24gPSB0aGlzLnFiSXRlbT8uU3R5bGVfX2M/LmRpcmVjdGlvbiA/IHRoaXMucWJJdGVtPy5TdHlsZV9fYz8uZGlyZWN0aW9uIDogJ2x0cic7XG4gICAgdGhpcy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbT8uU3R5bGVfX2M/LmJvb2tTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGh0bWxFbGVtZW50ID0gZWxlbWVudD8uUXVlc3Rpb25fVGV4dF9fYyA7XG4gICAgICB2YXIgdGV4dE9ubHkgPSBodG1sRWxlbWVudD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJylcbiAgICAgIGVsZW1lbnQuUXVlc3Rpb25fVGV4dF9fYyA9IHRleHRPbmx5O1xuICAgICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIFN0eWxpbmcoU2xhZXNmb3JjZSlcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICBpZihlbGVtZW50LlR5cGVfX2MgPT09ICdCb29rJyl7XG4gICAgICAgIGlmKGVsZW1lbnRbJ1FCX1JlZmVyZW5jZV9RdWVzdGlvbnNfX2MnXSl7XG4gICAgICAgICAgdmFyIHFiID0gSlNPTi5wYXJzZShlbGVtZW50WydRQl9SZWZlcmVuY2VfUXVlc3Rpb25zX19jJ10pO1xuICAgICAgICAgIGlmKHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYyl7XG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MgPSB0eXBlb2YgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycrcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jKSA6IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYztcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYyA9IHRoaXMucWJJdGVtLlN0eWxlX19jO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEJvb2sgdHlwZSBxdWVzdGlvbiBzdHlsaW5nXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsQ2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5pbnB1dENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmlucHV0Q2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmlucHV0U3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuaW5wdXRTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuYm9va1N0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmJvb2tTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5zaG93TGFiZWwgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2Muc2hvd0xhYmVsID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MucXVlc3Rpb25TdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsnbGFuZ0RpcmVjdGlvbiddID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmRpcmVjdGlvbiA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9vcCBmb3IgZWFjaCBxdWVzdGlvbiBpbiB0aGUgYm9va1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5RdWVzdGlvbnNfX3IucmVjb3Jkcy5mb3JFYWNoKHF1ZXN0aW9uRnJvbUJvb2sgPT4ge1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYyA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jIDogcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0Q2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0Q2xhc3MgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuYm9va1N0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5ib29rU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLnNob3dMYWJlbCA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2Muc2hvd0xhYmVsID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2tbJ2xhbmdEaXJlY3Rpb24nXSA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuZGlyZWN0aW9uID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MgPSBlbGVtZW50LlN0eWxlX19jID8gdHlwZW9mIGVsZW1lbnQuU3R5bGVfX2MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJytlbGVtZW50Py5TdHlsZV9fYykgOiBlbGVtZW50Py5TdHlsZV9fYyA6IHRoaXMucWJJdGVtPy5TdHlsZV9fYztcblxuICAgICAgZWxlbWVudC5TdHlsZV9fYy5sYWJlbENsYXNzID0gZWxlbWVudC5TdHlsZV9fYy5sYWJlbENsYXNzID8gZWxlbWVudC5TdHlsZV9fYy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MubGFiZWxTdHlsZSA9IGVsZW1lbnQuU3R5bGVfX2MubGFiZWxTdHlsZSA/IGVsZW1lbnQuU3R5bGVfX2MubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgPSBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgPyBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MuYm9va1N0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5ib29rU3R5bGUgPyBlbGVtZW50LlN0eWxlX19jLmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLnNob3dMYWJlbCA9IGVsZW1lbnQuU3R5bGVfX2Muc2hvd0xhYmVsID8gZWxlbWVudC5TdHlsZV9fYy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcblxuICAgICAgZWxlbWVudFsnbGFuZ0RpcmVjdGlvbiddID0gZWxlbWVudC5TdHlsZV9fYy5kaXJlY3Rpb24gPyBlbGVtZW50LlN0eWxlX19jLmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcbiAgICB9KTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25zKTtcbiAgICB0aGlzLnByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCk7IFxuICB9XG5cbiAgY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25Cb29rQ29tcG9uZW50IGNsZWFyU1FFcnJvcicpO1xuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucz8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLklkID09IHF1ZXNJZCk7XG4gICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XG4gICAgICBzcS5lcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG4gLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgcHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKXtcbiAgICBpZiAodGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zICYmIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKChvcmdRdWVzdGlvbjogYW55KT0+IHtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMuZm9yRWFjaCgodHJhbnNRdWVzdGlvbjphbnkpID0+IHtcbiAgICAgICAgICAgICBpZihvcmdRdWVzdGlvbi5VbmlxdWVfSWRlbnRpZmllcl9fYyA9PSB0cmFuc1F1ZXN0aW9uLmlkZW50aWZpZXIpe1xuICAgICAgICAgICAgICAgb3JnUXVlc3Rpb24uUXVlc3Rpb25fVGV4dF9fYyA9IHRyYW5zUXVlc3Rpb24ubGFiZWw7XG4gICAgICAgICAgICAgICBvcmdRdWVzdGlvbi5RdWVzdGlvbl9fYyA9IHRyYW5zUXVlc3Rpb24ucGxhY2VIb2xkZXI7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgIGNvbnNvbGUubG9nKCdvcmlnaW5hbFF1ZXN0aW9uJyArIHRoaXMucXVlc3Rpb25zKTtcbiAgICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbmJvb2tDb21wb25lbnQgc2V0U3ViUXVlc3Rpb25zJyk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChyZWNvcmRzKTtcbiAgfVxuXG4gIC8vIENhcHR1cmUgYW5kIFByb2Nlc3MgQ2hpbGQgRXZlbnRcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xuICAgIGxldCBkcm9wZG93bkRhdGEgPSAge307XG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBjaGlsZEV2ZW50Q2FwdHVyZScpO1xuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgIC8vIFByb2Nlc3MgdGhlIGNoYW5nZXMgaW4gVGFibGUgYW5kIERyb3Bkb3duIGFuZCBzdG9yZSByaWdodCB2YWx1ZSBpbiBxdWVzLmlucHV0XG4gICAgaWYocXVlcy5UeXBlX19jID09ICdEcm9wZG93bicpIHtcbiAgICAgIC8vIEhBIDE5SkFOMjQgQ29ycmVjdGlvbiBvZiBkcm9wZG93biB2YWx1ZXNcbiAgICAgIHF1ZXMuc2VsZWN0ZWRPYmogPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC5zZWxlY3RlZE9iaiA/IGV2ZW50LnNlbGVjdGVkT2JqIDogZXZlbnQudmFsdWVPYmo7XG4gICAgICAvLyBlbWl0IHRoZSBkcm9wZG93biBkYXRhIHRvIHBhcmVudFxuICAgICAgZHJvcGRvd25EYXRhWydldmVudCddID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XG4gICAgICBpZihkcm9wZG93bkRhdGFbJ2V2ZW50J10pe1xuICAgICAgICB0aGlzLmhhbmRsZURyb3BEb3duLmVtaXQoZHJvcGRvd25EYXRhKTtcbiAgICAgIH0gIC8vIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlXG4gICAgfSBlbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnTG9jYXRpb24nKXtcbiAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iajtcbiAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqLmFkZHJlc3M7XG4gICAgfWVsc2UgaWYocXVlcy5UeXBlX19jID09ICdGaWxlJyl7IFxuICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuc2VsZWN0ZWRGaWxlRGF0YSA9IGV2ZW50O1xuICAgIH1lbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnRGF0ZScgfHwgcXVlcy5UeXBlX19jID09ICdEYXRlVGltZScpeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXG4gICAgICBsZXQgZCA9IG5ldyBEYXRlKGV2ZW50LnZhbHVlKTtcbiAgICAgIC8vIENvbnZlcnQgdG8gSVNPIHN0cmluZyB3aXRoIHRpbWV6b25lIG9mZnNldFxuICAgICAgbGV0IHV0Y1N0cmluZyA9IGQudG9JU09TdHJpbmcoKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1dGNTdHJpbmcnLCB1dGNTdHJpbmcpO1xuICAgICAgcXVlcy5pbnB1dCA9IHV0Y1N0cmluZztcbiAgICB9ZWxzZXtcbiAgICAgIHF1ZXMuaW5wdXQgPSBldmVudDtcbiAgICB9XG4gICAgLy8gdmFsaWRhdGluZyAgIGVycm9yIG1lc3NhZ2VcbiAgICBpZihxdWVzLkVycm9yX01lc3NhZ2VfX2MgJiYgIXF1ZXMuaW5wdXQpe1xuICAgICAgcXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXJcbiAgICB9ZWxzZXtcbiAgICAgIHF1ZXMuZXJyb3IgPSBudWxsOyAgXG4gICAgfVxuICAgIC8vIE9uY2UgdGhlIHJpZ2h0IHZhbHVlIGlzIHN0b3JlZCBpbiBxdWVzLmlucHV0IHN0b3JlIHRoZSBxdWVzICh3aXRoIGlucHV0KSBpbiBzdG9yYWdlU2VydmljZVxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKHF1ZXMpO1xuICB9XG4gIGRlbGV0ZUZpbGUoZmlsZURhdGE6YW55KXtcbiAgICBjb25zb2xlLmxvZygnZmlsZURBVEEnLGZpbGVEYXRhKVxuICB9XG4gIGdldERyb3BEb3duKGV2ZW50OmFueSl7XG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8IS0tIEhBIDIwREVDMjMgQm9vayBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG48IS0tIEhBIDI4REVDMjMgIFJlbW92ZWQgSXNTaGVuZ2VsKHJlbW92YWwgb2Ygc2hlbmdlbCB2YWx1ZXMgYXBwbGllcyBmb3IgdGhpcyByZWFzb24pIGFuZCBkaXJlY3Qgc3R5bGluZyBvZiBib29rcyB0byBhdm9pZCBzdHlsaW5nIGlzc3Vlcy0tPlxuPCEtLSBIQSAxOEpBTjI0ICBBZGRlZCBjbGFzcyBmb3Igc3R5bGluZyAtLT5cbjxkaXYgW3N0eWxlXT1cImJvb2tTdHlsZVwiIGNsYXNzPVwiY29udGVudC1ib3ggZm9ybS1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRGlyZWN0aXZlIGFuZCBRdWVzdGlvbiBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzc109XCInY29sLWxnLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBxdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLklkXCIgW2Rpcl09XCJxdWVzLmxhbmdEaXJlY3Rpb25cIiBbc3R5bGVdPVwicXVlcz8uU3R5bGVfX2M/LnF1ZXN0aW9uU3R5bGVcIj5cbiAgICAgICAgICAgIDwhLS0gU3ViIFF1ZXN0aW9uIExhYmVsIC0tPlxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIExhYmVsIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxuICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLklzX0hpZGVfX2NcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlVGltZSdcIj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFZEIDIwSlVOMjQgLSBoZWxwIHRleHQgY2hhbmdlcy0tPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzLlN0eWxlX19jLnNob3dMYWJlbFwiIFtzdHlsZV09XCJxdWVzLlN0eWxlX19jLmxhYmVsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2Rpcy1mbGV4IHNoZW5nZWwtbXl0LWZvbnQzIG15dC1mb250NyAnXCI+e3sgcXVlcz8uUXVlc3Rpb25fVGV4dF9fYyB9fSA8ZGl2ICpuZ0lmPVwicXVlcy5RdWVzdGlvbl9UZXh0X19jICYmIHF1ZXM/LkhlbHBfVGV4dF9fY1wiIGNsYXNzPVwiaWNvblwiIFttYXRUb29sdGlwXT1cInF1ZXM/LkhlbHBfVGV4dF9fY1wiPmk8L2Rpdj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZS0tPlxuICAgICAgICAgICAgPCEtLSBEYXRlVGltZSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlVGltZSdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiBbZGF0ZV09XCJxdWVzLmlucHV0XCIgKGRhdGVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgPCEtLSBEYXRlLS0+XG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZSAgW2RhdGVdPVwicXVlcy5pbnB1dFwiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIChkYXRlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgPCEtLSBUaW1lLS0+XG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGltZSAgW3RpbWVdPVwicXVlcy5pbnB1dFwiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiICh0aW1lQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tdGltZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRleHQgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtuZ0NsYXNzVmFsdWVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgICAgICAgICAgIH1cIiBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIFtpZFZhbHVlXT1cInF1ZXMuVHJhY2tpbmdfSURfX2NcIiBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jXCIgKGlucHV0VmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIGZvciBwaWNrIGxvY2F0aW9uIC0tPlxuICAgICAgICAgICAgPCEtLSAgIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBIQTEwMDEyMDI0IEFkZGVkIEFwaSBrZXkgYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydBcGlfS2V5X19jJ11cIiBbYWRkcmVzc109XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwicXVlc1wiIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1waWNrLWxvY2F0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gZm9yICB0ZXh0IGFyZWEgICAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jIFwiXG4gICAgICAgICAgICAgICAgICAgICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRW1haWwnXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIHJlYWRPbmx5PVwicXVlcy5SZWFkX09ubHlfX2NcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5JZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGFibGUgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCIgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gVGFibGUgQXBwZW5kaXggLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUYWJsZUFwcGVuZGl4J1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC10YWJsZS1hcHBlbmRpeCBbcXVlc3Rpb25dPVwicXVlc1wiICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC10YWJsZS1hcHBlbmRpeD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgIDwhLS0gbGlzdCAtLT5cbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTGlzdCdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxsaWItc2VhcmNoLWJveCBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIiBbaWRdPVwicXVlcy5JZFwiIFtwbGFjZUhvbGRlclRleHRdPVwicXVlcy5RdWVzdGlvbl9fY1wiICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCIgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2xpYi1zZWFyY2gtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDA5RkVCMjQgQWRkZWQgY29uZGl0aW9uIG9mIHNxT3B0aW9uIHRvIHRoZSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEcm9wZG93bicgJiYgcXVlcz8uUXVlc3Rpb25fT3B0aW9uc19fcj8ucmVjb3Jkc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT4gPCEtLSBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbb3B0aW9uc109XCJxdWVzLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiIFt0b2tlbl09XCJ0b2tlblwiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIiBbaWRdPVwicXVlcy5JZFwiIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMuUmVmZXJlbmNlX0ZpZWxkX19jXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlcz8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRmlsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtZmlsZS11cGxvYWQgW2xpbWl0RmlsZVVwbG9hZGluZ109XCI1XCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbYWxsRmlsZXNdPVwicXVlcy5pbnB1dFwiIFt0YWJsZUZpbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpbGVEYXRhKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIiAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2lzRGVsZXRlRmlsZUJ1dHRvblZpc2libGVdPVwidHJ1ZVwiPjwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnUG9wVXBNZXNzYWdlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1kZXBlbmRlbnQtdGFibGUgW2FsZXJ0TWVzc2FnZV09XCJxdWVzLkVycm9yX01lc3NhZ2VfX2NcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1kZXBlbmRlbnQtdGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdMYWJlbCdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWxhYmVsIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gMDhOT1YyMyAtIGJ1dHRvbiB0eXBlIHF1ZXN0aW9uIGFkZGVkIC0tPlxuICAgICAgICAgICAgIDwhLS0gQnV0dG9uIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0J1dHRvbidcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWJ1dHRvbiBbaGVpZ2h0XT1cIic1MHB4J1wiICBcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiJzE1MHB4J1wiIFxuICAgICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cInF1ZXM/LlF1ZXN0aW9uX19jXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcz8uUXVlc3Rpb25fX2NcIlxuICAgICAgICAgICAgICAgIChidXR0b25WYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzICBUaGlzIGlzIHRvIGxvYWQgYm9vayB0eXBlIHF1ZXN0aW9ucy0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0Jvb2snXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIHRlcm5hcnkgb3BlcmF0b3IgLS0+XG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxdWVzLnFiSXRlbVwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIiBbcXVlc3Rpb25zXT1cInF1ZXMucWJJdGVtPy5RdWVzdGlvbnNfX3I/LnJlY29yZHNcIiAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4iXX0=
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8zQyxNQUFNLE9BQU8scUJBQXFCO0lBc0JaO0lBQ1Y7SUFDQTtJQUNBO0lBQ0Q7SUFDbUI7SUExQm5CLE1BQU0sQ0FBZTtJQUNyQixZQUFZLENBQVc7SUFDdkIsbUJBQW1CLEdBQVcsRUFBRSxDQUFBLENBQUUsbUNBQW1DO0lBQ3JFLFNBQVMsQ0FBYTtJQUN0QixZQUFZLENBQUs7SUFDakIsVUFBVSxDQUFRO0lBQ2xCLEtBQUssQ0FBUSxDQUFDLHNDQUFzQztJQUNuRCxjQUFjLEdBQXFCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDM0QsY0FBYyxHQUFxQixJQUFJLFlBQVksRUFBTyxDQUFDLENBQUMsb0NBQW9DO0lBQ2pHLFlBQVksQ0FBSztJQUMxQixZQUFZLENBQWE7SUFDekIsZ0JBQWdCLEdBQVUsRUFBRSxDQUFDO0lBQzdCLHVFQUF1RTtJQUN2RSxLQUFLLENBQWU7SUFDcEIsaURBQWlEO0lBQ2pELEtBQUssQ0FBTTtJQUNYLGFBQWEsR0FBRyxLQUFL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QUMsR0FBRyxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVM7UUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO3dHQTFNVSxxQkFBcUIsb0tBMkJ0QixRQUFROzRGQTNCUCxxQkFBcUIsaWFDakJsQywrK1FBMklVLCt5R0QxSEcscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGtCQUFrQjs7MEJBK0J6QixNQUFNOzJCQUFDLFFBQVE7NENBMUJULE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBU0ksc0JBQXNCO3NCQUEvQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVzdGlvbiwgUXVlc3Rpb25Cb29rIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2Vycm9yV3JhcHBlcic7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1ZXN0aW9uYm9vaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xuICBASW5wdXQoKSBxdWVzdGlvbkl0ZW06IFF1ZXN0aW9uO1xuICBASW5wdXQoKSB0cmFuc2xhdGVkUXVlc3Rpb25zIDogYW55W10gPSBbXSAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgQElucHV0KCkgcXVlc3Rpb25zOiBRdWVzdGlvbltdO1xuICBASW5wdXQoKSBlcnJvckZpZWxkSWQ6YW55O1xuICBASW5wdXQoKSBsYWJlbFZhbHVlOnN0cmluZzsgXG4gIEBJbnB1dCgpIHRva2VuOnN0cmluZzsgLy8gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXRcbiAgQE91dHB1dCgpIGhhbmRsZURyb3BEb3duOkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cbiAgQElucHV0KCkgZHJvcERvd25EYXRhOmFueTtcbiAgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdO1xuICBzZWxlY3RlZEZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICBxYlJlZjogUXVlc3Rpb25Cb29rO1xuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXG4gIHN0eWxlOiBhbnk7XG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJztcbiAgYm9va1N0eWxlOiBhbnk7XG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHsgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uQm9va0NvbXBvbmVudCBPbkluaXQnKTtcbiAgICAvLyBjb25zb2xlLmxvZygncWJJdGVtJywgdGhpcy5xYkl0ZW0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25zKTtcbiAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gQm9vayBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XG4gICAgaWYodGhpcy5xYkl0ZW0/LlN0eWxlX19jKXtcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYyA9IHR5cGVvZiB0aGlzLnFiSXRlbS5TdHlsZV9fYyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnK3RoaXMucWJJdGVtPy5TdHlsZV9fYykgOiB0aGlzLnFiSXRlbS5TdHlsZV9fYztcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLmxhYmVsQ2xhc3MgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYz8ubGFiZWxDbGFzcyA/IHRoaXMucWJJdGVtLlN0eWxlX19jPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLmxhYmVsU3R5bGUgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYz8ubGFiZWxTdHlsZSA/IHRoaXMucWJJdGVtLlN0eWxlX19jPy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLmlucHV0Q2xhc3MgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYz8uaW5wdXRDbGFzcyA/IHRoaXMucWJJdGVtLlN0eWxlX19jPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLmlucHV0U3R5bGUgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYy5pbnB1dFN0eWxlID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmJvb2tTdHlsZSA/IHRoaXMucWJJdGVtLlN0eWxlX19jPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2Muc2hvd0xhYmVsID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LnNob3dMYWJlbCA/IHRoaXMucWJJdGVtLlN0eWxlX19jPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgaWYoIHRoaXMucWJJdGVtKXtcbiAgICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MgPSB7XG4gICAgICAgICAgXCJsYWJlbENsYXNzXCIgOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxTdHlsZVwiIDogXCJcIixcbiAgICAgICAgICBcImlucHV0Q2xhc3NcIiA6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dFN0eWxlXCIgOiBcIlwiLFxuICAgICAgICAgIFwiYm9va1N0eWxlXCIgOiBcIlwiLFxuICAgICAgICAgIFwic2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgXCJkaXJlY3Rpb25cIiA6IFwibHRyXCIsXG4gICAgICAgICAgXCJxdWVzdGlvblN0eWxlXCI6IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MucXVlc3Rpb25TdHlsZSA9IHRoaXMucWJJdGVtPy5TdHlsZV9fYz8ucXVlc3Rpb25TdHlsZSA/IHRoaXMucWJJdGVtPy5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSB0aGlzLnFiSXRlbS5TdHlsZV9fYy5kaXJlY3Rpb24gPSB0aGlzLnFiSXRlbT8uU3R5bGVfX2M/LmRpcmVjdGlvbiA/IHRoaXMucWJJdGVtPy5TdHlsZV9fYz8uZGlyZWN0aW9uIDogJ2x0cic7XG4gICAgdGhpcy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbT8uU3R5bGVfX2M/LmJvb2tTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGh0bWxFbGVtZW50ID0gZWxlbWVudD8uUXVlc3Rpb25fVGV4dF9fYyA7XG4gICAgICB2YXIgdGV4dE9ubHkgPSBodG1sRWxlbWVudD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJylcbiAgICAgIGVsZW1lbnQuUXVlc3Rpb25fVGV4dF9fYyA9IHRleHRPbmx5O1xuICAgICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIFN0eWxpbmcoU2xhZXNmb3JjZSlcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICBpZihlbGVtZW50LlR5cGVfX2MgPT09ICdCb29rJyl7XG4gICAgICAgIGlmKGVsZW1lbnRbJ1FCX1JlZmVyZW5jZV9RdWVzdGlvbnNfX2MnXSl7XG4gICAgICAgICAgdmFyIHFiID0gSlNPTi5wYXJzZShlbGVtZW50WydRQl9SZWZlcmVuY2VfUXVlc3Rpb25zX19jJ10pO1xuICAgICAgICAgIGlmKHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYyl7XG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MgPSB0eXBlb2YgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycrcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jKSA6IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYztcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYyA9IHRoaXMucWJJdGVtLlN0eWxlX19jO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEJvb2sgdHlwZSBxdWVzdGlvbiBzdHlsaW5nXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsQ2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5pbnB1dENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmlucHV0Q2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmlucHV0U3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuaW5wdXRTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuYm9va1N0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmJvb2tTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5zaG93TGFiZWwgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2Muc2hvd0xhYmVsID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MucXVlc3Rpb25TdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsnbGFuZ0RpcmVjdGlvbiddID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmRpcmVjdGlvbiA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9vcCBmb3IgZWFjaCBxdWVzdGlvbiBpbiB0aGUgYm9va1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5RdWVzdGlvbnNfX3IucmVjb3Jkcy5mb3JFYWNoKHF1ZXN0aW9uRnJvbUJvb2sgPT4ge1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYyA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jIDogcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0Q2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0Q2xhc3MgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuYm9va1N0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5ib29rU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLnNob3dMYWJlbCA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2Muc2hvd0xhYmVsID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2tbJ2xhbmdEaXJlY3Rpb24nXSA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuZGlyZWN0aW9uID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MgPSBlbGVtZW50LlN0eWxlX19jID8gdHlwZW9mIGVsZW1lbnQuU3R5bGVfX2MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJytlbGVtZW50Py5TdHlsZV9fYykgOiBlbGVtZW50Py5TdHlsZV9fYyA6IHRoaXMucWJJdGVtPy5TdHlsZV9fYztcblxuICAgICAgZWxlbWVudC5TdHlsZV9fYy5sYWJlbENsYXNzID0gZWxlbWVudC5TdHlsZV9fYy5sYWJlbENsYXNzID8gZWxlbWVudC5TdHlsZV9fYy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MubGFiZWxTdHlsZSA9IGVsZW1lbnQuU3R5bGVfX2MubGFiZWxTdHlsZSA/IGVsZW1lbnQuU3R5bGVfX2MubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgPSBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgPyBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MuYm9va1N0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5ib29rU3R5bGUgPyBlbGVtZW50LlN0eWxlX19jLmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLnNob3dMYWJlbCA9IGVsZW1lbnQuU3R5bGVfX2Muc2hvd0xhYmVsID8gZWxlbWVudC5TdHlsZV9fYy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcblxuICAgICAgZWxlbWVudFsnbGFuZ0RpcmVjdGlvbiddID0gZWxlbWVudC5TdHlsZV9fYy5kaXJlY3Rpb24gPyBlbGVtZW50LlN0eWxlX19jLmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcbiAgICB9KTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25zKTtcbiAgICB0aGlzLnByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCk7IFxuICB9XG5cbiAgY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25Cb29rQ29tcG9uZW50IGNsZWFyU1FFcnJvcicpO1xuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucz8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLklkID09IHF1ZXNJZCk7XG4gICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XG4gICAgICBzcS5lcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG4gLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgcHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKXtcbiAgICBpZiAodGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zICYmIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKChvcmdRdWVzdGlvbjogYW55KT0+IHtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMuZm9yRWFjaCgodHJhbnNRdWVzdGlvbjphbnkpID0+IHtcbiAgICAgICAgICAgICBpZihvcmdRdWVzdGlvbi5VbmlxdWVfSWRlbnRpZmllcl9fYyA9PSB0cmFuc1F1ZXN0aW9uLmlkZW50aWZpZXIpe1xuICAgICAgICAgICAgICAgb3JnUXVlc3Rpb24uUXVlc3Rpb25fVGV4dF9fYyA9IHRyYW5zUXVlc3Rpb24ubGFiZWw7XG4gICAgICAgICAgICAgICBvcmdRdWVzdGlvbi5RdWVzdGlvbl9fYyA9IHRyYW5zUXVlc3Rpb24ucGxhY2VIb2xkZXI7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgIGNvbnNvbGUubG9nKCdvcmlnaW5hbFF1ZXN0aW9uJyArIHRoaXMucXVlc3Rpb25zKTtcbiAgICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbmJvb2tDb21wb25lbnQgc2V0U3ViUXVlc3Rpb25zJyk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChyZWNvcmRzKTtcbiAgfVxuXG4gIC8vIENhcHR1cmUgYW5kIFByb2Nlc3MgQ2hpbGQgRXZlbnRcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xuICAgIGxldCBkcm9wZG93bkRhdGEgPSAge307XG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBjaGlsZEV2ZW50Q2FwdHVyZScpO1xuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgIC8vIFByb2Nlc3MgdGhlIGNoYW5nZXMgaW4gVGFibGUgYW5kIERyb3Bkb3duIGFuZCBzdG9yZSByaWdodCB2YWx1ZSBpbiBxdWVzLmlucHV0XG4gICAgaWYocXVlcy5UeXBlX19jID09ICdEcm9wZG93bicpIHtcbiAgICAgIC8vIEhBIDE5SkFOMjQgQ29ycmVjdGlvbiBvZiBkcm9wZG93biB2YWx1ZXNcbiAgICAgIHF1ZXMuc2VsZWN0ZWRPYmogPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC5zZWxlY3RlZE9iaiA/IGV2ZW50LnNlbGVjdGVkT2JqIDogZXZlbnQudmFsdWVPYmo7XG4gICAgICAvLyBlbWl0IHRoZSBkcm9wZG93biBkYXRhIHRvIHBhcmVudFxuICAgICAgZHJvcGRvd25EYXRhWydldmVudCddID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XG4gICAgICBpZihkcm9wZG93bkRhdGFbJ2V2ZW50J10pe1xuICAgICAgICB0aGlzLmhhbmRsZURyb3BEb3duLmVtaXQoZHJvcGRvd25EYXRhKTtcbiAgICAgIH0gIC8vIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlXG4gICAgfSBlbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnTG9jYXRpb24nKXtcbiAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iajtcbiAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqLmFkZHJlc3M7XG4gICAgfWVsc2UgaWYocXVlcy5UeXBlX19jID09ICdGaWxlJyl7IFxuICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuc2VsZWN0ZWRGaWxlRGF0YSA9IGV2ZW50O1xuICAgIH1lbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnRGF0ZScgfHwgcXVlcy5UeXBlX19jID09ICdEYXRlVGltZScpeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXG4gICAgICAgaWYoZXZlbnQudmFsdWUpe1xuICAgICAgICBsZXQgZCA9IG5ldyBEYXRlKGV2ZW50LnZhbHVlKTtcbiAgICAgICAgbGV0IHV0Y1N0cmluZyA9IGQudG9JU09TdHJpbmcoKTtcbiAgICAgICAgcXVlcy5pbnB1dCA9IHV0Y1N0cmluZztcbiAgICAgICB9ZWxzZSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XG4gICAgfVxuICAgIC8vIHZhbGlkYXRpbmcgICBlcnJvciBtZXNzYWdlXG4gICAgY29uc3QgaGFzRXJyb3IgPSBxdWVzLkVycm9yX01lc3NhZ2VfX2MgJiYgKChxdWVzLlR5cGVfX2MgPT09ICdGaWxlJyAmJiBxdWVzLmlucHV0Lmxlbmd0aCA9PSAwKSB8fCAocXVlcy5UeXBlX19jICE9ICdGaWxlJyAmJiAhcXVlcy5pbnB1dCkpO1xuICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAvLyBpZihxdWVzLklzX09wdGlvbmFsX19jICYmICFxdWVzLmlucHV0KXtcbiAgICAgIC8vICAgcXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXJcbiAgICAgIC8vIH1lbHNle1xuICAgICAgLy8gICBxdWVzLmVycm9yID0gbnVsbDsgIFxuICAgICAgLy8gfVxuICBcbiAgICAvLyBPbmNlIHRoZSByaWdodCB2YWx1ZSBpcyBzdG9yZWQgaW4gcXVlcy5pbnB1dCBzdG9yZSB0aGUgcXVlcyAod2l0aCBpbnB1dCkgaW4gc3RvcmFnZVNlcnZpY2VcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShxdWVzKTtcbiAgICAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cbiAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlcyk7XG4gIH1cbiAgZGVsZXRlRmlsZShmaWxlRGF0YTphbnkpe1xuICAgIGNvbnNvbGUubG9nKCdmaWxlREFUQScsZmlsZURhdGEpXG4gIH1cbiAgZ2V0RHJvcERvd24oZXZlbnQ6YW55KXtcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsIjwhLS0gSEEgMjBERUMyMyBCb29rIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbjwhLS0gSEEgMjhERUMyMyAgUmVtb3ZlZCBJc1NoZW5nZWwocmVtb3ZhbCBvZiBzaGVuZ2VsIHZhbHVlcyBhcHBsaWVzIGZvciB0aGlzIHJlYXNvbikgYW5kIGRpcmVjdCBzdHlsaW5nIG9mIGJvb2tzIHRvIGF2b2lkIHN0eWxpbmcgaXNzdWVzLS0+XG48IS0tIEhBIDE4SkFOMjQgIEFkZGVkIGNsYXNzIGZvciBzdHlsaW5nIC0tPlxuPGRpdiBbc3R5bGVdPVwiYm9va1N0eWxlXCIgY2xhc3M9XCJjb250ZW50LWJveCBmb3JtLWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBEaXJlY3RpdmUgYW5kIFF1ZXN0aW9uIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2NsYXNzXT1cIidjb2wtbGctJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIHF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCIgW2lkXT1cInF1ZXMuSWRcIiBbZGlyXT1cInF1ZXMubGFuZ0RpcmVjdGlvblwiIFtzdHlsZV09XCJxdWVzPy5TdHlsZV9fYz8ucXVlc3Rpb25TdHlsZVwiPlxuICAgICAgICAgICAgPCEtLSBTdWIgUXVlc3Rpb24gTGFiZWwgLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgTGFiZWwgU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxuICAgICAgICAgICAgPCEtLSBWRCAwOU1heTI0IGlzIGhpZGUgZmllbGQgY2hhbmdlLS0+XG4gICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuSXNfSGlkZV9fY1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGVUaW1lJ1wiPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gVkQgMjBKVU4yNCAtIGhlbHAgdGV4dCBjaGFuZ2VzLS0+XG4gICAgICAgICAgICA8IS0tIFZEIDAxQXVnMjQgLSB2YWxpZGF0aW9uIGNoYW5nZS0tPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzLlN0eWxlX19jLnNob3dMYWJlbFwiIFtzdHlsZV09XCJxdWVzLlN0eWxlX19jLmxhYmVsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2Rpcy1mbGV4IHNoZW5nZWwtbXl0LWZvbnQzIG15dC1mb250NyAnXCI+e3sgcXVlcz8uUXVlc3Rpb25fVGV4dF9fYyB9fSBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJxdWVzLklzX09wdGlvbmFsX19jXCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiPio8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuUXVlc3Rpb25fVGV4dF9fYyAmJiBxdWVzPy5IZWxwX1RleHRfX2NcIiBjbGFzcz1cImljb25cIiBbbWF0VG9vbHRpcF09XCJxdWVzPy5IZWxwX1RleHRfX2NcIj5pPC9kaXY+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cbiAgICAgICAgICAgIDwhLS0gRGF0ZVRpbWUgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICA8IS0tIERhdGUtLT5cbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZSdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlICBbZGF0ZV09XCJxdWVzLmlucHV0XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIChkYXRlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgPCEtLSBUaW1lLS0+XG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGltZSAgW3RpbWVdPVwicXVlcy5pbnB1dFwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLkVycm9yX01lc3NhZ2VfX2NcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiAodGltZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRpbWU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgPCEtLSBjYWxlbmRhciAgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnQ2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tY2FsZW5kYXIgW3F1ZXN0aW9uXT1cInF1ZXNcIiAgKGV2ZW50U2VsZWN0ZWQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPjwvYXBwLWN1c3RvbS1jYWxlbmRhcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRleHQgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtuZ0NsYXNzVmFsdWVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgICAgICAgICAgIH1cIiBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIFtpZFZhbHVlXT1cInF1ZXMuVHJhY2tpbmdfSURfX2NcIiBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jXCIgKGlucHV0VmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIGZvciBwaWNrIGxvY2F0aW9uIC0tPlxuICAgICAgICAgICAgPCEtLSAgIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBIQTEwMDEyMDI0IEFkZGVkIEFwaSBrZXkgYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydBcGlfS2V5X19jJ11cIiBbYWRkcmVzc109XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwicXVlc1wiIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1waWNrLWxvY2F0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gZm9yICB0ZXh0IGFyZWEgICAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jIFwiXG4gICAgICAgICAgICAgICAgICAgICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRW1haWwnXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIHJlYWRPbmx5PVwicXVlcy5SZWFkX09ubHlfX2NcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5JZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGFibGUgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCIgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gVGFibGUgQXBwZW5kaXggLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUYWJsZUFwcGVuZGl4J1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC10YWJsZS1hcHBlbmRpeCBbcXVlc3Rpb25dPVwicXVlc1wiICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC10YWJsZS1hcHBlbmRpeD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgIDwhLS0gbGlzdCAtLT5cbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTGlzdCdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxsaWItc2VhcmNoLWJveCBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIiBbaWRdPVwicXVlcy5JZFwiIFtwbGFjZUhvbGRlclRleHRdPVwicXVlcy5RdWVzdGlvbl9fY1wiICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCIgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2xpYi1zZWFyY2gtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDA5RkVCMjQgQWRkZWQgY29uZGl0aW9uIG9mIHNxT3B0aW9uIHRvIHRoZSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEcm9wZG93bicgJiYgcXVlcz8uUXVlc3Rpb25fT3B0aW9uc19fcj8ucmVjb3Jkc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT4gPCEtLSBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbb3B0aW9uc109XCJxdWVzLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiIFt0b2tlbl09XCJ0b2tlblwiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIiBbaWRdPVwicXVlcy5JZFwiIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMuUmVmZXJlbmNlX0ZpZWxkX19jXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlcz8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRmlsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtZmlsZS11cGxvYWQgW2xpbWl0RmlsZVVwbG9hZGluZ109XCI1XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcXVlc3Rpb25dPVwicXVlc1wiIFthbGxGaWxlc109XCJxdWVzLmlucHV0XCIgW3RhYmxlRmlsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbaXNEZWxldGVGaWxlQnV0dG9uVmlzaWJsZV09XCJ0cnVlXCI+PC9hcHAtZmlsZS11cGxvYWQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdQb3BVcE1lc3NhZ2UnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWRlcGVuZGVudC10YWJsZSBbYWxlcnRNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWRlcGVuZGVudC10YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0xhYmVsJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbGFiZWwgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAwOE5PVjIzIC0gYnV0dG9uIHR5cGUgcXVlc3Rpb24gYWRkZWQgLS0+XG4gICAgICAgICAgICAgPCEtLSBCdXR0b24gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnQnV0dG9uJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tYnV0dG9uIFtoZWlnaHRdPVwiJzUwcHgnXCIgIFxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCInMTUwcHgnXCIgXG4gICAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwicXVlcz8uUXVlc3Rpb25fX2NcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzPy5RdWVzdGlvbl9fY1wiXG4gICAgICAgICAgICAgICAgKGJ1dHRvblZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgIFRoaXMgaXMgdG8gbG9hZCBib29rIHR5cGUgcXVlc3Rpb25zLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnQm9vaydcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeSBvcGVyYXRvciAtLT5cbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInF1ZXMucWJJdGVtXCIgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiIFtxdWVzdGlvbnNdPVwicXVlcy5xYkl0ZW0/LlF1ZXN0aW9uc19fcj8ucmVjb3Jkc1wiICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiJdfQ==