@rangertechnologies/ngnxt 2.1.242 → 2.1.243-beta
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/fesm2022/rangertechnologies-ngnxt.mjs +153 -185
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/image-cropper/component/image-cropper.component.d.ts +1 -1
- package/lib/components/pick-location/pick-location.component.d.ts +0 -1
- package/package.json +4 -6
- package/rangertechnologies-ngnxt-2.1.243-beta.tgz +0 -0
- package/esm2022/environments/version.mjs +0 -15
- package/esm2022/lib/ar.i18n.mjs +0 -29
- package/esm2022/lib/components/button/nxt-button.component.mjs +0 -165
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -371
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -274
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -51
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -156
- package/esm2022/lib/components/datatable/datatable.component.mjs +0 -1625
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -283
- package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +0 -104
- package/esm2022/lib/components/image-cropper/component/cropper.state.mjs +0 -208
- package/esm2022/lib/components/image-cropper/component/image-cropper.component.mjs +0 -562
- package/esm2022/lib/components/image-cropper/interfaces/basic-event.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/cropper-options.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/cropper-position.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/dimensions.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/exif-transform.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/image-cropped-event.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/image-transform.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/index.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/loaded-image.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/move-start.interface.mjs +0 -8
- package/esm2022/lib/components/image-cropper/services/crop.service.mjs +0 -139
- package/esm2022/lib/components/image-cropper/services/load-image.service.mjs +0 -194
- package/esm2022/lib/components/image-cropper/utils/cropper-position.utils.mjs +0 -239
- package/esm2022/lib/components/image-cropper/utils/exif.utils.mjs +0 -79
- package/esm2022/lib/components/image-cropper/utils/keyboard.utils.mjs +0 -40
- package/esm2022/lib/components/image-cropper/utils/percentage.utils.mjs +0 -4
- package/esm2022/lib/components/image-cropper/utils/resize.utils.mjs +0 -75
- package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +0 -403
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +0 -2925
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -101
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -234
- package/esm2022/lib/components/search-box/search-box.component.mjs +0 -413
- package/esm2022/lib/country.json +0 -43237
- package/esm2022/lib/en.i18n.mjs +0 -29
- package/esm2022/lib/i18n-config.service.mjs +0 -4
- package/esm2022/lib/i18n.component.mjs +0 -47
- package/esm2022/lib/i18n.module.mjs +0 -38
- package/esm2022/lib/i18n.pipe.mjs +0 -26
- package/esm2022/lib/i18n.service.mjs +0 -56
- package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
- package/esm2022/lib/interfaces/apimeta.mjs +0 -2
- package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
- package/esm2022/lib/model/bookletWrapper.mjs +0 -9
- package/esm2022/lib/model/changeWrapper.mjs +0 -11
- package/esm2022/lib/model/errorWrapper.mjs +0 -6
- package/esm2022/lib/nxt-app.component.mjs +0 -22
- package/esm2022/lib/nxt-app.module.mjs +0 -139
- package/esm2022/lib/nxt-app.service.mjs +0 -14
- package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -675
- package/esm2022/lib/pages/builder/element/element.component.mjs +0 -466
- package/esm2022/lib/pages/builder/form/form.component.mjs +0 -45
- package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +0 -89
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -1021
- package/esm2022/lib/pages/builder/templates/templates.component.mjs +0 -34
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +0 -676
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +0 -1126
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -841
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2405
- package/esm2022/lib/pipe/custom-translate.pipe.mjs +0 -27
- package/esm2022/lib/pipe/date/date.pipe.mjs +0 -28
- package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +0 -28
- package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +0 -20
- package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +0 -20
- package/esm2022/lib/pipe/get-value.pipe.mjs +0 -48
- package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -39
- package/esm2022/lib/pipe/time/time.pipe.mjs +0 -26
- package/esm2022/lib/sample.mjs +0 -3715
- package/esm2022/lib/services/change.service.mjs +0 -50
- package/esm2022/lib/services/country.service.mjs +0 -135
- package/esm2022/lib/services/data.service.mjs +0 -103
- package/esm2022/lib/services/form-builder.service.mjs +0 -375
- package/esm2022/lib/services/pdf-designer.service.mjs +0 -401
- package/esm2022/lib/services/salesforce.service.mjs +0 -46
- package/esm2022/lib/services/shared.service.mjs +0 -100
- package/esm2022/lib/services/storage.service.mjs +0 -44
- package/esm2022/lib/services/template.service.mjs +0 -351
- package/esm2022/lib/services/translation.service.mjs +0 -62
- package/esm2022/lib/tam.i18n.mjs +0 -29
- package/esm2022/lib/wrapper.mjs +0 -175
- package/esm2022/public-api.mjs +0 -25
- package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
- package/rangertechnologies-ngnxt-2.1.242.tgz +0 -0
|
@@ -1,2405 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ViewEncapsulation, } from "@angular/core";
|
|
2
|
-
import { FormsModule } from "@angular/forms";
|
|
3
|
-
import { Question, AnswerWrapper, OptionValue, AttachmentWrapper, Attachment, LocalQuestion } from "../../wrapper";
|
|
4
|
-
import { ErrorWrapper } from "../../model/errorWrapper";
|
|
5
|
-
import { DTQUESTION, TESTQB } from "../../sample";
|
|
6
|
-
import { CommonModule } from "@angular/common";
|
|
7
|
-
import { I18nPipe } from "../../i18n.pipe";
|
|
8
|
-
import { CustomDropdownComponent } from "../../components/custom-dropdown/custom-dropdown.component";
|
|
9
|
-
import { NxtDatatable } from "../../components/datatable/datatable.component";
|
|
10
|
-
import { PickLocationComponent } from "../../components/pick-location/pick-location.component";
|
|
11
|
-
import { NxtInput } from "../../components/nxt-input/nxt-input.component";
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "../../services/salesforce.service";
|
|
14
|
-
import * as i2 from "../../services/data.service";
|
|
15
|
-
import * as i3 from "../../services/change.service";
|
|
16
|
-
import * as i4 from "../../services/shared.service";
|
|
17
|
-
import * as i5 from "@angular/router";
|
|
18
|
-
import * as i6 from "@angular/platform-browser";
|
|
19
|
-
import * as i7 from "@angular/forms";
|
|
20
|
-
import * as i8 from "ngx-device-detector";
|
|
21
|
-
import * as i9 from "../../i18n.service";
|
|
22
|
-
import * as i10 from "@angular/common";
|
|
23
|
-
export class QuestionnaireComponent {
|
|
24
|
-
sfService;
|
|
25
|
-
dataService;
|
|
26
|
-
changeService;
|
|
27
|
-
sharedService;
|
|
28
|
-
route;
|
|
29
|
-
sanitizer;
|
|
30
|
-
_formBuilder;
|
|
31
|
-
deviceService;
|
|
32
|
-
i18nService;
|
|
33
|
-
qbId;
|
|
34
|
-
insuranceStartDate;
|
|
35
|
-
serv;
|
|
36
|
-
tkn;
|
|
37
|
-
api; // VD getting the api as input
|
|
38
|
-
isEdit;
|
|
39
|
-
handleEvent = new EventEmitter();
|
|
40
|
-
handlePage = new EventEmitter();
|
|
41
|
-
handleQuestion = new EventEmitter();
|
|
42
|
-
handleBook = new EventEmitter();
|
|
43
|
-
handleSubmit = new EventEmitter();
|
|
44
|
-
params;
|
|
45
|
-
deviceInfo = null;
|
|
46
|
-
abItem;
|
|
47
|
-
qbItem;
|
|
48
|
-
questionItem;
|
|
49
|
-
answerWrap;
|
|
50
|
-
// CONDITIONAL TYPES
|
|
51
|
-
radioFlag = false;
|
|
52
|
-
dataFlag = false;
|
|
53
|
-
// OPTIONONLY TYPES
|
|
54
|
-
dropdownFlag = false;
|
|
55
|
-
checkboxFlag = false;
|
|
56
|
-
// UNCONDITIONAL TYPES
|
|
57
|
-
textFlag = false;
|
|
58
|
-
taFlag = false;
|
|
59
|
-
rtaFlag = false;
|
|
60
|
-
dtFlag = false;
|
|
61
|
-
timeFlag = false;
|
|
62
|
-
dateFlag = false;
|
|
63
|
-
fileFlag = false;
|
|
64
|
-
emailFlag = false;
|
|
65
|
-
numberFlag = false;
|
|
66
|
-
alphanumericFlag = false;
|
|
67
|
-
bookFlag = false;
|
|
68
|
-
listFlag = false;
|
|
69
|
-
//Back button
|
|
70
|
-
backButtonFlag = false;
|
|
71
|
-
// VD disabled
|
|
72
|
-
isButtonDisabled = false;
|
|
73
|
-
optionValues = [];
|
|
74
|
-
subQuestions = [];
|
|
75
|
-
inpValue;
|
|
76
|
-
answerMap = new Map();
|
|
77
|
-
dateMap = new Map();
|
|
78
|
-
selectedhourMap = new Map();
|
|
79
|
-
selectedminuteMap = new Map();
|
|
80
|
-
attachmentsMap = new Map();
|
|
81
|
-
sqOptions = new Map();
|
|
82
|
-
subAnsMap = new Map();
|
|
83
|
-
localSubQuestions = [];
|
|
84
|
-
questionStack = [];
|
|
85
|
-
questionName = [];
|
|
86
|
-
attachments = [];
|
|
87
|
-
attachmentIdList = [];
|
|
88
|
-
attachmentId = "";
|
|
89
|
-
attachment;
|
|
90
|
-
allowedFileExtension;
|
|
91
|
-
fileExceededLimit = false;
|
|
92
|
-
fileTypeIncorrect = false;
|
|
93
|
-
back = false;
|
|
94
|
-
backicon = true;
|
|
95
|
-
check;
|
|
96
|
-
pop;
|
|
97
|
-
localDate;
|
|
98
|
-
currentName;
|
|
99
|
-
pathquestion;
|
|
100
|
-
percent;
|
|
101
|
-
count;
|
|
102
|
-
taFocusOut = false;
|
|
103
|
-
notValidAccNum = false;
|
|
104
|
-
splCCBackClick = false;
|
|
105
|
-
summary = [];
|
|
106
|
-
localSubQMap = new Map();
|
|
107
|
-
keyIndex = 0;
|
|
108
|
-
//public sques: string;
|
|
109
|
-
selDate = {};
|
|
110
|
-
selectDate;
|
|
111
|
-
today = new Date();
|
|
112
|
-
el;
|
|
113
|
-
innerhtml;
|
|
114
|
-
possibilities;
|
|
115
|
-
innerhtml1;
|
|
116
|
-
summaryData = [];
|
|
117
|
-
hours = [
|
|
118
|
-
"01",
|
|
119
|
-
"02",
|
|
120
|
-
"03",
|
|
121
|
-
"04",
|
|
122
|
-
"05",
|
|
123
|
-
"06",
|
|
124
|
-
"07",
|
|
125
|
-
"08",
|
|
126
|
-
"09",
|
|
127
|
-
"10",
|
|
128
|
-
"11",
|
|
129
|
-
"12",
|
|
130
|
-
];
|
|
131
|
-
minutes = [
|
|
132
|
-
"00",
|
|
133
|
-
"01",
|
|
134
|
-
"02",
|
|
135
|
-
"03",
|
|
136
|
-
"04",
|
|
137
|
-
"05",
|
|
138
|
-
"06",
|
|
139
|
-
"07",
|
|
140
|
-
"08",
|
|
141
|
-
"09",
|
|
142
|
-
"10",
|
|
143
|
-
"11",
|
|
144
|
-
"12",
|
|
145
|
-
"13",
|
|
146
|
-
"14",
|
|
147
|
-
"15",
|
|
148
|
-
"16",
|
|
149
|
-
"17",
|
|
150
|
-
"18",
|
|
151
|
-
"19",
|
|
152
|
-
"20",
|
|
153
|
-
"21",
|
|
154
|
-
"22",
|
|
155
|
-
"23",
|
|
156
|
-
"24",
|
|
157
|
-
"25",
|
|
158
|
-
"26",
|
|
159
|
-
"27",
|
|
160
|
-
"28",
|
|
161
|
-
"29",
|
|
162
|
-
"30",
|
|
163
|
-
"31",
|
|
164
|
-
"32",
|
|
165
|
-
"33",
|
|
166
|
-
"34",
|
|
167
|
-
"35",
|
|
168
|
-
"36",
|
|
169
|
-
"37",
|
|
170
|
-
"38",
|
|
171
|
-
"39",
|
|
172
|
-
"40",
|
|
173
|
-
"41",
|
|
174
|
-
"42",
|
|
175
|
-
"43",
|
|
176
|
-
"44",
|
|
177
|
-
"45",
|
|
178
|
-
"46",
|
|
179
|
-
"47",
|
|
180
|
-
"48",
|
|
181
|
-
"49",
|
|
182
|
-
"50",
|
|
183
|
-
"51",
|
|
184
|
-
"52",
|
|
185
|
-
"53",
|
|
186
|
-
"54",
|
|
187
|
-
"55",
|
|
188
|
-
"56",
|
|
189
|
-
"57",
|
|
190
|
-
"58",
|
|
191
|
-
"59",
|
|
192
|
-
];
|
|
193
|
-
selectedHour = "";
|
|
194
|
-
selectedMinute = "";
|
|
195
|
-
selectedMeridiem = "";
|
|
196
|
-
valueName = "";
|
|
197
|
-
valueName1 = "";
|
|
198
|
-
bookFlagAccept;
|
|
199
|
-
recordId;
|
|
200
|
-
currentQuestionId;
|
|
201
|
-
spinnerType;
|
|
202
|
-
start_date;
|
|
203
|
-
//search component
|
|
204
|
-
tempoAddress = [];
|
|
205
|
-
selectedValue;
|
|
206
|
-
selectedPostalcode;
|
|
207
|
-
selectedProvince;
|
|
208
|
-
selectedCity;
|
|
209
|
-
selectedArea;
|
|
210
|
-
localaddress = [];
|
|
211
|
-
allAddress = [];
|
|
212
|
-
PostalCode;
|
|
213
|
-
places = [];
|
|
214
|
-
province = [];
|
|
215
|
-
// REQ-01 PROGRESS BAR
|
|
216
|
-
progressStyle = "0%";
|
|
217
|
-
answerCount = 0;
|
|
218
|
-
indexCount = 0;
|
|
219
|
-
addFlag = true;
|
|
220
|
-
myDatePickerOptions = {};
|
|
221
|
-
individualBookButton;
|
|
222
|
-
allInputValues = []; // HA 02FEB24 To store all the input values
|
|
223
|
-
constructor(sfService, dataService, changeService, sharedService, route, sanitizer, _formBuilder,
|
|
224
|
-
//private dbService: NgxIndexedDBService,
|
|
225
|
-
deviceService, el, i18nService) {
|
|
226
|
-
this.sfService = sfService;
|
|
227
|
-
this.dataService = dataService;
|
|
228
|
-
this.changeService = changeService;
|
|
229
|
-
this.sharedService = sharedService;
|
|
230
|
-
this.route = route;
|
|
231
|
-
this.sanitizer = sanitizer;
|
|
232
|
-
this._formBuilder = _formBuilder;
|
|
233
|
-
this.deviceService = deviceService;
|
|
234
|
-
this.i18nService = i18nService;
|
|
235
|
-
// VD 10Aug24-spinner changes
|
|
236
|
-
this.spinnerType = "ball-spin-clockwise-fade";
|
|
237
|
-
}
|
|
238
|
-
// HA 02FEB24 On date change need to store the changed value so passing the question
|
|
239
|
-
// RS 09DEC24 Changed keys
|
|
240
|
-
onDateChanged(event, ques) {
|
|
241
|
-
//console.log('Inside the onDateChanged');
|
|
242
|
-
//to change the border color
|
|
243
|
-
if (this.qbItem.progressBar) {
|
|
244
|
-
//console.log('Inside the progressBar cond');
|
|
245
|
-
this.inpValue =
|
|
246
|
-
event.date.day + "/" + event.date.month + "/" + event.date.year;
|
|
247
|
-
if (this.questionItem.type == "Book") {
|
|
248
|
-
this.selectDate = event.date.day + "/" + event.date.month + "/" + event.date.year;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
//console.log('Inside the ELSE of progressBar cond');
|
|
253
|
-
if (this.questionItem.type == "Book") {
|
|
254
|
-
this.selectDate = event.date.day + "-" + event.date.month + "-" + event.date.year;
|
|
255
|
-
}
|
|
256
|
-
this.inpValue =
|
|
257
|
-
event.date.year + "-" + event.date.month + "-" + event.date.day;
|
|
258
|
-
}
|
|
259
|
-
const htmlElement = window.document.getElementsByClassName("mydp");
|
|
260
|
-
htmlElement
|
|
261
|
-
.item(0)
|
|
262
|
-
.setAttribute("style", "border-color:#87be1c;width:100%");
|
|
263
|
-
this.dateMap.set(this.questionItem.id, event);
|
|
264
|
-
if (event.date.day === 0 &&
|
|
265
|
-
event.date.month === 0 &&
|
|
266
|
-
event.date.year === 0) {
|
|
267
|
-
this.dateMap.delete(this.questionItem.id);
|
|
268
|
-
this.answerMap.delete(this.questionItem.id);
|
|
269
|
-
}
|
|
270
|
-
//console.log('this.inpValue = '+this.inpValue);
|
|
271
|
-
//console.log('this.selectDate = '+this.selectDate);
|
|
272
|
-
// HA 02FEB24 Assigning input value to ques input
|
|
273
|
-
ques.input = this.inpValue;
|
|
274
|
-
}
|
|
275
|
-
ngOnInit() {
|
|
276
|
-
this.deviceInfo = this.deviceService.getDeviceInfo();
|
|
277
|
-
this.route.queryParams.subscribe((params) => {
|
|
278
|
-
if (params['id']) {
|
|
279
|
-
this.individualBookButton = true;
|
|
280
|
-
}
|
|
281
|
-
else if (params['bookletId']) {
|
|
282
|
-
this.individualBookButton = false;
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
this.inpValue = "";
|
|
286
|
-
this.selectedMeridiem = "AM";
|
|
287
|
-
this.processQB();
|
|
288
|
-
//console.log(localStorage.getItem('address'));
|
|
289
|
-
if (localStorage.getItem("address")) {
|
|
290
|
-
this.localaddress = JSON.parse(localStorage.getItem("address"));
|
|
291
|
-
//console.log('Length='+this.localaddress.length);
|
|
292
|
-
this.allAddress = this.localaddress.filter((item, index) => {
|
|
293
|
-
if (this.localaddress.indexOf(item) == index) {
|
|
294
|
-
return item;
|
|
295
|
-
}
|
|
296
|
-
});
|
|
297
|
-
this.allAddress.sort(function (a, b) {
|
|
298
|
-
return a.zipCode - b.zipCode;
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
else if (this.deviceInfo.os === 'iOS') {
|
|
302
|
-
let openRequest = indexedDB.open("addressDB");
|
|
303
|
-
openRequest.onsuccess = (event) => {
|
|
304
|
-
const targetNew = event.target;
|
|
305
|
-
let dbNew = targetNew.result;
|
|
306
|
-
const requestNew = dbNew.transaction('addressTable')
|
|
307
|
-
.objectStore('addressTable')
|
|
308
|
-
.get(1);
|
|
309
|
-
requestNew.onsuccess = () => {
|
|
310
|
-
const tempVar = requestNew.result;
|
|
311
|
-
this.localaddress = JSON.parse(tempVar.wholeAddressString);
|
|
312
|
-
this.allAddress = this.localaddress.filter((item, index) => {
|
|
313
|
-
if (this.localaddress.indexOf(item) == index) {
|
|
314
|
-
return item;
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
this.allAddress.sort(function (a, b) {
|
|
318
|
-
return a.zipCode - b.zipCode;
|
|
319
|
-
});
|
|
320
|
-
};
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
ngAfterViewInit() {
|
|
325
|
-
// SKS20MAR25 Ensure the child component is available before calling the method
|
|
326
|
-
// AP-25MAR25 Empty string replace null
|
|
327
|
-
setTimeout(() => {
|
|
328
|
-
this.subQuestions.forEach(ques => {
|
|
329
|
-
let input;
|
|
330
|
-
if (ques.type == 'Dropdown' || ques.type == 'Radio' || ques.type == 'Location') {
|
|
331
|
-
input = {};
|
|
332
|
-
input['valueObj'] = ques.input || null;
|
|
333
|
-
input['referenceField'] = ques.referenceField || null;
|
|
334
|
-
input['fromQuestionId'] = ques.id || null;
|
|
335
|
-
}
|
|
336
|
-
else if (ques.type == 'Date' || ques.type == 'DateTime') {
|
|
337
|
-
input = {};
|
|
338
|
-
input['value'] = ques.input || null;
|
|
339
|
-
}
|
|
340
|
-
else if (ques.type == 'List') {
|
|
341
|
-
input = {};
|
|
342
|
-
ques['subText'] = typeof ques?.subText === 'object' ? ques?.subText : JSON.parse(ques['subText']);
|
|
343
|
-
let apiObj = ques.subText;
|
|
344
|
-
input['valueObj'] = ques.input || null;
|
|
345
|
-
input['field'] = apiObj.defaultField || apiObj.field[0] || apiObj.field || null;
|
|
346
|
-
}
|
|
347
|
-
else {
|
|
348
|
-
input = ques.input || null;
|
|
349
|
-
}
|
|
350
|
-
this.childEventCapture(input, ques);
|
|
351
|
-
});
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
// call when bookId changes
|
|
355
|
-
ngOnChanges(simplechanges) {
|
|
356
|
-
if (simplechanges['qbId']) {
|
|
357
|
-
this.processQB();
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
// RS 09DEC24 Changed keys
|
|
361
|
-
date_TimeMap() {
|
|
362
|
-
this.selectedhourMap.set(this.questionItem.id, this.selectedHour);
|
|
363
|
-
this.selectedminuteMap.set(this.questionItem.id, this.selectedMinute);
|
|
364
|
-
}
|
|
365
|
-
day() {
|
|
366
|
-
this.myDatePickerOptions = {
|
|
367
|
-
dateFormat: "dd.mm.yyyy",
|
|
368
|
-
sunHighlight: false,
|
|
369
|
-
disableDateRanges: [],
|
|
370
|
-
showClearDateBtn: false,
|
|
371
|
-
disableSince: {
|
|
372
|
-
year: 0,
|
|
373
|
-
month: 0,
|
|
374
|
-
day: 0,
|
|
375
|
-
},
|
|
376
|
-
disableUntil: {
|
|
377
|
-
year: 0,
|
|
378
|
-
month: 0,
|
|
379
|
-
day: 0,
|
|
380
|
-
},
|
|
381
|
-
showTodayBtn: false,
|
|
382
|
-
dayLabels: {
|
|
383
|
-
su: "Dom",
|
|
384
|
-
mo: "Lun",
|
|
385
|
-
tu: "Mar",
|
|
386
|
-
we: "Mié",
|
|
387
|
-
th: "Jue",
|
|
388
|
-
fr: "Vie",
|
|
389
|
-
sa: "Sáb",
|
|
390
|
-
},
|
|
391
|
-
monthLabels: {
|
|
392
|
-
1: "Ene",
|
|
393
|
-
2: "Feb",
|
|
394
|
-
3: "Mar",
|
|
395
|
-
4: "Abr",
|
|
396
|
-
5: "Mayo",
|
|
397
|
-
6: "Jun",
|
|
398
|
-
7: "Jul",
|
|
399
|
-
8: "Ago",
|
|
400
|
-
9: "Sep",
|
|
401
|
-
10: "Oct",
|
|
402
|
-
11: "Nov",
|
|
403
|
-
12: "Dic",
|
|
404
|
-
},
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
change() {
|
|
408
|
-
const htmlElement = window.document.getElementsByClassName("mydp");
|
|
409
|
-
if (this.selDate === null || this.inpValue.length === 0) {
|
|
410
|
-
htmlElement
|
|
411
|
-
.item(0)
|
|
412
|
-
.setAttribute("style", "width:100%;border: 1px solid red");
|
|
413
|
-
}
|
|
414
|
-
else {
|
|
415
|
-
htmlElement
|
|
416
|
-
.item(0)
|
|
417
|
-
.setAttribute("style", "border: 1px solid #87be1c ;width:100%");
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
processQB() {
|
|
421
|
-
console.log('ProcessQB');
|
|
422
|
-
//this.qbItem
|
|
423
|
-
console.log(this.qbId);
|
|
424
|
-
//console.log('Version in process is 8bf11efa7f91a391d957bf6b5078edc7e656b67c');
|
|
425
|
-
if (this.qbId) {
|
|
426
|
-
if (this.qbId.length == 18) {
|
|
427
|
-
this.readQuestionBook(this.qbId);
|
|
428
|
-
}
|
|
429
|
-
else {
|
|
430
|
-
//console.log('Inside the else part');
|
|
431
|
-
//console.log('Setting the Question Directly for testing');
|
|
432
|
-
this.questionItem = DTQUESTION;
|
|
433
|
-
this.qbItem = TESTQB;
|
|
434
|
-
this.processQuestion();
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
trimLastDummy(input) {
|
|
439
|
-
return (input = input.substring(0, input.length - 6));
|
|
440
|
-
}
|
|
441
|
-
getProperTime(def, input) {
|
|
442
|
-
return input === "" ? def : input;
|
|
443
|
-
}
|
|
444
|
-
// RS 09DEC24 Changed keys
|
|
445
|
-
//Summary Question Clickable Logic
|
|
446
|
-
handleEditClick(value) {
|
|
447
|
-
this.backicon = false;
|
|
448
|
-
if (this.abItem?.status == "Pending") {
|
|
449
|
-
if (value == null) {
|
|
450
|
-
return;
|
|
451
|
-
}
|
|
452
|
-
this.readQuestion(value);
|
|
453
|
-
//console.log(' in side summaryopen'+ this.summary.length);
|
|
454
|
-
//Assign question stack length from summary part
|
|
455
|
-
var arrayLength = this.questionStack.length;
|
|
456
|
-
var lengthValue = this.questionStack.indexOf(value);
|
|
457
|
-
for (let i = arrayLength; i > lengthValue; i--) {
|
|
458
|
-
this.questionStack.pop();
|
|
459
|
-
}
|
|
460
|
-
if (this.qbItem.progressBar === true) {
|
|
461
|
-
var arrayLength1 = this.questionName.length;
|
|
462
|
-
for (let j = arrayLength1; j > lengthValue; j--) {
|
|
463
|
-
this.questionName.pop();
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
this.summary = [];
|
|
467
|
-
this.summaryData = [];
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
handleNextClick() {
|
|
471
|
-
// this.sharedService.showLoader();
|
|
472
|
-
this.isButtonDisabled = true;
|
|
473
|
-
this.backButtonFlag = false;
|
|
474
|
-
this.AnswerSave();
|
|
475
|
-
}
|
|
476
|
-
AnswerSave() {
|
|
477
|
-
//this.updateProgress();
|
|
478
|
-
if (this.currentQuestionId === null) {
|
|
479
|
-
return;
|
|
480
|
-
}
|
|
481
|
-
var questionTxt = '';
|
|
482
|
-
this.clearError();
|
|
483
|
-
this.handleEvent.emit(this.qbItem.nextTrackingId);
|
|
484
|
-
this.recordId = null;
|
|
485
|
-
var cQuestion = new Question();
|
|
486
|
-
cQuestion = this.questionItem;
|
|
487
|
-
// MR 30JAN24 - Added Condition for this.questionItem.Questions__r (Book Question and Non-Book)
|
|
488
|
-
if (this.questionItem.subQuestions) {
|
|
489
|
-
// Create an array of objects to store the values
|
|
490
|
-
for (var i = 0; i < this.questionItem.subQuestions.length; i++) {
|
|
491
|
-
if (this.questionItem.subQuestions[i].questionText) {
|
|
492
|
-
var questionText = this.questionItem.subQuestions[i].questionText.replace(/<[^>]+>/g, ''); // Remove HTML tags from the questionText value
|
|
493
|
-
}
|
|
494
|
-
else {
|
|
495
|
-
questionText = 'undefined';
|
|
496
|
-
}
|
|
497
|
-
const input = this.questionItem.subQuestions[i].input;
|
|
498
|
-
const obj = { [questionText]: input }; // Create an object with the questionText as the key and the input as the value
|
|
499
|
-
this.summaryData.push(obj); // Add the object to the data array
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
else {
|
|
503
|
-
var questionText = this.questionItem.questionText.replace(/<[^>]+>/g, '');
|
|
504
|
-
const input = this.questionItem.input;
|
|
505
|
-
const obj = { [questionText]: input }; // Create an object with the questionText as the key and the input as the value
|
|
506
|
-
this.summaryData.push(obj); // Add the object to the data array
|
|
507
|
-
}
|
|
508
|
-
var typ = cQuestion.type;
|
|
509
|
-
// this.sques += cQuestion.question + '@@##$$';
|
|
510
|
-
var quesValue = cQuestion.questionText;
|
|
511
|
-
var mailformat = "^[^.][a-zA-Z0-9!#$%&'*+-/=?^_`{|}~]+[^.]@[^-][a-zA-Z0-9.-]+[^-].[a-zA-Z]{2,}$";
|
|
512
|
-
// Process Inputs
|
|
513
|
-
if (this.checkboxFlag) {
|
|
514
|
-
this.inpValue = "";
|
|
515
|
-
// Save all the selected options in the inpValue
|
|
516
|
-
for (var ov of this.optionValues.filter((item) => item.checked)) {
|
|
517
|
-
this.inpValue += ov.value + "@@##$$";
|
|
518
|
-
this.recordId = ov.nextQuestion;
|
|
519
|
-
}
|
|
520
|
-
this.inpValue = this.trimLastDummy(this.inpValue);
|
|
521
|
-
}
|
|
522
|
-
else if (this.emailFlag) {
|
|
523
|
-
if (this.inpValue && this.inpValue.match(mailformat)) {
|
|
524
|
-
this.recordId = this.questionItem.nextQuestion;
|
|
525
|
-
}
|
|
526
|
-
else {
|
|
527
|
-
this.questionItem.error = new ErrorWrapper();
|
|
528
|
-
return;
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
else if (this.alphanumericFlag) {
|
|
532
|
-
var isNotValidAccNum = this.isNotValidAccNumber(this.inpValue);
|
|
533
|
-
if (isNotValidAccNum) {
|
|
534
|
-
this.notValidAccNum = true;
|
|
535
|
-
this.recordId = this.questionItem.nextQuestion;
|
|
536
|
-
return;
|
|
537
|
-
}
|
|
538
|
-
this.notValidAccNum = false;
|
|
539
|
-
}
|
|
540
|
-
else if (this.numberFlag) {
|
|
541
|
-
if (this.inpValue) {
|
|
542
|
-
this.recordId = this.questionItem.nextQuestion;
|
|
543
|
-
}
|
|
544
|
-
else {
|
|
545
|
-
this.questionItem.error = new ErrorWrapper();
|
|
546
|
-
return;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
else if (this.bookFlag) {
|
|
550
|
-
this.inpValue = "";
|
|
551
|
-
var hasMissingInput = false;
|
|
552
|
-
for (var item of this.questionItem.subQuestions) {
|
|
553
|
-
var count = 0;
|
|
554
|
-
if (item.type == "Date" || item.type == "Time") {
|
|
555
|
-
//this one
|
|
556
|
-
this.change();
|
|
557
|
-
if (item.type == "Date") {
|
|
558
|
-
//console.log('Inside the date type cond = '+this.selectDate);
|
|
559
|
-
this.inpValue = this.selectDate;
|
|
560
|
-
//console.log(this.inpValue)
|
|
561
|
-
//console.log(this.selectDate)
|
|
562
|
-
}
|
|
563
|
-
if (item.type == "Time") {
|
|
564
|
-
//console.log(this.selectedHour+this.selectedMeridiem+this.selectedMinute)
|
|
565
|
-
if (this.questionItem.x24Hours === false) {
|
|
566
|
-
this.questionItem.input =
|
|
567
|
-
(this.selectedMeridiem === "PM" && this.selectedHour != "12"
|
|
568
|
-
? Number(this.selectedHour) + 12
|
|
569
|
-
: this.selectedHour) +
|
|
570
|
-
":" +
|
|
571
|
-
this.selectedMinute + " PM";
|
|
572
|
-
if (this.selectedMeridiem === "AM" && this.selectedHour === "12") {
|
|
573
|
-
this.questionItem.input = "00" + ":" + this.selectedMinute + " AM";
|
|
574
|
-
}
|
|
575
|
-
if (this.qbItem.progressBar) {
|
|
576
|
-
if (this.selectDate) {
|
|
577
|
-
this.inpValue = this.selectDate + " " + this.questionItem.input;
|
|
578
|
-
}
|
|
579
|
-
else {
|
|
580
|
-
this.inpValue = " " + this.questionItem.input;
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
else {
|
|
584
|
-
if (this.selectDate) {
|
|
585
|
-
this.inpValue = this.selectDate + " " + this.questionItem.input;
|
|
586
|
-
}
|
|
587
|
-
else {
|
|
588
|
-
this.inpValue = " " + this.questionItem.input;
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
if (this.questionItem.x24Hours === true) {
|
|
593
|
-
this.questionItem.input =
|
|
594
|
-
this.selectedHour + ":" + this.selectedMinute;
|
|
595
|
-
if (this.qbItem.progressBar) {
|
|
596
|
-
this.inpValue = this.questionItem.input;
|
|
597
|
-
}
|
|
598
|
-
else {
|
|
599
|
-
this.inpValue = this.questionItem.input;
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
// HA 31-JAN-24 Removed the selectHour and selectMinute condition
|
|
604
|
-
if (this.selDate === null || this.selDate === undefined || !this.inpValue || !this.selectDate) {
|
|
605
|
-
//console.log('Inside the null condition of input');
|
|
606
|
-
this.questionItem.error = new ErrorWrapper();
|
|
607
|
-
const htmlElement = window.document.getElementsByClassName("mydp");
|
|
608
|
-
htmlElement
|
|
609
|
-
.item(0)
|
|
610
|
-
.setAttribute("style", "width:100%;border-bottom: 1px solid red !important;");
|
|
611
|
-
return;
|
|
612
|
-
}
|
|
613
|
-
this.date_TimeMap();
|
|
614
|
-
}
|
|
615
|
-
// HA 31-JAN-24 Added text error condition
|
|
616
|
-
if (item.type == "Text") {
|
|
617
|
-
if (!item.input) {
|
|
618
|
-
item.input = "";
|
|
619
|
-
item.error = new ErrorWrapper();
|
|
620
|
-
hasMissingInput = true;
|
|
621
|
-
}
|
|
622
|
-
// this.inpValue = item.input; 634
|
|
623
|
-
}
|
|
624
|
-
if (!item.isOptional &&
|
|
625
|
-
// ((item.type != "File" && !item.input && item.type != 'Date' && item.type != 'Time') ||
|
|
626
|
-
// (item.type == "File" && this.attachments.length == 0))
|
|
627
|
-
(item.type == "File" && this.attachments.length == 0)) {
|
|
628
|
-
item.error = new ErrorWrapper();
|
|
629
|
-
hasMissingInput = true;
|
|
630
|
-
}
|
|
631
|
-
if (item.type == "Radio") {
|
|
632
|
-
if (!item.input) {
|
|
633
|
-
item.error = new ErrorWrapper();
|
|
634
|
-
hasMissingInput = true;
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
if (item.type == "Dropdown") {
|
|
638
|
-
if (!item.input) {
|
|
639
|
-
item.input = "";
|
|
640
|
-
item.error = new ErrorWrapper();
|
|
641
|
-
hasMissingInput = true;
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
if (item.type == "Email") {
|
|
645
|
-
if (item.input && item.input.match(mailformat)) {
|
|
646
|
-
this.recordId = cQuestion.nextQuestion;
|
|
647
|
-
}
|
|
648
|
-
else {
|
|
649
|
-
item.error = new ErrorWrapper();
|
|
650
|
-
hasMissingInput = true;
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
if (item.type == "File" && this.attachments.length > 0) {
|
|
654
|
-
for (var attachmentItem of this.attachments) {
|
|
655
|
-
this.inpValue +=
|
|
656
|
-
attachmentItem.attachmentId +
|
|
657
|
-
"@#$" +
|
|
658
|
-
attachmentItem.attachmentName +
|
|
659
|
-
",";
|
|
660
|
-
if (item.input == this.inpValue) {
|
|
661
|
-
this.recordId = cQuestion.nextQuestion;
|
|
662
|
-
//console.log('inside' + recordId);
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
// this.attachments = [];
|
|
666
|
-
} //item.input == this.inpValue;
|
|
667
|
-
this.inpValue += (item.input != undefined ? item.input : "") + "@@##$$";
|
|
668
|
-
questionTxt += item.question + "@@##$$";
|
|
669
|
-
//console.log('inside book1' + this.inpValue)
|
|
670
|
-
}
|
|
671
|
-
if (hasMissingInput) {
|
|
672
|
-
return;
|
|
673
|
-
}
|
|
674
|
-
this.inpValue = this.trimLastDummy(this.inpValue);
|
|
675
|
-
questionTxt = questionTxt ? this.trimLastDummy(questionTxt) : questionTxt;
|
|
676
|
-
}
|
|
677
|
-
else if (this.listFlag) {
|
|
678
|
-
this.inpValue = '';
|
|
679
|
-
var hasMissingInput = false;
|
|
680
|
-
if (this.localSubQMap.has(this.questionItem.id)) {
|
|
681
|
-
this.subAnsMap = new Map();
|
|
682
|
-
for (var localQues of this.localSubQMap.get(this.questionItem.id)) {
|
|
683
|
-
if (!localQues.input) {
|
|
684
|
-
localQues.error = new ErrorWrapper();
|
|
685
|
-
hasMissingInput = true;
|
|
686
|
-
}
|
|
687
|
-
if (!this.subAnsMap.has(localQues.id)) {
|
|
688
|
-
// console.log('inside ans map')
|
|
689
|
-
this.subAnsMap.set(localQues.id, localQues.input);
|
|
690
|
-
}
|
|
691
|
-
else {
|
|
692
|
-
// console.log('inside ans map else')
|
|
693
|
-
this.subAnsMap.set(localQues.id, this.subAnsMap.get(localQues.id) + '$$@@##' + localQues.input);
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
if (hasMissingInput) {
|
|
697
|
-
//console.log('file two')
|
|
698
|
-
return;
|
|
699
|
-
}
|
|
700
|
-
this.subAnsMap.forEach((value, key) => {
|
|
701
|
-
// console.log('inside Map' );
|
|
702
|
-
// console.log(value);
|
|
703
|
-
this.inpValue += (value != undefined ? value : '') + '@@##$$';
|
|
704
|
-
});
|
|
705
|
-
this.inpValue = this.trimLastDummy(this.inpValue);
|
|
706
|
-
}
|
|
707
|
-
}
|
|
708
|
-
else if (this.dropdownFlag) {
|
|
709
|
-
if (this.inpValue.length <= 1) {
|
|
710
|
-
this.inpValue = ".";
|
|
711
|
-
this.questionItem.error = new ErrorWrapper();
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
else if (this.dtFlag && this.dateFlag && this.timeFlag) {
|
|
715
|
-
//this one
|
|
716
|
-
this.change();
|
|
717
|
-
if (this.inpValue) {
|
|
718
|
-
this.selectedHour = this.getProperTime("12", this.selectedHour);
|
|
719
|
-
this.selectedMinute = this.getProperTime("00", this.selectedMinute);
|
|
720
|
-
this.selectedMeridiem = this.getProperTime("AM", this.selectedMeridiem);
|
|
721
|
-
//console.log(this.inpValue.length);
|
|
722
|
-
if (this.questionItem.x24Hours === false) {
|
|
723
|
-
this.questionItem.input =
|
|
724
|
-
(this.selectedMeridiem === "PM" && this.selectedHour != "12"
|
|
725
|
-
? Number(this.selectedHour) + 12
|
|
726
|
-
: this.selectedHour) +
|
|
727
|
-
":" +
|
|
728
|
-
this.selectedMinute + " PM";
|
|
729
|
-
if (this.selectedMeridiem === "AM" && this.selectedHour === "12") {
|
|
730
|
-
this.questionItem.input = "00" + ":" + this.selectedMinute + " AM";
|
|
731
|
-
}
|
|
732
|
-
if (this.qbItem.progressBar) {
|
|
733
|
-
this.inpValue = this.inpValue + " " + this.questionItem.input;
|
|
734
|
-
}
|
|
735
|
-
else {
|
|
736
|
-
this.inpValue = this.inpValue + "T" + this.questionItem.input;
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
if (this.questionItem.x24Hours === true) {
|
|
740
|
-
this.questionItem.input =
|
|
741
|
-
this.selectedHour + ":" + this.selectedMinute;
|
|
742
|
-
if (this.qbItem.progressBar) {
|
|
743
|
-
this.inpValue = this.inpValue + " " + this.questionItem.input;
|
|
744
|
-
}
|
|
745
|
-
else {
|
|
746
|
-
this.inpValue = this.inpValue + "T" + this.questionItem.input;
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
if (this.qbItem.progressBar) {
|
|
750
|
-
//console.log("ans => " + this.inpValue);
|
|
751
|
-
var date1 = this.inpValue.split(" ");
|
|
752
|
-
date1 = date1[0].split("/");
|
|
753
|
-
date1 = [date1[2], date1[1], date1[0]].join("-");
|
|
754
|
-
date1 = new Date(date1);
|
|
755
|
-
//console.log(date1)
|
|
756
|
-
var date2 = this.insuranceStartDate.split(" ");
|
|
757
|
-
date2 = new Date(date2[0]);
|
|
758
|
-
//console.log(date2);
|
|
759
|
-
if (date1 < date2) {
|
|
760
|
-
this.questionItem.error = new ErrorWrapper();
|
|
761
|
-
this.questionItem.error.errorMsg =
|
|
762
|
-
"No es posible dar de alta la reclamación debido a que la fecha del incidente es anterior a la fecha de contratación de la póliza";
|
|
763
|
-
//console.log('inside')
|
|
764
|
-
return;
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
if (this.selDate === null || !this.inpValue) {
|
|
768
|
-
this.questionItem.error = new ErrorWrapper();
|
|
769
|
-
return;
|
|
770
|
-
}
|
|
771
|
-
this.date_TimeMap();
|
|
772
|
-
}
|
|
773
|
-
}
|
|
774
|
-
else if (this.timeFlag && this.dtFlag && !this.dateFlag) {
|
|
775
|
-
this.date_TimeMap();
|
|
776
|
-
if (this.questionItem.x24Hours === false) {
|
|
777
|
-
this.inpValue =
|
|
778
|
-
(this.selectedMeridiem === "PM" && this.selectedHour != "12"
|
|
779
|
-
? Number(this.selectedHour) + 12
|
|
780
|
-
: this.selectedHour) +
|
|
781
|
-
":" +
|
|
782
|
-
this.selectedMinute;
|
|
783
|
-
}
|
|
784
|
-
else {
|
|
785
|
-
this.inpValue = this.selectedHour + ":" + this.selectedMinute;
|
|
786
|
-
}
|
|
787
|
-
if (this.inpValue.length < 5) {
|
|
788
|
-
this.questionItem.error = new ErrorWrapper();
|
|
789
|
-
return;
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
else if (this.dateFlag && this.dtFlag && !this.timeFlag) {
|
|
793
|
-
this.change();
|
|
794
|
-
if (this.inpValue.length < 7 || this.selDate === null) {
|
|
795
|
-
this.questionItem.error = new ErrorWrapper();
|
|
796
|
-
return;
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
else if (this.fileFlag) {
|
|
800
|
-
//console.log('four')
|
|
801
|
-
this.inpValue = "";
|
|
802
|
-
if (this.attachments.length > 0) {
|
|
803
|
-
for (var attachmentItem of this.attachments) {
|
|
804
|
-
this.inpValue +=
|
|
805
|
-
attachmentItem.attachmentId +
|
|
806
|
-
"@#$" +
|
|
807
|
-
attachmentItem.attachmentName +
|
|
808
|
-
",";
|
|
809
|
-
}
|
|
810
|
-
//console.log('inside filesss' + this.inpValue);
|
|
811
|
-
this.inpValue = this.inpValue.substr(0, this.inpValue.length - 1);
|
|
812
|
-
}
|
|
813
|
-
else {
|
|
814
|
-
this.questionItem.error = new ErrorWrapper();
|
|
815
|
-
return;
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
// Check for the answer before saving to the DB
|
|
819
|
-
if (!this.questionItem.isOptional && !this.inpValue) {
|
|
820
|
-
// Show error that the question must be answered
|
|
821
|
-
this.questionItem.error = new ErrorWrapper();
|
|
822
|
-
// VD disabled
|
|
823
|
-
//this.sharedService.hideLoader();
|
|
824
|
-
this.isButtonDisabled = false;
|
|
825
|
-
return;
|
|
826
|
-
}
|
|
827
|
-
// Save the Answer in the DB
|
|
828
|
-
this.answerWrap = new AnswerWrapper();
|
|
829
|
-
this.answerWrap.abId = this.abItem.id;
|
|
830
|
-
this.answerWrap.quesId = cQuestion.id;
|
|
831
|
-
this.answerWrap.quesValue = quesValue;
|
|
832
|
-
this.answerWrap.qTyp = typ;
|
|
833
|
-
// HA 02FEB24 To display the values in summary using this
|
|
834
|
-
this.allInputValues = [];
|
|
835
|
-
this.subQuestions.forEach(element => {
|
|
836
|
-
var inputValue = {};
|
|
837
|
-
inputValue['Id'] = element?.id;
|
|
838
|
-
inputValue['type'] = element?.type;
|
|
839
|
-
inputValue['referenceField'] = element?.referenceField;
|
|
840
|
-
inputValue['questionText'] = element?.questionText;
|
|
841
|
-
inputValue['input'] = element?.input;
|
|
842
|
-
inputValue ? this.allInputValues.push(inputValue) : this.allInputValues;
|
|
843
|
-
});
|
|
844
|
-
this.answerWrap.myVal = this.allInputValues;
|
|
845
|
-
this.answerWrap.ansValue = this.inpValue;
|
|
846
|
-
this.answerWrap.groupText = cQuestion.groupName;
|
|
847
|
-
console.log('this.answerWrap.qTyp', this.answerWrap.qTyp);
|
|
848
|
-
if (this.answerWrap.qTyp == "Alphanumeric") {
|
|
849
|
-
this.answerWrap.ansValue = 'ES' + this.inpValue;
|
|
850
|
-
// console.log('Bank condition');
|
|
851
|
-
// console.log(this.answerWrap.ansValue);
|
|
852
|
-
}
|
|
853
|
-
/*if (cQuestion.type == 'Book'){
|
|
854
|
-
for (var qb of cQuestion.Questions__r.records){
|
|
855
|
-
//console.log(qb.question+'****'+"@@##$$")
|
|
856
|
-
}
|
|
857
|
-
}*/
|
|
858
|
-
//this.answerWrap.squesValue = cQuestion.question;
|
|
859
|
-
this.questionItem.input = this.inpValue;
|
|
860
|
-
// emit the current question with input to parent
|
|
861
|
-
let questionAns = {};
|
|
862
|
-
questionAns['questionDetail'] = this.questionItem;
|
|
863
|
-
questionAns['answerBookDetail'] = this.abItem;
|
|
864
|
-
console.log(questionAns);
|
|
865
|
-
this.handleQuestion.emit(questionAns);
|
|
866
|
-
console.log('questionItem-->');
|
|
867
|
-
console.log(this.questionItem);
|
|
868
|
-
this.answerWrap.squesValue = questionTxt ? questionTxt : cQuestion.question;
|
|
869
|
-
this.saveAnswer();
|
|
870
|
-
}
|
|
871
|
-
// RS 09DEC24 Changed keys
|
|
872
|
-
next() {
|
|
873
|
-
var cQuestion = new Question();
|
|
874
|
-
cQuestion = this.questionItem;
|
|
875
|
-
var typ = cQuestion.type;
|
|
876
|
-
// If no error then move to next steps
|
|
877
|
-
if (this.questionItem.error) {
|
|
878
|
-
return;
|
|
879
|
-
}
|
|
880
|
-
this.questionStack.push(cQuestion.id);
|
|
881
|
-
// this.questionName.push(cQuestion.Name);
|
|
882
|
-
// CONDITIONAL vs OPTIONONLY & UNCONDITIONAL
|
|
883
|
-
// HA 31-JAN-24 Added ternary even in else conditions below
|
|
884
|
-
if (cQuestion?.RecordType?.Name == "CONDITIONAL") {
|
|
885
|
-
for (var cOpt of cQuestion.options) {
|
|
886
|
-
// Radio / Data
|
|
887
|
-
//console.log('Option => ' + cOpt.value + ' matching with ' + ansVal);
|
|
888
|
-
if (cOpt.value == this.inpValue) {
|
|
889
|
-
//console.log('Match Found using ' + cOpt.nextQuestion);
|
|
890
|
-
if (cOpt.nextQuestion) {
|
|
891
|
-
this.recordId = cOpt.nextQuestion;
|
|
892
|
-
}
|
|
893
|
-
else {
|
|
894
|
-
this.recordId = cQuestion.nextQuestion;
|
|
895
|
-
}
|
|
896
|
-
//console.log('conditional record id'+ this.recordId);
|
|
897
|
-
}
|
|
898
|
-
}
|
|
899
|
-
// Could be of type Data and existing value
|
|
900
|
-
if (this.recordId && typ == "Data") {
|
|
901
|
-
this.recordId = cQuestion.nextQuestion;
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
else if (cQuestion?.RecordType?.Name == "OPTIONONLY") {
|
|
905
|
-
// OPTIONONLY logic
|
|
906
|
-
this.recordId = cQuestion.nextQuestion;
|
|
907
|
-
}
|
|
908
|
-
else if (cQuestion?.RecordType?.Name == "UNCONDITIONAL") {
|
|
909
|
-
//Unconditional logic
|
|
910
|
-
//console.log("inside unconditional");
|
|
911
|
-
//inside Book Type
|
|
912
|
-
if (cQuestion.type == "Book" && cQuestion.questionNumber != '6') {
|
|
913
|
-
//console.log("inside book");
|
|
914
|
-
for (let opt of cQuestion.subQuestions) {
|
|
915
|
-
//console.log(opt.type);
|
|
916
|
-
if (opt.type == "Dropdown" || opt.type == "Radio") {
|
|
917
|
-
for (var opt1 of opt.options) {
|
|
918
|
-
if (this.valueName == opt1.value) {
|
|
919
|
-
this.recordId = opt1.nextQuestion || cQuestion.nextQuestion;
|
|
920
|
-
}
|
|
921
|
-
else {
|
|
922
|
-
//console.log('Else'+this.recordId)
|
|
923
|
-
this.recordId = cQuestion.nextQuestion;
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
else {
|
|
928
|
-
this.recordId = cQuestion.nextQuestion;
|
|
929
|
-
}
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
else if (cQuestion.type == "Book" && cQuestion.questionNumber == '6') {
|
|
933
|
-
for (let opt of cQuestion.subQuestions) {
|
|
934
|
-
if (opt.type == "Dropdown" || opt.type == "Radio") {
|
|
935
|
-
for (var opt1 of opt.options) {
|
|
936
|
-
if (this.valueName == opt1.value) {
|
|
937
|
-
this.recordId = opt1.nextQuestion;
|
|
938
|
-
}
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
|
-
}
|
|
942
|
-
}
|
|
943
|
-
else {
|
|
944
|
-
this.recordId = cQuestion.nextQuestion;
|
|
945
|
-
}
|
|
946
|
-
}
|
|
947
|
-
// HA 31-JAN-24 Added else to keep the assignment default
|
|
948
|
-
else {
|
|
949
|
-
this.recordId = cQuestion.nextQuestion;
|
|
950
|
-
}
|
|
951
|
-
// CATEGORIZATION
|
|
952
|
-
//this.stepperCateg();
|
|
953
|
-
// Calling the progres bar update function
|
|
954
|
-
this.answerCount++;
|
|
955
|
-
this.updateProgress();
|
|
956
|
-
// CATEGORIZATION
|
|
957
|
-
//this.stepperCateg();
|
|
958
|
-
if (this.recordId) {
|
|
959
|
-
this.readQuestion(this.recordId);
|
|
960
|
-
this.pop = true;
|
|
961
|
-
}
|
|
962
|
-
else {
|
|
963
|
-
this.pop = false;
|
|
964
|
-
// VD disabled
|
|
965
|
-
// this.sharedService.hideLoader();
|
|
966
|
-
this.isButtonDisabled = false;
|
|
967
|
-
// Reset the Variables
|
|
968
|
-
this.inpValue = "";
|
|
969
|
-
this.answerWrap = new AnswerWrapper();
|
|
970
|
-
this.optionValues = [];
|
|
971
|
-
this.subQuestions = [];
|
|
972
|
-
this.resetFlag(typ);
|
|
973
|
-
this.questionItem = null;
|
|
974
|
-
// Show Summary
|
|
975
|
-
for (var q of this.questionStack) {
|
|
976
|
-
//console.log('Handling Question => ' + q);
|
|
977
|
-
var ansWrap = this.answerMap.get(q);
|
|
978
|
-
if (ansWrap) {
|
|
979
|
-
//console.log('Handling Answer for ' + ansWrap.quesId + ' of type ' + ansWrap.qTyp);
|
|
980
|
-
if (ansWrap.qTyp == 'File' || ansWrap.qTyp == 'Book' || ansWrap.qTyp == 'List' || ansWrap.qTyp == 'Checkbox') {
|
|
981
|
-
var newStr = '';
|
|
982
|
-
for (var ansStr of ansWrap.ansValue.split('@@##$$')) {
|
|
983
|
-
for (var ansStr1 of ansStr.split('$$@@##')) {
|
|
984
|
-
// if(ansStr1.includes('answerString')){ //remove the answer string
|
|
985
|
-
// const withoutAnswerString = ansStr1.replace("answerString: ", "");
|
|
986
|
-
// ansStr1 = withoutAnswerString;
|
|
987
|
-
// }
|
|
988
|
-
if (ansStr1.length > 0) {
|
|
989
|
-
if (newStr.length == 0) {
|
|
990
|
-
newStr = ansStr1;
|
|
991
|
-
}
|
|
992
|
-
else {
|
|
993
|
-
newStr += '; ' + ansStr1; //comma(,) changed as semi colon(;) because of address contains comma(,)
|
|
994
|
-
if (this.attachmentsMap.has(ansWrap.quesId)) {
|
|
995
|
-
for (var att of this.attachmentsMap.get(ansWrap.quesId)) {
|
|
996
|
-
newStr = newStr.replace(att.attachmentId, '');
|
|
997
|
-
}
|
|
998
|
-
}
|
|
999
|
-
newStr = (newStr.replace(',,', ', ')).replace(', ,', ', ');
|
|
1000
|
-
newStr = newStr.startsWith(',') ? newStr.substring(1, newStr.length) : (newStr.endsWith(',') ? newStr.substring(0, newStr.length - 1) : newStr);
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
}
|
|
1004
|
-
}
|
|
1005
|
-
ansWrap.ansValue = newStr;
|
|
1006
|
-
ansWrap.myVal = this.allInputValues;
|
|
1007
|
-
}
|
|
1008
|
-
// VD Check if the summary already contains an entry for the same quesId
|
|
1009
|
-
const existingAnsWrap = this.summary.find(item => item.quesId === ansWrap.quesId);
|
|
1010
|
-
if (existingAnsWrap) {
|
|
1011
|
-
// If it exists, update the ansValue and myVal
|
|
1012
|
-
existingAnsWrap.ansValue = ansWrap.ansValue;
|
|
1013
|
-
existingAnsWrap.myVal = ansWrap.myVal;
|
|
1014
|
-
}
|
|
1015
|
-
else {
|
|
1016
|
-
// If it doesn't exist, push the ansWrap to the summary array
|
|
1017
|
-
this.summary.push(ansWrap);
|
|
1018
|
-
}
|
|
1019
|
-
this.backicon = true;
|
|
1020
|
-
}
|
|
1021
|
-
}
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
|
-
getText(value) {
|
|
1025
|
-
var doc = new DOMParser().parseFromString(value, "text/html");
|
|
1026
|
-
//console.log( doc.documentElement.textContent);
|
|
1027
|
-
return this.sanitizer.bypassSecurityTrustHtml(doc.documentElement.textContent);
|
|
1028
|
-
}
|
|
1029
|
-
handleBackClick() {
|
|
1030
|
-
this.back = true;
|
|
1031
|
-
if (this.pop === true) {
|
|
1032
|
-
this.questionName.pop();
|
|
1033
|
-
}
|
|
1034
|
-
this.handleEvent.emit(this.qbItem.backTrackingId);
|
|
1035
|
-
var cQuestion = new Question();
|
|
1036
|
-
cQuestion = this.questionItem;
|
|
1037
|
-
if (cQuestion.questionNumber == '1') {
|
|
1038
|
-
this.handleEvent.emit(this.qbItem.back);
|
|
1039
|
-
}
|
|
1040
|
-
this.answerCount--;
|
|
1041
|
-
this.updateProgress();
|
|
1042
|
-
// CATEGORIZATION
|
|
1043
|
-
//this.stepperCateg();
|
|
1044
|
-
if (this.summary) {
|
|
1045
|
-
//console.log('summary true');
|
|
1046
|
-
this.summary = [];
|
|
1047
|
-
}
|
|
1048
|
-
if (this.summaryData) {
|
|
1049
|
-
this.summaryData = [];
|
|
1050
|
-
}
|
|
1051
|
-
// Read the previous question from DB
|
|
1052
|
-
// VD disabled
|
|
1053
|
-
// this.sharedService.showLoader();
|
|
1054
|
-
this.isButtonDisabled = true;
|
|
1055
|
-
this.readQuestion(this.questionStack.pop());
|
|
1056
|
-
//console.log(this.questionStack);
|
|
1057
|
-
}
|
|
1058
|
-
handleBackClickNew() {
|
|
1059
|
-
this.handleEvent.emit(this.qbItem.edit);
|
|
1060
|
-
}
|
|
1061
|
-
//updating status once Q&A completed.
|
|
1062
|
-
updateAnswerBook = (uuid) => {
|
|
1063
|
-
if (this.serv == "api") {
|
|
1064
|
-
// this.dataService.getAPIData(
|
|
1065
|
-
// this.tkn,
|
|
1066
|
-
// ["AnswerBook", "Update", uuid],
|
|
1067
|
-
// this.successupdateAB,
|
|
1068
|
-
// this.failureupdateAB
|
|
1069
|
-
// );
|
|
1070
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
1071
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1072
|
-
paramMap['c__qb_id'] = uuid;
|
|
1073
|
-
paramMap["c__record_id"] = '';
|
|
1074
|
-
this.dataService.getAPIFromNode('AnswerBook', 'Update', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1075
|
-
console.log('updated succussfully');
|
|
1076
|
-
console.log(data);
|
|
1077
|
-
this.successupdateAB(JSON.parse(data));
|
|
1078
|
-
}, (error) => {
|
|
1079
|
-
console.error('Failed to fetch question books', error);
|
|
1080
|
-
});
|
|
1081
|
-
}
|
|
1082
|
-
else {
|
|
1083
|
-
// VD 15FEB24 - used processNew method
|
|
1084
|
-
// VD 31NOV24 param changes with new method
|
|
1085
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
1086
|
-
paramMap['c__qb_id'] = uuid;
|
|
1087
|
-
paramMap["c__record_id"] = '';
|
|
1088
|
-
let para = {
|
|
1089
|
-
dataType: "AnswerBook",
|
|
1090
|
-
operation: "Update",
|
|
1091
|
-
param1: uuid,
|
|
1092
|
-
paramJSON: JSON.stringify(paramMap),
|
|
1093
|
-
languageCode: ''
|
|
1094
|
-
};
|
|
1095
|
-
// VD 12Jun24 - translation changes
|
|
1096
|
-
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para)], this.successupdateAB, this.failureupdateAB);
|
|
1097
|
-
}
|
|
1098
|
-
};
|
|
1099
|
-
successupdateAB = (response) => {
|
|
1100
|
-
console.log(response);
|
|
1101
|
-
let data = response;
|
|
1102
|
-
if (data) {
|
|
1103
|
-
this.handleSubmit.emit(data);
|
|
1104
|
-
this.abItem.status = "Completed";
|
|
1105
|
-
this.deleteAnswers(data.AnswerBook);
|
|
1106
|
-
}
|
|
1107
|
-
};
|
|
1108
|
-
// VD for delete answers
|
|
1109
|
-
deleteAnswers(answerbook) {
|
|
1110
|
-
if (this.serv == "api") {
|
|
1111
|
-
if (answerbook && answerbook.status == 'Completed') {
|
|
1112
|
-
const ansBookId = answerbook.id;
|
|
1113
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
1114
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1115
|
-
paramMap['c__qb_id'] = '';
|
|
1116
|
-
paramMap["c__record_id"] = '';
|
|
1117
|
-
this.dataService.getAPIFromNode('AnswerBook', 'delete', ansBookId, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1118
|
-
console.log(data);
|
|
1119
|
-
this.successDeleteAB(JSON.parse(data));
|
|
1120
|
-
}, (error) => {
|
|
1121
|
-
console.error('Failed to fetch question books', error);
|
|
1122
|
-
});
|
|
1123
|
-
}
|
|
1124
|
-
}
|
|
1125
|
-
}
|
|
1126
|
-
// VD for delete answers
|
|
1127
|
-
successDeleteAB = (response) => {
|
|
1128
|
-
console.log(response);
|
|
1129
|
-
if (response.status == 'success') {
|
|
1130
|
-
console.log(response.message);
|
|
1131
|
-
}
|
|
1132
|
-
else {
|
|
1133
|
-
console.error('error', response.message);
|
|
1134
|
-
}
|
|
1135
|
-
};
|
|
1136
|
-
failureupdateAB = (response) => {
|
|
1137
|
-
//console.log('status failed')
|
|
1138
|
-
};
|
|
1139
|
-
readQuestionBook = (uuid) => {
|
|
1140
|
-
if (this.serv == "api") {
|
|
1141
|
-
// this.dataService.getAPIData(
|
|
1142
|
-
// this.tkn,
|
|
1143
|
-
// ["QuestionBook", "read", uuid],
|
|
1144
|
-
// this.successReadBook,
|
|
1145
|
-
// this.failureReadBook
|
|
1146
|
-
// );
|
|
1147
|
-
//this.sharedService.showLoader();
|
|
1148
|
-
let paramMap = { createAnswerBookFlag: true };
|
|
1149
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1150
|
-
paramMap['c__qb_id'] = uuid;
|
|
1151
|
-
paramMap["c__record_id"] = '';
|
|
1152
|
-
this.dataService.getAPIFromNode('QuestionBook', 'read', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1153
|
-
// this.sharedService.hideLoader();
|
|
1154
|
-
// VD disabled
|
|
1155
|
-
this.isButtonDisabled = false;
|
|
1156
|
-
console.log(data);
|
|
1157
|
-
// this.sharedService.hide();
|
|
1158
|
-
this.successReadBook(JSON.parse(data));
|
|
1159
|
-
}, (error) => {
|
|
1160
|
-
console.error('Failed to fetch question books', error);
|
|
1161
|
-
});
|
|
1162
|
-
}
|
|
1163
|
-
else {
|
|
1164
|
-
// MR 30JAN24 - Passing flag from NGNXT
|
|
1165
|
-
let paramMap = { createAnswerBookFlag: true };
|
|
1166
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1167
|
-
// VD 31NOV24 param changes with new method
|
|
1168
|
-
paramMap['c__qb_id'] = uuid;
|
|
1169
|
-
paramMap["c__record_id"] = '';
|
|
1170
|
-
let para1 = {
|
|
1171
|
-
dataType: "QuestionBook",
|
|
1172
|
-
operation: "read",
|
|
1173
|
-
param1: uuid,
|
|
1174
|
-
paramJSON: JSON.stringify(paramMap),
|
|
1175
|
-
languageCode: ''
|
|
1176
|
-
};
|
|
1177
|
-
// , JSON.stringify(paramMap)
|
|
1178
|
-
// VD 12Jun24 - translation changes
|
|
1179
|
-
this.sfService.remoteAction(
|
|
1180
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1181
|
-
"NxtController.processData", [JSON.stringify(para1)], this.successReadBook, this.failureReadBook);
|
|
1182
|
-
}
|
|
1183
|
-
};
|
|
1184
|
-
successReadBook = (response) => {
|
|
1185
|
-
console.log('Inside the successReadBook');
|
|
1186
|
-
console.log(response);
|
|
1187
|
-
if (response != null || response != undefined) {
|
|
1188
|
-
this.qbItem = response.questionbook;
|
|
1189
|
-
this.abItem = response.answerbook;
|
|
1190
|
-
this.handleBook.emit(response);
|
|
1191
|
-
}
|
|
1192
|
-
// console.log('readingQuestion using ' + this.qbItem);
|
|
1193
|
-
if (this.abItem?.status == "Pending") {
|
|
1194
|
-
if (this.abItem.answers == null ||
|
|
1195
|
-
this.abItem.answers.length == 0) {
|
|
1196
|
-
this.readQuestion(this.qbItem.firstQuestion);
|
|
1197
|
-
}
|
|
1198
|
-
else {
|
|
1199
|
-
// Populate the existing answers
|
|
1200
|
-
var lastQuestionId = "";
|
|
1201
|
-
for (var ansObject of this.abItem.answers) {
|
|
1202
|
-
lastQuestionId = ansObject.quesId;
|
|
1203
|
-
this.questionStack.push(ansObject.quesId);
|
|
1204
|
-
this.answerMap.set(ansObject.quesId, {
|
|
1205
|
-
quesValue: ansObject.quesValue,
|
|
1206
|
-
ansValue: ansObject.ansValue,
|
|
1207
|
-
quesId: ansObject.quesId,
|
|
1208
|
-
qTyp: ansObject.qTyp,
|
|
1209
|
-
groupText: ansObject.groupText,
|
|
1210
|
-
});
|
|
1211
|
-
//console.log(this.questionStack)
|
|
1212
|
-
if (ansObject.qTyp == "Book") {
|
|
1213
|
-
var av1 = ansObject.ansValue.split("@@##$$");
|
|
1214
|
-
// //console.log("book log");
|
|
1215
|
-
// //console.log("bookid" + av1[0]);
|
|
1216
|
-
this.attachmentsMap.set(ansObject.quesId, [
|
|
1217
|
-
{ attachmentName: av1[1], attachmentId: av1[0] },
|
|
1218
|
-
]);
|
|
1219
|
-
// //console.log(this.attachmentsMap);
|
|
1220
|
-
}
|
|
1221
|
-
else if (ansObject.qTyp == "File") {
|
|
1222
|
-
// //console.log("inside if");
|
|
1223
|
-
var attList;
|
|
1224
|
-
var att;
|
|
1225
|
-
for (var attVar of ansObject.ansValue.split(",")) {
|
|
1226
|
-
var attIdName = attVar.split("@@##$$");
|
|
1227
|
-
att.attachmentName = attIdName[1];
|
|
1228
|
-
att.attachmentId = attIdName[0];
|
|
1229
|
-
attList.push(att);
|
|
1230
|
-
}
|
|
1231
|
-
this.attachmentsMap.set(ansObject.quesId, attList);
|
|
1232
|
-
// //console.log(this.attachmentsMap);
|
|
1233
|
-
}
|
|
1234
|
-
}
|
|
1235
|
-
this.questionStack.pop();
|
|
1236
|
-
//console.log(this.answerMap);
|
|
1237
|
-
// Read the last answered question
|
|
1238
|
-
this.readQuestion(lastQuestionId);
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
else if (this.abItem?.status == "Completed") {
|
|
1242
|
-
this.handleEvent.emit("Summaryupdated");
|
|
1243
|
-
// Temporary Fix for duplicate answers on the summary.
|
|
1244
|
-
this.summary = [];
|
|
1245
|
-
this.percent = 100;
|
|
1246
|
-
this.progressStyle = "100%";
|
|
1247
|
-
if (this.serv != 'api') {
|
|
1248
|
-
// VD 31NOV24 wrapper changes
|
|
1249
|
-
for (var answer of this.abItem.answers) {
|
|
1250
|
-
var answers = {};
|
|
1251
|
-
if (answer.qTyp == "File") {
|
|
1252
|
-
var files = "";
|
|
1253
|
-
var fIndex = 0;
|
|
1254
|
-
var fileList = answer.ansValue.split(",");
|
|
1255
|
-
for (var fileIdName of fileList) {
|
|
1256
|
-
var fileName = fileIdName.split("@#$");
|
|
1257
|
-
if (fIndex == 0) {
|
|
1258
|
-
files = fileName[1];
|
|
1259
|
-
}
|
|
1260
|
-
else {
|
|
1261
|
-
files = files + " ," + fileName[1];
|
|
1262
|
-
}
|
|
1263
|
-
fIndex++;
|
|
1264
|
-
}
|
|
1265
|
-
answers = {
|
|
1266
|
-
groupText: answer.groupText,
|
|
1267
|
-
quesValue: answer.quesValue,
|
|
1268
|
-
ansValue: files,
|
|
1269
|
-
};
|
|
1270
|
-
// this.summary.push(answers);
|
|
1271
|
-
}
|
|
1272
|
-
else if (answer.qTyp == "Book") {
|
|
1273
|
-
/* var quesNo=0;
|
|
1274
|
-
if(answer.ansValue.includes("@@##$$")){
|
|
1275
|
-
//console.log('line 1223');
|
|
1276
|
-
for (var bqAnswerValue of answer.ansValue.split("@@##$$")) {
|
|
1277
|
-
var quesValue=answer.questionText.split("@@##$$");
|
|
1278
|
-
answers = {};
|
|
1279
|
-
answers = {
|
|
1280
|
-
// groupText:answer.questionText,
|
|
1281
|
-
quesValue: "<p>"+ quesValue[quesNo]+"<p>",
|
|
1282
|
-
ansValue: bqAnswerValue,
|
|
1283
|
-
};
|
|
1284
|
-
quesNo++;
|
|
1285
|
-
this.summary.push(answers);
|
|
1286
|
-
}
|
|
1287
|
-
}*/
|
|
1288
|
-
if (answer.ansValue.includes("@@##$$")) {
|
|
1289
|
-
var answervalues = answer.ansValue.split("@@##$$");
|
|
1290
|
-
//console.log('value')
|
|
1291
|
-
answers = {
|
|
1292
|
-
//groupText:answer.groupText,
|
|
1293
|
-
quesValue: answer.quesValue,
|
|
1294
|
-
ansValue: answervalues,
|
|
1295
|
-
};
|
|
1296
|
-
//console.log(answers)
|
|
1297
|
-
// this.summary.push(answers);
|
|
1298
|
-
}
|
|
1299
|
-
else {
|
|
1300
|
-
answers = {
|
|
1301
|
-
//groupText:answer.groupText,
|
|
1302
|
-
quesValue: answer.quesValue,
|
|
1303
|
-
ansValue: answer.ansValue,
|
|
1304
|
-
};
|
|
1305
|
-
// this.summary.push(answers);
|
|
1306
|
-
}
|
|
1307
|
-
}
|
|
1308
|
-
else {
|
|
1309
|
-
// var ans1 = answer.ansValue.split("@@##$$");
|
|
1310
|
-
answers = {
|
|
1311
|
-
//groupText:answer.groupText,
|
|
1312
|
-
quesValue: answer.quesValue,
|
|
1313
|
-
ansValue: answer.ansValue,
|
|
1314
|
-
};
|
|
1315
|
-
// this.summary.push(answers);
|
|
1316
|
-
}
|
|
1317
|
-
}
|
|
1318
|
-
}
|
|
1319
|
-
}
|
|
1320
|
-
};
|
|
1321
|
-
failureReadBook = (response) => {
|
|
1322
|
-
console.log('Inside the failureReadBook');
|
|
1323
|
-
console.log(response);
|
|
1324
|
-
};
|
|
1325
|
-
readAnswerbook = (uuid) => {
|
|
1326
|
-
if (this.serv = "api") {
|
|
1327
|
-
this.dataService.getAPIData(this.tkn, ["AnswerBook", "read", uuid], this.successAnswerBookRead, this.failureAnswerBookRead);
|
|
1328
|
-
}
|
|
1329
|
-
else {
|
|
1330
|
-
// VD 15FEB24 - used processNew method
|
|
1331
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
1332
|
-
paramMap['c__qb_id'] = uuid;
|
|
1333
|
-
paramMap["c__record_id"] = '';
|
|
1334
|
-
// VD 31NOV24 param changes with new method
|
|
1335
|
-
let para2 = {
|
|
1336
|
-
dataType: "AnswerBook",
|
|
1337
|
-
operation: "read",
|
|
1338
|
-
param1: uuid,
|
|
1339
|
-
paramJSON: JSON.stringify(paramMap),
|
|
1340
|
-
languageCode: ''
|
|
1341
|
-
};
|
|
1342
|
-
// VD 12Jun24 - translation changes
|
|
1343
|
-
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para2)], this.successAnswerBookRead, this.failureAnswerBookRead);
|
|
1344
|
-
}
|
|
1345
|
-
};
|
|
1346
|
-
successAnswerBookRead = (response) => {
|
|
1347
|
-
if (this.abItem?.status == "Completed") {
|
|
1348
|
-
for (var answer of this.abItem.answers) {
|
|
1349
|
-
var av = answer.ansValue.split("@@##$$");
|
|
1350
|
-
var answers = { quesValue: answer.quesValue, ansValue: av, groupText: answer.groupText };
|
|
1351
|
-
//console.log(answers)
|
|
1352
|
-
this.summary.push(answers);
|
|
1353
|
-
}
|
|
1354
|
-
this.handleEvent.emit("Summaryupdated");
|
|
1355
|
-
}
|
|
1356
|
-
};
|
|
1357
|
-
failureAnswerBookRead = (response) => {
|
|
1358
|
-
//console.log('inside failureread');
|
|
1359
|
-
//console.log(response);
|
|
1360
|
-
};
|
|
1361
|
-
readQuestion = (uuid) => {
|
|
1362
|
-
if (this.serv == "api") {
|
|
1363
|
-
// this.dataService.getAPIData(
|
|
1364
|
-
// this.tkn,
|
|
1365
|
-
// ["Question", "read", uuid],
|
|
1366
|
-
// this.successRead,
|
|
1367
|
-
// this.failureRead
|
|
1368
|
-
// );
|
|
1369
|
-
//this.sharedService.showLoader();
|
|
1370
|
-
let paramMap = { createAnswerBookFlag: true };
|
|
1371
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1372
|
-
paramMap['c__qb_id'] = uuid;
|
|
1373
|
-
paramMap["c__record_id"] = '';
|
|
1374
|
-
this.dataService.getAPIFromNode('Question', 'read', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1375
|
-
// this.sharedService.hideLoader();
|
|
1376
|
-
// VD disabled
|
|
1377
|
-
this.isButtonDisabled = false;
|
|
1378
|
-
console.log('data came sucessfully');
|
|
1379
|
-
console.log(data);
|
|
1380
|
-
this.successRead(JSON.parse(data));
|
|
1381
|
-
}, (error) => {
|
|
1382
|
-
//this.sharedService.hideLoader();
|
|
1383
|
-
console.error('Failed to fetch question books', error);
|
|
1384
|
-
});
|
|
1385
|
-
}
|
|
1386
|
-
else {
|
|
1387
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1388
|
-
// // VD 15FEB24 - make createAnswerBookFlag false only
|
|
1389
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
1390
|
-
paramMap['c__qb_id'] = uuid;
|
|
1391
|
-
paramMap["c__record_id"] = '';
|
|
1392
|
-
// VD 31NOV24 param changes with new method
|
|
1393
|
-
let para2 = {
|
|
1394
|
-
dataType: "Question",
|
|
1395
|
-
operation: "read",
|
|
1396
|
-
param1: uuid,
|
|
1397
|
-
paramJSON: JSON.stringify(paramMap),
|
|
1398
|
-
languageCode: ''
|
|
1399
|
-
};
|
|
1400
|
-
this.sfService.remoteAction(
|
|
1401
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1402
|
-
"NxtController.processData", [JSON.stringify(para2)], this.successRead, this.failureRead);
|
|
1403
|
-
}
|
|
1404
|
-
};
|
|
1405
|
-
successRead = (response) => {
|
|
1406
|
-
// VD disabled
|
|
1407
|
-
this.isButtonDisabled = false;
|
|
1408
|
-
console.log('Inside the successRead');
|
|
1409
|
-
console.log(response);
|
|
1410
|
-
// HA 02FEB24 For testing for used this and in future it can be used to test with static data
|
|
1411
|
-
// var ab = ['first','last','123','12-12-2000','22','Male','12 cross 1','EmContact','98765','A','Single'];
|
|
1412
|
-
// for(const [index,item] of response.question.subQuestions.entries()){
|
|
1413
|
-
// item.input = ab[index];
|
|
1414
|
-
// }
|
|
1415
|
-
// console.log(this.questionItem);
|
|
1416
|
-
// Reset the Variables
|
|
1417
|
-
if (this.questionItem) {
|
|
1418
|
-
this.inpValue = "";
|
|
1419
|
-
this.answerWrap = new AnswerWrapper();
|
|
1420
|
-
this.optionValues = [];
|
|
1421
|
-
this.subQuestions = [];
|
|
1422
|
-
this.resetFlag(this.questionItem.type);
|
|
1423
|
-
}
|
|
1424
|
-
this.questionItem = response.question;
|
|
1425
|
-
// console.log(this.questionItem);
|
|
1426
|
-
if (this.questionItem.type === 'Alphanumeric') {
|
|
1427
|
-
this.splCCBackClick = true;
|
|
1428
|
-
}
|
|
1429
|
-
this.currentQuestionId = this.questionItem.id;
|
|
1430
|
-
this.handlePage.emit(this.questionItem.trackingId);
|
|
1431
|
-
// Handle the subQuestion options
|
|
1432
|
-
if (response.sqOptions) {
|
|
1433
|
-
//var newRecords = [];
|
|
1434
|
-
for (var q of this.questionItem.subQuestions) {
|
|
1435
|
-
//console.log(q.Name);
|
|
1436
|
-
var sq = response.sqOptions[q.id];
|
|
1437
|
-
if (sq) {
|
|
1438
|
-
//console.log('found options for subquestion ' + q.Name);
|
|
1439
|
-
if (!q.options) {
|
|
1440
|
-
q.options = sq.options;
|
|
1441
|
-
}
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
|
-
}
|
|
1445
|
-
this.processQuestion();
|
|
1446
|
-
this.innerhtml = this.sanitizer.bypassSecurityTrustHtml(this.questionItem.additionalRichContent);
|
|
1447
|
-
this.trackId();
|
|
1448
|
-
};
|
|
1449
|
-
trackId() {
|
|
1450
|
-
var qtrackId = this.questionItem.trackingId;
|
|
1451
|
-
//console.log('trackId-question'+qtrackId);
|
|
1452
|
-
}
|
|
1453
|
-
failureRead = (response) => {
|
|
1454
|
-
//console.log('inside failureread');
|
|
1455
|
-
//console.log(response);
|
|
1456
|
-
};
|
|
1457
|
-
saveAnswer = () => {
|
|
1458
|
-
// Set the Answer Number based on the Question Stack Length
|
|
1459
|
-
if (this.inpValue != ".") {
|
|
1460
|
-
this.currentQuestionId = null;
|
|
1461
|
-
}
|
|
1462
|
-
this.answerWrap.ansNumber = this.questionStack.length + 1;
|
|
1463
|
-
if (this.serv == "api") {
|
|
1464
|
-
// this.dataService.getAPIData(
|
|
1465
|
-
// this.tkn,
|
|
1466
|
-
// ["Answer", "create", JSON.stringify(this.answerWrap)],
|
|
1467
|
-
// this.successSave,
|
|
1468
|
-
// this.failureSave
|
|
1469
|
-
// );
|
|
1470
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
1471
|
-
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1472
|
-
paramMap['c__qb_id'] = '';
|
|
1473
|
-
paramMap["c__record_id"] = '';
|
|
1474
|
-
this.dataService.getAPIFromNode('Answer', 'create', JSON.stringify(this.answerWrap), JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1475
|
-
console.log('data came sucessfully');
|
|
1476
|
-
console.log(data);
|
|
1477
|
-
this.successSave(JSON.parse(data));
|
|
1478
|
-
}, (error) => {
|
|
1479
|
-
console.error('Failed to fetch question books', error);
|
|
1480
|
-
});
|
|
1481
|
-
}
|
|
1482
|
-
else {
|
|
1483
|
-
// VD 15FEB24 - used processNew method
|
|
1484
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
1485
|
-
paramMap['c__qb_id'] = '';
|
|
1486
|
-
paramMap["c__record_id"] = '';
|
|
1487
|
-
// VD 31NOV24 param changes with new method
|
|
1488
|
-
let para3 = {
|
|
1489
|
-
dataType: "Answer",
|
|
1490
|
-
operation: "create",
|
|
1491
|
-
param1: JSON.stringify(this.answerWrap),
|
|
1492
|
-
paramJSON: JSON.stringify(paramMap),
|
|
1493
|
-
languageCode: ''
|
|
1494
|
-
};
|
|
1495
|
-
// VD 12Jun24 - translation changes
|
|
1496
|
-
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para3)], this.successSave, this.failureSave);
|
|
1497
|
-
}
|
|
1498
|
-
};
|
|
1499
|
-
htmlDecode(input) {
|
|
1500
|
-
var doc = new DOMParser().parseFromString(input, "text/html");
|
|
1501
|
-
return doc.documentElement.textContent;
|
|
1502
|
-
}
|
|
1503
|
-
successSave = (response) => {
|
|
1504
|
-
if (response.status == "success") {
|
|
1505
|
-
//this.abItem = response.answerbook;
|
|
1506
|
-
this.answerMap.set(response.answer.quesId, response.answer);
|
|
1507
|
-
}
|
|
1508
|
-
else {
|
|
1509
|
-
this.questionItem.error = new ErrorWrapper();
|
|
1510
|
-
this.questionItem.error.errorMsg = response.error.errorMsg;
|
|
1511
|
-
}
|
|
1512
|
-
if (!this.backButtonFlag) {
|
|
1513
|
-
this.next();
|
|
1514
|
-
}
|
|
1515
|
-
};
|
|
1516
|
-
failureSave = (response) => {
|
|
1517
|
-
//console.log('inside failureSave');
|
|
1518
|
-
//console.log(response);
|
|
1519
|
-
};
|
|
1520
|
-
processQuestion = () => {
|
|
1521
|
-
// console.log('Inside the processQuestion');
|
|
1522
|
-
// console.log('splCCBackClick = '+this.splCCBackClick);
|
|
1523
|
-
// console.log(this.questionStack);
|
|
1524
|
-
//console.log(this.questionItem);
|
|
1525
|
-
this.pop = true;
|
|
1526
|
-
// if(!this.back){
|
|
1527
|
-
// this.questionName.push(this.questionItem.Name)
|
|
1528
|
-
// }
|
|
1529
|
-
if (this.qbItem.progressBar === true) {
|
|
1530
|
-
if (!this.back) {
|
|
1531
|
-
this.questionName.push(this.questionItem.Name);
|
|
1532
|
-
}
|
|
1533
|
-
this.back = false;
|
|
1534
|
-
if (this.questionName[0] === this.questionName[1]) {
|
|
1535
|
-
this.questionName.pop();
|
|
1536
|
-
}
|
|
1537
|
-
this.currentName = this.questionItem.Name;
|
|
1538
|
-
this.pathquestion = this.questionName.indexOf(this.currentName);
|
|
1539
|
-
this.possibilities = this.qbItem.possibilities;
|
|
1540
|
-
}
|
|
1541
|
-
this.myDatePickerOptions;
|
|
1542
|
-
this.day();
|
|
1543
|
-
//console.log('processing question ' + this.questionItem.Name + ' existing answers are ' + this.answerMap.size); // => ' + JSON.stringify(this.questionItem));
|
|
1544
|
-
// Set the Flags to show right fields
|
|
1545
|
-
this.setFlag(this.questionItem.type);
|
|
1546
|
-
//console.log('After the setFlag method dtFlag = '+this.dtFlag);
|
|
1547
|
-
// Check the existing answer from answerMap
|
|
1548
|
-
if (this.answerMap.has(this.questionItem.id)) {
|
|
1549
|
-
// //console.log("existing answer found for this.questionItem.Name");
|
|
1550
|
-
var eAnswer = this.answerMap.get(this.questionItem.id);
|
|
1551
|
-
// Get the existing answer from the Map
|
|
1552
|
-
this.inpValue = eAnswer.ansValue;
|
|
1553
|
-
//console.log('inpValue has been set to ' + this.inpValue);
|
|
1554
|
-
if (this.attachmentsMap.has(this.questionItem.id)) {
|
|
1555
|
-
this.attachments = this.attachmentsMap.get(this.questionItem.id);
|
|
1556
|
-
}
|
|
1557
|
-
}
|
|
1558
|
-
else {
|
|
1559
|
-
//console.log('inside removing attachment array');
|
|
1560
|
-
this.attachments = [];
|
|
1561
|
-
}
|
|
1562
|
-
// console.log(this.inpValue);
|
|
1563
|
-
if (this.splCCBackClick && this.inpValue && this.inpValue.includes('ES')) {
|
|
1564
|
-
// console.log('Inside the if cond');
|
|
1565
|
-
this.splCCBackClick = false;
|
|
1566
|
-
this.inpValue = this.inpValue.replace('ES', '');
|
|
1567
|
-
}
|
|
1568
|
-
if (this.checkboxFlag) {
|
|
1569
|
-
// Set the Options for Checkbox
|
|
1570
|
-
this.setOptions(this.questionItem.options);
|
|
1571
|
-
}
|
|
1572
|
-
else if (this.bookFlag) {
|
|
1573
|
-
//console.log('Inise the expected bookFlag cond');
|
|
1574
|
-
//console.log('dtFlag = '+this.dtFlag);
|
|
1575
|
-
// HA 20FEB24 Label Fix
|
|
1576
|
-
this.questionItem.subQuestions.forEach(element => {
|
|
1577
|
-
element.questionText = element.questionText.replace(/<[^>]+>/g, '');
|
|
1578
|
-
});
|
|
1579
|
-
this.setSubQuestions(this.questionItem.subQuestions);
|
|
1580
|
-
}
|
|
1581
|
-
else if (this.listFlag) {
|
|
1582
|
-
// Set the LocalSubQuestions
|
|
1583
|
-
// console.log('inside list flag');
|
|
1584
|
-
// console.log(this.questionItem.Questions__r.records);
|
|
1585
|
-
// console.log(this.abItem.Questions__r.records);
|
|
1586
|
-
if (!this.localSubQMap.has(this.questionItem.id)) {
|
|
1587
|
-
this.setSubQuestions(this.questionItem.subQuestions);
|
|
1588
|
-
}
|
|
1589
|
-
}
|
|
1590
|
-
else if (this.dtFlag) {
|
|
1591
|
-
//console.log('Inise the unexpected dtFlag cond');
|
|
1592
|
-
this.selectedHour = "";
|
|
1593
|
-
this.selectedMinute = "";
|
|
1594
|
-
this.selDate = "";
|
|
1595
|
-
// 2021-5-16T00:00
|
|
1596
|
-
if (this.dateMap.has(this.questionItem.id)) {
|
|
1597
|
-
this.selDate = this.dateMap.get(this.questionItem.id);
|
|
1598
|
-
}
|
|
1599
|
-
if (this.selectedhourMap.has(this.questionItem.id)) {
|
|
1600
|
-
this.selectedHour = this.selectedhourMap.get(this.questionItem.id);
|
|
1601
|
-
}
|
|
1602
|
-
if (this.selectedminuteMap.has(this.questionItem.id)) {
|
|
1603
|
-
this.selectedMinute = this.selectedminuteMap.get(this.questionItem.id);
|
|
1604
|
-
}
|
|
1605
|
-
if (this.questionItem.x24Hours === true) {
|
|
1606
|
-
this.hours.push("13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "00");
|
|
1607
|
-
}
|
|
1608
|
-
if (this.questionItem.x24Hours === false) {
|
|
1609
|
-
this.hours = this.hours.slice(0, 12);
|
|
1610
|
-
}
|
|
1611
|
-
if (this.dtFlag && this.inpValue) {
|
|
1612
|
-
var dtVal = this.inpValue.split("T");
|
|
1613
|
-
var dtval0 = this.inpValue.split(" ");
|
|
1614
|
-
this.inpValue = dtVal[0];
|
|
1615
|
-
this.inpValue = dtval0[0];
|
|
1616
|
-
this.questionItem.input = dtVal[1];
|
|
1617
|
-
this.questionItem.input = dtval0[1];
|
|
1618
|
-
}
|
|
1619
|
-
if (this.questionItem.isDateBackward ||
|
|
1620
|
-
this.questionItem.isDateForward) {
|
|
1621
|
-
if (this.questionItem.isDateBackward === true) {
|
|
1622
|
-
this.myDatePickerOptions.disableSince = {
|
|
1623
|
-
year: this.today.getFullYear(),
|
|
1624
|
-
month: this.today.getMonth() + 1,
|
|
1625
|
-
day: this.today.getDate() + 1,
|
|
1626
|
-
};
|
|
1627
|
-
}
|
|
1628
|
-
if (this.questionItem.isDateForward === true) {
|
|
1629
|
-
this.myDatePickerOptions.disableUntil = {
|
|
1630
|
-
year: this.today.getFullYear(),
|
|
1631
|
-
month: this.today.getMonth() + 1,
|
|
1632
|
-
day: this.today.getDate(),
|
|
1633
|
-
};
|
|
1634
|
-
}
|
|
1635
|
-
}
|
|
1636
|
-
}
|
|
1637
|
-
else if (this.fileFlag) {
|
|
1638
|
-
this.fileUI();
|
|
1639
|
-
// logic
|
|
1640
|
-
this.allowedFileExtension =
|
|
1641
|
-
this.questionItem.allowedFileExtensions?.split(";");
|
|
1642
|
-
//console.log(this.allowedFileExtension);
|
|
1643
|
-
}
|
|
1644
|
-
if (this.qbItem.progressBar === true) {
|
|
1645
|
-
this.updateProgress();
|
|
1646
|
-
}
|
|
1647
|
-
};
|
|
1648
|
-
setFlag(typ) {
|
|
1649
|
-
//console.log('inside setFlag for ' + typ);
|
|
1650
|
-
if (typ) {
|
|
1651
|
-
// Set the Flags
|
|
1652
|
-
if (typ == "Text") {
|
|
1653
|
-
this.textFlag = true;
|
|
1654
|
-
//this.numberFlag = true;
|
|
1655
|
-
}
|
|
1656
|
-
else if (typ == "Number") {
|
|
1657
|
-
this.numberFlag = true;
|
|
1658
|
-
}
|
|
1659
|
-
else if (typ == "AlphaNumeric") {
|
|
1660
|
-
this.alphanumericFlag = true;
|
|
1661
|
-
/*if(this.inpValue.length === 0){
|
|
1662
|
-
this.inpValue='ES'
|
|
1663
|
-
}*/
|
|
1664
|
-
}
|
|
1665
|
-
else if (typ == "Email") {
|
|
1666
|
-
this.emailFlag = true;
|
|
1667
|
-
}
|
|
1668
|
-
else if (typ == "File") {
|
|
1669
|
-
this.fileFlag = true;
|
|
1670
|
-
}
|
|
1671
|
-
else if (typ == "DateTime") {
|
|
1672
|
-
this.dtFlag = true;
|
|
1673
|
-
this.timeFlag = true;
|
|
1674
|
-
this.dateFlag = true;
|
|
1675
|
-
}
|
|
1676
|
-
else if (typ == "TextArea") {
|
|
1677
|
-
this.taFlag = true;
|
|
1678
|
-
}
|
|
1679
|
-
else if (typ == "Radio") {
|
|
1680
|
-
this.radioFlag = true;
|
|
1681
|
-
}
|
|
1682
|
-
// else if (typ == "RichTextArea") {
|
|
1683
|
-
// this.rtaFlag = true;
|
|
1684
|
-
// }
|
|
1685
|
-
else if (typ == "Dropdown") {
|
|
1686
|
-
this.dropdownFlag = true;
|
|
1687
|
-
}
|
|
1688
|
-
else if (typ == "Checkbox") {
|
|
1689
|
-
this.checkboxFlag = true;
|
|
1690
|
-
}
|
|
1691
|
-
else if (typ == "Book") {
|
|
1692
|
-
this.bookFlag = true;
|
|
1693
|
-
}
|
|
1694
|
-
else if (typ == 'List') {
|
|
1695
|
-
this.listFlag = true;
|
|
1696
|
-
}
|
|
1697
|
-
else if (typ == "Time") {
|
|
1698
|
-
//console.log('Inside the Time cond');
|
|
1699
|
-
this.dtFlag = true;
|
|
1700
|
-
this.timeFlag = true;
|
|
1701
|
-
//console.log(this.dtFlag);
|
|
1702
|
-
}
|
|
1703
|
-
else if (typ == "Date") {
|
|
1704
|
-
//console.log('Inside the Date cond');
|
|
1705
|
-
this.dtFlag = true;
|
|
1706
|
-
this.dateFlag = true;
|
|
1707
|
-
//console.log(this.dtFlag);
|
|
1708
|
-
}
|
|
1709
|
-
}
|
|
1710
|
-
}
|
|
1711
|
-
resetFlag(typ) {
|
|
1712
|
-
if (typ) {
|
|
1713
|
-
// Set the Flags
|
|
1714
|
-
if (typ == "Text") {
|
|
1715
|
-
this.textFlag = false;
|
|
1716
|
-
//this.numberFlag = false;
|
|
1717
|
-
}
|
|
1718
|
-
else if (typ == "Number") {
|
|
1719
|
-
this.numberFlag = false;
|
|
1720
|
-
}
|
|
1721
|
-
else if (typ == "Alphanumeric") {
|
|
1722
|
-
this.alphanumericFlag = false;
|
|
1723
|
-
}
|
|
1724
|
-
else if (typ == "Email") {
|
|
1725
|
-
this.emailFlag = false;
|
|
1726
|
-
}
|
|
1727
|
-
else if (typ == "File") {
|
|
1728
|
-
this.fileFlag = false;
|
|
1729
|
-
}
|
|
1730
|
-
// else if (typ == "RichTextArea") {
|
|
1731
|
-
// this.rtaFlag = false;
|
|
1732
|
-
// }
|
|
1733
|
-
else if (typ == "DateTime") {
|
|
1734
|
-
this.dtFlag = false;
|
|
1735
|
-
this.dateFlag = false;
|
|
1736
|
-
this.timeFlag = false;
|
|
1737
|
-
}
|
|
1738
|
-
else if (typ == "TextArea") {
|
|
1739
|
-
this.taFlag = false;
|
|
1740
|
-
}
|
|
1741
|
-
else if (typ == "Radio") {
|
|
1742
|
-
this.radioFlag = false;
|
|
1743
|
-
}
|
|
1744
|
-
else if (typ == "Dropdown") {
|
|
1745
|
-
this.dropdownFlag = false;
|
|
1746
|
-
}
|
|
1747
|
-
else if (typ == "Checkbox") {
|
|
1748
|
-
this.checkboxFlag = false;
|
|
1749
|
-
}
|
|
1750
|
-
else if (typ == "Book") {
|
|
1751
|
-
this.bookFlag = false;
|
|
1752
|
-
}
|
|
1753
|
-
else if (typ == 'List') {
|
|
1754
|
-
this.listFlag = false;
|
|
1755
|
-
}
|
|
1756
|
-
else if (typ == "Time") {
|
|
1757
|
-
this.dtFlag = false;
|
|
1758
|
-
this.timeFlag = false;
|
|
1759
|
-
}
|
|
1760
|
-
else if (typ == "Date") {
|
|
1761
|
-
this.dtFlag = false;
|
|
1762
|
-
this.dateFlag = false;
|
|
1763
|
-
}
|
|
1764
|
-
}
|
|
1765
|
-
}
|
|
1766
|
-
setOptions(records) {
|
|
1767
|
-
for (var opt of records) {
|
|
1768
|
-
var ov = new OptionValue();
|
|
1769
|
-
ov.id = opt.id;
|
|
1770
|
-
ov.Name = opt.Name;
|
|
1771
|
-
ov.value = opt.value;
|
|
1772
|
-
ov.nextQuestion = opt.nextQuestion;
|
|
1773
|
-
ov.checked = false;
|
|
1774
|
-
if (this.inpValue &&
|
|
1775
|
-
this.inpValue.split("@@##$$").includes(opt.value)) {
|
|
1776
|
-
ov.checked = true;
|
|
1777
|
-
}
|
|
1778
|
-
this.optionValues.push(ov);
|
|
1779
|
-
}
|
|
1780
|
-
}
|
|
1781
|
-
// Capture and Process Child Event
|
|
1782
|
-
childEventCapture(event, ques) {
|
|
1783
|
-
console.log('inside childEventCapture ');
|
|
1784
|
-
console.log(event);
|
|
1785
|
-
this.changeService.announceChange(event);
|
|
1786
|
-
// HA 31-JAN-24 Assign values to dropdown question
|
|
1787
|
-
ques.input = event?.valueObj;
|
|
1788
|
-
//ques.input = event; // here when using the ng-select got event as value
|
|
1789
|
-
}
|
|
1790
|
-
// RS 06JAN25
|
|
1791
|
-
// for richtext
|
|
1792
|
-
handleRichTextChange(value) {
|
|
1793
|
-
// this.inpValue = value;
|
|
1794
|
-
// this.clearError();
|
|
1795
|
-
console.log('Rich Text Change Captured:', value);
|
|
1796
|
-
}
|
|
1797
|
-
setSubQuestions(records) {
|
|
1798
|
-
// console.log('inside setSubQuestions');
|
|
1799
|
-
// console.log(records);
|
|
1800
|
-
var qaMap = new Map();
|
|
1801
|
-
// console.log(this.inpValue);
|
|
1802
|
-
if (this.inpValue) {
|
|
1803
|
-
var aIndex = 0;
|
|
1804
|
-
// search changed as semi colon because of address contains comma
|
|
1805
|
-
if ((this.inpValue.search("; ") == -1)) {
|
|
1806
|
-
// const withoutAnswerString = this.inpValue.replace("answerString: ", ""); //remove the answer string
|
|
1807
|
-
// this.inpValue = withoutAnswerString;
|
|
1808
|
-
this.inpValue = this.inpValue + '@@##$$';
|
|
1809
|
-
for (var ansStr of this.inpValue.split("@@##$$")) {
|
|
1810
|
-
aIndex++;
|
|
1811
|
-
qaMap.set(aIndex, ansStr);
|
|
1812
|
-
//console.log('Setting the qaMap for ' + aIndex + ' with ' + ansStr);
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
else {
|
|
1816
|
-
for (var ansStr of this.inpValue.split("; ")) {
|
|
1817
|
-
aIndex++;
|
|
1818
|
-
qaMap.set(aIndex, ansStr);
|
|
1819
|
-
//console.log('Setting the qaMap ' + aIndex + ' with ' + ansStr);
|
|
1820
|
-
}
|
|
1821
|
-
}
|
|
1822
|
-
}
|
|
1823
|
-
// console.log('after setting values from inpvalue qa map are');
|
|
1824
|
-
// console.log(qaMap);
|
|
1825
|
-
for (var ques of records) {
|
|
1826
|
-
if (ques.type == "File") {
|
|
1827
|
-
this.valueName1 = ques.allowedFileExtensions;
|
|
1828
|
-
//console.log(this.valueName1);
|
|
1829
|
-
}
|
|
1830
|
-
var ans = '';
|
|
1831
|
-
if (qaMap.has(ques.questionNumber)) {
|
|
1832
|
-
ques.input = qaMap.get(ques.questionNumber);
|
|
1833
|
-
// console.log('after fetching map values');
|
|
1834
|
-
// console.log(ques.input);
|
|
1835
|
-
if (ques.input.indexOf('$$@@##') > 0) {
|
|
1836
|
-
// console.log('answer supposed to be trimmed');
|
|
1837
|
-
// console.log(ques.input);
|
|
1838
|
-
ans = ques.input.substring(ques.input.indexOf('$$@@##') + 6, ques.input.length);
|
|
1839
|
-
// console.log(ans);
|
|
1840
|
-
ques.input = ques.input.substring(0, ques.input.indexOf('$$@@##'));
|
|
1841
|
-
// console.log(ques.input);
|
|
1842
|
-
}
|
|
1843
|
-
}
|
|
1844
|
-
if ((ques.type === "Date") && (ques.isDateBackward || ques.isDateForward)) {
|
|
1845
|
-
//console.log('Inside the date backward/forward cond');
|
|
1846
|
-
if (ques.isDateBackward === true) {
|
|
1847
|
-
//console.log('Inside the isDateBackward');
|
|
1848
|
-
this.myDatePickerOptions.disableSince = {
|
|
1849
|
-
year: this.today.getFullYear(),
|
|
1850
|
-
month: this.today.getMonth() + 1,
|
|
1851
|
-
day: this.today.getDate() + 1,
|
|
1852
|
-
};
|
|
1853
|
-
}
|
|
1854
|
-
if (ques.isDateForward === true) {
|
|
1855
|
-
//console.log('Inside the isDateForward');
|
|
1856
|
-
this.myDatePickerOptions.disableUntil = {
|
|
1857
|
-
year: this.today.getFullYear(),
|
|
1858
|
-
month: this.today.getMonth() + 1,
|
|
1859
|
-
day: this.today.getDate(),
|
|
1860
|
-
};
|
|
1861
|
-
}
|
|
1862
|
-
//console.log(this.myDatePickerOptions);
|
|
1863
|
-
}
|
|
1864
|
-
this.subQuestions.push(ques);
|
|
1865
|
-
for (var i = 0; i < this.subQuestions.length; i++) {
|
|
1866
|
-
// to show/hide the dependent dropdown only field using the dropDownOnly boolean
|
|
1867
|
-
if (this.subQuestions[i].size == 4) {
|
|
1868
|
-
this.subQuestions[i].dropDownOnly = true;
|
|
1869
|
-
}
|
|
1870
|
-
else {
|
|
1871
|
-
this.subQuestions[i].dropDownOnly = false;
|
|
1872
|
-
}
|
|
1873
|
-
}
|
|
1874
|
-
if (ans != '') {
|
|
1875
|
-
for (var an of (ans.split('$$@@##'))) {
|
|
1876
|
-
var sQ = new Question();
|
|
1877
|
-
Object.assign(sQ, ques);
|
|
1878
|
-
sQ.input = an;
|
|
1879
|
-
this.subQuestions.push(sQ);
|
|
1880
|
-
}
|
|
1881
|
-
}
|
|
1882
|
-
}
|
|
1883
|
-
if (this.valueName1 != null && this.valueName1.length > 0) {
|
|
1884
|
-
this.bookFlagAccept = this.valueName1.split(";");
|
|
1885
|
-
//console.log(this.subQuestions);
|
|
1886
|
-
}
|
|
1887
|
-
this.structLocalSubQuestion(null);
|
|
1888
|
-
// HA 02FEB24 On Edit to display the value usiing this
|
|
1889
|
-
if (this.allInputValues.length > 0) {
|
|
1890
|
-
this.subQuestions.forEach(element => {
|
|
1891
|
-
for (let singleInput of this.allInputValues) {
|
|
1892
|
-
if (element.id == singleInput.id) {
|
|
1893
|
-
element.input = singleInput.input;
|
|
1894
|
-
}
|
|
1895
|
-
}
|
|
1896
|
-
});
|
|
1897
|
-
}
|
|
1898
|
-
}
|
|
1899
|
-
optionChange(selValue) {
|
|
1900
|
-
let radioTrackingId = "";
|
|
1901
|
-
for (var opt of this.questionItem.options) {
|
|
1902
|
-
//console.log('optionChange TrackingId'+opt.trackingId);
|
|
1903
|
-
if (opt.value == selValue) {
|
|
1904
|
-
//console.log('inside if'+opt.trackingId)
|
|
1905
|
-
radioTrackingId = opt.trackingId;
|
|
1906
|
-
}
|
|
1907
|
-
}
|
|
1908
|
-
this.handleEvent.emit(radioTrackingId);
|
|
1909
|
-
this.clearError();
|
|
1910
|
-
// //console.log('inside optionChange using ' + selValue);
|
|
1911
|
-
this.inpValue = selValue;
|
|
1912
|
-
}
|
|
1913
|
-
clearError() {
|
|
1914
|
-
if (this.questionItem.error) {
|
|
1915
|
-
this.questionItem.error = null;
|
|
1916
|
-
}
|
|
1917
|
-
}
|
|
1918
|
-
clearLocalSubQuesError(quesId) {
|
|
1919
|
-
quesId.error = null;
|
|
1920
|
-
}
|
|
1921
|
-
inputValidate(e) {
|
|
1922
|
-
var keyCode = e.keyCode || e.which;
|
|
1923
|
-
// Only ASCII character in that range allowed
|
|
1924
|
-
var ASCIICode = (e.which) ? e.which : e.keyCode;
|
|
1925
|
-
if (ASCIICode > 31 && (ASCIICode < 48 || ASCIICode > 57)) {
|
|
1926
|
-
return false;
|
|
1927
|
-
}
|
|
1928
|
-
else {
|
|
1929
|
-
return true;
|
|
1930
|
-
}
|
|
1931
|
-
}
|
|
1932
|
-
CCOnChange(inpValue) {
|
|
1933
|
-
if (inpValue.length == 2) {
|
|
1934
|
-
this.inpValue += " ";
|
|
1935
|
-
}
|
|
1936
|
-
else if (inpValue.length == 7) {
|
|
1937
|
-
this.inpValue += " ";
|
|
1938
|
-
}
|
|
1939
|
-
else if (inpValue.length == 12) {
|
|
1940
|
-
this.inpValue += " ";
|
|
1941
|
-
}
|
|
1942
|
-
else if (inpValue.length == 17) {
|
|
1943
|
-
this.inpValue += " ";
|
|
1944
|
-
}
|
|
1945
|
-
else if (inpValue.length == 22) {
|
|
1946
|
-
this.inpValue += " ";
|
|
1947
|
-
}
|
|
1948
|
-
}
|
|
1949
|
-
isNotValidAccNumber(s) {
|
|
1950
|
-
s = s.replace(/\s+/g, "");
|
|
1951
|
-
s = 'ES' + s;
|
|
1952
|
-
var isNotValidStr = false;
|
|
1953
|
-
if (s.length == 24) {
|
|
1954
|
-
for (var i = 0; i < s.length; i++) {
|
|
1955
|
-
if (i <= 1 && /[a-zA-Z]/.test(s.charAt(i))) {
|
|
1956
|
-
//console.log("Valid char: " + s.charAt(i));
|
|
1957
|
-
}
|
|
1958
|
-
else if (i > 1 && /[0-9]/.test(s.charAt(i))) {
|
|
1959
|
-
//console.log("Valid numeric: " + s.charAt(i));
|
|
1960
|
-
}
|
|
1961
|
-
else {
|
|
1962
|
-
isNotValidStr = true;
|
|
1963
|
-
//console.log("Not a valid char");
|
|
1964
|
-
}
|
|
1965
|
-
}
|
|
1966
|
-
}
|
|
1967
|
-
else {
|
|
1968
|
-
isNotValidStr = true;
|
|
1969
|
-
//console.log("Not a valid acc number");
|
|
1970
|
-
}
|
|
1971
|
-
return isNotValidStr;
|
|
1972
|
-
}
|
|
1973
|
-
clearSQError(quesId) {
|
|
1974
|
-
var sqList = this.subQuestions.filter((item) => item.id == quesId);
|
|
1975
|
-
for (var sq of sqList) {
|
|
1976
|
-
sq.error = null;
|
|
1977
|
-
}
|
|
1978
|
-
}
|
|
1979
|
-
uploadFile(event, ques) {
|
|
1980
|
-
//console.log('inside upload');
|
|
1981
|
-
this.clearError();
|
|
1982
|
-
this.fileTypeIncorrect = false;
|
|
1983
|
-
var local = this;
|
|
1984
|
-
local.attachment = event.target.files[0];
|
|
1985
|
-
// Validate the file extension
|
|
1986
|
-
//console.log(local.attachment);
|
|
1987
|
-
let fileNameWithType = local.attachment && local.attachment.name.toLowerCase();
|
|
1988
|
-
if (!fileNameWithType.endsWith(".jpg") &&
|
|
1989
|
-
!fileNameWithType.endsWith(".png") &&
|
|
1990
|
-
!fileNameWithType.endsWith(".pdf") &&
|
|
1991
|
-
!fileNameWithType.endsWith(".jpeg") &&
|
|
1992
|
-
!fileNameWithType.endsWith(".heic") &&
|
|
1993
|
-
!fileNameWithType.endsWith(".heif") &&
|
|
1994
|
-
!fileNameWithType.endsWith(".JPG") &&
|
|
1995
|
-
!fileNameWithType.endsWith(".PNG") &&
|
|
1996
|
-
!fileNameWithType.endsWith(".PDF") &&
|
|
1997
|
-
!fileNameWithType.endsWith(".JPEG") &&
|
|
1998
|
-
!fileNameWithType.endsWith(".HEIC") &&
|
|
1999
|
-
!fileNameWithType.endsWith(".HEIF")) {
|
|
2000
|
-
local.fileTypeIncorrect = true;
|
|
2001
|
-
}
|
|
2002
|
-
// Return when the file type is incorrect
|
|
2003
|
-
if (local.fileTypeIncorrect) {
|
|
2004
|
-
return;
|
|
2005
|
-
}
|
|
2006
|
-
let fileContent;
|
|
2007
|
-
var reader = new FileReader();
|
|
2008
|
-
reader.onload = function () {
|
|
2009
|
-
fileContent = reader.result;
|
|
2010
|
-
local.fileExceededLimit = local.attachment.size > 3242880; //Validating file size
|
|
2011
|
-
// Upload the file to Salesforce when the limit is within range
|
|
2012
|
-
if (!local.fileExceededLimit) {
|
|
2013
|
-
let fileWrapper = new AttachmentWrapper();
|
|
2014
|
-
fileWrapper.parentId = local.abItem.id;
|
|
2015
|
-
fileWrapper.fileName = local.attachment.name;
|
|
2016
|
-
fileWrapper.fileContent = fileContent;
|
|
2017
|
-
local.createAttachment(fileWrapper);
|
|
2018
|
-
ques.input = fileWrapper.fileName;
|
|
2019
|
-
}
|
|
2020
|
-
};
|
|
2021
|
-
reader.readAsDataURL(event.target.files[0]);
|
|
2022
|
-
}
|
|
2023
|
-
successAttachmentCreate = (response) => {
|
|
2024
|
-
let createdAttachment = new Attachment(response.attachmentId, response.attachmentName, this.attachment.lastModifiedDate);
|
|
2025
|
-
this.attachments.push(createdAttachment);
|
|
2026
|
-
this.attachmentsMap.set(this.questionItem.id, this.attachments);
|
|
2027
|
-
};
|
|
2028
|
-
successAttachmentDelete = (response) => {
|
|
2029
|
-
for (let i = 0; i < this.attachments.length; i++) {
|
|
2030
|
-
if (this.attachments[i].attachmentId === this.attachmentId) {
|
|
2031
|
-
this.attachments.splice(i, 1);
|
|
2032
|
-
}
|
|
2033
|
-
}
|
|
2034
|
-
};
|
|
2035
|
-
failureAttachmentCreate = (response) => {
|
|
2036
|
-
//console.log('inside failureAttachmentCreate');
|
|
2037
|
-
};
|
|
2038
|
-
failureAttachmentDelete = (response) => {
|
|
2039
|
-
//console.log('inside failureAttachmentDelete');
|
|
2040
|
-
};
|
|
2041
|
-
handleSubmitClick() {
|
|
2042
|
-
this.handleEvent.emit(this.qbItem.submitTrackingId);
|
|
2043
|
-
this.updateAnswerBook(this.abItem.id);
|
|
2044
|
-
}
|
|
2045
|
-
handleCancelClick() {
|
|
2046
|
-
this.handleEvent.emit(this.qbItem.cancelTrackingId);
|
|
2047
|
-
}
|
|
2048
|
-
createAttachment = (fileWrapper) => {
|
|
2049
|
-
if (this.serv == "api") {
|
|
2050
|
-
// this.dataService.getAPIData(
|
|
2051
|
-
// this.tkn,
|
|
2052
|
-
// ["Attachment", "create", JSON.stringify(fileWrapper)],
|
|
2053
|
-
// this.successAttachmentCreate,
|
|
2054
|
-
// this.failureAttachmentCreate
|
|
2055
|
-
// );
|
|
2056
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
2057
|
-
paramMap['c__qb_id'] = '';
|
|
2058
|
-
paramMap["c__record_id"] = '';
|
|
2059
|
-
this.dataService.getAPIFromNode('Attachment', 'create', JSON.stringify(fileWrapper), JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
2060
|
-
console.log('updated succussfully');
|
|
2061
|
-
console.log(data);
|
|
2062
|
-
this.successAttachmentCreate(JSON.parse(data));
|
|
2063
|
-
}, (error) => {
|
|
2064
|
-
this.failureAttachmentCreate(error);
|
|
2065
|
-
console.error('Failed to fetch question books', error);
|
|
2066
|
-
});
|
|
2067
|
-
}
|
|
2068
|
-
else {
|
|
2069
|
-
// VD 15FEB24 - used processNew method
|
|
2070
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
2071
|
-
paramMap['c__qb_id'] = '';
|
|
2072
|
-
paramMap["c__record_id"] = '';
|
|
2073
|
-
// VD 12Jun24 - translation changes
|
|
2074
|
-
// VD 31NOV24 param changes with new method
|
|
2075
|
-
let para3 = {
|
|
2076
|
-
dataType: "Attachment",
|
|
2077
|
-
operation: "create",
|
|
2078
|
-
param1: JSON.stringify(fileWrapper),
|
|
2079
|
-
paramJSON: JSON.stringify(paramMap),
|
|
2080
|
-
languageCode: ''
|
|
2081
|
-
};
|
|
2082
|
-
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para3)], this.successAttachmentCreate, this.failureAttachmentCreate);
|
|
2083
|
-
}
|
|
2084
|
-
};
|
|
2085
|
-
deleteAttachment(attachmentId) {
|
|
2086
|
-
this.attachmentId = attachmentId;
|
|
2087
|
-
this.handleEvent.emit("deleteAttachment");
|
|
2088
|
-
this.deleteSFAttachment(attachmentId);
|
|
2089
|
-
}
|
|
2090
|
-
deleteSFAttachment = (fileId) => {
|
|
2091
|
-
if (this.serv == "api") {
|
|
2092
|
-
// this.dataService.getAPIData(
|
|
2093
|
-
// this.tkn,
|
|
2094
|
-
// ["Attachment", "delete", fileId],
|
|
2095
|
-
// this.successAttachmentDelete,
|
|
2096
|
-
// this.failureAttachmentDelete
|
|
2097
|
-
// );
|
|
2098
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
2099
|
-
paramMap['c__qb_id'] = '';
|
|
2100
|
-
paramMap["c__record_id"] = '';
|
|
2101
|
-
this.dataService.getAPIFromNode('Attachment', 'delete', fileId, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
2102
|
-
console.log('updated succussfully');
|
|
2103
|
-
console.log(data);
|
|
2104
|
-
this.successAttachmentDelete(JSON.parse(data));
|
|
2105
|
-
}, (error) => {
|
|
2106
|
-
this.failureAttachmentDelete(error);
|
|
2107
|
-
console.error('Failed to fetch question books', error);
|
|
2108
|
-
});
|
|
2109
|
-
}
|
|
2110
|
-
else {
|
|
2111
|
-
// VD 15FEB24 - used processNew method
|
|
2112
|
-
let paramMap = { createAnswerBookFlag: false };
|
|
2113
|
-
paramMap['c__qb_id'] = '';
|
|
2114
|
-
paramMap["c__record_id"] = '';
|
|
2115
|
-
// VD 31NOV24 param changes with new method
|
|
2116
|
-
let para4 = {
|
|
2117
|
-
dataType: "Attachment",
|
|
2118
|
-
operation: "delete",
|
|
2119
|
-
param1: fileId,
|
|
2120
|
-
paramJSON: JSON.stringify(paramMap),
|
|
2121
|
-
languageCode: ''
|
|
2122
|
-
};
|
|
2123
|
-
this.sfService.remoteAction("NxtController.processData", [fileId, JSON.stringify(para4)], this.successAttachmentDelete, this.failureAttachmentDelete);
|
|
2124
|
-
}
|
|
2125
|
-
};
|
|
2126
|
-
getFileName(fileNamewithIdandType) {
|
|
2127
|
-
//truncate file path
|
|
2128
|
-
var fileNameWithType = fileNamewithIdandType.substr(fileNamewithIdandType.indexOf("::::") + 4);
|
|
2129
|
-
return fileNameWithType; //fileNameWithType.replace(/^(.*(\/|\\))(.+)$/, '$3');
|
|
2130
|
-
}
|
|
2131
|
-
fileUI() {
|
|
2132
|
-
if (this.attachments.length === 0) {
|
|
2133
|
-
}
|
|
2134
|
-
}
|
|
2135
|
-
//Update function for categorization
|
|
2136
|
-
// stepperCateg() {
|
|
2137
|
-
// this.firstFormGroup = this._formBuilder.group({
|
|
2138
|
-
// firstCtrl: ['', Validators.required]
|
|
2139
|
-
// });
|
|
2140
|
-
// this.secondFormGroup = this._formBuilder.group({
|
|
2141
|
-
// secondCtrl: ['', Validators.required]
|
|
2142
|
-
// });
|
|
2143
|
-
// }
|
|
2144
|
-
// Update Function for the Progress Bar
|
|
2145
|
-
updateProgress() {
|
|
2146
|
-
if (this.qbItem.progressBar === true) {
|
|
2147
|
-
let j = [];
|
|
2148
|
-
for (let i = 0; i < this.possibilities.total; i++) {
|
|
2149
|
-
var pathposs = Object.values(this.possibilities.paths[i].questions);
|
|
2150
|
-
if (pathposs[this.pathquestion] === this.currentName) {
|
|
2151
|
-
j.push(i);
|
|
2152
|
-
this.check = true;
|
|
2153
|
-
}
|
|
2154
|
-
else {
|
|
2155
|
-
this.check = false;
|
|
2156
|
-
}
|
|
2157
|
-
}
|
|
2158
|
-
if (j.length === 1) {
|
|
2159
|
-
this.count = j[0];
|
|
2160
|
-
}
|
|
2161
|
-
if (j.length > 1) {
|
|
2162
|
-
var width = 90 * (this.questionStack.length / this.possibilities.maxQuestions);
|
|
2163
|
-
this.progressStyle = Math.round(width) + "%";
|
|
2164
|
-
}
|
|
2165
|
-
else if (j.length === 1) {
|
|
2166
|
-
var width = 90 *
|
|
2167
|
-
(this.questionStack.length /
|
|
2168
|
-
this.possibilities.paths[this.count].count);
|
|
2169
|
-
this.progressStyle = Math.round(width) + "%";
|
|
2170
|
-
}
|
|
2171
|
-
this.percent = +Math.round(width);
|
|
2172
|
-
}
|
|
2173
|
-
}
|
|
2174
|
-
townName(area) {
|
|
2175
|
-
this.selectedValue = area.town;
|
|
2176
|
-
//console.log('this value='+this.selectedValue)
|
|
2177
|
-
this.tempoAddress = [];
|
|
2178
|
-
}
|
|
2179
|
-
getTownLocal() {
|
|
2180
|
-
this.tempoAddress = [];
|
|
2181
|
-
if (this.selectedValue.length > 0) {
|
|
2182
|
-
for (var val of this.localaddress) {
|
|
2183
|
-
if (val.town.substring(0, this.selectedValue.length) == this.selectedValue) {
|
|
2184
|
-
//console.log(val.country)
|
|
2185
|
-
this.tempoAddress.push(val);
|
|
2186
|
-
//console.log('tempoAddress'+this.tempoAddress)
|
|
2187
|
-
if (this.tempoAddress.length == 6) {
|
|
2188
|
-
break;
|
|
2189
|
-
}
|
|
2190
|
-
}
|
|
2191
|
-
}
|
|
2192
|
-
}
|
|
2193
|
-
document.getElementById("selectList").style.display = "block";
|
|
2194
|
-
this.setSearchListWidth();
|
|
2195
|
-
}
|
|
2196
|
-
clearList() {
|
|
2197
|
-
setTimeout(() => {
|
|
2198
|
-
this.tempoAddress = [];
|
|
2199
|
-
}, 500);
|
|
2200
|
-
}
|
|
2201
|
-
setSearchListWidth() {
|
|
2202
|
-
//to resize search list based on the screen size
|
|
2203
|
-
const searchBoxWidth = window.document.getElementById("autocomplete-input").offsetWidth;
|
|
2204
|
-
document.getElementById("selectList").style.width = searchBoxWidth + "px";
|
|
2205
|
-
}
|
|
2206
|
-
getCode() {
|
|
2207
|
-
this.tempoAddress = [];
|
|
2208
|
-
if (this.selectedPostalcode.length > 0) {
|
|
2209
|
-
for (var val of this.allAddress) {
|
|
2210
|
-
if (val.zipCode.substring(0, this.selectedPostalcode.length) == this.selectedPostalcode) {
|
|
2211
|
-
//console.log(val.country)
|
|
2212
|
-
this.tempoAddress.push(val);
|
|
2213
|
-
//console.log('tempoAddress'+this.tempoAddress)
|
|
2214
|
-
if (this.tempoAddress.length == 6) {
|
|
2215
|
-
break;
|
|
2216
|
-
}
|
|
2217
|
-
}
|
|
2218
|
-
}
|
|
2219
|
-
}
|
|
2220
|
-
document.getElementById("selectList").style.display = "block";
|
|
2221
|
-
this.setSearchListWidth();
|
|
2222
|
-
}
|
|
2223
|
-
getPostalcode(value) {
|
|
2224
|
-
this.places = [];
|
|
2225
|
-
this.province = [];
|
|
2226
|
-
var province;
|
|
2227
|
-
var town;
|
|
2228
|
-
this.selectedPostalcode = value.zipCode;
|
|
2229
|
-
this.selectedValue = value.country;
|
|
2230
|
-
this.tempoAddress = [];
|
|
2231
|
-
for (var val of this.localaddress) {
|
|
2232
|
-
if (this.selectedPostalcode == val.zipCode) {
|
|
2233
|
-
this.places.push(val);
|
|
2234
|
-
this.province.push(val);
|
|
2235
|
-
this.selectedValue = val.country;
|
|
2236
|
-
province = val.province;
|
|
2237
|
-
town = val.town;
|
|
2238
|
-
}
|
|
2239
|
-
}
|
|
2240
|
-
if (this.places.length == 1) {
|
|
2241
|
-
this.selectedProvince = province;
|
|
2242
|
-
this.selectedCity = town;
|
|
2243
|
-
}
|
|
2244
|
-
else if (this.places.length > 1 || this.places.length == 0) {
|
|
2245
|
-
this.selectedCity = '';
|
|
2246
|
-
this.selectedProvince = '';
|
|
2247
|
-
}
|
|
2248
|
-
}
|
|
2249
|
-
closeDropdown() {
|
|
2250
|
-
if (this.selectedPostalcode.length == 5) {
|
|
2251
|
-
this.getPostalcode({ zipCode: this.selectedPostalcode });
|
|
2252
|
-
}
|
|
2253
|
-
setTimeout(() => {
|
|
2254
|
-
document.getElementById('selectList').style.display = "none";
|
|
2255
|
-
}, 500);
|
|
2256
|
-
}
|
|
2257
|
-
//Plus button implementation.
|
|
2258
|
-
structLocalSubQuestion(ques) {
|
|
2259
|
-
// console.log('inside structLocalSubQuestion');
|
|
2260
|
-
for (var i = 0; i < this.subQuestions.length; i++) {
|
|
2261
|
-
var localSubQuestion = new LocalQuestion();
|
|
2262
|
-
localSubQuestion.id = this.subQuestions[i].id;
|
|
2263
|
-
localSubQuestion.Name = this.subQuestions[i].Name;
|
|
2264
|
-
localSubQuestion.question = this.subQuestions[i].question;
|
|
2265
|
-
localSubQuestion.questionText = this.subQuestions[i].questionText;
|
|
2266
|
-
localSubQuestion.type = this.subQuestions[i].type;
|
|
2267
|
-
localSubQuestion.title = this.subQuestions[i].title;
|
|
2268
|
-
localSubQuestion.subTitle = this.subQuestions[i].subTitle;
|
|
2269
|
-
localSubQuestion.isOptional = this.subQuestions[i].isOptional;
|
|
2270
|
-
localSubQuestion.errorMessage = this.subQuestions[i].errorMessage;
|
|
2271
|
-
localSubQuestion.nextQuestion = this.subQuestions[i].nextQuestion;
|
|
2272
|
-
localSubQuestion.groupName = this.subQuestions[i].groupName;
|
|
2273
|
-
localSubQuestion.questionNumber = this.subQuestions[i].questionNumber;
|
|
2274
|
-
localSubQuestion.allowedFileExtensions = this.subQuestions[i].allowedFileExtensions;
|
|
2275
|
-
localSubQuestion.uniqueSubQId = '' + this.subQuestions[i].id + i;
|
|
2276
|
-
localSubQuestion.input = this.subQuestions[i].input;
|
|
2277
|
-
this.localSubQuestions.push(localSubQuestion);
|
|
2278
|
-
}
|
|
2279
|
-
// console.log('final local sub questions');
|
|
2280
|
-
// console.log(this.localSubQuestions);
|
|
2281
|
-
// console.log(this.questionItem.id);
|
|
2282
|
-
this.localSubQMap.set(this.questionItem.id, this.localSubQuestions);
|
|
2283
|
-
this.localSubQuestions = [];
|
|
2284
|
-
// console.log('final key localSubQMap map');
|
|
2285
|
-
// console.log(this.localSubQMap);
|
|
2286
|
-
}
|
|
2287
|
-
addInputBox(question, index) {
|
|
2288
|
-
var arra = this.localSubQMap.get(this.questionItem.id);
|
|
2289
|
-
var qIndex = arra.indexOf(question);
|
|
2290
|
-
var ques = new LocalQuestion();
|
|
2291
|
-
Object.assign(ques, question);
|
|
2292
|
-
//console.log((ques.uniqueSubQId).substring(18, (ques.uniqueSubQId).length)+1);
|
|
2293
|
-
if (this.keyIndex == index) {
|
|
2294
|
-
ques.uniqueSubQId = ques.id + (String(index + 1));
|
|
2295
|
-
this.keyIndex++;
|
|
2296
|
-
}
|
|
2297
|
-
else {
|
|
2298
|
-
this.keyIndex++;
|
|
2299
|
-
ques.uniqueSubQId = ques.id + (String(this.keyIndex));
|
|
2300
|
-
}
|
|
2301
|
-
ques.input = '';
|
|
2302
|
-
arra.splice(qIndex + 1, 0, ques);
|
|
2303
|
-
this.localSubQMap.set(this.questionItem.id, arra);
|
|
2304
|
-
//console.log(this.localSubQMap);
|
|
2305
|
-
}
|
|
2306
|
-
removeAddress(quesUniqueId, qName) {
|
|
2307
|
-
//console.log(quesUniqueId)
|
|
2308
|
-
var val = this.localSubQMap.get(this.questionItem.id);
|
|
2309
|
-
var keyindex = 0;
|
|
2310
|
-
for (let i = 0; i < val.length; i++) {
|
|
2311
|
-
if (val[i].Name == qName) {
|
|
2312
|
-
keyindex++;
|
|
2313
|
-
}
|
|
2314
|
-
}
|
|
2315
|
-
if (this.localSubQMap.has(this.questionItem.id) && keyindex > 1) {
|
|
2316
|
-
var reorder = val.filter((item) => item.uniqueSubQId !== quesUniqueId);
|
|
2317
|
-
this.localSubQMap.set(this.questionItem.id, reorder);
|
|
2318
|
-
keyindex--;
|
|
2319
|
-
}
|
|
2320
|
-
}
|
|
2321
|
-
getLocalSubQuestions(id) {
|
|
2322
|
-
return this.localSubQMap.get(id);
|
|
2323
|
-
}
|
|
2324
|
-
//Single Add button functionality for List type
|
|
2325
|
-
Add(question) {
|
|
2326
|
-
this.addFlag = false;
|
|
2327
|
-
var arra = this.localSubQMap.get(this.questionItem.id);
|
|
2328
|
-
var index = arra.length;
|
|
2329
|
-
var a = arra.slice(-1).pop();
|
|
2330
|
-
this.indexCount = a.questionNumber;
|
|
2331
|
-
for (var i = 0; i < this.indexCount; i++) {
|
|
2332
|
-
var ques = new LocalQuestion();
|
|
2333
|
-
Object.assign(ques, question[i]);
|
|
2334
|
-
this.keyIndex++;
|
|
2335
|
-
ques.uniqueSubQId = ques.id + (String(this.keyIndex));
|
|
2336
|
-
ques.input = '';
|
|
2337
|
-
arra.splice(index + (this.indexCount - 1), 0, ques);
|
|
2338
|
-
this.localSubQMap.set(this.questionItem.id, arra);
|
|
2339
|
-
}
|
|
2340
|
-
this.addFlag = true;
|
|
2341
|
-
}
|
|
2342
|
-
handleLocationSelected(location, ques) {
|
|
2343
|
-
ques.input = location;
|
|
2344
|
-
}
|
|
2345
|
-
selectedInput(input, ques) {
|
|
2346
|
-
ques.input = input;
|
|
2347
|
-
}
|
|
2348
|
-
handleTextareaValueChange(value) {
|
|
2349
|
-
console.log('Selected text-area text:', value);
|
|
2350
|
-
}
|
|
2351
|
-
getData(data) {
|
|
2352
|
-
console.log('table data', data);
|
|
2353
|
-
}
|
|
2354
|
-
displayDate(dateSelected, ques) {
|
|
2355
|
-
// SKS14JUN25 Parse the date string using native JavaScrip and assign it to this.selectedDate
|
|
2356
|
-
const date = new Date(dateSelected.value);
|
|
2357
|
-
const pad = (n) => n.toString().padStart(2, '0');
|
|
2358
|
-
const formattedDate = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ` +
|
|
2359
|
-
`${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
|
|
2360
|
-
ques.input = formattedDate;
|
|
2361
|
-
}
|
|
2362
|
-
getKey(item) {
|
|
2363
|
-
return Object.keys(item)[0];
|
|
2364
|
-
}
|
|
2365
|
-
getValue(item) {
|
|
2366
|
-
return Object.values(item)[0];
|
|
2367
|
-
}
|
|
2368
|
-
// SKS11JUN25remove the special charecters and tags
|
|
2369
|
-
removeCharacters(questionText) {
|
|
2370
|
-
let updatedText = questionText?.replace(/<[^>]*>/g, '');
|
|
2371
|
-
return updatedText;
|
|
2372
|
-
}
|
|
2373
|
-
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 });
|
|
2374
|
-
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" }, 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=\"#FAFAFA\"\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.data, 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", "nativeInputRef", "removeValueEmit"] }, { 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", "languageCode"], 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 });
|
|
2375
|
-
}
|
|
2376
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, decorators: [{
|
|
2377
|
-
type: Component,
|
|
2378
|
-
args: [{ selector: "lib-questionnaire", standalone: true, imports: [
|
|
2379
|
-
CommonModule, NxtInput,
|
|
2380
|
-
I18nPipe, FormsModule, CustomDropdownComponent, NxtDatatable, PickLocationComponent
|
|
2381
|
-
], encapsulation: ViewEncapsulation.None, 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=\"#FAFAFA\"\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.data, 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"] }]
|
|
2382
|
-
}], 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: [{
|
|
2383
|
-
type: Input
|
|
2384
|
-
}], insuranceStartDate: [{
|
|
2385
|
-
type: Input
|
|
2386
|
-
}], serv: [{
|
|
2387
|
-
type: Input
|
|
2388
|
-
}], tkn: [{
|
|
2389
|
-
type: Input
|
|
2390
|
-
}], api: [{
|
|
2391
|
-
type: Input
|
|
2392
|
-
}], isEdit: [{
|
|
2393
|
-
type: Input
|
|
2394
|
-
}], handleEvent: [{
|
|
2395
|
-
type: Output
|
|
2396
|
-
}], handlePage: [{
|
|
2397
|
-
type: Output
|
|
2398
|
-
}], handleQuestion: [{
|
|
2399
|
-
type: Output
|
|
2400
|
-
}], handleBook: [{
|
|
2401
|
-
type: Output
|
|
2402
|
-
}], handleSubmit: [{
|
|
2403
|
-
type: Output
|
|
2404
|
-
}] } });
|
|
2405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQU1qRSxPQUFPLEVBQ0wsUUFBUSxFQUdSLGFBQWEsRUFFYixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFFTCxVQUFVLEVBTVYsTUFBTSxFQUVQLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWTFFLE1BQU0sT0FBTyxzQkFBc0I7SUEy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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0Qsb0RBQW9EO0lBQ25ELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLElBQUksV0FBVyxHQUFHLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7d0dBdjhFVSxzQkFBc0I7NEZBQXRCLHNCQUFzQiwyWENoRW5DLHltakNBa3NCTSwyOGhCRHhvQkYsWUFBWSxpV0FBQyxRQUFRLGt5QkFDckIsUUFBUSw0Q0FBRSxXQUFXLDZsREFBRSx1QkFBdUIsa1JBQUUsWUFBWSx1NEJBQUUscUJBQXFCOzs0RkFLMUUsc0JBQXNCO2tCQVhsQyxTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWSxFQUFDLFFBQVE7d0JBQ3JCLFFBQVEsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHFCQUFxQjtxQkFDcEYsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTt3VkFJNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG4vL2ltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UsIEluZGV4RGV0YWlsc30gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uQm9vayxcbiAgQW5zd2VyQm9vayxcbiAgQW5zd2VyV3JhcHBlcixcbiAgT3B0aW9uLFxuICBPcHRpb25WYWx1ZSxcbiAgQXR0YWNobWVudFdyYXBwZXIsXG4gIEF0dGFjaG1lbnQsXG4gIExvY2FsUXVlc3Rpb25cbn0gZnJvbSBcIi4uLy4uL3dyYXBwZXJcIjtcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXJcIjtcbmltcG9ydCB7XG4gIFRFU1RRVUVTVElPTixcbiAgRFRRVUVTVElPTixcbiAgRklMRVFVRVNUSU9OLFxuICBUQVFVRVNUSU9OLFxuICBSQURJT1FVRVNUSU9OLFxuICBDSEVDS1FVRVNUSU9OLFxuICBCT09LUVVFU1RJT04sXG4gIFRFU1RRQixcbiAgUlRBUVVFU1RJT04gLy9SUyAwNkpBTjI1XG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcbmltcG9ydCB7IGZyb20gfSBmcm9tIFwicnhqc1wiO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSBcIi4uLy4uL2kxOG4ucGlwZVwiO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9jdXN0b20tZHJvcGRvd24vY3VzdG9tLWRyb3Bkb3duLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTnh0RGF0YXRhYmxlIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3BpY2stbG9jYXRpb24vcGljay1sb2NhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbnh0LWlucHV0L254dC1pbnB1dC5jb21wb25lbnRcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJsaWItcXVlc3Rpb25uYWlyZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxOeHRJbnB1dCxcbiAgICBJMThuUGlwZSwgRm9ybXNNb2R1bGUsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBOeHREYXRhdGFibGUsIFBpY2tMb2NhdGlvbkNvbXBvbmVudFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFtcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJZDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYXBpOiBzdHJpbmc7IC8vIFZEIGdldHRpbmcgdGhlIGFwaSBhcyBpbnB1dFxuICBASW5wdXQoKSBpc0VkaXQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBoYW5kbGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+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+IGl0ZW0udW5pcXVlU3ViUUlkICE9PSBxdWVzVW5pcXVlSWQpXG4gICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxyZW9yZGVyKTtcbiAgICAga2V5aW5kZXgtLTtcbiAgIH1cbiB9XG5cbiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcbiAgIHJldHVybiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQoaWQpO1xuIH1cblxuIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXG5BZGQocXVlc3Rpb246IExvY2FsUXVlc3Rpb24pe1xuICAgdGhpcy5hZGRGbGFnID0gIGZhbHNlO1xuICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgdmFyIGluZGV4ICA9IGFycmEubGVuZ3RoO1xuICAgdmFyIGEgPSBhcnJhLnNsaWNlKC0xKS5wb3AoKTtcbiAgIHRoaXMuaW5kZXhDb3VudCAgPSBhLnF1ZXN0aW9uTnVtYmVyO1xuXG4gICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5kZXhDb3VudCA7IGkrKykge1xuICAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb25baV0pO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgIGFycmEuc3BsaWNlKGluZGV4Kyh0aGlzLmluZGV4Q291bnQtMSksIDAsIHF1ZXMpO1xuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgfVxuICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcbiB9XG5cbiBoYW5kbGVMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkscXVlczphbnkpIHtcbiAgIHF1ZXMuaW5wdXQgPSBsb2NhdGlvbjtcbiB9XG5cbiBzZWxlY3RlZElucHV0KGlucHV0OmFueSAscXVlczphbnkpe1xuICAgcXVlcy5pbnB1dCA9IGlucHV0O1xuIH1cblxuIGhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UodmFsdWUgOnN0cmluZyl7XG4gICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xuIH1cbiBnZXREYXRhKGRhdGE6YW55KXtcbiAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xuIH1cblxuIGRpc3BsYXlEYXRlKGRhdGVTZWxlY3RlZDogYW55LHF1ZXM6YW55KXtcbiAgIC8vIFNLUzE0SlVOMjUgUGFyc2UgdGhlIGRhdGUgc3RyaW5nIHVzaW5nIG5hdGl2ZSBKYXZhU2NyaXAgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTZWxlY3RlZC52YWx1ZSk7XG4gICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7cGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpfS0ke3BhZChkYXRlLmdldERhdGUoKSl9IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhZChkYXRlLmdldEhvdXJzKCkpfToke3BhZChkYXRlLmdldE1pbnV0ZXMoKSl9OiR7cGFkKGRhdGUuZ2V0U2Vjb25kcygpKX1gO1xuICAgcXVlcy5pbnB1dCA9IGZvcm1hdHRlZERhdGU7XG4gICAgfVxuXG4gZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XG4gICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gfVxuXG4gZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuIH1cbiAvLyBTS1MxMUpVTjI1cmVtb3ZlIHRoZSBzcGVjaWFsIGNoYXJlY3RlcnMgYW5kIHRhZ3MgXG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OiBzdHJpbmcpIHtcbiAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/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/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpXCJcbiAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInF1ZXMuZm9udENvbG9yXCJcbiAgICAgICAgICAgIFtsYWJlbFNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgIFtpbnB1dFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIlxuICAgICAgICAgICAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlcy5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgICAgICAgICBbaW5wdXRJZF09XCJxdWVzLnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgW2lucHV0SWNvbkxlZnRTcmNdPVwicXVlcy5pY29uTGVmdFNyY1wiIFxuICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LHF1ZXMpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9ueHQtaW5wdXQ+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LnF1ZXN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPCEtLSBTS1MxM01BUjI1IG54dCB0YWJsZSBjaGFuZ2UgLS0+XG4gICAgICAgICAgICA8bnh0LWRhdGF0YWJsZSBpc0VkaXRSb3cgaXNEZWxldGVSb3cgYWN0aW9uQnV0dG9uIGlzQnV0dG9uc1xuICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICBmcm9tID0gXCJmb3JtQnVpbGRlclwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC5kYXRhLCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCJcbiAgICAgICAgICAgICAgICBbdGFibGVDb25maWddPVwicXVlcy50YWJsZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgdGFibGVJZCA9IFwiXCJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcImx0clwiXG4gICAgICAgICAgICAgICAgdGFibGVXaWR0aCA9IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9ueHQtZGF0YXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTS1MyNU1BUjI1IEltYWdlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJbWFnZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgW3N0eWxlLmJvcmRlcl09XCJxdWVzLmltYWdlRGF0YSA/ICcxcHggc29saWQgYmxhY2snIDogJ25vbmUnXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwibnh0ZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDwhLS0gZm9yIGNvbW1vbiBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcz8uZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLUxpc3Qgc3RhcnQtLT5cbiAgPGRpdiAqbmdJZj1cImxpc3RGbGFnXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtbXl0LWFsaWduM1wiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLmlkKTtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWRpcy1mbGV4IG15dC1mb250MyBteXQtZm9udDdcIj57eyBxdWVzPy5xdWVzdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAnbnh0LWRpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIG54dGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgIH1cIiBpZD1cInRleHRcIiBbaWRdPVwicXVlcy51bmlxdWVTdWJRSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXMpXCJcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFkZEZsYWdcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uaWQpKVwiIGNsYXNzPVwiYnRuXCI+e3snYWRkJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L2J1dHRvbj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tTGlzdCBFbmQtLT5cblxuICA8IS0tIEFjdGlvbnMgLS0+XG4gIDwhLS0gVkQgYnV0dG9uIGNvbmRpdGlvbiByZW1vdmVkLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4ZXJcIj5cbiAgICA8IS0tIEJhY2t3YXJkIC8gQmFjayAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgICA8IS0tVkQgZGlzYWJsZWQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uYmFja1wiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1sZWZ0LWJ0JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnknOlxuICAgICAgICAgICAgICAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbT8uYmFjayB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9yd2FyZCAvIE5leHQgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2ICAqbmdJZj1cInFiSXRlbS5uZXh0XCIgPlxuICAgICAgPGRpdiBjbGFzcz1cIm54dGJ1dHRvblwiPlxuICAgICAgICAgPCEtLVZEIGRpc2FibGVkIC0tPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1ydXN0eSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlTmV4dENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0ubmV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwidGhpcy5hYkl0ZW0/LnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICA8aDI+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5VGV4dH19PC9oMj5cbiAgPHA+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9wPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sLW1kLTEyJzohcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgICAgICB9XCI+XG4gICAgPGgxIGNsYXNzPVwibnh0LWhlYWRlcjEgbnh0LXN1bW1hcnlwYWRkXCIgPnt7IHFiSXRlbS5zdWJUaXRsZSB9fTwvaDE+ICAgICAgICAgXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyBcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHN1bW1hcnk6ICAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPHAgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFZEIFF1ZXN0aW9uIE5vIGFkZGVkIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPjxzcGFuPnt7IHFhLnF1ZXN0aW9uTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1hbnN3ZXJcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09ICdCb29rJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHFhLm15VmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwidmFsLnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCI+e3sgdmFsLnF1ZXN0aW9uVGV4dCB9fTo8c3Bhbj57eyB2YWwuaW5wdXQgfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIHZhbHVlIGZvciBkaXJlY3QgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snICAmJiBxYS5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiPnt7IHFhLnF1ZXN0aW9uVGV4dCB9fSA8c3Bhbj48L3NwYW4+e3sgcWEuYW5zVmFsdWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwibnh0LWljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXIgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igbnh0c3VtbWFyeS10b3AnIDogcWJJdGVtLnByb2dyZXNzQmFyIH1cIiA+XG4gICAgICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzLXN1bW1hcnlcIiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5zdW1tYXJ5VGV4dCAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIiBcbiAgICAgIFtuZ0NsYXNzXT1cInsgc3VtbWFyeVRpdGxlOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJueHQtc3ViVGl0bGVcIiA+e3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19PC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cIm54dC1zdWJUaXRsZTFcIiA+e3sgcWJJdGVtLnN1bW1hcnlTdWJUZXh0fX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8aDMgY2xhc3M9XCJzdW1tYXJ5LWhcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19XG4gICAgICA8L2gzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uIHN1bS1xdWVzIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzIHF1ZXN0aW9uIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzMSBxdWVzdGlvbjEgc3VtbWFyeS1jb21wbGV0ZWQgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRpb3NcIi8+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHQtYW5zd2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQtc3VtbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhlcjFcIiAqbmdJZj1cImFiSXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgJiYgcWJJdGVtLmNhbmNlbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnYnRuLXRleHQnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5jYW5jZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gR3JvdXAgQWN0aW9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCI+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5zdWJtaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIiBcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdENsaWNrKClcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1Ym1pdCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLmVkaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydncmV5JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrTmV3KClcIj5cbiAgICAgICAge3sgcWJJdGVtLmVkaXQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbjwvZGl2PiJdfQ==
|