commons-assessment 12.1.2-dev.2 → 12.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/commons-assessment.umd.js +162 -25
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +2 -2
- package/esm2015/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.js +1 -1
- package/esm2015/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.js +66 -2
- package/esm2015/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.js +2 -2
- package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +2 -2
- package/esm2015/lib/modules/assessment-maker/services/assessment-maker.service.js +18 -3
- package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +14 -2
- package/esm2015/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.js +14 -2
- package/esm2015/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.js +2 -2
- package/esm2015/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.js +2 -2
- package/esm2015/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.js +14 -2
- package/esm2015/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/services/assessment-taker.service.js +15 -2
- package/esm2015/lib/modules/question-bank/question-bank.component.js +2 -2
- package/esm2015/lib/shared/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
- package/esm2015/lib/shared/components/skill-allocation/skill-allocation.component.js +1 -1
- package/esm2015/lib/shared/controllers.js +2 -2
- package/esm2015/lib/shared/pipes/order-by.pipe.js +4 -3
- package/fesm2015/commons-assessment.js +153 -27
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.d.ts +9 -0
- package/lib/modules/assessment-maker/services/assessment-maker.service.d.ts +3 -1
- package/lib/modules/assessment-taker/assessment-taker.component.d.ts +3 -0
- package/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.d.ts +3 -0
- package/lib/modules/assessment-taker/services/assessment-taker.service.d.ts +18 -16
- package/package.json +1 -1
- package/src/lib/assets/images/info.svg +2 -2
- package/src/lib/assets/images/lock.svg +3 -0
- package/src/lib/assets/json/imageConfig.json +2 -1
- package/src/lib/assets/json/labelConfig.json +10 -2
- package/src/lib/assets/theme/_theme.global.scss +1 -0
- package/src/lib/assets/theme/styles.global.scss +12 -0
- package/src/lib/assets/theme/styles.scss +5 -0
|
@@ -35,7 +35,11 @@ export class AssessmentBuilderComponent {
|
|
|
35
35
|
this.standaloneMode = false;
|
|
36
36
|
this.isLocked = false;
|
|
37
37
|
this.isSubmitting = false;
|
|
38
|
+
this.mediaUploading = false;
|
|
39
|
+
this.mediaError = '';
|
|
38
40
|
this.skillsList = [];
|
|
41
|
+
// accepted question-media uploads: images/videos up to 5 MB
|
|
42
|
+
this.MAX_MEDIA_SIZE = 5 * 1024 * 1024;
|
|
39
43
|
}
|
|
40
44
|
ngOnInit() {
|
|
41
45
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
@@ -55,6 +59,63 @@ export class AssessmentBuilderComponent {
|
|
|
55
59
|
this.setupFormGroup();
|
|
56
60
|
this.applyDynamicValidators();
|
|
57
61
|
}
|
|
62
|
+
// ---- Question media: URL or direct image/video upload (<= 5 MB) --------------------------------
|
|
63
|
+
triggerMediaUpload() {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
(_b = (_a = this.mediaFileInput) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.click();
|
|
66
|
+
}
|
|
67
|
+
onMediaFileSelected(event) {
|
|
68
|
+
var _a, _b, _c;
|
|
69
|
+
const file = (_b = (_a = event === null || event === void 0 ? void 0 : event.target) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b[0];
|
|
70
|
+
// reset the input so selecting the same file again re-triggers change
|
|
71
|
+
if (this.mediaFileInput) {
|
|
72
|
+
this.mediaFileInput.nativeElement.value = '';
|
|
73
|
+
}
|
|
74
|
+
this.mediaError = '';
|
|
75
|
+
if (!file) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const isImageOrVideo = /^(image|video)\//i.test(file.type);
|
|
79
|
+
if (!isImageOrVideo) {
|
|
80
|
+
this.setMediaError(this.labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_MEDIA_TYPE']);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (file.size > this.MAX_MEDIA_SIZE) {
|
|
84
|
+
this.setMediaError((_c = this.labelConfig['COMMONS_ASSESSMENT.TOAST.FILE_SIZE_EXCEEDED']) === null || _c === void 0 ? void 0 : _c.replace('[SIZE]', (this.MAX_MEDIA_SIZE / (1024 * 1024)).toFixed(0)));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.uploadMedia(file);
|
|
88
|
+
}
|
|
89
|
+
/** Shows the media error inline in the dialog and also surfaces it via the host snackbar. */
|
|
90
|
+
setMediaError(message) {
|
|
91
|
+
var _a, _b;
|
|
92
|
+
this.mediaError = message || '';
|
|
93
|
+
(_b = (_a = this.dialogData) === null || _a === void 0 ? void 0 : _a.snackbarMessageEmitter) === null || _b === void 0 ? void 0 : _b.emit({ message: this.mediaError, type: 'error' });
|
|
94
|
+
}
|
|
95
|
+
uploadMedia(file) {
|
|
96
|
+
const formData = new FormData();
|
|
97
|
+
formData.append('file', file);
|
|
98
|
+
const params = {
|
|
99
|
+
entityType: 'ENTITY_TYPE.ASSESSMENT_QUESTION',
|
|
100
|
+
isPublic: true
|
|
101
|
+
};
|
|
102
|
+
this.mediaUploading = true;
|
|
103
|
+
this.assessmentMakerService.uploadAttachment(formData, params).subscribe({
|
|
104
|
+
next: (data) => {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
this.mediaUploading = false;
|
|
107
|
+
this.mediaError = '';
|
|
108
|
+
const url = (data === null || data === void 0 ? void 0 : data.completeURL) || (data === null || data === void 0 ? void 0 : data.signedURL) || '';
|
|
109
|
+
(_a = this.questionsFormGroup.get('questionMedia')) === null || _a === void 0 ? void 0 : _a.setValue(url);
|
|
110
|
+
(_b = this.questionsFormGroup.get('questionMedia')) === null || _b === void 0 ? void 0 : _b.markAsTouched();
|
|
111
|
+
},
|
|
112
|
+
error: (error) => {
|
|
113
|
+
this.mediaUploading = false;
|
|
114
|
+
this.setMediaError(this.labelConfig['COMMONS_ASSESSMENT.TOAST.FILE_UPLOAD_FAILED']);
|
|
115
|
+
throw { error, method: 'POST' };
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
58
119
|
generateChildQuestionList() {
|
|
59
120
|
var _a, _b, _c, _d;
|
|
60
121
|
if (this.isChild) {
|
|
@@ -730,7 +791,7 @@ export class AssessmentBuilderComponent {
|
|
|
730
791
|
}
|
|
731
792
|
}
|
|
732
793
|
AssessmentBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentBuilderComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AssessmentBuilderService }, { token: i3.AssessmentMakerService }, { token: i4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
733
|
-
AssessmentBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentBuilderComponent, selector: "lib-app-assessment-builder", viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex vh-100 position-relative overflow-hidden\">\r\n <div *ngIf=\"questionStack.length > 0 || isChild\"\r\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\r\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\r\n </p>\r\n </div>\r\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\r\n <header\r\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\r\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\r\n </p>\r\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\r\n </button>\r\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\r\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting || isLocked\"\r\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n </header>\r\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\r\n [formGroup]=\"questionsFormGroup\">\r\n <div class=\"pb-4 col-12\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\r\n <mat-select formControlName=\"questionType\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\r\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes; trackBy: trackByCode\"\r\n [value]=\"type?.code\">\r\n {{type?.label}}\r\n </mat-option>\r\n </mat-select>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"pb-4 col-12\">\r\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\r\n <input formControlName=\"questionMedia\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minCharacterCount')?.invalid && questionsFormGroup.get('minCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('required') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('min') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxCharacterCount')?.invalid && questionsFormGroup.get('maxCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('required') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('min') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxFileSize\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxFileSize')?.invalid && questionsFormGroup.get('maxFileSize')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('required') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('min') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxNoOfFiles\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxNoOfFiles')?.invalid && questionsFormGroup.get('maxNoOfFiles')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('required') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('min') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"customRegex\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\r\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div class=\"row mx-0 col-12 pb-4\"\r\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minimumNumberOfOption')?.invalid && questionsFormGroup.get('minimumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('required') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('min') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\r\n (input)=\"allowOnlyNumbers($event); checkMaxOptionsVal($event, questionsFormGroup.get('maximumNumberOfOption'))\"\r\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maximumNumberOfOption')?.invalid && questionsFormGroup.get('maximumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('required') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('min') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER'] || 'Max limit should be greater than min limit'}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\r\n <div formArrayName=\"options\">\r\n <ng-container *ngFor=\"let option of options.controls; let i = index; trackBy: trackByControl\">\r\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\r\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\r\n\r\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\r\n [class.pt-md-3]=\"i == 0\">\r\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\r\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\r\n <input formControlName=\"optionLabel\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\r\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\r\n </div>\r\n <img class=\"cursor-pointer d-md-none\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n <div\r\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\r\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\r\n class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\r\n </p>\r\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\r\n formControlName=\"weight\" (wheel)=\"$event.preventDefault()\"\r\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showRemarks') && !isChild && questionStack.length == 0\" class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\r\n </p>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\r\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\r\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <button type=\"button\" (click)=\"addOption()\"\r\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_OPTION']}}\r\n </button>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\"\r\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild && !standaloneMode\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <label\r\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\r\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\r\n </div>\r\n\r\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index; trackBy: trackByGroupId\"\r\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\r\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\r\n <mat-select [value]=\"group.optionId\"\r\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\r\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index; trackBy: trackByControl\">\r\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\r\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\r\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index; trackBy: trackByQuestionId\">\r\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <p class=\"mb-0 assessment-text-medium-14\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"deleteChildQuestionById(child.id, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\r\n </div>\r\n </div>\r\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\r\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\r\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\r\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_MORE']}}\r\n </button>\r\n </div>\r\n\r\n <button (click)=\"addEditChildQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 col-12 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CHILD_QUESTION']}}\r\n </button>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\">\r\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\r\n formControlName=\"isMandatory\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\r\n *ngIf=\"showField('isFilterEnabled')\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\r\n formControlName=\"isFilterEnabled\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\"\r\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\r\n <input formControlName=\"questionSubText\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && questionStack.length == 0 && (skillsList?.length ?? 0) > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\r\n <mat-select formControlName=\"skillCodes\" multiple\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\r\n panelClass=\"assessment-checkboxes\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList; trackBy: trackByCode\"\r\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.form-container{max-height:calc(100dvh - 4rem)}.border-grey-ten-2{border:.12rem solid var(--assessment-grey-ten)}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.assessment-marks-input{width:4rem}header{z-index:1}.vertical-text{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);white-space:nowrap}@media (min-width: 768px){.hidden-label{visibility:hidden;line-height:0!important}}@media screen and (min-width: 768px){.border-md-0{border:0!important}}.primary-border{border:.064rem solid var(--assessment-primary-one)}.form-check-input:checked{background-color:var(--assessment-primary-one)!important;border-color:var(--assessment-primary-one)!important}.custom-margin{margin-top:1.3rem}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}\n"], components: [{ type: i5.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.TextEditorComponent, selector: "app-text-editor", inputs: ["height", "placeholder", "preText", "disabled", "showToolbar"], outputs: ["inputChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
794
|
+
AssessmentBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentBuilderComponent, selector: "lib-app-assessment-builder", viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "mediaFileInput", first: true, predicate: ["mediaFileInput"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex vh-100 position-relative overflow-hidden\">\r\n <div *ngIf=\"questionStack.length > 0 || isChild\"\r\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\r\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\r\n </p>\r\n </div>\r\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\r\n <header\r\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\r\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\r\n </p>\r\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\r\n </button>\r\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\r\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting || isLocked\"\r\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n </header>\r\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\r\n [formGroup]=\"questionsFormGroup\">\r\n <div class=\"pb-4 col-12\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\r\n <mat-select formControlName=\"questionType\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\r\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes; trackBy: trackByCode\"\r\n [value]=\"type?.code\">\r\n {{type?.label}}\r\n </mat-option>\r\n </mat-select>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"pb-4 col-12\">\r\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\r\n <input formControlName=\"questionMedia\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\r\n\r\n <!-- OR upload an image / video (<= 5 MB) -->\r\n <div class=\"d-flex align-items-center flex-wrap gap-2 mt-2\">\r\n <input #mediaFileInput type=\"file\" accept=\"image/*,video/*\" hidden\r\n (change)=\"onMediaFileSelected($event)\">\r\n <button type=\"button\" (click)=\"triggerMediaUpload()\" [disabled]=\"mediaUploading\"\r\n class=\"assessment-zoom-animation assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"mediaUploading\" class=\"spinner-border spinner-border-sm\" role=\"status\"\r\n aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.UPLOAD_MEDIA'] }}\r\n </button>\r\n <span class=\"assessment-text-regular-11 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.MEDIA_UPLOAD_HINT'] }}\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"mediaError\" class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\r\n {{ mediaError }}\r\n </div>\r\n\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minCharacterCount')?.invalid && questionsFormGroup.get('minCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('required') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('min') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxCharacterCount')?.invalid && questionsFormGroup.get('maxCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('required') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('min') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxFileSize\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxFileSize')?.invalid && questionsFormGroup.get('maxFileSize')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('required') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('min') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxNoOfFiles\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxNoOfFiles')?.invalid && questionsFormGroup.get('maxNoOfFiles')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('required') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('min') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"customRegex\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\r\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div class=\"row mx-0 col-12 pb-4\"\r\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minimumNumberOfOption')?.invalid && questionsFormGroup.get('minimumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('required') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('min') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\r\n (input)=\"allowOnlyNumbers($event); checkMaxOptionsVal($event, questionsFormGroup.get('maximumNumberOfOption'))\"\r\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maximumNumberOfOption')?.invalid && questionsFormGroup.get('maximumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('required') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('min') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER'] || 'Max limit should be greater than min limit'}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\r\n <div formArrayName=\"options\">\r\n <ng-container *ngFor=\"let option of options.controls; let i = index; trackBy: trackByControl\">\r\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\r\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\r\n\r\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\r\n [class.pt-md-3]=\"i == 0\">\r\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\r\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\r\n <input formControlName=\"optionLabel\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\r\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\r\n </div>\r\n <img class=\"cursor-pointer d-md-none\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n <div\r\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\r\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\r\n class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\r\n </p>\r\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\r\n formControlName=\"weight\" (wheel)=\"$event.preventDefault()\"\r\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showRemarks') && !isChild && questionStack.length == 0\" class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\r\n </p>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\r\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\r\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <button type=\"button\" (click)=\"addOption()\"\r\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_OPTION']}}\r\n </button>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\"\r\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild && !standaloneMode\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <label\r\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\r\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\r\n </div>\r\n\r\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index; trackBy: trackByGroupId\"\r\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\r\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\r\n <mat-select [value]=\"group.optionId\"\r\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\r\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index; trackBy: trackByControl\">\r\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\r\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\r\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index; trackBy: trackByQuestionId\">\r\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <p class=\"mb-0 assessment-text-medium-14\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"deleteChildQuestionById(child.id, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\r\n </div>\r\n </div>\r\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\r\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\r\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\r\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_MORE']}}\r\n </button>\r\n </div>\r\n\r\n <button (click)=\"addEditChildQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 col-12 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CHILD_QUESTION']}}\r\n </button>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\">\r\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\r\n formControlName=\"isMandatory\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\r\n *ngIf=\"showField('isFilterEnabled')\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\r\n formControlName=\"isFilterEnabled\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\"\r\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\r\n <input formControlName=\"questionSubText\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && questionStack.length == 0 && (skillsList?.length ?? 0) > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\r\n <mat-select formControlName=\"skillCodes\" multiple\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\r\n panelClass=\"assessment-checkboxes\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList; trackBy: trackByCode\"\r\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-input-focus-box-shadow{box-shadow:var(--assessment-input-focus-box-shadow)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.break-text{word-break:break-word;text-wrap:wrap}.form-container{max-height:calc(100dvh - 4rem)}.border-grey-ten-2{border:.12rem solid var(--assessment-grey-ten)}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.assessment-marks-input{width:4rem}header{z-index:1}.vertical-text{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);white-space:nowrap}@media (min-width: 768px){.hidden-label{visibility:hidden;line-height:0!important}}@media screen and (min-width: 768px){.border-md-0{border:0!important}}.primary-border{border:.064rem solid var(--assessment-primary-one)}.form-check-input:checked{background-color:var(--assessment-primary-one)!important;border-color:var(--assessment-primary-one)!important}.custom-margin{margin-top:1.3rem}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}\n"], components: [{ type: i5.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.TextEditorComponent, selector: "app-text-editor", inputs: ["height", "placeholder", "preText", "disabled", "showToolbar"], outputs: ["inputChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
734
795
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentBuilderComponent, decorators: [{
|
|
735
796
|
type: Component,
|
|
736
797
|
args: [{
|
|
@@ -744,5 +805,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
744
805
|
}] }]; }, propDecorators: { scrollContainer: [{
|
|
745
806
|
type: ViewChild,
|
|
746
807
|
args: ['scrollContainer']
|
|
808
|
+
}], mediaFileInput: [{
|
|
809
|
+
type: ViewChild,
|
|
810
|
+
args: ['mediaFileInput']
|
|
747
811
|
}] } });
|
|
748
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL21vZHVsZXMvYXNzZXNzbWVudC1tYWtlci9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvYXNzZXNzbWVudC1idWlsZGVyL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRbkUsTUFBTSxPQUFPLDBCQUEwQjtJQXVCbkMsWUFDWSxXQUF3QixFQUN4Qix3QkFBa0QsRUFDbEQsc0JBQThDLEVBQy9DLFNBQW1ELEVBQzFCLFVBQWU7UUFKdkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQy9DLGNBQVMsR0FBVCxTQUFTLENBQTBDO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQUs7UUEzQm5ELGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUE4QixF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Q0FBQyxLQUFhLEVBQUUsSUFBUztRQUNoQyxPQUFPLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksS0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYSxFQUFFLE9BQVk7UUFDdEMsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBVTtRQUNwQyxPQUFPLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEVBQUUsS0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzVELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsRUFBTztRQUNwQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDL0MsQ0FBQzs7d0hBN3ZCUSwwQkFBMEIsdUpBNEJ2QixlQUFlOzRHQTVCbEIsMEJBQTBCLHNMQ2hCdkMseWdzQ0F5Yk07NEZEemFPLDBCQUEwQjtrQkFOdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUscUNBQXFDO29CQUNsRCxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztpQkFDckQ7OzBCQThCUSxNQUFNOzJCQUFDLGVBQWU7NENBckJHLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblR5cGUsIFJlZkRhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LW1ha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblBhcGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Fzc2Vzc21lbnQtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGVlcENsb25lLCBnZW5lcmF0ZVV1aWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1hcHAtYXNzZXNzbWVudC1idWlsZGVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3Nlc3NtZW50QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gICAgaW1hZ2VDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIHF1ZXN0aW9uVHlwZXM6IFF1ZXN0aW9uVHlwZVtdID0gW107XHJcbiAgICBxdWVzdGlvbkRldGFpbHM6IEFzc2Vzc21lbnRRdWVzdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcnVsZXM6IGFueSA9IHt9O1xyXG4gICAgcXVlc3Rpb25TdGFjazogeyBwYXJlbnRGb3JtVmFsdWU6IEFzc2Vzc21lbnRRdWVzdGlvbiwgZWRpdGluZ1F1ZXN0aW9uSW5kZXg/OiBudW1iZXIsIGFkZGluZ1RvR3JvdXBJZD86IHN0cmluZyB9W10gPSBbXTtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpIHNjcm9sbENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgY2hpbGRRdWVzdGlvbkdyb3VwczogeyBpZDogc3RyaW5nLCBvcHRpb25JZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCwgcXVlc3Rpb25JZHM6IChzdHJpbmcgfCBudW1iZXIpW10gfVtdID0gW107XHJcblxyXG4gICAgcXVlc3Rpb25zRm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gICAgcXVlc3Rpb25CYW5rOiBSZWNvcmQ8bnVtYmVyLCBBc3Nlc3NtZW50UXVlc3Rpb24+ID0ge307XHJcbiAgICBpc0NoaWxkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvLyBwYXJlbnRRdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgYXNzZXNzbWVudElkOiBudW1iZXIgPSAwO1xyXG4gICAgc3RhbmRhbG9uZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzTG9ja2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBza2lsbHNMaXN0OiBSZWZEYXRhW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRCdWlsZGVyU2VydmljZTogQXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYXNzZXNzbWVudE1ha2VyU2VydmljZTogQXNzZXNzbWVudE1ha2VyU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQ+LFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGlhbG9nRGF0YTogYW55LFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxhYmVsQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5sYWJlbENvbmZpZztcclxuICAgICAgICB0aGlzLmltYWdlQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5pbWFnZUNvbmZpZztcclxuICAgICAgICB0aGlzLnJ1bGVzID0gdGhpcy5kaWFsb2dEYXRhPy5ydWxlcztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVHlwZXMgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uVHlwZXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uQmFuaztcclxuICAgICAgICB0aGlzLmlzQ2hpbGQgPSB0aGlzLmRpYWxvZ0RhdGE/LmlzQ2hpbGQ7XHJcbiAgICAgICAgdGhpcy5za2lsbHNMaXN0ID0gdGhpcy5kaWFsb2dEYXRhPy5za2lsbHNMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gdGhpcy5kaWFsb2dEYXRhPy5hc3Nlc3NtZW50SWQ7XHJcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lTW9kZSA9IHRoaXMuZGlhbG9nRGF0YT8uc3RhbmRhbG9uZU1vZGUgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xvY2tlZCA9IHRoaXMuZGlhbG9nRGF0YT8uaXNMb2NrZWQgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEucXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25EZXRhaWxzID0gZGVlcENsb25lKHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25EZXRhaWxzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR1cEZvcm1Hcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlEeW5hbWljVmFsaWRhdG9ycygpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZW5lcmF0ZUNoaWxkUXVlc3Rpb25MaXN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ2hpbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1bmlxdWVJZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkRldGFpbHM/LmRlZmF1bHRPcHRpb25zTGlzdD8uZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goaWQgPT4gdW5pcXVlSWRzLmFkZChpZCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh1bmlxdWVJZHMpPy5tYXAoaWQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhbmtbaWRdID8gZGVlcENsb25lKHRoaXMucXVlc3Rpb25CYW5rW2lkXSkgOiBudWxsO1xyXG4gICAgICAgIH0pPy5maWx0ZXIoQm9vbGVhbikgYXMgQXNzZXNzbWVudFF1ZXN0aW9uW107XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBGb3JtR3JvdXAoKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBxdWVzdGlvblRleHQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uU3ViVGV4dDogWycnXSxcclxuICAgICAgICAgICAgaXNGaWx0ZXJFbmFibGVkOiBbZmFsc2VdLFxyXG4gICAgICAgICAgICBpc01hbmRhdG9yeTogW2ZhbHNlXSxcclxuICAgICAgICAgICAgLy8gdmlzaWJpbGl0eTogW3RydWVdLFxyXG4gICAgICAgICAgICB0b3RhbE1hcmtzOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1pbkNoYXJhY3RlckNvdW50OiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heENoYXJhY3RlckNvdW50OiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZk9wdGlvbjogW251bGxdLFxyXG4gICAgICAgICAgICBtaW5pbXVtTnVtYmVyT2ZPcHRpb246IFtudWxsXSxcclxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IFtudWxsXSxcclxuICAgICAgICAgICAgbWF4Tm9PZkZpbGVzOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIGN1c3RvbVJlZ2V4OiBbJyddLFxyXG4gICAgICAgICAgICBoaW50VGV4dDogWycnXSxcclxuICAgICAgICAgICAgcXVlc3Rpb25NZWRpYTogWycnXSxcclxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXHJcbiAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25zOiBbW11dLFxyXG4gICAgICAgICAgICBza2lsbENvZGVzOiBbW11dXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RHluYW1pY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkRldGFpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0odGhpcy5xdWVzdGlvbkRldGFpbHMsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDaGlsZFF1ZXN0aW9uR3JvdXBzKFtdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcG9wdWxhdGVGb3JtKHF1ZXN0aW9uRGV0YWlsczogQXNzZXNzbWVudFF1ZXN0aW9uLCBidWlsZENoaWxkR3JvdXBzOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXF1ZXN0aW9uRGV0YWlscykgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkUXVlc3Rpb25zID0gcXVlc3Rpb25EZXRhaWxzPy5jaGlsZFF1ZXN0aW9ucyB8fCB0aGlzLmdlbmVyYXRlQ2hpbGRRdWVzdGlvbkxpc3QoKTtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdldFF1ZXN0aW9uRFRPKHsgLi4ucXVlc3Rpb25EZXRhaWxzLCBjaGlsZFF1ZXN0aW9ucyB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGZvcm1EYXRhKTtcclxuICAgICAgICBpZiAoZm9ybURhdGEub3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIoZm9ybURhdGEudG90YWxNYXJrcykgfHwgMDtcclxuICAgICAgICAgICAgZm9ybURhdGEub3B0aW9ucy5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0R3JvdXAgPSB0aGlzLmNyZWF0ZU9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsTWFya3MgPiAwICYmIG9wdC53ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvcHQud2VpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0LndlaWdodCA9IHBhcnNlRmxvYXQoKChOdW1iZXIob3B0LndlaWdodCkgKiB0b3RhbE1hcmtzKSAvIDEwMCkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvcHRHcm91cC5wYXRjaFZhbHVlKG9wdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRHcm91cCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYnVpbGRDaGlsZEdyb3Vwcykge1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQ2hpbGRRdWVzdGlvbkdyb3VwcyhjaGlsZFF1ZXN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuV0FSTklORy5RVUVTVElPTl9MT0NLRUQnXSB8fCAnVGhpcyBxdWVzdGlvbiBpcyBwYXJ0IG9mIGEgcHVibGlzaGVkIGFzc2Vzc21lbnQgYW5kIGNhbm5vdCBiZSBlZGl0ZWQuJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICBjb25zdCBxVHlwZSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNWYWx1ZXMgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKT8udmFsdWUgfHwgW107XHJcbiAgICAgICAgY29uc3Qgc2hvd1dlaWdodGFnZSA9IHRoaXMuc2hvd0ZpZWxkKCdvcHRpb25zJywgJ3Nob3dXZWlnaHRhZ2UnKTtcclxuXHJcbiAgICAgICAgaWYgKHNob3dXZWlnaHRhZ2UgJiYgdG90YWxNYXJrcyA+IDApIHtcclxuICAgICAgICAgICAgbGV0IHRvdGFsV2VpZ2h0cyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBoYXNJbnZhbGlkV2VpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LmlzQWN0aXZlID09PSBmYWxzZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3ID0gTnVtYmVyKG9wdC53ZWlnaHQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodyA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNJbnZhbGlkV2VpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzSW52YWxpZFdlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVG8ga2VlcCB3aXRoaW4gZXhpc3Rpbmcgc3R5bGVzLCBlbWl0dGluZyBkZWZhdWx0IGVycm9yIHdpdGggb3VyIHNwZWNpZmljIG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5PUFRJT05fU0NPUkVfR1JFQVRFUl9USEFOX1RPVEFMX01BUktTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyAmJiB0b3RhbFdlaWdodHMgPiB0b3RhbE1hcmtzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU1VNX09GX09QVElPTl9TQ09SRVNfR1JFQVRFUl9USEFOX1RPVEFMX01BUktTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZGVlcENsb25lKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgICBpZiAoc2hvd1dlaWdodGFnZSAmJiB0b3RhbE1hcmtzID4gMCAmJiBmb3JtVmFsdWUub3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvcm1WYWx1ZS5vcHRpb25zLmZvckVhY2goKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LndlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdC53ZWlnaHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHQud2VpZ2h0ID0gcGFyc2VGbG9hdCgoKE51bWJlcihvcHQud2VpZ2h0KSAvIHRvdGFsTWFya3MpICogMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gY2hpbGQgcXVlc3Rpb24gbG9naWNcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnF1ZXN0aW9uU3RhY2tbdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlPy5lZGl0aW5nUXVlc3Rpb25JbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFF1ZXN0aW9uID0gc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zW3N0YXRlLmVkaXRpbmdRdWVzdGlvbkluZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUsIGNoaWxkUXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IGF3YWl0IHRoaXMudXBkYXRlUXVlc3Rpb24ocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zW3N0YXRlLmVkaXRpbmdRdWVzdGlvbkluZGV4XSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbj8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcsIHBheWxvYWQgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIG5ldyBjaGlsZCBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IGF3YWl0IHRoaXMuY3JlYXRlUXVlc3Rpb24ocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU/LnBhcmVudEZvcm1WYWx1ZT8uY2hpbGRRdWVzdGlvbnM/LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbj8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnAgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmluZCgoZzogYW55KSA9PiBnLmlkID09PSBzdGF0ZS5hZGRpbmdUb0dyb3VwSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnAucXVlc3Rpb25JZHM/LnB1c2gocXVlc3Rpb24/LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncnAub3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHQgPSBzdGF0ZS5wYXJlbnRGb3JtVmFsdWU/LmRlZmF1bHRPcHRpb25zTGlzdD8uZmluZCgobzogYW55KSA9PiAoby5pZCB8fCBvLnV1aWQpID09IGdycC5vcHRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2hpbGRRdWVzdGlvbkxpc3QgPSBvcHQuY2hpbGRRdWVzdGlvbkxpc3QgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5jaGlsZFF1ZXN0aW9uTGlzdC5wdXNoKHF1ZXN0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlVXVpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWRzOiBbcXVlc3Rpb24/LmlkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmUtcG9wdWxhdGUgcGFyZW50IGZvcm1cclxuICAgICAgICAgICAgdGhpcy5yZXNldEFuZFBvcHVsYXRlKHN0YXRlPy5wYXJlbnRGb3JtVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBxdWVzdGlvbkRUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSwgdGhpcy5xdWVzdGlvbkRldGFpbHMpO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGxvY2FsIHRlbXBsYXRlIHRyZWUgcmVwcmVzZW50YXRpb25cclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25EZXRhaWxzPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkRUTyA9IGF3YWl0IHRoaXMudXBkYXRlUXVlc3Rpb24ocXVlc3Rpb25EVE8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbkRUTz8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb25EVE8uaWRdID0gcXVlc3Rpb25EVE9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX1VQREFURURfU1VDQ0VTUyddLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBzdWNjZXNzOiB0cnVlLCBxdWVzdGlvbjogcXVlc3Rpb25EVE8gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZDogcXVlc3Rpb25EVE8gfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhbmRhbG9uZU1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU3RhbmRhbG9uZVF1ZXN0aW9uKHF1ZXN0aW9uRFRPKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlT3JFZGl0QXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocXVlc3Rpb25EVE8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU3RhbmRhbG9uZVF1ZXN0aW9uKHF1ZXN0aW9uRFRPOiBBc3Nlc3NtZW50UXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25EVE8pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXM/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcmVzLmlkXSA9IHJlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX0NSRUFURURfU1VDQ0VTUyddIHx8ICdRdWVzdGlvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiByZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhbmRhbG9uZU1vZGU6IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BPU1QnLCBwYXlsb2FkOiBxdWVzdGlvbkRUTyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNyZWF0ZVF1ZXN0aW9uKHBheWxvYWQ6IGFueSk6IFByb21pc2U8QXNzZXNzbWVudFF1ZXN0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZVF1ZXN0aW9uKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiByZXNvbHZlKHJlcyBhcyBBc3Nlc3NtZW50UXVlc3Rpb24pLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlamVjdChlcnIpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVF1ZXN0aW9uKHBheWxvYWQ6IGFueSk6IFByb21pc2U8QXNzZXNzbWVudFF1ZXN0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnBhdGNoUXVlc3Rpb24ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHJlc29sdmUocmVzIGFzIEFzc2Vzc21lbnRRdWVzdGlvbiksXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4gcmVqZWN0KGVycilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlT3JFZGl0QXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uUGFwZXIgPSBkZWVwQ2xvbmUodGhpcy5kaWFsb2dEYXRhPy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEpO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25RdWVzdGlvbiA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlU2VjdGlvblF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YT8uc2VjdGlvbkRldGFpbHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IHF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDtcclxuICAgICAgICAgICAgY29uc3QgbGFzdFNlcXVlbmNlID0gbGlzdD8ubGVuZ3RoID8gbGlzdFtsaXN0Lmxlbmd0aCAtIDFdLm9yZGVyTm8gfHwgMCA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlY3Rpb24gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5jcmVhdGVOZXdTZWN0aW9uKGxhc3RTZXF1ZW5jZSArIDEpO1xyXG5cclxuICAgICAgICAgICAgbmV3U2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LnB1c2goc2VjdGlvblF1ZXN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ucHVzaChuZXdTZWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uUmVmID0gcXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5maW5kKChzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikgPT4gc2VjdGlvbj8uaWQgPT0gdGhpcy5kaWFsb2dEYXRhPy5zZWN0aW9uRGV0YWlscz8uaWQpO1xyXG4gICAgICAgICAgICBzZWN0aW9uUmVmPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ucHVzaChzZWN0aW9uUXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25QYXBlckRUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlUXVlc3Rpb25QYXBlckRUTyhxdWVzdGlvblBhcGVyLCB0aGlzLnF1ZXN0aW9uQmFuayk7XHJcbiAgICAgICAgY29uc3QgYXNzZXNzbWVudERUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlQXNzZXNzbWVudERUTyh0aGlzLmFzc2Vzc21lbnRJZCwgcXVlc3Rpb25QYXBlckRUTyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnQ6IGFzc2Vzc21lbnREVE8sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI6IHF1ZXN0aW9uUGFwZXJEVE9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwaUNhbGwgPSB0aGlzLmFzc2Vzc21lbnRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZUFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpO1xyXG5cclxuICAgICAgICBhcGlDYWxsLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2Vzc21lbnRJZDogcmVzPy5hc3Nlc3NtZW50Py5pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblBhcGVyOiByZXM/LnF1ZXN0aW9uUGFwZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25NYXA6IHJlcz8ucXVlc3Rpb25NYXBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6IHRoaXMuYXNzZXNzbWVudElkID8gJ1BBVENIJyA6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUR5bmFtaWNWYWxpZGF0b3JzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5ydWxlcyB8fCBPYmplY3Qua2V5cyh0aGlzLnJ1bGVzKS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHFUeXBlID0gZm9ybS5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBjdXJyZW50UnVsZXMgPSB0aGlzLnJ1bGVzW3FUeXBlXSB8fCB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZXhjbHVkZWRDb250cm9scyA9IG5ldyBTZXQoWydxdWVzdGlvblR5cGUnLCAncXVlc3Rpb25UZXh0JywgJ29wdGlvbnMnLCAndmlzaWJpbGl0eScsICdpc01hbmRhdG9yeScsICdxdWVzdGlvblN1YlRleHQnLCAnc2tpbGxDb2RlcyddKTtcclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIG5vcm1hbCBjb250cm9sc1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKFtrZXksIGNvbnRyb2xdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChleGNsdWRlZENvbnRyb2xzLmhhcyhrZXkpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBydWxlID0gY3VycmVudFJ1bGVzW2tleV07XHJcblxyXG4gICAgICAgICAgICBpZiAocnVsZT8udmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHJ1bGU/LnJlcXVpcmVkID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW107XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncXVlc3Rpb25NZWRpYScpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKGh0dHBzPzpcXC9cXC8pPyhbXFxkYS16XFwuLV0rKVxcLihbYS16XFwuXXsyLDZ9KShbXFwvXFx3IFxcLi1dKikqXFwvPyhcXD9bXlxcc10qKT8kL2kpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdtaW5DaGFyYWN0ZXJDb3VudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21heENoYXJhY3RlckNvdW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjdHJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkN0cmwgPSBjdHJsLnBhcmVudD8uZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5WYWwgPSBtaW5DdHJsPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VmFsID0gY3RybC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pblZhbCAhPT0gbnVsbCAmJiBtaW5WYWwgIT09IHVuZGVmaW5lZCAmJiBtaW5WYWwgIT09ICcnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWwgIT09IG51bGwgJiYgbWF4VmFsICE9PSB1bmRlZmluZWQgJiYgbWF4VmFsICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihtYXhWYWwpIDw9IE51bWJlcihtaW5WYWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVzc1RoYW5PckVxdWFsTWluOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWluaW11bU51bWJlck9mT3B0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWF4aW11bU51bWJlck9mT3B0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjdHJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkN0cmwgPSBjdHJsLnBhcmVudD8uZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVmFsID0gbWluQ3RybD8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbCA9IGN0cmwudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5WYWwgIT09IG51bGwgJiYgbWluVmFsICE9PSB1bmRlZmluZWQgJiYgbWluVmFsICE9PSAnJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsICE9PSBudWxsICYmIG1heFZhbCAhPT0gdW5kZWZpbmVkICYmIG1heFZhbCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIobWF4VmFsKSA8PSBOdW1iZXIobWluVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGxlc3NUaGFuT3JFcXVhbE1pbjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21heEZpbGVTaXplJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWF4Tm9PZkZpbGVzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycy5sZW5ndGggPiAwID8gdmFsaWRhdG9ycyA6IG51bGwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoa2V5ID09PSAnY2hpbGRRdWVzdGlvbnMnID8gW10gOiBudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEhhbmRsZSBvcHRpb25zIEZvcm1BcnJheVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNDb250cm9sID0gZm9ybS5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc1J1bGUgPSBjdXJyZW50UnVsZXNbJ29wdGlvbnMnXTtcclxuXHJcbiAgICAgICAgaWYgKCFvcHRpb25zUnVsZT8udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wuY2xlYXIoKTtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNWYWxpZGF0b3IgPSBvcHRpb25zUnVsZT8ucmVxdWlyZWQgPyAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnMgPSAoY29udHJvbC52YWx1ZSB8fCBbXSkuZmlsdGVyKChvcHQ6IGFueSkgPT4gb3B0LmlzQWN0aXZlICE9PSBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmVPcHRpb25zLmxlbmd0aCA+IDAgPyBudWxsIDogeyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgIH0gOiBudWxsO1xyXG5cclxuICAgICAgICBvcHRpb25zQ29udHJvbC5zZXRWYWxpZGF0b3JzKG9wdGlvbnNWYWxpZGF0b3IpO1xyXG5cclxuICAgICAgICBjb25zdCBzaG93V2VpZ2h0YWdlID0gb3B0aW9uc1J1bGU/LnNob3dXZWlnaHRhZ2U7XHJcbiAgICAgICAgY29uc3Qgc2hvd1JlbWFya3MgPSBvcHRpb25zUnVsZT8uc2hvd1JlbWFya3M7XHJcblxyXG4gICAgICAgIG9wdGlvbnNDb250cm9sLmNvbnRyb2xzLmZvckVhY2gob3B0R3JvdXAgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3ZWlnaHRDdHJsID0gb3B0R3JvdXAuZ2V0KCd3ZWlnaHQnKTtcclxuICAgICAgICAgICAgY29uc3QgcmVtYXJrc0N0cmwgPSBvcHRHcm91cC5nZXQoJ3JlbWFya3NSZXF1aXJlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFzaG93V2VpZ2h0YWdlKSB3ZWlnaHRDdHJsPy5zZXRWYWx1ZSgwLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIGlmICghc2hvd1JlbWFya3MpIHJlbWFya3NDdHJsPy5zZXRWYWx1ZShmYWxzZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICAgICAgd2VpZ2h0Q3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJlbWFya3NDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgb3B0aW9uc0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0ZpZWxkKGZpZWxkTmFtZTogc3RyaW5nLCBuZXN0ZWRQcm9wPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25UeXBlID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGlmICghcXVlc3Rpb25UeXBlIHx8ICF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV0gfHwgIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXVtmaWVsZE5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5lc3RlZFByb3ApIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdW2ZpZWxkTmFtZV1bbmVzdGVkUHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXVtmaWVsZE5hbWVdPy52aXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCk6IEZvcm1BcnJheSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRPcHRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2godGhpcy5jcmVhdGVPcHRpb24oKSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlT3B0aW9uKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCByZW1vdmVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmF0KGluZGV4KTtcclxuICAgICAgICBjb25zdCByZW1vdmVkT3B0aW9uSWQgPSByZW1vdmVkT3B0aW9uLmdldCgnaWQnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvblV1aWQgPSByZW1vdmVkT3B0aW9uLmdldCgndXVpZCcpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCB1bmlxdWVJZCA9IHJlbW92ZWRPcHRpb25JZCB8fCByZW1vdmVkT3B0aW9uVXVpZDtcclxuXHJcbiAgICAgICAgaWYgKHJlbW92ZWRPcHRpb25JZCkge1xyXG4gICAgICAgICAgICByZW1vdmVkT3B0aW9uLmdldCgnaXNBY3RpdmUnKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZm9yRWFjaChnID0+IHtcclxuICAgICAgICAgICAgaWYgKGcub3B0aW9uSWQgPT09IHVuaXF1ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICBnLm9wdGlvbklkID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBtYXhDdHJsID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKTtcclxuICAgICAgICBpZiAobWF4Q3RybCAmJiBtYXhDdHJsLnZhbHVlICE9PSBudWxsICYmIG1heEN0cmwudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBtYXhDdHJsLnZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnMuY29udHJvbHMuZmlsdGVyKG9wdCA9PiBvcHQuZ2V0KCdpc0FjdGl2ZScpPy52YWx1ZSAhPT0gZmFsc2UpLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKE51bWJlcihtYXhDdHJsLnZhbHVlKSA+IGFjdGl2ZU9wdGlvbnNDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgbWF4Q3RybC5zZXRWYWx1ZShhY3RpdmVPcHRpb25zQ291bnQgfHwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlT3B0aW9uKCk6IEZvcm1Hcm91cCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBpZDogWzBdLFxyXG4gICAgICAgICAgICB1dWlkOiBbZ2VuZXJhdGVVdWlkKCldLFxyXG4gICAgICAgICAgICBvcHRpb25MYWJlbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgd2VpZ2h0OiBbMF0sXHJcbiAgICAgICAgICAgIHJlbWFya3NSZXF1aXJlZDogW2ZhbHNlXSxcclxuICAgICAgICAgICAgaXNBY3RpdmU6IFt0cnVlXSxcclxuICAgICAgICAgICAgY2hpbGRRdWVzdGlvbkxpc3Q6IFtbXV1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxvd09ubHlOdW1iZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja01heFZhbChldmVudDogYW55LCBjb250cm9sOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICBsZXQgdmFsID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHZhbCA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdG90YWxNYXJrcztcclxuICAgICAgICAgICAgY29udHJvbD8uc2V0VmFsdWUodG90YWxNYXJrcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja01heE9wdGlvbnNWYWwoZXZlbnQ6IGFueSwgY29udHJvbDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZpbHRlcihvcHQgPT4gb3B0LmdldCgnaXNBY3RpdmUnKT8udmFsdWUgIT09IGZhbHNlKS5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHZhbCA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgIGlmICh2YWwgPiBhY3RpdmVPcHRpb25zQ291bnQpIHtcclxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gYWN0aXZlT3B0aW9uc0NvdW50O1xyXG4gICAgICAgICAgICBjb250cm9sPy5zZXRWYWx1ZShhY3RpdmVPcHRpb25zQ291bnQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW1hZ2VFcnJvckhhbmRsZXIoZXZlbnQ6IGFueSwgZmlsZVBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFZGl0Q2hpbGRRdWVzdGlvbihjaGlsZFF1ZXN0aW9uPzogQXNzZXNzbWVudFF1ZXN0aW9uLCBpbmRleD86IG51bWJlciwgZ3JvdXBJZD86IHN0cmluZykge1xyXG4gICAgICAgIC8vIFNhdmUgY3VycmVudCBwYXJlbnQgc3RhdGVcclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBkZWVwQ2xvbmUodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIoZm9ybVZhbHVlLnRvdGFsTWFya3MpIHx8IDA7XHJcbiAgICAgICAgY29uc3Qgc2hvd1dlaWdodGFnZSA9IHRoaXMuc2hvd0ZpZWxkKCdvcHRpb25zJywgJ3Nob3dXZWlnaHRhZ2UnKTtcclxuXHJcbiAgICAgICAgaWYgKHNob3dXZWlnaHRhZ2UgJiYgdG90YWxNYXJrcyA+IDAgJiYgZm9ybVZhbHVlLm9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3JtVmFsdWUub3B0aW9ucy5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdC53ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvcHQud2VpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0LndlaWdodCA9IHBhcnNlRmxvYXQoKChOdW1iZXIob3B0LndlaWdodCkgLyB0b3RhbE1hcmtzKSAqIDEwMCkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25EYXRhID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2Uuc2V0UXVlc3Rpb25EVE8oZm9ybVZhbHVlLCB0aGlzLnF1ZXN0aW9uRGV0YWlscyk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKHtcclxuICAgICAgICAgICAgcGFyZW50Rm9ybVZhbHVlOiB7IC4uLnF1ZXN0aW9uRGF0YSwgY2hpbGRRdWVzdGlvbnM6IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWUgfSxcclxuICAgICAgICAgICAgZWRpdGluZ1F1ZXN0aW9uSW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgICBhZGRpbmdUb0dyb3VwSWQ6IGdyb3VwSWRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgZm9ybSBmb3IgY2hpbGRcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5yZXNldCh7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJycsXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJycsXHJcbiAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gdmlzaWJpbGl0eTogdHJ1ZSxcclxuICAgICAgICAgICAgdG90YWxNYXJrczogbnVsbCxcclxuICAgICAgICAgICAgbWluQ2hhcmFjdGVyQ291bnQ6IG51bGwsXHJcbiAgICAgICAgICAgIG1heENoYXJhY3RlckNvdW50OiBudWxsLFxyXG4gICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZPcHRpb246IG51bGwsXHJcbiAgICAgICAgICAgIG1pbmltdW1OdW1iZXJPZk9wdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IG51bGwsXHJcbiAgICAgICAgICAgIG1heE5vT2ZGaWxlczogbnVsbCxcclxuICAgICAgICAgICAgY3VzdG9tUmVnZXg6ICcnLFxyXG4gICAgICAgICAgICBoaW50VGV4dDogJycsXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uTWVkaWE6ICcnLFxyXG4gICAgICAgICAgICBjaGlsZFF1ZXN0aW9uczogW10sXHJcbiAgICAgICAgICAgIHNraWxsQ29kZXM6IFtdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRyb2wgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgd2hpbGUgKG9wdGlvbnNDb250cm9sLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5yZW1vdmVBdCgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXBwbHlEeW5hbWljVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGlmIChjaGlsZFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVGb3JtKGNoaWxkUXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ2hpbGRRdWVzdGlvbihpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCBkZWxldGVkQ2hpbGQgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlW2luZGV4XTtcclxuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZvckVhY2gob3B0ID0+IHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkTGlzdCA9IFsuLi4ob3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW10pXTtcclxuICAgICAgICAgICAgY2hpbGRMaXN0ID0gY2hpbGRMaXN0LmZpbHRlcigoaWQ6IHN0cmluZyB8IG51bWJlcikgPT4gaWQgIT09IGRlbGV0ZWRDaGlsZC5pZCk7XHJcbiAgICAgICAgICAgIG9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnNldFZhbHVlKGNoaWxkTGlzdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgICAgIGcucXVlc3Rpb25JZHMgPSBnLnF1ZXN0aW9uSWRzLmZpbHRlcihxaWQgPT4gcWlkICE9PSBkZWxldGVkQ2hpbGQuaWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3VwcyA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maWx0ZXIoZyA9PiBnLnF1ZXN0aW9uSWRzLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wdGlvbklkKG9wdDogYW55KTogc3RyaW5nIHwgbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gb3B0LmdldCgnaWQnKT8udmFsdWUgPyBvcHQuZ2V0KCdpZCcpPy52YWx1ZSA6IG9wdC5nZXQoJ3V1aWQnKT8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRRdWVzdGlvbkJ5SWQoaWQ6IHN0cmluZyB8IG51bWJlcik6IEFzc2Vzc21lbnRRdWVzdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWU/LmZpbmQoKHE6IEFzc2Vzc21lbnRRdWVzdGlvbikgPT4gcS5pZCA9PT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkUXVlc3Rpb25JbmRleChpZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZT8uZmluZEluZGV4KChxOiBBc3Nlc3NtZW50UXVlc3Rpb24pID0+IHEuaWQgPT09IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDaGlsZFF1ZXN0aW9uQnlJZChpZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q2hpbGRRdWVzdGlvbkluZGV4KGlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUNoaWxkUXVlc3Rpb24oaW5kZXgsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRDaGlsZFF1ZXN0aW9uR3JvdXBzKGNoaWxkUXVlc3Rpb25zOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3VwcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFF1ZXN0aW9uSWRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29udHJvbHMuZm9yRWFjaChvcHQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25JZCA9IHRoaXMuZ2V0T3B0aW9uSWQob3B0KTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRMaXN0ID0gb3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW107XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hpbGRMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVVdWlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IG9wdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWRzOiBbLi4uY2hpbGRMaXN0XVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3QuZm9yRWFjaCgoaWQ6IGFueSkgPT4gcHJvY2Vzc2VkUXVlc3Rpb25JZHMuYWRkKGlkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2hpbGRRdWVzdGlvbnMuZm9yRWFjaChjcSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjcS5pZCAmJiAhcHJvY2Vzc2VkUXVlc3Rpb25JZHMuaGFzKGNxLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZVV1aWQoKSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25JZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkczogW2NxLmlkXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkdyb3VwT3B0aW9uQ2hhbmdlKGdyb3VwSWQ6IHN0cmluZywgbmV3T3B0aW9uSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwpIHtcclxuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZpbmRJbmRleChnID0+IGcuaWQgPT09IGdyb3VwSWQpO1xyXG4gICAgICAgIGlmIChncm91cEluZGV4ID09PSAtMSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzW2dyb3VwSW5kZXhdO1xyXG5cclxuICAgICAgICBjb25zdCBvbGRPcHRpb25JZCA9IGdyb3VwLm9wdGlvbklkO1xyXG5cclxuICAgICAgICBpZiAob2xkT3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkT3B0ID0gdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZpbmQob3B0ID0+IHRoaXMuZ2V0T3B0aW9uSWQob3B0KSA9PT0gb2xkT3B0aW9uSWQpO1xyXG4gICAgICAgICAgICBpZiAob2xkT3B0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRMaXN0ID0gWy4uLihvbGRPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXSldO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0ID0gY2hpbGRMaXN0LmZpbHRlcihpZCA9PiAhZ3JvdXAucXVlc3Rpb25JZHMuaW5jbHVkZXMoaWQgYXMgYW55KSk7XHJcbiAgICAgICAgICAgICAgICBvbGRPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy5zZXRWYWx1ZShjaGlsZExpc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBleGlzdGluZ0dyb3VwID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZpbmQoZyA9PiBnLmlkICE9PSBncm91cElkICYmIGcub3B0aW9uSWQgPT09IG5ld09wdGlvbklkKTtcclxuXHJcbiAgICAgICAgaWYgKGV4aXN0aW5nR3JvdXAgJiYgbmV3T3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgZXhpc3RpbmdHcm91cC5xdWVzdGlvbklkcy5wdXNoKC4uLmdyb3VwLnF1ZXN0aW9uSWRzKTtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLnNwbGljZShncm91cEluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBncm91cC5vcHRpb25JZCA9IG5ld09wdGlvbklkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5ld09wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09wdCA9IHRoaXMub3B0aW9ucy5jb250cm9scy5maW5kKG9wdCA9PiB0aGlzLmdldE9wdGlvbklkKG9wdCkgPT09IG5ld09wdGlvbklkKTtcclxuICAgICAgICAgICAgaWYgKG5ld09wdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkTGlzdCA9IFsuLi4obmV3T3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW10pXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoWy4uLmNoaWxkTGlzdCwgLi4uZ3JvdXAucXVlc3Rpb25JZHNdKTtcclxuICAgICAgICAgICAgICAgIG5ld09wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnNldFZhbHVlKEFycmF5LmZyb20oc2V0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ29CYWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRBbmRQb3B1bGF0ZShzdGF0ZT8ucGFyZW50Rm9ybVZhbHVlKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldEFuZFBvcHVsYXRlKHBhcmVudFZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5yZXNldCgpO1xyXG5cclxuICAgICAgICBjb25zdCBvcHRpb25zQ29udHJvbCA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB3aGlsZSAob3B0aW9uc0NvbnRyb2wubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLnJlbW92ZUF0KDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0ocGFyZW50VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyICYmIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5Q29kZShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbT8uY29kZSAhPSBudWxsID8gJ2MnICsgaXRlbS5jb2RlIDogJ2knICsgaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUNvbnRyb2woaW5kZXg6IG51bWJlciwgY29udHJvbDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUdyb3VwSWQoaW5kZXg6IG51bWJlciwgZ3JvdXA6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBncm91cD8uaWQgIT0gbnVsbCA/ICdnJyArIGdyb3VwLmlkIDogJ2knICsgaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeVF1ZXN0aW9uSWQoaW5kZXg6IG51bWJlciwgaWQ6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBpZCAhPSBudWxsID8gJ3EnICsgaWQgOiAnaScgKyBpbmRleDtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IHZoLTEwMCBwb3NpdGlvbi1yZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+IDAgfHwgaXNDaGlsZFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLTMgcHgtMiBjb2wtYXV0byBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtQzhEQUY5IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGQtbWQtZmxleCBkLW5vbmVcIj5cclxuICAgICAgICA8cCBjbGFzcz1cIm0tMCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggdmVydGljYWwtdGV4dFwiPlxyXG4gICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hJTERfUVVFU1RJT04nXX19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGhlYWRlclxyXG4gICAgICAgICAgICBjbGFzcz1cInAtMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBvc2l0aW9uLXN0aWNreSB0b3AtMCBjb2wtMTIgYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICA8cCAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIiBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IGQtbWQtaW5saW5lIGQtbm9uZVwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklOUFVUX0ZJRUxEX1NFVFRJTkdTJ119fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiZ29CYWNrKClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBib3JkZXItMCBvdXRsaW5lLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNCBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5HT19CQUNLJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9nby1iYWNrLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5HT19CQUNLJ119fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LW1kLWVuZCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25TdWJtaXQoKVwiIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmcgfHwgaXNMb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1idG4tcHJpbWFyeSBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydvcGFjaXR5LTAnOiBpc1N1Ym1pdHRpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TQVZFX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1N1Ym1pdHRpbmdcIiBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGFzc2Vzc21lbnQtc3Bpbm5lci13aGl0ZVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkLW1kLW5vbmVcIiAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIiBtYXQtZGlhbG9nLWNsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Nsb3NlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGFpbmVyIGNsYXNzPVwiY29sLTEyIHB5LTQgcHgtbWQtNCBweC0zIGZsZXgtZ3Jvdy0xIG92ZXJmbG93LXktYXV0byBmb3JtLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwicXVlc3Rpb25zRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIGNvbC0xMlwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UWVBFJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvblR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlNFTEVDVF9RVUVTVElPTl9UWVBFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1tYXQtc2VsZWN0IGNvbC0xMiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlc3Rpb25UeXBlczsgdHJhY2tCeTogdHJhY2tCeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidHlwZT8uY29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3R5cGU/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+UXVlc3Rpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGFwcC10ZXh0LWVkaXRvciBbcHJlVGV4dF09XCJxdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgncXVlc3Rpb25UZXh0Jyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVGV4dCcpPy5wYXRjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX1FVRVNUSU9OJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1jdXN0b20tYW5ndWxhci1lZGl0b3Itd2hpdGUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIic4cmVtJ1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblRleHQnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblRleHQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwb3NpdGlvbi1yZWxhdGl2ZSBtdC0zXCIgKm5nSWY9XCJzaG93RmllbGQoJ3F1ZXN0aW9uTWVkaWEnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvbk1lZGlhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfUVVFU1RJT05fTUVESUEnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5oYXNFcnJvcigncGF0dGVybicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5JTlZBTElEX1VSTCddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wIGNvbC0xMiBwYi00XCIgKm5nSWY9XCJzaG93RmllbGQoJ21pbkNoYXJhY3RlckNvdW50JykgfHwgc2hvd0ZpZWxkKCdtYXhDaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcHMtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtaW5DaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NSU5fQ0hBUkFDVEVSX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5DaGFyYWN0ZXJDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNIQVJBQ1RFUlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5DQU5OT1RfQkVfWkVSTyddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4Q2hhcmFjdGVyQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX0NIQVJBQ1RFUl9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4Q2hhcmFjdGVyQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSEFSQUNURVJTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/Lmhhc0Vycm9yKCdsZXNzVGhhbk9yRXF1YWxNaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9MSU1JVF9HUkVBVEVSJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LTAgY29sLTEyIHBiLTRcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4RmlsZVNpemUnKSB8fCBzaG93RmllbGQoJ21heE5vT2ZGaWxlcycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcHMtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhGaWxlU2l6ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfRklMRV9TSVpFJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhGaWxlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy50b3VjaGVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1CJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwZS0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21heE5vT2ZGaWxlcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfTk9fT0ZfRklMRVMnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1heE5vT2ZGaWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy50b3VjaGVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJTEVTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTJcIiAqbmdJZj1cInNob3dGaWVsZCgnY3VzdG9tUmVnZXgnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNVU1RPTV9SRUdFWCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImN1c3RvbVJlZ2V4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfQ1VTVE9NX1JFR0VYJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2N1c3RvbVJlZ2V4Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiICpuZ0lmPVwic2hvd0ZpZWxkKCd0b3RhbE1hcmtzJykgJiYgIWlzQ2hpbGQgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlRPVEFMX01BUktTJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidG90YWxNYXJrc1wiIHBsYWNlaG9sZGVyPVwiMFwiIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BUktTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMCBjb2wtMTIgcGItNFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnbWluaW11bU51bWJlck9mT3B0aW9uJykgfHwgc2hvd0ZpZWxkKCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBzLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWluaW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1JTl9PUFRJT05fU0VMRUNUX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5pbXVtTnVtYmVyT2ZPcHRpb25cIiBwbGFjZWhvbGRlcj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk9QVElPTlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXSB8fCAnTGltaXQgY2Fubm90IGJlIDAnfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4aW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BWF9PUFRJT05fU0VMRUNUX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhpbXVtTnVtYmVyT2ZPcHRpb25cIiBbcGxhY2Vob2xkZXJdPVwib3B0aW9ucy5sZW5ndGggfHwgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpOyBjaGVja01heE9wdGlvbnNWYWwoJGV2ZW50LCBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5PUFRJT05TJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ10gfHwgJ0xpbWl0IGNhbm5vdCBiZSAwJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5oYXNFcnJvcignbGVzc1RoYW5PckVxdWFsTWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0xJTUlUX0dSRUFURVInXSB8fCAnTWF4IGxpbWl0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gbWluIGxpbWl0J319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTIgbXQtbWQtM1wiICpuZ0lmPVwic2hvd0ZpZWxkKCdvcHRpb25zJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9ucy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgKm5nSWY9XCJvcHRpb24uZ2V0KCdpc0FjdGl2ZScpPy52YWx1ZSAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS1tZC0wIHB5LTMgYm9yZGVyLWJvdHRvbSBib3JkZXItbWQtMCBjb2wtMTIgZC1mbGV4IGZsZXgtd3JhcCBmbGV4LW1kLW5vd3JhcCBhbGlnbi1pdGVtcy1tZC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLW1kLTQgZ2FwLTNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZCBmbGV4LW1kLWdyb3ctMSBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC1tZC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucHQtbWQtM109XCJpID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBwLTIgYm9yZGVyLWdyZXktdGVuLTIgbXQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm9wdGlvbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9PUFRJT04nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGJvcmRlci0wIG91dGxpbmUtMCBiZy10cmFuc3BhcmVudCBpbnB1dC1mb2N1cyBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1tZC1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9jbG9zZS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5nZXQoJ29wdGlvbkxhYmVsJyk/LmludmFsaWQgJiYgb3B0aW9uLmdldCgnb3B0aW9uTGFiZWwnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1dlaWdodGFnZScpICYmICFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2l4IG1iLTIgbWItbWQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGlkZGVuLWxhYmVsJzogaSA+IDB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5XRUlHSFRBR0UnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgKGlucHV0KT1cImNoZWNrTWF4VmFsKCRldmVudCwgb3B0aW9uLmdldCgnd2VpZ2h0JykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid2VpZ2h0XCIgKHdoZWVsKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgcHktbWQtMSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBvdXRsaW5lLTAgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC1tYXJrcy1pbnB1dCBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuV0VJR0hUQUdFJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1JlbWFya3MnKSAmJiAhaXNDaGlsZCAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCIgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zaXggbWItMiBtYi1tZC0zIHBiLW1kLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hpZGRlbi1sYWJlbCc6IGkgPiAwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUkVNQVJLUyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVtYXJrc1JlcXVpcmVkXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVtYXJrc1JlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbWQtYmxvY2sgcHQtM1wiIFtjbGFzcy5jdXN0b20tbWFyZ2luXT1cImkgPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Nsb3NlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkT3B0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGJnLXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGJvcmRlci0wIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX09QVElPTiddfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTQgY29sLTEyIGJvcmRlci10b3BcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ2NoaWxkUXVlc3Rpb25zJykgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMCAmJiAhaXNDaGlsZCAmJiAhc3RhbmRhbG9uZU1vZGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSElMRF9RVUVTVElPTlMnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIG1hdFRvb2x0aXA9XCJ7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hJTERfUVVFU1RJT05TX0lORk8nXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwQ2xhc3M9XCJhc3Nlc3NtZW50LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5JTkZPJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvaW5mby5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiBjaGlsZFF1ZXN0aW9uR3JvdXBzOyBsZXQgZ3JvdXBJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5R3JvdXBJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgcC0zIG15LTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdGhyZWUgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zXCIgKm5nSWY9XCJvcHRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQVNTSUdORURfT1BUSU9OJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJncm91cC5vcHRpb25JZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uR3JvdXBPcHRpb25DaGFuZ2UoZ3JvdXAuaWQsICRldmVudC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX09QVElPTl9UT19MSU5LJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1tYXQtc2VsZWN0IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZSBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiIFt2YWx1ZV09XCJudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PTkUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHQgb2Ygb3B0aW9ucy5jb250cm9sczsgbGV0IG9wSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIm9wdC5nZXQoJ2lzQWN0aXZlJyk/LnZhbHVlICE9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiIFt2YWx1ZV09XCJnZXRPcHRpb25JZChvcHQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC5nZXQoJ29wdGlvbkxhYmVsJyk/LnZhbHVlIHx8ICgnT3B0aW9uICcgKyAob3BJbmRleCArIDEpKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uSWQgb2YgZ3JvdXAucXVlc3Rpb25JZHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlRdWVzdGlvbklkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDaGlsZFF1ZXN0aW9uQnlJZChxdWVzdGlvbklkKSBhcyBjaGlsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMSBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5RVUVTVElPTiddfX0ge3tpICsgMX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uREVMRVRFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ2hpbGRRdWVzdGlvbkJ5SWQoY2hpbGQuaWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2RlbGV0ZS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJjaGlsZD8ucXVlc3Rpb25UZXh0Py5bMF0/LnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRFZGl0Q2hpbGRRdWVzdGlvbihjaGlsZCwgZ2V0Q2hpbGRRdWVzdGlvbkluZGV4KGNoaWxkLmlkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJnLXdoaXRlIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZEVkaXRDaGlsZFF1ZXN0aW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBncm91cC5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYm9yZGVyLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBiZy10cmFuc3BhcmVudCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgb3V0bGluZS0wIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9NT1JFJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkRWRpdENoaWxkUXVlc3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgY29sLTEyIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gbXQtMyBib3JkZXItQURDOUY2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQ0hJTERfUVVFU1RJT04nXX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS00IGNvbC0xMiBib3JkZXItdG9wXCIgKm5nSWY9XCJzaG93RmllbGQoJ2hpbnRUZXh0JylcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfSElOVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGFwcC10ZXh0LWVkaXRvciBbcHJlVGV4dF09XCJxdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgnaGludFRleHQnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJxdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgnaGludFRleHQnKT8ucGF0Y2hWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9ISU5UJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1jdXN0b20tYW5ndWxhci1lZGl0b3Itd2hpdGUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIic4cmVtJ1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdoaW50VGV4dCcpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2hpbnRUZXh0Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS00IGNvbC0xMiBib3JkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJRUxEU19TRVRUSU5HUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWSddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1laWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWV9ERVNDJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgbmFtZT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzTWFuZGF0b3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnaXNGaWx0ZXJFbmFibGVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUxURVJfRU5BQkxFRCddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1laWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJTFRFUl9FTkFCTEVEX0RFU0MnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBuYW1lPVwiaXNGaWx0ZXJFbmFibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzRmlsdGVyRW5hYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgY29sLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnaXNGaWx0ZXJFbmFibGVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnaXNGaWx0ZXJFbmFibGVkJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5RVUVTVElPTl9OQU1FJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInF1ZXN0aW9uU3ViVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlFVRVNUSU9OX05BTUUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBjb2wtMTJcIiAqbmdJZj1cIiFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDAgJiYgKHNraWxsc0xpc3Q/Lmxlbmd0aCA/PyAwKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BUF9TS0lMTFMnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJza2lsbENvZGVzXCIgbXVsdGlwbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX1NLSUxMUyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cImFzc2Vzc21lbnQtY2hlY2tib3hlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtbWF0LXNlbGVjdCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiICpuZ0Zvcj1cImxldCBza2lsbCBvZiBza2lsbHNMaXN0OyB0cmFja0J5OiB0cmFja0J5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2tpbGw/LmNvZGVcIj57e3NraWxsPy5sYWJlbHM/LlswXT8udGV4dH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
812
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL21vZHVsZXMvYXNzZXNzbWVudC1tYWtlci9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvYXNzZXNzbWVudC1idWlsZGVyL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRbkUsTUFBTSxPQUFPLDBCQUEwQjtJQTZCbkMsWUFDWSxXQUF3QixFQUN4Qix3QkFBa0QsRUFDbEQsc0JBQThDLEVBQy9DLFNBQW1ELEVBQzFCLFVBQWU7UUFKdkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQy9DLGNBQVMsR0FBVCxTQUFTLENBQTBDO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQUs7UUFqQ25ELGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUE4QixF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dUpBa0N2QixlQUFlOzRHQWxDbEIsMEJBQTBCLHlSQ2hCdkMscTV1Q0E2Y007NEZEN2JPLDBCQUEwQjtrQkFOdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUscUNBQXFDO29CQUNsRCxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztpQkFDckQ7OzBCQW9DUSxNQUFNOzJCQUFDLGVBQWU7NENBM0JHLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQW9CQyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgUXVlc3Rpb25UeXBlLCBSZWZEYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXNzZXNzbWVudC1tYWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25QYXBlclNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi1wYXBlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LWJ1aWxkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlZXBDbG9uZSwgZ2VuZXJhdGVVdWlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItYXBwLWFzc2Vzc21lbnQtYnVpbGRlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICBxdWVzdGlvblR5cGVzOiBRdWVzdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgcXVlc3Rpb25EZXRhaWxzOiBBc3Nlc3NtZW50UXVlc3Rpb24gfCBudWxsID0gbnVsbDtcclxuICAgIHJ1bGVzOiBhbnkgPSB7fTtcclxuICAgIHF1ZXN0aW9uU3RhY2s6IHsgcGFyZW50Rm9ybVZhbHVlOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGVkaXRpbmdRdWVzdGlvbkluZGV4PzogbnVtYmVyLCBhZGRpbmdUb0dyb3VwSWQ/OiBzdHJpbmcgfVtdID0gW107XHJcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxDb250YWluZXInKSBzY3JvbGxDb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIGNoaWxkUXVlc3Rpb25Hcm91cHM6IHsgaWQ6IHN0cmluZywgb3B0aW9uSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwsIHF1ZXN0aW9uSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIH1bXSA9IFtdO1xyXG5cclxuICAgIHF1ZXN0aW9uc0Zvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICAgIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPiA9IHt9O1xyXG4gICAgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLy8gcGFyZW50UXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGFzc2Vzc21lbnRJZDogbnVtYmVyID0gMDtcclxuICAgIHN0YW5kYWxvbmVNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpc0xvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlzU3VibWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbWVkaWFVcGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIG1lZGlhRXJyb3I6IHN0cmluZyA9ICcnO1xyXG4gICAgc2tpbGxzTGlzdDogUmVmRGF0YVtdID0gW107XHJcblxyXG4gICAgLy8gYWNjZXB0ZWQgcXVlc3Rpb24tbWVkaWEgdXBsb2FkczogaW1hZ2VzL3ZpZGVvcyB1cCB0byA1IE1CXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9NRURJQV9TSVpFID0gNSAqIDEwMjQgKiAxMDI0O1xyXG4gICAgQFZpZXdDaGlsZCgnbWVkaWFGaWxlSW5wdXQnKSBtZWRpYUZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBhc3Nlc3NtZW50QnVpbGRlclNlcnZpY2U6IEFzc2Vzc21lbnRCdWlsZGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRNYWtlclNlcnZpY2U6IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFzc2Vzc21lbnRCdWlsZGVyQ29tcG9uZW50PixcclxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRpYWxvZ0RhdGE6IGFueSxcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IHRoaXMuZGlhbG9nRGF0YT8ubGFiZWxDb25maWc7XHJcbiAgICAgICAgdGhpcy5pbWFnZUNvbmZpZyA9IHRoaXMuZGlhbG9nRGF0YT8uaW1hZ2VDb25maWc7XHJcbiAgICAgICAgdGhpcy5ydWxlcyA9IHRoaXMuZGlhbG9nRGF0YT8ucnVsZXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblR5cGVzID0gdGhpcy5kaWFsb2dEYXRhPy5xdWVzdGlvblR5cGVzO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0gdGhpcy5kaWFsb2dEYXRhPy5xdWVzdGlvbkJhbms7XHJcbiAgICAgICAgdGhpcy5pc0NoaWxkID0gdGhpcy5kaWFsb2dEYXRhPy5pc0NoaWxkO1xyXG4gICAgICAgIHRoaXMuc2tpbGxzTGlzdCA9IHRoaXMuZGlhbG9nRGF0YT8uc2tpbGxzTGlzdCB8fCBbXTtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRJZCA9IHRoaXMuZGlhbG9nRGF0YT8uYXNzZXNzbWVudElkO1xyXG4gICAgICAgIHRoaXMuc3RhbmRhbG9uZU1vZGUgPSB0aGlzLmRpYWxvZ0RhdGE/LnN0YW5kYWxvbmVNb2RlIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNMb2NrZWQgPSB0aGlzLmRpYWxvZ0RhdGE/LmlzTG9ja2VkIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLnF1ZXN0aW9uRGV0YWlscykge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uRGV0YWlscyA9IGRlZXBDbG9uZSh0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uRGV0YWlscyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0dXBGb3JtR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RHluYW1pY1ZhbGlkYXRvcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tIFF1ZXN0aW9uIG1lZGlhOiBVUkwgb3IgZGlyZWN0IGltYWdlL3ZpZGVvIHVwbG9hZCAoPD0gNSBNQikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICB0cmlnZ2VyTWVkaWFVcGxvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tZWRpYUZpbGVJbnB1dD8ubmF0aXZlRWxlbWVudD8uY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1lZGlhRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQ/LnRhcmdldD8uZmlsZXM/LlswXTtcclxuICAgICAgICAvLyByZXNldCB0aGUgaW5wdXQgc28gc2VsZWN0aW5nIHRoZSBzYW1lIGZpbGUgYWdhaW4gcmUtdHJpZ2dlcnMgY2hhbmdlXHJcbiAgICAgICAgaWYgKHRoaXMubWVkaWFGaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVkaWFFcnJvciA9ICcnO1xyXG4gICAgICAgIGlmICghZmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzSW1hZ2VPclZpZGVvID0gL14oaW1hZ2V8dmlkZW8pXFwvL2kudGVzdChmaWxlLnR5cGUpO1xyXG4gICAgICAgIGlmICghaXNJbWFnZU9yVmlkZW8pIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNZWRpYUVycm9yKHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5JTlZBTElEX01FRElBX1RZUEUnXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMuTUFYX01FRElBX1NJWkUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNZWRpYUVycm9yKHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5GSUxFX1NJWkVfRVhDRUVERUQnXT8ucmVwbGFjZSgnW1NJWkVdJywgKHRoaXMuTUFYX01FRElBX1NJWkUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDApKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGxvYWRNZWRpYShmaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvd3MgdGhlIG1lZGlhIGVycm9yIGlubGluZSBpbiB0aGUgZGlhbG9nIGFuZCBhbHNvIHN1cmZhY2VzIGl0IHZpYSB0aGUgaG9zdCBzbmFja2Jhci4gKi9cclxuICAgIHByaXZhdGUgc2V0TWVkaWFFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1lZGlhRXJyb3IgPSBtZXNzYWdlIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVkaWFFcnJvciwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZE1lZGlhKGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgZW50aXR5VHlwZTogJ0VOVElUWV9UWVBFLkFTU0VTU01FTlRfUVVFU1RJT04nLFxyXG4gICAgICAgICAgICBpc1B1YmxpYzogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5tZWRpYVVwbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnVwbG9hZEF0dGFjaG1lbnQoZm9ybURhdGEsIHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVVwbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYUVycm9yID0gJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBkYXRhPy5jb21wbGV0ZVVSTCB8fCBkYXRhPy5zaWduZWRVUkwgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uc2V0VmFsdWUodXJsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVVwbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNZWRpYUVycm9yKHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5GSUxFX1VQTE9BRF9GQUlMRUQnXSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQT1NUJyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVDaGlsZFF1ZXN0aW9uTGlzdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NoaWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdW5pcXVlSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25EZXRhaWxzPy5kZWZhdWx0T3B0aW9uc0xpc3Q/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5mb3JFYWNoKGlkID0+IHVuaXF1ZUlkcy5hZGQoaWQpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odW5pcXVlSWRzKT8ubWFwKGlkID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYW5rW2lkXSA/IGRlZXBDbG9uZSh0aGlzLnF1ZXN0aW9uQmFua1tpZF0pIDogbnVsbDtcclxuICAgICAgICB9KT8uZmlsdGVyKEJvb2xlYW4pIGFzIEFzc2Vzc21lbnRRdWVzdGlvbltdO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRm9ybUdyb3VwKCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBxdWVzdGlvblN1YlRleHQ6IFsnJ10sXHJcbiAgICAgICAgICAgIGlzRmlsdGVyRW5hYmxlZDogW2ZhbHNlXSxcclxuICAgICAgICAgICAgaXNNYW5kYXRvcnk6IFtmYWxzZV0sXHJcbiAgICAgICAgICAgIC8vIHZpc2liaWxpdHk6IFt0cnVlXSxcclxuICAgICAgICAgICAgdG90YWxNYXJrczogW251bGxdLFxyXG4gICAgICAgICAgICBtaW5DaGFyYWN0ZXJDb3VudDogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhDaGFyYWN0ZXJDb3VudDogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZPcHRpb246IFtudWxsXSxcclxuICAgICAgICAgICAgbWluaW11bU51bWJlck9mT3B0aW9uOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heE5vT2ZGaWxlczogW251bGxdLFxyXG4gICAgICAgICAgICBjdXN0b21SZWdleDogWycnXSxcclxuICAgICAgICAgICAgaGludFRleHQ6IFsnJ10sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uTWVkaWE6IFsnJ10sXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxyXG4gICAgICAgICAgICBjaGlsZFF1ZXN0aW9uczogW1tdXSxcclxuICAgICAgICAgICAgc2tpbGxDb2RlczogW1tdXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUR5bmFtaWNWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVGb3JtKHRoaXMucXVlc3Rpb25EZXRhaWxzLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQ2hpbGRRdWVzdGlvbkdyb3VwcyhbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBvcHVsYXRlRm9ybShxdWVzdGlvbkRldGFpbHM6IEFzc2Vzc21lbnRRdWVzdGlvbiwgYnVpbGRDaGlsZEdyb3VwczogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvbkRldGFpbHMpIHJldHVybjtcclxuICAgICAgICBjb25zdCBjaGlsZFF1ZXN0aW9ucyA9IHF1ZXN0aW9uRGV0YWlscz8uY2hpbGRRdWVzdGlvbnMgfHwgdGhpcy5nZW5lcmF0ZUNoaWxkUXVlc3Rpb25MaXN0KCk7XHJcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZXRRdWVzdGlvbkRUTyh7IC4uLnF1ZXN0aW9uRGV0YWlscywgY2hpbGRRdWVzdGlvbnMgfSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAucGF0Y2hWYWx1ZShmb3JtRGF0YSk7XHJcbiAgICAgICAgaWYgKGZvcm1EYXRhLm9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKGZvcm1EYXRhLnRvdGFsTWFya3MpIHx8IDA7XHJcbiAgICAgICAgICAgIGZvcm1EYXRhLm9wdGlvbnMuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdEdyb3VwID0gdGhpcy5jcmVhdGVPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmICh0b3RhbE1hcmtzID4gMCAmJiBvcHQud2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3B0LndlaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdC53ZWlnaHQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKG9wdC53ZWlnaHQpICogdG90YWxNYXJrcykgLyAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3B0R3JvdXAucGF0Y2hWYWx1ZShvcHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0R3JvdXApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJ1aWxkQ2hpbGRHcm91cHMpIHtcclxuICAgICAgICAgICAgdGhpcy5idWlsZENoaWxkUXVlc3Rpb25Hcm91cHMoY2hpbGRRdWVzdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xvY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULldBUk5JTkcuUVVFU1RJT05fTE9DS0VEJ10gfHwgJ1RoaXMgcXVlc3Rpb24gaXMgcGFydCBvZiBhIHB1Ymxpc2hlZCBhc3Nlc3NtZW50IGFuZCBjYW5ub3QgYmUgZWRpdGVkLicsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5mbydcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcih0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8udmFsdWUpIHx8IDA7XHJcbiAgICAgICAgY29uc3QgcVR5cGUgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBvcHRpb25zVmFsdWVzID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJyk/LnZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IHNob3dXZWlnaHRhZ2UgPSB0aGlzLnNob3dGaWVsZCgnb3B0aW9ucycsICdzaG93V2VpZ2h0YWdlJyk7XHJcblxyXG4gICAgICAgIGlmIChzaG93V2VpZ2h0YWdlICYmIHRvdGFsTWFya3MgPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbFdlaWdodHMgPSAwO1xyXG4gICAgICAgICAgICBsZXQgaGFzSW52YWxpZFdlaWdodCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9uc1ZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdC5pc0FjdGl2ZSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdyA9IE51bWJlcihvcHQud2VpZ2h0KSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHcgPiB0b3RhbE1hcmtzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzSW52YWxpZFdlaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0b3RhbFdlaWdodHMgKz0gdztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGhhc0ludmFsaWRXZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRvIGtlZXAgd2l0aGluIGV4aXN0aW5nIHN0eWxlcywgZW1pdHRpbmcgZGVmYXVsdCBlcnJvciB3aXRoIG91ciBzcGVjaWZpYyBtZXNzYWdlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuT1BUSU9OX1NDT1JFX0dSRUFURVJfVEhBTl9UT1RBTF9NQVJLUyddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLk1VTFRJX1NFTEVDVCcgJiYgdG90YWxXZWlnaHRzID4gdG90YWxNYXJrcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlNVTV9PRl9PUFRJT05fU0NPUkVTX0dSRUFURVJfVEhBTl9UT1RBTF9NQVJLUyddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGRlZXBDbG9uZSh0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNob3dXZWlnaHRhZ2UgJiYgdG90YWxNYXJrcyA+IDAgJiYgZm9ybVZhbHVlLm9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3JtVmFsdWUub3B0aW9ucy5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdC53ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvcHQud2VpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0LndlaWdodCA9IHBhcnNlRmxvYXQoKChOdW1iZXIob3B0LndlaWdodCkgLyB0b3RhbE1hcmtzKSAqIDEwMCkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIGNoaWxkIHF1ZXN0aW9uIGxvZ2ljXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5xdWVzdGlvblN0YWNrW3RoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGF0ZT8uZWRpdGluZ1F1ZXN0aW9uSW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5wYXJlbnRGb3JtVmFsdWUuY2hpbGRRdWVzdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRGb3JtVmFsdWUuY2hpbGRRdWVzdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRRdWVzdGlvbiA9IHN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9uc1tzdGF0ZS5lZGl0aW5nUXVlc3Rpb25JbmRleF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2Uuc2V0UXVlc3Rpb25EVE8oZm9ybVZhbHVlLCBjaGlsZFF1ZXN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBhd2FpdCB0aGlzLnVwZGF0ZVF1ZXN0aW9uKHBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9uc1tzdGF0ZS5lZGl0aW5nUXVlc3Rpb25JbmRleF0gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rW3F1ZXN0aW9uLmlkXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUEFUQ0gnLCBwYXlsb2FkIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIEFkZCBuZXcgY2hpbGQgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2Uuc2V0UXVlc3Rpb25EVE8oZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZVF1ZXN0aW9uKHBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPy5wYXJlbnRGb3JtVmFsdWU/LmNoaWxkUXVlc3Rpb25zPy5wdXNoKHF1ZXN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rW3F1ZXN0aW9uLmlkXSA9IHF1ZXN0aW9uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZpbmQoKGc6IGFueSkgPT4gZy5pZCA9PT0gc3RhdGUuYWRkaW5nVG9Hcm91cElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdycCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwLnF1ZXN0aW9uSWRzPy5wdXNoKHF1ZXN0aW9uPy5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JwLm9wdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0ID0gc3RhdGUucGFyZW50Rm9ybVZhbHVlPy5kZWZhdWx0T3B0aW9uc0xpc3Q/LmZpbmQoKG86IGFueSkgPT4gKG8uaWQgfHwgby51dWlkKSA9PSBncnAub3B0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmNoaWxkUXVlc3Rpb25MaXN0ID0gb3B0LmNoaWxkUXVlc3Rpb25MaXN0IHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2hpbGRRdWVzdGlvbkxpc3QucHVzaChxdWVzdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZVV1aWQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25JZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkczogW3F1ZXN0aW9uPy5pZF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUE9TVCcsIHBheWxvYWQgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlLXBvcHVsYXRlIHBhcmVudCBmb3JtXHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRBbmRQb3B1bGF0ZShzdGF0ZT8ucGFyZW50Rm9ybVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25EVE8gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUsIHRoaXMucXVlc3Rpb25EZXRhaWxzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBsb2NhbCB0ZW1wbGF0ZSB0cmVlIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uRGV0YWlscz8uaWQpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25EVE8gPSBhd2FpdCB0aGlzLnVwZGF0ZVF1ZXN0aW9uKHF1ZXN0aW9uRFRPKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25EVE8/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rW3F1ZXN0aW9uRFRPLmlkXSA9IHF1ZXN0aW9uRFRPXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5RVUVTVElPTl9VUERBVEVEX1NVQ0NFU1MnXSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgc3VjY2VzczogdHJ1ZSwgcXVlc3Rpb246IHF1ZXN0aW9uRFRPIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcsIHBheWxvYWQ6IHF1ZXN0aW9uRFRPIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YW5kYWxvbmVNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVN0YW5kYWxvbmVRdWVzdGlvbihxdWVzdGlvbkRUTyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU9yRWRpdEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHF1ZXN0aW9uRFRPKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVN0YW5kYWxvbmVRdWVzdGlvbihxdWVzdGlvbkRUTzogQXNzZXNzbWVudFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uRFRPKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rW3Jlcy5pZF0gPSByZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5RVUVTVElPTl9DUkVBVEVEX1NVQ0NFU1MnXSB8fCAnUXVlc3Rpb24gY3JlYXRlZCBzdWNjZXNzZnVsbHknLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YW5kYWxvbmVNb2RlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQT1NUJywgcGF5bG9hZDogcXVlc3Rpb25EVE8gfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjcmVhdGVRdWVzdGlvbihwYXlsb2FkOiBhbnkpOiBQcm9taXNlPEFzc2Vzc21lbnRRdWVzdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5jcmVhdGVRdWVzdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4gcmVzb2x2ZShyZXMgYXMgQXNzZXNzbWVudFF1ZXN0aW9uKSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiByZWplY3QoZXJyKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVRdWVzdGlvbihwYXlsb2FkOiBhbnkpOiBQcm9taXNlPEFzc2Vzc21lbnRRdWVzdGlvbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaFF1ZXN0aW9uKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiByZXNvbHZlKHJlcyBhcyBBc3Nlc3NtZW50UXVlc3Rpb24pLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlamVjdChlcnIpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZU9yRWRpdEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pIHtcclxuICAgICAgICBjb25zdCBxdWVzdGlvblBhcGVyID0gZGVlcENsb25lKHRoaXMuZGlhbG9nRGF0YT8uYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKTtcclxuICAgICAgICBjb25zdCBzZWN0aW9uUXVlc3Rpb24gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVNlY3Rpb25RdWVzdGlvbihxdWVzdGlvbik7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZ0RhdGE/LnNlY3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBxdWVzdGlvblBhcGVyPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTZXF1ZW5jZSA9IGxpc3Q/Lmxlbmd0aCA/IGxpc3RbbGlzdC5sZW5ndGggLSAxXS5vcmRlck5vIHx8IDAgOiAwO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTZWN0aW9uID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuY3JlYXRlTmV3U2VjdGlvbihsYXN0U2VxdWVuY2UgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIG5ld1NlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5wdXNoKHNlY3Rpb25RdWVzdGlvbik7XHJcblxyXG4gICAgICAgICAgICBxdWVzdGlvblBhcGVyPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LnB1c2gobmV3U2VjdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvblJlZiA9IHF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZmluZCgoc2VjdGlvbjogUXVlc3Rpb25QYXBlclNlY3Rpb24pID0+IHNlY3Rpb24/LmlkID09IHRoaXMuZGlhbG9nRGF0YT8uc2VjdGlvbkRldGFpbHM/LmlkKTtcclxuICAgICAgICAgICAgc2VjdGlvblJlZj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LnB1c2goc2VjdGlvblF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uUGFwZXJEVE8gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVF1ZXN0aW9uUGFwZXJEVE8ocXVlc3Rpb25QYXBlciwgdGhpcy5xdWVzdGlvbkJhbmspO1xyXG4gICAgICAgIGNvbnN0IGFzc2Vzc21lbnREVE8gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZUFzc2Vzc21lbnREVE8odGhpcy5hc3Nlc3NtZW50SWQsIHF1ZXN0aW9uUGFwZXJEVE8pO1xyXG5cclxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBhc3Nlc3NtZW50OiBhc3Nlc3NtZW50RFRPLFxyXG4gICAgICAgICAgICBxdWVzdGlvblBhcGVyOiBxdWVzdGlvblBhcGVyRFRPXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcGlDYWxsID0gdGhpcy5hc3Nlc3NtZW50SWRcclxuICAgICAgICAgICAgPyB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihwYXlsb2FkKVxyXG4gICAgICAgICAgICA6IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5jcmVhdGVBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihwYXlsb2FkKTtcclxuXHJcbiAgICAgICAgYXBpQ2FsbC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBhc3Nlc3NtZW50SWQ6IHJlcz8uYXNzZXNzbWVudD8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25QYXBlcjogcmVzPy5xdWVzdGlvblBhcGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uTWFwOiByZXM/LnF1ZXN0aW9uTWFwXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiB0aGlzLmFzc2Vzc21lbnRJZCA/ICdQQVRDSCcgOiAnUE9TVCcsIHBheWxvYWQgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlEeW5hbWljVmFsaWRhdG9ycygpIHtcclxuICAgICAgICBpZiAoIXRoaXMucnVsZXMgfHwgT2JqZWN0LmtleXModGhpcy5ydWxlcykubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCBxVHlwZSA9IGZvcm0uZ2V0KCdxdWVzdGlvblR5cGUnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFJ1bGVzID0gdGhpcy5ydWxlc1txVHlwZV0gfHwge307XHJcblxyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkQ29udHJvbHMgPSBuZXcgU2V0KFsncXVlc3Rpb25UeXBlJywgJ3F1ZXN0aW9uVGV4dCcsICdvcHRpb25zJywgJ3Zpc2liaWxpdHknLCAnaXNNYW5kYXRvcnknLCAncXVlc3Rpb25TdWJUZXh0JywgJ3NraWxsQ29kZXMnXSk7XHJcblxyXG4gICAgICAgIC8vIEhhbmRsZSBub3JtYWwgY29udHJvbHNcclxuICAgICAgICBPYmplY3QuZW50cmllcyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChba2V5LCBjb250cm9sXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXhjbHVkZWRDb250cm9scy5oYXMoa2V5KSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcnVsZSA9IGN1cnJlbnRSdWxlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJ1bGU/LnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBydWxlPy5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3F1ZXN0aW9uTWVkaWEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXihodHRwcz86XFwvXFwvKT8oW1xcZGEtelxcLi1dKylcXC4oW2EtelxcLl17Miw2fSkoW1xcL1xcdyBcXC4tXSopKlxcLz8oXFw/W15cXHNdKik/JC9pKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWluQ2hhcmFjdGVyQ291bnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKDEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdtYXhDaGFyYWN0ZXJDb3VudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY3RybCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5DdHJsID0gY3RybC5wYXJlbnQ/LmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVmFsID0gbWluQ3RybD8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbCA9IGN0cmwudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5WYWwgIT09IG51bGwgJiYgbWluVmFsICE9PSB1bmRlZmluZWQgJiYgbWluVmFsICE9PSAnJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsICE9PSBudWxsICYmIG1heFZhbCAhPT0gdW5kZWZpbmVkICYmIG1heFZhbCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIobWF4VmFsKSA8PSBOdW1iZXIobWluVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGxlc3NUaGFuT3JFcXVhbE1pbjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21heGltdW1OdW1iZXJPZk9wdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY3RybCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5DdHJsID0gY3RybC5wYXJlbnQ/LmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pblZhbCA9IG1pbkN0cmw/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhWYWwgPSBjdHJsLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluVmFsICE9PSBudWxsICYmIG1pblZhbCAhPT0gdW5kZWZpbmVkICYmIG1pblZhbCAhPT0gJycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbCAhPT0gbnVsbCAmJiBtYXhWYWwgIT09IHVuZGVmaW5lZCAmJiBtYXhWYWwgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKG1heFZhbCkgPD0gTnVtYmVyKG1pblZhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsZXNzVGhhbk9yRXF1YWxNaW46IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdtYXhGaWxlU2l6ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21heE5vT2ZGaWxlcycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMubGVuZ3RoID4gMCA/IHZhbGlkYXRvcnMgOiBudWxsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKGtleSA9PT0gJ2NoaWxkUXVlc3Rpb25zJyA/IFtdIDogbnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBIYW5kbGUgb3B0aW9ucyBGb3JtQXJyYXlcclxuICAgICAgICBjb25zdCBvcHRpb25zQ29udHJvbCA9IGZvcm0uZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNSdWxlID0gY3VycmVudFJ1bGVzWydvcHRpb25zJ107XHJcblxyXG4gICAgICAgIGlmICghb3B0aW9uc1J1bGU/LnZpc2libGUpIHtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvcHRpb25zVmFsaWRhdG9yID0gb3B0aW9uc1J1bGU/LnJlcXVpcmVkID8gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25zID0gKGNvbnRyb2wudmFsdWUgfHwgW10pLmZpbHRlcigob3B0OiBhbnkpID0+IG9wdC5pc0FjdGl2ZSAhPT0gZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWN0aXZlT3B0aW9ucy5sZW5ndGggPiAwID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgICAgICB9IDogbnVsbDtcclxuXHJcbiAgICAgICAgb3B0aW9uc0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhvcHRpb25zVmFsaWRhdG9yKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hvd1dlaWdodGFnZSA9IG9wdGlvbnNSdWxlPy5zaG93V2VpZ2h0YWdlO1xyXG4gICAgICAgIGNvbnN0IHNob3dSZW1hcmtzID0gb3B0aW9uc1J1bGU/LnNob3dSZW1hcmtzO1xyXG5cclxuICAgICAgICBvcHRpb25zQ29udHJvbC5jb250cm9scy5mb3JFYWNoKG9wdEdyb3VwID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd2VpZ2h0Q3RybCA9IG9wdEdyb3VwLmdldCgnd2VpZ2h0Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbWFya3NDdHJsID0gb3B0R3JvdXAuZ2V0KCdyZW1hcmtzUmVxdWlyZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghc2hvd1dlaWdodGFnZSkgd2VpZ2h0Q3RybD8uc2V0VmFsdWUoMCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICBpZiAoIXNob3dSZW1hcmtzKSByZW1hcmtzQ3RybD8uc2V0VmFsdWUoZmFsc2UsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgICAgIHdlaWdodEN0cmw/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICByZW1hcmtzQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG9wdGlvbnNDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgbmVzdGVkUHJvcD86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uVHlwZSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZTtcclxuICAgICAgICBpZiAoIXF1ZXN0aW9uVHlwZSB8fCAhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdIHx8ICF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV1bZmllbGROYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXN0ZWRQcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXVtmaWVsZE5hbWVdW25lc3RlZFByb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gISF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV1bZmllbGROYW1lXT8udmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpOiBGb3JtQXJyYXkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkT3B0aW9uKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKHRoaXMuY3JlYXRlT3B0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZU9wdGlvbihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvbiA9IHRoaXMub3B0aW9ucy5hdChpbmRleCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvbklkID0gcmVtb3ZlZE9wdGlvbi5nZXQoJ2lkJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWRPcHRpb25VdWlkID0gcmVtb3ZlZE9wdGlvbi5nZXQoJ3V1aWQnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlSWQgPSByZW1vdmVkT3B0aW9uSWQgfHwgcmVtb3ZlZE9wdGlvblV1aWQ7XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmVkT3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgcmVtb3ZlZE9wdGlvbi5nZXQoJ2lzQWN0aXZlJyk/LnNldFZhbHVlKGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnLm9wdGlvbklkID09PSB1bmlxdWVJZCkge1xyXG4gICAgICAgICAgICAgICAgZy5vcHRpb25JZCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgbWF4Q3RybCA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk7XHJcbiAgICAgICAgaWYgKG1heEN0cmwgJiYgbWF4Q3RybC52YWx1ZSAhPT0gbnVsbCAmJiBtYXhDdHJsLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWF4Q3RybC52YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZpbHRlcihvcHQgPT4gb3B0LmdldCgnaXNBY3RpdmUnKT8udmFsdWUgIT09IGZhbHNlKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChOdW1iZXIobWF4Q3RybC52YWx1ZSkgPiBhY3RpdmVPcHRpb25zQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIG1heEN0cmwuc2V0VmFsdWUoYWN0aXZlT3B0aW9uc0NvdW50IHx8IG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZU9wdGlvbigpOiBGb3JtR3JvdXAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgaWQ6IFswXSxcclxuICAgICAgICAgICAgdXVpZDogW2dlbmVyYXRlVXVpZCgpXSxcclxuICAgICAgICAgICAgb3B0aW9uTGFiZWw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHdlaWdodDogWzBdLFxyXG4gICAgICAgICAgICByZW1hcmtzUmVxdWlyZWQ6IFtmYWxzZV0sXHJcbiAgICAgICAgICAgIGlzQWN0aXZlOiBbdHJ1ZV0sXHJcbiAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25MaXN0OiBbW11dXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWxsb3dPbmx5TnVtYmVycyhldmVudDogYW55KSB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tNYXhWYWwoZXZlbnQ6IGFueSwgY29udHJvbDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcih0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8udmFsdWUpIHx8IDA7XHJcbiAgICAgICAgbGV0IHZhbCA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgIGlmICh2YWwgPiB0b3RhbE1hcmtzKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRvdGFsTWFya3M7XHJcbiAgICAgICAgICAgIGNvbnRyb2w/LnNldFZhbHVlKHRvdGFsTWFya3MsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tNYXhPcHRpb25zVmFsKGV2ZW50OiBhbnksIGNvbnRyb2w6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnNDb3VudCA9IHRoaXMub3B0aW9ucy5jb250cm9scy5maWx0ZXIob3B0ID0+IG9wdC5nZXQoJ2lzQWN0aXZlJyk/LnZhbHVlICE9PSBmYWxzZSkubGVuZ3RoO1xyXG4gICAgICAgIGxldCB2YWwgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICBpZiAodmFsID4gYWN0aXZlT3B0aW9uc0NvdW50KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IGFjdGl2ZU9wdGlvbnNDb3VudDtcclxuICAgICAgICAgICAgY29udHJvbD8uc2V0VmFsdWUoYWN0aXZlT3B0aW9uc0NvdW50LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgICAgICBldmVudC50YXJnZXQuc3JjID0gZmlsZVBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRWRpdENoaWxkUXVlc3Rpb24oY2hpbGRRdWVzdGlvbj86IEFzc2Vzc21lbnRRdWVzdGlvbiwgaW5kZXg/OiBudW1iZXIsIGdyb3VwSWQ/OiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBTYXZlIGN1cnJlbnQgcGFyZW50IHN0YXRlXHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZGVlcENsb25lKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKGZvcm1WYWx1ZS50b3RhbE1hcmtzKSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHNob3dXZWlnaHRhZ2UgPSB0aGlzLnNob3dGaWVsZCgnb3B0aW9ucycsICdzaG93V2VpZ2h0YWdlJyk7XHJcblxyXG4gICAgICAgIGlmIChzaG93V2VpZ2h0YWdlICYmIHRvdGFsTWFya3MgPiAwICYmIGZvcm1WYWx1ZS5vcHRpb25zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9ybVZhbHVlLm9wdGlvbnMuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHQud2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3B0LndlaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdC53ZWlnaHQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKG9wdC53ZWlnaHQpIC8gdG90YWxNYXJrcykgKiAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRGF0YSA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSwgdGhpcy5xdWVzdGlvbkRldGFpbHMpO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgIHBhcmVudEZvcm1WYWx1ZTogeyAuLi5xdWVzdGlvbkRhdGEsIGNoaWxkUXVlc3Rpb25zOiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlIH0sXHJcbiAgICAgICAgICAgIGVkaXRpbmdRdWVzdGlvbkluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgYWRkaW5nVG9Hcm91cElkOiBncm91cElkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGZvcm0gZm9yIGNoaWxkXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAucmVzZXQoe1xyXG4gICAgICAgICAgICBxdWVzdGlvblR5cGU6ICcnLFxyXG4gICAgICAgICAgICBxdWVzdGlvblRleHQ6ICcnLFxyXG4gICAgICAgICAgICBpc01hbmRhdG9yeTogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgICAgIHRvdGFsTWFya3M6IG51bGwsXHJcbiAgICAgICAgICAgIG1pbkNoYXJhY3RlckNvdW50OiBudWxsLFxyXG4gICAgICAgICAgICBtYXhDaGFyYWN0ZXJDb3VudDogbnVsbCxcclxuICAgICAgICAgICAgbWF4aW11bU51bWJlck9mT3B0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICBtaW5pbXVtTnVtYmVyT2ZPcHRpb246IG51bGwsXHJcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBudWxsLFxyXG4gICAgICAgICAgICBtYXhOb09mRmlsZXM6IG51bGwsXHJcbiAgICAgICAgICAgIGN1c3RvbVJlZ2V4OiAnJyxcclxuICAgICAgICAgICAgaGludFRleHQ6ICcnLFxyXG4gICAgICAgICAgICBxdWVzdGlvbk1lZGlhOiAnJyxcclxuICAgICAgICAgICAgY2hpbGRRdWVzdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICBza2lsbENvZGVzOiBbXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNDb250cm9sID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHdoaWxlIChvcHRpb25zQ29udHJvbC5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wucmVtb3ZlQXQoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFwcGx5RHluYW1pY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgICBpZiAoY2hpbGRRdWVzdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9ybShjaGlsZFF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUNoaWxkUXVlc3Rpb24oaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZGVsZXRlZENoaWxkID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZVtpbmRleF07XHJcblxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb250cm9scy5mb3JFYWNoKG9wdCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZExpc3QgPSBbLi4uKG9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdKV07XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdCA9IGNoaWxkTGlzdC5maWx0ZXIoKGlkOiBzdHJpbmcgfCBudW1iZXIpID0+IGlkICE9PSBkZWxldGVkQ2hpbGQuaWQpO1xyXG4gICAgICAgICAgICBvcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy5zZXRWYWx1ZShjaGlsZExpc3QpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgICAgICBnLnF1ZXN0aW9uSWRzID0gZy5xdWVzdGlvbklkcy5maWx0ZXIocWlkID0+IHFpZCAhPT0gZGVsZXRlZENoaWxkLmlkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmlsdGVyKGcgPT4gZy5xdWVzdGlvbklkcy5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcHRpb25JZChvcHQ6IGFueSk6IHN0cmluZyB8IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG9wdC5nZXQoJ2lkJyk/LnZhbHVlID8gb3B0LmdldCgnaWQnKT8udmFsdWUgOiBvcHQuZ2V0KCd1dWlkJyk/LnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkUXVlc3Rpb25CeUlkKGlkOiBzdHJpbmcgfCBudW1iZXIpOiBBc3Nlc3NtZW50UXVlc3Rpb24gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlPy5maW5kKChxOiBBc3Nlc3NtZW50UXVlc3Rpb24pID0+IHEuaWQgPT09IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGlsZFF1ZXN0aW9uSW5kZXgoaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWU/LmZpbmRJbmRleCgocTogQXNzZXNzbWVudFF1ZXN0aW9uKSA9PiBxLmlkID09PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ2hpbGRRdWVzdGlvbkJ5SWQoaWQ6IG51bWJlciB8IHVuZGVmaW5lZCwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldENoaWxkUXVlc3Rpb25JbmRleChpZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVDaGlsZFF1ZXN0aW9uKGluZGV4LCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkQ2hpbGRRdWVzdGlvbkdyb3VwcyhjaGlsZFF1ZXN0aW9uczogQXNzZXNzbWVudFF1ZXN0aW9uW10pIHtcclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMgPSBbXTtcclxuICAgICAgICBjb25zdCBwcm9jZXNzZWRRdWVzdGlvbklkcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZvckVhY2gob3B0ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0aGlzLmdldE9wdGlvbklkKG9wdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTGlzdCA9IG9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlVXVpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBvcHRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkczogWy4uLmNoaWxkTGlzdF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0LmZvckVhY2goKGlkOiBhbnkpID0+IHByb2Nlc3NlZFF1ZXN0aW9uSWRzLmFkZChpZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNoaWxkUXVlc3Rpb25zLmZvckVhY2goY3EgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3EuaWQgJiYgIXByb2Nlc3NlZFF1ZXN0aW9uSWRzLmhhcyhjcS5pZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVVdWlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZHM6IFtjcS5pZF1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Hcm91cE9wdGlvbkNoYW5nZShncm91cElkOiBzdHJpbmcsIG5ld09wdGlvbklkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maW5kSW5kZXgoZyA9PiBnLmlkID09PSBncm91cElkKTtcclxuICAgICAgICBpZiAoZ3JvdXBJbmRleCA9PT0gLTEpIHJldHVybjtcclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwc1tncm91cEluZGV4XTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2xkT3B0aW9uSWQgPSBncm91cC5vcHRpb25JZDtcclxuXHJcbiAgICAgICAgaWYgKG9sZE9wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZE9wdCA9IHRoaXMub3B0aW9ucy5jb250cm9scy5maW5kKG9wdCA9PiB0aGlzLmdldE9wdGlvbklkKG9wdCkgPT09IG9sZE9wdGlvbklkKTtcclxuICAgICAgICAgICAgaWYgKG9sZE9wdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkTGlzdCA9IFsuLi4ob2xkT3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW10pXTtcclxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdCA9IGNoaWxkTGlzdC5maWx0ZXIoaWQgPT4gIWdyb3VwLnF1ZXN0aW9uSWRzLmluY2x1ZGVzKGlkIGFzIGFueSkpO1xyXG4gICAgICAgICAgICAgICAgb2xkT3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8uc2V0VmFsdWUoY2hpbGRMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdHcm91cCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maW5kKGcgPT4gZy5pZCAhPT0gZ3JvdXBJZCAmJiBnLm9wdGlvbklkID09PSBuZXdPcHRpb25JZCk7XHJcblxyXG4gICAgICAgIGlmIChleGlzdGluZ0dyb3VwICYmIG5ld09wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGV4aXN0aW5nR3JvdXAucXVlc3Rpb25JZHMucHVzaCguLi5ncm91cC5xdWVzdGlvbklkcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5zcGxpY2UoZ3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXAub3B0aW9uSWQgPSBuZXdPcHRpb25JZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChuZXdPcHRpb25JZCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPcHQgPSB0aGlzLm9wdGlvbnMuY29udHJvbHMuZmluZChvcHQgPT4gdGhpcy5nZXRPcHRpb25JZChvcHQpID09PSBuZXdPcHRpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChuZXdPcHQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZExpc3QgPSBbLi4uKG5ld09wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdKV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KFsuLi5jaGlsZExpc3QsIC4uLmdyb3VwLnF1ZXN0aW9uSWRzXSk7XHJcbiAgICAgICAgICAgICAgICBuZXdPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy5zZXRWYWx1ZShBcnJheS5mcm9tKHNldCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvQmFjaygpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0QW5kUG9wdWxhdGUoc3RhdGU/LnBhcmVudEZvcm1WYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRBbmRQb3B1bGF0ZShwYXJlbnRWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAucmVzZXQoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRyb2wgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgd2hpbGUgKG9wdGlvbnNDb250cm9sLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5yZW1vdmVBdCgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVGb3JtKHBhcmVudFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lciAmJiB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUNvZGUoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0/LmNvZGUgIT0gbnVsbCA/ICdjJyArIGl0ZW0uY29kZSA6ICdpJyArIGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlDb250cm9sKGluZGV4OiBudW1iZXIsIGNvbnRyb2w6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBjb250cm9sO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlHcm91cElkKGluZGV4OiBudW1iZXIsIGdyb3VwOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gZ3JvdXA/LmlkICE9IG51bGwgPyAnZycgKyBncm91cC5pZCA6ICdpJyArIGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlRdWVzdGlvbklkKGluZGV4OiBudW1iZXIsIGlkOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gaWQgIT0gbnVsbCA/ICdxJyArIGlkIDogJ2knICsgaW5kZXg7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCB2aC0xMDAgcG9zaXRpb24tcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPiAwIHx8IGlzQ2hpbGRcIlxyXG4gICAgICAgIGNsYXNzPVwicC0zIHB4LTIgY29sLWF1dG8gYXNzZXNzbWVudC1iZy1wYWxldHRlLUM4REFGOSBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBkLW1kLWZsZXggZC1ub25lXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtLTAgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IHZlcnRpY2FsLXRleHRcIj5cclxuICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNISUxEX1FVRVNUSU9OJ119fVxyXG4gICAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGgtMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxoZWFkZXJcclxuICAgICAgICAgICAgY2xhc3M9XCJwLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwb3NpdGlvbi1zdGlja3kgdG9wLTAgY29sLTEyIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgPHAgKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCIgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBkLW1kLWlubGluZSBkLW5vbmVcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5JTlBVVF9GSUVMRF9TRVRUSU5HUyddfX1cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPiAwXCIgKGNsaWNrKT1cImdvQmFjaygpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gYm9yZGVyLTAgb3V0bGluZS0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTQgYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uR09fQkFDSyddXCJcclxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZ28tYmFjay5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuR09fQkFDSyddfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1tZC1lbmQganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTMgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiaXNTdWJtaXR0aW5nIHx8IGlzTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYnRuLXByaW1hcnkgYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS0wJzogaXNTdWJtaXR0aW5nfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0FWRV9RVUVTVElPTiddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNTdWJtaXR0aW5nXCIgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZSBhc3Nlc3NtZW50LXNwaW5uZXItd2hpdGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZC1tZC1ub25lXCIgKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCIgbWF0LWRpYWxvZy1jbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9jbG9zZS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgI3Njcm9sbENvbnRhaW5lciBjbGFzcz1cImNvbC0xMiBweS00IHB4LW1kLTQgcHgtMyBmbGV4LWdyb3ctMSBvdmVyZmxvdy15LWF1dG8gZm9ybS1jb250YWluZXJcIlxyXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cInF1ZXN0aW9uc0Zvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBjb2wtMTJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVFlQRSddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25UeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5TRUxFQ1RfUVVFU1RJT05fVFlQRSddXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtbWF0LXNlbGVjdCBjb2wtMTIgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHF1ZXN0aW9uVHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInR5cGU/LmNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0eXBlPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlF1ZXN0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGV4dC1lZGl0b3IgW3ByZVRleHRdPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVGV4dCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdxdWVzdGlvblRleHQnKT8ucGF0Y2hWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9RVUVTVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtY3VzdG9tLWFuZ3VsYXItZWRpdG9yLXdoaXRlIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCInOHJlbSdcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UZXh0Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UZXh0Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcG9zaXRpb24tcmVsYXRpdmUgbXQtM1wiICpuZ0lmPVwic2hvd0ZpZWxkKCdxdWVzdGlvbk1lZGlhJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25NZWRpYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX1FVRVNUSU9OX01FRElBJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWR9XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT1IgdXBsb2FkIGFuIGltYWdlIC8gdmlkZW8gKDw9IDUgTUIpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjbWVkaWFGaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS8qLHZpZGVvLypcIiBoaWRkZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25NZWRpYUZpbGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0cmlnZ2VyTWVkaWFVcGxvYWQoKVwiIFtkaXNhYmxlZF09XCJtZWRpYVVwbG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idG4tcHJpbWFyeS10cmFuc3BhcmVudCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBweC0zIHB5LTIgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVkaWFVcGxvYWRpbmdcIiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5VUExPQURfTUVESUEnXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NRURJQV9VUExPQURfSElOVCddIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1lZGlhRXJyb3JcIiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBtZWRpYUVycm9yIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLklOVkFMSURfVVJMJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LTAgY29sLTEyIHBiLTRcIiAqbmdJZj1cInNob3dGaWVsZCgnbWluQ2hhcmFjdGVyQ291bnQnKSB8fCBzaG93RmllbGQoJ21heENoYXJhY3RlckNvdW50JylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwcy0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21pbkNoYXJhY3RlckNvdW50JylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1JTl9DSEFSQUNURVJfTElNSVQnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1pbkNoYXJhY3RlckNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLk5PVF9TRVQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hBUkFDVEVSUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/Lmhhc0Vycm9yKCdtaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcGUtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhDaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfQ0hBUkFDVEVSX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhDaGFyYWN0ZXJDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNIQVJBQ1RFUlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5DQU5OT1RfQkVfWkVSTyddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8uaGFzRXJyb3IoJ2xlc3NUaGFuT3JFcXVhbE1pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0xJTUlUX0dSRUFURVInXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMCBjb2wtMTIgcGItNFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhGaWxlU2l6ZScpIHx8IHNob3dGaWVsZCgnbWF4Tm9PZkZpbGVzJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwcy0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21heEZpbGVTaXplJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BWF9GSUxFX1NJWkUnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1heEZpbGVTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLk5PVF9TRVQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/LnRvdWNoZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUInXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5DQU5OT1RfQkVfWkVSTyddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4Tm9PZkZpbGVzJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BWF9OT19PRl9GSUxFUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4Tm9PZkZpbGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLk5PVF9TRVQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/LnRvdWNoZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklMRVMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiICpuZ0lmPVwic2hvd0ZpZWxkKCdjdXN0b21SZWdleCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ1VTVE9NX1JFR0VYJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tUmVnZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9DVVNUT01fUkVHRVgnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2N1c3RvbVJlZ2V4Jyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2N1c3RvbVJlZ2V4Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY3VzdG9tUmVnZXgnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCIgKm5nSWY9XCJzaG93RmllbGQoJ3RvdGFsTWFya3MnKSAmJiAhaXNDaGlsZCAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVE9UQUxfTUFSS1MnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0b3RhbE1hcmtzXCIgcGxhY2Vob2xkZXI9XCIwXCIgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFSS1MnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wIGNvbC0xMiBwYi00XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpZWxkKCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKSB8fCBzaG93RmllbGQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcHMtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUlOX09QVElPTl9TRUxFQ1RfTElNSVQnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1pbmltdW1OdW1iZXJPZk9wdGlvblwiIHBsYWNlaG9sZGVyPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1BUSU9OUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/Lmhhc0Vycm9yKCdtaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5DQU5OT1RfQkVfWkVSTyddIHx8ICdMaW1pdCBjYW5ub3QgYmUgMCd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcGUtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX09QVElPTl9TRUxFQ1RfTElNSVQnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1heGltdW1OdW1iZXJPZk9wdGlvblwiIFtwbGFjZWhvbGRlcl09XCJvcHRpb25zLmxlbmd0aCB8fCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudCk7IGNoZWNrTWF4T3B0aW9uc1ZhbCgkZXZlbnQsIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk9QVElPTlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXSB8fCAnTGltaXQgY2Fubm90IGJlIDAnfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/Lmhhc0Vycm9yKCdsZXNzVGhhbk9yRXF1YWxNaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfTElNSVRfR1JFQVRFUiddIHx8ICdNYXggbGltaXQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBtaW4gbGltaXQnfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMiBtdC1tZC0zXCIgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwib3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImlcIiAqbmdJZj1cIm9wdGlvbi5nZXQoJ2lzQWN0aXZlJyk/LnZhbHVlICE9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB5LW1kLTAgcHktMyBib3JkZXItYm90dG9tIGJvcmRlci1tZC0wIGNvbC0xMiBkLWZsZXggZmxleC13cmFwIGZsZXgtbWQtbm93cmFwIGFsaWduLWl0ZW1zLW1kLXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtbWQtNCBnYXAtM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kIGZsZXgtbWQtZ3Jvdy0xIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LW1kLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wdC1tZC0zXT1cImkgPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIHAtMiBib3JkZXItZ3JleS10ZW4tMiBtdC0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwib3B0aW9uTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX09QVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvdy0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYm9yZGVyLTAgb3V0bGluZS0wIGJnLXRyYW5zcGFyZW50IGlucHV0LWZvY3VzIHB5LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLW1kLW5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiIChjbGljayk9XCJyZW1vdmVPcHRpb24oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Nsb3NlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmdldCgnb3B0aW9uTGFiZWwnKT8uaW52YWxpZCAmJiBvcHRpb24uZ2V0KCdvcHRpb25MYWJlbCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBtdC0xXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWVsZCgnb3B0aW9ucycsICdzaG93V2VpZ2h0YWdlJykgJiYgIWlzQ2hpbGQgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zaXggbWItMiBtYi1tZC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydoaWRkZW4tbGFiZWwnOiBpID4gMH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLldFSUdIVEFHRSddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiAoaW5wdXQpPVwiY2hlY2tNYXhWYWwoJGV2ZW50LCBvcHRpb24uZ2V0KCd3ZWlnaHQnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3ZWlnaHRcIiAod2hlZWwpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMiBweS1tZC0xIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIG91dGxpbmUtMCBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LW1hcmtzLWlucHV0IGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5XRUlHSFRBR0UnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWVsZCgnb3B0aW9ucycsICdzaG93UmVtYXJrcycpICYmICFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNpeCBtYi0yIG1iLW1kLTMgcGItbWQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGlkZGVuLWxhYmVsJzogaSA+IDB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BUktTJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZW1hcmtzUmVxdWlyZWRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZW1hcmtzUmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1tZC1ibG9jayBwdC0zXCIgW2NsYXNzLmN1c3RvbS1tYXJnaW5dPVwiaSA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVPcHRpb24oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvY2xvc2Uuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRPcHRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYmctdHJhbnNwYXJlbnQgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYm9yZGVyLTAgYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfT1BUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktNCBjb2wtMTIgYm9yZGVyLXRvcFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnY2hpbGRRdWVzdGlvbnMnKSAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwICYmICFpc0NoaWxkICYmICFzdGFuZGFsb25lTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNISUxEX1FVRVNUSU9OUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgbWF0VG9vbHRpcD1cInt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSElMRF9RVUVTVElPTlNfSU5GTyddfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXBDbGFzcz1cImFzc2Vzc21lbnQtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLklORk8nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9pbmZvLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGNoaWxkUXVlc3Rpb25Hcm91cHM7IGxldCBncm91cEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlHcm91cElkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBwLTMgbXktMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10aHJlZSBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTNcIiAqbmdJZj1cIm9wdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BU1NJR05FRF9PUFRJT04nXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cImdyb3VwLm9wdGlvbklkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25Hcm91cE9wdGlvbkNoYW5nZShncm91cC5pZCwgJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5TRUxFQ1RfT1BUSU9OX1RPX0xJTksnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LW1hdC1zZWxlY3QgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJnLXdoaXRlIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgW3ZhbHVlXT1cIm51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTk9ORSddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdCBvZiBvcHRpb25zLmNvbnRyb2xzOyBsZXQgb3BJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwib3B0LmdldCgnaXNBY3RpdmUnKT8udmFsdWUgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgW3ZhbHVlXT1cImdldE9wdGlvbklkKG9wdClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0LmdldCgnb3B0aW9uTGFiZWwnKT8udmFsdWUgfHwgKCdPcHRpb24gJyArIChvcEluZGV4ICsgMSkpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcXVlc3Rpb25JZCBvZiBncm91cC5xdWVzdGlvbklkczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVF1ZXN0aW9uSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENoaWxkUXVlc3Rpb25CeUlkKHF1ZXN0aW9uSWQpIGFzIGNoaWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0xIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OJ119fSB7e2kgKyAxfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5ERUxFVEUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDaGlsZFF1ZXN0aW9uQnlJZChjaGlsZC5pZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZGVsZXRlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImNoaWxkPy5xdWVzdGlvblRleHQ/LlswXT8udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEVkaXRDaGlsZFF1ZXN0aW9uKGNoaWxkLCBnZXRDaGlsZFF1ZXN0aW9uSW5kZXgoY2hpbGQuaWQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYmctd2hpdGUgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkRWRpdENoaWxkUXVlc3Rpb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIGdyb3VwLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBib3JkZXItMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGJnLXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX01PUkUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRFZGl0Q2hpbGRRdWVzdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTMgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBjb2wtMTIgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtdC0zIGJvcmRlci1BREM5RjZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9DSElMRF9RVUVTVElPTiddfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTQgY29sLTEyIGJvcmRlci10b3BcIiAqbmdJZj1cInNob3dGaWVsZCgnaGludFRleHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9ISU5UJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXRleHQtZWRpdG9yIFtwcmVUZXh0XT1cInF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdoaW50VGV4dCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdoaW50VGV4dCcpPy5wYXRjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX0hJTlQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWN1c3RvbS1hbmd1bGFyLWVkaXRvci13aGl0ZSBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiJzhyZW0nXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2hpbnRUZXh0Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnaGludFRleHQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTQgY29sLTEyIGJvcmRlci10b3BcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTIgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklFTERTX1NFVFRJTkdTJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFOREFUT1JZJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LWVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFOREFUT1JZX0RFU0MnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBuYW1lPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaXNNYW5kYXRvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpZWxkKCdpc0ZpbHRlckVuYWJsZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJTFRFUl9FTkFCTEVEJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LWVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklMVEVSX0VOQUJMRURfREVTQyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIG5hbWU9XCJpc0ZpbHRlckVuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaXNGaWx0ZXJFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpZWxkKCdpc0ZpbHRlckVuYWJsZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdpc0ZpbHRlckVuYWJsZWQnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OX05BTUUnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25TdWJUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuUVVFU1RJT05fTkFNRSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNvbC0xMlwiICpuZ0lmPVwiIWlzQ2hpbGQgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMCAmJiAoc2tpbGxzTGlzdD8ubGVuZ3RoID8/IDApID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFQX1NLSUxMUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNraWxsQ29kZXNcIiBtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5TRUxFQ1RfU0tJTExTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwiYXNzZXNzbWVudC1jaGVja2JveGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1tYXQtc2VsZWN0IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgKm5nRm9yPVwibGV0IHNraWxsIG9mIHNraWxsc0xpc3Q7IHRyYWNrQnk6IHRyYWNrQnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJza2lsbD8uY29kZVwiPnt7c2tpbGw/LmxhYmVscz8uWzBdPy50ZXh0fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|