@rangertechnologies/ngnxt 2.1.174 → 2.1.176
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/environments/version.mjs +2 -2
- package/esm2022/lib/components/button/nxt-button.component.mjs +42 -39
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +48 -7
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +41 -4
- package/esm2022/lib/components/datatable/datatable.component.mjs +6 -3
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +24 -59
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +2822 -0
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +19 -5
- package/esm2022/lib/components/search-box/search-box.component.mjs +19 -13
- package/esm2022/lib/nxt-app.module.mjs +13 -292
- package/esm2022/lib/pages/booklet/booklet.component.mjs +20 -7
- package/esm2022/lib/pages/builder/element/element.component.mjs +8 -5
- package/esm2022/lib/pages/builder/form/form.component.mjs +6 -5
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +7 -5
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +4 -5
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +2 -2
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +14 -30
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +21 -40
- package/esm2022/public-api.mjs +2 -11
- package/fesm2022/rangertechnologies-ngnxt.mjs +15904 -14727
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/button/nxt-button.component.d.ts +13 -12
- package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +11 -4
- package/lib/components/custom-radio/custom-radio.component.d.ts +14 -3
- package/lib/components/datatable/datatable.component.d.ts +2 -1
- package/lib/components/file-upload/file-upload.component.d.ts +6 -5
- package/lib/components/nxt-input/nxt-input.component.d.ts +159 -0
- package/lib/components/pick-location/pick-location.component.d.ts +5 -3
- package/lib/components/search-box/search-box.component.d.ts +3 -2
- package/lib/nxt-app.module.d.ts +30 -55
- package/lib/pages/booklet/booklet.component.d.ts +3 -1
- package/lib/pages/builder/element/element.component.d.ts +1 -1
- package/lib/pages/builder/form/form.component.d.ts +1 -1
- package/lib/pages/builder/properties/properties.component.d.ts +1 -1
- package/lib/pages/questionbook/questionbook.component.d.ts +3 -3
- package/lib/pages/questionnaire/questionnaire.component.d.ts +6 -10
- package/package.json +1 -1
- package/public-api.d.ts +1 -9
- package/rangertechnologies-ngnxt-2.1.176.tgz +0 -0
- package/src/lib/style.css +0 -1
- package/esm2022/lib/components/cards/group-card/group-card.component.mjs +0 -36
- package/esm2022/lib/components/cards/group-info/group-info.component.mjs +0 -102
- package/esm2022/lib/components/cards/image-card/image-card.component.mjs +0 -83
- package/esm2022/lib/components/cards/info-card/info-card.component.mjs +0 -109
- package/esm2022/lib/components/custom-button/custom-button.component.mjs +0 -42
- package/esm2022/lib/components/custom-date/custom-date.component.mjs +0 -48
- package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +0 -53
- package/esm2022/lib/components/custom-image/custom-image.component.mjs +0 -34
- package/esm2022/lib/components/custom-input/custom-input.component.mjs +0 -101
- package/esm2022/lib/components/custom-label/custom-label.component.mjs +0 -24
- package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +0 -182
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +0 -252
- package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +0 -71
- package/esm2022/lib/components/custom-time/custom-time.component.mjs +0 -66
- package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +0 -45
- package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +0 -44
- package/esm2022/lib/components/file-view/file-view.component.mjs +0 -49
- package/esm2022/lib/components/loader/loader.component.mjs +0 -23
- package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +0 -128
- package/esm2022/lib/model/tableWrapper.mjs +0 -20
- package/esm2022/lib/pages/summary-page/summary-page.component.mjs +0 -79
- package/lib/components/cards/group-card/group-card.component.d.ts +0 -13
- package/lib/components/cards/group-info/group-info.component.d.ts +0 -47
- package/lib/components/cards/image-card/image-card.component.d.ts +0 -34
- package/lib/components/cards/info-card/info-card.component.d.ts +0 -39
- package/lib/components/custom-button/custom-button.component.d.ts +0 -16
- package/lib/components/custom-date/custom-date.component.d.ts +0 -16
- package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +0 -20
- package/lib/components/custom-image/custom-image.component.d.ts +0 -13
- package/lib/components/custom-input/custom-input.component.d.ts +0 -28
- package/lib/components/custom-label/custom-label.component.d.ts +0 -10
- package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +0 -29
- package/lib/components/custom-table/custom-table.component.d.ts +0 -53
- package/lib/components/custom-text-area/custom-text-area.component.d.ts +0 -22
- package/lib/components/custom-time/custom-time.component.d.ts +0 -18
- package/lib/components/dependent-table/dependent-table.component.d.ts +0 -15
- package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +0 -16
- package/lib/components/file-view/file-view.component.d.ts +0 -16
- package/lib/components/loader/loader.component.d.ts +0 -11
- package/lib/components/table-appendix/table-appendix.component.d.ts +0 -30
- package/lib/model/tableWrapper.d.ts +0 -18
- package/lib/pages/summary-page/summary-page.component.d.ts +0 -20
- package/rangertechnologies-ngnxt-2.1.174.tgz +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ViewEncapsulation, } from "@angular/core";
|
|
2
2
|
import { FormsModule } from "@angular/forms";
|
|
3
|
-
import { NgxSpinnerModule } from "ngx-spinner";
|
|
4
3
|
import * as moment from 'moment';
|
|
5
4
|
import { ChangeService } from '../../services/change.service';
|
|
6
5
|
import { Question, AnswerWrapper, OptionValue, AttachmentWrapper, Attachment, LocalQuestion } from "../../wrapper";
|
|
@@ -8,15 +7,10 @@ import { ErrorWrapper } from "../../model/errorWrapper";
|
|
|
8
7
|
import { DTQUESTION, TESTQB } from "../../sample";
|
|
9
8
|
import { CommonModule } from "@angular/common";
|
|
10
9
|
import { I18nPipe } from "../../i18n.pipe";
|
|
11
|
-
import { DropdownWithFlagComponent } from "../../components/dropdown-with-flag/dropdown-with-flag.component";
|
|
12
10
|
import { CustomDropdownComponent } from "../../components/custom-dropdown/custom-dropdown.component";
|
|
13
11
|
import { NxtDatatable } from "../../components/datatable/datatable.component";
|
|
14
|
-
import { CustomTextAreaComponent } from "../../components/custom-text-area/custom-text-area.component";
|
|
15
12
|
import { PickLocationComponent } from "../../components/pick-location/pick-location.component";
|
|
16
|
-
import {
|
|
17
|
-
import { CustomLabelComponent } from "../../components/custom-label/custom-label.component";
|
|
18
|
-
import { CustomDatePickerComponent } from "../../components/custom-date-picker/custom-date-picker.component";
|
|
19
|
-
import { CustomRichTextComponent } from "../../components/custom-rich-text/custom-rich-text.component";
|
|
13
|
+
import { NxtInput } from "../../components/nxt-input/nxt-input.component";
|
|
20
14
|
import * as i0 from "@angular/core";
|
|
21
15
|
import * as i1 from "../../services/salesforce.service";
|
|
22
16
|
import * as i2 from "../../services/data.service";
|
|
@@ -24,11 +18,10 @@ import * as i3 from "../../services/change.service";
|
|
|
24
18
|
import * as i4 from "../../services/shared.service";
|
|
25
19
|
import * as i5 from "@angular/router";
|
|
26
20
|
import * as i6 from "@angular/platform-browser";
|
|
27
|
-
import * as i7 from "
|
|
28
|
-
import * as i8 from "
|
|
29
|
-
import * as i9 from "
|
|
30
|
-
import * as i10 from "
|
|
31
|
-
import * as i11 from "@angular/common";
|
|
21
|
+
import * as i7 from "@angular/forms";
|
|
22
|
+
import * as i8 from "ngx-device-detector";
|
|
23
|
+
import * as i9 from "../../i18n.service";
|
|
24
|
+
import * as i10 from "@angular/common";
|
|
32
25
|
export class QuestionnaireComponent {
|
|
33
26
|
sfService;
|
|
34
27
|
dataService;
|
|
@@ -36,7 +29,6 @@ export class QuestionnaireComponent {
|
|
|
36
29
|
sharedService;
|
|
37
30
|
route;
|
|
38
31
|
sanitizer;
|
|
39
|
-
spinner;
|
|
40
32
|
_formBuilder;
|
|
41
33
|
deviceService;
|
|
42
34
|
i18nService;
|
|
@@ -45,6 +37,7 @@ export class QuestionnaireComponent {
|
|
|
45
37
|
serv;
|
|
46
38
|
tkn;
|
|
47
39
|
api; // VD getting the api as input
|
|
40
|
+
isEdit;
|
|
48
41
|
handleEvent = new EventEmitter();
|
|
49
42
|
handlePage = new EventEmitter();
|
|
50
43
|
handleQuestion = new EventEmitter();
|
|
@@ -208,8 +201,6 @@ export class QuestionnaireComponent {
|
|
|
208
201
|
recordId;
|
|
209
202
|
currentQuestionId;
|
|
210
203
|
spinnerType;
|
|
211
|
-
spinnerName;
|
|
212
|
-
nextValue = '';
|
|
213
204
|
start_date;
|
|
214
205
|
//search component
|
|
215
206
|
tempoAddress = [];
|
|
@@ -231,7 +222,7 @@ export class QuestionnaireComponent {
|
|
|
231
222
|
myDatePickerOptions = {};
|
|
232
223
|
individualBookButton;
|
|
233
224
|
allInputValues = []; // HA 02FEB24 To store all the input values
|
|
234
|
-
constructor(sfService, dataService, changeService, sharedService, route, sanitizer,
|
|
225
|
+
constructor(sfService, dataService, changeService, sharedService, route, sanitizer, _formBuilder,
|
|
235
226
|
//private dbService: NgxIndexedDBService,
|
|
236
227
|
deviceService, el, i18nService) {
|
|
237
228
|
this.sfService = sfService;
|
|
@@ -240,12 +231,10 @@ export class QuestionnaireComponent {
|
|
|
240
231
|
this.sharedService = sharedService;
|
|
241
232
|
this.route = route;
|
|
242
233
|
this.sanitizer = sanitizer;
|
|
243
|
-
this.spinner = spinner;
|
|
244
234
|
this._formBuilder = _formBuilder;
|
|
245
235
|
this.deviceService = deviceService;
|
|
246
236
|
this.i18nService = i18nService;
|
|
247
237
|
// VD 10Aug24-spinner changes
|
|
248
|
-
this.spinnerName = "sp1";
|
|
249
238
|
this.spinnerType = "ball-spin-clockwise-fade";
|
|
250
239
|
}
|
|
251
240
|
// HA 02FEB24 On date change need to store the changed value so passing the question
|
|
@@ -482,7 +471,6 @@ export class QuestionnaireComponent {
|
|
|
482
471
|
}
|
|
483
472
|
handleNextClick() {
|
|
484
473
|
// this.sharedService.showLoader();
|
|
485
|
-
this.spinner.show(this.spinnerName);
|
|
486
474
|
this.isButtonDisabled = true;
|
|
487
475
|
this.backButtonFlag = false;
|
|
488
476
|
this.AnswerSave();
|
|
@@ -835,7 +823,6 @@ export class QuestionnaireComponent {
|
|
|
835
823
|
this.questionItem.error = new ErrorWrapper();
|
|
836
824
|
// VD disabled
|
|
837
825
|
//this.sharedService.hideLoader();
|
|
838
|
-
this.spinner.hide(this.spinnerName);
|
|
839
826
|
this.isButtonDisabled = false;
|
|
840
827
|
return;
|
|
841
828
|
}
|
|
@@ -978,7 +965,6 @@ export class QuestionnaireComponent {
|
|
|
978
965
|
this.pop = false;
|
|
979
966
|
// VD disabled
|
|
980
967
|
// this.sharedService.hideLoader();
|
|
981
|
-
this.spinner.hide(this.spinnerName);
|
|
982
968
|
this.isButtonDisabled = false;
|
|
983
969
|
// Reset the Variables
|
|
984
970
|
this.inpValue = "";
|
|
@@ -1067,7 +1053,6 @@ export class QuestionnaireComponent {
|
|
|
1067
1053
|
// Read the previous question from DB
|
|
1068
1054
|
// VD disabled
|
|
1069
1055
|
// this.sharedService.showLoader();
|
|
1070
|
-
this.spinner.show(this.spinnerName);
|
|
1071
1056
|
this.isButtonDisabled = true;
|
|
1072
1057
|
this.readQuestion(this.questionStack.pop());
|
|
1073
1058
|
//console.log(this.questionStack);
|
|
@@ -1162,14 +1147,12 @@ export class QuestionnaireComponent {
|
|
|
1162
1147
|
// this.failureReadBook
|
|
1163
1148
|
// );
|
|
1164
1149
|
//this.sharedService.showLoader();
|
|
1165
|
-
this.spinner.show(this.spinnerName);
|
|
1166
1150
|
let paramMap = { createAnswerBookFlag: true };
|
|
1167
1151
|
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1168
1152
|
paramMap['c__qb_id'] = uuid;
|
|
1169
1153
|
paramMap["c__record_id"] = '';
|
|
1170
1154
|
this.dataService.getAPIFromNode('QuestionBook', 'read', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1171
1155
|
// this.sharedService.hideLoader();
|
|
1172
|
-
// this.spinner.hide(this.spinnerName);
|
|
1173
1156
|
// VD disabled
|
|
1174
1157
|
this.isButtonDisabled = false;
|
|
1175
1158
|
console.log(data);
|
|
@@ -1259,7 +1242,6 @@ export class QuestionnaireComponent {
|
|
|
1259
1242
|
}
|
|
1260
1243
|
else if (this.abItem?.status == "Completed") {
|
|
1261
1244
|
this.handleEvent.emit("Summaryupdated");
|
|
1262
|
-
this.spinner.hide(this.spinnerName);
|
|
1263
1245
|
// Temporary Fix for duplicate answers on the summary.
|
|
1264
1246
|
this.summary = [];
|
|
1265
1247
|
this.percent = 100;
|
|
@@ -1393,7 +1375,6 @@ export class QuestionnaireComponent {
|
|
|
1393
1375
|
paramMap["c__record_id"] = '';
|
|
1394
1376
|
this.dataService.getAPIFromNode('Question', 'read', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1395
1377
|
// this.sharedService.hideLoader();
|
|
1396
|
-
this.spinner.hide(this.spinnerName);
|
|
1397
1378
|
// VD disabled
|
|
1398
1379
|
this.isButtonDisabled = false;
|
|
1399
1380
|
console.log('data came sucessfully');
|
|
@@ -1401,7 +1382,6 @@ export class QuestionnaireComponent {
|
|
|
1401
1382
|
this.successRead(JSON.parse(data));
|
|
1402
1383
|
}, (error) => {
|
|
1403
1384
|
//this.sharedService.hideLoader();
|
|
1404
|
-
this.spinner.hide(this.spinnerName);
|
|
1405
1385
|
console.error('Failed to fetch question books', error);
|
|
1406
1386
|
});
|
|
1407
1387
|
}
|
|
@@ -1425,7 +1405,6 @@ export class QuestionnaireComponent {
|
|
|
1425
1405
|
}
|
|
1426
1406
|
};
|
|
1427
1407
|
successRead = (response) => {
|
|
1428
|
-
this.spinner.hide(this.spinnerName);
|
|
1429
1408
|
// VD disabled
|
|
1430
1409
|
this.isButtonDisabled = false;
|
|
1431
1410
|
console.log('Inside the successRead');
|
|
@@ -2041,14 +2020,12 @@ export class QuestionnaireComponent {
|
|
|
2041
2020
|
ques.input = fileWrapper.fileName;
|
|
2042
2021
|
}
|
|
2043
2022
|
};
|
|
2044
|
-
this.spinner.show(this.spinnerName);
|
|
2045
2023
|
reader.readAsDataURL(event.target.files[0]);
|
|
2046
2024
|
}
|
|
2047
2025
|
successAttachmentCreate = (response) => {
|
|
2048
2026
|
let createdAttachment = new Attachment(response.attachmentId, response.attachmentName, this.attachment.lastModifiedDate);
|
|
2049
2027
|
this.attachments.push(createdAttachment);
|
|
2050
2028
|
this.attachmentsMap.set(this.questionItem.id, this.attachments);
|
|
2051
|
-
this.spinner.hide(this.spinnerName);
|
|
2052
2029
|
};
|
|
2053
2030
|
successAttachmentDelete = (response) => {
|
|
2054
2031
|
for (let i = 0; i < this.attachments.length; i++) {
|
|
@@ -2376,9 +2353,6 @@ export class QuestionnaireComponent {
|
|
|
2376
2353
|
getData(data) {
|
|
2377
2354
|
console.log('table data', data);
|
|
2378
2355
|
}
|
|
2379
|
-
dependentChange(value) {
|
|
2380
|
-
this.nextValue = value;
|
|
2381
|
-
}
|
|
2382
2356
|
displayDate(dateSelected, ques) {
|
|
2383
2357
|
// Parse the date string using moment and assign it to this.selectedDate
|
|
2384
2358
|
ques.input = moment(dateSelected.value, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss').toString();
|
|
@@ -2389,16 +2363,21 @@ export class QuestionnaireComponent {
|
|
|
2389
2363
|
getValue(item) {
|
|
2390
2364
|
return Object.values(item)[0];
|
|
2391
2365
|
}
|
|
2392
|
-
|
|
2393
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionnaireComponent, isStandalone: true, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion", handleBook: "handleBook", handleSubmit: "handleSubmit" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<!-- <app-loader></app-loader> -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\n <!-- <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress> -->\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText && questionItem.style?.showLabel !== false\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n\n <!-- RS 06JAN25 -->\n <!-- for rich text -->\n <div *ngIf=\"rtaFlag\">\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <app-custom-rich-text\n [value]=\"inpValue\"\n [question]=\"questionItem\"\n [error]=\"questionItem?.error\"\n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n </div>\n </div>\n \n \n <!-- <div *ngIf=\"ques.type === 'RichTextArea'\">\n\n <app-custom-rich-text\n [value]=\"ques.input\"\n [rows]=\"3\"\n [error]=\"ques.error\" [placeholder]=\"ques.question \" \n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n</div> -->\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <!-- <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker> -->\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" *ngIf=\" questionItem?.style?.showLabel !== false\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span *ngIf=\"ques?.style?.showLabel !== false\">{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <!-- <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker> -->\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show label-->\n <div *ngIf=\"ques.type === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <label ngIf=\"ques.style?.showLabel !== false\">{{ ques.questionText }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.trackingId\"\n [focusEvent]=\"clearSQError(ques?.id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.question\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-table> -->\n <!-- SKS13MAR25 nxt table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons\n [question]=\"ques\"\n from = \"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"\n [tableConfig]=\"ques.tableConfig\"\n tableId = \"\"\n direction = \"ltr\"\n tableWidth = \"auto\"\n >\n <!-- (NxtTableEmit) = \"NxtTableEmit($event)\"\n (buttonEmit) = \"buttonEmit($event)\"\n (hyperLinkEmit) = \"hyperLinkEmit($event)\"\n (onEditData) = \"onEditData($event)\"\n (onDeleteData) = \"onDeleteData($event)\"\n (saveButtonData) = \"saveButtonData($event)\"\n (actionButtonEmit) = \"actionButtonEmit($event)\" -->\n </nxt-datatable>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <img [src]=\"ques.imageData\" [style.border]=\"ques.imageData ? '1px solid black' : 'none'\" />\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p *ngIf=\"val.style?.showLabel !== false\">{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book' && qa.style?.showLabel !== false\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <!-- <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress> -->\n \n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "styleMap", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "ngmodule", type: NgxSpinnerModule }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["bdColor", "size", "color", "type", "fullScreen", "name", "zIndex", "template", "showSpinner", "disableAnimation"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2366
|
+
// SKS11JUN25remove the special charecters and tags
|
|
2367
|
+
removeCharacters(questionText) {
|
|
2368
|
+
let updatedText = questionText?.replace(/<[^>]*>/g, '');
|
|
2369
|
+
return updatedText;
|
|
2370
|
+
}
|
|
2371
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.SharedService }, { token: i5.ActivatedRoute }, { token: i6.DomSanitizer }, { token: i7.UntypedFormBuilder }, { token: i8.DeviceDetectorService }, { token: i0.ElementRef }, { token: i9.I18nService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2372
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionnaireComponent, isStandalone: true, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api", isEdit: "isEdit" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion", handleBook: "handleBook", handleSubmit: "handleSubmit" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- custom loader -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText && questionItem.style?.showLabel !== false\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" *ngIf=\" questionItem?.style?.showLabel !== false\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span *ngIf=\"ques?.style?.showLabel !== false\">{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- SKS11JUN25 Text, Email, label, number, DateTime-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n (inputValue)=\"childEventCapture($event,ques)\"\n >\n </nxt-input>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- SKS13MAR25 nxt table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons\n [question]=\"ques\"\n from = \"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"\n [tableConfig]=\"ques.tableConfig\"\n tableId = \"\"\n direction = \"ltr\"\n tableWidth = \"auto\"\n >\n </nxt-datatable>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <img [src]=\"ques.imageData\" [style.border]=\"ques.imageData ? '1px solid black' : 'none'\" />\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\">{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p *ngIf=\"val.style?.showLabel !== false\">{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book' && qa.style?.showLabel !== false\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "clearInputEmit", "nativeInputRef"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "mode", "apiKey"], outputs: ["locationSelected"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2394
2373
|
}
|
|
2395
2374
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, decorators: [{
|
|
2396
2375
|
type: Component,
|
|
2397
2376
|
args: [{ selector: "lib-questionnaire", standalone: true, imports: [
|
|
2398
|
-
CommonModule,
|
|
2399
|
-
I18nPipe, FormsModule,
|
|
2400
|
-
], encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<!-- <app-loader></app-loader> -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\n <!-- <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress> -->\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText && questionItem.style?.showLabel !== false\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n\n <!-- RS 06JAN25 -->\n <!-- for rich text -->\n <div *ngIf=\"rtaFlag\">\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <app-custom-rich-text\n [value]=\"inpValue\"\n [question]=\"questionItem\"\n [error]=\"questionItem?.error\"\n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n </div>\n </div>\n \n \n <!-- <div *ngIf=\"ques.type === 'RichTextArea'\">\n\n <app-custom-rich-text\n [value]=\"ques.input\"\n [rows]=\"3\"\n [error]=\"ques.error\" [placeholder]=\"ques.question \" \n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n</div> -->\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <!-- <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker> -->\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" *ngIf=\" questionItem?.style?.showLabel !== false\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span *ngIf=\"ques?.style?.showLabel !== false\">{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <!-- <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker> -->\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show label-->\n <div *ngIf=\"ques.type === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <label ngIf=\"ques.style?.showLabel !== false\">{{ ques.questionText }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.trackingId\"\n [focusEvent]=\"clearSQError(ques?.id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.question\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-table> -->\n <!-- SKS13MAR25 nxt table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons\n [question]=\"ques\"\n from = \"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"\n [tableConfig]=\"ques.tableConfig\"\n tableId = \"\"\n direction = \"ltr\"\n tableWidth = \"auto\"\n >\n <!-- (NxtTableEmit) = \"NxtTableEmit($event)\"\n (buttonEmit) = \"buttonEmit($event)\"\n (hyperLinkEmit) = \"hyperLinkEmit($event)\"\n (onEditData) = \"onEditData($event)\"\n (onDeleteData) = \"onDeleteData($event)\"\n (saveButtonData) = \"saveButtonData($event)\"\n (actionButtonEmit) = \"actionButtonEmit($event)\" -->\n </nxt-datatable>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <img [src]=\"ques.imageData\" [style.border]=\"ques.imageData ? '1px solid black' : 'none'\" />\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p *ngIf=\"val.style?.showLabel !== false\">{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book' && qa.style?.showLabel !== false\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <!-- <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress> -->\n \n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"] }]
|
|
2401
|
-
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.SharedService }, { type: i5.ActivatedRoute }, { type: i6.DomSanitizer }, { type: i7.
|
|
2377
|
+
CommonModule, NxtInput,
|
|
2378
|
+
I18nPipe, FormsModule, CustomDropdownComponent, NxtDatatable, PickLocationComponent
|
|
2379
|
+
], encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- custom loader -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText && questionItem.style?.showLabel !== false\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" *ngIf=\" questionItem?.style?.showLabel !== false\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span *ngIf=\"ques?.style?.showLabel !== false\">{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- SKS11JUN25 Text, Email, label, number, DateTime-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n (inputValue)=\"childEventCapture($event,ques)\"\n >\n </nxt-input>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- SKS13MAR25 nxt table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons\n [question]=\"ques\"\n from = \"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"\n [tableConfig]=\"ques.tableConfig\"\n tableId = \"\"\n direction = \"ltr\"\n tableWidth = \"auto\"\n >\n </nxt-datatable>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <img [src]=\"ques.imageData\" [style.border]=\"ques.imageData ? '1px solid black' : 'none'\" />\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\">{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p *ngIf=\"val.style?.showLabel !== false\">{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book' && qa.style?.showLabel !== false\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"] }]
|
|
2380
|
+
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.SharedService }, { type: i5.ActivatedRoute }, { type: i6.DomSanitizer }, { type: i7.UntypedFormBuilder }, { type: i8.DeviceDetectorService }, { type: i0.ElementRef }, { type: i9.I18nService }], propDecorators: { qbId: [{
|
|
2402
2381
|
type: Input
|
|
2403
2382
|
}], insuranceStartDate: [{
|
|
2404
2383
|
type: Input
|
|
@@ -2408,6 +2387,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2408
2387
|
type: Input
|
|
2409
2388
|
}], api: [{
|
|
2410
2389
|
type: Input
|
|
2390
|
+
}], isEdit: [{
|
|
2391
|
+
type: Input
|
|
2411
2392
|
}], handleEvent: [{
|
|
2412
2393
|
type: Output
|
|
2413
2394
|
}], handlePage: [{
|
|
@@ -2419,4 +2400,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2419
2400
|
}], handleSubmit: [{
|
|
2420
2401
|
type: Output
|
|
2421
2402
|
}] } });
|
|
2422
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sYUFBYSxDQUFDO0FBR2xFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsUUFBUSxFQUdSLGFBQWEsRUFFYixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFFTCxVQUFVLEVBTVYsTUFBTSxFQUVQLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDN0csT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7O0FBYXZHLE1BQU0sT0FBTyxzQkFBc0I7SUE0TXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFFQTtJQUVEO0lBdE5BLElBQUksQ0FBUztJQUNiLGtCQUFrQixDQUFTO0lBQzNCLElBQUksQ0FBUztJQUNiLEdBQUcsQ0FBUztJQUNaLEdBQUcsQ0FBUyxDQUFDLDhCQUE4QjtJQUMxQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNqQyxVQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkQsY0FBYyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3ZELFVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuRCxZQUFZLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFL0QsTUFBTSxDQUFTO0lBQ1IsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixNQUFNLENBQWE7SUFDbkIsTUFBTSxDQUFlO0lBQ3JCLFlBQVksQ0FBVztJQUN2QixVQUFVLENBQWdCO0lBRWpDLG9CQUFvQjtJQUNiLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUVqQyxtQkFBbUI7SUFDWixZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLFlBQVksR0FBWSxLQUFLLENBQUM7SUFFckMsc0JBQXNCO0lBQ2YsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixNQUFNLEdBQVksS0FBSyxDQUFDO0lBQ3hCLE9BQU8sR0FBWSxLQUFLLENBQUM7SUFDekIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFDNUIsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsUUFBUSxHQUFXLEtBQUssQ0FBQztJQUNoQyxhQUFhO0lBQ04sY0FBYyxHQUFZLEtBQUssQ0FBQztJQUN2QyxjQUFjO0lBQ1AsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLFlBQVksR0FBZSxFQUFFLENBQUM7SUFDOUIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzVCLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDOUIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDM0IsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdEIsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdEIsaUJBQWlCLEdBQW9CLEVBQUUsQ0FBQztJQUN4QyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ25CLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxHQUFVLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixVQUFVLENBQU07SUFDaEIsb0JBQW9CLENBQVc7SUFDL0IsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBQ25DLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUNuQyxJQUFJLEdBQVksS0FBSyxDQUFDO0lBQ3RCLFFBQVEsR0FBWSxJQUFJLENBQUM7SUFDekIsS0FBSyxDQUFVO0lBQ2YsR0FBRyxDQUFVO0lBQ2IsU0FBUyxDQUFTO0lBQ2xCLFdBQVcsQ0FBUztJQUNwQixZQUFZLENBQVM7SUFDckIsT0FBTyxDQUFTO0lBQ2hCLEtBQUssQ0FBUztJQUNkLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFDNUIsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN6QixRQUFRLEdBQVcsQ0FBQyxDQUFDO0lBQzVCLHVCQUF1QjtJQUNoQixPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLFVBQVUsQ0FBUztJQUNsQixLQUFLLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN6QixFQUFFLENBQWM7SUFDakIsU0FBUyxDQUFNO0lBQ2YsYUFBYSxDQUFNO0lBQ25CLFVBQVUsQ0FBTTtJQUNoQixXQUFXLEdBQUUsRUFBRSxDQUFDO0lBRWhCLEtBQUssR0FBVTtRQUNwQixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7S0FDTCxDQUFDO0lBRUssT0FBTyxHQUFhO1FBQ3pCLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtLQUNMLENBQUM7SUFFSyxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsZ0JBQWdCLEdBQVcsRUFBRSxDQUFDO0lBQzlCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFDdkIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixjQUFjLENBQVc7SUFDekIsUUFBUSxDQUFTO0lBQ2pCLGlCQUFpQixDQUFTO0lBQzFCLFdBQVcsQ0FBUztJQUNwQixXQUFXLENBQVM7SUFDcEIsU0FBUyxHQUFTLEVBQUUsQ0FBQztJQUU1QixVQUFVLENBQU87SUFFakIsa0JBQWtCO0lBQ1gsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixhQUFhLENBQVM7SUFDdEIsa0JBQWtCLENBQVM7SUFDM0IsZ0JBQWdCLENBQVM7SUFDekIsWUFBWSxDQUFTO0lBQ3JCLFlBQVksQ0FBUztJQUNyQixZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDeEIsVUFBVSxDQUFRO0lBQ2xCLE1BQU0sR0FBVSxFQUFFLENBQUM7SUFDbkIsUUFBUSxHQUFPLEVBQUUsQ0FBQztJQUV6QixzQkFBc0I7SUFDZixhQUFhLEdBQVcsSUFBSSxDQUFDO0lBQzdCLFdBQVcsR0FBVyxDQUFDLENBQUM7SUFDeEIsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLG1CQUFtQixHQUFpQixFQUFFLENBQUM7SUFDOUMsb0JBQW9CLENBQVU7SUFFdkIsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztJQUN2RSxZQUNVLFNBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLEtBQXFCLEVBQ3JCLFNBQXVCLEVBQ3ZCLE9BQTBCLEVBQzFCLFlBQWdDO0lBQ3hDLHlDQUF5QztJQUNqQyxhQUFvQyxFQUM1QyxFQUFjLEVBQ1AsV0FBd0I7UUFYdkIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFFaEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBRXJDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRS9CLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLDBCQUEwQixDQUFDO0lBQ2hELENBQUM7SUFFRCxvRkFBb0Y7SUFDcEYsMEJBQTBCO0lBQzFCLGFBQWEsQ0FBQyxLQUFtQixFQUFFLElBQVM7UUFDMUMsMENBQTBDO1FBQzFDLDRCQUE0QjtRQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxRQUFRO2dCQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEUsSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBRyxNQUFNLEVBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3JGLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHFEQUFxRDtZQUNyRCxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFHLE1BQU0sRUFBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDckYsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRO2dCQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEUsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsV0FBVzthQUNSLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDUCxZQUFZLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUM7WUFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNyQixDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxnREFBZ0Q7UUFDaEQsb0RBQW9EO1FBQ3BELGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNuQyxDQUFDO2lCQUFLLElBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsK0NBQStDO1FBQy9DLElBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFDLENBQUM7b0JBQzVDLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFBO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssS0FBSyxFQUFDLENBQUM7WUFDcEMsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFvQixDQUFDO2dCQUM3QyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUM3QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztxQkFDN0MsV0FBVyxDQUFDLGNBQWMsQ0FBQztxQkFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNkLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRSxFQUFFO29CQUN2QixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQ3ZELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFDLENBQUM7NEJBQzVDLE9BQU8sSUFBSSxDQUFDO3dCQUNkLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUE7b0JBQzlCLENBQUMsQ0FBQyxDQUFDO2dCQUNULENBQUMsQ0FBQTtZQUNILENBQUMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUYsZUFBZTtRQUNaLCtFQUErRTtRQUM5RSx1Q0FBdUM7UUFDeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixJQUFJLEtBQVUsQ0FBQztnQkFDZixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFDLENBQUM7b0JBQzdFLEtBQUssR0FBRyxFQUFFLENBQUE7b0JBQ1YsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFBO29CQUN0QyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQTtvQkFDckQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUE7Z0JBQzNDLENBQUM7cUJBQU0sSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBQyxDQUFDO29CQUN4RCxLQUFLLEdBQUcsRUFBRSxDQUFBO29CQUNWLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQTtnQkFDckMsQ0FBQztxQkFBTSxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFDLENBQUM7b0JBQzdCLEtBQUssR0FBRyxFQUFFLENBQUE7b0JBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxFQUFFLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xHLElBQUksTUFBTSxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQy9CLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQTtvQkFDdEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQTtnQkFDakYsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQTtnQkFDNUIsQ0FBQztnQkFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0gsMkJBQTJCO0lBQ3pCLFdBQVcsQ0FBQyxhQUE0QjtRQUN0QyxJQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNBLDBCQUEwQjtJQUMzQixZQUFZO1FBQ1YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxHQUFHO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQ3pCLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLENBQUM7Z0JBQ1AsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsR0FBRyxFQUFFLENBQUM7YUFDUDtZQUNELFlBQVksRUFBRTtnQkFDWixJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEVBQUUsQ0FBQzthQUNQO1lBQ0QsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFO2dCQUNULEVBQUUsRUFBRSxLQUFLO2dCQUNULEVBQUUsRUFBRSxLQUFLO2dCQUNULEVBQUUsRUFBRSxLQUFLO2dCQUNULEVBQUUsRUFBRSxLQUFLO2dCQUNULEVBQUUsRUFBRSxLQUFLO2dCQUNULEVBQUUsRUFBRSxLQUFLO2dCQUNULEVBQUUsRUFBRSxLQUFLO2FBQ1Y7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsQ0FBQyxFQUFFLE1BQU07Z0JBQ1QsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ1IsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7YUFDVjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxXQUFXO2lCQUNSLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ1AsWUFBWSxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQy9ELENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVztpQkFDUixJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUNQLFlBQVksQ0FBQyxPQUFPLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFFUCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLGFBQWE7UUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixnRkFBZ0Y7UUFDaEYsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixzQ0FBc0M7Z0JBQ3RDLDJEQUEyRDtnQkFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUN0QyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFDQSwwQkFBMEI7SUFDM0Isa0NBQWtDO0lBQ2xDLGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7WUFDckMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QiwyREFBMkQ7WUFFM0QsZ0RBQWdEO1lBQ2hELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQzVDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBELEtBQUssSUFBSSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDZCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVO1FBQ1Isd0JBQXdCO1FBQ3hCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxXQUFXLEdBQUMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksU0FBUyxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDekMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDOUIsK0ZBQStGO1FBQy9GLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoQyxpREFBaUQ7WUFDakQsS0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUMxRCxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBQyxDQUFDO29CQUNqRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtDQUErQztnQkFDNUksQ0FBQztxQkFBSSxDQUFDO29CQUNKLFlBQVksR0FBRyxXQUFXLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUN0RCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQywrRUFBK0U7Z0JBQ3RILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1lBQ2pFLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsK0VBQStFO1lBQ3RILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1FBQ2pFLENBQUM7UUFFSSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzlCLCtDQUErQztRQUMvQyxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksVUFBVSxHQUNaLCtFQUErRSxDQUFDO1FBRWxGLGlCQUFpQjtRQUNqQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixnREFBZ0Q7WUFDaEQsS0FBSyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDakQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQzdDLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9ELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQy9DLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQ2pELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUM3QyxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNoRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBRWQsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUM5QyxVQUFVO29CQUNWLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDWixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFDLENBQUM7d0JBQ3RCLDhEQUE4RDt3QkFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO3dCQUNoQyw0QkFBNEI7d0JBQzVCLDhCQUE4QjtvQkFFaEMsQ0FBQztvQkFDRixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFDLENBQUM7d0JBQ3RCLDBFQUEwRTt3QkFFN0UsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQzs0QkFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dDQUNyQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJO29DQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO29DQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztvQ0FDdEIsR0FBRztvQ0FDSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQzs0QkFDOUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7Z0NBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7NEJBQ3JFLENBQUM7NEJBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dDQUM1QixJQUFHLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQztvQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztnQ0FDOUQsQ0FBQztxQ0FBSSxDQUFDO29DQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dDQUM5QyxDQUFDOzRCQUNILENBQUM7aUNBQU0sQ0FBQztnQ0FDTixJQUFHLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQztvQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztnQ0FDOUQsQ0FBQztxQ0FBSSxDQUFDO29DQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dDQUM5QyxDQUFDOzRCQUVILENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0NBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7NEJBQ2hELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQ0FDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQzs0QkFDMUMsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7NEJBQzFDLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUNELGlFQUFpRTtvQkFDakUsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQzlGLG9EQUFvRDt3QkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDbkUsV0FBVzs2QkFDUixJQUFJLENBQUMsQ0FBQyxDQUFDOzZCQUNQLFlBQVksQ0FBQyxPQUFPLEVBQUUscURBQXFELENBQUMsQ0FBQzt3QkFDaEYsT0FBTztvQkFDVCxDQUFDO29CQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCwwQ0FBMEM7Z0JBQzFDLElBQUcsSUFBSSxDQUFDLElBQUksSUFBRyxNQUFNLEVBQUMsQ0FBQztvQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDaEMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDekIsQ0FBQztvQkFDRCxrQ0FBa0M7Z0JBQ3BDLENBQUM7Z0JBRUMsSUFDRSxDQUFDLElBQUksQ0FBQyxVQUFVO29CQUNsQiwwRkFBMEY7b0JBQ3pGLDJEQUEyRDtvQkFDM0QsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFDcEQsQ0FBQztvQkFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2hDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2hDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2hDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7b0JBQ3pDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2hDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN2RCxLQUFLLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLFFBQVE7NEJBQ1gsY0FBYyxDQUFDLFlBQVk7Z0NBQzNCLEtBQUs7Z0NBQ0wsY0FBYyxDQUFDLGNBQWM7Z0NBQzdCLEdBQUcsQ0FBQzt3QkFDTixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLG1DQUFtQzt3QkFDckMsQ0FBQztvQkFDSCxDQUFDO29CQUNELHlCQUF5QjtnQkFDM0IsQ0FBQyxDQUFDLDhCQUE4QjtnQkFFaEMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ3hFLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDeEMsNkNBQTZDO1lBQy9DLENBQUM7WUFDRCxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQzVFLENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2hFLElBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3BCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDckMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDekIsQ0FBQztvQkFDSCxJQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7d0JBQ3BDLGdDQUFnQzt3QkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25ELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixxQ0FBcUM7d0JBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsR0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9GLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNwQix5QkFBeUI7b0JBQ3pCLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDcEMsOEJBQThCO29CQUM5QixzQkFBc0I7b0JBQ3RCLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0gsQ0FBQzthQUNJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQy9DLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pELFVBQVU7WUFDVixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3hFLG9DQUFvQztnQkFFcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO3dCQUNyQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJOzRCQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFOzRCQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs0QkFDdEIsR0FBRzs0QkFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztvQkFDOUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7b0JBQ3JFLENBQUM7b0JBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO29CQUNoRSxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDaEUsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSzt3QkFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztvQkFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO29CQUNoRSxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDaEUsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDNUIseUNBQXlDO29CQUN6QyxJQUFJLEtBQUssR0FBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqRCxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLG9CQUFvQjtvQkFDcEIsSUFBSSxLQUFLLEdBQVEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDcEQsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzQixxQkFBcUI7b0JBQ3JCLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFROzRCQUM5QixrSUFBa0ksQ0FBQzt3QkFDckksdUJBQXVCO3dCQUN2QixPQUFPO29CQUNULENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUM3QyxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRO29CQUNYLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUk7d0JBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7d0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUN0QixHQUFHO3dCQUNILElBQUksQ0FBQyxjQUFjLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDN0MsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDN0MsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLEtBQUssSUFBSSxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUMsUUFBUTt3QkFDWCxjQUFjLENBQUMsWUFBWTs0QkFDM0IsS0FBSzs0QkFDTCxjQUFjLENBQUMsY0FBYzs0QkFDN0IsR0FBRyxDQUFDO2dCQUNSLENBQUM7Z0JBQ0QsZ0RBQWdEO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDN0MsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO1FBRUQsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUM3QyxjQUFjO1lBQ2Qsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDM0IseURBQXlEO1FBQ3pELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xDLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMvQixVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztZQUNuQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxPQUFPLEVBQUUsY0FBYyxDQUFDO1lBQ3ZELFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLEVBQUUsWUFBWSxDQUFDO1lBQ25ELFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBQ3JDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxjQUFjLEVBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQyxpQ0FBaUM7WUFDakMseUNBQXlDO1FBQzNDLENBQUM7UUFDRDs7OztTQUlDO1FBQ0Qsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDeEMsaURBQWlEO1FBQ2pELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUNwQixXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDQSwwQkFBMEI7SUFDM0IsSUFBSTtRQUNGLElBQUksU0FBUyxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDekMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUN6QixzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLDJDQUEyQztRQUUzQyw0Q0FBNEM7UUFDNUMsMkRBQTJEO1FBQzNELElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7WUFDakQsS0FBSyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25DLGVBQWU7Z0JBQ2Ysc0VBQXNFO2dCQUN0RSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyx3REFBd0Q7b0JBQ3hELElBQUcsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDO3dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3BDLENBQUM7eUJBQUssQ0FBQzt3QkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7b0JBQ3pDLENBQUM7b0JBQ0Qsc0RBQXNEO2dCQUN4RCxDQUFDO1lBQ0gsQ0FBQztZQUNELDJDQUEyQztZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZELG9CQUFvQjtZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUQsc0JBQXNCO1lBQ3RCLHNDQUFzQztZQUN0QyxrQkFBa0I7WUFDbEIsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsY0FBYyxJQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUMvRCw2QkFBNkI7Z0JBQzdCLEtBQUssSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN2Qyx3QkFBd0I7b0JBQ3hCLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDbEQsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQy9CLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDOzRCQUM3RCxDQUFDO2lDQUFNLENBQUM7Z0NBQ04sbUNBQW1DO2dDQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7NEJBRXpDLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUNJLElBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksU0FBUyxDQUFDLGNBQWMsSUFBRyxHQUFHLEVBQUcsQ0FBQztnQkFDcEUsS0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUMsQ0FBQzt3QkFDbkQsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs0QkFDbEMsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0QsQ0FBQztZQUNILENBQUM7aUJBRUksQ0FBQztnQkFDSixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7UUFDRCx5REFBeUQ7YUFDckQsQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUN6QyxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUV0QiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUd0QixpQkFBaUI7UUFDakIsc0JBQXNCO1FBRXRCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDakIsY0FBYztZQUNmLG1DQUFtQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUM5QixzQkFBc0I7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFekIsZUFBZTtZQUNmLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNqQywyQ0FBMkM7Z0JBQzNDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLG9GQUFvRjtvQkFDcEYsSUFBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBQyxDQUFDO3dCQUN6RyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7d0JBQ2hCLEtBQUssSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzs0QkFDcEQsS0FBSyxJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0NBQzdDLG9FQUFvRTtnQ0FDbkUsdUVBQXVFO2dDQUN0RSxrQ0FBa0M7Z0NBQ3BDLEtBQUs7Z0NBQ0gsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29DQUN2QixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7d0NBQ3ZCLE1BQU0sR0FBRyxPQUFPLENBQUM7b0NBQ25CLENBQUM7eUNBQU0sQ0FBQzt3Q0FDTixNQUFNLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFFLHdFQUF3RTt3Q0FDbkcsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQzs0Q0FDMUMsS0FBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQztnREFDdEQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxFQUFFLENBQUMsQ0FBQzs0Q0FDL0MsQ0FBQzt3Q0FDSCxDQUFDO3dDQUNELE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsQ0FBQzt3Q0FDekQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQ0FDbEosQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQzt3QkFDMUIsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO29CQUN4QyxDQUFDO29CQUNDLHdFQUF3RTtvQkFDeEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEYsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDcEIsOENBQThDO3dCQUM5QyxlQUFlLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7d0JBQzVDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDeEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLDZEQUE2RDt3QkFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBSztRQUNYLElBQUksR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM5RCxnREFBZ0Q7UUFDaEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUMzQyxHQUFHLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQsSUFBSSxTQUFTLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN6QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM5QixJQUFHLFNBQVMsQ0FBQyxjQUFjLElBQUcsR0FBRyxFQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBR0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixpQkFBaUI7UUFDakIsc0JBQXNCO1FBRXRCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxjQUFjO1FBQ2YsbUNBQW1DO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLGtDQUFrQztJQUNwQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHFDQUFxQztJQUU3QixnQkFBZ0IsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQzFDLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0QiwrQkFBK0I7WUFDL0IsY0FBYztZQUNkLG9DQUFvQztZQUNwQywwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLEtBQUs7WUFDTCxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9DLDJEQUEyRDtZQUMzRCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUN2RyxDQUFDLElBQUksRUFBQyxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDeEMsQ0FBQyxFQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQ0EsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sc0NBQXNDO1lBQ3JDLDJDQUEyQztZQUM1QyxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDNUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLElBQUksR0FBRztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsWUFBWSxFQUFHLEVBQUU7YUFDbEIsQ0FBQTtZQUNOLG1DQUFtQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FDekIsMkJBQTJCLEVBQzNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUN0QixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsZUFBZSxDQUNyQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVPLGVBQWUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEIsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLElBQUcsSUFBSSxFQUFDLENBQUM7WUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckMsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLHdCQUF3QjtJQUN4QixhQUFhLENBQUMsVUFBVTtRQUN0QixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFDLENBQUM7WUFDckIsSUFBRyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxXQUFXLEVBQUMsQ0FBQztnQkFDakQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDL0MsMkRBQTJEO2dCQUMzRCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQzVHLENBQUMsSUFBSSxFQUFDLEVBQUU7b0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7Z0JBQ3hDLENBQUMsRUFBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pELENBQUMsQ0FDQSxDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0Qsd0JBQXdCO0lBQ2hCLGVBQWUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEIsSUFBRyxRQUFRLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBQyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBSyxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSixDQUFDLENBQUE7SUFFTyxlQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNyQyw4QkFBOEI7SUFDaEMsQ0FBQyxDQUFDO0lBRU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUMxQyxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsK0JBQStCO1lBQy9CLGNBQWM7WUFDZCxvQ0FBb0M7WUFDcEMsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUN6QixLQUFLO1lBQ0wsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlDLDJEQUEyRDtZQUMzRCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUN2RyxDQUFDLElBQUksRUFBQyxFQUFFO2dCQUNQLG1DQUFtQztnQkFDbkMsdUNBQXVDO2dCQUN0QyxjQUFjO2dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25CLDZCQUE2QjtnQkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDeEMsQ0FBQyxFQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQ0EsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sdUNBQXVDO1lBQ3ZDLElBQUksUUFBUSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUMsMkRBQTJEO1lBQzNELDJDQUEyQztZQUMzQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxLQUFLLEdBQUc7Z0JBQ1gsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLFNBQVMsRUFBRSxNQUFNO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLFlBQVksRUFBRyxFQUFFO2FBQ2xCLENBQUE7WUFDQSw2QkFBNkI7WUFDbEMsbUNBQW1DO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtZQUMzQiwyREFBMkQ7WUFDekQsMkJBQTJCLEVBQzNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN2QixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsZUFBZSxDQUNyQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQTtJQUNPLGVBQWUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLElBQUcsUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLElBQUksU0FBUyxFQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVqQyxDQUFDO1FBQ0YsdURBQXVEO1FBQ3RELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7WUFDckMsSUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUMvQixDQUFDO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZ0NBQWdDO2dCQUNoQyxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBRXhCLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDMUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7b0JBRWxDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTt3QkFDbkMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO3dCQUM5QixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7d0JBQzVCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTt3QkFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO3dCQUNwQixTQUFTLEVBQUMsU0FBUyxDQUFDLFNBQVM7cUJBQzlCLENBQUMsQ0FBQztvQkFFSCxpQ0FBaUM7b0JBQ2pDLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzdDLDZCQUE2Qjt3QkFFN0IscUNBQXFDO3dCQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFOzRCQUN4QyxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTt5QkFDakQsQ0FBQyxDQUFDO3dCQUNILHVDQUF1QztvQkFDekMsQ0FBQzt5QkFBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ3BDLCtCQUErQjt3QkFDL0IsSUFBSSxPQUFPLENBQUM7d0JBQ1osSUFBSSxHQUFHLENBQUM7d0JBQ1IsS0FBSyxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUNqRCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUN2QyxHQUFHLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDbEMsR0FBRyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3BCLENBQUM7d0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDbkQsdUNBQXVDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsOEJBQThCO2dCQUM5QixrQ0FBa0M7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFDLENBQUM7Z0JBQ3RCLDZCQUE2QjtnQkFDNUIsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN2QyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2pCLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNmLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDZixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDMUMsS0FBSyxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQzs0QkFDaEMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDdkMsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ2hCLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3RCLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLENBQUM7NEJBQ0QsTUFBTSxFQUFFLENBQUM7d0JBQ1gsQ0FBQzt3QkFFRCxPQUFPLEdBQUc7NEJBQ1IsU0FBUyxFQUFDLE1BQU0sQ0FBQyxTQUFTOzRCQUMxQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7NEJBQzNCLFFBQVEsRUFBRSxLQUFLO3lCQUNoQixDQUFDO3dCQUNKLCtCQUErQjtvQkFDL0IsQ0FBQzt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ2pDOzs7Ozs7Ozs7Ozs7Ozs0QkFjSTt3QkFDSixJQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUM7NEJBQ3JDLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNuRCxzQkFBc0I7NEJBQ3RCLE9BQU8sR0FBRztnQ0FDVCw2QkFBNkI7Z0NBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQ0FDM0IsUUFBUSxFQUFFLFlBQVk7NkJBQ3ZCLENBQUM7NEJBQ0Ysc0JBQXNCOzRCQUN2Qiw4QkFBOEI7d0JBQzdCLENBQUM7NkJBQ0UsQ0FBQzs0QkFDSCxPQUFPLEdBQUc7Z0NBQ1IsNkJBQTZCO2dDQUM3QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0NBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTs2QkFDMUIsQ0FBQzs0QkFDSCw4QkFBOEI7d0JBQy9CLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNQLDhDQUE4Qzt3QkFDN0MsT0FBTyxHQUFHOzRCQUNSLDZCQUE2Qjs0QkFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTOzRCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7eUJBQzFCLENBQUM7d0JBQ0gsOEJBQThCO29CQUMvQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBRUgsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVNLGVBQWUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ3hDLElBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FDekIsSUFBSSxDQUFDLEdBQUcsRUFDUixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQzVCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUMzQixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixzQ0FBc0M7WUFDdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsMkNBQTJDO1lBQzNDLElBQUksS0FBSyxHQUFHO2dCQUNYLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixTQUFTLEVBQUUsTUFBTTtnQkFDakIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxZQUFZLEVBQUcsRUFBRTthQUNsQixDQUFBO1lBQ0wsbUNBQW1DO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUN6QiwyQkFBMkIsRUFDM0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUMzQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQTtJQUdPLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUN2QyxLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLE9BQU8sR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEYsc0JBQXNCO2dCQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRU0scUJBQXFCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUMzQyxvQ0FBb0M7UUFDcEMsd0JBQXdCO0lBQzFCLENBQUMsQ0FBQztJQUVNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ3RDLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0QiwrQkFBK0I7WUFDL0IsY0FBYztZQUNkLGdDQUFnQztZQUNoQyxzQkFBc0I7WUFDdEIscUJBQXFCO1lBQ3JCLEtBQUs7WUFDTCxrQ0FBa0M7WUFDbEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QywyREFBMkQ7WUFDM0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FDakcsQ0FBQyxJQUFJLEVBQUMsRUFBRTtnQkFDUCxtQ0FBbUM7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEMsY0FBYztnQkFDZCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3BDLENBQUMsRUFBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNWLGtDQUFrQztnQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FDQSxDQUFBO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTiwyREFBMkQ7WUFDM0QsdURBQXVEO1lBQ3ZELElBQUksUUFBUSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDL0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLDJDQUEyQztZQUMzQyxJQUFJLEtBQUssR0FBRztnQkFDWCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsWUFBWSxFQUFHLEVBQUU7YUFDbEIsQ0FBQTtZQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtZQUMzQiwyREFBMkQ7WUFDekQsMkJBQTJCLEVBQzNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN2QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVPLFdBQVcsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxjQUFjO1FBQ2QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0Qiw2RkFBNkY7UUFDN0YsMEdBQTBHO1FBQzFHLHVFQUF1RTtRQUN2RSw0QkFBNEI7UUFDNUIsSUFBSTtRQUNKLGtDQUFrQztRQUNsQyxzQkFBc0I7UUFFdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3RDLGtDQUFrQztRQUVsQyxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxpQ0FBaUM7UUFDakMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsc0JBQXNCO1lBQ3RCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDN0Msc0JBQXNCO2dCQUN0QixJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDUCx5REFBeUQ7b0JBQ3pELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2YsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQ3hDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQzVDLDJDQUEyQztJQUM3QyxDQUFDO0lBRU8sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDakMsb0NBQW9DO1FBQ3BDLHdCQUF3QjtJQUMxQixDQUFDLENBQUM7SUFFTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLDJEQUEyRDtRQUMzRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRTFELElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0QiwrQkFBK0I7WUFDL0IsY0FBYztZQUNkLDJEQUEyRDtZQUMzRCxzQkFBc0I7WUFDdEIscUJBQXFCO1lBQ3JCLEtBQUs7WUFDTCxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9DLDJEQUEyRDtZQUMzRCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQzlILENBQUMsSUFBSSxFQUFDLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNwQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FDQSxDQUFBO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixzQ0FBc0M7WUFDdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsMkNBQTJDO1lBQzNDLElBQUksS0FBSyxHQUFHO2dCQUNYLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxZQUFZLEVBQUcsRUFBRTthQUNsQixDQUFBO1lBQ0wsbUNBQW1DO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUN6QiwyQkFBMkIsRUFDM0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUQsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxDQUFDO0lBRU8sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDakMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLG9DQUFvQztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRU0sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDakMsb0NBQW9DO1FBQ3BDLHdCQUF3QjtJQUMxQixDQUFDLENBQUM7SUFFTSxlQUFlLEdBQUcsR0FBRyxFQUFFO1FBQzdCLDZDQUE2QztRQUM3Qyx3REFBd0Q7UUFDeEQsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUVoQixrQkFBa0I7UUFDbEIsbURBQW1EO1FBQ25ELElBQUk7UUFFSixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ2pELENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1gsOEpBQThKO1FBRTlKLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsZ0VBQWdFO1FBRWhFLDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxzRUFBc0U7WUFDdEUsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2pDLDJEQUEyRDtZQUMzRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBQ0QsOEJBQThCO1FBQzlCLElBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUM7WUFDdkUscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QiwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QixrREFBa0Q7WUFDbEQsdUNBQXVDO1lBQzVDLHdCQUF3QjtZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQy9DLE9BQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6Qiw0QkFBNEI7WUFDNUIsbUNBQW1DO1lBQ25DLHVEQUF1RDtZQUN2RCxpREFBaUQ7WUFDakQsSUFBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLGtCQUFrQjtZQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ2IsSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTFCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYztnQkFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9CLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRzt3QkFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO3dCQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO3dCQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO3FCQUM5QixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRzt3QkFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO3dCQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO3dCQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7cUJBQzFCLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsUUFBUTtZQUNSLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELHlDQUF5QztRQUMzQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE9BQU8sQ0FBQyxHQUFHO1FBQ1QsMkNBQTJDO1FBRTNDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixnQkFBZ0I7WUFDaEIsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUVyQix5QkFBeUI7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0I7O21CQUVHO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN2QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN2QixDQUFDO1lBQ0gsc0NBQXNDO1lBQ3RDLDJCQUEyQjtZQUMzQixNQUFNO2lCQUNBLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN2QixDQUFDO2lCQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN2QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixzQ0FBc0M7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsMkJBQTJCO1lBQzdCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLHNDQUFzQztnQkFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQiwyQkFBMkI7WUFDN0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUc7UUFDWCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsZ0JBQWdCO1lBQ2hCLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsMEJBQTBCO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzFCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztZQUNILHNDQUFzQztZQUN0Qyw0QkFBNEI7WUFDNUIsTUFBTTtpQkFDQSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFPO1FBQ2hCLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDeEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMzQixFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixFQUFFLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDbkIsRUFBRSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEVBQUUsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNuQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVuQixJQUNFLElBQUksQ0FBQyxRQUFRO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQ2pELENBQUM7Z0JBQ0QsRUFBRSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFTO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxRQUFRLENBQUM7UUFDN0IseUVBQXlFO0lBQzNFLENBQUM7SUFFRixjQUFjO0lBQ2QsZUFBZTtJQUNkLG9CQUFvQixDQUFDLEtBQWE7UUFDakMseUJBQXlCO1FBQ3pCLHNCQUFzQjtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFQSxlQUFlLENBQUMsT0FBTztRQUNyQix5Q0FBeUM7UUFDekMsd0JBQXdCO1FBQ3hCLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsOEJBQThCO1FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxzR0FBc0c7Z0JBQ3RHLHVDQUF1QztnQkFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBRTtnQkFDMUMsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNqRCxNQUFNLEVBQUUsQ0FBQztvQkFDVCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDMUIscUVBQXFFO2dCQUN2RSxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxFQUFFLENBQUM7b0JBQ1QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzFCLGlFQUFpRTtnQkFDbkUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsZ0VBQWdFO1FBQ2hFLHNCQUFzQjtRQUV0QixLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7Z0JBQzdDLCtCQUErQjtZQUNqQyxDQUFDO1lBRUQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM1Qyw0Q0FBNEM7Z0JBQzVDLDJCQUEyQjtnQkFDM0IsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQztvQkFDbkMsZ0RBQWdEO29CQUNoRCwyQkFBMkI7b0JBQzNCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDN0Usb0JBQW9CO29CQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNsRSwyQkFBMkI7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO1lBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUMxRSx1REFBdUQ7Z0JBQ3ZELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDakMsMkNBQTJDO29CQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxHQUFHO3dCQUN0QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7d0JBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7d0JBQ2hDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7cUJBQzlCLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2hDLDBDQUEwQztvQkFDMUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRzt3QkFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO3dCQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO3dCQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7cUJBQzFCLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCx3Q0FBd0M7WUFDMUMsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDO2dCQUMzQyxnRkFBZ0Y7Z0JBQ2hGLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDM0MsQ0FBQztxQkFBSSxDQUFDO29CQUNKLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDNUMsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUMsQ0FBQztnQkFDWixLQUFJLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUM7b0JBQ25DLElBQUksRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QixFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELGlDQUFpQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLHNEQUFzRDtRQUN0RCxJQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNsQyxLQUFJLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUMsQ0FBQztvQkFDMUMsSUFBRyxPQUFPLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUMsQ0FBQzt3QkFDL0IsT0FBTyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO29CQUNwQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQVE7UUFDbkIsSUFBSSxlQUFlLEdBQVcsRUFBRSxDQUFDO1FBQ2pDLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQyx3REFBd0Q7WUFDeEQsSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUMxQix5Q0FBeUM7Z0JBQ3pDLGVBQWUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLDBEQUEwRDtRQUUxRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFNO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxhQUFhLENBQUMsQ0FBQztRQUNiLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNuQyw2Q0FBNkM7UUFDN0MsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDaEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUMsQ0FBQztZQUN4RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7YUFBSSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUFnQjtRQUV2QixJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7UUFDdkIsQ0FBQzthQUNJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQztRQUN2QixDQUFDO2FBQ0ksSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDO1FBQ3ZCLENBQUM7YUFDSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7UUFDdkIsQ0FBQzthQUNJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQztRQUN2QixDQUFDO0lBRUwsQ0FBQztJQUVELG1CQUFtQixDQUFDLENBQVM7UUFDM0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDM0MsNENBQTRDO2dCQUM5QyxDQUFDO3FCQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM5QywrQ0FBK0M7Z0JBQ2pELENBQUM7cUJBQU0sQ0FBQztvQkFDTixhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUNyQixrQ0FBa0M7Z0JBQ3BDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLHdDQUF3QztRQUMxQyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNO1FBQ2pCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLEtBQUssSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdEIsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSyxFQUFDLElBQVM7UUFDeEIsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLDhCQUE4QjtRQUM5QixnQ0FBZ0M7UUFDaEMsSUFBSSxnQkFBZ0IsR0FDbEIsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxRCxJQUNFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDbEMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2xDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDbkMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ25DLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDbEMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2xDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDbkMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ25DLENBQUM7WUFDRCxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFDRCx5Q0FBeUM7UUFDekMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksV0FBZ0IsQ0FBQztRQUNyQixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRTlCLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDZCxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM1QixLQUFLLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsc0JBQXNCO1lBQ2pGLCtEQUErRDtZQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzdCLElBQUksV0FBVyxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDMUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDN0MsV0FBVyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyx1QkFBdUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzdDLElBQUksaUJBQWlCLEdBQWUsSUFBSSxVQUFVLENBQ2hELFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQ2pDLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0lBRU0sdUJBQXVCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRU0sdUJBQXVCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUM3QyxnREFBZ0Q7SUFDbEQsQ0FBQyxDQUFDO0lBRU0sdUJBQXVCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUM3QyxnREFBZ0Q7SUFDbEQsQ0FBQyxDQUFDO0lBRUYsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLGdCQUFnQixHQUFHLENBQUMsV0FBZ0IsRUFBRSxFQUFFO1FBQzlDLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0QiwrQkFBK0I7WUFDL0IsY0FBYztZQUNkLDJEQUEyRDtZQUMzRCxrQ0FBa0M7WUFDbEMsaUNBQWlDO1lBQ2pDLEtBQUs7WUFDTCxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUMvSCxDQUFDLElBQUksRUFBQyxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNoRCxDQUFDLEVBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDVixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUNBLENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxtQ0FBbUM7WUFDbkMsMkNBQTJDO1lBQzFDLElBQUksS0FBSyxHQUFHO2dCQUNWLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO2dCQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLFlBQVksRUFBRyxFQUFFO2FBQ2xCLENBQUE7WUFDQSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FDekIsMkJBQTJCLEVBQzNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN2QixJQUFJLENBQUMsdUJBQXVCLEVBQzVCLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sa0JBQWtCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUM5QyxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsK0JBQStCO1lBQy9CLGNBQWM7WUFDZCxzQ0FBc0M7WUFDdEMsa0NBQWtDO1lBQ2xDLGlDQUFpQztZQUNqQyxLQUFLO1lBQ0wsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUMxRyxDQUFDLElBQUksRUFBQyxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNoRCxDQUFDLEVBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDVixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUNBLENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QiwyQ0FBMkM7WUFDM0MsSUFBSSxLQUFLLEdBQUc7Z0JBQ1gsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLFlBQVksRUFBRyxFQUFFO2FBQ2xCLENBQUE7WUFDQSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FDekIsMkJBQTJCLEVBQzNCLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDOUIsSUFBSSxDQUFDLHVCQUF1QixFQUM1QixJQUFJLENBQUMsdUJBQXVCLENBQzdCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsV0FBVyxDQUFDLHFCQUFxQjtRQUMvQixvQkFBb0I7UUFDcEIsSUFBSSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQ2pELHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQzFDLENBQUM7UUFDRixPQUFPLGdCQUFnQixDQUFDLENBQUMsc0RBQXNEO0lBQ2pGLENBQUM7SUFDRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxtQkFBbUI7SUFDbkIsb0RBQW9EO0lBQ3BELDJDQUEyQztJQUMzQyxRQUFRO0lBQ1IscURBQXFEO0lBQ3JELDRDQUE0QztJQUM1QyxRQUFRO0lBRVIsSUFBSTtJQUVKLHVDQUF1QztJQUN2QyxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDcEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxLQUFLLEdBQ1AsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDckUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxLQUFLLEdBQ1AsRUFBRTtvQkFDRixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTt3QkFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQy9DLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFJO1FBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLCtDQUErQztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xDLElBQ0UsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFDdEUsQ0FBQztvQkFDRCwwQkFBMEI7b0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QiwrQ0FBK0M7b0JBQy9DLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2xDLE1BQU07b0JBQ1IsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxTQUFTO1FBQ1AsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsZ0RBQWdEO1FBQ2hELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3hGLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzVFLENBQUM7SUFFQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQ3hGLDBCQUEwQjtvQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLCtDQUErQztvQkFDL0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEMsTUFBTTtvQkFDUixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDOUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUMsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBQyxFQUFFLENBQUM7UUFDaEIsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQztRQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFDLEVBQUUsQ0FBQztRQUdyQixLQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUMsQ0FBQztZQUNoQyxJQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQTtnQkFDdkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQyxDQUFDO1lBRTFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRSxRQUFRLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQzthQUFLLElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFHLENBQUMsRUFBQyxDQUFDO1lBRXRELElBQUksQ0FBQyxZQUFZLEdBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBQyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxhQUFhO1FBQ1gsSUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUosVUFBVSxDQUFDLEdBQUUsRUFBRTtZQUNaLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDL0QsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUdELDZCQUE2QjtJQUM3QixzQkFBc0IsQ0FBQyxJQUFtQjtRQUN6QyxnREFBZ0Q7UUFDOUMsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDLENBQUM7WUFDaEQsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEQsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzFELGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEQsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3BELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxRCxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDOUQsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ2xFLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUQsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1lBQ3RFLGdCQUFnQixDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7WUFDcEYsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0QsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0wsNENBQTRDO1FBQzVDLHVDQUF1QztRQUN2QyxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1Qiw2Q0FBNkM7UUFDN0Msa0NBQWtDO0lBQ2xDLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBdUIsRUFBRSxLQUFhO1FBQ2hELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QiwrRUFBK0U7UUFDL0UsSUFBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQzthQUFJLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELGlDQUFpQztJQUNuQyxDQUFDO0lBRUQsYUFBYSxDQUFDLFlBQW9CLEVBQUUsS0FBYTtRQUMvQywyQkFBMkI7UUFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFakIsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUMsQ0FBQztZQUM5QixJQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFDLENBQUM7Z0JBQ3ZCLFFBQVEsRUFBRSxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxHQUFFLENBQUMsRUFBQyxDQUFDO1lBQzdELElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUFDLENBQUE7WUFDdEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEQsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLEVBQVU7UUFDN0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsK0NBQStDO0lBQ2hELEdBQUcsQ0FBQyxRQUF1QjtRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFJLEtBQUssQ0FBQztRQUN0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUVwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWEsRUFBQyxJQUFRO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBUyxFQUFFLElBQVE7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELHlCQUF5QixDQUFDLEtBQWE7UUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQVE7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxZQUFpQixFQUFDLElBQVE7UUFDcEMsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUcscUJBQXFCLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzRyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVM7UUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO3dHQWo5RVcsc0JBQXNCOzRGQUF0QixzQkFBc0IsdVVBSHRCLENBQUMsYUFBYSxDQUFDLCtDQ3RFNUIsaThzQ0FxeEJNLDI4aEJEbnRCRixZQUFZLDRWQUNaLFFBQVEsNENBQUUsV0FBVyw2bERBQUUseUJBQXlCLHVKQUFFLHVCQUF1QiwwUUFBRSxZQUFZLCsyQkFBRSx1QkFBdUIsOEtBQUUscUJBQXFCLHdJQUFFLG9CQUFvQiw2TkFBRSxvQkFBb0IsbUdBQUUseUJBQXlCLHFMQUFFLHVCQUF1QixtTUFBRSxnQkFBZ0I7OzRGQU1oUCxzQkFBc0I7a0JBWmxDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBRWpCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFFBQVEsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQjtxQkFDMVAsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixDQUFDLGFBQWEsQ0FBQzt5WEFJakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEVsZW1lbnRSZWYsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJTXlEYXRlTW9kZWwsIElNeURwT3B0aW9ucyB9IGZyb20gXCJteWRhdGVwaWNrZXJcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTmd4U3Bpbm5lck1vZHVsZSwgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcbi8vaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSwgSW5kZXhEZXRhaWxzfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2hhcmVkLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbkJvb2ssXG4gIEFuc3dlckJvb2ssXG4gIEFuc3dlcldyYXBwZXIsXG4gIE9wdGlvbixcbiAgT3B0aW9uVmFsdWUsXG4gIEF0dGFjaG1lbnRXcmFwcGVyLFxuICBBdHRhY2htZW50LFxuICBMb2NhbFF1ZXN0aW9uXG59IGZyb20gXCIuLi8uLi93cmFwcGVyXCI7XG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyXCI7XG5pbXBvcnQge1xuICBURVNUUVVFU1RJT04sXG4gIERUUVVFU1RJT04sXG4gIEZJTEVRVUVTVElPTixcbiAgVEFRVUVTVElPTixcbiAgUkFESU9RVUVTVElPTixcbiAgQ0hFQ0tRVUVTVElPTixcbiAgQk9PS1FVRVNUSU9OLFxuICBURVNUUUIsXG4gIFJUQVFVRVNUSU9OIC8vUlMgMDZKQU4yNVxufSBmcm9tIFwiLi4vLi4vc2FtcGxlXCI7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSBcInJ4anNcIjtcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaTE4bi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBJMThuUGlwZSB9IGZyb20gXCIuLi8uLi9pMThuLnBpcGVcIjtcbmltcG9ydCB7IERyb3Bkb3duV2l0aEZsYWdDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9kcm9wZG93bi13aXRoLWZsYWcvZHJvcGRvd24td2l0aC1mbGFnLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9jdXN0b20tZHJvcGRvd24vY3VzdG9tLWRyb3Bkb3duLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTnh0RGF0YXRhYmxlIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEN1c3RvbVRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLXRleHQtYXJlYS9jdXN0b20tdGV4dC1hcmVhLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGlja0xvY2F0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvcGljay1sb2NhdGlvbi9waWNrLWxvY2F0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ3VzdG9tSW5wdXRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9jdXN0b20taW5wdXQvY3VzdG9tLWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ3VzdG9tTGFiZWxDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9jdXN0b20tbGFiZWwvY3VzdG9tLWxhYmVsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ3VzdG9tRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1kYXRlLXBpY2tlci9jdXN0b20tZGF0ZS1waWNrZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDdXN0b21SaWNoVGV4dENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1yaWNoLXRleHQvY3VzdG9tLXJpY2gtdGV4dC5jb21wb25lbnRcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJsaWItcXVlc3Rpb25uYWlyZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJMThuUGlwZSwgRm9ybXNNb2R1bGUsIERyb3Bkb3duV2l0aEZsYWdDb21wb25lbnQsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBOeHREYXRhdGFibGUsIEN1c3RvbVRleHRBcmVhQ29tcG9uZW50LCBQaWNrTG9jYXRpb25Db21wb25lbnQsIEN1c3RvbUlucHV0Q29tcG9uZW50LCBDdXN0b21MYWJlbENvbXBvbmVudCwgQ3VzdG9tRGF0ZVBpY2tlckNvbXBvbmVudCwgQ3VzdG9tUmljaFRleHRDb21wb25lbnQsIE5neFNwaW5uZXJNb2R1bGVcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbQ2hhbmdlU2VydmljZV0sXG4gIHN0eWxlVXJsczogW1wiLi9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBxYklkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluc3VyYW5jZVN0YXJ0RGF0ZTogc3RyaW5nO1xuICBASW5wdXQoKSBzZXJ2OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRrbjogc3RyaW5nO1xuICBASW5wdXQoKSBhcGk6IHN0cmluZzsgLy8gVkQgZ2V0dGluZyB0aGUgYXBpIGFzIGlucHV0XG4gIEBPdXRwdXQoKSBoYW5kbGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQm9vazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHBhcmFtczogUGFyYW1zO1xuICBwdWJsaWMgZGV2aWNlSW5mbyA9IG51bGw7XG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XG4gIHB1YmxpYyBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgcHVibGljIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xuIFxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xuICBwdWJsaWMgcmFkaW9GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBPUFRJT05PTkxZIFRZUEVTXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrYm94RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBVTkNPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyB0ZXh0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBydGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRpbWVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGVtYWlsRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYWxwaGFudW1lcmljRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYm9va0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcbiAgLy9CYWNrIGJ1dHRvblxuICBwdWJsaWMgYmFja0J1dHRvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgcHVibGljIGlzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xuICBwdWJsaWMgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBpbnBWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgZGF0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkaG91ck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgYXR0YWNobWVudHNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzcU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBsb2NhbFN1YlF1ZXN0aW9uczogTG9jYWxRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBxdWVzdGlvblN0YWNrID0gW107XG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkTGlzdDogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0dGFjaG1lbnQ6IGFueTtcbiAgcHVibGljIGFsbG93ZWRGaWxlRXh0ZW5zaW9uOiBzdHJpbmdbXTtcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlVHlwZUluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFjazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgY2hlY2s6IGJvb2xlYW47XG4gIHB1YmxpYyBwb3A6IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NhbERhdGU6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXRocXVlc3Rpb246IG51bWJlcjtcbiAgcHVibGljIHBlcmNlbnQ6IG51bWJlcjtcbiAgcHVibGljIGNvdW50OiBudW1iZXI7XG4gIHB1YmxpYyB0YUZvY3VzT3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBub3RWYWxpZEFjY051bTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3BsQ0NCYWNrQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN1bW1hcnkgPSBbXTtcbiAgcHVibGljIGxvY2FsU3ViUU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGtleUluZGV4OiBudW1iZXIgPSAwO1xuICAvL3B1YmxpYyBzcXVlczogc3RyaW5nO1xuICBwdWJsaWMgc2VsRGF0ZTogYW55ID0ge307XG4gIHB1YmxpYyBzZWxlY3REYXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcbiAgcHVibGljIGlubmVyaHRtbDogYW55O1xuICBwdWJsaWMgcG9zc2liaWxpdGllczogYW55O1xuICBwdWJsaWMgaW5uZXJodG1sMTogYW55O1xuICBwdWJsaWMgc3VtbWFyeURhdGEgPVtdO1xuIFxuICBwdWJsaWMgaG91cnM6IGFueVtdID0gW1xuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICBdO1xuIFxuICBwdWJsaWMgbWludXRlczogc3RyaW5nW10gPSBbXG4gICAgXCIwMFwiLFxuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICAgIFwiMTNcIixcbiAgICBcIjE0XCIsXG4gICAgXCIxNVwiLFxuICAgIFwiMTZcIixcbiAgICBcIjE3XCIsXG4gICAgXCIxOFwiLFxuICAgIFwiMTlcIixcbiAgICBcIjIwXCIsXG4gICAgXCIyMVwiLFxuICAgIFwiMjJcIixcbiAgICBcIjIzXCIsXG4gICAgXCIyNFwiLFxuICAgIFwiMjVcIixcbiAgICBcIjI2XCIsXG4gICAgXCIyN1wiLFxuICAgIFwiMjhcIixcbiAgICBcIjI5XCIsXG4gICAgXCIzMFwiLFxuICAgIFwiMzFcIixcbiAgICBcIjMyXCIsXG4gICAgXCIzM1wiLFxuICAgIFwiMzRcIixcbiAgICBcIjM1XCIsXG4gICAgXCIzNlwiLFxuICAgIFwiMzdcIixcbiAgICBcIjM4XCIsXG4gICAgXCIzOVwiLFxuICAgIFwiNDBcIixcbiAgICBcIjQxXCIsXG4gICAgXCI0MlwiLFxuICAgIFwiNDNcIixcbiAgICBcIjQ0XCIsXG4gICAgXCI0NVwiLFxuICAgIFwiNDZcIixcbiAgICBcIjQ3XCIsXG4gICAgXCI0OFwiLFxuICAgIFwiNDlcIixcbiAgICBcIjUwXCIsXG4gICAgXCI1MVwiLFxuICAgIFwiNTJcIixcbiAgICBcIjUzXCIsXG4gICAgXCI1NFwiLFxuICAgIFwiNTVcIixcbiAgICBcIjU2XCIsXG4gICAgXCI1N1wiLFxuICAgIFwiNThcIixcbiAgICBcIjU5XCIsXG4gIF07XG4gXG4gIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWVyaWRpZW06IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWUxOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYm9va0ZsYWdBY2NlcHQ6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVjb3JkSWQ6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWVzdGlvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgc3Bpbm5lck5hbWU6IHN0cmluZztcbiAgcHVibGljIG5leHRWYWx1ZTpzdHJpbmcgPScnO1xuIFxuICBzdGFydF9kYXRlPzogYW55O1xuIFxuICAvL3NlYXJjaCBjb21wb25lbnRcbiAgcHVibGljIHRlbXBvQWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUG9zdGFsY29kZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQcm92aW5jZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZEFyZWE6IHN0cmluZztcbiAgcHVibGljIGxvY2FsYWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIGFsbEFkZHJlc3MgOmFueSBbXSA9IFtdO1xuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XG4gIHB1YmxpYyBwbGFjZXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBwcm92aW5jZTphbnlbXT1bXTtcbiBcbiAgLy8gUkVRLTAxIFBST0dSRVNTIEJBUlxuICBwdWJsaWMgcHJvZ3Jlc3NTdHlsZTogc3RyaW5nID0gXCIwJVwiO1xuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBpbmRleENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgYWRkRmxhZzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBteURhdGVQaWNrZXJPcHRpb25zOiBJTXlEcE9wdGlvbnMgPSB7fTtcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XG4gXG4gIHB1YmxpYyBhbGxJbnB1dFZhbHVlcyA9IFtdOyAvLyBIQSAwMkZFQjI0IFRvIHN0b3JlIGFsbCB0aGUgaW5wdXQgdmFsdWVzXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBzcGlubmVyOiBOZ3hTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIF9mb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIC8vcHJpdmF0ZSBkYlNlcnZpY2U6IE5neEluZGV4ZWREQlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZVxuICApIHtcbiAgICAvLyBWRCAxMEF1ZzI0LXNwaW5uZXIgY2hhbmdlc1xuICAgIHRoaXMuc3Bpbm5lck5hbWUgPSBcInNwMVwiO1xuICAgIHRoaXMuc3Bpbm5lclR5cGUgPSBcImJhbGwtc3Bpbi1jbG9ja3dpc2UtZmFkZVwiO1xuICB9XG4gXG4gIC8vIEhBIDAyRkVCMjQgT24gZGF0ZSBjaGFuZ2UgbmVlZCB0byBzdG9yZSB0aGUgY2hhbmdlZCB2YWx1ZSBzbyBwYXNzaW5nIHRoZSBxdWVzdGlvblxuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBvbkRhdGVDaGFuZ2VkKGV2ZW50OiBJTXlEYXRlTW9kZWwsIHF1ZXM6IGFueSkge1xuICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgb25EYXRlQ2hhbmdlZCcpO1xuICAgIC8vdG8gY2hhbmdlIHRoZSBib3JkZXIgY29sb3JcbiAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvZ3Jlc3NCYXIgY29uZCcpO1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9XG4gICAgICAgIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS50eXBlID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBFTFNFIG9mIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUgPT1cIkJvb2tcIil7XG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZSA9ICBldmVudC5kYXRlLmRheSArIFwiLVwiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiLVwiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9XG4gICAgICAgIGV2ZW50LmRhdGUueWVhciArIFwiLVwiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiLVwiICsgZXZlbnQuZGF0ZS5kYXk7XG4gICAgfVxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgIGh0bWxFbGVtZW50XG4gICAgICAuaXRlbSgwKVxuICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyLWNvbG9yOiM4N2JlMWM7d2lkdGg6MTAwJVwiKTtcbiAgICB0aGlzLmRhdGVNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLCBldmVudCk7XG4gICAgaWYgKFxuICAgICAgZXZlbnQuZGF0ZS5kYXkgPT09IDAgJiZcbiAgICAgIGV2ZW50LmRhdGUubW9udGggPT09IDAgJiZcbiAgICAgIGV2ZW50LmRhdGUueWVhciA9PT0gMFxuICAgICkge1xuICAgICAgdGhpcy5kYXRlTWFwLmRlbGV0ZSh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgICB0aGlzLmFuc3dlck1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgIH1cbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzLmlucFZhbHVlID0gJyt0aGlzLmlucFZhbHVlKTtcbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzLnNlbGVjdERhdGUgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XG4gICAgLy8gSEEgMDJGRUIyNCBBc3NpZ25pbmcgaW5wdXQgdmFsdWUgdG8gcXVlcyBpbnB1dFxuICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmlucFZhbHVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZXZpY2VJbmZvID0gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldERldmljZUluZm8oKTtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcbiAgICAgIGlmIChwYXJhbXNbJ2lkJ10pIHtcbiAgICAgICAgdGhpcy5pbmRpdmlkdWFsQm9va0J1dHRvbiA9IHRydWU7XG4gICAgICB9ZWxzZSBpZihwYXJhbXNbJ2Jvb2tsZXRJZCddKXtcbiAgICAgICAgdGhpcy5pbmRpdmlkdWFsQm9va0J1dHRvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9IFwiQU1cIjtcbiAgICB0aGlzLnByb2Nlc3NRQigpO1xuICAgIC8vY29uc29sZS5sb2cobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FkZHJlc3MnKSk7XG4gICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKXtcbiAgICAgIHRoaXMubG9jYWxhZGRyZXNzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFkZHJlc3NcIikpO1xuICAgICAgLy9jb25zb2xlLmxvZygnTGVuZ3RoPScrdGhpcy5sb2NhbGFkZHJlc3MubGVuZ3RoKTtcbiAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsYWRkcmVzcy5pbmRleE9mKGl0ZW0pID09IGluZGV4KXtcbiAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmKHRoaXMuZGV2aWNlSW5mby5vcyA9PT0gJ2lPUycpe1xuICAgICAgICBsZXQgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihcImFkZHJlc3NEQlwiKTtcbiAgICAgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0TmV3ID0gZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3Q7XG4gICAgICAgICAgbGV0IGRiTmV3ID0gdGFyZ2V0TmV3LnJlc3VsdDtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0TmV3ID0gZGJOZXcudHJhbnNhY3Rpb24oJ2FkZHJlc3NUYWJsZScpXG4gICAgICAgICAgICAgICAgLm9iamVjdFN0b3JlKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5nZXQoMSk7XG4gICAgICAgICAgcmVxdWVzdE5ldy5vbnN1Y2Nlc3MgPSAoKT0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGVtcFZhciA9IHJlcXVlc3ROZXcucmVzdWx0O1xuICAgICAgICAgICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UodGVtcFZhci53aG9sZUFkZHJlc3NTdHJpbmcpO1xuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvY2FsYWRkcmVzcy5pbmRleE9mKGl0ZW0pID09IGluZGV4KXtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gU0tTMjBNQVIyNSBFbnN1cmUgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcgdGhlIG1ldGhvZFxuICAgICAvLyBBUC0yNU1BUjI1IEVtcHR5IHN0cmluZyByZXBsYWNlIG51bGxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2gocXVlcyA9PiB7XG4gICAgICAgIGxldCBpbnB1dDogYW55O1xuICAgICAgICBpZihxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT0gJ1JhZGlvJyB8fCBxdWVzLnR5cGUgPT0gJ0xvY2F0aW9uJyl7XG4gICAgICAgICAgaW5wdXQgPSB7fVxuICAgICAgICAgIGlucHV0Wyd2YWx1ZU9iaiddID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzLnJlZmVyZW5jZUZpZWxkIHx8IG51bGxcbiAgICAgICAgICBpbnB1dFsnZnJvbVF1ZXN0aW9uSWQnXSA9IHF1ZXMuaWQgfHwgbnVsbFxuICAgICAgICB9IGVsc2UgaWYocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJyl7XG4gICAgICAgICAgaW5wdXQgPSB7fVxuICAgICAgICAgIGlucHV0Wyd2YWx1ZSddID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgIH0gZWxzZSBpZihxdWVzLnR5cGUgPT0gJ0xpc3QnKXtcbiAgICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgICAgcXVlc1snc3ViVGV4dCddID0gdHlwZW9mIHF1ZXM/LnN1YlRleHQgPT09ICdvYmplY3QnID8gcXVlcz8uc3ViVGV4dCA6IEpTT04ucGFyc2UocXVlc1snc3ViVGV4dCddKTtcbiAgICAgICAgICBsZXQgYXBpT2JqOiBhbnkgPSBxdWVzLnN1YlRleHQ7XG4gICAgICAgICAgaW5wdXRbJ3ZhbHVlT2JqJ10gPSBxdWVzLmlucHV0IHx8IG51bGxcbiAgICAgICAgICBpbnB1dFsnZmllbGQnXSA9IGFwaU9iai5kZWZhdWx0RmllbGQgfHwgYXBpT2JqLmZpZWxkWzBdIHx8IGFwaU9iai5maWVsZCB8fCBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5wdXQgPSBxdWVzLmlucHV0IHx8IG51bGxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGlucHV0LCBxdWVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4vLyBjYWxsIHdoZW4gYm9va0lkIGNoYW5nZXNcbiAgbmdPbkNoYW5nZXMoc2ltcGxlY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmKHNpbXBsZWNoYW5nZXNbJ3FiSWQnXSl7XG4gICAgICB0aGlzLnByb2Nlc3NRQigpO1xuICAgIH1cbiAgfVxuICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgZGF0ZV9UaW1lTWFwKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRob3VyTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgIHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLCB0aGlzLnNlbGVjdGVkTWludXRlKTtcbiAgfVxuIFxuICBkYXkoKSB7XG4gICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zID0ge1xuICAgICAgZGF0ZUZvcm1hdDogXCJkZC5tbS55eXl5XCIsXG4gICAgICBzdW5IaWdobGlnaHQ6IGZhbHNlLFxuICAgICAgZGlzYWJsZURhdGVSYW5nZXM6IFtdLFxuICAgICAgc2hvd0NsZWFyRGF0ZUJ0bjogZmFsc2UsXG4gICAgICBkaXNhYmxlU2luY2U6IHtcbiAgICAgICAgeWVhcjogMCxcbiAgICAgICAgbW9udGg6IDAsXG4gICAgICAgIGRheTogMCxcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlVW50aWw6IHtcbiAgICAgICAgeWVhcjogMCxcbiAgICAgICAgbW9udGg6IDAsXG4gICAgICAgIGRheTogMCxcbiAgICAgIH0sXG4gICAgICBzaG93VG9kYXlCdG46IGZhbHNlLFxuICAgICAgZGF5TGFiZWxzOiB7XG4gICAgICAgIHN1OiBcIkRvbVwiLFxuICAgICAgICBtbzogXCJMdW5cIixcbiAgICAgICAgdHU6IFwiTWFyXCIsXG4gICAgICAgIHdlOiBcIk1pw6lcIixcbiAgICAgICAgdGg6IFwiSnVlXCIsXG4gICAgICAgIGZyOiBcIlZpZVwiLFxuICAgICAgICBzYTogXCJTw6FiXCIsXG4gICAgICB9LFxuICAgICAgbW9udGhMYWJlbHM6IHtcbiAgICAgICAgMTogXCJFbmVcIixcbiAgICAgICAgMjogXCJGZWJcIixcbiAgICAgICAgMzogXCJNYXJcIixcbiAgICAgICAgNDogXCJBYnJcIixcbiAgICAgICAgNTogXCJNYXlvXCIsXG4gICAgICAgIDY6IFwiSnVuXCIsXG4gICAgICAgIDc6IFwiSnVsXCIsXG4gICAgICAgIDg6IFwiQWdvXCIsXG4gICAgICAgIDk6IFwiU2VwXCIsXG4gICAgICAgIDEwOiBcIk9jdFwiLFxuICAgICAgICAxMTogXCJOb3ZcIixcbiAgICAgICAgMTI6IFwiRGljXCIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiBcbiAgY2hhbmdlKCkge1xuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgIC5pdGVtKDApXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyOiAxcHggc29saWQgcmVkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXI6IDFweCBzb2xpZCAjODdiZTFjIDt3aWR0aDoxMDAlXCIpO1xuICAgIH1cbiAgfVxuIFxuICBwcm9jZXNzUUIoKSB7XG4gICAgXG4gICAgY29uc29sZS5sb2coJ1Byb2Nlc3NRQicpO1xuICAgIC8vdGhpcy5xYkl0ZW1cbiAgICBjb25zb2xlLmxvZyh0aGlzLnFiSWQpO1xuICAgIC8vY29uc29sZS5sb2coJ1ZlcnNpb24gaW4gcHJvY2VzcyBpcyA4YmYxMWVmYTdmOTFhMzkxZDk1N2JmNmI1MDc4ZWRjN2U2NTZiNjdjJyk7XG4gICAgaWYgKHRoaXMucWJJZCkge1xuICAgICAgaWYgKHRoaXMucWJJZC5sZW5ndGggPT0gMTgpIHtcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb25Cb29rKHRoaXMucWJJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGVsc2UgcGFydCcpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBRdWVzdGlvbiBEaXJlY3RseSBmb3IgdGVzdGluZycpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbSA9IERUUVVFU1RJT047XG4gICAgICAgIHRoaXMucWJJdGVtID0gVEVTVFFCO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuIFxuICB0cmltTGFzdER1bW15KGlucHV0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDAsIGlucHV0Lmxlbmd0aCAtIDYpKTtcbiAgfVxuIFxuICBnZXRQcm9wZXJUaW1lKGRlZjogc3RyaW5nLCBpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGlucHV0ID09PSBcIlwiID8gZGVmIDogaW5wdXQ7XG4gIH1cbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIC8vU3VtbWFyeSBRdWVzdGlvbiBDbGlja2FibGUgTG9naWNcbiAgaGFuZGxlRWRpdENsaWNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhY2tpY29uID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJQZW5kaW5nXCIpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHZhbHVlKTtcbiAgICAgIC8vY29uc29sZS5sb2coJyBpbiBzaWRlIHN1bW1hcnlvcGVuJysgdGhpcy5zdW1tYXJ5Lmxlbmd0aCk7XG4gXG4gICAgICAvL0Fzc2lnbiBxdWVzdGlvbiBzdGFjayBsZW5ndGggZnJvbSBzdW1tYXJ5IHBhcnRcbiAgICAgIHZhciBhcnJheUxlbmd0aCA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGg7XG4gICAgICB2YXIgbGVuZ3RoVmFsdWUgPSB0aGlzLnF1ZXN0aW9uU3RhY2suaW5kZXhPZih2YWx1ZSk7XG4gXG4gICAgICBmb3IgKGxldCBpID0gYXJyYXlMZW5ndGg7IGkgPiBsZW5ndGhWYWx1ZTsgaS0tKSB7XG4gICAgICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0JhciA9PT0gdHJ1ZSkge1xuICAgICAgICB2YXIgYXJyYXlMZW5ndGgxID0gdGhpcy5xdWVzdGlvbk5hbWUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gYXJyYXlMZW5ndGgxOyBqID4gbGVuZ3RoVmFsdWU7IGotLSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBbXTtcbiAgICB9XG4gIH1cbiBcbiAgaGFuZGxlTmV4dENsaWNrKCkge1xuICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5iYWNrQnV0dG9uRmxhZyA9IGZhbHNlO1xuICAgIHRoaXMuQW5zd2VyU2F2ZSgpO1xuICB9XG4gXG4gIEFuc3dlclNhdmUoKXtcbiAgICAvL3RoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb25UeHQ9Jyc7XG4gICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLm5leHRUcmFja2luZ0lkKTtcbiAgICB0aGlzLnJlY29yZElkID0gbnVsbDtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIC8vIE1SIDMwSkFOMjQgLSBBZGRlZCBDb25kaXRpb24gZm9yIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fciAoQm9vayBRdWVzdGlvbiBhbmQgTm9uLUJvb2spXG4gICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBvYmplY3RzIHRvIHN0b3JlIHRoZSB2YWx1ZXNcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucy5sZW5ndGg7aSsrKSB7XG4gICAgICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uVGV4dCl7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uVGV4dC5yZXBsYWNlKC88W14+XSs+L2csICcnKTsgLy8gUmVtb3ZlIEhUTUwgdGFncyBmcm9tIHRoZSBxdWVzdGlvblRleHQgdmFsdWVcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHF1ZXN0aW9uVGV4dCA9ICd1bmRlZmluZWQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9uc1tpXS5pbnB1dDtcbiAgICAgICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5RGF0YS5wdXNoKG9iaik7IC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBkYXRhIGFycmF5XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHF1ZXN0aW9uVGV4dCA9IHRoaXMucXVlc3Rpb25JdGVtLnF1ZXN0aW9uVGV4dC5yZXBsYWNlKC88W14+XSs+L2csICcnKTtcbiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXG4gICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcbiAgICB9XG4gXG4gICAgICAgICB2YXIgdHlwID0gY1F1ZXN0aW9uLnR5cGU7XG4gICAgLy8gdGhpcy5zcXVlcyArPSBjUXVlc3Rpb24ucXVlc3Rpb24gKyAnQEAjIyQkJztcbiAgICB2YXIgcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLnF1ZXN0aW9uVGV4dDtcbiAgICB2YXIgbWFpbGZvcm1hdCA9XG4gICAgICBcIl5bXi5dW2EtekEtWjAtOSEjJCUmJyorLS89P15fYHt8fX5dK1teLl1AW14tXVthLXpBLVowLTkuLV0rW14tXS5bYS16QS1aXXsyLH0kXCI7XG4gXG4gICAgLy8gUHJvY2VzcyBJbnB1dHNcbiAgICBpZiAodGhpcy5jaGVja2JveEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgLy8gU2F2ZSBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaW4gdGhlIGlucFZhbHVlXG4gICAgICBmb3IgKHZhciBvdiBvZiB0aGlzLm9wdGlvblZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZCkpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBvdi52YWx1ZSArIFwiQEAjIyQkXCI7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBvdi5uZXh0UXVlc3Rpb247XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbWFpbEZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlICYmIHRoaXMuaW5wVmFsdWUubWF0Y2gobWFpbGZvcm1hdCkpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmFscGhhbnVtZXJpY0ZsYWcpIHtcbiAgICAgIHZhciBpc05vdFZhbGlkQWNjTnVtID0gdGhpcy5pc05vdFZhbGlkQWNjTnVtYmVyKHRoaXMuaW5wVmFsdWUpO1xuICAgICAgaWYgKGlzTm90VmFsaWRBY2NOdW0pIHtcbiAgICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5uZXh0UXVlc3Rpb247XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmJvb2tGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGl0ZW0gb2YgdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gXG4gICAgICAgIGlmKGl0ZW0udHlwZSA9PSBcIkRhdGVcIiB8fCBpdGVtLnR5cGUgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAgICAvL3RoaXMgb25lXG4gICAgICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgICAgICAgIGlmKGl0ZW0udHlwZSA9PSBcIkRhdGVcIil7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSB0eXBlIGNvbmQgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XG4gICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGU7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSlcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdERhdGUpXG4gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgIGlmKGl0ZW0udHlwZSA9PSBcIlRpbWVcIil7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkSG91cit0aGlzLnNlbGVjdGVkTWVyaWRpZW0rdGhpcy5zZWxlY3RlZE1pbnV0ZSlcbiBcbiAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0ZSl7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1cbiBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAzMS1KQU4tMjQgUmVtb3ZlZCB0aGUgc2VsZWN0SG91ciBhbmQgc2VsZWN0TWludXRlIGNvbmRpdGlvblxuICAgICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5zZWxEYXRlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuaW5wVmFsdWUgfHwgIXRoaXMuc2VsZWN0RGF0ZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBudWxsIGNvbmRpdGlvbiBvZiBpbnB1dCcpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICAgICAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgICAgICAgIC5pdGVtKDApXG4gICAgICAgICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJlZCAhaW1wb3J0YW50O1wiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXh0IGVycm9yIGNvbmRpdGlvblxuICAgICAgaWYoaXRlbS50eXBlPT0gXCJUZXh0XCIpe1xuICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IGl0ZW0uaW5wdXQ7IDYzNFxuICAgICAgfVxuIFxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWl0ZW0uaXNPcHRpb25hbCAmJlxuICAgICAgICAvLyAgKChpdGVtLnR5cGUgIT0gXCJGaWxlXCIgJiYgIWl0ZW0uaW5wdXQgJiYgaXRlbS50eXBlICE9ICdEYXRlJyAmJiBpdGVtLnR5cGUgIT0gJ1RpbWUnKSB8fFxuICAgICAgICAgLy8gICAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApKVxuICAgICAgICAgKGl0ZW0udHlwZSA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRHJvcGRvd25cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICAgICBpZiAoaXRlbS5pbnB1dCAmJiBpdGVtLmlucHV0Lm1hdGNoKG1haWxmb3JtYXQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudEl0ZW0gb2YgdGhpcy5hdHRhY2htZW50cykge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPVxuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xuICAgICAgICAgICAgICBcIkAjJFwiICtcbiAgICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudE5hbWUgK1xuICAgICAgICAgICAgICBcIixcIjtcbiAgICAgICAgICAgIGlmIChpdGVtLmlucHV0ID09IHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScgKyByZWNvcmRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcbiAgICAgICAgfSAvL2l0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZTtcbiBcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAoaXRlbS5pbnB1dCAhPSB1bmRlZmluZWQgPyBpdGVtLmlucHV0IDogXCJcIikgKyBcIkBAIyMkJFwiO1xuICAgICAgICBxdWVzdGlvblR4dCArPSBpdGVtLnF1ZXN0aW9uICsgXCJAQCMjJCRcIjtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGJvb2sxJyArIHRoaXMuaW5wVmFsdWUpXG4gICAgICB9XG4gICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBxdWVzdGlvblR4dCA9IHF1ZXN0aW9uVHh0ID8gdGhpcy50cmltTGFzdER1bW15KHF1ZXN0aW9uVHh0KSA6IHF1ZXN0aW9uVHh0O1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gJyc7XG4gICAgICB2YXIgaGFzTWlzc2luZ0lucHV0ID0gZmFsc2U7XG4gICAgICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKXtcbiAgICAgICAgdGhpcy5zdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAodmFyIGxvY2FsUXVlcyBvZiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgICAgICBpZighbG9jYWxRdWVzLmlucHV0KSB7XG4gICAgICAgICAgICAgIGxvY2FsUXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBpZighdGhpcy5zdWJBbnNNYXAuaGFzKGxvY2FsUXVlcy5pZCkpe1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwJylcbiAgICAgICAgICAgIHRoaXMuc3ViQW5zTWFwLnNldChsb2NhbFF1ZXMuaWQsbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwIGVsc2UnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5pZCx0aGlzLnN1YkFuc01hcC5nZXQobG9jYWxRdWVzLmlkKSArICckJEBAIyMnK2xvY2FsUXVlcy5pbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gXG4gICAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdmaWxlIHR3bycpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3ViQW5zTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIE1hcCcgKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAodmFsdWUgIT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJykgKyAnQEAjIyQkJztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuZHJvcGRvd25GbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPD0gMSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIuXCI7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcgJiYgdGhpcy5kYXRlRmxhZyAmJiB0aGlzLnRpbWVGbGFnKSB7XG4gICAgICAvL3RoaXMgb25lXG4gICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSB0aGlzLmdldFByb3BlclRpbWUoXCIxMlwiLCB0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLmdldFByb3BlclRpbWUoXCIwMFwiLCB0aGlzLnNlbGVjdGVkTWludXRlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lcmlkaWVtID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiQU1cIiwgdGhpcy5zZWxlY3RlZE1lcmlkaWVtKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlLmxlbmd0aCk7XG4gXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBQTVwiO1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiQU1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciA9PT0gXCIxMlwiKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0Jhcikge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiVFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0Jhcikge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiVFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0Jhcikge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJhbnMgPT4gXCIgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgICB2YXIgZGF0ZTE6IGFueSA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgIGRhdGUxID0gZGF0ZTFbMF0uc3BsaXQoXCIvXCIpO1xuICAgICAgICAgIGRhdGUxID0gW2RhdGUxWzJdLCBkYXRlMVsxXSwgZGF0ZTFbMF1dLmpvaW4oXCItXCIpO1xuICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoZGF0ZTEpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coZGF0ZTEpXG4gICAgICAgICAgdmFyIGRhdGUyOiBhbnkgPSB0aGlzLmluc3VyYW5jZVN0YXJ0RGF0ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShkYXRlMlswXSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMik7XG4gICAgICAgICAgaWYgKGRhdGUxIDwgZGF0ZTIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPVxuICAgICAgICAgICAgICBcIk5vIGVzIHBvc2libGUgZGFyIGRlIGFsdGEgbGEgcmVjbGFtYWNpw7NuIGRlYmlkbyBhIHF1ZSBsYSBmZWNoYSBkZWwgaW5jaWRlbnRlIGVzIGFudGVyaW9yIGEgbGEgZmVjaGEgZGUgY29udHJhdGFjacOzbiBkZSBsYSBww7NsaXphXCI7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8ICF0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLmRhdGVGbGFnKSB7XG4gICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlRmxhZyAmJiB0aGlzLmR0RmxhZyAmJiAhdGhpcy50aW1lRmxhZykge1xuICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDcgfHwgdGhpcy5zZWxEYXRlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVGbGFnKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdmb3VyJylcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPVxuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudElkICtcbiAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudE5hbWUgK1xuICAgICAgICAgICAgXCIsXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZpbGVzc3MnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnN1YnN0cigwLCB0aGlzLmlucFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gXG4gICAgLy8gQ2hlY2sgZm9yIHRoZSBhbnN3ZXIgYmVmb3JlIHNhdmluZyB0byB0aGUgREJcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25JdGVtLmlzT3B0aW9uYWwgJiYgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgIC8vIFNob3cgZXJyb3IgdGhhdCB0aGUgcXVlc3Rpb24gbXVzdCBiZSBhbnN3ZXJlZFxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAgLy90aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTYXZlIHRoZSBBbnN3ZXIgaW4gdGhlIERCXG4gICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICB0aGlzLmFuc3dlcldyYXAuYWJJZCA9IHRoaXMuYWJJdGVtLmlkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzSWQgPSBjUXVlc3Rpb24uaWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNWYWx1ZSA9IHF1ZXNWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAucVR5cCA9IHR5cDtcbiAgICAvLyBIQSAwMkZFQjI0IFRvIGRpc3BsYXkgdGhlIHZhbHVlcyBpbiBzdW1tYXJ5IHVzaW5nIHRoaXNcbiAgICB0aGlzLmFsbElucHV0VmFsdWVzID0gW107XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBpbnB1dFZhbHVlID0ge307XG4gICAgICBpbnB1dFZhbHVlWydJZCddID0gZWxlbWVudD8uaWQ7XG4gICAgICBpbnB1dFZhbHVlWyd0eXBlJ10gPSBlbGVtZW50Py50eXBlO1xuICAgICAgaW5wdXRWYWx1ZVsncmVmZXJlbmNlRmllbGQnXSA9IGVsZW1lbnQ/LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgaW5wdXRWYWx1ZVsncXVlc3Rpb25UZXh0J10gPSBlbGVtZW50Py5xdWVzdGlvblRleHQ7XG4gICAgICBpbnB1dFZhbHVlWydpbnB1dCddID0gZWxlbWVudD8uaW5wdXQ7XG4gICAgICBpbnB1dFZhbHVlID8gdGhpcy5hbGxJbnB1dFZhbHVlcy5wdXNoKGlucHV0VmFsdWUpIDogdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB9KTtcbiAgICB0aGlzLmFuc3dlcldyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5ncm91cE5hbWU7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuYW5zd2VyV3JhcC5xVHlwJyx0aGlzLmFuc3dlcldyYXAucVR5cCk7XG4gICBpZih0aGlzLmFuc3dlcldyYXAucVR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKXtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XG4gICAgICAvLyBjb25zb2xlLmxvZygnQmFuayBjb25kaXRpb24nKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSk7XG4gICAgfVxuICAgIC8qaWYgKGNRdWVzdGlvbi50eXBlID09ICdCb29rJyl7XG4gICAgZm9yICh2YXIgcWIgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKXtcbiAgICAgIC8vY29uc29sZS5sb2cocWIucXVlc3Rpb24rJyoqKionK1wiQEAjIyQkXCIpXG4gICAgfVxuICB9Ki9cbiAgICAvL3RoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLnF1ZXN0aW9uO1xuICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggaW5wdXQgdG8gcGFyZW50XG4gICAgbGV0IHF1ZXN0aW9uQW5zID0ge31cbiAgICBxdWVzdGlvbkFuc1sncXVlc3Rpb25EZXRhaWwnXSA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHF1ZXN0aW9uQW5zWydhbnN3ZXJCb29rRGV0YWlsJ10gPSB0aGlzLmFiSXRlbTtcbiAgICBjb25zb2xlLmxvZyhxdWVzdGlvbkFucyk7XG4gICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXN0aW9uQW5zKTtcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25JdGVtLS0+Jyk7XG4gICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5xdWVzdGlvbjtcbiAgICB0aGlzLnNhdmVBbnN3ZXIoKTtcbiAgfVxuICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgbmV4dCgpIHtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyBJZiBubyBlcnJvciB0aGVuIG1vdmUgdG8gbmV4dCBzdGVwc1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiBcbiAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChjUXVlc3Rpb24uaWQpO1xuICAgIC8vICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKGNRdWVzdGlvbi5OYW1lKTtcbiBcbiAgICAvLyBDT05ESVRJT05BTCB2cyBPUFRJT05PTkxZICYgVU5DT05ESVRJT05BTFxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IGV2ZW4gaW4gZWxzZSBjb25kaXRpb25zIGJlbG93XG4gICAgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIGZvciAodmFyIGNPcHQgb2YgY1F1ZXN0aW9uLm9wdGlvbnMpIHtcbiAgICAgICAgLy8gUmFkaW8gLyBEYXRhXG4gICAgICAgIC8vY29uc29sZS5sb2coJ09wdGlvbiA9PiAnICsgY09wdC52YWx1ZSArICcgbWF0Y2hpbmcgd2l0aCAnICsgYW5zVmFsKTtcbiAgICAgICAgaWYgKGNPcHQudmFsdWUgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ01hdGNoIEZvdW5kIHVzaW5nICcgKyBjT3B0Lm5leHRRdWVzdGlvbik7XG4gICAgICAgICAgaWYoY09wdC5uZXh0UXVlc3Rpb24pe1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNPcHQubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb25kaXRpb25hbCByZWNvcmQgaWQnKyB0aGlzLnJlY29yZElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ291bGQgYmUgb2YgdHlwZSBEYXRhIGFuZCBleGlzdGluZyB2YWx1ZVxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiT1BUSU9OT05MWVwiKSB7XG4gICAgICAvLyAgT1BUSU9OT05MWSBsb2dpY1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJVTkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIC8vVW5jb25kaXRpb25hbCAgbG9naWNcbiAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgdW5jb25kaXRpb25hbFwiKTtcbiAgICAgIC8vaW5zaWRlIEJvb2sgVHlwZVxuICAgICAgaWYgKGNRdWVzdGlvbi50eXBlID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5xdWVzdGlvbk51bWJlciAhPSc2Jykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGJvb2tcIik7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhvcHQudHlwZSk7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9b3B0MS5uZXh0UXVlc3Rpb24gfHwgY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdFbHNlJyt0aGlzLnJlY29yZElkKVxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24udHlwZSA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPT0nNicgKSB7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpe1xuICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gb3B0MS5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiBcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIGVsc2UgdG8ga2VlcCB0aGUgYXNzaWdubWVudCBkZWZhdWx0XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgIH1cbiBcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICAvLyBDYWxsaW5nIHRoZSBwcm9ncmVzIGJhciB1cGRhdGUgZnVuY3Rpb25cbiAgICB0aGlzLmFuc3dlckNvdW50Kys7XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuIFxuIFxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuIFxuICAgIGlmICh0aGlzLnJlY29yZElkKSB7XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnJlY29yZElkKTtcbiAgICAgIHRoaXMucG9wID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3AgPSBmYWxzZTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gXG4gICAgICB0aGlzLnJlc2V0RmxhZyh0eXApO1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBudWxsO1xuIFxuICAgICAgLy8gU2hvdyBTdW1tYXJ5XG4gICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25TdGFjaykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBRdWVzdGlvbiA9PiAnICsgcSk7XG4gICAgICAgIHZhciBhbnNXcmFwID0gdGhpcy5hbnN3ZXJNYXAuZ2V0KHEpO1xuICAgICAgICBpZiAoYW5zV3JhcCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIEFuc3dlciBmb3IgJyArIGFuc1dyYXAucXVlc0lkICsgJyBvZiB0eXBlICcgKyBhbnNXcmFwLnFUeXApO1xuICAgICAgICAgIGlmKGFuc1dyYXAucVR5cCA9PSAnRmlsZScgfHwgYW5zV3JhcC5xVHlwID09ICdCb29rJ3x8YW5zV3JhcC5xVHlwID09ICdMaXN0JyB8fCBhbnNXcmFwLnFUeXAgPT0gJ0NoZWNrYm94Jyl7XG4gICAgICAgICAgICB2YXIgbmV3U3RyID0gJyc7XG4gICAgICAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgYW5zV3JhcC5hbnNWYWx1ZS5zcGxpdCgnQEAjIyQkJykpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyMSBvZiBhbnNTdHIuc3BsaXQoJyQkQEAjIycpKSB7XG4gICAgICAgICAgICAgIC8vICBpZihhbnNTdHIxLmluY2x1ZGVzKCdhbnN3ZXJTdHJpbmcnKSl7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nXG4gICAgICAgICAgICAgICAvLyAgIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSBhbnNTdHIxLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAvLyAgYW5zU3RyMSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgICAgICAgIC8vICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuc1N0cjEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBhbnNTdHIxO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyICs9ICc7ICcgKyBhbnNTdHIxOyAgLy9jb21tYSgsKSBjaGFuZ2VkIGFzIHNlbWkgY29sb24oOykgYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hKCwpXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYXR0YWNobWVudHNNYXAuaGFzKGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBhdHQgb2YgdGhpcy5hdHRhY2htZW50c01hcC5nZXQoYW5zV3JhcC5xdWVzSWQpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5yZXBsYWNlKGF0dC5hdHRhY2htZW50SWQsJycpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSAobmV3U3RyLnJlcGxhY2UoJywsJywnLCAnKSkucmVwbGFjZSgnLCAsJywnLCAnKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnN0YXJ0c1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMSwgbmV3U3RyLmxlbmd0aCkgOiAobmV3U3RyLmVuZHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDAsIG5ld1N0ci5sZW5ndGggLSAxKSA6IG5ld1N0cik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbnNXcmFwLmFuc1ZhbHVlID0gbmV3U3RyO1xuICAgICAgICAgICAgYW5zV3JhcC5teVZhbCA9IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgICAvLyBWRCBDaGVjayBpZiB0aGUgc3VtbWFyeSBhbHJlYWR5IGNvbnRhaW5zIGFuIGVudHJ5IGZvciB0aGUgc2FtZSBxdWVzSWRcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0Fuc1dyYXAgPSB0aGlzLnN1bW1hcnkuZmluZChpdGVtID0+IGl0ZW0ucXVlc0lkID09PSBhbnNXcmFwLnF1ZXNJZCk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nQW5zV3JhcCkge1xuICAgICAgICAgICAgLy8gSWYgaXQgZXhpc3RzLCB1cGRhdGUgdGhlIGFuc1ZhbHVlIGFuZCBteVZhbFxuICAgICAgICAgICAgZXhpc3RpbmdBbnNXcmFwLmFuc1ZhbHVlID0gYW5zV3JhcC5hbnNWYWx1ZTtcbiAgICAgICAgICAgIGV4aXN0aW5nQW5zV3JhcC5teVZhbCA9IGFuc1dyYXAubXlWYWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHB1c2ggdGhlIGFuc1dyYXAgdG8gdGhlIHN1bW1hcnkgYXJyYXlcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc1dyYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmJhY2tpY29uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuIFxuICBnZXRUZXh0KHZhbHVlKSB7XG4gICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodmFsdWUsIFwidGV4dC9odG1sXCIpO1xuICAgIC8vY29uc29sZS5sb2coIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnRcbiAgICApO1xuICB9XG4gXG4gIGhhbmRsZUJhY2tDbGljaygpIHtcbiAgICB0aGlzLmJhY2sgPSB0cnVlO1xuICAgIGlmICh0aGlzLnBvcCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5iYWNrVHJhY2tpbmdJZCk7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICBpZihjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPT0nMScpe1xuICAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmJhY2spO1xuICAgIH1cbiBcbiBcbiAgICB0aGlzLmFuc3dlckNvdW50LS07XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuIFxuICAgIGlmICh0aGlzLnN1bW1hcnkpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ3N1bW1hcnkgdHJ1ZScpO1xuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgfVxuICAgIGlmKHRoaXMuc3VtbWFyeURhdGEpe1xuICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9W107XG4gICAgfVxuIFxuICAgIC8vIFJlYWQgdGhlIHByZXZpb3VzIHF1ZXN0aW9uIGZyb20gREJcbiAgICAvLyBWRCBkaXNhYmxlZFxuICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICB0aGlzLnNwaW5uZXIuc2hvdyh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKSk7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spO1xuICB9XG4gXG4gIGhhbmRsZUJhY2tDbGlja05ldygpIHtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uZWRpdCk7XG4gIH1cbiBcbiAgLy91cGRhdGluZyBzdGF0dXMgb25jZSBRJkEgY29tcGxldGVkLlxuIFxuICBwcml2YXRlIHVwZGF0ZUFuc3dlckJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkFuc3dlckJvb2tcIiwgXCJVcGRhdGVcIiwgdXVpZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmV1cGRhdGVBQlxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdVcGRhdGUnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQihKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgbGV0IHBhcmEgPSB7XG4gICAgICAgIGRhdGFUeXBlOiBcIkFuc3dlckJvb2tcIixcbiAgICAgICAgb3BlcmF0aW9uOiBcIlVwZGF0ZVwiLFxuICAgICAgICBwYXJhbTE6IHV1aWQsXG4gICAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgICAgfVxuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYSldLFxuICAgICAgICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgICk7XG4gICAgfVxuICB9XG4gXG4gIHByaXZhdGUgc3VjY2Vzc3VwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgIGxldCBkYXRhID0gcmVzcG9uc2U7XG4gICAgaWYoZGF0YSl7XG4gICAgICB0aGlzLmhhbmRsZVN1Ym1pdC5lbWl0KGRhdGEpO1xuICAgICAgdGhpcy5hYkl0ZW0uc3RhdHVzID0gXCJDb21wbGV0ZWRcIjtcbiAgICAgIHRoaXMuZGVsZXRlQW5zd2VycyhkYXRhLkFuc3dlckJvb2spXG4gICAgfVxuICB9O1xuIFxuICAvLyBWRCBmb3IgZGVsZXRlIGFuc3dlcnNcbiAgZGVsZXRlQW5zd2VycyhhbnN3ZXJib29rKXtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIil7XG4gICAgICBpZihhbnN3ZXJib29rICYmIGFuc3dlcmJvb2suc3RhdHVzID09ICdDb21wbGV0ZWQnKXtcbiAgICAgICAgY29uc3QgYW5zQm9va0lkID0gYW5zd2VyYm9vay5pZDtcbiAgICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyQm9vaycsJ2RlbGV0ZScsYW5zQm9va0lkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgICAoZGF0YSk9PntcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3NEZWxldGVBQihKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFZEIGZvciBkZWxldGUgYW5zd2Vyc1xuICBwcml2YXRlIHN1Y2Nlc3NEZWxldGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBpZihyZXNwb25zZS5zdGF0dXMgPT0gJ3N1Y2Nlc3MnKXtcbiAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5tZXNzYWdlKTtcbiAgICB9ZWxzZSB7XG4gICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yJywgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgfVxuIH1cblxuIHByaXZhdGUgZmFpbHVyZXVwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdzdGF0dXMgZmFpbGVkJylcbiB9O1xuXG4gcHJpdmF0ZSByZWFkUXVlc3Rpb25Cb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZEJvb2ssXG4gICAgIC8vICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tcbiAgICAgLy8gKTtcbiAgICAgLy90aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgICB0aGlzLnNwaW5uZXIuc2hvdyh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uQm9vaycsJ3JlYWQnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgIC8vIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZSgpO1xuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICB9XG4gICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIE1SIDMwSkFOMjQgLSBQYXNzaW5nIGZsYWcgZnJvbSBOR05YVFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICBsZXQgcGFyYTEgPSB7XG4gICAgICBkYXRhVHlwZTogXCJRdWVzdGlvbkJvb2tcIixcbiAgICAgIG9wZXJhdGlvbjogXCJyZWFkXCIsXG4gICAgICBwYXJhbTE6IHV1aWQsXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuICAgICAvLyAsIEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKVxuLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMSldLFxuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgICk7XG4gICB9XG4gfVxuIHByaXZhdGUgc3VjY2Vzc1JlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZEJvb2snKTtcbiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgIGlmKHJlc3BvbnNlICE9IG51bGwgfHwgcmVzcG9uc2UgIT0gdW5kZWZpbmVkKXtcbiAgICAgdGhpcy5xYkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbmJvb2s7XG4gICAgIHRoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgdGhpcy5oYW5kbGVCb29rLmVtaXQocmVzcG9uc2UpO1xuXG4gICB9XG4gIC8vIGNvbnNvbGUubG9nKCdyZWFkaW5nUXVlc3Rpb24gdXNpbmcgJyArIHRoaXMucWJJdGVtKTtcbiAgIGlmICh0aGlzLmFiSXRlbT8uc3RhdHVzID09IFwiUGVuZGluZ1wiKSB7XG4gICAgIGlmIChcbiAgICAgICB0aGlzLmFiSXRlbS5hbnN3ZXJzID09IG51bGwgfHxcbiAgICAgICB0aGlzLmFiSXRlbS5hbnN3ZXJzLmxlbmd0aCA9PSAwXG4gICAgICkge1xuICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucWJJdGVtLmZpcnN0UXVlc3Rpb24pO1xuICAgICB9IGVsc2Uge1xuICAgICAgIC8vIFBvcHVsYXRlIHRoZSBleGlzdGluZyBhbnN3ZXJzXG4gICAgICAgdmFyIGxhc3RRdWVzdGlvbklkID0gXCJcIjtcblxuICAgICAgIGZvciAodmFyIGFuc09iamVjdCBvZiB0aGlzLmFiSXRlbS5hbnN3ZXJzKSB7XG4gICAgICAgICBsYXN0UXVlc3Rpb25JZCA9IGFuc09iamVjdC5xdWVzSWQ7XG5cbiAgICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKGFuc09iamVjdC5xdWVzSWQpO1xuXG4gICAgICAgICB0aGlzLmFuc3dlck1hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwge1xuICAgICAgICAgICBxdWVzVmFsdWU6IGFuc09iamVjdC5xdWVzVmFsdWUsXG4gICAgICAgICAgIGFuc1ZhbHVlOiBhbnNPYmplY3QuYW5zVmFsdWUsXG4gICAgICAgICAgIHF1ZXNJZDogYW5zT2JqZWN0LnF1ZXNJZCxcbiAgICAgICAgICAgcVR5cDogYW5zT2JqZWN0LnFUeXAsXG4gICAgICAgICAgIGdyb3VwVGV4dDphbnNPYmplY3QuZ3JvdXBUZXh0LFxuICAgICAgICAgfSk7XG5cbiAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKVxuICAgICAgICAgaWYgKGFuc09iamVjdC5xVHlwID09IFwiQm9va1wiKSB7XG4gICAgICAgICAgIHZhciBhdjEgPSBhbnNPYmplY3QuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgIC8vIC8vY29uc29sZS5sb2coXCJib29rIGxvZ1wiKTtcblxuICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImJvb2tpZFwiICsgYXYxWzBdKTtcbiAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwgW1xuICAgICAgICAgICAgIHsgYXR0YWNobWVudE5hbWU6IGF2MVsxXSwgYXR0YWNobWVudElkOiBhdjFbMF0gfSxcbiAgICAgICAgICAgXSk7XG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgfSBlbHNlIGlmIChhbnNPYmplY3QucVR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImluc2lkZSBpZlwiKTtcbiAgICAgICAgICAgdmFyIGF0dExpc3Q7XG4gICAgICAgICAgIHZhciBhdHQ7XG4gICAgICAgICAgIGZvciAodmFyIGF0dFZhciBvZiBhbnNPYmplY3QuYW5zVmFsdWUuc3BsaXQoXCIsXCIpKSB7XG4gICAgICAgICAgICAgdmFyIGF0dElkTmFtZSA9IGF0dFZhci5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICBhdHQuYXR0YWNobWVudE5hbWUgPSBhdHRJZE5hbWVbMV07XG4gICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnRJZCA9IGF0dElkTmFtZVswXTtcbiAgICAgICAgICAgICBhdHRMaXN0LnB1c2goYXR0KTtcbiAgICAgICAgICAgfVxuICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldChhbnNPYmplY3QucXVlc0lkLCBhdHRMaXN0KTtcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XG4gICAgICAgICB9XG4gICAgICAgfVxuXG4gICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5hbnN3ZXJNYXApO1xuICAgICAgIC8vIFJlYWQgdGhlIGxhc3QgYW5zd2VyZWQgcXVlc3Rpb25cbiAgICAgICB0aGlzLnJlYWRRdWVzdGlvbihsYXN0UXVlc3Rpb25JZCk7XG4gICAgIH1cbiAgIH0gZWxzZSBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcIlN1bW1hcnl1cGRhdGVkXCIpO1xuICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXG4gICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XG4gICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xuICAgICBpZih0aGlzLnNlcnYgIT0gJ2FwaScpe1xuICAgICAgLy8gVkQgMzFOT1YyNCB3cmFwcGVyIGNoYW5nZXNcbiAgICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgIGlmIChhbnN3ZXIucVR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgICAgICB2YXIgZmlsZXMgPSBcIlwiO1xuICAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcbiAgICAgICAgICAgdmFyIGZpbGVMaXN0ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgZm9yICh2YXIgZmlsZUlkTmFtZSBvZiBmaWxlTGlzdCkge1xuICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XG4gICAgICAgICAgICAgaWYgKGZJbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVzICsgXCIgLFwiICsgZmlsZU5hbWVbMV07XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgIGZJbmRleCsrO1xuICAgICAgICAgICB9XG5cbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxuICAgICAgICAgICB9O1xuICAgICAgICAgLy8gIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICAvKiAgdmFyIHF1ZXNObz0wO1xuICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnbGluZSAxMjIzJyk7XG4gICAgICAgICAgICAgZm9yICh2YXIgYnFBbnN3ZXJWYWx1ZSBvZiBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLnF1ZXN0aW9uVGV4dC5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gZ3JvdXBUZXh0OmFuc3dlci5xdWVzdGlvblRleHQsXG4gICAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogIFwiJmx0O3AmZ3Q7XCIrIHF1ZXNWYWx1ZVtxdWVzTm9dK1wiJmx0O3AmZ3Q7XCIsXG4gICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBicUFuc3dlclZhbHVlLFxuICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgIHF1ZXNObysrO1xuICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSovXG4gICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgdmFyIGFuc3dlcnZhbHVlcyA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd2YWx1ZScpXG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxuICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VydmFsdWVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXG4gICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2YXIgYW5zMSA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICB9O1xuICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuXG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBmYWlsdXJlUmVhZEJvb2snKTtcbiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiB9O1xuXG4gcHJpdmF0ZSByZWFkQW5zd2VyYm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgIHRoaXMudGtuLFxuICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxuICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXG4gICAgICk7XG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgbGV0IHBhcmEyID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQW5zd2VyQm9va1wiLFxuICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcbiAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4vLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEyKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgKTtcbiAgIH1cbiB9XG5cblxuIHByaXZhdGUgc3VjY2Vzc0Fuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5hbnN3ZXJzKSB7XG4gICAgICAgdmFyIGF2ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgIHZhciBhbnN3ZXJzID0geyBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsIGFuc1ZhbHVlOiBhdiwgZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQgfTtcbiAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgIH1cbiAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUFuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuIH07XG5cbiBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAoZGF0YSk9PntcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgICAgLy8gVkQgZGlzYWJsZWRcbiAgICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgY29uc29sZS5sb2coJ2RhdGEgY2FtZSBzdWNlc3NmdWxseScpO1xuICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgIH1cbiAgICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAvLyAvLyBWRCAxNUZFQjI0IC0gbWFrZSBjcmVhdGVBbnN3ZXJCb29rRmxhZyBmYWxzZSBvbmx5XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYTIgPSB7XG4gICAgICBkYXRhVHlwZTogXCJRdWVzdGlvblwiLFxuICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcbiAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTIpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkLFxuICAgICAgIHRoaXMuZmFpbHVyZVJlYWRcbiAgICAgKTtcbiAgIH1cbiB9XG5cbiBwcml2YXRlIHN1Y2Nlc3NSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAvLyBWRCBkaXNhYmxlZFxuICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkJyk7XG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAvLyBIQSAwMkZFQjI0IEZvciB0ZXN0aW5nIGZvciB1c2VkIHRoaXMgYW5kIGluIGZ1dHVyZSBpdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdpdGggc3RhdGljIGRhdGFcbiAgIC8vIHZhciBhYiA9IFsnZmlyc3QnLCdsYXN0JywnMTIzJywnMTItMTItMjAwMCcsJzIyJywnTWFsZScsJzEyIGNyb3NzIDEnLCdFbUNvbnRhY3QnLCc5ODc2NScsJ0EnLCdTaW5nbGUnXTtcbiAgIC8vIGZvcihjb25zdCBbaW5kZXgsaXRlbV0gb2YgcmVzcG9uc2UucXVlc3Rpb24uc3ViUXVlc3Rpb25zLmVudHJpZXMoKSl7XG4gICAvLyAgIGl0ZW0uaW5wdXQgPSBhYltpbmRleF07XG4gICAvLyB9XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAvLyBSZXNldCB0aGUgVmFyaWFibGVzXG5cbiAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbSkge1xuICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcbiAgICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICAgdGhpcy5yZXNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSk7XG4gICB9XG4gICB0aGlzLnF1ZXN0aW9uSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuXG4gICBpZih0aGlzLnF1ZXN0aW9uSXRlbS50eXBlID09PSAnQWxwaGFudW1lcmljJyl7XG4gICAgIHRoaXMuc3BsQ0NCYWNrQ2xpY2sgPSB0cnVlO1xuICAgfVxuXG4gICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gdGhpcy5xdWVzdGlvbkl0ZW0uaWQ7XG4gICB0aGlzLmhhbmRsZVBhZ2UuZW1pdCh0aGlzLnF1ZXN0aW9uSXRlbS50cmFja2luZ0lkKTtcbiAgIC8vIEhhbmRsZSB0aGUgc3ViUXVlc3Rpb24gb3B0aW9uc1xuICAgaWYgKHJlc3BvbnNlLnNxT3B0aW9ucykge1xuICAgICAvL3ZhciBuZXdSZWNvcmRzID0gW107XG4gICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgLy9jb25zb2xlLmxvZyhxLk5hbWUpO1xuICAgICAgIHZhciBzcSA9IHJlc3BvbnNlLnNxT3B0aW9uc1txLmlkXTtcbiAgICAgICBpZiAoc3EpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZvdW5kIG9wdGlvbnMgZm9yIHN1YnF1ZXN0aW9uICcgKyBxLk5hbWUpO1xuICAgICAgICAgaWYgKCFxLm9wdGlvbnMpIHtcbiAgICAgICAgICAgcS5vcHRpb25zID0gc3Eub3B0aW9ucztcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cbiAgIH1cbiAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICB0aGlzLmlubmVyaHRtbCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5hZGRpdGlvbmFsUmljaENvbnRlbnRcbiAgICk7XG4gICB0aGlzLnRyYWNrSWQoKTtcbiB9O1xuXG4gdHJhY2tJZCgpIHtcbiAgIHZhciBxdHJhY2tJZCA9IHRoaXMucXVlc3Rpb25JdGVtLnRyYWNraW5nSWQ7XG4gICAvL2NvbnNvbGUubG9nKCd0cmFja0lkLXF1ZXN0aW9uJytxdHJhY2tJZCk7XG4gfVxuXG4gcHJpdmF0ZSBmYWlsdXJlUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XG4gICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiB9O1xuXG4gcHJpdmF0ZSBzYXZlQW5zd2VyID0gKCkgPT4ge1xuICAgLy8gU2V0IHRoZSBBbnN3ZXIgTnVtYmVyIGJhc2VkIG9uIHRoZSBRdWVzdGlvbiBTdGFjayBMZW5ndGhcbiAgIGlmICh0aGlzLmlucFZhbHVlICE9IFwiLlwiKSB7XG4gICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSBudWxsO1xuICAgfVxuICAgdGhpcy5hbnN3ZXJXcmFwLmFuc051bWJlciA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggKyAxO1xuXG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgIC8vICAgdGhpcy50a24sXG4gICAgIC8vICAgW1wiQW5zd2VyXCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCldLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc1NhdmUsXG4gICAgIC8vICAgdGhpcy5mYWlsdXJlU2F2ZVxuICAgICAvLyApO1xuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXInLCdjcmVhdGUnLEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICB9XG4gICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgbGV0IHBhcmEzID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQW5zd2VyXCIsXG4gICAgICBvcGVyYXRpb246IFwiY3JlYXRlXCIsXG4gICAgICBwYXJhbTE6IEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCksXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMyldLFxuICAgICAgIHRoaXMuc3VjY2Vzc1NhdmUsXG4gICAgICAgdGhpcy5mYWlsdXJlU2F2ZVxuICAgICApO1xuICAgfVxuIH07XG5cbiBodG1sRGVjb2RlKGlucHV0KSB7XG4gICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhpbnB1dCwgXCJ0ZXh0L2h0bWxcIik7XG4gICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbiB9XG5cbiBwcml2YXRlIHN1Y2Nlc3NTYXZlID0gKHJlc3BvbnNlKSA9PiB7XG4gICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwic3VjY2Vzc1wiKSB7XG4gICAgIC8vdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xuICAgICB0aGlzLmFuc3dlck1hcC5zZXQocmVzcG9uc2UuYW5zd2VyLnF1ZXNJZCwgcmVzcG9uc2UuYW5zd2VyKTtcbiAgIH0gZWxzZSB7XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9IHJlc3BvbnNlLmVycm9yLmVycm9yTXNnO1xuICAgfVxuICAgaWYoIXRoaXMuYmFja0J1dHRvbkZsYWcpe1xuICAgICB0aGlzLm5leHQoKTtcbiAgIH1cbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVTYXZlJyk7XG4gICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiB9O1xuXG4gcHJpdmF0ZSBwcm9jZXNzUXVlc3Rpb24gPSAoKSA9PiB7XG4gICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBwcm9jZXNzUXVlc3Rpb24nKTtcbiAgIC8vIGNvbnNvbGUubG9nKCdzcGxDQ0JhY2tDbGljayA9ICcrdGhpcy5zcGxDQ0JhY2tDbGljayk7XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spO1xuICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICB0aGlzLnBvcCA9IHRydWU7XG5cbiAgIC8vIGlmKCF0aGlzLmJhY2spe1xuICAgLy8gICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpXG4gICAvLyB9XG5cbiAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0JhciA9PT0gdHJ1ZSkge1xuICAgICBpZiAoIXRoaXMuYmFjaykge1xuICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnB1c2godGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSk7XG4gICAgIH1cbiAgICAgdGhpcy5iYWNrID0gZmFsc2U7XG4gICAgIGlmICh0aGlzLnF1ZXN0aW9uTmFtZVswXSA9PT0gdGhpcy5xdWVzdGlvbk5hbWVbMV0pIHtcbiAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgfVxuXG4gICAgIHRoaXMuY3VycmVudE5hbWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lO1xuICAgICB0aGlzLnBhdGhxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25OYW1lLmluZGV4T2YodGhpcy5jdXJyZW50TmFtZSk7XG4gICAgIHRoaXMucG9zc2liaWxpdGllcyA9IHRoaXMucWJJdGVtLnBvc3NpYmlsaXRpZXM7XG4gICB9XG5cbiAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucztcbiAgIHRoaXMuZGF5KCk7XG4gICAvL2NvbnNvbGUubG9nKCdwcm9jZXNzaW5nIHF1ZXN0aW9uICcgKyB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lICsgJyBleGlzdGluZyBhbnN3ZXJzIGFyZSAnICsgdGhpcy5hbnN3ZXJNYXAuc2l6ZSk7IC8vID0+ICcgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uSXRlbSkpO1xuXG4gICAvLyBTZXQgdGhlIEZsYWdzIHRvIHNob3cgcmlnaHQgZmllbGRzXG4gICB0aGlzLnNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSk7XG4gICAvL2NvbnNvbGUubG9nKCdBZnRlciB0aGUgc2V0RmxhZyBtZXRob2QgZHRGbGFnID0gJyt0aGlzLmR0RmxhZyk7XG5cbiAgIC8vIENoZWNrIHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSBhbnN3ZXJNYXBcbiAgIGlmICh0aGlzLmFuc3dlck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgIC8vICAvL2NvbnNvbGUubG9nKFwiZXhpc3RpbmcgYW5zd2VyIGZvdW5kIGZvciB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lXCIpO1xuICAgICB2YXIgZUFuc3dlciA9IHRoaXMuYW5zd2VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIC8vIEdldCB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gdGhlIE1hcFxuICAgICB0aGlzLmlucFZhbHVlID0gZUFuc3dlci5hbnNWYWx1ZTtcbiAgICAgLy9jb25zb2xlLmxvZygnaW5wVmFsdWUgaGFzIGJlZW4gc2V0IHRvICcgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgIHRoaXMuYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgIH0gZWxzZSB7XG4gICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSByZW1vdmluZyBhdHRhY2htZW50IGFycmF5Jyk7XG4gICAgIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcbiAgIH1cbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpO1xuICAgaWYodGhpcy5zcGxDQ0JhY2tDbGljayAmJiB0aGlzLmlucFZhbHVlICYmIHRoaXMuaW5wVmFsdWUuaW5jbHVkZXMoJ0VTJykpe1xuICAgICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBpZiBjb25kJyk7XG4gICAgIHRoaXMuc3BsQ0NCYWNrQ2xpY2sgPSBmYWxzZTtcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZSgnRVMnLCcnKTtcbiAgIH1cblxuICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XG4gICAgIC8vIFNldCB0aGUgT3B0aW9ucyBmb3IgQ2hlY2tib3hcbiAgICAgdGhpcy5zZXRPcHRpb25zKHRoaXMucXVlc3Rpb25JdGVtLm9wdGlvbnMpO1xuICAgfSBlbHNlIGlmICh0aGlzLmJvb2tGbGFnKSB7XG4gICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSBleHBlY3RlZCBib29rRmxhZyBjb25kJyk7XG4gICAgIC8vY29uc29sZS5sb2coJ2R0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuLy8gIEhBIDIwRkVCMjQgTGFiZWwgRml4XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgIGVsZW1lbnQucXVlc3Rpb25UZXh0ID0gZWxlbWVudC5xdWVzdGlvblRleHQucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7XG4gICAgIH0pO1xuICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpO1xuICAgfSBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XG4gICAgIC8vIFNldCB0aGUgTG9jYWxTdWJRdWVzdGlvbnNcbiAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBsaXN0IGZsYWcnKTtcbiAgICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFiSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgIGlmKCF0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKXtcbiAgICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpO1xuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuZHRGbGFnKSB7XG4gICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSB1bmV4cGVjdGVkIGR0RmxhZyBjb25kJyk7XG4gICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gXCJcIjtcbiAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IFwiXCI7XG4gICAgIHRoaXMuc2VsRGF0ZSA9IFwiXCI7XG4gICAgIC8vIDIwMjEtNS0xNlQwMDowMFxuICAgICBpZiAodGhpcy5kYXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLnNlbERhdGUgPSB0aGlzLmRhdGVNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5zZWxlY3RlZGhvdXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5zZWxlY3RlZGhvdXJNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcbiAgICAgICB0aGlzLmhvdXJzLnB1c2goXG4gICAgICAgICBcIjEzXCIsXG4gICAgICAgICBcIjE0XCIsXG4gICAgICAgICBcIjE1XCIsXG4gICAgICAgICBcIjE2XCIsXG4gICAgICAgICBcIjE3XCIsXG4gICAgICAgICBcIjE4XCIsXG4gICAgICAgICBcIjE5XCIsXG4gICAgICAgICBcIjIwXCIsXG4gICAgICAgICBcIjIxXCIsXG4gICAgICAgICBcIjIyXCIsXG4gICAgICAgICBcIjIzXCIsXG4gICAgICAgICBcIjAwXCJcbiAgICAgICApO1xuICAgICB9XG4gICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICB0aGlzLmhvdXJzID0gdGhpcy5ob3Vycy5zbGljZSgwLCAxMik7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuZHRGbGFnICYmIHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICB2YXIgZHRWYWwgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiVFwiKTtcbiAgICAgICB2YXIgZHR2YWwwID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSA9IGR0VmFsWzBdO1xuICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdHZhbDBbMF07XG5cbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0VmFsWzFdO1xuICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gZHR2YWwwWzFdO1xuICAgICB9XG4gICAgIGlmIChcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVCYWNrd2FyZCB8fFxuICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlzRGF0ZUZvcndhcmRcbiAgICAgKSB7XG4gICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmlzRGF0ZUJhY2t3YXJkID09PSB0cnVlKSB7XG4gICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xuICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcbiAgICAgICAgIH07XG4gICAgICAgfVxuICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVGb3J3YXJkID09PSB0cnVlKSB7XG4gICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xuICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxuICAgICAgICAgfTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xuICAgICB0aGlzLmZpbGVVSSgpO1xuICAgICAvLyBsb2dpY1xuICAgICB0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uID1cbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uYWxsb3dlZEZpbGVFeHRlbnNpb25zPy5zcGxpdChcIjtcIik7XG4gICAgIC8vY29uc29sZS5sb2codGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbik7XG4gICB9XG5cbiAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0JhciA9PT0gdHJ1ZSkge1xuICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG4gICB9XG4gfTtcblxuIHNldEZsYWcodHlwKSB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgc2V0RmxhZyBmb3IgJyArIHR5cCk7XG5cbiAgIGlmICh0eXApIHtcbiAgICAgLy8gU2V0IHRoZSBGbGFnc1xuICAgICBpZiAodHlwID09IFwiVGV4dFwiKSB7XG4gICAgICAgdGhpcy50ZXh0RmxhZyA9IHRydWU7XG5cbiAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiTnVtYmVyXCIpIHtcbiAgICAgICB0aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhTnVtZXJpY1wiKSB7XG4gICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gdHJ1ZTtcbiAgICAgICAvKmlmKHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKXtcbiAgICAgICAgIHRoaXMuaW5wVmFsdWU9J0VTJ1xuICAgICAgIH0qL1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICB0aGlzLmVtYWlsRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgdGhpcy5maWxlRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xuICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gdHJ1ZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUZXh0QXJlYVwiKSB7XG4gICAgICAgdGhpcy50YUZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICB0aGlzLnJhZGlvRmxhZyA9IHRydWU7XG4gICAgICB9IFxuICAgIC8vICAgZWxzZSBpZiAodHlwID09IFwiUmljaFRleHRBcmVhXCIpIHtcbiAgICAvLyAgICAgdGhpcy5ydGFGbGFnID0gdHJ1ZTtcbiAgICAvLyAgfSBcbiAgICAgZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xuICAgICAgIHRoaXMuZHJvcGRvd25GbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJDaGVja2JveFwiKSB7XG4gICAgICAgdGhpcy5jaGVja2JveEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgIHRoaXMuYm9va0ZsYWcgPSB0cnVlO1xuICAgICB9ZWxzZSBpZiAodHlwID09ICdMaXN0Jyl7XG4gICAgICAgdGhpcy5saXN0RmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBUaW1lIGNvbmQnKTtcbiAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmR0RmxhZyk7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBEYXRlIGNvbmQnKTtcbiAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmR0RmxhZyk7XG4gICAgIH1cbiAgIH1cbiB9XG5cbiByZXNldEZsYWcodHlwKSB7XG4gICBpZiAodHlwKSB7XG4gICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgIHRoaXMudGV4dEZsYWcgPSBmYWxzZTtcbiAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgdGhpcy5udW1iZXJGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFudW1lcmljXCIpIHtcbiAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgdGhpcy5lbWFpbEZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICB0aGlzLmZpbGVGbGFnID0gZmFsc2U7XG4gICAgICB9IFxuICAgIC8vICAgZWxzZSBpZiAodHlwID09IFwiUmljaFRleHRBcmVhXCIpIHtcbiAgICAvLyAgICAgdGhpcy5ydGFGbGFnID0gZmFsc2U7XG4gICAgLy8gIH0gXG4gICAgIGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgIHRoaXMudGFGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiUmFkaW9cIikge1xuICAgICAgIHRoaXMucmFkaW9GbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xuICAgICAgIHRoaXMuZHJvcGRvd25GbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQm9va1wiKSB7XG4gICAgICAgdGhpcy5ib29rRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgIHRoaXMubGlzdEZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUaW1lXCIpIHtcbiAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgIHRoaXMudGltZUZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlXCIpIHtcbiAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSBmYWxzZTtcbiAgICAgfVxuICAgfVxuIH1cblxuIHNldE9wdGlvbnMocmVjb3Jkcykge1xuICAgZm9yICh2YXIgb3B0IG9mIHJlY29yZHMpIHtcbiAgICAgdmFyIG92ID0gbmV3IE9wdGlvblZhbHVlKCk7XG4gICAgIG92LmlkID0gb3B0LmlkO1xuICAgICBvdi5OYW1lID0gb3B0Lk5hbWU7XG4gICAgIG92LnZhbHVlID0gb3B0LnZhbHVlO1xuICAgICBvdi5uZXh0UXVlc3Rpb24gPSBvcHQubmV4dFF1ZXN0aW9uO1xuICAgICBvdi5jaGVja2VkID0gZmFsc2U7XG5cbiAgICAgaWYgKFxuICAgICAgIHRoaXMuaW5wVmFsdWUgJiZcbiAgICAgICB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpLmluY2x1ZGVzKG9wdC52YWx1ZSlcbiAgICAgKSB7XG4gICAgICAgb3YuY2hlY2tlZCA9IHRydWU7XG4gICAgIH1cblxuICAgICB0aGlzLm9wdGlvblZhbHVlcy5wdXNoKG92KTtcbiAgIH1cbiB9XG5cbiAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XG4gY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xuICAgY29uc29sZS5sb2coJ2luc2lkZSBjaGlsZEV2ZW50Q2FwdHVyZSAnKTtcbiAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAvLyBIQSAzMS1KQU4tMjQgQXNzaWduIHZhbHVlcyB0byBkcm9wZG93biBxdWVzdGlvblxuICAgcXVlcy5pbnB1dCA9IGV2ZW50Py52YWx1ZU9iajtcbiAgIC8vcXVlcy5pbnB1dCA9IGV2ZW50OyAvLyBoZXJlIHdoZW4gdXNpbmcgdGhlIG5nLXNlbGVjdCBnb3QgZXZlbnQgYXMgdmFsdWVcbiB9XG5cbi8vICBSUyAwNkpBTjI1XG4vLyBmb3IgcmljaHRleHRcbiBoYW5kbGVSaWNoVGV4dENoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gIC8vIHRoaXMuaW5wVmFsdWUgPSB2YWx1ZTtcbiAgLy8gdGhpcy5jbGVhckVycm9yKCk7IFxuICAgIGNvbnNvbGUubG9nKCdSaWNoIFRleHQgQ2hhbmdlIENhcHR1cmVkOicsIHZhbHVlKTtcbn1cblxuIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHNldFN1YlF1ZXN0aW9ucycpO1xuICAgLy8gY29uc29sZS5sb2cocmVjb3Jkcyk7XG4gICB2YXIgcWFNYXAgPSBuZXcgTWFwKCk7XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgIHZhciBhSW5kZXggPSAwO1xuICAgICAvLyBzZWFyY2ggY2hhbmdlZCBhcyBzZW1pIGNvbG9uIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYVxuICAgICBpZiAoKHRoaXMuaW5wVmFsdWUuc2VhcmNoKFwiOyBcIikgPT0gLTEpKSB7XG4gICAgICAvLyBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gdGhpcy5pbnBWYWx1ZS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nXG4gICAgICAvLyB0aGlzLmlucFZhbHVlID0gd2l0aG91dEFuc3dlclN0cmluZztcbiAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArICdAQCMjJCQnIDtcbiAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKSkge1xuICAgICAgICAgYUluZGV4Kys7XG4gICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgZm9yICcgKyBhSW5kZXggKyAnIHdpdGggJyArIGFuc1N0cik7XG4gICAgICAgfVxuICAgICB9IGVsc2Uge1xuICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiOyBcIikpIHtcbiAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwICcgKyBhSW5kZXggKyAnIHdpdGggJyArIGFuc1N0cik7XG4gICAgICAgfVxuICAgICB9XG4gICB9XG4gICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgc2V0dGluZyB2YWx1ZXMgZnJvbSBpbnB2YWx1ZSBxYSBtYXAgYXJlJyk7XG4gICAvLyBjb25zb2xlLmxvZyhxYU1hcCk7XG5cbiAgIGZvciAodmFyIHF1ZXMgb2YgcmVjb3Jkcykge1xuICAgICBpZiAocXVlcy50eXBlID09IFwiRmlsZVwiKSB7XG4gICAgICAgdGhpcy52YWx1ZU5hbWUxID0gcXVlcy5hbGxvd2VkRmlsZUV4dGVuc2lvbnM7XG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnZhbHVlTmFtZTEpO1xuICAgICB9XG5cbiAgICAgdmFyIGFucyA9ICcnO1xuICAgICBpZiAocWFNYXAuaGFzKHF1ZXMucXVlc3Rpb25OdW1iZXIpKSB7XG4gICAgICAgICBxdWVzLmlucHV0ID0gcWFNYXAuZ2V0KHF1ZXMucXVlc3Rpb25OdW1iZXIpO1xuICAgICAgICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIGZldGNoaW5nIG1hcCB2YWx1ZXMnKTtcbiAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgaWYocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSA+IDApe1xuICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYW5zd2VyIHN1cHBvc2VkIHRvIGJlIHRyaW1tZWQnKTtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICAgIGFucyA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykrNixxdWVzLmlucHV0Lmxlbmd0aCk7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFucyk7XG4gICAgICAgICAgIHF1ZXMuaW5wdXQgPSBxdWVzLmlucHV0LnN1YnN0cmluZygwLHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykpO1xuICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgIH1cbiAgICAgICB9XG5cbiAgICAgaWYgKChxdWVzLnR5cGUgPT09IFwiRGF0ZVwiKSAmJiAocXVlcy5pc0RhdGVCYWNrd2FyZCB8fCBxdWVzLmlzRGF0ZUZvcndhcmQpKSB7XG4gICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIGJhY2t3YXJkL2ZvcndhcmQgY29uZCcpO1xuICAgICAgIGlmIChxdWVzLmlzRGF0ZUJhY2t3YXJkID09PSB0cnVlKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlzRGF0ZUJhY2t3YXJkJyk7XG4gICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xuICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcbiAgICAgICAgIH07XG4gICAgICAgfVxuICAgICAgIGlmIChxdWVzLmlzRGF0ZUZvcndhcmQgPT09IHRydWUpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaXNEYXRlRm9yd2FyZCcpO1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgIH07XG4gICAgICAgfVxuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5teURhdGVQaWNrZXJPcHRpb25zKTtcbiAgICAgfVxuXG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocXVlcyk7XG4gICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspe1xuICAgICAgIC8vIHRvIHNob3cvaGlkZSB0aGUgZGVwZW5kZW50IGRyb3Bkb3duIG9ubHkgZmllbGQgdXNpbmcgdGhlIGRyb3BEb3duT25seSBib29sZWFuXG4gICAgICAgaWYodGhpcy5zdWJRdWVzdGlvbnNbaV0uc2l6ZSA9PSA0KXtcbiAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IHRydWU7XG4gICAgICAgfWVsc2V7XG4gICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSBmYWxzZTtcbiAgICAgICB9XG4gICAgIH1cbiAgICAgaWYoYW5zICE9ICcnKXtcbiAgICAgICBmb3IodmFyIGFuIG9mIChhbnMuc3BsaXQoJyQkQEAjIycpKSl7XG4gICAgICAgICB2YXIgc1EgPSBuZXcgUXVlc3Rpb24oKTtcbiAgICAgICAgIE9iamVjdC5hc3NpZ24oc1EscXVlcyk7XG4gICAgICAgICBzUS5pbnB1dCA9IGFuO1xuICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChzUSk7XG4gICAgICAgfVxuICAgICB9XG4gICB9XG4gICBpZiAodGhpcy52YWx1ZU5hbWUxICE9IG51bGwgJiYgdGhpcy52YWx1ZU5hbWUxLmxlbmd0aCA+IDApIHtcbiAgICAgdGhpcy5ib29rRmxhZ0FjY2VwdCA9IHRoaXMudmFsdWVOYW1lMS5zcGxpdChcIjtcIik7XG4gICAgIC8vY29uc29sZS5sb2codGhpcy5zdWJRdWVzdGlvbnMpO1xuICAgfVxuICAgdGhpcy5zdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uKG51bGwpO1xuICAgLy8gSEEgMDJGRUIyNCBPbiBFZGl0IHRvIGRpc3BsYXkgdGhlIHZhbHVlIHVzaWluZyB0aGlzXG4gICBpZih0aGlzLmFsbElucHV0VmFsdWVzLmxlbmd0aCA+IDApe1xuICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgIGZvcihsZXQgc2luZ2xlSW5wdXQgb2YgdGhpcy5hbGxJbnB1dFZhbHVlcyl7XG4gICAgICAgICBpZihlbGVtZW50LmlkID09IHNpbmdsZUlucHV0LmlkKXtcbiAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9IHNpbmdsZUlucHV0LmlucHV0O1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfSk7XG4gICB9XG4gfVxuXG4gb3B0aW9uQ2hhbmdlKHNlbFZhbHVlKSB7XG4gICBsZXQgcmFkaW9UcmFja2luZ0lkOiBzdHJpbmcgPSBcIlwiO1xuICAgZm9yICh2YXIgb3B0IG9mIHRoaXMucXVlc3Rpb25JdGVtLm9wdGlvbnMpIHtcbiAgICAgLy9jb25zb2xlLmxvZygnb3B0aW9uQ2hhbmdlIFRyYWNraW5nSWQnK29wdC50cmFja2luZ0lkKTtcbiAgICAgaWYgKG9wdC52YWx1ZSA9PSBzZWxWYWx1ZSkge1xuICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBpZicrb3B0LnRyYWNraW5nSWQpXG4gICAgICAgcmFkaW9UcmFja2luZ0lkID0gb3B0LnRyYWNraW5nSWQ7XG4gICAgIH1cbiAgIH1cblxuICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHJhZGlvVHJhY2tpbmdJZCk7XG4gICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgIC8vIC8vY29uc29sZS5sb2coJ2luc2lkZSBvcHRpb25DaGFuZ2UgdXNpbmcgJyArIHNlbFZhbHVlKTtcblxuICAgdGhpcy5pbnBWYWx1ZSA9IHNlbFZhbHVlO1xuIH1cblxuIGNsZWFyRXJyb3IoKSB7XG4gICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IpIHtcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBudWxsO1xuICAgfVxuIH1cblxuIGNsZWFyTG9jYWxTdWJRdWVzRXJyb3IocXVlc0lkKSB7XG4gICBxdWVzSWQuZXJyb3IgPSBudWxsO1xuIH1cblxuIGlucHV0VmFsaWRhdGUoZSkge1xuICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcbiAgIC8vIE9ubHkgQVNDSUkgY2hhcmFjdGVyIGluIHRoYXQgcmFuZ2UgYWxsb3dlZFxuICAgdmFyIEFTQ0lJQ29kZSA9IChlLndoaWNoKSA/IGUud2hpY2ggOiBlLmtleUNvZGU7XG4gICBpZiAoQVNDSUlDb2RlID4gMzEgJiYgKEFTQ0lJQ29kZSA8IDQ4IHx8IEFTQ0lJQ29kZSA+IDU3KSl7XG4gICAgIHJldHVybiBmYWxzZTtcbiAgIH1lbHNle1xuICAgICByZXR1cm4gdHJ1ZTtcbiAgIH1cbiB9XG5cbiBDQ09uQ2hhbmdlKGlucFZhbHVlOiBzdHJpbmcpIHtcblxuICAgICBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDIpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSA3KSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTIpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAxNykge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDIyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuXG4gfVxuXG4gaXNOb3RWYWxpZEFjY051bWJlcihzOiBzdHJpbmcpIHtcbiAgIHMgPSBzLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG4gICBzID0gJ0VTJyArIHM7XG4gICB2YXIgaXNOb3RWYWxpZFN0ciA9IGZhbHNlO1xuICAgaWYgKHMubGVuZ3RoID09IDI0KSB7XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgIGlmIChpIDw9IDEgJiYgL1thLXpBLVpdLy50ZXN0KHMuY2hhckF0KGkpKSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZhbGlkIGNoYXI6IFwiICsgcy5jaGFyQXQoaSkpO1xuICAgICAgIH0gZWxzZSBpZiAoaSA+IDEgJiYgL1swLTldLy50ZXN0KHMuY2hhckF0KGkpKSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZhbGlkIG51bWVyaWM6IFwiICsgcy5jaGFyQXQoaSkpO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICBpc05vdFZhbGlkU3RyID0gdHJ1ZTtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJOb3QgYSB2YWxpZCBjaGFyXCIpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfSBlbHNlIHtcbiAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgIC8vY29uc29sZS5sb2coXCJOb3QgYSB2YWxpZCBhY2MgbnVtYmVyXCIpO1xuICAgfVxuICAgcmV0dXJuIGlzTm90VmFsaWRTdHI7XG4gfVxuXG4gY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xuICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCA9PSBxdWVzSWQpO1xuICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XG4gICAgIHNxLmVycm9yID0gbnVsbDtcbiAgIH1cbiB9XG5cbiB1cGxvYWRGaWxlKGV2ZW50LHF1ZXM/OmFueSkge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHVwbG9hZCcpO1xuICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICB0aGlzLmZpbGVUeXBlSW5jb3JyZWN0ID0gZmFsc2U7XG4gICB2YXIgbG9jYWwgPSB0aGlzO1xuICAgbG9jYWwuYXR0YWNobWVudCA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcbiAgIC8vIFZhbGlkYXRlIHRoZSBmaWxlIGV4dGVuc2lvblxuICAgLy9jb25zb2xlLmxvZyhsb2NhbC5hdHRhY2htZW50KTtcbiAgIGxldCBmaWxlTmFtZVdpdGhUeXBlOiBzdHJpbmcgPVxuICAgICBsb2NhbC5hdHRhY2htZW50ICYmIGxvY2FsLmF0dGFjaG1lbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgaWYgKFxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGdcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIucG5nXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBkZlwiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGVnXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWNcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpZlwiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEdcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuUE5HXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBERlwiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEVHXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUNcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJRlwiKVxuICAgKSB7XG4gICAgIGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0ID0gdHJ1ZTtcbiAgIH1cbiAgIC8vIFJldHVybiB3aGVuIHRoZSBmaWxlIHR5cGUgaXMgaW5jb3JyZWN0XG4gICBpZiAobG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QpIHtcbiAgICAgcmV0dXJuO1xuICAgfVxuICAgbGV0IGZpbGVDb250ZW50OiBhbnk7XG4gICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgZmlsZUNvbnRlbnQgPSByZWFkZXIucmVzdWx0O1xuICAgICBsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCA9IGxvY2FsLmF0dGFjaG1lbnQuc2l6ZSA+IDMyNDI4ODA7IC8vVmFsaWRhdGluZyBmaWxlIHNpemVcbiAgICAgLy8gVXBsb2FkIHRoZSBmaWxlIHRvIFNhbGVzZm9yY2Ugd2hlbiB0aGUgbGltaXQgaXMgd2l0aGluIHJhbmdlXG4gICAgIGlmICghbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQpIHtcbiAgICAgICBsZXQgZmlsZVdyYXBwZXIgPSBuZXcgQXR0YWNobWVudFdyYXBwZXIoKTtcbiAgICAgICBmaWxlV3JhcHBlci5wYXJlbnRJZCA9IGxvY2FsLmFiSXRlbS5pZDtcbiAgICAgICBmaWxlV3JhcHBlci5maWxlTmFtZSA9IGxvY2FsLmF0dGFjaG1lbnQubmFtZTtcbiAgICAgICBmaWxlV3JhcHBlci5maWxlQ29udGVudCA9IGZpbGVDb250ZW50O1xuICAgICAgIGxvY2FsLmNyZWF0ZUF0dGFjaG1lbnQoZmlsZVdyYXBwZXIpO1xuICAgICAgIHF1ZXMuaW5wdXQgPSBmaWxlV3JhcHBlci5maWxlTmFtZTtcbiAgICAgfVxuICAgfTtcbiAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZXZlbnQudGFyZ2V0LmZpbGVzWzBdKTtcbiB9XG5cbiBwcml2YXRlIHN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICBsZXQgY3JlYXRlZEF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudChcbiAgICAgcmVzcG9uc2UuYXR0YWNobWVudElkLFxuICAgICByZXNwb25zZS5hdHRhY2htZW50TmFtZSxcbiAgICAgdGhpcy5hdHRhY2htZW50Lmxhc3RNb2RpZmllZERhdGVcbiAgICk7XG4gICB0aGlzLmF0dGFjaG1lbnRzLnB1c2goY3JlYXRlZEF0dGFjaG1lbnQpO1xuICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIHRoaXMuYXR0YWNobWVudHMpO1xuICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gfTtcblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XG4gICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgIH1cbiAgIH1cbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlJyk7XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZScpO1xuIH07XG5cbiBoYW5kbGVTdWJtaXRDbGljaygpIHtcbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5zdWJtaXRUcmFja2luZ0lkKTtcbiAgIHRoaXMudXBkYXRlQW5zd2VyQm9vayh0aGlzLmFiSXRlbS5pZCk7XG4gfVxuXG4gaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uY2FuY2VsVHJhY2tpbmdJZCk7XG4gfVxuXG4gcHJpdmF0ZSBjcmVhdGVBdHRhY2htZW50ID0gKGZpbGVXcmFwcGVyOiBhbnkpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKV0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgIC8vICk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdjcmVhdGUnLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlKGVycm9yKTtcbiAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgIH1cbiAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgbGV0IHBhcmEzID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQXR0YWNobWVudFwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEzKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICk7XG4gICB9XG4gfVxuXG4gZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZykge1xuICAgdGhpcy5hdHRhY2htZW50SWQgPSBhdHRhY2htZW50SWQ7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJkZWxldGVBdHRhY2htZW50XCIpO1xuICAgdGhpcy5kZWxldGVTRkF0dGFjaG1lbnQoYXR0YWNobWVudElkKTtcbiB9XG5cbiBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2RlbGV0ZScsZmlsZUlkICxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgKGRhdGEpPT57XG4gICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGUoZXJyb3IpO1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhNCA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkF0dGFjaG1lbnRcIixcbiAgICAgIG9wZXJhdGlvbjogXCJkZWxldGVcIixcbiAgICAgIHBhcmFtMTogZmlsZUlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtmaWxlSWQsSlNPTi5zdHJpbmdpZnkocGFyYTQpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgKTtcbiAgIH1cbiB9XG5cbiBnZXRGaWxlTmFtZShmaWxlTmFtZXdpdGhJZGFuZFR5cGUpIHtcbiAgIC8vdHJ1bmNhdGUgZmlsZSBwYXRoXG4gICB2YXIgZmlsZU5hbWVXaXRoVHlwZSA9IGZpbGVOYW1ld2l0aElkYW5kVHlwZS5zdWJzdHIoXG4gICAgIGZpbGVOYW1ld2l0aElkYW5kVHlwZS5pbmRleE9mKFwiOjo6OlwiKSArIDRcbiAgICk7XG4gICByZXR1cm4gZmlsZU5hbWVXaXRoVHlwZTsgLy9maWxlTmFtZVdpdGhUeXBlLnJlcGxhY2UoL14oLiooXFwvfFxcXFwpKSguKykkLywgJyQzJyk7XG4gfVxuIGZpbGVVSSgpIHtcbiAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgfVxuIH1cblxuIC8vVXBkYXRlIGZ1bmN0aW9uIGZvciBjYXRlZ29yaXphdGlvblxuIC8vIHN0ZXBwZXJDYXRlZygpIHtcbiAvLyAgIHRoaXMuZmlyc3RGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gLy8gICAgIGZpcnN0Q3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG4gLy8gICB0aGlzLnNlY29uZEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAvLyAgICAgc2Vjb25kQ3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG5cbiAvLyB9XG5cbiAvLyBVcGRhdGUgRnVuY3Rpb24gZm9yIHRoZSBQcm9ncmVzcyBCYXJcbiB1cGRhdGVQcm9ncmVzcygpIHtcbiAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0JhciA9PT0gdHJ1ZSkge1xuICAgICBsZXQgaiA9IFtdO1xuICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XG4gICAgICAgdmFyIHBhdGhwb3NzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbaV0ucXVlc3Rpb25zKTtcbiAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XG4gICAgICAgICBqLnB1c2goaSk7XG4gICAgICAgICB0aGlzLmNoZWNrID0gdHJ1ZTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICB0aGlzLmNvdW50ID0galswXTtcbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPiAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICpcbiAgICAgICAgICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC9cbiAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9XG4gICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcbiAgIH1cbiB9XG5cbiB0b3duTmFtZShhcmVhKSB7XG4gICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBhcmVhLnRvd247XG4gICAvL2NvbnNvbGUubG9nKCd0aGlzIHZhbHVlPScrdGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiB9XG5cbiBnZXRUb3duTG9jYWwoKSB7XG4gICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcykge1xuICAgICAgIGlmIChcbiAgICAgICAgIHZhbC50b3duLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICApIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuIH1cblxuIGNsZWFyTGlzdCgpIHtcbiAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgfSwgNTAwKTtcbiB9XG5cbiBzZXRTZWFyY2hMaXN0V2lkdGgoKSB7XG4gICAvL3RvIHJlc2l6ZSBzZWFyY2ggbGlzdCBiYXNlZCBvbiB0aGUgc2NyZWVuIHNpemVcbiAgIGNvbnN0IHNlYXJjaEJveFdpZHRoID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXV0b2NvbXBsZXRlLWlucHV0XCIpLm9mZnNldFdpZHRoO1xuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLndpZHRoID0gc2VhcmNoQm94V2lkdGggKyBcInB4XCI7XG4gfVxuXG4gICBnZXRDb2RlKCl7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMuYWxsQWRkcmVzcykge1xuICAgICAgICAgaWYgKHZhbC56aXBDb2RlLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGgpID09IHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKSB7XG4gICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cbiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gICB9XG4gICBnZXRQb3N0YWxjb2RlKHZhbHVlKXtcbiAgICB0aGlzLnBsYWNlcz1bXTtcbiAgICB0aGlzLnByb3ZpbmNlPVtdO1xuICAgICB2YXIgcHJvdmluY2U7XG4gICAgIHZhciB0b3duO1xuICAgICB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9IHZhbHVlLnppcENvZGU7XG4gICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlLmNvdW50cnk7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzPVtdO1xuXG5cbiAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xuICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XG4gICAgICAgICB0aGlzLnBsYWNlcy5wdXNoKHZhbCk7XG4gICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xuICAgICAgICAgcHJvdmluY2UgPSB2YWwucHJvdmluY2VcbiAgICAgICAgIHRvd24gPSB2YWwudG93bjtcbiAgICAgICB9XG4gICAgIH1cbiAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xuXG4gICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlID1wcm92aW5jZTtcbiAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9IHRvd247XG4gICAgIH1lbHNlIGlmKHRoaXMucGxhY2VzLmxlbmd0aCA+MSB8fCB0aGlzLnBsYWNlcy5sZW5ndGggPT0wKXtcblxuICAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPScnO1xuICAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlPScnO1xuICAgICB9XG4gICB9XG4gICBjbG9zZURyb3Bkb3duKCkge1xuICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPT0gNSl7XG4gICAgICAgdGhpcy5nZXRQb3N0YWxjb2RlKHt6aXBDb2RlOnRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlfSk7XG4gICAgIH1cblxuICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0TGlzdCcpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIC8vUGx1cyBidXR0b24gaW1wbGVtZW50YXRpb24uXG4gIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24ocXVlczogTG9jYWxRdWVzdGlvbil7XG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24nKTtcbiAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDsgaSsrKXtcbiAgICAgICB2YXIgbG9jYWxTdWJRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlkID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaWQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5hbWUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OYW1lO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvbiA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvblRleHQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvblRleHQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnR5cGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS50eXBlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi50aXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5zdWJUaXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnN1YlRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pc09wdGlvbmFsID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaXNPcHRpb25hbDtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uZXJyb3JNZXNzYWdlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uZXJyb3JNZXNzYWdlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5uZXh0UXVlc3Rpb24gPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5uZXh0UXVlc3Rpb247XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmdyb3VwTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmdyb3VwTmFtZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvbk51bWJlcjtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uYWxsb3dlZEZpbGVFeHRlbnNpb25zID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pZCArIGk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlucHV0ID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaW5wdXQ7XG4gICAgICAgICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zLnB1c2gobG9jYWxTdWJRdWVzdGlvbik7XG4gICAgIH1cbiAvLyBjb25zb2xlLmxvZygnZmluYWwgbG9jYWwgc3ViIHF1ZXN0aW9ucycpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyA9IFtdO1xuIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBrZXkgbG9jYWxTdWJRTWFwIG1hcCcpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiB9XG5cbiBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XG4gICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb24pO1xuICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xuICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcoaW5kZXgrMSkpO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICB9ZWxzZXtcbiAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgIH1cbiAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcblxuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgLy9jb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gfVxuXG4gcmVtb3ZlQWRkcmVzcyhxdWVzVW5pcXVlSWQ6IHN0cmluZywgcU5hbWU6IHN0cmluZykge1xuICAgLy9jb25zb2xlLmxvZyhxdWVzVW5pcXVlSWQpXG4gICB2YXIgdmFsID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgIHZhciBrZXlpbmRleCA9IDA7XG5cbiAgIGZvcihsZXQgaT0wOyBpPHZhbC5sZW5ndGg7IGkrKyl7XG4gICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcbiAgICAgICBrZXlpbmRleCsrO1xuICAgICB9XG4gICB9XG5cbiAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkgJiYga2V5aW5kZXggPjEpe1xuICAgICB2YXIgcmVvcmRlciA9IHZhbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udW5pcXVlU3ViUUlkICE9PSBxdWVzVW5pcXVlSWQpXG4gICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxyZW9yZGVyKTtcbiAgICAga2V5aW5kZXgtLTtcbiAgIH1cbiB9XG5cbiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcbiAgIHJldHVybiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQoaWQpO1xuIH1cblxuIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXG5BZGQocXVlc3Rpb246IExvY2FsUXVlc3Rpb24pe1xuICAgdGhpcy5hZGRGbGFnID0gIGZhbHNlO1xuICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgdmFyIGluZGV4ICA9IGFycmEubGVuZ3RoO1xuICAgdmFyIGEgPSBhcnJhLnNsaWNlKC0xKS5wb3AoKTtcbiAgIHRoaXMuaW5kZXhDb3VudCAgPSBhLnF1ZXN0aW9uTnVtYmVyO1xuXG4gICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5kZXhDb3VudCA7IGkrKykge1xuICAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb25baV0pO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgIGFycmEuc3BsaWNlKGluZGV4Kyh0aGlzLmluZGV4Q291bnQtMSksIDAsIHF1ZXMpO1xuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgfVxuICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcbiB9XG5cbiBoYW5kbGVMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkscXVlczphbnkpIHtcbiAgIHF1ZXMuaW5wdXQgPSBsb2NhdGlvbjtcbiB9XG5cbiBzZWxlY3RlZElucHV0KGlucHV0OmFueSAscXVlczphbnkpe1xuICAgcXVlcy5pbnB1dCA9IGlucHV0O1xuIH1cblxuIGhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UodmFsdWUgOnN0cmluZyl7XG4gICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xuIH1cbiBnZXREYXRhKGRhdGE6YW55KXtcbiAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xuIH1cblxuIGRlcGVuZGVudENoYW5nZSh2YWx1ZTphbnkpe1xuIHRoaXMubmV4dFZhbHVlID0gdmFsdWU7XG4gfVxuXG4gZGlzcGxheURhdGUoZGF0ZVNlbGVjdGVkOiBhbnkscXVlczphbnkpe1xuICAgLy8gUGFyc2UgdGhlIGRhdGUgc3RyaW5nIHVzaW5nIG1vbWVudCBhbmQgYXNzaWduIGl0IHRvIHRoaXMuc2VsZWN0ZWREYXRlXG4gICBxdWVzLmlucHV0ID0gbW9tZW50KGRhdGVTZWxlY3RlZC52YWx1ZSAsICdZWVlZLU1NLUREIEhIOm1tOnNzJykuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJykudG9TdHJpbmcoKTtcbiB9XG5cbiBnZXRLZXkoaXRlbTogYW55KTogYW55IHtcbiAgIHJldHVybiBPYmplY3Qua2V5cyhpdGVtKVswXTtcbiB9XG5cbiBnZXRWYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xuICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gfVxufSIsIjwhLS0gU3Bpbm5lciAtLT5cbjxuZ3gtc3Bpbm5lciBzaXplPVwibWVkaXVtXCIgW25hbWVdPVwic3Bpbm5lck5hbWVcIiBbdHlwZV09XCJzcGlubmVyVHlwZVwiPjwvbmd4LXNwaW5uZXI+XG48IS0tIGN1c3RvbSBsb2FkZXIgLS0+XG48IS0tIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj4gLS0+XG48IS0tIEJhY2sgUHJvY2Vzc2luZyAtLT5cbjwhLS0gPGRpdiAqbmdJZj1cImJhY2tpY29uID09IGZhbHNlXCIgPlxuICA8ZGl2IGNsYXNzPVwiYmFja2ljb25cIiA+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIiBbY2xhc3NdPVwiIGFiSXRlbT8uc3RhdHVzID09ICdDb21wbGV0ZWQnID8gJ3N1bW1hcnktdm9sdmVyJzonYXBwLWJhY2sxJ1wiPlxuICAgIDxpbWcgY2xhc3M9XCJpY29uLWFycm93LWJhY2tcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tYXJyb3ctYmFjay5wbmdcIiBhbHQ9XCJTY3JvbGwgZG93blwiPiB7eyBxYkl0ZW0/LmJhY2sgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj4gLS0+XG5cbjwhLS0gUXVlc3Rpb24gSGFubGRpbmcgLS0+XG48IS0tIFZEIHJlbW92ZWQgdW53YW50ZWQgY29uZGl0aW9uIC0tPlxuPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbVwiIGNsYXNzPVwicXVlc3Rpb25kaXYxIHBhZGQtYm90dG9tXCI+XG4gIDwhLS0gUHJvZ3Jlc3MgQmFyICYgVGl0bGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0udGl0bGVcIj5cbiAgICA8aDE+e3sgcXVlc3Rpb25JdGVtPy50aXRsZSB9fTwvaDE+XG4gICAgPGRpdj57eyBxdWVzdGlvbkl0ZW0/LnN1YlRpdGxlIH19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUHJvZ3Jlc3MgJiBHcm91cGluZyAtLT5cbiAgPGRpdj5cbiAgICA8IS0tIFBpZSBDaGFydCBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgYmdDb2xvcjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XG4gICAgICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzXCIgKm5nSWY9XCJxYkl0ZW0/LnByb2dyZXNzQmFyXCI+XG4gICAgICAgIDwhLS0gPGNpcmNsZS1wcm9ncmVzcyBjbGFzcz1cInRpdGxlYmFyXCIgW3BlcmNlbnRdPVwidGhpcy5wZXJjZW50XCIgW3JhZGl1c109XCI0MFwiIFtzcGFjZV09XCItNFwiIFtvdXRlclN0cm9rZVdpZHRoXT1cIjRcIlxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCI0XCIgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyNlMGIxYjAnXCIgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNlN2U4ZWEnXCIgW2FuaW1hdGlvbl09XCJ0cnVlXCIgW2JhY2tncm91bmRQYWRkaW5nXT0gXCIwXCJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcbiAgICAgICAgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCIgW3RpdGxlXT1cInRoaXMucGVyY2VudCsnJSdcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCIgW3Nob3dCYWNrZ3JvdW5kXT1cInRydWVcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMzAwXCJcbiAgICAgICAgW3N0YXJ0RnJvbVplcm9dPVwiZmFsc2VcIiBbcmVzcG9uc2l2ZV09XCJmYWxzZVwiID5cbiAgICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICAgIDwhLS0gU2hvdyB0aGUgR3JvdXAvTW9kdWxlIHJlbGF0ZWQgdG8gdGhlIFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZ3JvdXBOYW1lICYmIHFiSXRlbS5wcm9ncmVzc0JhclwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgcXVlc3Rpb25hbGlnbjogIXFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm54dC1sYXJnZVRpdGxlXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC1mb250NiBteXQtdGV4dDNcIj5cbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/Lmdyb3VwTmFtZSB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnN1YlRleHQgIT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDUgbXl0LXRleHQxXCI+e3txdWVzdGlvbkl0ZW0/LnN1YlRleHR9fTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnN1YlRleHQgPT09ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQxMCBteXQtdGV4dDJcIj57e3F1ZXN0aW9uSXRlbT8uc3ViVGV4dH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgPCEtLSBRdWVzdGlvbiBIYW5kbGluZyAtLT5cbiAgICA8IS0tIFZEIDEwQXVnMjQtIHF1ZXN0aW9uIG5vIC0tPlxuICA8ZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25UZXh0ICYmIHF1ZXN0aW9uSXRlbS5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICAgIDxzcGFuPnt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvbk51bWJlcn19Ljwvc3Bhbj5cbiAgICAgIDxwIGNsYXNzPVwibnh0LWxhYmVsXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmlzVGl0bGVcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0udHlwZSAhPSAnQm9vaycgJiYgcXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyIT0nNicgJiYgcXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyIT0nOSdcIj4gXG4gICAgICAgIDxoMyBjbGFzcz1cInF1ZXN0aW9uYWxpZ24gIG15dC1mb250MyBteXQtYWxpZ24gbXl0LXRleHQ0XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHVud2FudGVkIHN0eWxpbmcgY2xhc3MgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uSXRlbS5pc1RpdGxlXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWwgPyAnaGVhZGVyLXN0eWxlJyA6ICdxdWVzdGlvbi1mLXNpemUnXCI+XG4gICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIiA+XG4gICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgd2l0aCBDdXN0b20gU3R5bGluZyAtIE1SIC0gMTFBVUcyMyAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0udHlwZSA9PSAnQm9vaydcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25OdW1iZXI9PSc2J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzIxXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0IH19XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgPT0gJ0ZpbGUnIFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlcj09JzknXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC0zNDVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCI+XG4gICAgICAgICAge3txdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dH19XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWRkaXRpb25hbCBJbmZvIC0tPlxuICA8IS0tIFRoZSBiZWxvdyBjb2RlIGNhbiBiZSB3cml0dGVuIGVmZmVjdGl2ZWx5IG5lc3RlZCBuZ0lmIGZvciBSaWNoIFRleHQgJiBPdGhlciBvbncgZm9yIFByb2dyZXNzIEJhciAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5hZGRpdGlvbmFsUmljaENvbnRlbnQgJiYgcWJJdGVtLnByb2dyZXNzQmFyXCIgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibnh0LWFkZGl0aW9uYWwgXCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50ICYmICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydCBxdWVzLWFsZXJ0MVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvIGZhLTN4IGlwb3NpdGlvbiBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mb2RpdlwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24tLT5cbiAgPGRpdiAqbmdJZj1cImRyb3Bkb3duRmxhZ1wiID5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8c2VsZWN0IGNsYXNzPVwibnh0ZHJvcGRvd25cIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2R0LWxpbmUgbnh0LW15dC1hbGlnbjMgbnh0LW15dC1hbGlnbjIgZHBEb3duIG54dC1kcm9wYm94IGRvd24xIG15dC1kcm9wYm94IG15dC1ib3JkZXItciBteXQtZm9udDEnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICdjdXN0b20tc2VsZWN0JzogIXFiSXRlbT8ucHJvZ3Jlc3NCYXJcbiAgICAgICAgfVwiIGNsYXNzPVwibXItc20tMiBkZC1oZWlnaHQgbnh0LWRyb3Bib3ggXCIgIGlkPVwiZHJvcGRvd25cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNoYW5nZSk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgPyAnI2ZmZicgOiAnJ1xuICAgICAgICB9fVwiIHN0eWxlLmNvbG9yPVwie3sgcXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zXCIgY2xhc3M9XCJvcHRpb25cIiB2YWx1ZT1cInt7IG9wdC52YWx1ZSB9fVwiPlxuICAgICAgICAgIHt7IG9wdC52YWx1ZSB9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi5cIiBkaXNhYmxlZCBoaWRkZW4+e3sncGxlYXNlTWFrZUNob2ljZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLVZEIFJhZGlvIHVwZGF0ZSAtLT5cbiAgPGRpdiAqbmdJZj1cInJhZGlvRmxhZyB8fCBkYXRhRmxhZ1wiIGNsYXNzPVwiXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJ0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclwiIGNsYXNzPVwibnh0LWVycm9yLW1zZ1wiPiB7eyBxdWVzdGlvbkl0ZW0/LmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWN1c3RvbS1yYWRpby1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9uc1wiIFxuICAgICAgW2NsYXNzXT1cIiB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdueHQtY3VzdG9tLXJhZGlvLW9wdGlvbiBpbnZhbGlkJyA6ICdueHQtY3VzdG9tLXJhZGlvLW9wdGlvbidcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBbaWRdPVwib3B0LnZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCJcbiAgICAgICAgICBuYW1lPVwiaW5wVmFsdWVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib3B0aW9uQ2hhbmdlKG9wdC52YWx1ZSlcIlxuICAgICAgICAvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW8tbGFiZWxcIiBbZm9yXT1cIm9wdC52YWx1ZVwiPiB7eyBvcHQudmFsdWUgfX08L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9ucy5yZWNvcmRzXCIgY2xhc3M9XCJyYWRpbyBueHQtcmFkaW9PcHRpb25cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibnh0LXJhZGlvY29udGFpbmVyIGNvbnRhaW5lciBteXQtZm9udDRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2lkXT1cIm9wdC5pZFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBuYW1lPVwiaW5wVmFsdWVcIiBbdmFsdWVdPVwib3B0LnZhbHVlXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib3B0aW9uQ2hhbmdlKG9wdC52YWx1ZSlcIiAvPlxuICAgICAgICAgIHt7IG9wdC52YWx1ZSB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj4gIFxuICA8IS0tIENoZWNrYm94IC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2hlY2tib3hGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5lcnJvclwiIGNsYXNzPVwiY29uZC1kaXYyXCI+XG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LmVycm9yTWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJueHQtY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvblZhbHVlc1wiIGNsYXNzPVwibnh0LWNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibnh0LWNvbnRhaW5lcjFcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm54dC1jaGVja2JveFwiIFtpZF09XCJpdGVtLmlkXCIgWyhuZ01vZGVsKV09XCJpdGVtLmNoZWNrZWRcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1jaGVja2JveC1sYWJlbFwiPnt7IGl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IC0tPlxuICA8ZGl2ICpuZ0lmPVwidGV4dEZsYWdcIj5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBUbyByZWR1Y2UgdGhlIG1hcmdpbiAtLT5cbiAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzdGlvbkl0ZW0/LnNpemUgKyAnIHBhZGRpbmdub25lJ1wiPlxuICAgICAgPGlucHV0IGNsYXNzPVwibnh0LWlucHV0XCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgXG4gICAgICAgaWQ9XCJ0ZXh0LWlucHV0LWlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICA8IS0tIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgbnh0LWNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPiAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IEFyZWEgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0YUZsYWdcIiA+XG4gICAgPGRpdj5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm54dC1pbnB1dCBueHQtdGV4dC1hcmVhXCIgaWQ9XCJ0YS1pbnB1dC1pZFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAoZm9jdXNvdXQpPVwidGFGb2N1c091dCA9IHRydWVcIlxuICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiPjwvdGV4dGFyZWE+XG4gICAgICA8IS0tIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgbnh0LWNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+PC9pPiAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuICA8IS0tIFJTIDA2SkFOMjUgLS0+XG4gICA8IS0tIGZvciByaWNoIHRleHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJydGFGbGFnXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlc3Rpb25JdGVtPy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIj5cbiAgICAgIDxhcHAtY3VzdG9tLXJpY2gtdGV4dFxuICAgICAgICBbdmFsdWVdPVwiaW5wVmFsdWVcIlxuICAgICAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25JdGVtXCJcbiAgICAgICAgW2Vycm9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3JcIlxuICAgICAgICAodGV4dFZhbHVlQ2hhbmdlKT1cImhhbmRsZVJpY2hUZXh0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvYXBwLWN1c3RvbS1yaWNoLXRleHQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgICAgICAgXG4gIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYSdcIj5cblxuICAgIDxhcHAtY3VzdG9tLXJpY2gtdGV4dFxuICAgICAgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgW3Jvd3NdPVwiM1wiXG4gICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uIFwiIFxuICAgICAgKHRleHRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVSaWNoVGV4dENoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9hcHAtY3VzdG9tLXJpY2gtdGV4dD5cbjwvZGl2PiAtLT5cbiAgPCEtLSBDQyBOdW1iZXIgRm9ybWF0IC0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDxkaXYgKm5nSWY9XCJudW1iZXJGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cIlRleHRcIiBwbGFjZWhvbGRlcj1cIjAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJudW1iZXItaW5wdXQtaWRcIiAobmdNb2RlbENoYW5nZSk9XCJDQ09uQ2hhbmdlKCRldmVudClcIiByZXF1aXJlZD1cIlwiIG1heGxlbmd0aD1cIjI5XCJcbiAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW14wLTkgXS9nLCcnKTtcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4O1wiXG4gICAgICAgICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEVORC0tPlxuXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYWxwaGFudW1lcmljRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+IDwhLS1VSSBub3QgY29tcGxldGVkLS0+XG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiPlxuICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPXRleHQgcGxhY2Vob2xkZXI9XCJ7eyd6ZXJvT2ZaZXJvJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBzdHlsZT1cInBhZGRpbmc6NXB4IDVweCA1cHggMTUwcHg7XCIgaWQ9XCJ5b3VyaWRoZXJlXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVtYWlsIC0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDxkaXYgKm5nSWY9XCJlbWFpbEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cImVtYWlsLWlucHV0LWlkXCJcbiAgICAgICAgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4XCJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEYXRlVGltZSAtLT5cbiAgPGRpdiAqbmdJZj1cImR0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG54dG15dC10aW1lMVwiID5cbiAgICA8IS0tIEVycm9yIEhhbmRsaW5nIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG5cbiAgICA8IS0tIERhdGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cImRhdGVGbGFnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgPCEtLSBIQSAzMS1KQU4tMjQgVGhlc2UgbGFiZWxzIHdlcmUgb2NjdXBpbmcgdGhlIGVtcHR5IHNwYWNlIHdoZW4gZGF0ZSBxdWVzdGlvbiBjb21lcy0tPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LmRhdGVUZXh0IH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgPCEtLSA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudCwgcXVlc3Rpb25JdGVtKVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJ7eydzZWxlY3REYXRlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRpbWUgLS0+XG4gICAgPGRpdiAqbmdJZj1cInRpbWVGbGFnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy50aW1lVGV4dCB9fTwvbGFiZWw+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LnByb2dyZXNzQmFyfVwiIFxuICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cIihjbGVhclNRRXJyb3IpIFwiPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImhvdXJzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93SG91ciBueHRteXQtdGltZSBteXQtaG91clwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIb3VyXCIgaWQ9XCJob3VyXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ISDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaG91clwiICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCI+XG4gICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwibWludXRlc1wiIGNsYXNzPVwiZGF0ZXRpbWUgbnh0c2hvd21pbnV0ZSBueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW51dGVcIiBpZD1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm1pbnV0ZVwiICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiPlxuICAgICAgICAgICAgICB7eyBtaW51dGUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBjb2xvbjE6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy54MjRIb3VycyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkFNL1BNXCIgY2xhc3M9XCJueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNZXJpZGllbVwiIGlkPVwibWVyaWRpZW1cIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IFtuZ0NsYXNzXT1cInsnJzogcWJJdGVtLnByb2dyZXNzQmFyLCAnZGF0ZWFuZFRpbWUnOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiPjwvZGl2PiAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGkgY2xhc3M9XCJmYSBjaGVjay1pY29uM1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBdHRhY2htZW50IC8gRmlsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImZpbGVGbGFnXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZFwiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXBsdXMgZmEtMnggcGljdHVyZS11cGxvYWQtY2hpbGQgcGljLXVwbG9hZCBpY29sb3JcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGFsbG93ZWRGaWxlRXh0ZW5zaW9uIH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCx0aGlzLnF1ZXN0aW9uSXRlbSlcIiAvPlxuICAgIDwvZGl2PlxuICAgIDx1bCAqbmdJZj1cIlxuICAgICAgICBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICBxdWVzdGlvbkl0ZW0/LnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAhcWJJdGVtPy5wcm9ncmVzc0JhclxuICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cImFsaWduLWxcIj5cbiAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZX19PHNwYW4gY2xhc3M9XCJhdHRhY2gtbGlzdFwiIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiPlg8L3NwYW4+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8IS0tIEF0dGFjaG1lbnQgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwibnh0ZmlsZS11cGxvYWRpbmctYm94XCI+XG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIFwiPnt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgXG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmLU5hbWVcIiAqbmdJZj1cIiBxdWVzdGlvbkl0ZW0/LnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPiB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dH19PC9zcGFuPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxuICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9maWxlLXVwbG9hZC5wbmdcIiBjbGFzcz1cImZpbGUtaWNvblwiLz5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcbiAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgPCEtLSBCb29rIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYm9va0ZsYWdcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2Zvcm0tZ3JvdXAgY29udGVudC1ib3gnIDogJ2Zvcm0tZ3JvdXAnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJycgOiAnbnh0LW15dC1hbGlnbjMnXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWwgPyAnY29sLWxnLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJyA6ICdjb2wtbWQtJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBzdWJRdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLmlkXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlcz8uc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIj57eyBxdWVzPy5xdWVzdGlvblRleHQgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nWmVybyBueHRteXQtZGF0ZVRpbWVOZXdcIiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRGF0ZSdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5kYXRlVGV4dCB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlYW5kdGltZVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgPlxuICAgICAgICAgICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGltZSdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy50aW1lVGV4dCB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlYW5kdGltZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBueHQtZHQtdGltZSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LnByb2dyZXNzQmFyfVwiIFxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImhvdXJzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93SG91ciBueHRteXQtdGltZSBteXQtaG91clwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIb3VyXCIgaWQ9XCJob3VyXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaG91clwiICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIG54dHNob3dtaW51dGUgbnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBtaW51dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBjb2xvbjE6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLngyNEhvdXJzID09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkFNL1BNXCIgY2xhc3M9XCJueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNZXJpZGllbVwiIGlkPVwibWVyaWRpZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlVGltZSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRhdGUtcGlja2VyIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJkaXNwbGF5RGF0ZSgkZXZlbnQscXVlcylcIj48L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBWRCB0byBzaG93IGxhYmVsLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xhYmVsJ1wiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tbGFiZWwgW2xhYmVsU3R5bGVdPVwicXVlcy50aXRsZVwiIFtsYWJlbFZhbHVlXT1cInF1ZXMucXVlc3Rpb25cIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxsYWJlbCBuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiPnt7IHF1ZXMucXVlc3Rpb25UZXh0IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcz8uaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIiBcbiAgICAgICAgICAgICAgICAgIFtpZFZhbHVlXT1cInF1ZXM/LnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgICAgICAgW2ZvY3VzRXZlbnRdPVwiY2xlYXJTUUVycm9yKHF1ZXM/LmlkKVwiXG4gICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcz8uZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXM/LnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlKT1cInNlbGVjdGVkSW5wdXQoJGV2ZW50LHF1ZXMpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRleHQtYXJlYSBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uIFwiICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS10ZXh0LWFyZWE+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlxuICAgICAgICAgICAgICAgICAgICBmYSBmYS1wbHVzIGZhLTJ4XG4gICAgICAgICAgICAgICAgICAgIHBpY3R1cmUtdXBsb2FkLWNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHBpYy11cGxvYWRcbiAgICAgICAgICAgICAgICAgICAgaWNvbG9yXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LnF1ZXN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPCEtLSA8YXBwLWN1c3RvbS10YWJsZSBcbiAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tdGFibGU+IC0tPlxuICAgICAgICAgICAgPCEtLSBTS1MxM01BUjI1IG54dCB0YWJsZSBjaGFuZ2UgLS0+XG4gICAgICAgICAgICA8bnh0LWRhdGF0YWJsZSBpc0VkaXRSb3cgaXNEZWxldGVSb3cgYWN0aW9uQnV0dG9uIGlzQnV0dG9uc1xuICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICBmcm9tID0gXCJmb3JtQnVpbGRlclwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgICAgW3RhYmxlQ29uZmlnXT1cInF1ZXMudGFibGVDb25maWdcIlxuICAgICAgICAgICAgICAgIHRhYmxlSWQgPSBcIlwiXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJsdHJcIlxuICAgICAgICAgICAgICAgIHRhYmxlV2lkdGggPSBcImF1dG9cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8IS0tIChOeHRUYWJsZUVtaXQpID0gXCJOeHRUYWJsZUVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGJ1dHRvbkVtaXQpID0gXCJidXR0b25FbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChoeXBlckxpbmtFbWl0KSA9IFwiaHlwZXJMaW5rRW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25FZGl0RGF0YSkgPSBcIm9uRWRpdERhdGEoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uRGVsZXRlRGF0YSkgPSBcIm9uRGVsZXRlRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2F2ZUJ1dHRvbkRhdGEpID0gXCJzYXZlQnV0dG9uRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoYWN0aW9uQnV0dG9uRW1pdCkgPSBcImFjdGlvbkJ1dHRvbkVtaXQoJGV2ZW50KVwiIC0tPlxuICAgICAgICAgICAgPC9ueHQtZGF0YXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTS1MyNU1BUjI1IEltYWdlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJbWFnZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgW3N0eWxlLmJvcmRlcl09XCJxdWVzLmltYWdlRGF0YSA/ICcxcHggc29saWQgYmxhY2snIDogJ25vbmUnXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwibnh0ZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDwhLS0gZm9yIGNvbW1vbiBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcz8uZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgPGFwcC1kcm9wZG93bi13aXRoLWZsYWcgKm5nSWY9XCJxdWVzLmlzRGVwZW5kZW50UGlja2xpc3QgJiYgIXF1ZXMuZHJvcERvd25Pbmx5XCIgIFtjZXJ0aWZpZWRdPVwicXVlcy5jZXJ0aWZpZWRGbGFnXCIgIFtKb2JQZXJmb3JtZXJDZXJ0aWZpY2F0ZXNdPVwicXVlcy5jZXJ0aWZpY2F0ZUxpc3RcIiAoZmxhZ0Ryb3BEb3duQ2hhbmdlKT1cImRlcGVuZGVudENoYW5nZSgkZXZlbnQpXCI+PC9hcHAtZHJvcGRvd24td2l0aC1mbGFnPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tTGlzdCBzdGFydC0tPlxuICA8ZGl2ICpuZ0lmPVwibGlzdEZsYWdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1teXQtYWxpZ24zXCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uaWQpO2xldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJueHQtZGlzLWZsZXggbXl0LWZvbnQzIG15dC1mb250N1wiPnt7IHF1ZXM/LnF1ZXN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICdueHQtZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgbnh0Ym9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgICAgfVwiIGlkPVwidGV4dFwiIFtpZF09XCJxdWVzLnVuaXF1ZVN1YlFJZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyTG9jYWxTdWJRdWVzRXJyb3IocXVlcylcIlxuICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMucXVlc3Rpb24gfX1cIlxuICAgICAgICAgICAgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwiYWRkRmxhZ1wiPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiQWRkKGdldExvY2FsU3ViUXVlc3Rpb25zKHF1ZXN0aW9uSXRlbS5pZCkpXCIgY2xhc3M9XCJidG5cIj48aSBjbGFzcz1cImZhIGZhLXBsdXNcIiA+PC9pPnt7J2FkZCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9idXR0b24+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLUxpc3QgRW5kLS0+XG5cbiAgPCEtLSBBY3Rpb25zIC0tPlxuICA8IS0tIFZEIGJ1dHRvbiBjb25kaXRpb24gcmVtb3ZlZC0tPlxuICA8ZGl2IGNsYXNzPVwiZmxleGVyXCI+XG4gICAgPCEtLSBCYWNrd2FyZCAvIEJhY2sgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICAgPCEtLVZEIGRpc2FibGVkIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJiYWNrYnV0dG9uXCIgXG4gICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+IDAgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiICpuZ0lmPVwicWJJdGVtLmJhY2tcIj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNCdXR0b25EaXNhYmxlZFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdueHQtbGVmdC1idCc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0/LmJhY2sgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvcndhcmQgLyBOZXh0IC0tPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiAgKm5nSWY9XCJxYkl0ZW0ubmV4dFwiID5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHRidXR0b25cIj5cbiAgICAgICAgIDwhLS1WRCBkaXNhYmxlZCAtLT5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNCdXR0b25EaXNhYmxlZFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdueHQtcnVzdHknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSc6XG4gICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICB9XCIgKGNsaWNrKT1cImhhbmRsZU5leHRDbGljaygpXCI+XG4gICAgICAgICAge3sgcWJJdGVtLm5leHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBTdW1tYXJ5IC0tPlxuPGRpdiAqbmdJZj1cInRoaXMuYWJJdGVtPy5zdGF0dXMgPT09ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJjb2wtbGctMTJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgPGgyPnt7dGhpcy5xYkl0ZW0uc3VtbWFyeVRleHR9fTwvaDI+XG4gIDxwPnt7dGhpcy5xYkl0ZW0uc3VtbWFyeVN1YlRleHR9fTwvcD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic3VtbWFyeSAmJiBzdW1tYXJ5Lmxlbmd0aCA+IDBcIiBoZWlnaHQ9XCIxMDAlICFpbXBvcnRhbnRcIiBjbGFzcz1cImNvbC1tZC0xMlwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbC1tZC0xMic6IXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgICAgICAgfVwiPlxuICAgIDxoMSBjbGFzcz1cIm54dC1oZWFkZXIxIG54dC1zdW1tYXJ5cGFkZFwiID57eyBxYkl0ZW0uc3ViVGl0bGUgfX08L2gxPiAgICAgICAgIFxuICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzMlwiICpuZ0lmPVwiIXFiSXRlbS5wcm9ncmVzc0JhciAmJiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgXCI+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBzdW1tYXJ5OiAgIXFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLmVkaXRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyB9XCI+XG4gICAgICAgICAgICAgIDxwIFtuZ0NsYXNzXT1cInsgYXN1bTogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPnt7IHFhLnF1ZXNWYWx1ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBWRCBRdWVzdGlvbiBObyBhZGRlZCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj48c3Bhbj57eyBxYS5xdWVzdGlvbk51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHQtYW5zd2VyXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdC1zdW1tYXJ5XCIgLz5cbiAgICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIGluIHN1bW1hcnkgZm9yIGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PSAnQm9vaydcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbCBvZiBxYS5teVZhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInZhbC5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiPnt7IHZhbC5xdWVzdGlvblRleHQgfX06PHNwYW4+e3sgdmFsLmlucHV0IH19PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBEaXNwbGF5aW5nIHRoZSB2YWx1ZSBmb3IgZGlyZWN0IHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJyAmJiBxYS5xVHlwICE9ICdCb29rJyAgJiYgcWEuc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIj57eyBxYS5xdWVzdGlvblRleHQgfX0gPHNwYW4+PC9zcGFuPnt7IHFhLmFuc1ZhbHVlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0ICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJueHQtZWRpdFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRpb3NcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cblxuICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzMlwiICpuZ0lmPVwicWJJdGVtLnByb2dyZXNzQmFyIFwiPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydiZ0NvbG9yIG54dHN1bW1hcnktdG9wJyA6IHFiSXRlbS5wcm9ncmVzc0JhciB9XCIgPlxuICAgICAgPGRpdiBpZD1cIm54dC1wcm9ncmVzcy1zdW1tYXJ5XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgPCEtLSA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjRcIiBbb3V0ZXJTdHJva2VDb2xvcl09XCInI2UwYjFiMCdcIiBbaW5uZXJTdHJva2VDb2xvcl09XCInI2U3ZThlYSdcIiBbYW5pbWF0aW9uXT1cInRydWVcIiBbYmFja2dyb3VuZFBhZGRpbmddPSBcIjBcIlxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT0gXCInI2RkMmUxMydcIiBbYmFja2dyb3VuZEdyYWRpZW50U3RvcENvbG9yXT1cIicjZjliZmJkJ1wiIFt0aXRsZUNvbG9yXT1cIicjZjNlZGVkJ1wiIFxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxuICAgICAgICBbc3RhcnRGcm9tWmVyb109XCJmYWxzZVwiIFtyZXNwb25zaXZlXT1cImZhbHNlXCIgPlxuICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+IC0tPlxuICAgICAgXG4gICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLnN1bW1hcnlUZXh0ICYmIHFiSXRlbS5wcm9ncmVzc0JhclwiIFxuICAgICAgW25nQ2xhc3NdPVwieyBzdW1tYXJ5VGl0bGU6IHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm54dC1zdWJUaXRsZVwiID57eyBxYkl0ZW0uc3VtbWFyeVRleHQgfX08L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiIGNsYXNzPVwibnh0LXN1YlRpdGxlMVwiID57eyBxYkl0ZW0uc3VtbWFyeVN1YlRleHR9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxoMyBjbGFzcz1cInN1bW1hcnktaFwiPlxuICAgICAgICB7eyBxYkl0ZW0uc3VtbWFyeVRleHQgfX1cbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgPGRpdiBjbGFzcz1cInN1bW1hcnktZ3JvdXBUZXh0IG15dC1mb250MlwiPlxuICAgICAgPCEtLSA8cD5JbmZvcm1lIGRlIGRhw7FvPC9wPiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCIgPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgbm9uOiAgcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeVwiPlxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5lZGl0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24gc3VtLXF1ZXMgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyB9XCI+XG4gICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInsgYXN1bTogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPnt7IHFhLnF1ZXNWYWx1ZSB9fTwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc3VtLXF1ZXMgcXVlc3Rpb24gbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyB9XCI+XG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnc3VtLXF1ZXMxIHF1ZXN0aW9uMSBzdW1tYXJ5LWNvbXBsZXRlZCBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPlxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdCAmJiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIiBzdHlsZT1cImJhY2tncm91bmQ6ICNkZWRkZGQ7XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJueHQtZWRpdFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwibnh0LWljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdFwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1hbnN3ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdC1zdW1tYXJ5XCIgLz5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleGVyMVwiICpuZ0lmPVwiYWJJdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwiYWJJdGVtLnN0YXR1cyA9PSAnQ29tcGxldGVkJyAmJiBxYkl0ZW0uY2FuY2VsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydidG4tdGV4dCc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5wcm9ncmVzc0Jhcn1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDYW5jZWxDbGljaygpXCI+XG4gICAgICAgICAge3sgcWJJdGVtLmNhbmNlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj4gLS0+XG5cbiAgPCEtLSBHcm91cCBBY3Rpb25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiYWxpZ24tZWRpdC1zdWJtaXRcIiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIj5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLnN1Ym1pdFwiPlxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7ICdidG4tdGV4dDInOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiIFxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0Q2xpY2soKVwiPlxuICAgICAgICB7eyBxYkl0ZW0uc3VibWl0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uZWRpdFwiPlxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2dyZXknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2tOZXcoKVwiPlxuICAgICAgICB7eyBxYkl0ZW0uZWRpdCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuPC9kaXY+Il19
|
|
2403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUNMLFFBQVEsRUFHUixhQUFhLEVBRWIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsYUFBYSxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBRUwsVUFBVSxFQU1WLE1BQU0sRUFFUCxNQUFNLGNBQWMsQ0FBQztBQUl0QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztB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c0JBQXNCLHlWQUh0QixDQUFDLGFBQWEsQ0FBQywrQ0MvRDVCLG9takNBa3NCTSwyOGhCRHZvQkYsWUFBWSxpV0FBQyxRQUFRLGl5QkFDckIsUUFBUSw0Q0FBRSxXQUFXLDZsREFBRSx1QkFBdUIsa1JBQUUsWUFBWSx1M0JBQUUscUJBQXFCOzs0RkFNMUUsc0JBQXNCO2tCQVpsQyxTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWSxFQUFDLFFBQVE7d0JBQ3JCLFFBQVEsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHFCQUFxQjtxQkFDcEYsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixDQUFDLGFBQWEsQ0FBQzt3VkFJakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG4vL2ltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UsIEluZGV4RGV0YWlsc30gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbixcbiAgUXVlc3Rpb25Cb29rLFxuICBBbnN3ZXJCb29rLFxuICBBbnN3ZXJXcmFwcGVyLFxuICBPcHRpb24sXG4gIE9wdGlvblZhbHVlLFxuICBBdHRhY2htZW50V3JhcHBlcixcbiAgQXR0YWNobWVudCxcbiAgTG9jYWxRdWVzdGlvblxufSBmcm9tIFwiLi4vLi4vd3JhcHBlclwiO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL2Vycm9yV3JhcHBlclwiO1xuaW1wb3J0IHtcbiAgVEVTVFFVRVNUSU9OLFxuICBEVFFVRVNUSU9OLFxuICBGSUxFUVVFU1RJT04sXG4gIFRBUVVFU1RJT04sXG4gIFJBRElPUVVFU1RJT04sXG4gIENIRUNLUVVFU1RJT04sXG4gIEJPT0tRVUVTVElPTixcbiAgVEVTVFFCLFxuICBSVEFRVUVTVElPTiAvL1JTIDA2SkFOMjVcbn0gZnJvbSBcIi4uLy4uL3NhbXBsZVwiO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gXCJyeGpzXCI7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tIFwiLi4vLi4vaTE4bi5waXBlXCI7XG5pbXBvcnQgeyBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBOeHREYXRhdGFibGUgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9kYXRhdGFibGUvZGF0YXRhYmxlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGlja0xvY2F0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvcGljay1sb2NhdGlvbi9waWNrLWxvY2F0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudFwiO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImxpYi1xdWVzdGlvbm5haXJlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLE54dElucHV0LFxuICAgIEkxOG5QaXBlLCBGb3Jtc01vZHVsZSwgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQsIE54dERhdGF0YWJsZSwgUGlja0xvY2F0aW9uQ29tcG9uZW50XG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW0NoYW5nZVNlcnZpY2VdLFxuICBzdHlsZVVybHM6IFtcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJZDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYXBpOiBzdHJpbmc7IC8vIFZEIGdldHRpbmcgdGhlIGFwaSBhcyBpbnB1dFxuICBASW5wdXQoKSBpc0VkaXQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBoYW5kbGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQm9vazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHBhcmFtczogUGFyYW1zO1xuICBwdWJsaWMgZGV2aWNlSW5mbyA9IG51bGw7XG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XG4gIHB1YmxpYyBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgcHVibGljIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xuIFxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xuICBwdWJsaWMgcmFkaW9GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBPUFRJT05PTkxZIFRZUEVTXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrYm94RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBVTkNPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyB0ZXh0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBydGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRpbWVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGVtYWlsRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYWxwaGFudW1lcmljRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYm9va0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcbiAgLy9CYWNrIGJ1dHRvblxuICBwdWJsaWMgYmFja0J1dHRvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgcHVibGljIGlzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xuICBwdWJsaWMgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBpbnBWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgZGF0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkaG91ck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgYXR0YWNobWVudHNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzcU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBsb2NhbFN1YlF1ZXN0aW9uczogTG9jYWxRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBxdWVzdGlvblN0YWNrID0gW107XG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkTGlzdDogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0dGFjaG1lbnQ6IGFueTtcbiAgcHVibGljIGFsbG93ZWRGaWxlRXh0ZW5zaW9uOiBzdHJpbmdbXTtcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlVHlwZUluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFjazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgY2hlY2s6IGJvb2xlYW47XG4gIHB1YmxpYyBwb3A6IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NhbERhdGU6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXRocXVlc3Rpb246IG51bWJlcjtcbiAgcHVibGljIHBlcmNlbnQ6IG51bWJlcjtcbiAgcHVibGljIGNvdW50OiBudW1iZXI7XG4gIHB1YmxpYyB0YUZvY3VzT3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBub3RWYWxpZEFjY051bTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3BsQ0NCYWNrQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN1bW1hcnkgPSBbXTtcbiAgcHVibGljIGxvY2FsU3ViUU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGtleUluZGV4OiBudW1iZXIgPSAwO1xuICAvL3B1YmxpYyBzcXVlczogc3RyaW5nO1xuICBwdWJsaWMgc2VsRGF0ZTogYW55ID0ge307XG4gIHB1YmxpYyBzZWxlY3REYXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcbiAgcHVibGljIGlubmVyaHRtbDogYW55O1xuICBwdWJsaWMgcG9zc2liaWxpdGllczogYW55O1xuICBwdWJsaWMgaW5uZXJodG1sMTogYW55O1xuICBwdWJsaWMgc3VtbWFyeURhdGEgPVtdO1xuIFxuICBwdWJsaWMgaG91cnM6IGFueVtdID0gW1xuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICBdO1xuIFxuICBwdWJsaWMgbWludXRlczogc3RyaW5nW10gPSBbXG4gICAgXCIwMFwiLFxuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICAgIFwiMTNcIixcbiAgICBcIjE0XCIsXG4gICAgXCIxNVwiLFxuICAgIFwiMTZcIixcbiAgICBcIjE3XCIsXG4gICAgXCIxOFwiLFxuICAgIFwiMTlcIixcbiAgICBcIjIwXCIsXG4gICAgXCIyMVwiLFxuICAgIFwiMjJcIixcbiAgICBcIjIzXCIsXG4gICAgXCIyNFwiLFxuICAgIFwiMjVcIixcbiAgICBcIjI2XCIsXG4gICAgXCIyN1wiLFxuICAgIFwiMjhcIixcbiAgICBcIjI5XCIsXG4gICAgXCIzMFwiLFxuICAgIFwiMzFcIixcbiAgICBcIjMyXCIsXG4gICAgXCIzM1wiLFxuICAgIFwiMzRcIixcbiAgICBcIjM1XCIsXG4gICAgXCIzNlwiLFxuICAgIFwiMzdcIixcbiAgICBcIjM4XCIsXG4gICAgXCIzOVwiLFxuICAgIFwiNDBcIixcbiAgICBcIjQxXCIsXG4gICAgXCI0MlwiLFxuICAgIFwiNDNcIixcbiAgICBcIjQ0XCIsXG4gICAgXCI0NVwiLFxuICAgIFwiNDZcIixcbiAgICBcIjQ3XCIsXG4gICAgXCI0OFwiLFxuICAgIFwiNDlcIixcbiAgICBcIjUwXCIsXG4gICAgXCI1MVwiLFxuICAgIFwiNTJcIixcbiAgICBcIjUzXCIsXG4gICAgXCI1NFwiLFxuICAgIFwiNTVcIixcbiAgICBcIjU2XCIsXG4gICAgXCI1N1wiLFxuICAgIFwiNThcIixcbiAgICBcIjU5XCIsXG4gIF07XG4gXG4gIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWVyaWRpZW06IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWUxOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYm9va0ZsYWdBY2NlcHQ6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVjb3JkSWQ6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWVzdGlvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyVHlwZTogc3RyaW5nO1xuIFxuICBzdGFydF9kYXRlPzogYW55O1xuIFxuICAvL3NlYXJjaCBjb21wb25lbnRcbiAgcHVibGljIHRlbXBvQWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUG9zdGFsY29kZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQcm92aW5jZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZEFyZWE6IHN0cmluZztcbiAgcHVibGljIGxvY2FsYWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIGFsbEFkZHJlc3MgOmFueSBbXSA9IFtdO1xuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XG4gIHB1YmxpYyBwbGFjZXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBwcm92aW5jZTphbnlbXT1bXTtcbiBcbiAgLy8gUkVRLTAxIFBST0dSRVNTIEJBUlxuICBwdWJsaWMgcHJvZ3Jlc3NTdHlsZTogc3RyaW5nID0gXCIwJVwiO1xuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBpbmRleENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgYWRkRmxhZzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBteURhdGVQaWNrZXJPcHRpb25zOiBhbnkgPSB7fTtcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XG4gXG4gIHB1YmxpYyBhbGxJbnB1dFZhbHVlcyA9IFtdOyAvLyBIQSAwMkZFQjI0IFRvIHN0b3JlIGFsbCB0aGUgaW5wdXQgdmFsdWVzXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcbiAgKSB7XG4gICAgLy8gVkQgMTBBdWcyNC1zcGlubmVyIGNoYW5nZXNcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlLWZhZGVcIjtcbiAgfVxuIFxuICAvLyBIQSAwMkZFQjI0IE9uIGRhdGUgY2hhbmdlIG5lZWQgdG8gc3RvcmUgdGhlIGNoYW5nZWQgdmFsdWUgc28gcGFzc2luZyB0aGUgcXVlc3Rpb25cbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgb25EYXRlQ2hhbmdlZChldmVudDogYW55LCBxdWVzOiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG9uRGF0ZUNoYW5nZWQnKTtcbiAgICAvL3RvIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yXG4gICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRUxTRSBvZiBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS50eXBlID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBodG1sRWxlbWVudFxuICAgICAgLml0ZW0oMClcbiAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlci1jb2xvcjojODdiZTFjO3dpZHRoOjEwMCVcIik7XG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgZXZlbnQpO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmRhdGUuZGF5ID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLnllYXIgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxlY3REYXRlID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgIC8vIEhBIDAyRkVCMjQgQXNzaWduaW5nIGlucHV0IHZhbHVlIHRvIHF1ZXMgaW5wdXRcbiAgICBxdWVzLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xuICAgICAgfWVsc2UgaWYocGFyYW1zWydib29rbGV0SWQnXSl7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSBcIkFNXCI7XG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhZGRyZXNzJykpO1xuICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSl7XG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ0xlbmd0aD0nK3RoaXMubG9jYWxhZGRyZXNzLmxlbmd0aCk7XG4gICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcbiAgICAgICAgbGV0IG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oXCJhZGRyZXNzREJcIik7XG4gICAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xuICAgICAgICAgIGxldCBkYk5ldyA9IHRhcmdldE5ldy5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdE5ldyA9IGRiTmV3LnRyYW5zYWN0aW9uKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAuZ2V0KDEpO1xuICAgICAgICAgIHJlcXVlc3ROZXcub25zdWNjZXNzID0gKCk9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKHRlbXBWYXIud2hvbGVBZGRyZXNzU3RyaW5nKTtcbiAgICAgICAgICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFNLUzIwTUFSMjUgRW5zdXJlIHRoZSBjaGlsZCBjb21wb25lbnQgaXMgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2RcbiAgICAgLy8gQVAtMjVNQVIyNSBFbXB0eSBzdHJpbmcgcmVwbGFjZSBudWxsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgICBsZXQgaW5wdXQ6IGFueTtcbiAgICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycgfHwgcXVlcy50eXBlID09ICdMb2NhdGlvbicpe1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWVPYmonXSA9IHF1ZXMuaW5wdXQgfHwgbnVsbFxuICAgICAgICAgIGlucHV0WydyZWZlcmVuY2VGaWVsZCddID0gcXVlcy5yZWZlcmVuY2VGaWVsZCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ2Zyb21RdWVzdGlvbklkJ10gPSBxdWVzLmlkIHx8IG51bGxcbiAgICAgICAgfSBlbHNlIGlmKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpe1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWUnXSA9IHF1ZXMuaW5wdXQgfHwgbnVsbFxuICAgICAgICB9IGVsc2UgaWYocXVlcy50eXBlID09ICdMaXN0Jyl7XG4gICAgICAgICAgaW5wdXQgPSB7fVxuICAgICAgICAgIHF1ZXNbJ3N1YlRleHQnXSA9IHR5cGVvZiBxdWVzPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IHF1ZXM/LnN1YlRleHQgOiBKU09OLnBhcnNlKHF1ZXNbJ3N1YlRleHQnXSk7XG4gICAgICAgICAgbGV0IGFwaU9iajogYW55ID0gcXVlcy5zdWJUZXh0O1xuICAgICAgICAgIGlucHV0Wyd2YWx1ZU9iaiddID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ2ZpZWxkJ10gPSBhcGlPYmouZGVmYXVsdEZpZWxkIHx8IGFwaU9iai5maWVsZFswXSB8fCBhcGlPYmouZmllbGQgfHwgbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0ID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShpbnB1dCwgcXVlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuLy8gY2FsbCB3aGVuIGJvb2tJZCBjaGFuZ2VzXG4gIG5nT25DaGFuZ2VzKHNpbXBsZWNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZihzaW1wbGVjaGFuZ2VzWydxYklkJ10pe1xuICAgICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICB9XG4gIH1cbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIGRhdGVfVGltZU1hcCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkaG91ck1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICB0aGlzLnNlbGVjdGVkbWludXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cbiBcbiAgZGF5KCkge1xuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGRhdGVGb3JtYXQ6IFwiZGQubW0ueXl5eVwiLFxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcbiAgICAgIGRpc2FibGVEYXRlUmFuZ2VzOiBbXSxcbiAgICAgIHNob3dDbGVhckRhdGVCdG46IGZhbHNlLFxuICAgICAgZGlzYWJsZVNpbmNlOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVVudGlsOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgc2hvd1RvZGF5QnRuOiBmYWxzZSxcbiAgICAgIGRheUxhYmVsczoge1xuICAgICAgICBzdTogXCJEb21cIixcbiAgICAgICAgbW86IFwiTHVuXCIsXG4gICAgICAgIHR1OiBcIk1hclwiLFxuICAgICAgICB3ZTogXCJNacOpXCIsXG4gICAgICAgIHRoOiBcIkp1ZVwiLFxuICAgICAgICBmcjogXCJWaWVcIixcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxuICAgICAgfSxcbiAgICAgIG1vbnRoTGFiZWxzOiB7XG4gICAgICAgIDE6IFwiRW5lXCIsXG4gICAgICAgIDI6IFwiRmViXCIsXG4gICAgICAgIDM6IFwiTWFyXCIsXG4gICAgICAgIDQ6IFwiQWJyXCIsXG4gICAgICAgIDU6IFwiTWF5b1wiLFxuICAgICAgICA2OiBcIkp1blwiLFxuICAgICAgICA3OiBcIkp1bFwiLFxuICAgICAgICA4OiBcIkFnb1wiLFxuICAgICAgICA5OiBcIlNlcFwiLFxuICAgICAgICAxMDogXCJPY3RcIixcbiAgICAgICAgMTE6IFwiTm92XCIsXG4gICAgICAgIDEyOiBcIkRpY1wiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gXG4gIGNoYW5nZSgpIHtcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlcjogMXB4IHNvbGlkIHJlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiAxcHggc29saWQgIzg3YmUxYyA7d2lkdGg6MTAwJVwiKTtcbiAgICB9XG4gIH1cbiBcbiAgcHJvY2Vzc1FCKCkge1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcbiAgICAvL3RoaXMucWJJdGVtXG4gICAgY29uc29sZS5sb2codGhpcy5xYklkKTtcbiAgICAvL2NvbnNvbGUubG9nKCdWZXJzaW9uIGluIHByb2Nlc3MgaXMgOGJmMTFlZmE3ZjkxYTM5MWQ5NTdiZjZiNTA3OGVkYzdlNjU2YjY3YycpO1xuICAgIGlmICh0aGlzLnFiSWQpIHtcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uQm9vayh0aGlzLnFiSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgUXVlc3Rpb24gRGlyZWN0bHkgZm9yIHRlc3RpbmcnKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBEVFFVRVNUSU9OO1xuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgdHJpbUxhc3REdW1teShpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSA2KSk7XG4gIH1cbiBcbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiBpbnB1dCA9PT0gXCJcIiA/IGRlZiA6IGlucHV0O1xuICB9XG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXG4gIGhhbmRsZUVkaXRDbGljayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNraWNvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uc3RhdHVzID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih2YWx1ZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCcgaW4gc2lkZSBzdW1tYXJ5b3BlbicrIHRoaXMuc3VtbWFyeS5sZW5ndGgpO1xuIFxuICAgICAgLy9Bc3NpZ24gcXVlc3Rpb24gc3RhY2sgbGVuZ3RoIGZyb20gc3VtbWFyeSBwYXJ0XG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgdmFyIGxlbmd0aFZhbHVlID0gdGhpcy5xdWVzdGlvblN0YWNrLmluZGV4T2YodmFsdWUpO1xuIFxuICAgICAgZm9yIChsZXQgaSA9IGFycmF5TGVuZ3RoOyBpID4gbGVuZ3RoVmFsdWU7IGktLSkge1xuICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgICAgdmFyIGFycmF5TGVuZ3RoMSA9IHRoaXMucXVlc3Rpb25OYW1lLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGFycmF5TGVuZ3RoMTsgaiA+IGxlbmd0aFZhbHVlOyBqLS0pIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID0gW107XG4gICAgfVxuICB9XG4gXG4gIGhhbmRsZU5leHRDbGljaygpIHtcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmJhY2tCdXR0b25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5BbnN3ZXJTYXZlKCk7XG4gIH1cbiBcbiAgQW5zd2VyU2F2ZSgpe1xuICAgIC8vdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBxdWVzdGlvblR4dD0nJztcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0ubmV4dFRyYWNraW5nSWQpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgLy8gTVIgMzBKQU4yNCAtIEFkZGVkIENvbmRpdGlvbiBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yIChCb29rIFF1ZXN0aW9uIGFuZCBOb24tQm9vaylcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9iamVjdHMgdG8gc3RvcmUgdGhlIHZhbHVlc1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0KXtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIHF1ZXN0aW9uVGV4dCB2YWx1ZVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcXVlc3Rpb25UZXh0ID0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgIH1cbiBcbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyB0aGlzLnNxdWVzICs9IGNRdWVzdGlvbi5xdWVzdGlvbiArICdAQCMjJCQnO1xuICAgIHZhciBxdWVzVmFsdWUgPSBjUXVlc3Rpb24ucXVlc3Rpb25UZXh0O1xuICAgIHZhciBtYWlsZm9ybWF0ID1cbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcbiBcbiAgICAvLyBQcm9jZXNzIElucHV0c1xuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcbiAgICAgIGZvciAodmFyIG92IG9mIHRoaXMub3B0aW9uVmFsdWVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jaGVja2VkKSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IG92LnZhbHVlICsgXCJAQCMjJCRcIjtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVtYWlsRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxwaGFudW1lcmljRmxhZykge1xuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAoaXNOb3RWYWxpZEFjY051bSkge1xuICAgICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcbiBcbiAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiIHx8IGl0ZW0udHlwZSA9PSBcIlRpbWVcIikge1xuICAgICAgICAgIC8vdGhpcyBvbmVcbiAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiKXtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKVxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcbiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiVGltZVwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRIb3VyK3RoaXMuc2VsZWN0ZWRNZXJpZGllbSt0aGlzLnNlbGVjdGVkTWludXRlKVxuIFxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBQTVwiO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSBzZWxlY3RIb3VyIGFuZCBzZWxlY3RNaW51dGUgY29uZGl0aW9uXG4gICAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLnNlbERhdGUgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbnBWYWx1ZSB8fCAhdGhpcy5zZWxlY3REYXRlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG51bGwgY29uZGl0aW9uIG9mIGlucHV0Jyk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgICAgICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgICAgICAgLml0ZW0oMClcbiAgICAgICAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXItYm90dG9tOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgfVxuICAgICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRleHQgZXJyb3IgY29uZGl0aW9uXG4gICAgICBpZihpdGVtLnR5cGU9PSBcIlRleHRcIil7XG4gICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmlucFZhbHVlID0gaXRlbS5pbnB1dDsgNjM0XG4gICAgICB9XG4gXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXRlbS5pc09wdGlvbmFsICYmXG4gICAgICAgIC8vICAoKGl0ZW0udHlwZSAhPSBcIkZpbGVcIiAmJiAhaXRlbS5pbnB1dCAmJiBpdGVtLnR5cGUgIT0gJ0RhdGUnICYmIGl0ZW0udHlwZSAhPSAnVGltZScpIHx8XG4gICAgICAgICAvLyAgIChpdGVtLnR5cGUgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMCkpXG4gICAgICAgICAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiUmFkaW9cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRW1haWxcIikge1xuICAgICAgICAgIGlmIChpdGVtLmlucHV0ICYmIGl0ZW0uaW5wdXQubWF0Y2gobWFpbGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJyArIHJlY29yZElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgICAgICB9IC8vaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlO1xuIFxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IChpdGVtLmlucHV0ICE9IHVuZGVmaW5lZCA/IGl0ZW0uaW5wdXQgOiBcIlwiKSArIFwiQEAjIyQkXCI7XG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0ucXVlc3Rpb24gKyBcIkBAIyMkJFwiO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgYm9vazEnICsgdGhpcy5pbnBWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIHF1ZXN0aW9uVHh0ID0gcXVlc3Rpb25UeHQgPyB0aGlzLnRyaW1MYXN0RHVtbXkocXVlc3Rpb25UeHQpIDogcXVlc3Rpb25UeHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpe1xuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yICh2YXIgbG9jYWxRdWVzIG9mIHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICAgICAgIGlmKCFsb2NhbFF1ZXMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLmlkKSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5pZCxsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAgZWxzZScpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLmlkLHRoaXMuc3ViQW5zTWFwLmdldChsb2NhbFF1ZXMuaWQpICsgJyQkQEAjIycrbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiBcbiAgICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZpbGUgdHdvJylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJBbnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9ICh2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnKSArICdAQCMjJCQnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kcm9wZG93bkZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcbiAgICAgIC8vdGhpcyBvbmVcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjEyXCIsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjAwXCIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUubGVuZ3RoKTtcbiBcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImFucyA9PiBcIiArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICAgIHZhciBkYXRlMTogYW55ID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgZGF0ZTEgPSBbZGF0ZTFbMl0sIGRhdGUxWzFdLCBkYXRlMVswXV0uam9pbihcIi1cIik7XG4gICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcbiAgICAgICAgICB2YXIgZGF0ZTI6IGFueSA9IHRoaXMuaW5zdXJhbmNlU3RhcnREYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGRhdGUyWzBdKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcbiAgICAgICAgICBpZiAoZGF0ZTEgPCBkYXRlMikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XG4gICAgICAgICAgICAgIFwiTm8gZXMgcG9zaWJsZSBkYXIgZGUgYWx0YSBsYSByZWNsYW1hY2nDs24gZGViaWRvIGEgcXVlIGxhIGZlY2hhIGRlbCBpbmNpZGVudGUgZXMgYW50ZXJpb3IgYSBsYSBmZWNoYSBkZSBjb250cmF0YWNpw7NuIGRlIGxhIHDDs2xpemFcIjtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcbiAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLnRpbWVGbGFnKSB7XG4gICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNyB8fCB0aGlzLnNlbERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ2ZvdXInKVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xuICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICBcIixcIjtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmlsZXNzcycgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wVmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiBcbiAgICAvLyBDaGVjayBmb3IgdGhlIGFuc3dlciBiZWZvcmUgc2F2aW5nIHRvIHRoZSBEQlxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uaXNPcHRpb25hbCAmJiAhdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgLy8gU2hvdyBlcnJvciB0aGF0IHRoZSBxdWVzdGlvbiBtdXN0IGJlIGFuc3dlcmVkXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTYXZlIHRoZSBBbnN3ZXIgaW4gdGhlIERCXG4gICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICB0aGlzLmFuc3dlcldyYXAuYWJJZCA9IHRoaXMuYWJJdGVtLmlkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzSWQgPSBjUXVlc3Rpb24uaWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNWYWx1ZSA9IHF1ZXNWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAucVR5cCA9IHR5cDtcbiAgICAvLyBIQSAwMkZFQjI0IFRvIGRpc3BsYXkgdGhlIHZhbHVlcyBpbiBzdW1tYXJ5IHVzaW5nIHRoaXNcbiAgICB0aGlzLmFsbElucHV0VmFsdWVzID0gW107XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBpbnB1dFZhbHVlID0ge307XG4gICAgICBpbnB1dFZhbHVlWydJZCddID0gZWxlbWVudD8uaWQ7XG4gICAgICBpbnB1dFZhbHVlWyd0eXBlJ10gPSBlbGVtZW50Py50eXBlO1xuICAgICAgaW5wdXRWYWx1ZVsncmVmZXJlbmNlRmllbGQnXSA9IGVsZW1lbnQ/LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgaW5wdXRWYWx1ZVsncXVlc3Rpb25UZXh0J10gPSBlbGVtZW50Py5xdWVzdGlvblRleHQ7XG4gICAgICBpbnB1dFZhbHVlWydpbnB1dCddID0gZWxlbWVudD8uaW5wdXQ7XG4gICAgICBpbnB1dFZhbHVlID8gdGhpcy5hbGxJbnB1dFZhbHVlcy5wdXNoKGlucHV0VmFsdWUpIDogdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB9KTtcbiAgICB0aGlzLmFuc3dlcldyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5ncm91cE5hbWU7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuYW5zd2VyV3JhcC5xVHlwJyx0aGlzLmFuc3dlcldyYXAucVR5cCk7XG4gICBpZih0aGlzLmFuc3dlcldyYXAucVR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKXtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XG4gICAgICAvLyBjb25zb2xlLmxvZygnQmFuayBjb25kaXRpb24nKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSk7XG4gICAgfVxuICAgIC8qaWYgKGNRdWVzdGlvbi50eXBlID09ICdCb29rJyl7XG4gICAgZm9yICh2YXIgcWIgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKXtcbiAgICAgIC8vY29uc29sZS5sb2cocWIucXVlc3Rpb24rJyoqKionK1wiQEAjIyQkXCIpXG4gICAgfVxuICB9Ki9cbiAgICAvL3RoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLnF1ZXN0aW9uO1xuICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggaW5wdXQgdG8gcGFyZW50XG4gICAgbGV0IHF1ZXN0aW9uQW5zID0ge31cbiAgICBxdWVzdGlvbkFuc1sncXVlc3Rpb25EZXRhaWwnXSA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHF1ZXN0aW9uQW5zWydhbnN3ZXJCb29rRGV0YWlsJ10gPSB0aGlzLmFiSXRlbTtcbiAgICBjb25zb2xlLmxvZyhxdWVzdGlvbkFucyk7XG4gICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXN0aW9uQW5zKTtcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25JdGVtLS0+Jyk7XG4gICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5xdWVzdGlvbjtcbiAgICB0aGlzLnNhdmVBbnN3ZXIoKTtcbiAgfVxuICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgbmV4dCgpIHtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyBJZiBubyBlcnJvciB0aGVuIG1vdmUgdG8gbmV4dCBzdGVwc1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiBcbiAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChjUXVlc3Rpb24uaWQpO1xuICAgIC8vICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKGNRdWVzdGlvbi5OYW1lKTtcbiBcbiAgICAvLyBDT05ESVRJT05BTCB2cyBPUFRJT05PTkxZICYgVU5DT05ESVRJT05BTFxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IGV2ZW4gaW4gZWxzZSBjb25kaXRpb25zIGJlbG93XG4gICAgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIGZvciAodmFyIGNPcHQgb2YgY1F1ZXN0aW9uLm9wdGlvbnMpIHtcbiAgICAgICAgLy8gUmFkaW8gLyBEYXRhXG4gICAgICAgIC8vY29uc29sZS5sb2coJ09wdGlvbiA9PiAnICsgY09wdC52YWx1ZSArICcgbWF0Y2hpbmcgd2l0aCAnICsgYW5zVmFsKTtcbiAgICAgICAgaWYgKGNPcHQudmFsdWUgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ01hdGNoIEZvdW5kIHVzaW5nICcgKyBjT3B0Lm5leHRRdWVzdGlvbik7XG4gICAgICAgICAgaWYoY09wdC5uZXh0UXVlc3Rpb24pe1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNPcHQubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb25kaXRpb25hbCByZWNvcmQgaWQnKyB0aGlzLnJlY29yZElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ291bGQgYmUgb2YgdHlwZSBEYXRhIGFuZCBleGlzdGluZyB2YWx1ZVxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiT1BUSU9OT05MWVwiKSB7XG4gICAgICAvLyAgT1BUSU9OT05MWSBsb2dpY1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJVTkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIC8vVW5jb25kaXRpb25hbCAgbG9naWNcbiAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgdW5jb25kaXRpb25hbFwiKTtcbiAgICAgIC8vaW5zaWRlIEJvb2sgVHlwZVxuICAgICAgaWYgKGNRdWVzdGlvbi50eXBlID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5xdWVzdGlvbk51bWJlciAhPSc2Jykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGJvb2tcIik7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhvcHQudHlwZSk7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9b3B0MS5uZXh0UXVlc3Rpb24gfHwgY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdFbHNlJyt0aGlzLnJlY29yZElkKVxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24udHlwZSA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPT0nNicgKSB7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpe1xuICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gb3B0MS5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiBcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIGVsc2UgdG8ga2VlcCB0aGUgYXNzaWdubWVudCBkZWZhdWx0XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgIH1cbiBcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICAvLyBDYWxsaW5nIHRoZSBwcm9ncmVzIGJhciB1cGRhdGUgZnVuY3Rpb25cbiAgICB0aGlzLmFuc3dlckNvdW50Kys7XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuIFxuIFxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuIFxuICAgIGlmICh0aGlzLnJlY29yZElkKSB7XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnJlY29yZElkKTtcbiAgICAgIHRoaXMucG9wID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3AgPSBmYWxzZTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuIFxuICAgICAgdGhpcy5yZXNldEZsYWcodHlwKTtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gbnVsbDtcbiBcbiAgICAgIC8vIFNob3cgU3VtbWFyeVxuICAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uU3RhY2spIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgUXVlc3Rpb24gPT4gJyArIHEpO1xuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcbiAgICAgICAgaWYgKGFuc1dyYXApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBBbnN3ZXIgZm9yICcgKyBhbnNXcmFwLnF1ZXNJZCArICcgb2YgdHlwZSAnICsgYW5zV3JhcC5xVHlwKTtcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xuICAgICAgICAgICAgdmFyIG5ld1N0ciA9ICcnO1xuICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIGFuc1dyYXAuYW5zVmFsdWUuc3BsaXQoJ0BAIyMkJCcpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xuICAgICAgICAgICAgICAvLyAgaWYoYW5zU3RyMS5pbmNsdWRlcygnYW5zd2VyU3RyaW5nJykpeyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgLy8gIGFuc1N0cjEgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgICAgICAgICAvLyAgfVxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gYW5zU3RyMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSAnOyAnICsgYW5zU3RyMTsgIC8vY29tbWEoLCkgY2hhbmdlZCBhcyBzZW1pIGNvbG9uKDspIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSgsKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyhhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgYXR0IG9mIHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5zdGFydHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDEsIG5ld1N0ci5sZW5ndGgpIDogKG5ld1N0ci5lbmRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygwLCBuZXdTdHIubGVuZ3RoIC0gMSkgOiBuZXdTdHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5zV3JhcC5hbnNWYWx1ZSA9IG5ld1N0cjtcbiAgICAgICAgICAgIGFuc1dyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgQ2hlY2sgaWYgdGhlIHN1bW1hcnkgYWxyZWFkeSBjb250YWlucyBhbiBlbnRyeSBmb3IgdGhlIHNhbWUgcXVlc0lkXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdBbnNXcmFwID0gdGhpcy5zdW1tYXJ5LmZpbmQoaXRlbSA9PiBpdGVtLnF1ZXNJZCA9PT0gYW5zV3JhcC5xdWVzSWQpO1xuICAgICAgICAgIGlmIChleGlzdGluZ0Fuc1dyYXApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGV4aXN0cywgdXBkYXRlIHRoZSBhbnNWYWx1ZSBhbmQgbXlWYWxcbiAgICAgICAgICAgIGV4aXN0aW5nQW5zV3JhcC5hbnNWYWx1ZSA9IGFuc1dyYXAuYW5zVmFsdWU7XG4gICAgICAgICAgICBleGlzdGluZ0Fuc1dyYXAubXlWYWwgPSBhbnNXcmFwLm15VmFsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGV4aXN0LCBwdXNoIHRoZSBhbnNXcmFwIHRvIHRoZSBzdW1tYXJ5IGFycmF5XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnNXcmFwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5iYWNraWNvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2soKSB7XG4gICAgdGhpcy5iYWNrID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5wb3AgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uYmFja1RyYWNraW5nSWQpO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgaWYoY1F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyID09JzEnKXtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5iYWNrKTtcbiAgICB9XG4gXG4gXG4gICAgdGhpcy5hbnN3ZXJDb3VudC0tO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICBpZiAodGhpcy5zdW1tYXJ5KSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdzdW1tYXJ5IHRydWUnKTtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgIH1cbiAgICBpZih0aGlzLnN1bW1hcnlEYXRhKXtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPVtdO1xuICAgIH1cbiBcbiAgICAvLyBSZWFkIHRoZSBwcmV2aW91cyBxdWVzdGlvbiBmcm9tIERCXG4gICAgLy8gVkQgZGlzYWJsZWRcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCkpO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmVkaXQpO1xuICB9XG4gXG4gIC8vdXBkYXRpbmcgc3RhdHVzIG9uY2UgUSZBIGNvbXBsZXRlZC5cbiBcbiAgcHJpdmF0ZSB1cGRhdGVBbnN3ZXJCb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXJCb29rJywnVXBkYXRlJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIGxldCBwYXJhID0ge1xuICAgICAgICBkYXRhVHlwZTogXCJBbnN3ZXJCb29rXCIsXG4gICAgICAgIG9wZXJhdGlvbjogXCJVcGRhdGVcIixcbiAgICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICAgIH1cbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEpXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICApO1xuICAgIH1cbiAgfVxuIFxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBsZXQgZGF0YSA9IHJlc3BvbnNlO1xuICAgIGlmKGRhdGEpe1xuICAgICAgdGhpcy5oYW5kbGVTdWJtaXQuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuYWJJdGVtLnN0YXR1cyA9IFwiQ29tcGxldGVkXCI7XG4gICAgICB0aGlzLmRlbGV0ZUFuc3dlcnMoZGF0YS5BbnN3ZXJCb29rKVxuICAgIH1cbiAgfTtcbiBcbiAgLy8gVkQgZm9yIGRlbGV0ZSBhbnN3ZXJzXG4gIGRlbGV0ZUFuc3dlcnMoYW5zd2VyYm9vayl7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpe1xuICAgICAgaWYoYW5zd2VyYm9vayAmJiBhbnN3ZXJib29rLnN0YXR1cyA9PSAnQ29tcGxldGVkJyl7XG4gICAgICAgIGNvbnN0IGFuc0Jvb2tJZCA9IGFuc3dlcmJvb2suaWQ7XG4gICAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdkZWxldGUnLGFuc0Jvb2tJZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGEpPT57XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzRGVsZXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBWRCBmb3IgZGVsZXRlIGFuc3dlcnNcbiAgcHJpdmF0ZSBzdWNjZXNzRGVsZXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgaWYocmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyl7XG4gICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UubWVzc2FnZSk7XG4gICAgfWVsc2Uge1xuICAgICBjb25zb2xlLmVycm9yKCdlcnJvcicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgIH1cbiB9XG5cbiBwcml2YXRlIGZhaWx1cmV1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnc3RhdHVzIGZhaWxlZCcpXG4gfTtcblxuIHByaXZhdGUgcmVhZFF1ZXN0aW9uQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uQm9vaycsJ3JlYWQnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayhKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBNUiAzMEpBTjI0IC0gUGFzc2luZyBmbGFnIGZyb20gTkdOWFRcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgbGV0IHBhcmExID0ge1xuICAgICAgZGF0YVR5cGU6IFwiUXVlc3Rpb25Cb29rXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgLy8gLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcClcbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTEpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICApO1xuICAgfVxuIH1cbiBwcml2YXRlIHN1Y2Nlc3NSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWRCb29rJyk7XG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICBpZihyZXNwb25zZSAhPSBudWxsIHx8IHJlc3BvbnNlICE9IHVuZGVmaW5lZCl7XG4gICAgIHRoaXMucWJJdGVtID0gcmVzcG9uc2UucXVlc3Rpb25ib29rO1xuICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG4gICAgIHRoaXMuaGFuZGxlQm9vay5lbWl0KHJlc3BvbnNlKTtcblxuICAgfVxuICAvLyBjb25zb2xlLmxvZygncmVhZGluZ1F1ZXN0aW9uIHVzaW5nICcgKyB0aGlzLnFiSXRlbSk7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIlBlbmRpbmdcIikge1xuICAgICBpZiAoXG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2VycyA9PSBudWxsIHx8XG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2Vycy5sZW5ndGggPT0gMFxuICAgICApIHtcbiAgICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnFiSXRlbS5maXJzdFF1ZXN0aW9uKTtcbiAgICAgfSBlbHNlIHtcbiAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xuICAgICAgIHZhciBsYXN0UXVlc3Rpb25JZCA9IFwiXCI7XG5cbiAgICAgICBmb3IgKHZhciBhbnNPYmplY3Qgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgbGFzdFF1ZXN0aW9uSWQgPSBhbnNPYmplY3QucXVlc0lkO1xuXG4gICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QucXVlc0lkKTtcblxuICAgICAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIHtcbiAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnNPYmplY3QucXVlc1ZhbHVlLFxuICAgICAgICAgICBhbnNWYWx1ZTogYW5zT2JqZWN0LmFuc1ZhbHVlLFxuICAgICAgICAgICBxdWVzSWQ6IGFuc09iamVjdC5xdWVzSWQsXG4gICAgICAgICAgIHFUeXA6IGFuc09iamVjdC5xVHlwLFxuICAgICAgICAgICBncm91cFRleHQ6YW5zT2JqZWN0Lmdyb3VwVGV4dCxcbiAgICAgICAgIH0pO1xuXG4gICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjaylcbiAgICAgICAgIGlmIChhbnNPYmplY3QucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICB2YXIgYXYxID0gYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAvLyAvL2NvbnNvbGUubG9nKFwiYm9vayBsb2dcIik7XG5cbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJib29raWRcIiArIGF2MVswXSk7XG4gICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIFtcbiAgICAgICAgICAgICB7IGF0dGFjaG1lbnROYW1lOiBhdjFbMV0sIGF0dGFjaG1lbnRJZDogYXYxWzBdIH0sXG4gICAgICAgICAgIF0pO1xuICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgIH0gZWxzZSBpZiAoYW5zT2JqZWN0LnFUeXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJpbnNpZGUgaWZcIik7XG4gICAgICAgICAgIHZhciBhdHRMaXN0O1xuICAgICAgICAgICB2YXIgYXR0O1xuICAgICAgICAgICBmb3IgKHZhciBhdHRWYXIgb2YgYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICAgICAgIHZhciBhdHRJZE5hbWUgPSBhdHRWYXIuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnROYW1lID0gYXR0SWROYW1lWzFdO1xuICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50SWQgPSBhdHRJZE5hbWVbMF07XG4gICAgICAgICAgICAgYXR0TGlzdC5wdXNoKGF0dCk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwgYXR0TGlzdCk7XG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgfVxuICAgICAgIH1cblxuICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcbiAgICAgICAvLyBSZWFkIHRoZSBsYXN0IGFuc3dlcmVkIHF1ZXN0aW9uXG4gICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJDb21wbGV0ZWRcIikge1xuICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXG4gICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XG4gICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xuICAgICBpZih0aGlzLnNlcnYgIT0gJ2FwaScpe1xuICAgICAgLy8gVkQgMzFOT1YyNCB3cmFwcGVyIGNoYW5nZXNcbiAgICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgIGlmIChhbnN3ZXIucVR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgICAgICB2YXIgZmlsZXMgPSBcIlwiO1xuICAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcbiAgICAgICAgICAgdmFyIGZpbGVMaXN0ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgZm9yICh2YXIgZmlsZUlkTmFtZSBvZiBmaWxlTGlzdCkge1xuICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XG4gICAgICAgICAgICAgaWYgKGZJbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVzICsgXCIgLFwiICsgZmlsZU5hbWVbMV07XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgIGZJbmRleCsrO1xuICAgICAgICAgICB9XG5cbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxuICAgICAgICAgICB9O1xuICAgICAgICAgLy8gIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICAvKiAgdmFyIHF1ZXNObz0wO1xuICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnbGluZSAxMjIzJyk7XG4gICAgICAgICAgICAgZm9yICh2YXIgYnFBbnN3ZXJWYWx1ZSBvZiBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLnF1ZXN0aW9uVGV4dC5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gZ3JvdXBUZXh0OmFuc3dlci5xdWVzdGlvblRleHQsXG4gICAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogIFwiJmx0O3AmZ3Q7XCIrIHF1ZXNWYWx1ZVtxdWVzTm9dK1wiJmx0O3AmZ3Q7XCIsXG4gICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBicUFuc3dlclZhbHVlLFxuICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgIHF1ZXNObysrO1xuICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSovXG4gICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgdmFyIGFuc3dlcnZhbHVlcyA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd2YWx1ZScpXG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxuICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VydmFsdWVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXG4gICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2YXIgYW5zMSA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICB9O1xuICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuXG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBmYWlsdXJlUmVhZEJvb2snKTtcbiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiB9O1xuXG4gcHJpdmF0ZSByZWFkQW5zd2VyYm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgIHRoaXMudGtuLFxuICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxuICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXG4gICAgICk7XG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgbGV0IHBhcmEyID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQW5zd2VyQm9va1wiLFxuICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcbiAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4vLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEyKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgKTtcbiAgIH1cbiB9XG5cblxuIHByaXZhdGUgc3VjY2Vzc0Fuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5hbnN3ZXJzKSB7XG4gICAgICAgdmFyIGF2ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgIHZhciBhbnN3ZXJzID0geyBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsIGFuc1ZhbHVlOiBhdiwgZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQgfTtcbiAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgIH1cbiAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUFuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuIH07XG5cbiBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAoZGF0YSk9PntcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgdGhpcy5zdWNjZXNzUmVhZChKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgfVxuICAgICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIC8vIC8vIFZEIDE1RkVCMjQgLSBtYWtlIGNyZWF0ZUFuc3dlckJvb2tGbGFnIGZhbHNlIG9ubHlcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMiA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIlF1ZXN0aW9uXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMildLFxuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICApO1xuICAgfVxuIH1cblxuIHByaXZhdGUgc3VjY2Vzc1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCcpO1xuICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgLy8gSEEgMDJGRUIyNCBGb3IgdGVzdGluZyBmb3IgdXNlZCB0aGlzIGFuZCBpbiBmdXR1cmUgaXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aXRoIHN0YXRpYyBkYXRhXG4gICAvLyB2YXIgYWIgPSBbJ2ZpcnN0JywnbGFzdCcsJzEyMycsJzEyLTEyLTIwMDAnLCcyMicsJ01hbGUnLCcxMiBjcm9zcyAxJywnRW1Db250YWN0JywnOTg3NjUnLCdBJywnU2luZ2xlJ107XG4gICAvLyBmb3IoY29uc3QgW2luZGV4LGl0ZW1dIG9mIHJlc3BvbnNlLnF1ZXN0aW9uLnN1YlF1ZXN0aW9ucy5lbnRyaWVzKCkpe1xuICAgLy8gICBpdGVtLmlucHV0ID0gYWJbaW5kZXhdO1xuICAgLy8gfVxuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuXG4gICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgfVxuICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcblxuICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PT0gJ0FscGhhbnVtZXJpYycpe1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gdHJ1ZTtcbiAgIH1cblxuICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IHRoaXMucXVlc3Rpb25JdGVtLmlkO1xuICAgdGhpcy5oYW5kbGVQYWdlLmVtaXQodGhpcy5xdWVzdGlvbkl0ZW0udHJhY2tpbmdJZCk7XG4gICAvLyBIYW5kbGUgdGhlIHN1YlF1ZXN0aW9uIG9wdGlvbnNcbiAgIGlmIChyZXNwb25zZS5zcU9wdGlvbnMpIHtcbiAgICAgLy92YXIgbmV3UmVjb3JkcyA9IFtdO1xuICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucykge1xuICAgICAgIC8vY29uc29sZS5sb2cocS5OYW1lKTtcbiAgICAgICB2YXIgc3EgPSByZXNwb25zZS5zcU9wdGlvbnNbcS5pZF07XG4gICAgICAgaWYgKHNxKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdmb3VuZCBvcHRpb25zIGZvciBzdWJxdWVzdGlvbiAnICsgcS5OYW1lKTtcbiAgICAgICAgIGlmICghcS5vcHRpb25zKSB7XG4gICAgICAgICAgIHEub3B0aW9ucyA9IHNxLm9wdGlvbnM7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG4gICB9XG4gICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgdGhpcy5pbm5lcmh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50XG4gICApO1xuICAgdGhpcy50cmFja0lkKCk7XG4gfTtcblxuIHRyYWNrSWQoKSB7XG4gICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS50cmFja2luZ0lkO1xuICAgLy9jb25zb2xlLmxvZygndHJhY2tJZC1xdWVzdGlvbicrcXRyYWNrSWQpO1xuIH1cblxuIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgc2F2ZUFuc3dlciA9ICgpID0+IHtcbiAgIC8vIFNldCB0aGUgQW5zd2VyIE51bWJlciBiYXNlZCBvbiB0aGUgUXVlc3Rpb24gU3RhY2sgTGVuZ3RoXG4gICBpZiAodGhpcy5pbnBWYWx1ZSAhPSBcIi5cIikge1xuICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gbnVsbDtcbiAgIH1cbiAgIHRoaXMuYW5zd2VyV3JhcC5hbnNOdW1iZXIgPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoICsgMTtcblxuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkFuc3dlclwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyJywnY3JlYXRlJyxKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAoZGF0YSk9PntcbiAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzU2F2ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMyA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkFuc3dlclwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTMpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgKTtcbiAgIH1cbiB9O1xuXG4gaHRtbERlY29kZShpbnB1dCkge1xuICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xuICAgcmV0dXJuIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG4gfVxuXG4gcHJpdmF0ZSBzdWNjZXNzU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAvL3RoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KHJlc3BvbnNlLmFuc3dlci5xdWVzSWQsIHJlc3BvbnNlLmFuc3dlcik7XG4gICB9IGVsc2Uge1xuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPSByZXNwb25zZS5lcnJvci5lcnJvck1zZztcbiAgIH1cbiAgIGlmKCF0aGlzLmJhY2tCdXR0b25GbGFnKXtcbiAgICAgdGhpcy5uZXh0KCk7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVNhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlU2F2ZScpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgcHJvY2Vzc1F1ZXN0aW9uID0gKCkgPT4ge1xuICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XG4gICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgdGhpcy5wb3AgPSB0cnVlO1xuXG4gICAvLyBpZighdGhpcy5iYWNrKXtcbiAgIC8vICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKVxuICAgLy8gfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgaWYgKCF0aGlzLmJhY2spIHtcbiAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpO1xuICAgICB9XG4gICAgIHRoaXMuYmFjayA9IGZhbHNlO1xuICAgICBpZiAodGhpcy5xdWVzdGlvbk5hbWVbMF0gPT09IHRoaXMucXVlc3Rpb25OYW1lWzFdKSB7XG4gICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgIH1cblxuICAgICB0aGlzLmN1cnJlbnROYW1lID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZTtcbiAgICAgdGhpcy5wYXRocXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uTmFtZS5pbmRleE9mKHRoaXMuY3VycmVudE5hbWUpO1xuICAgICB0aGlzLnBvc3NpYmlsaXRpZXMgPSB0aGlzLnFiSXRlbS5wb3NzaWJpbGl0aWVzO1xuICAgfVxuXG4gICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XG4gICB0aGlzLmRheSgpO1xuICAgLy9jb25zb2xlLmxvZygncHJvY2Vzc2luZyBxdWVzdGlvbiAnICsgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSArICcgZXhpc3RpbmcgYW5zd2VycyBhcmUgJyArIHRoaXMuYW5zd2VyTWFwLnNpemUpOyAvLyA9PiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkl0ZW0pKTtcblxuICAgLy8gU2V0IHRoZSBGbGFncyB0byBzaG93IHJpZ2h0IGZpZWxkc1xuICAgdGhpcy5zZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgLy9jb25zb2xlLmxvZygnQWZ0ZXIgdGhlIHNldEZsYWcgbWV0aG9kIGR0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuXG4gICAvLyBDaGVjayB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gYW5zd2VyTWFwXG4gICBpZiAodGhpcy5hbnN3ZXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImV4aXN0aW5nIGFuc3dlciBmb3VuZCBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZVwiKTtcbiAgICAgdmFyIGVBbnN3ZXIgPSB0aGlzLmFuc3dlck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIHRoZSBNYXBcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IGVBbnN3ZXIuYW5zVmFsdWU7XG4gICAgIC8vY29uc29sZS5sb2coJ2lucFZhbHVlIGhhcyBiZWVuIHNldCB0byAnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLmF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c01hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICB9XG4gICB9IGVsc2Uge1xuICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgcmVtb3ZpbmcgYXR0YWNobWVudCBhcnJheScpO1xuICAgICB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICB9XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgIGlmKHRoaXMuc3BsQ0NCYWNrQ2xpY2sgJiYgdGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLmluY2x1ZGVzKCdFUycpKXtcbiAgICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaWYgY29uZCcpO1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gZmFsc2U7XG4gICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoJ0VTJywnJyk7XG4gICB9XG5cbiAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XG4gICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgZXhwZWN0ZWQgYm9va0ZsYWcgY29uZCcpO1xuICAgICAvL2NvbnNvbGUubG9nKCdkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcbi8vICBIQSAyMEZFQjI0IExhYmVsIEZpeFxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IGVsZW1lbnQucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICB9KTtcbiAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xuICAgICAvLyBTZXQgdGhlIExvY2FsU3ViUXVlc3Rpb25zXG4gICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgbGlzdCBmbGFnJyk7XG4gICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgLy8gY29uc29sZS5sb2codGhpcy5hYkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICBpZighdGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSl7XG4gICAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgICAgfVxuICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgdW5leHBlY3RlZCBkdEZsYWcgY29uZCcpO1xuICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IFwiXCI7XG4gICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBcIlwiO1xuICAgICB0aGlzLnNlbERhdGUgPSBcIlwiO1xuICAgICAvLyAyMDIxLTUtMTZUMDA6MDBcbiAgICAgaWYgKHRoaXMuZGF0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgdGhpcy5zZWxEYXRlID0gdGhpcy5kYXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRob3VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuc2VsZWN0ZWRob3VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNlbGVjdGVkbWludXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgdGhpcy5ob3Vycy5wdXNoKFxuICAgICAgICAgXCIxM1wiLFxuICAgICAgICAgXCIxNFwiLFxuICAgICAgICAgXCIxNVwiLFxuICAgICAgICAgXCIxNlwiLFxuICAgICAgICAgXCIxN1wiLFxuICAgICAgICAgXCIxOFwiLFxuICAgICAgICAgXCIxOVwiLFxuICAgICAgICAgXCIyMFwiLFxuICAgICAgICAgXCIyMVwiLFxuICAgICAgICAgXCIyMlwiLFxuICAgICAgICAgXCIyM1wiLFxuICAgICAgICAgXCIwMFwiXG4gICAgICAgKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMuc2xpY2UoMCwgMTIpO1xuICAgICB9XG4gICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgdmFyIGR0VmFsID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIlRcIik7XG4gICAgICAgdmFyIGR0dmFsMCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdFZhbFswXTtcbiAgICAgICB0aGlzLmlucFZhbHVlID0gZHR2YWwwWzBdO1xuXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0dmFsMFsxXTtcbiAgICAgfVxuICAgICBpZiAoXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlQmFja3dhcmQgfHxcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVGb3J3YXJkXG4gICAgICkge1xuICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlRm9yd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgIH07XG4gICAgICAgfVxuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgdGhpcy5maWxlVUkoKTtcbiAgICAgLy8gbG9naWNcbiAgICAgdGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbiA9XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucz8uc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24pO1xuICAgfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgfVxuIH07XG5cbiBzZXRGbGFnKHR5cCkge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHNldEZsYWcgZm9yICcgKyB0eXApO1xuXG4gICBpZiAodHlwKSB7XG4gICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgIHRoaXMudGV4dEZsYWcgPSB0cnVlO1xuXG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xuICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IHRydWU7XG4gICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcbiAgICAgICB9Ki9cbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgdGhpcy5yYWRpb0ZsYWcgPSB0cnVlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IHRydWU7XG4gICAgLy8gIH0gXG4gICAgIGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcbiAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9XG4gICB9XG4gfVxuXG4gcmVzZXRGbGFnKHR5cCkge1xuICAgaWYgKHR5cCkge1xuICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICB0aGlzLnRleHRGbGFnID0gZmFsc2U7XG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKSB7XG4gICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgIHRoaXMuZW1haWxGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgdGhpcy5maWxlRmxhZyA9IGZhbHNlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IGZhbHNlO1xuICAgIC8vICB9IFxuICAgICBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICB0aGlzLnRhRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICB0aGlzLnJhZGlvRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgIHRoaXMuYm9va0ZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICB0aGlzLmxpc3RGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgIH1cbiAgIH1cbiB9XG5cbiBzZXRPcHRpb25zKHJlY29yZHMpIHtcbiAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XG4gICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xuICAgICBvdi5pZCA9IG9wdC5pZDtcbiAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xuICAgICBvdi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgb3YubmV4dFF1ZXN0aW9uID0gb3B0Lm5leHRRdWVzdGlvbjtcbiAgICAgb3YuY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgIGlmIChcbiAgICAgICB0aGlzLmlucFZhbHVlICYmXG4gICAgICAgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKS5pbmNsdWRlcyhvcHQudmFsdWUpXG4gICAgICkge1xuICAgICAgIG92LmNoZWNrZWQgPSB0cnVlO1xuICAgICB9XG5cbiAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XG4gICB9XG4gfVxuXG4gLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcbiAgIGNvbnNvbGUubG9nKCdpbnNpZGUgY2hpbGRFdmVudENhcHR1cmUgJyk7XG4gICBjb25zb2xlLmxvZyhldmVudCk7XG4gICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgLy8gSEEgMzEtSkFOLTI0IEFzc2lnbiB2YWx1ZXMgdG8gZHJvcGRvd24gcXVlc3Rpb25cbiAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XG4gICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXG4gfVxuXG4vLyAgUlMgMDZKQU4yNVxuLy8gZm9yIHJpY2h0ZXh0XG4gaGFuZGxlUmljaFRleHRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAvLyB0aGlzLmlucFZhbHVlID0gdmFsdWU7XG4gIC8vIHRoaXMuY2xlYXJFcnJvcigpOyBcbiAgICBjb25zb2xlLmxvZygnUmljaCBUZXh0IENoYW5nZSBDYXB0dXJlZDonLCB2YWx1ZSk7XG59XG5cbiBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzZXRTdWJRdWVzdGlvbnMnKTtcbiAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xuICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICB2YXIgYUluZGV4ID0gMDtcbiAgICAgLy8gc2VhcmNoIGNoYW5nZWQgYXMgc2VtaSBjb2xvbiBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWFcbiAgICAgaWYgKCh0aGlzLmlucFZhbHVlLnNlYXJjaChcIjsgXCIpID09IC0xKSkge1xuICAgICAgLy8gY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpOyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyAnQEAjIyQkJyA7XG4gICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwIGZvciAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfSBlbHNlIHtcbiAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIjsgXCIpKSB7XG4gICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIHNldHRpbmcgdmFsdWVzIGZyb20gaW5wdmFsdWUgcWEgbWFwIGFyZScpO1xuICAgLy8gY29uc29sZS5sb2cocWFNYXApO1xuXG4gICBmb3IgKHZhciBxdWVzIG9mIHJlY29yZHMpIHtcbiAgICAgaWYgKHF1ZXMudHlwZSA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy52YWx1ZU5hbWUxKTtcbiAgICAgfVxuXG4gICAgIHZhciBhbnMgPSAnJztcbiAgICAgaWYgKHFhTWFwLmhhcyhxdWVzLnF1ZXN0aW9uTnVtYmVyKSkge1xuICAgICAgICAgcXVlcy5pbnB1dCA9IHFhTWFwLmdldChxdWVzLnF1ZXN0aW9uTnVtYmVyKTtcbiAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBmZXRjaGluZyBtYXAgdmFsdWVzJyk7XG4gICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgIGlmKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykgPiAwKXtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Fuc3dlciBzdXBwb3NlZCB0byBiZSB0cmltbWVkJyk7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgICBhbnMgPSBxdWVzLmlucHV0LnN1YnN0cmluZyhxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKzYscXVlcy5pbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhbnMpO1xuICAgICAgICAgICBxdWVzLmlucHV0ID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcoMCxxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKTtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICB9XG4gICAgICAgfVxuXG4gICAgIGlmICgocXVlcy50eXBlID09PSBcIkRhdGVcIikgJiYgKHF1ZXMuaXNEYXRlQmFja3dhcmQgfHwgcXVlcy5pc0RhdGVGb3J3YXJkKSkge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSBiYWNrd2FyZC9mb3J3YXJkIGNvbmQnKTtcbiAgICAgICBpZiAocXVlcy5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBpc0RhdGVCYWNrd2FyZCcpO1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAocXVlcy5pc0RhdGVGb3J3YXJkID09PSB0cnVlKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlzRGF0ZUZvcndhcmQnKTtcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XG4gICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyk7XG4gICAgIH1cblxuICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHF1ZXMpO1xuICAgICBmb3IodmFyIGk9MDsgaTx0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7aSsrKXtcbiAgICAgICAvLyB0byBzaG93L2hpZGUgdGhlIGRlcGVuZGVudCBkcm9wZG93biBvbmx5IGZpZWxkIHVzaW5nIHRoZSBkcm9wRG93bk9ubHkgYm9vbGVhblxuICAgICAgIGlmKHRoaXMuc3ViUXVlc3Rpb25zW2ldLnNpemUgPT0gNCl7XG4gICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSB0cnVlO1xuICAgICAgIH1lbHNle1xuICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gZmFsc2U7XG4gICAgICAgfVxuICAgICB9XG4gICAgIGlmKGFucyAhPSAnJyl7XG4gICAgICAgZm9yKHZhciBhbiBvZiAoYW5zLnNwbGl0KCckJEBAIyMnKSkpe1xuICAgICAgICAgdmFyIHNRID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgICAgICBPYmplY3QuYXNzaWduKHNRLHF1ZXMpO1xuICAgICAgICAgc1EuaW5wdXQgPSBhbjtcbiAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2goc1EpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgaWYgKHRoaXMudmFsdWVOYW1lMSAhPSBudWxsICYmIHRoaXMudmFsdWVOYW1lMS5sZW5ndGggPiAwKSB7XG4gICAgIHRoaXMuYm9va0ZsYWdBY2NlcHQgPSB0aGlzLnZhbHVlTmFtZTEuc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3ViUXVlc3Rpb25zKTtcbiAgIH1cbiAgIHRoaXMuc3RydWN0TG9jYWxTdWJRdWVzdGlvbihudWxsKTtcbiAgIC8vIEhBIDAyRkVCMjQgT24gRWRpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB1c2lpbmcgdGhpc1xuICAgaWYodGhpcy5hbGxJbnB1dFZhbHVlcy5sZW5ndGggPiAwKXtcbiAgICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBmb3IobGV0IHNpbmdsZUlucHV0IG9mIHRoaXMuYWxsSW5wdXRWYWx1ZXMpe1xuICAgICAgICAgaWYoZWxlbWVudC5pZCA9PSBzaW5nbGVJbnB1dC5pZCl7XG4gICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSBzaW5nbGVJbnB1dC5pbnB1dDtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH0pO1xuICAgfVxuIH1cblxuIG9wdGlvbkNoYW5nZShzZWxWYWx1ZSkge1xuICAgbGV0IHJhZGlvVHJhY2tpbmdJZDogc3RyaW5nID0gXCJcIjtcbiAgIGZvciAodmFyIG9wdCBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKSB7XG4gICAgIC8vY29uc29sZS5sb2coJ29wdGlvbkNoYW5nZSBUcmFja2luZ0lkJytvcHQudHJhY2tpbmdJZCk7XG4gICAgIGlmIChvcHQudmFsdWUgPT0gc2VsVmFsdWUpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgaWYnK29wdC50cmFja2luZ0lkKVxuICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC50cmFja2luZ0lkO1xuICAgICB9XG4gICB9XG5cbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xuICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XG5cbiAgIHRoaXMuaW5wVmFsdWUgPSBzZWxWYWx1ZTtcbiB9XG5cbiBjbGVhckVycm9yKCkge1xuICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbnVsbDtcbiAgIH1cbiB9XG5cbiBjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXNJZCkge1xuICAgcXVlc0lkLmVycm9yID0gbnVsbDtcbiB9XG5cbiBpbnB1dFZhbGlkYXRlKGUpIHtcbiAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7XG4gICAvLyBPbmx5IEFTQ0lJIGNoYXJhY3RlciBpbiB0aGF0IHJhbmdlIGFsbG93ZWRcbiAgIHZhciBBU0NJSUNvZGUgPSAoZS53aGljaCkgPyBlLndoaWNoIDogZS5rZXlDb2RlO1xuICAgaWYgKEFTQ0lJQ29kZSA+IDMxICYmIChBU0NJSUNvZGUgPCA0OCB8fCBBU0NJSUNvZGUgPiA1Nykpe1xuICAgICByZXR1cm4gZmFsc2U7XG4gICB9ZWxzZXtcbiAgICAgcmV0dXJuIHRydWU7XG4gICB9XG4gfVxuXG4gQ0NPbkNoYW5nZShpbnBWYWx1ZTogc3RyaW5nKSB7XG5cbiAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cblxuIH1cblxuIGlzTm90VmFsaWRBY2NOdW1iZXIoczogc3RyaW5nKSB7XG4gICBzID0gcy5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xuICAgcyA9ICdFUycgKyBzO1xuICAgdmFyIGlzTm90VmFsaWRTdHIgPSBmYWxzZTtcbiAgIGlmIChzLmxlbmd0aCA9PSAyNCkge1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICBpZiAoaSA8PSAxICYmIC9bYS16QS1aXS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBjaGFyOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2UgaWYgKGkgPiAxICYmIC9bMC05XS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBudW1lcmljOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgY2hhclwiKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH0gZWxzZSB7XG4gICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgYWNjIG51bWJlclwiKTtcbiAgIH1cbiAgIHJldHVybiBpc05vdFZhbGlkU3RyO1xuIH1cblxuIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcbiAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKTtcbiAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICBzcS5lcnJvciA9IG51bGw7XG4gICB9XG4gfVxuXG4gdXBsb2FkRmlsZShldmVudCxxdWVzPzphbnkpIHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSB1cGxvYWQnKTtcbiAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgdGhpcy5maWxlVHlwZUluY29ycmVjdCA9IGZhbHNlO1xuICAgdmFyIGxvY2FsID0gdGhpcztcbiAgIGxvY2FsLmF0dGFjaG1lbnQgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAvLyBWYWxpZGF0ZSB0aGUgZmlsZSBleHRlbnNpb25cbiAgIC8vY29uc29sZS5sb2cobG9jYWwuYXR0YWNobWVudCk7XG4gICBsZXQgZmlsZU5hbWVXaXRoVHlwZTogc3RyaW5nID1cbiAgICAgbG9jYWwuYXR0YWNobWVudCAmJiBsb2NhbC5hdHRhY2htZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgIGlmIChcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBnXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBuZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wZGZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBlZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWljXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBHXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBOR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QREZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBFR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlDXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUZcIilcbiAgICkge1xuICAgICBsb2NhbC5maWxlVHlwZUluY29ycmVjdCA9IHRydWU7XG4gICB9XG4gICAvLyBSZXR1cm4gd2hlbiB0aGUgZmlsZSB0eXBlIGlzIGluY29ycmVjdFxuICAgaWYgKGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0KSB7XG4gICAgIHJldHVybjtcbiAgIH1cbiAgIGxldCBmaWxlQ29udGVudDogYW55O1xuICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgIGZpbGVDb250ZW50ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQgPSBsb2NhbC5hdHRhY2htZW50LnNpemUgPiAzMjQyODgwOyAvL1ZhbGlkYXRpbmcgZmlsZSBzaXplXG4gICAgIC8vIFVwbG9hZCB0aGUgZmlsZSB0byBTYWxlc2ZvcmNlIHdoZW4gdGhlIGxpbWl0IGlzIHdpdGhpbiByYW5nZVxuICAgICBpZiAoIWxvY2FsLmZpbGVFeGNlZWRlZExpbWl0KSB7XG4gICAgICAgbGV0IGZpbGVXcmFwcGVyID0gbmV3IEF0dGFjaG1lbnRXcmFwcGVyKCk7XG4gICAgICAgZmlsZVdyYXBwZXIucGFyZW50SWQgPSBsb2NhbC5hYkl0ZW0uaWQ7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZU5hbWUgPSBsb2NhbC5hdHRhY2htZW50Lm5hbWU7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDtcbiAgICAgICBsb2NhbC5jcmVhdGVBdHRhY2htZW50KGZpbGVXcmFwcGVyKTtcbiAgICAgICBxdWVzLmlucHV0ID0gZmlsZVdyYXBwZXIuZmlsZU5hbWU7XG4gICAgIH1cbiAgIH07XG4gICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xuIH1cblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGxldCBjcmVhdGVkQXR0YWNobWVudDogQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KFxuICAgICByZXNwb25zZS5hdHRhY2htZW50SWQsXG4gICAgIHJlc3BvbnNlLmF0dGFjaG1lbnROYW1lLFxuICAgICB0aGlzLmF0dGFjaG1lbnQubGFzdE1vZGlmaWVkRGF0ZVxuICAgKTtcbiAgIHRoaXMuYXR0YWNobWVudHMucHVzaChjcmVhdGVkQXR0YWNobWVudCk7XG4gICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5hdHRhY2htZW50cyk7XG4gfTtcblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XG4gICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgIH1cbiAgIH1cbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlJyk7XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZScpO1xuIH07XG5cbiBoYW5kbGVTdWJtaXRDbGljaygpIHtcbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5zdWJtaXRUcmFja2luZ0lkKTtcbiAgIHRoaXMudXBkYXRlQW5zd2VyQm9vayh0aGlzLmFiSXRlbS5pZCk7XG4gfVxuXG4gaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uY2FuY2VsVHJhY2tpbmdJZCk7XG4gfVxuXG4gcHJpdmF0ZSBjcmVhdGVBdHRhY2htZW50ID0gKGZpbGVXcmFwcGVyOiBhbnkpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKV0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgIC8vICk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdjcmVhdGUnLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlKGVycm9yKTtcbiAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgIH1cbiAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgbGV0IHBhcmEzID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQXR0YWNobWVudFwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEzKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICk7XG4gICB9XG4gfVxuXG4gZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZykge1xuICAgdGhpcy5hdHRhY2htZW50SWQgPSBhdHRhY2htZW50SWQ7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJkZWxldGVBdHRhY2htZW50XCIpO1xuICAgdGhpcy5kZWxldGVTRkF0dGFjaG1lbnQoYXR0YWNobWVudElkKTtcbiB9XG5cbiBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2RlbGV0ZScsZmlsZUlkICxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgKGRhdGEpPT57XG4gICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGUoZXJyb3IpO1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhNCA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkF0dGFjaG1lbnRcIixcbiAgICAgIG9wZXJhdGlvbjogXCJkZWxldGVcIixcbiAgICAgIHBhcmFtMTogZmlsZUlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtmaWxlSWQsSlNPTi5zdHJpbmdpZnkocGFyYTQpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgKTtcbiAgIH1cbiB9XG5cbiBnZXRGaWxlTmFtZShmaWxlTmFtZXdpdGhJZGFuZFR5cGUpIHtcbiAgIC8vdHJ1bmNhdGUgZmlsZSBwYXRoXG4gICB2YXIgZmlsZU5hbWVXaXRoVHlwZSA9IGZpbGVOYW1ld2l0aElkYW5kVHlwZS5zdWJzdHIoXG4gICAgIGZpbGVOYW1ld2l0aElkYW5kVHlwZS5pbmRleE9mKFwiOjo6OlwiKSArIDRcbiAgICk7XG4gICByZXR1cm4gZmlsZU5hbWVXaXRoVHlwZTsgLy9maWxlTmFtZVdpdGhUeXBlLnJlcGxhY2UoL14oLiooXFwvfFxcXFwpKSguKykkLywgJyQzJyk7XG4gfVxuIGZpbGVVSSgpIHtcbiAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgfVxuIH1cblxuIC8vVXBkYXRlIGZ1bmN0aW9uIGZvciBjYXRlZ29yaXphdGlvblxuIC8vIHN0ZXBwZXJDYXRlZygpIHtcbiAvLyAgIHRoaXMuZmlyc3RGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gLy8gICAgIGZpcnN0Q3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG4gLy8gICB0aGlzLnNlY29uZEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAvLyAgICAgc2Vjb25kQ3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG5cbiAvLyB9XG5cbiAvLyBVcGRhdGUgRnVuY3Rpb24gZm9yIHRoZSBQcm9ncmVzcyBCYXJcbiB1cGRhdGVQcm9ncmVzcygpIHtcbiAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0JhciA9PT0gdHJ1ZSkge1xuICAgICBsZXQgaiA9IFtdO1xuICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XG4gICAgICAgdmFyIHBhdGhwb3NzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbaV0ucXVlc3Rpb25zKTtcbiAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XG4gICAgICAgICBqLnB1c2goaSk7XG4gICAgICAgICB0aGlzLmNoZWNrID0gdHJ1ZTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICB0aGlzLmNvdW50ID0galswXTtcbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPiAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICpcbiAgICAgICAgICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC9cbiAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9XG4gICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcbiAgIH1cbiB9XG5cbiB0b3duTmFtZShhcmVhKSB7XG4gICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBhcmVhLnRvd247XG4gICAvL2NvbnNvbGUubG9nKCd0aGlzIHZhbHVlPScrdGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiB9XG5cbiBnZXRUb3duTG9jYWwoKSB7XG4gICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcykge1xuICAgICAgIGlmIChcbiAgICAgICAgIHZhbC50b3duLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICApIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuIH1cblxuIGNsZWFyTGlzdCgpIHtcbiAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgfSwgNTAwKTtcbiB9XG5cbiBzZXRTZWFyY2hMaXN0V2lkdGgoKSB7XG4gICAvL3RvIHJlc2l6ZSBzZWFyY2ggbGlzdCBiYXNlZCBvbiB0aGUgc2NyZWVuIHNpemVcbiAgIGNvbnN0IHNlYXJjaEJveFdpZHRoID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXV0b2NvbXBsZXRlLWlucHV0XCIpLm9mZnNldFdpZHRoO1xuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLndpZHRoID0gc2VhcmNoQm94V2lkdGggKyBcInB4XCI7XG4gfVxuXG4gICBnZXRDb2RlKCl7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMuYWxsQWRkcmVzcykge1xuICAgICAgICAgaWYgKHZhbC56aXBDb2RlLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGgpID09IHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKSB7XG4gICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cbiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gICB9XG4gICBnZXRQb3N0YWxjb2RlKHZhbHVlKXtcbiAgICB0aGlzLnBsYWNlcz1bXTtcbiAgICB0aGlzLnByb3ZpbmNlPVtdO1xuICAgICB2YXIgcHJvdmluY2U7XG4gICAgIHZhciB0b3duO1xuICAgICB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9IHZhbHVlLnppcENvZGU7XG4gICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlLmNvdW50cnk7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzPVtdO1xuXG5cbiAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xuICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XG4gICAgICAgICB0aGlzLnBsYWNlcy5wdXNoKHZhbCk7XG4gICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xuICAgICAgICAgcHJvdmluY2UgPSB2YWwucHJvdmluY2VcbiAgICAgICAgIHRvd24gPSB2YWwudG93bjtcbiAgICAgICB9XG4gICAgIH1cbiAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xuXG4gICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlID1wcm92aW5jZTtcbiAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9IHRvd247XG4gICAgIH1lbHNlIGlmKHRoaXMucGxhY2VzLmxlbmd0aCA+MSB8fCB0aGlzLnBsYWNlcy5sZW5ndGggPT0wKXtcblxuICAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPScnO1xuICAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlPScnO1xuICAgICB9XG4gICB9XG4gICBjbG9zZURyb3Bkb3duKCkge1xuICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPT0gNSl7XG4gICAgICAgdGhpcy5nZXRQb3N0YWxjb2RlKHt6aXBDb2RlOnRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlfSk7XG4gICAgIH1cblxuICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0TGlzdCcpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIC8vUGx1cyBidXR0b24gaW1wbGVtZW50YXRpb24uXG4gIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24ocXVlczogTG9jYWxRdWVzdGlvbil7XG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24nKTtcbiAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDsgaSsrKXtcbiAgICAgICB2YXIgbG9jYWxTdWJRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlkID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaWQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5hbWUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OYW1lO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvbiA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvblRleHQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvblRleHQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnR5cGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS50eXBlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi50aXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5zdWJUaXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnN1YlRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pc09wdGlvbmFsID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaXNPcHRpb25hbDtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uZXJyb3JNZXNzYWdlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uZXJyb3JNZXNzYWdlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5uZXh0UXVlc3Rpb24gPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5uZXh0UXVlc3Rpb247XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmdyb3VwTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmdyb3VwTmFtZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvbk51bWJlcjtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uYWxsb3dlZEZpbGVFeHRlbnNpb25zID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pZCArIGk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlucHV0ID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaW5wdXQ7XG4gICAgICAgICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zLnB1c2gobG9jYWxTdWJRdWVzdGlvbik7XG4gICAgIH1cbiAvLyBjb25zb2xlLmxvZygnZmluYWwgbG9jYWwgc3ViIHF1ZXN0aW9ucycpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyA9IFtdO1xuIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBrZXkgbG9jYWxTdWJRTWFwIG1hcCcpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiB9XG5cbiBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XG4gICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb24pO1xuICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xuICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcoaW5kZXgrMSkpO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICB9ZWxzZXtcbiAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgIH1cbiAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcblxuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgLy9jb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gfVxuXG4gcmVtb3ZlQWRkcmVzcyhxdWVzVW5pcXVlSWQ6IHN0cmluZywgcU5hbWU6IHN0cmluZykge1xuICAgLy9jb25zb2xlLmxvZyhxdWVzVW5pcXVlSWQpXG4gICB2YXIgdmFsID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgIHZhciBrZXlpbmRleCA9IDA7XG5cbiAgIGZvcihsZXQgaT0wOyBpPHZhbC5sZW5ndGg7IGkrKyl7XG4gICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcbiAgICAgICBrZXlpbmRleCsrO1xuICAgICB9XG4gICB9XG5cbiAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkgJiYga2V5aW5kZXggPjEpe1xuICAgICB2YXIgcmVvcmRlciA9IHZhbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udW5pcXVlU3ViUUlkICE9PSBxdWVzVW5pcXVlSWQpXG4gICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxyZW9yZGVyKTtcbiAgICAga2V5aW5kZXgtLTtcbiAgIH1cbiB9XG5cbiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcbiAgIHJldHVybiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQoaWQpO1xuIH1cblxuIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXG5BZGQocXVlc3Rpb246IExvY2FsUXVlc3Rpb24pe1xuICAgdGhpcy5hZGRGbGFnID0gIGZhbHNlO1xuICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgdmFyIGluZGV4ICA9IGFycmEubGVuZ3RoO1xuICAgdmFyIGEgPSBhcnJhLnNsaWNlKC0xKS5wb3AoKTtcbiAgIHRoaXMuaW5kZXhDb3VudCAgPSBhLnF1ZXN0aW9uTnVtYmVyO1xuXG4gICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5kZXhDb3VudCA7IGkrKykge1xuICAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb25baV0pO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgIGFycmEuc3BsaWNlKGluZGV4Kyh0aGlzLmluZGV4Q291bnQtMSksIDAsIHF1ZXMpO1xuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgfVxuICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcbiB9XG5cbiBoYW5kbGVMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkscXVlczphbnkpIHtcbiAgIHF1ZXMuaW5wdXQgPSBsb2NhdGlvbjtcbiB9XG5cbiBzZWxlY3RlZElucHV0KGlucHV0OmFueSAscXVlczphbnkpe1xuICAgcXVlcy5pbnB1dCA9IGlucHV0O1xuIH1cblxuIGhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UodmFsdWUgOnN0cmluZyl7XG4gICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xuIH1cbiBnZXREYXRhKGRhdGE6YW55KXtcbiAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xuIH1cblxuIGRpc3BsYXlEYXRlKGRhdGVTZWxlY3RlZDogYW55LHF1ZXM6YW55KXtcbiAgIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZyB1c2luZyBtb21lbnQgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgcXVlcy5pbnB1dCA9IG1vbWVudChkYXRlU2VsZWN0ZWQudmFsdWUgLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpLnRvU3RyaW5nKCk7XG4gfVxuXG4gZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XG4gICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gfVxuXG4gZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuIH1cbiAvLyBTS1MxMUpVTjI1cmVtb3ZlIHRoZSBzcGVjaWFsIGNoYXJlY3RlcnMgYW5kIHRhZ3MgXG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OiBzdHJpbmcpIHtcbiAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICAgIHJldHVybiB1cGRhdGVkVGV4dDtcbiAgfVxufSIsIjwhLS0gY3VzdG9tIGxvYWRlciAtLT5cbjwhLS0gQmFjayBQcm9jZXNzaW5nIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiYmFja2ljb24gPT0gZmFsc2VcIiA+XG4gIDxkaXYgY2xhc3M9XCJiYWNraWNvblwiID5cbiAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiIFtjbGFzc109XCIgYWJJdGVtPy5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgPyAnc3VtbWFyeS12b2x2ZXInOidhcHAtYmFjazEnXCI+XG4gICAgPGltZyBjbGFzcz1cImljb24tYXJyb3ctYmFja1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1hcnJvdy1iYWNrLnBuZ1wiIGFsdD1cIlNjcm9sbCBkb3duXCI+IHt7IHFiSXRlbT8uYmFjayB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiAtLT5cblxuPCEtLSBRdWVzdGlvbiBIYW5sZGluZyAtLT5cbjwhLS0gVkQgcmVtb3ZlZCB1bndhbnRlZCBjb25kaXRpb24gLS0+XG48IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG48ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtXCIgY2xhc3M9XCJxdWVzdGlvbmRpdjEgcGFkZC1ib3R0b21cIj5cbiAgPCEtLSBQcm9ncmVzcyBCYXIgJiBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50aXRsZVwiPlxuICAgIDxoMT57eyBxdWVzdGlvbkl0ZW0/LnRpdGxlIH19PC9oMT5cbiAgICA8ZGl2Pnt7IHF1ZXN0aW9uSXRlbT8uc3ViVGl0bGUgfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQcm9ncmVzcyAmIEdyb3VwaW5nIC0tPlxuICA8ZGl2PlxuICAgIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmdyb3VwTmFtZSAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uYWxpZ246ICFxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHQtbGFyZ2VUaXRsZVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtZm9udDYgbXl0LXRleHQzXCI+XG4gICAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5ncm91cE5hbWUgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ICE9ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQ1IG15dC10ZXh0MVwiPnt7cXVlc3Rpb25JdGVtPy5zdWJUZXh0fX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ID09PSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250MTAgbXl0LXRleHQyXCI+e3txdWVzdGlvbkl0ZW0/LnN1YlRleHR9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDwhLS0gUXVlc3Rpb24gSGFuZGxpbmcgLS0+XG4gICAgPCEtLSBWRCAxMEF1ZzI0LSBxdWVzdGlvbiBubyAtLT5cbiAgPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uVGV4dCAmJiBxdWVzdGlvbkl0ZW0uc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgICA8c3Bhbj57e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25OdW1iZXJ9fS48L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cIm54dC1sYWJlbFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5pc1RpdGxlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgIT0gJ0Jvb2snICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzYnICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzknXCI+IFxuICAgICAgICA8aDMgY2xhc3M9XCJxdWVzdGlvbmFsaWduICBteXQtZm9udDMgbXl0LWFsaWduIG15dC10ZXh0NFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSB1bndhbnRlZCBzdHlsaW5nIGNsYXNzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxdWVzdGlvbkl0ZW0uaXNUaXRsZVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplJ1wiPlxuICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCIgPlxuICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgPT0gJ0Jvb2snXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyPT0nNidcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTMyMVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIFxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50eXBlID09ICdGaWxlJyBcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25OdW1iZXI9PSc5J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzQ1XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuICA8IS0tIEFkZGl0aW9uYWwgSW5mbyAtLT5cbiAgPCEtLSBUaGUgYmVsb3cgY29kZSBjYW4gYmUgd3JpdHRlbiBlZmZlY3RpdmVseSBuZXN0ZWQgbmdJZiBmb3IgUmljaCBUZXh0ICYgT3RoZXIgb253IGZvciBQcm9ncmVzcyBCYXIgLS0+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50ICYmIHFiSXRlbS5wcm9ncmVzc0JhclwiID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm54dC1hZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmFkZGl0aW9uYWxSaWNoQ29udGVudCAmJiAhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvZGl2XCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEcm9wZG93bi0tPlxuICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25GbGFnXCIgPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJueHRkcm9wZG93blwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnZHQtbGluZSBueHQtbXl0LWFsaWduMyBueHQtbXl0LWFsaWduMiBkcERvd24gbnh0LWRyb3Bib3ggZG93bjEgbXl0LWRyb3Bib3ggbXl0LWJvcmRlci1yIG15dC1mb250MSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgJ2N1c3RvbS1zZWxlY3QnOiAhcWJJdGVtPy5wcm9ncmVzc0JhclxuICAgICAgICB9XCIgY2xhc3M9XCJtci1zbS0yIGRkLWhlaWdodCBueHQtZHJvcGJveCBcIiAgaWQ9XCJkcm9wZG93blwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2hhbmdlKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCA/ICcjZmZmJyA6ICcnXG4gICAgICAgIH19XCIgc3R5bGUuY29sb3I9XCJ7eyBxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLm9wdGlvbnNcIiBjbGFzcz1cIm9wdGlvblwiIHZhbHVlPVwie3sgb3B0LnZhbHVlIH19XCI+XG4gICAgICAgICAge3sgb3B0LnZhbHVlIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiLlwiIGRpc2FibGVkIGhpZGRlbj57eydwbGVhc2VNYWtlQ2hvaWNlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tVkQgUmFkaW8gdXBkYXRlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicmFkaW9GbGFnIHx8IGRhdGFGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRoaXMucXVlc3Rpb25JdGVtLmVycm9yXCIgY2xhc3M9XCJueHQtZXJyb3ItbXNnXCI+IHt7IHF1ZXN0aW9uSXRlbT8uZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtY3VzdG9tLXJhZGlvLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zXCIgXG4gICAgICBbY2xhc3NdPVwiIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uIGludmFsaWQnIDogJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uJ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIFtpZF09XCJvcHQudmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIlxuICAgICAgICAgIG5hbWU9XCJpbnBWYWx1ZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LnZhbHVlKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwib3B0LnZhbHVlXCI+IHt7IG9wdC52YWx1ZSB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zLnJlY29yZHNcIiBjbGFzcz1cInJhZGlvIG54dC1yYWRpb09wdGlvblwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW9jb250YWluZXIgY29udGFpbmVyIG15dC1mb250NFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbaWRdPVwib3B0LmlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIG5hbWU9XCJpbnBWYWx1ZVwiIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LnZhbHVlKVwiIC8+XG4gICAgICAgICAge3sgb3B0LnZhbHVlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PiAgXG4gIDwhLS0gQ2hlY2tib3ggLS0+XG4gIDxkaXYgKm5nSWY9XCJjaGVja2JveEZsYWdcIiBjbGFzcz1cIlwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmVycm9yXCIgY2xhc3M9XCJjb25kLWRpdjJcIj5cbiAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uZXJyb3JNZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1jaGVja2JveC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uVmFsdWVzXCIgY2xhc3M9XCJueHQtY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtY29udGFpbmVyMVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnh0LWNoZWNrYm94XCIgW2lkXT1cIml0ZW0uaWRcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tlZFwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWNoZWNrYm94LWxhYmVsXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRvIHJlZHVjZSB0aGUgbWFyZ2luIC0tPlxuICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXN0aW9uSXRlbT8uc2l6ZSArICcgcGFkZGluZ25vbmUnXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJueHQtaW5wdXRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBcbiAgICAgICBpZD1cInRleHQtaW5wdXQtaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgQXJlYSAtLT5cbiAgPGRpdiAqbmdJZj1cInRhRmxhZ1wiID5cbiAgICA8ZGl2PlxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwibnh0LWlucHV0IG54dC10ZXh0LWFyZWFcIiBpZD1cInRhLWlucHV0LWlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIChmb2N1c291dCk9XCJ0YUZvY3VzT3V0ID0gdHJ1ZVwiXG4gICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENDIE51bWJlciBGb3JtYXQgLS0+XG4gIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgPGRpdiAqbmdJZj1cIm51bWJlckZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiVGV4dFwiIHBsYWNlaG9sZGVyPVwiMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDBcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cIm51bWJlci1pbnB1dC1pZFwiIChuZ01vZGVsQ2hhbmdlKT1cIkNDT25DaGFuZ2UoJGV2ZW50KVwiIHJlcXVpcmVkPVwiXCIgbWF4bGVuZ3RoPVwiMjlcIlxuICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOSBdL2csJycpO1wiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEVORC0tPlxuXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYWxwaGFudW1lcmljRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+IDwhLS1VSSBub3QgY29tcGxldGVkLS0+XG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiPlxuICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPXRleHQgcGxhY2Vob2xkZXI9XCJ7eyd6ZXJvT2ZaZXJvJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBzdHlsZT1cInBhZGRpbmc6NXB4IDVweCA1cHggMTUwcHg7XCIgaWQ9XCJ5b3VyaWRoZXJlXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVtYWlsIC0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDxkaXYgKm5nSWY9XCJlbWFpbEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cImVtYWlsLWlucHV0LWlkXCJcbiAgICAgICAgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERhdGVUaW1lIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZHRGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LXRpbWUxXCIgPlxuICAgIDwhLS0gRXJyb3IgSGFuZGxpbmcgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cblxuICAgIDwhLS0gRGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0ZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIEhBIDMxLUpBTi0yNCBUaGVzZSBsYWJlbHMgd2VyZSBvY2N1cGluZyB0aGUgZW1wdHkgc3BhY2Ugd2hlbiBkYXRlIHF1ZXN0aW9uIGNvbWVzLS0+XG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uZGF0ZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGltZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidGltZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LnRpbWVUZXh0IH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBueHQtZHQtdGltZSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlYW5kVGltZTogIXFiSXRlbT8ucHJvZ3Jlc3NCYXJ9XCIgXG4gICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG54dG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LngyNEhvdXJzID09IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwieycnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsICdkYXRlYW5kVGltZSc6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCI+PC9kaXY+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXR0YWNobWVudCAvIEZpbGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJmaWxlRmxhZ1wiPlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWRcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBhbGxvd2VkRmlsZUV4dGVuc2lvbiB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsdGhpcy5xdWVzdGlvbkl0ZW0pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcXVlc3Rpb25JdGVtPy50eXBlID09PSAnRmlsZScgJiZcbiAgICAgICAgIXFiSXRlbT8ucHJvZ3Jlc3NCYXJcbiAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWV9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPCEtLSBBdHRhY2htZW50IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkaW5nLWZpbGUtbmFtZSBcIj57eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHRmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgIFxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCIgKm5nSWY9XCIgcXVlc3Rpb25JdGVtPy5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj4ge3sgcXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fTwvc3Bhbj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDwhLS0gQm9vayAtLT5cbiAgPGRpdiAqbmdJZj1cImJvb2tGbGFnXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICcnIDogJ254dC1teXQtYWxpZ24zJ1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2NvbC1sZy0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZScgOiAnY29sLW1kLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2Ygc3ViUXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5pZFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXM/LnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCI+e3sgcXVlcz8ucXVlc3Rpb25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUaW1lJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uZGF0ZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8udGltZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5wcm9ncmVzc0Jhcn1cIiBcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbnh0bXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IFRleHQsIEVtYWlsLCBsYWJlbCwgbnVtYmVyLCBEYXRlVGltZS0tPlxuICAgICAgICAgICAgPG54dC1pbnB1dCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdFbWFpbCcgfHwgcXVlcy50eXBlID09PSAnTnVtYmVyJyB8fCBxdWVzLnR5cGUgPT09ICdMYWJlbCcgfHwgcXVlcy50eXBlID09PSAnQm9vbGVhbicgfHwgcXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlVGltZScgfHwgcXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cInF1ZXMudHlwZSA9PT0gJ1RleHQnID8gJ3RleHQnIDogcXVlcy50eXBlID09PSAnRW1haWwnID8gJ2VtYWlsJyA6IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgPyAnbnVtYmVyJyA6IHF1ZXMudHlwZSA9PT0gJ0xhYmVsJyA/ICdsYWJlbCcgOiBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyA/ICdjaGVja2JveCcgOiBxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnID8gJ3JpY2h0ZXh0JyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJyA/ICdkYXRldGltZScgOiBxdWVzLnR5cGUgPT09ICdUZXh0QXJlYScgPyAndGV4dGFyZWEnIDogJ3RleHQnXCJcbiAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpXCJcbiAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInF1ZXMuZm9udENvbG9yXCJcbiAgICAgICAgICAgIFtsYWJlbFNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgIFtpbnB1dFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIlxuICAgICAgICAgICAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlcy5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0Y1RjVGNVwiXG4gICAgICAgICAgICBbaW5wdXRJZF09XCJxdWVzLnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgW2lucHV0SWNvbkxlZnRTcmNdPVwicXVlcy5pY29uTGVmdFNyY1wiIFxuICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LHF1ZXMpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9ueHQtaW5wdXQ+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LnF1ZXN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPCEtLSBTS1MxM01BUjI1IG54dCB0YWJsZSBjaGFuZ2UgLS0+XG4gICAgICAgICAgICA8bnh0LWRhdGF0YWJsZSBpc0VkaXRSb3cgaXNEZWxldGVSb3cgYWN0aW9uQnV0dG9uIGlzQnV0dG9uc1xuICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICBmcm9tID0gXCJmb3JtQnVpbGRlclwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgICAgW3RhYmxlQ29uZmlnXT1cInF1ZXMudGFibGVDb25maWdcIlxuICAgICAgICAgICAgICAgIHRhYmxlSWQgPSBcIlwiXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJsdHJcIlxuICAgICAgICAgICAgICAgIHRhYmxlV2lkdGggPSBcImF1dG9cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbnh0LWRhdGF0YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU0tTMjVNQVIyNSBJbWFnZSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnSW1hZ2UnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJxdWVzLmltYWdlRGF0YVwiIFtzdHlsZS5ib3JkZXJdPVwicXVlcy5pbWFnZURhdGEgPyAnMXB4IHNvbGlkIGJsYWNrJyA6ICdub25lJ1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEcm9wZG93bidcIiBjbGFzcz1cIm54dGRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8IS0tIGZvciBjb21tb24gZHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW2Zyb21TaGVuZ2VsXT1cInFiSXRlbS5pc1NoZW5nZWxcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXM/LmVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzPy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS1MaXN0IHN0YXJ0LS0+XG4gIDxkaXYgKm5nSWY9XCJsaXN0RmxhZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LW15dC1hbGlnbjNcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIGdldExvY2FsU3ViUXVlc3Rpb25zKHF1ZXN0aW9uSXRlbS5pZCk7bGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kaXMtZmxleCBteXQtZm9udDMgbXl0LWZvbnQ3XCI+e3sgcXVlcz8ucXVlc3Rpb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgJ254dC1kaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBueHRib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgICB9XCIgaWQ9XCJ0ZXh0XCIgW2lkXT1cInF1ZXMudW5pcXVlU3ViUUlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzKVwiXG4gICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5xdWVzdGlvbiB9fVwiXG4gICAgICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhZGRGbGFnXCI+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJBZGQoZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLmlkKSlcIiBjbGFzcz1cImJ0blwiPnt7J2FkZCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9idXR0b24+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLUxpc3QgRW5kLS0+XG5cbiAgPCEtLSBBY3Rpb25zIC0tPlxuICA8IS0tIFZEIGJ1dHRvbiBjb25kaXRpb24gcmVtb3ZlZC0tPlxuICA8ZGl2IGNsYXNzPVwiZmxleGVyXCI+XG4gICAgPCEtLSBCYWNrd2FyZCAvIEJhY2sgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICAgPCEtLVZEIGRpc2FibGVkIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJiYWNrYnV0dG9uXCIgXG4gICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+IDAgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiICpuZ0lmPVwicWJJdGVtLmJhY2tcIj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNCdXR0b25EaXNhYmxlZFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdueHQtbGVmdC1idCc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0/LmJhY2sgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvcndhcmQgLyBOZXh0IC0tPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiAgKm5nSWY9XCJxYkl0ZW0ubmV4dFwiID5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHRidXR0b25cIj5cbiAgICAgICAgIDwhLS1WRCBkaXNhYmxlZCAtLT5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNCdXR0b25EaXNhYmxlZFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdueHQtcnVzdHknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSc6XG4gICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICB9XCIgKGNsaWNrKT1cImhhbmRsZU5leHRDbGljaygpXCI+XG4gICAgICAgICAge3sgcWJJdGVtLm5leHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBTdW1tYXJ5IC0tPlxuPGRpdiAqbmdJZj1cInRoaXMuYWJJdGVtPy5zdGF0dXMgPT09ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJjb2wtbGctMTJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgPGgyPnt7dGhpcy5xYkl0ZW0uc3VtbWFyeVRleHR9fTwvaDI+XG4gIDxwPnt7dGhpcy5xYkl0ZW0uc3VtbWFyeVN1YlRleHR9fTwvcD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic3VtbWFyeSAmJiBzdW1tYXJ5Lmxlbmd0aCA+IDBcIiBoZWlnaHQ9XCIxMDAlICFpbXBvcnRhbnRcIiBjbGFzcz1cImNvbC1tZC0xMlwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbC1tZC0xMic6IXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgICAgICAgfVwiPlxuICAgIDxoMSBjbGFzcz1cIm54dC1oZWFkZXIxIG54dC1zdW1tYXJ5cGFkZFwiID57eyBxYkl0ZW0uc3ViVGl0bGUgfX08L2gxPiAgICAgICAgIFxuICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzMlwiICpuZ0lmPVwiIXFiSXRlbS5wcm9ncmVzc0JhciAmJiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgXCI+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBzdW1tYXJ5OiAgIXFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLmVkaXRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyB9XCI+XG4gICAgICAgICAgICAgIDxwIFtuZ0NsYXNzXT1cInsgYXN1bTogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPnt7IHFhLnF1ZXNWYWx1ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBWRCBRdWVzdGlvbiBObyBhZGRlZCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj48c3Bhbj57eyBxYS5xdWVzdGlvbk51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHQtYW5zd2VyXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdC1zdW1tYXJ5XCIgLz5cbiAgICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIGluIHN1bW1hcnkgZm9yIGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PSAnQm9vaydcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbCBvZiBxYS5teVZhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInZhbC5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiPnt7IHZhbC5xdWVzdGlvblRleHQgfX06PHNwYW4+e3sgdmFsLmlucHV0IH19PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBEaXNwbGF5aW5nIHRoZSB2YWx1ZSBmb3IgZGlyZWN0IHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJyAmJiBxYS5xVHlwICE9ICdCb29rJyAgJiYgcWEuc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIj57eyBxYS5xdWVzdGlvblRleHQgfX0gPHNwYW4+PC9zcGFuPnt7IHFhLmFuc1ZhbHVlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0ICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJueHQtZWRpdFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRpb3NcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cblxuICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzMlwiICpuZ0lmPVwicWJJdGVtLnByb2dyZXNzQmFyIFwiPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydiZ0NvbG9yIG54dHN1bW1hcnktdG9wJyA6IHFiSXRlbS5wcm9ncmVzc0JhciB9XCIgPlxuICAgICAgPGRpdiBpZD1cIm54dC1wcm9ncmVzcy1zdW1tYXJ5XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uc3VtbWFyeVRleHQgJiYgcWJJdGVtLnByb2dyZXNzQmFyXCIgXG4gICAgICBbbmdDbGFzc109XCJ7IHN1bW1hcnlUaXRsZTogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibnh0LXN1YlRpdGxlXCIgPnt7IHFiSXRlbS5zdW1tYXJ5VGV4dCB9fTwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJueHQtc3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgPGgzIGNsYXNzPVwic3VtbWFyeS1oXCI+XG4gICAgICAgIHt7IHFiSXRlbS5zdW1tYXJ5VGV4dCB9fVxuICAgICAgPC9oMz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS1ncm91cFRleHQgbXl0LWZvbnQyXCI+XG4gICAgICA8IS0tIDxwPkluZm9ybWUgZGUgZGHDsW88L3A+IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIiA+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcWJJdGVtLmVkaXRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbiBzdW0tcXVlcyBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdW0tcXVlcyBxdWVzdGlvbiBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzdW0tcXVlczEgcXVlc3Rpb24xIHN1bW1hcnktY29tcGxldGVkIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0ICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWFuc3dlclwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4ZXIxXCIgKm5nSWY9XCJhYkl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzID09ICdDb21wbGV0ZWQnICYmIHFiSXRlbS5jYW5jZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2J0bi10ZXh0JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNhbmNlbENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0uY2FuY2VsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAtLT5cblxuICA8IS0tIEdyb3VwIEFjdGlvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJhbGlnbi1lZGl0LXN1Ym1pdFwiICpuZ0lmPVwiYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uc3VibWl0XCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsgJ2J0bi10ZXh0Mic6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5wcm9ncmVzc0JhciB9XCIgXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTdWJtaXRDbGljaygpXCI+XG4gICAgICAgIHt7IHFiSXRlbS5zdWJtaXQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5lZGl0XCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnZ3JleSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5wcm9ncmVzc0Jhcn1cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGlja05ldygpXCI+XG4gICAgICAgIHt7IHFiSXRlbS5lZGl0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG48L2Rpdj4iXX0=
|