commons-assessment 12.0.2 → 12.0.4
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/README.md +2 -0
- package/bundles/commons-assessment.umd.js +57 -22
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +4 -4
- package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +2 -2
- package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +48 -16
- package/esm2015/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.js +4 -4
- package/esm2015/lib/shared/interfaces/assessment.interface.js +1 -1
- package/fesm2015/commons-assessment.js +54 -22
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-taker/assessment-taker.component.d.ts +7 -10
- package/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.d.ts +1 -1
- package/lib/shared/interfaces/assessment.interface.d.ts +12 -0
- package/package.json +1 -1
- package/src/lib/assets/theme/styles.global.scss +11 -12
|
@@ -67,13 +67,23 @@ export class AssessmentTakerComponent {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
ngOnInit() {
|
|
70
|
+
var _a;
|
|
70
71
|
this.getConfigsFromJSON();
|
|
71
72
|
if (this.previewMode) {
|
|
72
73
|
this.disabled = true;
|
|
73
74
|
}
|
|
74
75
|
if (this.assessmentInstanceId) {
|
|
75
|
-
this.
|
|
76
|
-
|
|
76
|
+
if (!this.assessmentContext) {
|
|
77
|
+
this.showLoader = true;
|
|
78
|
+
this.loadAssessmentData();
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.assessmentQuestionPaperData = this.assessmentContext.assessmentQuestionPaperDTO;
|
|
82
|
+
this.assessmentData = this.assessmentContext.assessment;
|
|
83
|
+
this.questionBank = this.assessmentContext.questionDTOMap;
|
|
84
|
+
this.tenantId = ((_a = this.assessmentData) === null || _a === void 0 ? void 0 : _a.tenantId) || 0;
|
|
85
|
+
this.formSetup();
|
|
86
|
+
}
|
|
77
87
|
}
|
|
78
88
|
}
|
|
79
89
|
getConfigsFromJSON() {
|
|
@@ -155,8 +165,11 @@ export class AssessmentTakerComponent {
|
|
|
155
165
|
}
|
|
156
166
|
}
|
|
157
167
|
const remarkCtrl = new FormControl(remarkVal);
|
|
158
|
-
if (((_h = (_g = this.assesseeResponse) === null || _g === void 0 ? void 0 : _g.assessmentTaken) === null || _h === void 0 ? void 0 : _h.code) === 'ASSESSMENT_TAKEN.COMPLETE' || this.disabled)
|
|
168
|
+
if (((_h = (_g = this.assesseeResponse) === null || _g === void 0 ? void 0 : _g.assessmentTaken) === null || _h === void 0 ? void 0 : _h.code) === 'ASSESSMENT_TAKEN.COMPLETE' || this.disabled) {
|
|
159
169
|
remarkCtrl.disable();
|
|
170
|
+
this.disabled = true;
|
|
171
|
+
}
|
|
172
|
+
;
|
|
160
173
|
group[`${qId}_remarks_${option.id}`] = remarkCtrl;
|
|
161
174
|
}
|
|
162
175
|
(_j = option.childQuestionList) === null || _j === void 0 ? void 0 : _j.forEach((childId) => {
|
|
@@ -240,7 +253,8 @@ export class AssessmentTakerComponent {
|
|
|
240
253
|
let prefilledValue = this.getPrefilledAnswer(qId, isChild, parentId, parentOptionId);
|
|
241
254
|
const control = new FormControl(prefilledValue, validators);
|
|
242
255
|
// Disable if assessment is completed
|
|
243
|
-
if (((_b = (_a = this.assesseeResponse) === null || _a === void 0 ? void 0 : _a.assessmentTaken) === null || _b === void 0 ? void 0 : _b.code) === 'ASSESSMENT_TAKEN.
|
|
256
|
+
if (((_b = (_a = this.assesseeResponse) === null || _a === void 0 ? void 0 : _a.assessmentTaken) === null || _b === void 0 ? void 0 : _b.code) === 'ASSESSMENT_TAKEN.COMPLETE' || this.disabled) {
|
|
257
|
+
this.disabled = true;
|
|
244
258
|
control.disable();
|
|
245
259
|
}
|
|
246
260
|
group[qId] = control;
|
|
@@ -455,7 +469,7 @@ export class AssessmentTakerComponent {
|
|
|
455
469
|
}
|
|
456
470
|
return false;
|
|
457
471
|
}
|
|
458
|
-
goNext(markAsCompleted = true) {
|
|
472
|
+
goNext(markAsCompleted = true, saveData = true) {
|
|
459
473
|
var _a, _b, _c;
|
|
460
474
|
const save = ((_c = (_b = (_a = this.assessmentData) === null || _a === void 0 ? void 0 : _a.assessmentConfigs) === null || _b === void 0 ? void 0 : _b.find(c => c.configKey == 'assesment.config.allowed-partial-response')) === null || _c === void 0 ? void 0 : _c.configValue) == '1';
|
|
461
475
|
const currentSection = this.sectionFormGroups[this.selectedTabIndex];
|
|
@@ -468,13 +482,13 @@ export class AssessmentTakerComponent {
|
|
|
468
482
|
}
|
|
469
483
|
this.sectionErrors[this.selectedTabIndex] = false;
|
|
470
484
|
if (this.selectedTabIndex < this.sectionFormGroups.length - 1) {
|
|
471
|
-
save ? this.save() : this.selectedTabIndex++;
|
|
485
|
+
save && saveData ? this.save() : this.selectedTabIndex++;
|
|
472
486
|
}
|
|
473
487
|
else {
|
|
474
|
-
this.processSubmit(markAsCompleted);
|
|
488
|
+
this.processSubmit(markAsCompleted, saveData);
|
|
475
489
|
}
|
|
476
490
|
}
|
|
477
|
-
processSubmit(markAsCompleted = true) {
|
|
491
|
+
processSubmit(markAsCompleted = true, saveData = true) {
|
|
478
492
|
let firstInvalidIndex = -1;
|
|
479
493
|
this.sectionFormGroups.forEach((group, index) => {
|
|
480
494
|
group.formGroup.markAllAsTouched();
|
|
@@ -498,7 +512,7 @@ export class AssessmentTakerComponent {
|
|
|
498
512
|
this.scrollToFirstInvalidField(firstInvalidIndex);
|
|
499
513
|
return;
|
|
500
514
|
}
|
|
501
|
-
this.save(true, markAsCompleted);
|
|
515
|
+
this.save(true, markAsCompleted, saveData);
|
|
502
516
|
}
|
|
503
517
|
scrollToFirstInvalidField(sectionIndex) {
|
|
504
518
|
setTimeout(() => {
|
|
@@ -518,8 +532,8 @@ export class AssessmentTakerComponent {
|
|
|
518
532
|
}
|
|
519
533
|
}, 100);
|
|
520
534
|
}
|
|
521
|
-
save(goNext = true, markAsCompleted = true) {
|
|
522
|
-
var _a;
|
|
535
|
+
save(goNext = true, markAsCompleted = true, saveData = true) {
|
|
536
|
+
var _a, _b;
|
|
523
537
|
this.isSubmitting = true;
|
|
524
538
|
if (markAsCompleted && this.selectedTabIndex == this.sectionFormGroups.length - 1) {
|
|
525
539
|
this.assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.COMPLETE' };
|
|
@@ -528,10 +542,22 @@ export class AssessmentTakerComponent {
|
|
|
528
542
|
this.assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.INCOMPLETE' };
|
|
529
543
|
}
|
|
530
544
|
const payload = this.responseBuilderService.buildResponsePayload(this.assesseeResponse, this.assessmentQuestionPaperData, this.sectionFormGroups, this.questionBank, this.tenantId);
|
|
531
|
-
|
|
545
|
+
if (!saveData || this.disabled) {
|
|
546
|
+
this.isSubmitting = false;
|
|
547
|
+
this.submitAssessment.emit({
|
|
548
|
+
assesseeId: (_a = this.assesseeResponse) === null || _a === void 0 ? void 0 : _a.id,
|
|
549
|
+
assesseeResponse: payload,
|
|
550
|
+
completed: goNext && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView)
|
|
551
|
+
});
|
|
552
|
+
if (goNext && this.selectedTabIndex < this.sectionFormGroups.length - 1) {
|
|
553
|
+
this.selectedTabIndex++;
|
|
554
|
+
}
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
const apiCall = ((_b = this.assesseeResponse) === null || _b === void 0 ? void 0 : _b.id) ? this.assessmentTakerService.patchAssessment(payload) : this.assessmentTakerService.submitAssessment(payload);
|
|
532
558
|
apiCall.subscribe({
|
|
533
559
|
next: (res) => {
|
|
534
|
-
var _a, _b;
|
|
560
|
+
var _a, _b, _c;
|
|
535
561
|
if (!((_a = this.assesseeResponse) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
536
562
|
this.getAnswersByAiaId(res);
|
|
537
563
|
}
|
|
@@ -539,7 +565,11 @@ export class AssessmentTakerComponent {
|
|
|
539
565
|
this.assesseeResponse = res;
|
|
540
566
|
}
|
|
541
567
|
this.isSubmitting = false;
|
|
542
|
-
this.submitAssessment.emit({
|
|
568
|
+
this.submitAssessment.emit({
|
|
569
|
+
assesseeId: ((_b = this.assesseeResponse) === null || _b === void 0 ? void 0 : _b.id) || res,
|
|
570
|
+
assesseeResponse: ((_c = this.assesseeResponse) === null || _c === void 0 ? void 0 : _c.id) ? this.assesseeResponse : payload,
|
|
571
|
+
completed: goNext && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView)
|
|
572
|
+
});
|
|
543
573
|
if (goNext && this.selectedTabIndex < this.sectionFormGroups.length - 1) {
|
|
544
574
|
this.selectedTabIndex++;
|
|
545
575
|
}
|
|
@@ -600,7 +630,7 @@ export class AssessmentTakerComponent {
|
|
|
600
630
|
}
|
|
601
631
|
}
|
|
602
632
|
AssessmentTakerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentTakerComponent, deps: [{ token: i1.AssessmentTakerService }, { token: i2.FormBuilder }, { token: i3.ResponseBuilderService }, { token: i4.DomSanitizer }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
603
|
-
AssessmentTakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentTakerComponent, selector: "lib-assessment-taker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", showFooter: "showFooter", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", assesseeData: "assesseeData", assessorData: "assessorData", disabled: "disabled", previewMode: "previewMode", verticalView: "verticalView", enableMarks: "enableMarks" }, outputs: { snackbarMessage: "snackbarMessage", submitAssessment: "submitAssessment", stepChanged: "stepChanged" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4 mb-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel\">\r\n <mat-expansion-panel-header class=\"assessment-bg-grey-two h-auto py-3 bg-transparent\">\r\n <mat-panel-title>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-4 px-md-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting\" (click)=\"verticalView ? processSubmit(true) : goNext()\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\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 </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-questionIndex=\"questionIndex\">\r\n <div [formGroup]=\"sectionFormGroups[groupIndex].formGroup\" [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two mb-3\" [ngClass]=\"parentOptionId? '' : 'p-3 assessment-card-border'\"\r\n *ngIf=\"questionBank[questionId] as question\">\r\n <div\r\n class=\"d-flex flex-column flex-md-row justify-content-between gap-2 gap-md-3 align-items-md-start mb-3\">\r\n <div class=\"d-flex gap-md-3 gap-2 align-items-start flex-grow-1\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1 gap-md-2\">\r\n {{questionIndex + 1}}.\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Dropdown Logic -->\r\n <ng-container\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && sectionFormGroups[groupIndex].formGroup.get(question.id + '_marks')\">\r\n <mat-form-field appearance=\"outline\"\r\n class=\"mb-0 assessment-marks-dropdown assessment-text-medium-12\">\r\n <mat-label\r\n class=\"assessment-text-medium-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</mat-label>\r\n <mat-select [formControlName]=\"question.id + '_marks'\">\r\n <mat-option class=\"assessment-text-medium-12\"\r\n *ngFor=\"let mark of getMarksRange(question.id!)\" [value]=\"mark\">\r\n {{mark}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-objective>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-multiselect>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [labelConfig]=\"labelConfig\"\r\n [imageConfig]=\"imageConfig\"></lib-question-type-file-upload>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container *ngIf=\"sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </mat-error>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList\">\r\n\r\n <ng-container\r\n *ngIf=\"isOptionSelected(sectionFormGroups[groupIndex].formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && sectionFormGroups[groupIndex].formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea formControlName=\"{{question.id}}_remarks_{{option.id}}\" rows=\"2\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </mat-error>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n questionIndex: childIndex\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" [formGroup]=\"sectionFormGroups[i].formGroup\" [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}{{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n questionIndex: j\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>", 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-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-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-bold-12{font-weight:700;font-family:var(--assessment-font-family)!important;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-semibold-11{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.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-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-bold-13{font-weight:700;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-regular-14{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-bold-14{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.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-semibold-10{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw);line-height:calc(1rem + .1vw)}.assessment-text-regular-10{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw)!important;line-height:calc(1rem + .1vw)}.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-bold-15{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-regular-16{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.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-bold-16{font-weight:700;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-regular-20{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-bold-20{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-semibold-20{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-20{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.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-regular-18{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .3vw)!important}.assessment-text-bold-18{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw);line-height:calc(1.5rem + .1vw)}.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}.assessment-text-bold-34{overflow-wrap:break-word;font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-medium-34{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-bold-32{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.3rem + .75vw);line-height:calc(1.625rem + .5vw)}.assessment-text-bold-22{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-regular-22{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-semibold-22{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-medium-22{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-24{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-regular-24{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-semibold-24{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-medium-24{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(1.2rem + .75vw)}.assessment-text-regular-26{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-medium-26{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-bold-26{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-semibold-26{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-regular-28{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-medium-28{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-semibold-28{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw);letter-spacing:1}.assessment-text-bold-28{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-regular-30{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw)}.assessment-text-medium-30{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-30{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(2rem + .4vw)}.assessment-text-semibold-30{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw);letter-spacing:.5}.assessment-text-bold-36{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}.assessment-text-semibold-36{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-bold-34{font-size:calc(1.8rem + .15vh);line-height:calc(2.2rem + .15vh)}.assessment-text-bold-32{font-size:calc(1.3rem + 1vh);line-height:calc(1.5rem + 1vh)}.assessment-text-semibold-30{font-size:calc(1.5rem + .4vh);line-height:calc(1.8rem + .4vh)}.assessment-text-medium-24{line-height:2.188rem}.assessment-text-medium-24,.assessment-text-regular-24,.assessment-text-semibold-24,.assessment-text-bold-24,.assessment-text-light-24{font-size:calc(1.3rem + .5vh);line-height:calc(1.8rem + .5vh)}.assessment-text-medium-18,.assessment-text-regular-18,.assessment-text-bold-18,.assessment-text-semibold-18,.assessment-text-light-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-light-16,.assessment-text-bold-16{font-size:calc(.9rem + .3vh)!important;line-height:calc(1.2rem + .3vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16,.assessment-text-regular-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15,.assessment-text-bold-15,.assessment-text-light-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12,.assessment-text-bold-12,.assessment-text-medium-upper-12,.assessment-text-light-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-regular-14,.assessment-text-light-14,.assessment-text-medium-upper-14,.assessment-text-semibold-14,.assessment-text-bold-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,.assessment-text-bold-13,.assessment-text-light-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11,.assessment-text-semibold-11,.assessment-text-bold-11,.assessment-text-light-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .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{height:inherit}.height-without-footer{height:calc(100% - 4.4rem)!important}.z-index-1{z-index:1}.question-info{min-width:15rem;max-width:40vw}@media screen and (max-width: 768px){.question-info{max-width:75vw}}@media screen and (min-width: 768px){.assessment-marks-dropdown{width:6rem}}.youtube-video{aspect-ratio:16/9}\n"], components: [{ type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i12.QuestionTypeShortComponent, selector: "lib-question-type-short", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i13.QuestionTypeLongComponent, selector: "lib-question-type-long", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i14.QuestionTypeEditorComponent, selector: "lib-question-type-editor", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i15.QuestionTypeObjectiveComponent, selector: "lib-question-type-objective", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i16.QuestionTypeMultiselectComponent, selector: "lib-question-type-multiselect", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i17.QuestionTypePreferenceComponent, selector: "lib-question-type-preference", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i18.QuestionTypeFileUploadComponent, selector: "lib-question-type-file-upload", inputs: ["required", "question", "labelConfig", "imageConfig"] }], directives: [{ type: i19.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i19.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i19.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i20.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i20.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayPositions", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayTransformOriginOn"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i9.MatLabel, selector: "mat-label" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i19.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i19.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i9.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2.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: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }], pipes: { "orderBy": i21.OrderByPipe } });
|
|
633
|
+
AssessmentTakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentTakerComponent, selector: "lib-assessment-taker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", showFooter: "showFooter", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", assesseeData: "assesseeData", assessorData: "assessorData", disabled: "disabled", previewMode: "previewMode", verticalView: "verticalView", enableMarks: "enableMarks", assessmentContext: "assessmentContext" }, outputs: { snackbarMessage: "snackbarMessage", submitAssessment: "submitAssessment", stepChanged: "stepChanged" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4 mb-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel\">\r\n <mat-expansion-panel-header class=\"assessment-bg-grey-two h-auto py-3 bg-transparent\">\r\n <mat-panel-title>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-4 px-md-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter && (!previewMode || enableMarks)\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting\" (click)=\"verticalView ? processSubmit(true) : goNext()\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\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 </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-questionIndex=\"questionIndex\">\r\n <div [formGroup]=\"sectionFormGroups[groupIndex].formGroup\" [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two mb-3 assessment-bg-white\"\r\n [ngClass]=\"{'p-3 assessment-card-border': !parentOptionId && !verticalView}\"\r\n *ngIf=\"questionBank[questionId] as question\">\r\n <div\r\n class=\"d-flex flex-column flex-md-row justify-content-between gap-2 gap-md-3 align-items-md-start mb-3\">\r\n <div class=\"d-flex gap-md-3 gap-2 align-items-start flex-grow-1\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1 gap-md-2\">\r\n {{questionIndex + 1}}.\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Dropdown Logic -->\r\n <ng-container\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && sectionFormGroups[groupIndex].formGroup.get(question.id + '_marks')\">\r\n <mat-form-field appearance=\"outline\"\r\n class=\"mb-0 assessment-marks-dropdown assessment-text-medium-12\">\r\n <mat-label\r\n class=\"assessment-text-medium-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</mat-label>\r\n <mat-select [formControlName]=\"question.id + '_marks'\">\r\n <mat-option class=\"assessment-text-medium-12\"\r\n *ngFor=\"let mark of getMarksRange(question.id!)\" [value]=\"mark\">\r\n {{mark}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-objective>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-multiselect>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </div>\r\n\r\n <div class=\"col-12\" *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [labelConfig]=\"labelConfig\"\r\n [imageConfig]=\"imageConfig\"></lib-question-type-file-upload>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container *ngIf=\"sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </mat-error>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList\">\r\n\r\n <ng-container\r\n *ngIf=\"isOptionSelected(sectionFormGroups[groupIndex].formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && sectionFormGroups[groupIndex].formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea formControlName=\"{{question.id}}_remarks_{{option.id}}\" rows=\"2\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </mat-error>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n questionIndex: childIndex\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" [formGroup]=\"sectionFormGroups[i].formGroup\" [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}{{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <div *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index\" class=\"col-12\" [ngClass]=\"{'pb-4': verticalView}\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n questionIndex: j\r\n }\">\r\n </ng-container>\r\n </div>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>", 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-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-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-bold-12{font-weight:700;font-family:var(--assessment-font-family)!important;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-semibold-11{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.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-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-bold-13{font-weight:700;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-regular-14{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-bold-14{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.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-semibold-10{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw);line-height:calc(1rem + .1vw)}.assessment-text-regular-10{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw)!important;line-height:calc(1rem + .1vw)}.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-bold-15{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-regular-16{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.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-bold-16{font-weight:700;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-regular-20{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-bold-20{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-semibold-20{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-20{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.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-regular-18{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .3vw)!important}.assessment-text-bold-18{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw);line-height:calc(1.5rem + .1vw)}.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}.assessment-text-bold-34{overflow-wrap:break-word;font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-medium-34{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-bold-32{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.3rem + .75vw);line-height:calc(1.625rem + .5vw)}.assessment-text-bold-22{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-regular-22{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-semibold-22{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-medium-22{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-24{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-regular-24{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-semibold-24{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-medium-24{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(1.2rem + .75vw)}.assessment-text-regular-26{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-medium-26{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-bold-26{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-semibold-26{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-regular-28{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-medium-28{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-semibold-28{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw);letter-spacing:1}.assessment-text-bold-28{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-regular-30{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw)}.assessment-text-medium-30{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-30{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(2rem + .4vw)}.assessment-text-semibold-30{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw);letter-spacing:.5}.assessment-text-bold-36{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}.assessment-text-semibold-36{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-bold-34{font-size:calc(1.8rem + .15vh);line-height:calc(2.2rem + .15vh)}.assessment-text-bold-32{font-size:calc(1.3rem + 1vh);line-height:calc(1.5rem + 1vh)}.assessment-text-semibold-30{font-size:calc(1.5rem + .4vh);line-height:calc(1.8rem + .4vh)}.assessment-text-medium-24{line-height:2.188rem}.assessment-text-medium-24,.assessment-text-regular-24,.assessment-text-semibold-24,.assessment-text-bold-24,.assessment-text-light-24{font-size:calc(1.3rem + .5vh);line-height:calc(1.8rem + .5vh)}.assessment-text-medium-18,.assessment-text-regular-18,.assessment-text-bold-18,.assessment-text-semibold-18,.assessment-text-light-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-light-16,.assessment-text-bold-16{font-size:calc(.9rem + .3vh)!important;line-height:calc(1.2rem + .3vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16,.assessment-text-regular-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15,.assessment-text-bold-15,.assessment-text-light-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12,.assessment-text-bold-12,.assessment-text-medium-upper-12,.assessment-text-light-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-regular-14,.assessment-text-light-14,.assessment-text-medium-upper-14,.assessment-text-semibold-14,.assessment-text-bold-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,.assessment-text-bold-13,.assessment-text-light-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11,.assessment-text-semibold-11,.assessment-text-bold-11,.assessment-text-light-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .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{height:inherit}.height-without-footer{height:calc(100% - 4.4rem)!important}.z-index-1{z-index:1}.question-info{min-width:15rem;max-width:40vw}@media screen and (max-width: 768px){.question-info{max-width:75vw}}@media screen and (min-width: 768px){.assessment-marks-dropdown{width:6rem}}.youtube-video{aspect-ratio:16/9}\n"], components: [{ type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i12.QuestionTypeShortComponent, selector: "lib-question-type-short", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i13.QuestionTypeLongComponent, selector: "lib-question-type-long", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i14.QuestionTypeEditorComponent, selector: "lib-question-type-editor", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i15.QuestionTypeObjectiveComponent, selector: "lib-question-type-objective", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i16.QuestionTypeMultiselectComponent, selector: "lib-question-type-multiselect", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i17.QuestionTypePreferenceComponent, selector: "lib-question-type-preference", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i18.QuestionTypeFileUploadComponent, selector: "lib-question-type-file-upload", inputs: ["required", "question", "labelConfig", "imageConfig"] }], directives: [{ type: i19.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i19.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i19.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i20.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i20.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayPositions", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayTransformOriginOn"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i9.MatLabel, selector: "mat-label" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i19.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i19.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i9.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2.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: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }], pipes: { "orderBy": i21.OrderByPipe } });
|
|
604
634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentTakerComponent, decorators: [{
|
|
605
635
|
type: Component,
|
|
606
636
|
args: [{
|
|
@@ -630,6 +660,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
630
660
|
type: Input
|
|
631
661
|
}], enableMarks: [{
|
|
632
662
|
type: Input
|
|
663
|
+
}], assessmentContext: [{
|
|
664
|
+
type: Input
|
|
633
665
|
}], snackbarMessage: [{
|
|
634
666
|
type: Output
|
|
635
667
|
}], submitAssessment: [{
|
|
@@ -637,4 +669,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
637
669
|
}], stepChanged: [{
|
|
638
670
|
type: Output
|
|
639
671
|
}] } });
|
|
640
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFlLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXaEgsTUFBTSxPQUFPLHdCQUF3QjtJQTBDbkMsWUFDVSxzQkFBOEMsRUFDOUMsRUFBZSxFQUNmLHNCQUE4QyxFQUM5QyxTQUF1QixFQUN2QixNQUFpQjtRQUpqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQTlDbEIsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRzVCLGlCQUFZLEdBQWdCLEVBQUUsRUFBRSxF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N0MsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUscUJBQXFCO1lBQzVCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2pDLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsY0FBYyxFQUFFLE9BQU87YUFDeEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztzSEEzbEJVLHdCQUF3QjswR0FBeEIsd0JBQXdCLGlnQkNsQnJDLGtuc0JBb1ZjOzRGRGxVRCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsV0FBVyxFQUFFLG1DQUFtQztvQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7aUJBQ2pEOytOQUdVLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFRha2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzZXNzbWVudC10YWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2VCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcmVzcG9uc2UtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VjdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZWN0aW9uLWluc3RydWN0aW9ucy9zZWN0aW9uLWluc3RydWN0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc3Nlc3NlZURUTywgQXNzZXNzb3JEVE8sIEFzc2Vzc21lbnQsIEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvblBhcGVyLCBRdWVzdGlvblBhcGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hc3Nlc3NtZW50LXRha2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudFRha2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgQElucHV0KCkgc2hvd0Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhc3Nlc3NlZURhdGE6IEFzc2Vzc2VlRFRPID0geyBpZDogMCwgYWN0b3JJZDogMCwgYWN0b3JUeXBlOiAnQUNUT1JfVFlQRS5CUklER0VfVVNFUicgfTtcclxuICBASW5wdXQoKSBhc3Nlc3NvckRhdGE6IEFzc2Vzc29yRFRPID0geyBpZDogMCwgYWN0b3JJZDogMCwgYWN0b3JUeXBlOiAnVEVOQU5UJyB9O1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHJldmlld01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB2ZXJ0aWNhbFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbmFibGVNYXJrczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgc25hY2tiYXJNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdpbmZvJyB9PigpO1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRBc3Nlc3NtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHN0ZXBDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGN1cnJlbnRTdGVwSW5kZXg6IG51bWJlciwgdG90YWxTdGVwczogbnVtYmVyLCBpc0xhc3RTdGVwOiBib29sZWFuIH0+KCk7XHJcblxyXG4gIHNob3dMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBxdWVzdGlvbkJhbms6IFJlY29yZDxudW1iZXIsIEFzc2Vzc21lbnRRdWVzdGlvbj4gPSB7fTtcclxuICBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE6IEFzc2Vzc21lbnRRdWVzdGlvblBhcGVyID0ge307XHJcbiAgYXNzZXNzbWVudERhdGE6IEFzc2Vzc21lbnQgPSB7fTtcclxuICBhc3Nlc3NlZVJlc3BvbnNlOiBBc3Nlc3NtZW50SW5zdGFuY2VBc3Nlc3NlRFRPID0ge307XHJcbiAgY29uZmlnc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU3VibWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzZWN0aW9uRm9ybUdyb3VwczogeyBzZWN0aW9uSWQ6IG51bWJlcjsgZm9ybUdyb3VwOiBGb3JtR3JvdXAgfVtdID0gW107XHJcbiAgXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcclxuICBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXg7XHJcbiAgfVxyXG4gIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkluZGV4ICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuZW1pdFN0ZXBEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWN0aW9uRXJyb3JzOiBib29sZWFuW10gPSBbXTtcclxuICB0ZW5hbnRJZDogbnVtYmVyID0gMDtcclxuICB0b29sdGlwU3RhdGU6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50VGFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNlQnVpbGRlclNlcnZpY2U6IFJlc3BvbnNlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDb25maWdzRnJvbUpTT04oKTtcclxuXHJcbiAgICBpZiAodGhpcy5wcmV2aWV3TW9kZSkge1xyXG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCkge1xyXG4gICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRBc3Nlc3NtZW50RGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnc0Zyb21KU09OKCkge1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBsYWJlbENvbmZpZzogdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vbGFiZWxDb25maWcnKSxcclxuICAgICAgaW1hZ2VDb25maWc6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2ltYWdlQ29uZmlnJylcclxuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8ubGFiZWxDb25maWcsIHRoaXMubGFiZWxDb25maWcpO1xyXG4gICAgICB0aGlzLmltYWdlQ29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzPy5pbWFnZUNvbmZpZywgdGhpcy5pbWFnZUNvbmZpZyk7XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRBc3Nlc3NtZW50RGF0YSgpIHtcclxuICAgIGNvbnN0IGFwaUNhbGxzID0ge1xyXG4gICAgICBhc3Nlc3NtZW50RGF0YTogdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldEFzc2Vzc21lbnRDb250ZXh0QnlJZCh0aGlzLmFzc2Vzc21lbnRJZCksXHJcbiAgICAgIC4uLih0aGlzLmFzc2Vzc2VlRGF0YT8uaWQgJiYge1xyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBbnN3ZXJzQnlBaWFJZCh0aGlzLmFzc2Vzc2VlRGF0YS5pZClcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGZvcmtKb2luKGFwaUNhbGxzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEgPSBkYXRhPy5hc3Nlc3NtZW50RGF0YT8uYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEVE87XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50RGF0YSA9IGRhdGE/LmFzc2Vzc21lbnREYXRhPy5hc3Nlc3NtZW50O1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0gZGF0YT8uYXNzZXNzbWVudERhdGE/LnF1ZXN0aW9uRFRPTWFwO1xyXG4gICAgICAgIHRoaXMudGVuYW50SWQgPSBkYXRhPy5hc3Nlc3NtZW50RGF0YT8uYXNzZXNzbWVudD8udGVuYW50SWQ7XHJcbiAgICAgICAgaWYgKGRhdGE/LmFzc2Vzc2VlUmVzcG9uc2UpIHtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IGRhdGE/LmFzc2Vzc2VlUmVzcG9uc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgaWQ6IDAsXHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnRJbnN0YW5jZTogeyBpZDogdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCB9LFxyXG4gICAgICAgICAgICBhc3Nlc3NlZTogdGhpcy5hc3Nlc3NlZURhdGEsXHJcbiAgICAgICAgICAgIGFzc2Vzc29yOiB0aGlzLmFzc2Vzc29yRGF0YSxcclxuICAgICAgICAgICAgYWlhZGVmYXVsdFJlc3BvbnNlTGlzdDogW10sXHJcbiAgICAgICAgICAgIHRlbmFudDogdGhpcy50ZW5hbnRJZFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtU2V0dXAoKTtcclxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmb3JtU2V0dXAoKSB7XHJcbiAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzID0gW107XHJcblxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xyXG5cclxuICAgICAgc2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LmZvckVhY2goc3EgPT4ge1xyXG4gICAgICAgIGNvbnN0IHFJZCA9IHNxLnF1ZXN0aW9uSWQ7XHJcbiAgICAgICAgaWYgKCFxSWQgfHwgIXRoaXMucXVlc3Rpb25CYW5rW3FJZF0pIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG4gICAgICAgIHRoaXMuYWRkQ29udHJvbEZvclF1ZXN0aW9uKGdyb3VwLCBxdWVzdGlvbiwgcXVlc3Rpb24/LmlzTWFuZGF0b3J5KTtcclxuXHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QuZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbi5yZW1hcmtzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAvLyBQcmUtcG9wdWxhdGUgcmVtYXJrcyBpZiB3ZSBoYXZlIGFuc3dlcnMgbWF0Y2hpbmcgdGhpcyBvcHRpb24uXHJcbiAgICAgICAgICAgICAgbGV0IHJlbWFya1ZhbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJlZmlsbGVkT3B0aW9ucyA9IHRoaXMuZ2V0UHJlZmlsbGVkQW5zd2VyKHFJZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHByZWZpbGxlZE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFuc09iaiA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYWlhZGVmYXVsdFJlc3BvbnNlTGlzdD8uZmluZCgoYTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBhLnNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZCA9PT0gcUlkICYmICghYS5jaGlsZFF1ZXN0aW9uSWQgfHwgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IDApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc09iaikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnICYmIHByZWZpbGxlZE9wdGlvbnMuaWQgPT09IChvcHRpb24ub3B0aW9ucz8uaWQgPz8gb3B0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbWFya1ZhbCA9IGFuc09iai5yZW1hcmtzIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwcmVmaWxsZWRPcHRpb25zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nT2JqID0gYW5zT2JqLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0Py5maW5kKChyOiBhbnkpID0+IHIuZGVmYXVsdE9wdGlvbj8ub3B0aW9ucz8uaWQgPT09IChvcHRpb24ub3B0aW9ucz8uaWQgPz8gb3B0aW9uLmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nT2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZW1hcmtWYWwgPSBtYXRjaGluZ09iai5yZW1hcmtzIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZW1hcmtDdHJsID0gbmV3IEZvcm1Db250cm9sKHJlbWFya1ZhbCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYXNzZXNzbWVudFRha2VuPy5jb2RlID09PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScgfHwgdGhpcy5kaXNhYmxlZCkgcmVtYXJrQ3RybC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBbYCR7cUlkfV9yZW1hcmtzXyR7b3B0aW9uLmlkfWBdID0gcmVtYXJrQ3RybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5mb3JFYWNoKChjaGlsZElkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjaGlsZFF1ZXMgPSB0aGlzLnF1ZXN0aW9uQmFua1tjaGlsZElkXTtcclxuICAgICAgICAgICAgICBpZiAoY2hpbGRRdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENvbnRyb2xGb3JRdWVzdGlvbihncm91cCwgY2hpbGRRdWVzLCBmYWxzZSwgdHJ1ZSwgcUlkLCBvcHRpb24ub3B0aW9ucz8uaWQgPz8gb3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGZnID0gdGhpcy5mYi5ncm91cChncm91cCk7XHJcblxyXG4gICAgICBzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8uZm9yRWFjaChzcSA9PiB7XHJcbiAgICAgICAgY29uc3QgcUlkID0gc3EucXVlc3Rpb25JZDtcclxuICAgICAgICBpZiAoIXFJZCB8fCAhdGhpcy5xdWVzdGlvbkJhbmtbcUlkXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXTtcclxuXHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmZy5nZXQocUlkLnRvU3RyaW5nKCkpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8uZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc09wdGlvblNlbGVjdGVkKGZnLCBxdWVzdGlvbiwgb3B0aW9uLm9wdGlvbnM/LmlkKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5yZW1hcmtzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFya0N0cmwgPSBmZy5nZXQoYCR7cUlkfV9yZW1hcmtzXyR7b3B0aW9uLmlkfWApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgcmVtYXJrQ3RybD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmVtYXJrQ3RybD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbWFya0N0cmw/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVtYXJrQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QuZm9yRWFjaCgoY2hpbGRJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlcyA9IHRoaXMucXVlc3Rpb25CYW5rW2NoaWxkSWRdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY2hpbGRRdWVzPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3RybCA9IGZnLmdldChjaGlsZFF1ZXMuaWQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnNGb3JRdWVzdGlvbihjaGlsZFF1ZXMsIGNoaWxkUXVlcy5pc01hbmRhdG9yeSB8fCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZEN0cmw/LnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ3RybD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZEN0cmw/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjaGlsZEN0cmw/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5wdXNoKHtcclxuICAgICAgICBzZWN0aW9uSWQ6IHNlY3Rpb24uaWQsXHJcbiAgICAgICAgZm9ybUdyb3VwOiBmZ1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zZWN0aW9uRXJyb3JzLnB1c2goZmFsc2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbWl0U3RlcERldGFpbHMoKTtcclxuICB9XHJcblxyXG4gIGVtaXRTdGVwRGV0YWlscygpIHtcclxuICAgIGlmICh0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzICYmIHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgIGN1cnJlbnRTdGVwSW5kZXg6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgICB0b3RhbFN0ZXBzOiB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCxcclxuICAgICAgICBpc0xhc3RTdGVwOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENvbnRyb2xGb3JRdWVzdGlvbihncm91cDogYW55LCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBpc01hbmRhdG9yeTogYm9vbGVhbiA9IGZhbHNlLCBpc0NoaWxkOiBib29sZWFuID0gZmFsc2UsIHBhcmVudElkPzogbnVtYmVyLCBwYXJlbnRPcHRpb25JZD86IG51bWJlcikge1xyXG4gICAgY29uc3QgcUlkID0gcXVlc3Rpb24uaWQ7XHJcbiAgICBpZiAoIXFJZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnNGb3JRdWVzdGlvbihxdWVzdGlvbiwgaXNNYW5kYXRvcnkpO1xyXG4gICAgbGV0IHByZWZpbGxlZFZhbHVlID0gdGhpcy5nZXRQcmVmaWxsZWRBbnN3ZXIocUlkLCBpc0NoaWxkLCBwYXJlbnRJZCwgcGFyZW50T3B0aW9uSWQpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wocHJlZmlsbGVkVmFsdWUsIHZhbGlkYXRvcnMpO1xyXG5cclxuICAgIC8vIERpc2FibGUgaWYgYXNzZXNzbWVudCBpcyBjb21wbGV0ZWRcclxuICAgIGlmICh0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFzc2Vzc21lbnRUYWtlbj8uY29kZSA9PT0gJ0FTU0VTU01FTlRfVEFLRU4uQ09NUExFVEVEJyB8fCB0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwW3FJZF0gPSBjb250cm9sO1xyXG5cclxuICAgIC8vIEF0dGFjaCBtYXJrIGFzc2lnbm1lbnQgY29udHJvbCBpZiByZXF1aXJlZFxyXG4gICAgaWYgKHRoaXMuZW5hYmxlTWFya3MgJiYgdGhpcy5zaG91bGRTaG93TWFya3NEcm9wZG93bihxdWVzdGlvbikpIHtcclxuICAgICAgbGV0IG1hcmtWYWx1ZSA9IHRoaXMuZ2V0UHJlZmlsbGVkTWFyayhxSWQsIGlzQ2hpbGQsIHBhcmVudElkLCBwYXJlbnRPcHRpb25JZCk7XHJcbiAgICAgIGdyb3VwW2Ake3FJZH1fbWFya3NgXSA9IG5ldyBGb3JtQ29udHJvbChtYXJrVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJlZmlsbGVkTWFyayhxSWQ6IG51bWJlciwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgYW5zd2VyT2JqID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3QuZmluZCgoYTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0NoaWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuY2hpbGRRdWVzdGlvbklkID09PSBxSWQgJiYgYS5jaGlsZFF1ZXN0aW9uUGFyZW50UXVlc3Rpb25JZCA9PT0gcGFyZW50SWQgJiYgYS5jaGlsZERlZmF1bHRPcHRpb25JZCA9PT0gcGFyZW50T3B0aW9uSWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGEuc2VjdGlvblF1ZXN0aW9uPy5xdWVzdGlvbklkID09PSBxSWQgJiYgKCFhLmNoaWxkUXVlc3Rpb25JZCB8fCBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFuc3dlck9iaj8ubWFya3MgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFF1ZXN0aW9uV2VpZ2h0KHFJZDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFua1txSWRdPy53ZWlnaHQgfHwgMDtcclxuICB9XHJcblxyXG4gIGdldE1hcmtzUmFuZ2UocUlkOiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLmdldFF1ZXN0aW9uV2VpZ2h0KHFJZCk7XHJcbiAgICBpZiAobWF4ID09PSAwKSByZXR1cm4gW107XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogTWF0aC5mbG9vcihtYXgpICsgMSB9LCAoXywgaSkgPT4gaSk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93TWFya3NEcm9wZG93bihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhdXRvQXNzaWduZWRUeXBlcyA9IFtcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuU0NBTEVfUkFUSU5HJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuQ09OU0VOVCcsXHJcbiAgICAgICdRVUVTVElPTl9UWVBFLk1VTFRJU0VMRUNUX0hJRVJBUkNIWScsXHJcbiAgICAgICdRVUVTVElPTl9UWVBFLk1VTFRJU0VMRUNUX09QVElPTl9SSUNIVEVYVF9SRU1BUktTJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRSdcclxuICAgIF07XHJcbiAgICBjb25zdCBoYXNXZWlnaHQgPSB0aGlzLmdldFF1ZXN0aW9uV2VpZ2h0KHF1ZXN0aW9uLmlkIHx8IDApID4gMDtcclxuICAgIHJldHVybiAhYXV0b0Fzc2lnbmVkVHlwZXMuaW5jbHVkZXMocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlIHx8ICcnKSAmJiBoYXNXZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaWxsZWRBbnN3ZXIocUlkOiBudW1iZXIsIGlzQ2hpbGQ6IGJvb2xlYW4gPSBmYWxzZSwgcGFyZW50SWQ/OiBudW1iZXIsIHBhcmVudE9wdGlvbklkPzogbnVtYmVyKTogYW55IHtcclxuICAgIGlmICghdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5haWFkZWZhdWx0UmVzcG9uc2VMaXN0KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBhbnN3ZXJPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdC5maW5kKChhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzQ2hpbGQpIHtcclxuICAgICAgICByZXR1cm4gYS5jaGlsZFF1ZXN0aW9uSWQgPT09IHFJZCAmJiBhLmNoaWxkUXVlc3Rpb25QYXJlbnRRdWVzdGlvbklkID09PSBwYXJlbnRJZCAmJiBhLmNoaWxkRGVmYXVsdE9wdGlvbklkID09PSBwYXJlbnRPcHRpb25JZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFhbnN3ZXJPYmopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXTtcclxuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHFUeXBlID0gcXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlO1xyXG5cclxuICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJykge1xyXG4gICAgICByZXR1cm4gYW5zd2VyT2JqLm9wdGlvbklkPy5pZDtcclxuICAgIH0gZWxzZSBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLk1VTFRJX1NFTEVDVCcgfHwgcVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnKSB7XHJcbiAgICAgIGxldCBzb3J0ZWRMaXN0ID0gWy4uLihhbnN3ZXJPYmouZHJvYmplY3RpdmVyZXNwb25zZUxpc3QgfHwgW10pXTtcclxuICAgICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5QUkVGRVJFTkNFJykge1xyXG4gICAgICAgIHNvcnRlZExpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IChhLm9yZGVyTm8gfHwgMCkgLSAoYi5vcmRlck5vIHx8IDApKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc29ydGVkTGlzdC5tYXAoKHI6IGFueSkgPT4gci5kZWZhdWx0T3B0aW9uPy5vcHRpb25zKSB8fCBbXTtcclxuICAgIH0gZWxzZSBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLkZJTEVfVVBMT0FEJykge1xyXG4gICAgICAvLyBGYWxsYmFjayBwYXJzaW5nIGlmIHdlIG9ubHkgaGF2ZSByZXNwb25zZVRleHRcclxuICAgICAgcmV0dXJuIGFuc3dlck9iai5kcnN1YmplY3RpdmVyZXNwb25zZUxpc3Q/Lm1hcCgocjogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpZDogci5yZXNwb25zZVRleHQgfTsgLy8gYmFzaWMgZmFsbGJhY2tcclxuICAgICAgICB9XHJcbiAgICAgIH0pIHx8IFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGFuc3dlck9iai5kcnN1YmplY3RpdmVyZXNwb25zZUxpc3Q/LlswXT8ucmVzcG9uc2VUZXh0ID8/IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWYWxpZGF0b3JzRm9yUXVlc3Rpb24ocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiwgaXNNYW5kYXRvcnk6IGJvb2xlYW4pOiBhbnlbXSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKGlzTWFuZGF0b3J5KSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocXVlc3Rpb24ucmVzcG9uc2VWYWxpZGF0aW9uKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4ocXVlc3Rpb24ucmVzcG9uc2VWYWxpZGF0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5FTUFJTCcpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuVVJMJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL14oaHR0cHM/OlxcL1xcLyk/KFtcXHdcXC1dKyhcXC5bXFx3XFwtXSspKykoW1xcLz8jXS4qKT8kL2kpKTtcclxuICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XXsxMH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XSskLykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncyAmJiBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBtaW5DaGFyID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21pbkNoYXJhY3RlckNvdW50Jyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWluQ2hhcikgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKE51bWJlcihtaW5DaGFyKSkpO1xyXG5cclxuICAgICAgY29uc3QgbWF4Q2hhciA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhDaGFyYWN0ZXJDb3VudCcpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heENoYXIpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChOdW1iZXIobWF4Q2hhcikpKTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbk9wdCA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtaW5PcHQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPCBOdW1iZXIobWluT3B0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBtaW5PcHRpb25zOiB7IHJlcXVpcmVkOiBOdW1iZXIobWluT3B0KSwgYWN0dWFsOiBjb250cm9sLnZhbHVlPy5sZW5ndGggfHwgMCB9IH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbWF4T3B0ID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heE9wdCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcclxuICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gTnVtYmVyKG1heE9wdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbWF4T3B0aW9uczogeyByZXF1aXJlZDogTnVtYmVyKG1heE9wdCksIGFjdHVhbDogY29udHJvbC52YWx1ZT8ubGVuZ3RoIHx8IDAgfSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1heEZpbGVzID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heE5vT2ZGaWxlcycpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVzKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPiBOdW1iZXIobWF4RmlsZXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG1heEZpbGVzOiB7IHJlcXVpcmVkOiBOdW1iZXIobWF4RmlsZXMpLCBhY3R1YWw6IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCB8fCAwIH0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhGaWxlU2l6ZSA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhGaWxlU2l6ZScpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNMYXJnZUZpbGUgPSBjb250cm9sLnZhbHVlLnNvbWUoKGZpbGU6IGFueSkgPT4gZmlsZT8uc2l6ZSAmJiBmaWxlLnNpemUgPiAoTnVtYmVyKG1heEZpbGVTaXplKSAqIDEwMjQgKiAxMDI0KSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNMYXJnZUZpbGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geyBtYXhGaWxlU2l6ZTogeyByZXF1aXJlZFNpemU6IE51bWJlcihtYXhGaWxlU2l6ZSkgfSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XHJcbiAgfVxyXG5cclxuICBpbWFnZUVycm9ySGFuZGxlcihldmVudDogYW55LCBmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICBldmVudC50YXJnZXQuc3JjID0gZmlsZVBhdGg7XHJcbiAgfVxyXG5cclxuICBpc09wdGlvblNlbGVjdGVkKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBvcHRpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIW9wdGlvbklkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNvbnRyb2xOYW1lID0gcXVlc3Rpb24uaWQ/LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sTmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIGlmICghY29udHJvbCB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBNdWx0aS1zZWxlY3QgZGVhbHMgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLmluY2x1ZGVzKG9wdGlvbklkKSB8fCBjb250cm9sLnZhbHVlLnNvbWUoKHZhbDogYW55KSA9PiB2YWw/LmlkID09PSBvcHRpb25JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT2JqZWN0aXZlIC8gU2luZ2xlIHNlbGVjdCBkZWFscyB3aXRoIGEgc2luZ2xlIHZhbHVlIChjb3VsZCBiZSBpbnRlZ2VyIElEIG9yIG9iamVjdClcclxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgY29udHJvbC52YWx1ZS5pZCkge1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZS5pZCA9PT0gb3B0aW9uSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgPT09IG9wdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBudW1iZXIge1xyXG4gICAgY29uc3QgY29uZmlnID0gcXVlc3Rpb24/LnF1ZXN0aW9uQ29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4Q2hhcmFjdGVyQ291bnQnKTtcclxuICAgIHJldHVybiBjb25maWcgPyBOdW1iZXIoY29uZmlnLmNvbmZpZ1ZhbHVlKSA6IDA7XHJcbiAgfVxyXG5cclxuICBnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBjb250cm9sOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhDaGFyQ291bnQocXVlc3Rpb24pO1xyXG4gICAgY29uc3QgY3VycmVudExlbmd0aCA9IGNvbnRyb2wudmFsdWUgPyBjb250cm9sLnZhbHVlLmxlbmd0aCA6IDA7XHJcbiAgICByZXR1cm4gbWF4IC0gY3VycmVudExlbmd0aDtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleC0tO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvdWxkRGlzYWJsZVRhYihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGV4OyBqKyspIHtcclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbal0/LmZvcm1Hcm91cD8uaW52YWxpZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb05leHQobWFya0FzQ29tcGxldGVkOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgY29uc3Qgc2F2ZSA9IHRoaXMuYXNzZXNzbWVudERhdGE/LmFzc2Vzc21lbnRDb25maWdzPy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT0gJ2Fzc2VzbWVudC5jb25maWcuYWxsb3dlZC1wYXJ0aWFsLXJlc3BvbnNlJyk/LmNvbmZpZ1ZhbHVlID09ICcxJztcclxuICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwc1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdO1xyXG4gICAgaWYgKCFjdXJyZW50U2VjdGlvbikgcmV0dXJuO1xyXG5cclxuICAgIGN1cnJlbnRTZWN0aW9uLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRTZWN0aW9uLmZvcm1Hcm91cC5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2VjdGlvbkVycm9yc1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkVycm9yc1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICBzYXZlID8gdGhpcy5zYXZlKCkgOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgrKztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc1N1Ym1pdChtYXJrQXNDb21wbGV0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwYW5kZWRTdGF0ZTogYm9vbGVhbltdID0gW107XHJcblxyXG4gIHByb2Nlc3NTdWJtaXQobWFya0FzQ29tcGxldGVkOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgbGV0IGZpcnN0SW52YWxpZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICBncm91cC5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICBpZiAoZ3JvdXAuZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbaW5kZXhdID0gdHJ1ZTtcclxuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkSW5kZXggPT09IC0xKSBmaXJzdEludmFsaWRJbmRleCA9IGluZGV4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbkVycm9yc1tpbmRleF0gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpcnN0SW52YWxpZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICBpZiAoIXRoaXMudmVydGljYWxWaWV3KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gZmlyc3RJbnZhbGlkSW5kZXg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFN0YXRlW2ZpcnN0SW52YWxpZEluZGV4XSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5GSVhfRVJST1JTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChmaXJzdEludmFsaWRJbmRleCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmUodHJ1ZSwgbWFya0FzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvRmlyc3RJbnZhbGlkRmllbGQoc2VjdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzW3NlY3Rpb25JbmRleF0uZm9ybUdyb3VwO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIGluIGZvcm1Hcm91cC5jb250cm9scykge1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLmludmFsaWQpIHtcclxuICAgICAgICAgIGxldCBxSWQgPSBjb250cm9sTmFtZTtcclxuICAgICAgICAgIGlmIChjb250cm9sTmFtZS5pbmNsdWRlcygnX3JlbWFya3NfJykgfHwgY29udHJvbE5hbWUuaW5jbHVkZXMoJ19tYXJrcycpKSB7XHJcbiAgICAgICAgICAgIHFJZCA9IGNvbnRyb2xOYW1lLnNwbGl0KCdfJylbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHF1ZXN0aW9uLWNvbnRhaW5lci0ke3FJZH1gKTtcclxuICAgICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZShnb05leHQ6IGJvb2xlYW4gPSB0cnVlLCBtYXJrQXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcblxyXG4gICAgaWYgKG1hcmtBc0NvbXBsZXRlZCAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLkNPTVBMRVRFJyB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLmFzc2Vzc21lbnRUYWtlbiA9IHsgY29kZTogJ0FTU0VTU01FTlRfVEFLRU4uSU5DT01QTEVURScgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5yZXNwb25zZUJ1aWxkZXJTZXJ2aWNlLmJ1aWxkUmVzcG9uc2VQYXlsb2FkKFxyXG4gICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UsXHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLFxyXG4gICAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLFxyXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgdGhpcy50ZW5hbnRJZFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGFwaUNhbGwgPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkID8gdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLnBhdGNoQXNzZXNzbWVudChwYXlsb2FkKSA6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5zdWJtaXRBc3Nlc3NtZW50KHBheWxvYWQpO1xyXG4gICAgYXBpQ2FsbC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QW5zd2Vyc0J5QWlhSWQocmVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0gcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHsgYXNzZXNzZWVJZDogcmVzPy5hc3Nlc3NlZT8uaWQgfHwgcmVzLCBjb21wbGV0ZWQ6IGdvTmV4dCAmJiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSB8fCB0aGlzLnZlcnRpY2FsVmlldykgfSk7XHJcbiAgICAgICAgaWYgKGdvTmV4dCAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPCB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU0FWRV9GQUlMRUQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgPyAnUEFUQ0gnIDogJ1BPU1QnLCBwYXlsb2FkIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBbnN3ZXJzQnlBaWFJZChhc3Nlc3NlZUlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBbnN3ZXJzQnlBaWFJZChhc3Nlc3NlZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSByZXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5HRVRfRkFJTEVEJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnR0VUJyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkWW91dHViZUlmcmFtZVNyYyh2aWRlb1VybDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB2aWRlb0lkID0gdGhpcy5nZXRWaWRlb0lkKHZpZGVvVXJsKTtcclxuICAgIGNvbnN0IHlvdXR1YmVVcmwgPSBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHt2aWRlb0lkfWA7XHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHlvdXR1YmVVcmwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmlkZW9JZCh2aWRlb1VybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGF0dGVybiA9IG51bGw7XHJcbiAgICBpZiAodmlkZW9VcmwuaW5jbHVkZXMoJ3lvdXR1YmUuY29tJykpIHtcclxuICAgICAgcGF0dGVybiA9IC8oPzpcXD92PXwmdj18eW91dHVcXC5iZVxcL3xcXC9lbWJlZFxcL3xcXC9cXGRcXC98XFwvdmlcXC98XFwvdlxcL3xodHRwcz86XFwvXFwvKD86d3d3XFwuKT95b3V0dWJlXFwuY29tXFwvKD86dlxcL3xlbWJlZFxcL3x3YXRjaFxcPyg/OlxcUysmKT92PXx3YXRjaFxcPyg/OlxcUysmKT92aT18XFxTK1xcLykpKFthLXpBLVowLTlfLV17MTF9KS87XHJcbiAgICB9IGVsc2UgaWYgKHZpZGVvVXJsLmluY2x1ZGVzKCd5b3V0dS5iZScpKSB7XHJcbiAgICAgIHBhdHRlcm4gPSAveW91dHVcXC5iZVxcLyhbYS16QS1aMC05Xy1dezExfSkvO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhdHRlcm4pIHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSB2aWRlb1VybC5tYXRjaChwYXR0ZXJuKTtcclxuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIG9wZW5JbnN0cnVjdGlvbnNEaWFsb2coc2VjdGlvbjogUXVlc3Rpb25QYXBlclNlY3Rpb24pIHtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oU2VjdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudCwge1xyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICBtYXhXaWR0aDogJzk1JScsXHJcbiAgICAgIHdpZHRoOiAnY2FsYygyMHJlbSArIDUwMHB4KScsXHJcbiAgICAgIG1heEhlaWdodDogJzk1ZHZoJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgaW1hZ2VDb25maWc6IHRoaXMuaW1hZ2VDb25maWcsXHJcbiAgICAgICAgbGFiZWxDb25maWc6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgc2VjdGlvbkRldGFpbHM6IHNlY3Rpb25cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiY29uZmlnc0xvYWRlZCAmJiAhc2hvd0xvYWRlcjsgZWxzZSBsb2FkZXJcIiBjbGFzcz1cImNvbC0xMiBoLTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBoLTEwMCBwdC0yIHBiLTRcIiBbY2xhc3MuaGVpZ2h0LXdpdGhvdXQtZm9vdGVyXT1cInNob3dGb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cCAqbmdJZj1cIiF2ZXJ0aWNhbFZpZXdcIiBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiIGNsYXNzPVwiYXNzZXNzbWVudC1tYXQtY3VzdG9tLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgWyhzZWxlY3RlZEluZGV4KV09XCJzZWxlY3RlZFRhYkluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXRhYlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QgfCBvcmRlckJ5OyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2hvdWxkRGlzYWJsZVRhYihpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWN0aW9uRXJyb3JzW2ldID8gJ2Fzc2Vzc21lbnQtdGV4dC1kYW5nZXInIDogJydcIj57e3NlY3Rpb24ucXBzTmFtZT8uWzBdPy50ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlY3Rpb25Db250ZW50OyBjb250ZXh0OiB7IHNlY3Rpb246IHNlY3Rpb24sIGk6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XHJcblxyXG4gICAgICAgICAgICA8bWF0LWFjY29yZGlvbiAqbmdJZj1cInZlcnRpY2FsVmlld1wiIG11bHRpPVwidHJ1ZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC00IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8IG9yZGVyQnk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFN0YXRlW2ldICE9PSBmYWxzZVwiIChvcGVuZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gc2hhZG93LW5vbmUgbS0wIGFzc2Vzc21lbnQtcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhc3Nlc3NtZW50LWJnLWdyZXktdHdvIGgtYXV0byBweS0zIGJnLXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VjdGlvbkVycm9yc1tpXSA/ICdhc3Nlc3NtZW50LXRleHQtZGFuZ2VyJyA6ICcnXCI+e3tzZWN0aW9uLnFwc05hbWU/LlswXT8udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHB4LW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWN0aW9uQ29udGVudDsgY29udGV4dDogeyBzZWN0aW9uOiBzZWN0aW9uLCBpOiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImgtMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLk5PX1FVRVNUSU9OUyddXCIgY2xhc3M9XCJjb2wtc20tYXV0byBjb2wtNlwiXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvbm8tcXVlc3Rpb25zLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xOFwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19RVUVTVElPTlMnXX19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dGb290ZXJcIlxyXG4gICAgICAgIGNsYXNzPVwiYmctd2hpdGUgcC0zIHBvc2l0aW9uLXN0aWNreSBib3R0b20tMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgYm9yZGVyLXRvcCBnYXAtMyB6LWluZGV4LTFcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeS10cmFuc3BhcmVudCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTNcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIiAqbmdJZj1cInNlbGVjdGVkVGFiSW5kZXggPiAwICYmICF2ZXJ0aWNhbFZpZXdcIj5cclxuICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkdPX0JBQ0snXX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNTdWJtaXR0aW5nXCIgKGNsaWNrKT1cInZlcnRpY2FsVmlldyA/IHByb2Nlc3NTdWJtaXQodHJ1ZSkgOiBnb05leHQoKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeSBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydvcGFjaXR5LTAnOiBpc1N1Ym1pdHRpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICB7eyAodmVydGljYWxWaWV3IHx8IHNlbGVjdGVkVGFiSW5kZXggPT09IHNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEpID9cclxuICAgICAgICAgICAgICAgIGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU1VCTUlUJ10gOiBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5FWFQnXSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzU3VibWl0dGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGFzc2Vzc21lbnQtc3Bpbm5lci13aGl0ZVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2xvYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI2MFwiIGNsYXNzPVwiYXNzZXNzbWVudC1zcGlubmVyLXByaW1hcnlcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFJlY3Vyc2l2ZSBUZW1wbGF0ZSBmb3IgUXVlc3Rpb25zICYgQ2hpbGQgUXVlc3Rpb25zIC0tPlxyXG48bmctdGVtcGxhdGUgI3F1ZXN0aW9uVGVtcGxhdGUgbGV0LXF1ZXN0aW9uSWQ9XCJxdWVzdGlvbklkXCIgbGV0LWlzTWFuZGF0b3J5PVwiaXNNYW5kYXRvcnlcIiBsZXQtZ3JvdXBJbmRleD1cImdyb3VwSW5kZXhcIlxyXG4gICAgbGV0LXBhcmVudE9wdGlvbklkPVwicGFyZW50T3B0aW9uSWRcIiBsZXQtcXVlc3Rpb25JbmRleD1cInF1ZXN0aW9uSW5kZXhcIj5cclxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXBcIiBbaWRdPVwiJ3F1ZXN0aW9uLWNvbnRhaW5lci0nICsgcXVlc3Rpb25JZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG1iLTNcIiBbbmdDbGFzc109XCJwYXJlbnRPcHRpb25JZD8gJycgOiAncC0zIGFzc2Vzc21lbnQtY2FyZC1ib3JkZXInXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbkJhbmtbcXVlc3Rpb25JZF0gYXMgcXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1tZC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTIgZ2FwLW1kLTMgYWxpZ24taXRlbXMtbWQtc3RhcnQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtbWQtMyBnYXAtMiBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTUgbWItMCBkLWZsZXggZ2FwLTEgZ2FwLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cXVlc3Rpb25JbmRleCArIDF9fS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwicXVlc3Rpb24ucXVlc3Rpb25UZXh0Py5bMF0/LnRleHRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgY29sLTEyXCIgKm5nSWY9XCJxdWVzdGlvbj8ubWVkaWFVcmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlZpZGVvVGVtcGxhdGU7IGNvbnRleHQ6e3ZpZGVvVXJsOnF1ZXN0aW9uPy5tZWRpYVVybH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmhpbnRUZXh0ICYmICFwcmV2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLklORk8nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvaW5mby5zdmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwidG9vbHRpcFN0YXRlW3F1ZXN0aW9uLmlkIV0gPSBmYWxzZVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJbeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcicsIG9mZnNldFg6IC04LCBvZmZzZXRZOiAwIH0sIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiA4LCBvZmZzZXRZOiAwIH1dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1iZy1ncmV5LXR3byBhc3Nlc3NtZW50LXRvb2x0aXAtYm9yZGVyIHAtMyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYm94LXNoYWRvdy10b29sdGlwIHF1ZXN0aW9uLWluZm8gYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwidG9vbHRpcFN0YXRlW3F1ZXN0aW9uLmlkIV0gPSBmYWxzZVwiIFtpbm5lckhUTUxdPVwicXVlc3Rpb24uaGludFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBBc3Nlc3NvciBNYXJrcyBEcm9wZG93biBMb2dpYyAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVuYWJsZU1hcmtzICYmIHNob3VsZFNob3dNYXJrc0Ryb3Bkb3duKHF1ZXN0aW9uKSAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkICsgJ19tYXJrcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtbWFya3MtZHJvcGRvd24gYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFSS1MnXX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQgKyAnX21hcmtzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWFyayBvZiBnZXRNYXJrc1JhbmdlKHF1ZXN0aW9uLmlkISlcIiBbdmFsdWVdPVwibWFya1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWFya319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5TVUJKRUNUSVZFX1NIT1JUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlNVQkpFQ1RJVkVfTE9ORydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtbG9uZyBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtbG9uZz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuU1VCSkVDVElWRV9SSUNIX1RFWFQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLWVkaXRvciBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW9iamVjdGl2ZSBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtb2JqZWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW11bHRpc2VsZWN0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCI+PC9saWItcXVlc3Rpb24tdHlwZS1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtcHJlZmVyZW5jZSBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtcHJlZmVyZW5jZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkVNQUlMJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlVSTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5GSUxFX1VQTE9BRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtZmlsZS11cGxvYWQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VDb25maWddPVwiaW1hZ2VDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBFcnJvciBNZXNzYWdlcyBhbmQgQ2hhcmFjdGVyIENvdW50IENvbnRhaW5lciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY3Rpb25Gb3JtR3JvdXBzW2dyb3VwSW5kZXhdLmZvcm1Hcm91cC5nZXQocXVlc3Rpb24uaWQ/LnRvU3RyaW5nKCkgfHwgJycpIGFzIGNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtc3RhcnQgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRURfUkVTUE9OU0UnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cXVlc3Rpb24/LnZhbGlkYXRpb25NZXNzYWdlIHx8IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuSU5WQUxJRF9GT1JNQVQnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydtaW5sZW5ndGgnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1JTl9DSEFSUyddPy5yZXBsYWNlKCd7e2xlbmd0aH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21pbmxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0NIQVJTJ10/LnJlcGxhY2UoJ3t7bGVuZ3RofX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWluT3B0aW9ucyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUlOX09QVElPTlMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21pbk9wdGlvbnMnXS5yZXF1aXJlZCArICcnKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydtYXhPcHRpb25zJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfT1BUSU9OUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4T3B0aW9ucyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfRklMRVMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZVNpemUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9GSUxFX1NJWkUnXT8ucmVwbGFjZSgne3tzaXplfX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZVNpemUnXS5yZXF1aXJlZFNpemUgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgbXMtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0UmVtYWluaW5nQ2hhcnMocXVlc3Rpb24sIGNvbnRyb2wpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSEFSQUNURVInXX19e3tnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbiwgY29udHJvbCkgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncycgOiAnJ319IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BSU5JTkcnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ2hpbGQgUXVlc3Rpb25zIGFuZCBSZW1hcmtzIFJlbmRlcmluZyBMb2dpYyBiYXNlZCBvbiBjaGVja2VkIGZvcm0gc3RhdGUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPcHRpb25TZWxlY3RlZChzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAsIHF1ZXN0aW9uLCBvcHRpb24ub3B0aW9ucz8uaWQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJFTUFSS1MgRklFTEQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnJlbWFya3NSZXF1aXJlZCAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkICsgJ19yZW1hcmtzXycgKyBvcHRpb24uaWQpIGFzIHJlbWFya3NDb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTE1IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUkVNQVJLUyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwie3txdWVzdGlvbi5pZH19X3JlbWFya3Nfe3tvcHRpb24uaWR9fVwiIHJvd3M9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5SRU1BUktTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbWFya3NDb250cm9sLmludmFsaWQgJiYgcmVtYXJrc0NvbnRyb2wudG91Y2hlZCA/ICdhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgb3V0bGluZS0wIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZW1hcmtzQ29udHJvbC5pbnZhbGlkICYmIHJlbWFya3NDb250cm9sLnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuRklFTERfUkVRVUlSRUQnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENISUxEIFFVRVNUSU9OUyBSRUNVUlNJT04gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtM1wiICpuZ0lmPVwib3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkSWQgb2Ygb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0OyBsZXQgY2hpbGRJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInF1ZXN0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGNoaWxkSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01hbmRhdG9yeTogcXVlc3Rpb25CYW5rW2NoaWxkSWRdPy5pc01hbmRhdG9yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSW5kZXg6IGdyb3VwSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPcHRpb25JZDogb3B0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JbmRleDogY2hpbGRJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBSZXVzYWJsZSBTZWN0aW9uIEZvcm0gVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2VjdGlvbkNvbnRlbnQgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCIgbGV0LWk9XCJpXCI+XHJcbiAgICA8Zm9ybSBjbGFzcz1cInctMTAwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tpXS5mb3JtR3JvdXBcIiBbbmFtZV09XCInc2VjdGlvbmZybS0nICsgaVwiIG5vdmFsaWRhdGU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItNFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNCBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UT1RBTF9RVUVTVElPTlMnXX19e3sgc2VjdGlvbj8udG90YWxRdWVzdGlvbnMgfHwgMCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5JbnN0cnVjdGlvbnNEaWFsb2coc2VjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJldmlld01vZGUgJiYgKHNlY3Rpb24/LnFwc0Rlc2M/LlswXT8udGV4dCB8fCBzZWN0aW9uPy5tZWRpYVVybClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVklFV19JTlNUUlVDVElPTlMnXX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzcSBvZiBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0IHwgb3JkZXJCeTsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVlc3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc3EucXVlc3Rpb25JZCxcclxuICAgICAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBxdWVzdGlvbkJhbmtbc3EucXVlc3Rpb25JZF0/LmlzTWFuZGF0b3J5LFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogaSxcclxuICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JbmRleDogalxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSB2aWRlbyBwcmV2aWV3ICAtLT5cclxuPG5nLXRlbXBsYXRlIGxldC12aWRlb1VybD1cInZpZGVvVXJsXCIgI1ZpZGVvVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdmVyZmxvdy1oaWRkZW4gY29sLW1kLTEwIGNvbC0xMlwiPlxyXG4gICAgICAgIDx2aWRlbyAqbmdJZj1cInZpZGVvVXJsPy5pbmNsdWRlcygnLm1wNCcpIGVsc2UgeW91dHViZVZpZGVvXCIgd2lkdGg9XCI0MDBcIiBjb250cm9scyBjbGFzcz1cIm13LTEwMCBkLWJsb2NrIG14LWF1dG9cIj5cclxuICAgICAgICAgICAgPHNvdXJjZSBbc3JjXT1cInZpZGVvVXJsXCIgdHlwZT1cInZpZGVvL21wNFwiPlxyXG4gICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICN5b3V0dWJlVmlkZW8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ5b3V0dWJlLXZpZGVvIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aWZyYW1lIFtzcmNdPVwiYWRkWW91dHViZUlmcmFtZVNyYyh2aWRlb1VybClcIiB0aXRsZT1cIllvdVR1YmUgdmlkZW8gcGxheWVyXCIgZnJhbWVib3JkZXI9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IHdlYi1zaGFyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dmdWxsc2NyZWVuIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTAgc3RhcnQtMCB3LTEwMCBoLTEwMCBkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFlLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXaEgsTUFBTSxPQUFPLHdCQUF3QjtJQTJDbkMsWUFDVSxzQkFBOEMsRUFDOUMsRUFBZSxFQUNmLHNCQUE4QyxFQUM5QyxTQUF1QixFQUN2QixNQUFpQjtRQUpqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQS9DbEIsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRzVCLGlCQUFZLEdBQWdCLEVBQUUsRUFBRSxF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QkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LXRha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9yZXNwb25zZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWN0aW9uSW5zdHJ1Y3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlY3Rpb24taW5zdHJ1Y3Rpb25zL3NlY3Rpb24taW5zdHJ1Y3Rpb25zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2Vzc2VlRFRPLCBBc3Nlc3NvckRUTywgQXNzZXNzbWVudCwgQXNzZXNzbWVudEluc3RhbmNlQXNzZXNzZURUTywgQXNzZXNzbWVudFN0ZXAsIEFzc2Vzc21lbnRDb250ZXh0RFRPIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciwgUXVlc3Rpb25QYXBlclNlY3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi1wYXBlci5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXNzZXNzbWVudC10YWtlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2Vzc21lbnQtdGFrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtdGFrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRUYWtlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBASW5wdXQoKSBpbWFnZUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIHNob3dGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50SWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudEluc3RhbmNlSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXNzZXNzZWVEYXRhOiBBc3Nlc3NlZURUTyA9IHsgaWQ6IDAsIGFjdG9ySWQ6IDAsIGFjdG9yVHlwZTogJ0FDVE9SX1RZUEUuQlJJREdFX1VTRVInIH07XHJcbiAgQElucHV0KCkgYXNzZXNzb3JEYXRhOiBBc3Nlc3NvckRUTyA9IHsgaWQ6IDAsIGFjdG9ySWQ6IDAsIGFjdG9yVHlwZTogJ1RFTkFOVCcgfTtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByZXZpZXdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdmVydGljYWxWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlTWFya3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50Q29udGV4dCE6IEFzc2Vzc21lbnRDb250ZXh0RFRPO1xyXG5cclxuICBAT3V0cHV0KCkgc25hY2tiYXJNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdpbmZvJyB9PigpO1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRBc3Nlc3NtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHN0ZXBDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3Nlc3NtZW50U3RlcD4oKTtcclxuXHJcbiAgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPiA9IHt9O1xyXG4gIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YTogQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIgPSB7fTtcclxuICBhc3Nlc3NtZW50RGF0YTogQXNzZXNzbWVudCA9IHt9O1xyXG4gIGFzc2Vzc2VlUmVzcG9uc2U6IEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8gPSB7fTtcclxuICBjb25maWdzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNlY3Rpb25Gb3JtR3JvdXBzOiB7IHNlY3Rpb25JZDogbnVtYmVyOyBmb3JtR3JvdXA6IEZvcm1Hcm91cCB9W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcclxuICBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXg7XHJcbiAgfVxyXG4gIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkluZGV4ICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuZW1pdFN0ZXBEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWN0aW9uRXJyb3JzOiBib29sZWFuW10gPSBbXTtcclxuICB0ZW5hbnRJZDogbnVtYmVyID0gMDtcclxuICB0b29sdGlwU3RhdGU6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50VGFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNlQnVpbGRlclNlcnZpY2U6IFJlc3BvbnNlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDb25maWdzRnJvbUpTT04oKTtcclxuXHJcbiAgICBpZiAodGhpcy5wcmV2aWV3TW9kZSkge1xyXG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCkge1xyXG4gICAgICBpZiAoIXRoaXMuYXNzZXNzbWVudENvbnRleHQpIHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZEFzc2Vzc21lbnREYXRhKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRFRPO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudERhdGEgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0LmFzc2Vzc21lbnQ7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0LnF1ZXN0aW9uRFRPTWFwO1xyXG4gICAgICAgIHRoaXMudGVuYW50SWQgPSB0aGlzLmFzc2Vzc21lbnREYXRhPy50ZW5hbnRJZCB8fCAwO1xyXG4gICAgICAgIHRoaXMuZm9ybVNldHVwKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ3NGcm9tSlNPTigpIHtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgbGFiZWxDb25maWc6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2xhYmVsQ29uZmlnJyksXHJcbiAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9pbWFnZUNvbmZpZycpXHJcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGFiZWxDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCByZXM/LmxhYmVsQ29uZmlnLCB0aGlzLmxhYmVsQ29uZmlnKTtcclxuICAgICAgdGhpcy5pbWFnZUNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8uaW1hZ2VDb25maWcsIHRoaXMuaW1hZ2VDb25maWcpO1xyXG5cclxuICAgICAgdGhpcy5jb25maWdzTG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2FkQXNzZXNzbWVudERhdGEoKSB7XHJcbiAgICBjb25zdCBhcGlDYWxscyA9IHtcclxuICAgICAgYXNzZXNzbWVudERhdGE6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBc3Nlc3NtZW50Q29udGV4dEJ5SWQodGhpcy5hc3Nlc3NtZW50SWQpLFxyXG4gICAgICAuLi4odGhpcy5hc3Nlc3NlZURhdGE/LmlkICYmIHtcclxuICAgICAgICBhc3Nlc3NlZVJlc3BvbnNlOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0QW5zd2Vyc0J5QWlhSWQodGhpcy5hc3Nlc3NlZURhdGEuaWQpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBmb3JrSm9pbihhcGlDYWxscykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhID0gZGF0YT8uYXNzZXNzbWVudERhdGE/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRFRPO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudERhdGEgPSBkYXRhPy5hc3Nlc3NtZW50RGF0YT8uYXNzZXNzbWVudDtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IGRhdGE/LmFzc2Vzc21lbnREYXRhPy5xdWVzdGlvbkRUT01hcDtcclxuICAgICAgICB0aGlzLnRlbmFudElkID0gZGF0YT8uYXNzZXNzbWVudERhdGE/LmFzc2Vzc21lbnQ/LnRlbmFudElkO1xyXG4gICAgICAgIGlmIChkYXRhPy5hc3Nlc3NlZVJlc3BvbnNlKSB7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSBkYXRhPy5hc3Nlc3NlZVJlc3BvbnNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIGlkOiAwLFxyXG4gICAgICAgICAgICBhc3Nlc3NtZW50SW5zdGFuY2U6IHsgaWQ6IHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQgfSxcclxuICAgICAgICAgICAgYXNzZXNzZWU6IHRoaXMuYXNzZXNzZWVEYXRhLFxyXG4gICAgICAgICAgICBhc3Nlc3NvcjogdGhpcy5hc3Nlc3NvckRhdGEsXHJcbiAgICAgICAgICAgIGFpYWRlZmF1bHRSZXNwb25zZUxpc3Q6IFtdLFxyXG4gICAgICAgICAgICB0ZW5hbnQ6IHRoaXMudGVuYW50SWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybVNldHVwKCk7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnR0VUJyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybVNldHVwKCkge1xyXG4gICAgdGhpcy5zZWN0aW9uRm9ybUdyb3VwcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZvckVhY2goc2VjdGlvbiA9PiB7XHJcbiAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgIHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5mb3JFYWNoKHNxID0+IHtcclxuICAgICAgICBjb25zdCBxSWQgPSBzcS5xdWVzdGlvbklkO1xyXG4gICAgICAgIGlmICghcUlkIHx8ICF0aGlzLnF1ZXN0aW9uQmFua1txSWRdKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXTtcclxuICAgICAgICB0aGlzLmFkZENvbnRyb2xGb3JRdWVzdGlvbihncm91cCwgcXVlc3Rpb24sIHF1ZXN0aW9uPy5pc01hbmRhdG9yeSk7XHJcblxyXG4gICAgICAgIGlmIChxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0LmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24ucmVtYXJrc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gUHJlLXBvcHVsYXRlIHJlbWFya3MgaWYgd2UgaGF2ZSBhbnN3ZXJzIG1hdGNoaW5nIHRoaXMgb3B0aW9uLlxyXG4gICAgICAgICAgICAgIGxldCByZW1hcmtWYWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByZWZpbGxlZE9wdGlvbnMgPSB0aGlzLmdldFByZWZpbGxlZEFuc3dlcihxSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChwcmVmaWxsZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbnNPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LmZpbmQoKGE6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbnNPYmopIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJyAmJiBwcmVmaWxsZWRPcHRpb25zLmlkID09PSAob3B0aW9uLm9wdGlvbnM/LmlkID8/IG9wdGlvbi5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1hcmtWYWwgPSBhbnNPYmoucmVtYXJrcyB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJlZmlsbGVkT3B0aW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ09iaiA9IGFuc09iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdD8uZmluZCgocjogYW55KSA9PiByLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnM/LmlkID09PSAob3B0aW9uLm9wdGlvbnM/LmlkID8/IG9wdGlvbi5pZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ09iaikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVtYXJrVmFsID0gbWF0Y2hpbmdPYmoucmVtYXJrcyB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcmVtYXJrQ3RybCA9IG5ldyBGb3JtQ29udHJvbChyZW1hcmtWYWwpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFzc2Vzc21lbnRUYWtlbj8uY29kZSA9PT0gJ0FTU0VTU01FTlRfVEFLRU4uQ09NUExFVEUnIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlbWFya0N0cmwuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBncm91cFtgJHtxSWR9X3JlbWFya3NfJHtvcHRpb24uaWR9YF0gPSByZW1hcmtDdHJsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goKGNoaWxkSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlcyA9IHRoaXMucXVlc3Rpb25CYW5rW2NoaWxkSWRdO1xyXG4gICAgICAgICAgICAgIGlmIChjaGlsZFF1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29udHJvbEZvclF1ZXN0aW9uKGdyb3VwLCBjaGlsZFF1ZXMsIGZhbHNlLCB0cnVlLCBxSWQsIG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZmcgPSB0aGlzLmZiLmdyb3VwKGdyb3VwKTtcclxuXHJcbiAgICAgIHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5mb3JFYWNoKHNxID0+IHtcclxuICAgICAgICBjb25zdCBxSWQgPSBzcS5xdWVzdGlvbklkO1xyXG4gICAgICAgIGlmICghcUlkIHx8ICF0aGlzLnF1ZXN0aW9uQmFua1txSWRdKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG5cclxuICAgICAgICBpZiAocXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGZnLmdldChxSWQudG9TdHJpbmcoKSk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Py5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzT3B0aW9uU2VsZWN0ZWQoZmcsIHF1ZXN0aW9uLCBvcHRpb24ub3B0aW9ucz8uaWQpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAob3B0aW9uLnJlbWFya3NSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYXJrQ3RybCA9IGZnLmdldChgJHtxSWR9X3JlbWFya3NfJHtvcHRpb24uaWR9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICByZW1hcmtDdHJsPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZW1hcmtDdHJsPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgICAgcmVtYXJrQ3RybD8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZW1hcmtDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAob3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdC5mb3JFYWNoKChjaGlsZElkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRRdWVzID0gdGhpcy5xdWVzdGlvbkJhbmtbY2hpbGRJZF07XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFF1ZXM/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHJsID0gZmcuZ2V0KGNoaWxkUXVlcy5pZC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0VmFsaWRhdG9yc0ZvclF1ZXN0aW9uKGNoaWxkUXVlcywgY2hpbGRRdWVzLmlzTWFuZGF0b3J5IHx8IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ3RybD8uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRDdHJsPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ3RybD8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLnB1c2goe1xyXG4gICAgICAgIHNlY3Rpb25JZDogc2VjdGlvbi5pZCxcclxuICAgICAgICBmb3JtR3JvdXA6IGZnXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlY3Rpb25FcnJvcnMucHVzaChmYWxzZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmVtaXRTdGVwRGV0YWlscygpO1xyXG4gIH1cclxuXHJcbiAgZW1pdFN0ZXBEZXRhaWxzKCkge1xyXG4gICAgaWYgKHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMgJiYgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc3RlcENoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgY3VycmVudFN0ZXBJbmRleDogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICAgIHRvdGFsU3RlcHM6IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoLFxyXG4gICAgICAgIGlzTGFzdFN0ZXA6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PT0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQ29udHJvbEZvclF1ZXN0aW9uKGdyb3VwOiBhbnksIHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGlzTWFuZGF0b3J5OiBib29sZWFuID0gZmFsc2UsIGlzQ2hpbGQ6IGJvb2xlYW4gPSBmYWxzZSwgcGFyZW50SWQ/OiBudW1iZXIsIHBhcmVudE9wdGlvbklkPzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBxSWQgPSBxdWVzdGlvbi5pZDtcclxuICAgIGlmICghcUlkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0VmFsaWRhdG9yc0ZvclF1ZXN0aW9uKHF1ZXN0aW9uLCBpc01hbmRhdG9yeSk7XHJcbiAgICBsZXQgcHJlZmlsbGVkVmFsdWUgPSB0aGlzLmdldFByZWZpbGxlZEFuc3dlcihxSWQsIGlzQ2hpbGQsIHBhcmVudElkLCBwYXJlbnRPcHRpb25JZCk7XHJcblxyXG4gICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChwcmVmaWxsZWRWYWx1ZSwgdmFsaWRhdG9ycyk7XHJcblxyXG4gICAgLy8gRGlzYWJsZSBpZiBhc3Nlc3NtZW50IGlzIGNvbXBsZXRlZFxyXG4gICAgaWYgKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYXNzZXNzbWVudFRha2VuPy5jb2RlID09PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScgfHwgdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBbcUlkXSA9IGNvbnRyb2w7XHJcblxyXG4gICAgLy8gQXR0YWNoIG1hcmsgYXNzaWdubWVudCBjb250cm9sIGlmIHJlcXVpcmVkXHJcbiAgICBpZiAodGhpcy5lbmFibGVNYXJrcyAmJiB0aGlzLnNob3VsZFNob3dNYXJrc0Ryb3Bkb3duKHF1ZXN0aW9uKSkge1xyXG4gICAgICBsZXQgbWFya1ZhbHVlID0gdGhpcy5nZXRQcmVmaWxsZWRNYXJrKHFJZCwgaXNDaGlsZCwgcGFyZW50SWQsIHBhcmVudE9wdGlvbklkKTtcclxuICAgICAgZ3JvdXBbYCR7cUlkfV9tYXJrc2BdID0gbmV3IEZvcm1Db250cm9sKG1hcmtWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaWxsZWRNYXJrKHFJZDogbnVtYmVyLCBpc0NoaWxkOiBib29sZWFuID0gZmFsc2UsIHBhcmVudElkPzogbnVtYmVyLCBwYXJlbnRPcHRpb25JZD86IG51bWJlcik6IGFueSB7XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYWlhZGVmYXVsdFJlc3BvbnNlTGlzdCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBhbnN3ZXJPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdC5maW5kKChhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzQ2hpbGQpIHtcclxuICAgICAgICByZXR1cm4gYS5jaGlsZFF1ZXN0aW9uSWQgPT09IHFJZCAmJiBhLmNoaWxkUXVlc3Rpb25QYXJlbnRRdWVzdGlvbklkID09PSBwYXJlbnRJZCAmJiBhLmNoaWxkRGVmYXVsdE9wdGlvbklkID09PSBwYXJlbnRPcHRpb25JZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5zd2VyT2JqPy5tYXJrcyA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25XZWlnaHQocUlkOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYW5rW3FJZF0/LndlaWdodCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWFya3NSYW5nZShxSWQ6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0UXVlc3Rpb25XZWlnaHQocUlkKTtcclxuICAgIGlmIChtYXggPT09IDApIHJldHVybiBbXTtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBNYXRoLmZsb29yKG1heCkgKyAxIH0sIChfLCBpKSA9PiBpKTtcclxuICB9XHJcblxyXG4gIHNob3VsZFNob3dNYXJrc0Ryb3Bkb3duKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGF1dG9Bc3NpZ25lZFR5cGVzID0gW1xyXG4gICAgICAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnLFxyXG4gICAgICAnUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnLFxyXG4gICAgICAnUVVFU1RJT05fVFlQRS5TQ0FMRV9SQVRJTkcnLFxyXG4gICAgICAnUVVFU1RJT05fVFlQRS5DT05TRU5UJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuTVVMVElTRUxFQ1RfSElFUkFSQ0hZJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuTVVMVElTRUxFQ1RfT1BUSU9OX1JJQ0hURVhUX1JFTUFSS1MnLFxyXG4gICAgICAnUVVFU1RJT05fVFlQRS5QUkVGRVJFTkNFJ1xyXG4gICAgXTtcclxuICAgIGNvbnN0IGhhc1dlaWdodCA9IHRoaXMuZ2V0UXVlc3Rpb25XZWlnaHQocXVlc3Rpb24uaWQgfHwgMCkgPiAwO1xyXG4gICAgcmV0dXJuICFhdXRvQXNzaWduZWRUeXBlcy5pbmNsdWRlcyhxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgfHwgJycpICYmIGhhc1dlaWdodDtcclxuICB9XHJcblxyXG4gIGdldFByZWZpbGxlZEFuc3dlcihxSWQ6IG51bWJlciwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGFuc3dlck9iaiA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0LmZpbmQoKGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNDaGlsZCkge1xyXG4gICAgICAgIHJldHVybiBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gcUlkICYmIGEuY2hpbGRRdWVzdGlvblBhcmVudFF1ZXN0aW9uSWQgPT09IHBhcmVudElkICYmIGEuY2hpbGREZWZhdWx0T3B0aW9uSWQgPT09IHBhcmVudE9wdGlvbklkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhLnNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZCA9PT0gcUlkICYmICghYS5jaGlsZFF1ZXN0aW9uSWQgfHwgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWFuc3dlck9iaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcVR5cGUgPSBxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGU7XHJcblxyXG4gICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnKSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmoub3B0aW9uSWQ/LmlkO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyB8fCBxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRScpIHtcclxuICAgICAgbGV0IHNvcnRlZExpc3QgPSBbLi4uKGFuc3dlck9iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCB8fCBbXSldO1xyXG4gICAgICBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnKSB7XHJcbiAgICAgICAgc29ydGVkTGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gKGEub3JkZXJObyB8fCAwKSAtIChiLm9yZGVyTm8gfHwgMCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzb3J0ZWRMaXN0Lm1hcCgocjogYW55KSA9PiByLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnMpIHx8IFtdO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuRklMRV9VUExPQUQnKSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrIHBhcnNpbmcgaWYgd2Ugb25seSBoYXZlIHJlc3BvbnNlVGV4dFxyXG4gICAgICByZXR1cm4gYW5zd2VyT2JqLmRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdD8ubWFwKChyOiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIHJldHVybiB7IGlkOiByLnJlc3BvbnNlVGV4dCB9OyAvLyBiYXNpYyBmYWxsYmFja1xyXG4gICAgICAgIH1cclxuICAgICAgfSkgfHwgW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYW5zd2VyT2JqLmRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdD8uWzBdPy5yZXNwb25zZVRleHQgPz8gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFZhbGlkYXRvcnNGb3JRdWVzdGlvbihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBpc01hbmRhdG9yeTogYm9vbGVhbik6IGFueVtdIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IGFueVtdID0gW107XHJcbiAgICBpZiAoaXNNYW5kYXRvcnkpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChxdWVzdGlvbi5yZXNwb25zZVZhbGlkYXRpb24pIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihxdWVzdGlvbi5yZXNwb25zZVZhbGlkYXRpb24pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLkVNQUlMJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5VUkwnKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXihodHRwcz86XFwvXFwvKT8oW1xcd1xcLV0rKFxcLltcXHdcXC1dKykrKShbXFwvPyNdLiopPyQvaSkpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuQ09OVEFDVF9OVU1CRVInKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXlswLTldezEwfSQvKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5OVU1CRVInKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXlswLTldKyQvKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25Db25maWdzICYmIHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG1pbkNoYXIgPSBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MuZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWluQ2hhcmFjdGVyQ291bnQnKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtaW5DaGFyKSB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoTnVtYmVyKG1pbkNoYXIpKSk7XHJcblxyXG4gICAgICBjb25zdCBtYXhDaGFyID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heENoYXJhY3RlckNvdW50Jyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWF4Q2hhcikgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKE51bWJlcihtYXhDaGFyKSkpO1xyXG5cclxuICAgICAgY29uc3QgbWluT3B0ID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1pbk9wdCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcclxuICAgICAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlLmxlbmd0aCA8IE51bWJlcihtaW5PcHQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG1pbk9wdGlvbnM6IHsgcmVxdWlyZWQ6IE51bWJlcihtaW5PcHQpLCBhY3R1YWw6IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCB8fCAwIH0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhPcHQgPSBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MuZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWF4T3B0KSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPiBOdW1iZXIobWF4T3B0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBtYXhPcHRpb25zOiB7IHJlcXVpcmVkOiBOdW1iZXIobWF4T3B0KSwgYWN0dWFsOiBjb250cm9sLnZhbHVlPy5sZW5ndGggfHwgMCB9IH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbWF4RmlsZXMgPSBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MuZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4Tm9PZkZpbGVzJyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWF4RmlsZXMpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA+IE51bWJlcihtYXhGaWxlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbWF4RmlsZXM6IHsgcmVxdWlyZWQ6IE51bWJlcihtYXhGaWxlcyksIGFjdHVhbDogY29udHJvbC52YWx1ZT8ubGVuZ3RoIHx8IDAgfSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1heEZpbGVTaXplID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heEZpbGVTaXplJyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWF4RmlsZVNpemUpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhcmdlRmlsZSA9IGNvbnRyb2wudmFsdWUuc29tZSgoZmlsZTogYW55KSA9PiBmaWxlPy5zaXplICYmIGZpbGUuc2l6ZSA+IChOdW1iZXIobWF4RmlsZVNpemUpICogMTAyNCAqIDEwMjQpKTtcclxuICAgICAgICAgICAgaWYgKGhhc0xhcmdlRmlsZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7IG1heEZpbGVTaXplOiB7IHJlcXVpcmVkU2l6ZTogTnVtYmVyKG1heEZpbGVTaXplKSB9IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICB9XHJcblxyXG4gIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICB9XHJcblxyXG4gIGlzT3B0aW9uU2VsZWN0ZWQoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24sIG9wdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGlmICghb3B0aW9uSWQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgY29udHJvbE5hbWUgPSBxdWVzdGlvbi5pZD8udG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2xOYW1lKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xyXG4gICAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wudmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8vIE11bHRpLXNlbGVjdCBkZWFscyB3aXRoIGFuIGFycmF5IG9mIHZhbHVlc1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUuaW5jbHVkZXMob3B0aW9uSWQpIHx8IGNvbnRyb2wudmFsdWUuc29tZSgodmFsOiBhbnkpID0+IHZhbD8uaWQgPT09IG9wdGlvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPYmplY3RpdmUgLyBTaW5nbGUgc2VsZWN0IGRlYWxzIHdpdGggYSBzaW5nbGUgdmFsdWUgKGNvdWxkIGJlIGludGVnZXIgSUQgb3Igb2JqZWN0KVxyXG4gICAgaWYgKHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnb2JqZWN0JyAmJiBjb250cm9sLnZhbHVlLmlkKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLmlkID09PSBvcHRpb25JZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29udHJvbC52YWx1ZSA9PT0gb3B0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhDaGFyQ291bnQocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbik6IG51bWJlciB7XHJcbiAgICBjb25zdCBjb25maWcgPSBxdWVzdGlvbj8ucXVlc3Rpb25Db25maWdzPy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhDaGFyYWN0ZXJDb3VudCcpO1xyXG4gICAgcmV0dXJuIGNvbmZpZyA/IE51bWJlcihjb25maWcuY29uZmlnVmFsdWUpIDogMDtcclxuICB9XHJcblxyXG4gIGdldFJlbWFpbmluZ0NoYXJzKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGNvbnRyb2w6IGFueSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLmdldE1heENoYXJDb3VudChxdWVzdGlvbik7XHJcbiAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gY29udHJvbC52YWx1ZSA/IGNvbnRyb2wudmFsdWUubGVuZ3RoIDogMDtcclxuICAgIHJldHVybiBtYXggLSBjdXJyZW50TGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ29CYWNrKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4LS07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG91bGREaXNhYmxlVGFiKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kZXg7IGorKykge1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uRm9ybUdyb3Vwc1tqXT8uZm9ybUdyb3VwPy5pbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdvTmV4dChtYXJrQXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSB0cnVlLCBzYXZlRGF0YTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNhdmUgPSB0aGlzLmFzc2Vzc21lbnREYXRhPy5hc3Nlc3NtZW50Q29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09ICdhc3Nlc21lbnQuY29uZmlnLmFsbG93ZWQtcGFydGlhbC1yZXNwb25zZScpPy5jb25maWdWYWx1ZSA9PSAnMSc7XHJcbiAgICBjb25zdCBjdXJyZW50U2VjdGlvbiA9IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XTtcclxuICAgIGlmICghY3VycmVudFNlY3Rpb24pIHJldHVybjtcclxuXHJcbiAgICBjdXJyZW50U2VjdGlvbi5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG5cclxuICAgIGlmIChjdXJyZW50U2VjdGlvbi5mb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlY3Rpb25FcnJvcnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPCB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgc2F2ZSAmJiBzYXZlRGF0YSA/IHRoaXMuc2F2ZSgpIDogdGhpcy5zZWxlY3RlZFRhYkluZGV4Kys7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByb2Nlc3NTdWJtaXQobWFya0FzQ29tcGxldGVkLCBzYXZlRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBhbmRlZFN0YXRlOiBib29sZWFuW10gPSBbXTtcclxuXHJcbiAgcHJvY2Vzc1N1Ym1pdChtYXJrQXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSB0cnVlLCBzYXZlRGF0YTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGxldCBmaXJzdEludmFsaWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgZ3JvdXAuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgaWYgKGdyb3VwLmZvcm1Hcm91cC5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uRXJyb3JzW2luZGV4XSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGZpcnN0SW52YWxpZEluZGV4ID09PSAtMSkgZmlyc3RJbnZhbGlkSW5kZXggPSBpbmRleDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbaW5kZXhdID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChmaXJzdEludmFsaWRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLnZlcnRpY2FsVmlldykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGZpcnN0SW52YWxpZEluZGV4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRTdGF0ZVtmaXJzdEludmFsaWRJbmRleF0gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRklYX0VSUk9SUyddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICB0aGlzLnNjcm9sbFRvRmlyc3RJbnZhbGlkRmllbGQoZmlyc3RJbnZhbGlkSW5kZXgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zYXZlKHRydWUsIG1hcmtBc0NvbXBsZXRlZCwgc2F2ZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChzZWN0aW9uSW5kZXg6IG51bWJlcikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbc2VjdGlvbkluZGV4XS5mb3JtR3JvdXA7XHJcbiAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgaW4gZm9ybUdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0uaW52YWxpZCkge1xyXG4gICAgICAgICAgbGV0IHFJZCA9IGNvbnRyb2xOYW1lO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCdfcmVtYXJrc18nKSB8fCBjb250cm9sTmFtZS5pbmNsdWRlcygnX21hcmtzJykpIHtcclxuICAgICAgICAgICAgcUlkID0gY29udHJvbE5hbWUuc3BsaXQoJ18nKVswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcXVlc3Rpb24tY29udGFpbmVyLSR7cUlkfWApO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKGdvTmV4dDogYm9vbGVhbiA9IHRydWUsIG1hcmtBc0NvbXBsZXRlZDogYm9vbGVhbiA9IHRydWUsIHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGlmIChtYXJrQXNDb21wbGV0ZWQgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYXNzZXNzbWVudFRha2VuID0geyBjb2RlOiAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLklOQ09NUExFVEUnIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucmVzcG9uc2VCdWlsZGVyU2VydmljZS5idWlsZFJlc3BvbnNlUGF5bG9hZChcclxuICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLFxyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSxcclxuICAgICAgdGhpcy5zZWN0aW9uRm9ybUdyb3VwcyxcclxuICAgICAgdGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgIHRoaXMudGVuYW50SWRcclxuICAgICk7XHJcbiAgICBpZiAoIXNhdmVEYXRhIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdWJtaXRBc3Nlc3NtZW50LmVtaXQoe1xyXG4gICAgICAgIGFzc2Vzc2VlSWQ6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQsXHJcbiAgICAgICAgYXNzZXNzZWVSZXNwb25zZTogcGF5bG9hZCxcclxuICAgICAgICBjb21wbGV0ZWQ6IGdvTmV4dCAmJiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSB8fCB0aGlzLnZlcnRpY2FsVmlldylcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChnb05leHQgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBpQ2FsbCA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgPyB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UucGF0Y2hBc3Nlc3NtZW50KHBheWxvYWQpIDogdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLnN1Ym1pdEFzc2Vzc21lbnQocGF5bG9hZCk7XHJcbiAgICBhcGlDYWxsLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCkge1xyXG4gICAgICAgICAgdGhpcy5nZXRBbnN3ZXJzQnlBaWFJZChyZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSByZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRBc3Nlc3NtZW50LmVtaXQoe1xyXG4gICAgICAgICAgYXNzZXNzZWVJZDogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCB8fCByZXMsXHJcbiAgICAgICAgICBhc3Nlc3NlZVJlc3BvbnNlOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkID8gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlIDogcGF5bG9hZCxcclxuICAgICAgICAgIGNvbXBsZXRlZDogZ29OZXh0ICYmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxIHx8IHRoaXMudmVydGljYWxWaWV3KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChnb05leHQgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlNBVkVfRkFJTEVEJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkID8gJ1BBVENIJyA6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QW5zd2Vyc0J5QWlhSWQoYXNzZXNzZWVJZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0QW5zd2Vyc0J5QWlhSWQoYXNzZXNzZWVJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0gcmVzO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuR0VUX0ZBSUxFRCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ0dFVCcgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFlvdXR1YmVJZnJhbWVTcmModmlkZW9Vcmw6IHN0cmluZykge1xyXG4gICAgY29uc3QgdmlkZW9JZCA9IHRoaXMuZ2V0VmlkZW9JZCh2aWRlb1VybCk7XHJcbiAgICBjb25zdCB5b3V0dWJlVXJsID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh5b3V0dWJlVXJsKTtcclxuICB9XHJcblxyXG4gIGdldFZpZGVvSWQodmlkZW9Vcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHBhdHRlcm4gPSBudWxsO1xyXG4gICAgaWYgKHZpZGVvVXJsLmluY2x1ZGVzKCd5b3V0dWJlLmNvbScpKSB7XHJcbiAgICAgIHBhdHRlcm4gPSAvKD86XFw/dj18JnY9fHlvdXR1XFwuYmVcXC98XFwvZW1iZWRcXC98XFwvXFxkXFwvfFxcL3ZpXFwvfFxcL3ZcXC98aHR0cHM/OlxcL1xcLyg/Ond3d1xcLik/eW91dHViZVxcLmNvbVxcLyg/OnZcXC98ZW1iZWRcXC98d2F0Y2hcXD8oPzpcXFMrJik/dj18d2F0Y2hcXD8oPzpcXFMrJik/dmk9fFxcUytcXC8pKShbYS16QS1aMC05Xy1dezExfSkvO1xyXG4gICAgfSBlbHNlIGlmICh2aWRlb1VybC5pbmNsdWRlcygneW91dHUuYmUnKSkge1xyXG4gICAgICBwYXR0ZXJuID0gL3lvdXR1XFwuYmVcXC8oW2EtekEtWjAtOV8tXXsxMX0pLztcclxuICAgIH1cclxuICAgIGlmIChwYXR0ZXJuKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gdmlkZW9VcmwubWF0Y2gocGF0dGVybik7XHJcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaFsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBvcGVuSW5zdHJ1Y3Rpb25zRGlhbG9nKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKSB7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFNlY3Rpb25JbnN0cnVjdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICB3aWR0aDogJ2NhbGMoMjByZW0gKyA1MDBweCknLFxyXG4gICAgICBtYXhIZWlnaHQ6ICc5NWR2aCcsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmltYWdlQ29uZmlnLFxyXG4gICAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIHNlY3Rpb25EZXRhaWxzOiBzZWN0aW9uXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImNvbmZpZ3NMb2FkZWQgJiYgIXNob3dMb2FkZXI7IGVsc2UgbG9hZGVyXCIgY2xhc3M9XCJjb2wtMTIgaC0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgaC0xMDAgcHQtMiBwYi00XCIgW2NsYXNzLmhlaWdodC13aXRob3V0LWZvb3Rlcl09XCJzaG93Rm9vdGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgKm5nSWY9XCIhdmVydGljYWxWaWV3XCIgYW5pbWF0aW9uRHVyYXRpb249XCIwbXNcIiBjbGFzcz1cImFzc2Vzc21lbnQtbWF0LWN1c3RvbS10YWJzXCJcclxuICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRJbmRleCldPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC10YWJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0IHwgb3JkZXJCeTsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNob3VsZERpc2FibGVUYWIoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VjdGlvbkVycm9yc1tpXSA/ICdhc3Nlc3NtZW50LXRleHQtZGFuZ2VyJyA6ICcnXCI+e3tzZWN0aW9uLnFwc05hbWU/LlswXT8udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWN0aW9uQ29udGVudDsgY29udGV4dDogeyBzZWN0aW9uOiBzZWN0aW9uLCBpOiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1hY2NvcmRpb24gKm5nSWY9XCJ2ZXJ0aWNhbFZpZXdcIiBtdWx0aT1cInRydWVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtNCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QgfCBvcmRlckJ5OyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRTdGF0ZVtpXSAhPT0gZmFsc2VcIiAob3BlbmVkKT1cImV4cGFuZGVkU3RhdGVbaV0gPSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VkKT1cImV4cGFuZGVkU3RhdGVbaV0gPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIHNoYWRvdy1ub25lIG0tMCBhc3Nlc3NtZW50LXBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYXNzZXNzbWVudC1iZy1ncmV5LXR3byBoLWF1dG8gcHktMyBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlY3Rpb25FcnJvcnNbaV0gPyAnYXNzZXNzbWVudC10ZXh0LWRhbmdlcicgOiAnJ1wiPnt7c2VjdGlvbi5xcHNOYW1lPy5bMF0/LnRleHR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBweC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VjdGlvbkNvbnRlbnQ7IGNvbnRleHQ6IHsgc2VjdGlvbjogc2VjdGlvbiwgaTogaSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJoLTEwMCBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5OT19RVUVTVElPTlMnXVwiIGNsYXNzPVwiY29sLXNtLWF1dG8gY29sLTZcIlxyXG4gICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL25vLXF1ZXN0aW9ucy5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMThcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTk9fUVVFU1RJT05TJ119fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93Rm9vdGVyICYmICghcHJldmlld01vZGUgfHwgZW5hYmxlTWFya3MpXCJcclxuICAgICAgICBjbGFzcz1cImJnLXdoaXRlIHAtMyBwb3NpdGlvbi1zdGlja3kgYm90dG9tLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJvcmRlci10b3AgZ2FwLTMgei1pbmRleC0xXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nLWxhcmdlIGFzc2Vzc21lbnQtYnRuLXByaW1hcnktdHJhbnNwYXJlbnQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCIgKm5nSWY9XCJzZWxlY3RlZFRhYkluZGV4ID4gMCAmJiAhdmVydGljYWxWaWV3XCI+XHJcbiAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5HT19CQUNLJ119fTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiIChjbGljayk9XCJ2ZXJ0aWNhbFZpZXcgPyBwcm9jZXNzU3VibWl0KHRydWUpIDogZ29OZXh0KClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nLWxhcmdlIGFzc2Vzc21lbnQtYnRuLXByaW1hcnkgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS0wJzogaXNTdWJtaXR0aW5nfVwiPlxyXG4gICAgICAgICAgICAgICAge3sgKHZlcnRpY2FsVmlldyB8fCBzZWxlY3RlZFRhYkluZGV4ID09PSBzZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSA/XHJcbiAgICAgICAgICAgICAgICBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNVQk1JVCddIDogbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5ORVhUJ10gfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1N1Ym1pdHRpbmdcIiBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZSBhc3Nlc3NtZW50LXNwaW5uZXItd2hpdGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNsb2FkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS01XCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNjBcIiBjbGFzcz1cImFzc2Vzc21lbnQtc3Bpbm5lci1wcmltYXJ5XCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBSZWN1cnNpdmUgVGVtcGxhdGUgZm9yIFF1ZXN0aW9ucyAmIENoaWxkIFF1ZXN0aW9ucyAtLT5cclxuPG5nLXRlbXBsYXRlICNxdWVzdGlvblRlbXBsYXRlIGxldC1xdWVzdGlvbklkPVwicXVlc3Rpb25JZFwiIGxldC1pc01hbmRhdG9yeT1cImlzTWFuZGF0b3J5XCIgbGV0LWdyb3VwSW5kZXg9XCJncm91cEluZGV4XCJcclxuICAgIGxldC1wYXJlbnRPcHRpb25JZD1cInBhcmVudE9wdGlvbklkXCIgbGV0LXF1ZXN0aW9uSW5kZXg9XCJxdWVzdGlvbkluZGV4XCI+XHJcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwic2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwXCIgW2lkXT1cIidxdWVzdGlvbi1jb250YWluZXItJyArIHF1ZXN0aW9uSWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtYi0zIGFzc2Vzc21lbnQtYmctd2hpdGVcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3AtMyBhc3Nlc3NtZW50LWNhcmQtYm9yZGVyJzogIXBhcmVudE9wdGlvbklkICYmICF2ZXJ0aWNhbFZpZXd9XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbkJhbmtbcXVlc3Rpb25JZF0gYXMgcXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1tZC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTIgZ2FwLW1kLTMgYWxpZ24taXRlbXMtbWQtc3RhcnQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtbWQtMyBnYXAtMiBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTUgbWItMCBkLWZsZXggZ2FwLTEgZ2FwLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cXVlc3Rpb25JbmRleCArIDF9fS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwicXVlc3Rpb24ucXVlc3Rpb25UZXh0Py5bMF0/LnRleHRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgY29sLTEyXCIgKm5nSWY9XCJxdWVzdGlvbj8ubWVkaWFVcmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlZpZGVvVGVtcGxhdGU7IGNvbnRleHQ6e3ZpZGVvVXJsOnF1ZXN0aW9uPy5tZWRpYVVybH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmhpbnRUZXh0ICYmICFwcmV2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLklORk8nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvaW5mby5zdmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwidG9vbHRpcFN0YXRlW3F1ZXN0aW9uLmlkIV0gPSBmYWxzZVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJbeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcicsIG9mZnNldFg6IC04LCBvZmZzZXRZOiAwIH0sIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiA4LCBvZmZzZXRZOiAwIH1dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1iZy1ncmV5LXR3byBhc3Nlc3NtZW50LXRvb2x0aXAtYm9yZGVyIHAtMyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYm94LXNoYWRvdy10b29sdGlwIHF1ZXN0aW9uLWluZm8gYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwidG9vbHRpcFN0YXRlW3F1ZXN0aW9uLmlkIV0gPSBmYWxzZVwiIFtpbm5lckhUTUxdPVwicXVlc3Rpb24uaGludFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBBc3Nlc3NvciBNYXJrcyBEcm9wZG93biBMb2dpYyAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVuYWJsZU1hcmtzICYmIHNob3VsZFNob3dNYXJrc0Ryb3Bkb3duKHF1ZXN0aW9uKSAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkICsgJ19tYXJrcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtbWFya3MtZHJvcGRvd24gYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFSS1MnXX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQgKyAnX21hcmtzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWFyayBvZiBnZXRNYXJrc1JhbmdlKHF1ZXN0aW9uLmlkISlcIiBbdmFsdWVdPVwibWFya1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWFya319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5TVUJKRUNUSVZFX1NIT1JUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlNVQkpFQ1RJVkVfTE9ORydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtbG9uZyBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtbG9uZz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuU1VCSkVDVElWRV9SSUNIX1RFWFQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLWVkaXRvciBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW9iamVjdGl2ZSBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtb2JqZWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW11bHRpc2VsZWN0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCI+PC9saWItcXVlc3Rpb24tdHlwZS1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtcHJlZmVyZW5jZSBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtcHJlZmVyZW5jZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkVNQUlMJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlVSTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5GSUxFX1VQTE9BRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtZmlsZS11cGxvYWQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VDb25maWddPVwiaW1hZ2VDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBFcnJvciBNZXNzYWdlcyBhbmQgQ2hhcmFjdGVyIENvdW50IENvbnRhaW5lciAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY3Rpb25Gb3JtR3JvdXBzW2dyb3VwSW5kZXhdLmZvcm1Hcm91cC5nZXQocXVlc3Rpb24uaWQ/LnRvU3RyaW5nKCkgfHwgJycpIGFzIGNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtc3RhcnQgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRURfUkVTUE9OU0UnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cXVlc3Rpb24/LnZhbGlkYXRpb25NZXNzYWdlIHx8IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuSU5WQUxJRF9GT1JNQVQnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydtaW5sZW5ndGgnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1JTl9DSEFSUyddPy5yZXBsYWNlKCd7e2xlbmd0aH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21pbmxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0NIQVJTJ10/LnJlcGxhY2UoJ3t7bGVuZ3RofX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWluT3B0aW9ucyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUlOX09QVElPTlMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21pbk9wdGlvbnMnXS5yZXF1aXJlZCArICcnKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydtYXhPcHRpb25zJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfT1BUSU9OUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4T3B0aW9ucyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfRklMRVMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZVNpemUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9GSUxFX1NJWkUnXT8ucmVwbGFjZSgne3tzaXplfX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZVNpemUnXS5yZXF1aXJlZFNpemUgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgbXMtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0UmVtYWluaW5nQ2hhcnMocXVlc3Rpb24sIGNvbnRyb2wpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSEFSQUNURVInXX19e3tnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbiwgY29udHJvbCkgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncycgOiAnJ319IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BSU5JTkcnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ2hpbGQgUXVlc3Rpb25zIGFuZCBSZW1hcmtzIFJlbmRlcmluZyBMb2dpYyBiYXNlZCBvbiBjaGVja2VkIGZvcm0gc3RhdGUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPcHRpb25TZWxlY3RlZChzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAsIHF1ZXN0aW9uLCBvcHRpb24ub3B0aW9ucz8uaWQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJFTUFSS1MgRklFTEQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnJlbWFya3NSZXF1aXJlZCAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkICsgJ19yZW1hcmtzXycgKyBvcHRpb24uaWQpIGFzIHJlbWFya3NDb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTE1IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUkVNQVJLUyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwie3txdWVzdGlvbi5pZH19X3JlbWFya3Nfe3tvcHRpb24uaWR9fVwiIHJvd3M9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5SRU1BUktTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbWFya3NDb250cm9sLmludmFsaWQgJiYgcmVtYXJrc0NvbnRyb2wudG91Y2hlZCA/ICdhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgb3V0bGluZS0wIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZW1hcmtzQ29udHJvbC5pbnZhbGlkICYmIHJlbWFya3NDb250cm9sLnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuRklFTERfUkVRVUlSRUQnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENISUxEIFFVRVNUSU9OUyBSRUNVUlNJT04gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtM1wiICpuZ0lmPVwib3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkSWQgb2Ygb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0OyBsZXQgY2hpbGRJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInF1ZXN0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGNoaWxkSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01hbmRhdG9yeTogcXVlc3Rpb25CYW5rW2NoaWxkSWRdPy5pc01hbmRhdG9yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSW5kZXg6IGdyb3VwSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPcHRpb25JZDogb3B0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JbmRleDogY2hpbGRJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBSZXVzYWJsZSBTZWN0aW9uIEZvcm0gVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2VjdGlvbkNvbnRlbnQgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCIgbGV0LWk9XCJpXCI+XHJcbiAgICA8Zm9ybSBjbGFzcz1cInctMTAwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tpXS5mb3JtR3JvdXBcIiBbbmFtZV09XCInc2VjdGlvbmZybS0nICsgaVwiIG5vdmFsaWRhdGU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItNFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNCBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UT1RBTF9RVUVTVElPTlMnXX19e3sgc2VjdGlvbj8udG90YWxRdWVzdGlvbnMgfHwgMCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5JbnN0cnVjdGlvbnNEaWFsb2coc2VjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJldmlld01vZGUgJiYgKHNlY3Rpb24/LnFwc0Rlc2M/LlswXT8udGV4dCB8fCBzZWN0aW9uPy5tZWRpYVVybClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVklFV19JTlNUUlVDVElPTlMnXX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzcSBvZiBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0IHwgb3JkZXJCeTsgbGV0IGogPSBpbmRleFwiIGNsYXNzPVwiY29sLTEyXCIgW25nQ2xhc3NdPVwieydwYi00JzogdmVydGljYWxWaWV3fVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVlc3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc3EucXVlc3Rpb25JZCxcclxuICAgICAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBxdWVzdGlvbkJhbmtbc3EucXVlc3Rpb25JZF0/LmlzTWFuZGF0b3J5LFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogaSxcclxuICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JbmRleDogalxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSB2aWRlbyBwcmV2aWV3ICAtLT5cclxuPG5nLXRlbXBsYXRlIGxldC12aWRlb1VybD1cInZpZGVvVXJsXCIgI1ZpZGVvVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdmVyZmxvdy1oaWRkZW4gY29sLW1kLTEwIGNvbC0xMlwiPlxyXG4gICAgICAgIDx2aWRlbyAqbmdJZj1cInZpZGVvVXJsPy5pbmNsdWRlcygnLm1wNCcpIGVsc2UgeW91dHViZVZpZGVvXCIgd2lkdGg9XCI0MDBcIiBjb250cm9scyBjbGFzcz1cIm13LTEwMCBkLWJsb2NrIG14LWF1dG9cIj5cclxuICAgICAgICAgICAgPHNvdXJjZSBbc3JjXT1cInZpZGVvVXJsXCIgdHlwZT1cInZpZGVvL21wNFwiPlxyXG4gICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICN5b3V0dWJlVmlkZW8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ5b3V0dWJlLXZpZGVvIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aWZyYW1lIFtzcmNdPVwiYWRkWW91dHViZUlmcmFtZVNyYyh2aWRlb1VybClcIiB0aXRsZT1cIllvdVR1YmUgdmlkZW8gcGxheWVyXCIgZnJhbWVib3JkZXI9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IHdlYi1zaGFyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dmdWxsc2NyZWVuIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTAgc3RhcnQtMCB3LTEwMCBoLTEwMCBkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|