tango-app-ui-analyse-trax 3.3.1-alpha-task.65 → 3.3.1-alpha-task.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/action-centre/action-centre.component.mjs +146 -118
- package/esm2022/lib/components/add-task/add-task.component.mjs +417 -28
- package/esm2022/lib/components/add-task/create-task.data.mjs +306 -0
- package/esm2022/lib/components/add-task/create-task.interface.mjs +2 -0
- package/esm2022/lib/components/create-task/create-task.component.mjs +5 -5
- package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +3 -1
- package/esm2022/lib/components/gallery/gallery.component.mjs +410 -52
- package/esm2022/lib/components/task-logs/task-logs.component.mjs +61 -0
- package/esm2022/lib/services/trax.service.mjs +27 -3
- package/esm2022/lib/tango-analyse-trax-routing.module.mjs +1 -1
- package/esm2022/lib/tango-analyse-trax.module.mjs +5 -2
- package/fesm2022/tango-app-ui-analyse-trax.mjs +1577 -416
- package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
- package/lib/components/action-centre/action-centre.component.d.ts +3 -3
- package/lib/components/add-task/add-task.component.d.ts +57 -10
- package/lib/components/add-task/create-task.data.d.ts +244 -0
- package/lib/components/add-task/create-task.interface.d.ts +147 -0
- package/lib/components/flags/flags.component.d.ts +2 -2
- package/lib/components/flags-info/flags-info.component.d.ts +3 -3
- package/lib/components/gallery/gallery.component.d.ts +16 -3
- package/lib/components/orders/orders.component.d.ts +1 -1
- package/lib/components/reports/reports.component.d.ts +2 -2
- package/lib/components/task-configure/task-configure.component.d.ts +1 -1
- package/lib/components/task-logs/task-logs.component.d.ts +40 -0
- package/lib/services/trax.service.d.ts +7 -0
- package/lib/tango-analyse-trax.module.d.ts +9 -8
- package/package.json +1 -1
|
@@ -37,7 +37,7 @@ export class GalleryComponent {
|
|
|
37
37
|
};
|
|
38
38
|
galleryForm;
|
|
39
39
|
type = [{ value: 'checklist', label: 'Checklist' },
|
|
40
|
-
|
|
40
|
+
{ value: 'task', label: 'Task' }
|
|
41
41
|
];
|
|
42
42
|
checklists = [];
|
|
43
43
|
answerType = [
|
|
@@ -89,6 +89,10 @@ export class GalleryComponent {
|
|
|
89
89
|
environment;
|
|
90
90
|
showflag = true;
|
|
91
91
|
selectedSection = [];
|
|
92
|
+
tempselectedSection = [];
|
|
93
|
+
showmulti = true;
|
|
94
|
+
showsingle = false;
|
|
95
|
+
showfilter = false;
|
|
92
96
|
previewType = 'image';
|
|
93
97
|
checkListDescription = '';
|
|
94
98
|
constructor(fb, gs, traxService, cd, modalService, route, router, toastService, location, pageInfo) {
|
|
@@ -102,11 +106,17 @@ export class GalleryComponent {
|
|
|
102
106
|
this.toastService = toastService;
|
|
103
107
|
this.location = location;
|
|
104
108
|
this.pageInfo = pageInfo;
|
|
105
|
-
this.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
this.route?.queryParams
|
|
110
|
+
?.pipe(takeUntil(this.destroy$))
|
|
111
|
+
.subscribe((params) => {
|
|
112
|
+
this.queryParams = params;
|
|
113
|
+
this.selectedDateRange = {
|
|
114
|
+
startDate: this.queryParams.ChecklistDate ? this.dayjs(this.queryParams.ChecklistDate).format('DD-MM-YYYY') : this.dayjs().subtract(1, 'day').format('DD-MM-YYYY'),
|
|
115
|
+
endDate: this.queryParams.ChecklistDate ? this.dayjs(this.queryParams.ChecklistDate).format('DD-MM-YYYY') : this.dayjs().subtract(1, 'day').format('DD-MM-YYYY')
|
|
116
|
+
};
|
|
117
|
+
this.getAllStores();
|
|
118
|
+
});
|
|
119
|
+
// console.log("1111----->",this.queryParams)
|
|
110
120
|
this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {
|
|
111
121
|
if (env) {
|
|
112
122
|
this.environment = env;
|
|
@@ -169,6 +179,14 @@ export class GalleryComponent {
|
|
|
169
179
|
}
|
|
170
180
|
});
|
|
171
181
|
}
|
|
182
|
+
redoChanged(event) {
|
|
183
|
+
if (event.target.checked) {
|
|
184
|
+
this.galleryForm.get("viewRedo")?.setValue(true);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this.galleryForm.get("viewRedo")?.setValue(false);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
172
190
|
flagChanged(event) {
|
|
173
191
|
if (event.target.checked) {
|
|
174
192
|
this.galleryForm.get("viewFlag")?.setValue(true);
|
|
@@ -178,7 +196,13 @@ export class GalleryComponent {
|
|
|
178
196
|
}
|
|
179
197
|
}
|
|
180
198
|
onchecklistreset() {
|
|
181
|
-
this.
|
|
199
|
+
this.showmulti = true;
|
|
200
|
+
if (this.galleryForm.value.type === 'checklist') {
|
|
201
|
+
this.getChecklistQA(false);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.getTaskQA(this.galleryForm.value.type);
|
|
205
|
+
}
|
|
182
206
|
}
|
|
183
207
|
resetValidation() {
|
|
184
208
|
this.isCustomDate = (m) => {
|
|
@@ -200,7 +224,6 @@ export class GalleryComponent {
|
|
|
200
224
|
this.selectAll = event.target.checked;
|
|
201
225
|
this.mobileusageDataList.forEach((obj) => (obj.checked = this.selectAll));
|
|
202
226
|
let store = this.mobileusageDataList.filter((el) => el.checked);
|
|
203
|
-
console.log(store);
|
|
204
227
|
const change = JSON.parse(JSON.stringify(store));
|
|
205
228
|
this.galleryForm.get('storeList')?.setValue(change);
|
|
206
229
|
}
|
|
@@ -210,15 +233,12 @@ export class GalleryComponent {
|
|
|
210
233
|
this.galleryForm.get('storeList')?.setValue([]);
|
|
211
234
|
}
|
|
212
235
|
}
|
|
213
|
-
datashow = false;
|
|
214
236
|
updateCheck(event, storedata) {
|
|
215
237
|
this.mobileusageDataList.forEach((ele) => {
|
|
216
238
|
if (ele.storeId === storedata.storeId) {
|
|
217
239
|
ele.checked = event.target.checked;
|
|
218
240
|
}
|
|
219
241
|
});
|
|
220
|
-
if (this.mobileusageDataList.length === 0)
|
|
221
|
-
this.datashow = false;
|
|
222
242
|
let store = this.mobileusageDataList.filter((data) => data.checked);
|
|
223
243
|
const change = JSON.parse(JSON.stringify(store));
|
|
224
244
|
this.galleryForm.get('storeList')?.setValue(change);
|
|
@@ -229,11 +249,12 @@ export class GalleryComponent {
|
|
|
229
249
|
this.galleryForm = this.fb.group({
|
|
230
250
|
fromDate: [dayjs(this.selectedDateRange.startDate, "DD-MM-YYYY").format("YYYY-MM-DD")],
|
|
231
251
|
toDate: [dayjs(this.selectedDateRange.endDate, "DD-MM-YYYY").format('YYYY-MM-DD')],
|
|
232
|
-
type:
|
|
252
|
+
type: 'checklist',
|
|
233
253
|
checklistName: '',
|
|
234
254
|
storeList: [this.stores],
|
|
235
255
|
answerType: ['all'],
|
|
236
256
|
viewFlag: [false],
|
|
257
|
+
viewRedo: [false],
|
|
237
258
|
checkListType: "custom",
|
|
238
259
|
checkListId: "",
|
|
239
260
|
groupList: [this.groups],
|
|
@@ -268,7 +289,12 @@ export class GalleryComponent {
|
|
|
268
289
|
let getstore = this.storeList.filter((ele) => ele.storeId === this.queryParams.storeId);
|
|
269
290
|
this.stores = getstore;
|
|
270
291
|
this.galleryForm.get('storeList')?.setValue(this.stores);
|
|
271
|
-
this.
|
|
292
|
+
if (this.queryParams.checklistType == 'task') {
|
|
293
|
+
this.getAllTasks(true);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
this.getAllCheckLists(true);
|
|
297
|
+
}
|
|
272
298
|
}
|
|
273
299
|
else {
|
|
274
300
|
this.stores = res.data.storesData;
|
|
@@ -437,6 +463,38 @@ export class GalleryComponent {
|
|
|
437
463
|
});
|
|
438
464
|
this.cd.detectChanges();
|
|
439
465
|
}
|
|
466
|
+
storeListdropdownTask() {
|
|
467
|
+
this.traxService.getStoreslist({ clientId: this.headerFilters.client, clusters: this.groups, city: [] }).subscribe({
|
|
468
|
+
next: (res) => {
|
|
469
|
+
if (res && res.code == 200) {
|
|
470
|
+
let stores = res.data.storesData.map((data) => data.storeId);
|
|
471
|
+
let obj = {
|
|
472
|
+
"fromDate": this.galleryForm.value.fromDate,
|
|
473
|
+
"toDate": this.galleryForm.value.toDate,
|
|
474
|
+
"ChecklistType": this.galleryForm.value.type,
|
|
475
|
+
"checklistName": this.galleryForm.value.checklistName,
|
|
476
|
+
"checklistId": this.galleryForm.value.checkListId,
|
|
477
|
+
"storeId": stores,
|
|
478
|
+
"answerType": this.galleryForm.value.answerType,
|
|
479
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
480
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
481
|
+
};
|
|
482
|
+
this.traxService.getQuestions(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
483
|
+
next: (res) => {
|
|
484
|
+
if (res && res.code === 200) {
|
|
485
|
+
this.stores = res.data.storesDetails;
|
|
486
|
+
this.storeList = res.data.storesDetails;
|
|
487
|
+
this.gettaskQA(false);
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
this.gettaskQA(false);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
}
|
|
440
498
|
storeListdropdown() {
|
|
441
499
|
this.traxService.getStoreslist({ clientId: this.headerFilters.client, clusters: this.groups, city: [] }).subscribe({
|
|
442
500
|
next: (res) => {
|
|
@@ -450,7 +508,8 @@ export class GalleryComponent {
|
|
|
450
508
|
"checklistId": this.galleryForm.value.checkListId,
|
|
451
509
|
"storeId": stores,
|
|
452
510
|
"answerType": this.galleryForm.value.answerType,
|
|
453
|
-
"viewFlag": this.galleryForm.value.viewFlag
|
|
511
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
512
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
454
513
|
};
|
|
455
514
|
this.traxService.getchecklist(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
456
515
|
next: (res) => {
|
|
@@ -500,8 +559,13 @@ export class GalleryComponent {
|
|
|
500
559
|
this.customerunattendedlist(false);
|
|
501
560
|
}
|
|
502
561
|
else {
|
|
503
|
-
this.select = this.galleryForm.value.type === 'checklist' ? "custom" :
|
|
504
|
-
this.
|
|
562
|
+
this.select = this.galleryForm.value.type === 'checklist' ? "custom" : this.galleryForm.value.type;
|
|
563
|
+
if (this.galleryForm.value.type === 'checklist') {
|
|
564
|
+
this.storeListdropdown();
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
this.storeListdropdownTask();
|
|
568
|
+
}
|
|
505
569
|
}
|
|
506
570
|
}
|
|
507
571
|
show = 0;
|
|
@@ -672,21 +736,22 @@ export class GalleryComponent {
|
|
|
672
736
|
selectedExport = false;
|
|
673
737
|
selectedQuestion(event, section, Question) {
|
|
674
738
|
if (event.target.checked) {
|
|
675
|
-
if (this.
|
|
739
|
+
if (this.tempselectedSection.length == 0) {
|
|
676
740
|
let questions = [];
|
|
741
|
+
let answer = [];
|
|
742
|
+
answer.push(Question.answerType);
|
|
677
743
|
questions.push(Question.qname.replace(/\n/g, " "));
|
|
678
744
|
let response = {
|
|
679
745
|
sectionName: section.sectionName,
|
|
680
|
-
questions: questions
|
|
746
|
+
questions: questions,
|
|
747
|
+
answerType: answer
|
|
681
748
|
};
|
|
682
|
-
this.
|
|
683
|
-
this.datashow = false;
|
|
749
|
+
this.tempselectedSection.push(response);
|
|
684
750
|
}
|
|
685
751
|
else {
|
|
686
|
-
this.
|
|
687
|
-
let sectionExists = this.selectedSection.filter((data) => data.sectionName === section.sectionName);
|
|
752
|
+
let sectionExists = this.tempselectedSection.filter((data) => data.sectionName === section.sectionName);
|
|
688
753
|
if (sectionExists.length > 0) {
|
|
689
|
-
this.
|
|
754
|
+
this.tempselectedSection.map((data) => {
|
|
690
755
|
if (data.sectionName === section.sectionName) {
|
|
691
756
|
data.questions.push(Question.qname.replace(/\n/g, " "));
|
|
692
757
|
}
|
|
@@ -694,12 +759,15 @@ export class GalleryComponent {
|
|
|
694
759
|
}
|
|
695
760
|
else {
|
|
696
761
|
let questions = [];
|
|
762
|
+
let answer = [];
|
|
763
|
+
answer.push(Question.answerType);
|
|
697
764
|
questions.push(Question.qname.replace(/\n/g, " "));
|
|
698
765
|
let response = {
|
|
699
766
|
sectionName: section.sectionName,
|
|
700
|
-
questions: questions
|
|
767
|
+
questions: questions,
|
|
768
|
+
answerType: answer
|
|
701
769
|
};
|
|
702
|
-
this.
|
|
770
|
+
this.tempselectedSection.push(response);
|
|
703
771
|
}
|
|
704
772
|
}
|
|
705
773
|
this.checklistData.map((sec) => {
|
|
@@ -714,15 +782,16 @@ export class GalleryComponent {
|
|
|
714
782
|
this.cd.detectChanges();
|
|
715
783
|
}
|
|
716
784
|
else {
|
|
717
|
-
this.
|
|
785
|
+
this.tempselectedSection.map((data) => {
|
|
718
786
|
if (data.sectionName == section.sectionName) {
|
|
719
787
|
data.questions = data.questions.filter((ele) => ele != Question.qname.replace(/\n/g, " "));
|
|
788
|
+
data.answerType = data.answerType.filter((ele) => ele != Question.answerType);
|
|
720
789
|
}
|
|
721
790
|
});
|
|
722
|
-
this.
|
|
791
|
+
this.tempselectedSection = this.tempselectedSection.filter((ele) => ele.questions.length > 0);
|
|
723
792
|
}
|
|
724
|
-
this.selectedExport = this.
|
|
725
|
-
console.log(this.
|
|
793
|
+
this.selectedExport = this.tempselectedSection.length > 0;
|
|
794
|
+
// console.log(this.tempselectedSection)
|
|
726
795
|
}
|
|
727
796
|
getmobileUsageDatalist(type) {
|
|
728
797
|
this.loading = true;
|
|
@@ -826,11 +895,6 @@ export class GalleryComponent {
|
|
|
826
895
|
this.select = 'staffleftinthemiddle';
|
|
827
896
|
this.getcustomerunattendedview();
|
|
828
897
|
}
|
|
829
|
-
if ((this.questionscount(this.selectedSection) === 0))
|
|
830
|
-
this.datashow = true;
|
|
831
|
-
else if (this.questionscount(this.selectedSection) > 1) {
|
|
832
|
-
this.datashow = false;
|
|
833
|
-
}
|
|
834
898
|
}
|
|
835
899
|
getcustomerunattendedview() {
|
|
836
900
|
this.viewloading = true;
|
|
@@ -893,16 +957,94 @@ export class GalleryComponent {
|
|
|
893
957
|
});
|
|
894
958
|
}
|
|
895
959
|
selectsinglequestion() {
|
|
960
|
+
this.selectedSection = this.tempselectedSection;
|
|
961
|
+
if (this.questionscount(this.selectedSection) == 0 || this.questionscount(this.selectedSection) > 1) {
|
|
962
|
+
this.showsingle = false;
|
|
963
|
+
this.showmulti = true;
|
|
964
|
+
}
|
|
965
|
+
else if (this.questionscount(this.selectedSection) == 1) {
|
|
966
|
+
this.showsingle = true;
|
|
967
|
+
this.showmulti = false;
|
|
968
|
+
// console.log(this.selectedSection)
|
|
969
|
+
}
|
|
896
970
|
this.offset = 1;
|
|
897
971
|
this.viewloading = true;
|
|
898
972
|
this.viewnoData = false;
|
|
899
|
-
this.datashow = true;
|
|
900
973
|
let stores = this.galleryForm.value.storeList.map((data) => data.storeId);
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
974
|
+
// console.log(this.galleryForm.value.type)
|
|
975
|
+
if (this.galleryForm.value.type === 'checklist') {
|
|
976
|
+
let obj = {
|
|
977
|
+
"fromDate": this.galleryForm.value.fromDate,
|
|
978
|
+
"toDate": this.galleryForm.value.toDate,
|
|
979
|
+
"ChecklistType": this.galleryForm.value.checkListType,
|
|
980
|
+
"checklistName": this.galleryForm.value.checklistName,
|
|
981
|
+
"checklistId": this.galleryForm.value.checkListId,
|
|
982
|
+
"storeId": stores,
|
|
983
|
+
"answerType": this.galleryForm.value.answerType,
|
|
984
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
985
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
986
|
+
};
|
|
987
|
+
this.traxService.getchecklist(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
988
|
+
next: (res) => {
|
|
989
|
+
if (res && res.code === 200) {
|
|
990
|
+
// this.checklistData = res?.data.checklistQuestions;
|
|
991
|
+
this.loading = false;
|
|
992
|
+
this.noData = false;
|
|
993
|
+
this.galleryForm.get('storeList')?.setValue(res?.data?.storesDetails);
|
|
994
|
+
this.viewChecklists("all", "all");
|
|
995
|
+
}
|
|
996
|
+
else {
|
|
997
|
+
this.checklistData = [];
|
|
998
|
+
this.viewChecklistsData = [];
|
|
999
|
+
this.loading = false;
|
|
1000
|
+
this.noData = true;
|
|
1001
|
+
this.viewloading = false;
|
|
1002
|
+
this.viewnoData = true;
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
});
|
|
905
1006
|
}
|
|
1007
|
+
else {
|
|
1008
|
+
let obj = {
|
|
1009
|
+
"fromDate": this.galleryForm.value.fromDate,
|
|
1010
|
+
"toDate": this.galleryForm.value.toDate,
|
|
1011
|
+
"ChecklistType": this.galleryForm.value.type,
|
|
1012
|
+
"checklistName": this.galleryForm.value.checklistName,
|
|
1013
|
+
"checklistId": this.galleryForm.value.checkListId,
|
|
1014
|
+
"storeId": stores,
|
|
1015
|
+
"answerType": this.galleryForm.value.answerType,
|
|
1016
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1017
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
1018
|
+
};
|
|
1019
|
+
this.traxService.getQuestions(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
1020
|
+
next: (res) => {
|
|
1021
|
+
if (res && res.code === 200) {
|
|
1022
|
+
// this.checklistData = res?.data.checklistQuestions;
|
|
1023
|
+
this.loading = false;
|
|
1024
|
+
this.noData = false;
|
|
1025
|
+
this.galleryForm.get('storeList')?.setValue(res?.data?.storesDetails);
|
|
1026
|
+
this.viewTaskList("all", "all");
|
|
1027
|
+
}
|
|
1028
|
+
else {
|
|
1029
|
+
this.checklistData = [];
|
|
1030
|
+
this.viewChecklistsData = [];
|
|
1031
|
+
this.loading = false;
|
|
1032
|
+
this.noData = true;
|
|
1033
|
+
this.viewloading = false;
|
|
1034
|
+
this.viewnoData = true;
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
getChecklistQA(type) {
|
|
1041
|
+
this.selectedSection = [];
|
|
1042
|
+
this.tempselectedSection = [];
|
|
1043
|
+
this.loading = true;
|
|
1044
|
+
this.noData = false;
|
|
1045
|
+
this.viewloading = true;
|
|
1046
|
+
this.viewnoData = false;
|
|
1047
|
+
let stores = this.galleryForm.value.storeList.map((data) => data.storeId);
|
|
906
1048
|
let obj = {
|
|
907
1049
|
"fromDate": this.galleryForm.value.fromDate,
|
|
908
1050
|
"toDate": this.galleryForm.value.toDate,
|
|
@@ -911,12 +1053,13 @@ export class GalleryComponent {
|
|
|
911
1053
|
"checklistId": this.galleryForm.value.checkListId,
|
|
912
1054
|
"storeId": stores,
|
|
913
1055
|
"answerType": this.galleryForm.value.answerType,
|
|
914
|
-
"viewFlag": this.galleryForm.value.viewFlag
|
|
1056
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1057
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
915
1058
|
};
|
|
916
1059
|
this.traxService.getchecklist(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
917
1060
|
next: (res) => {
|
|
918
1061
|
if (res && res.code === 200) {
|
|
919
|
-
|
|
1062
|
+
this.checklistData = res?.data.checklistQuestions;
|
|
920
1063
|
this.loading = false;
|
|
921
1064
|
this.noData = false;
|
|
922
1065
|
this.galleryForm.get('storeList')?.setValue(res?.data?.storesDetails);
|
|
@@ -933,8 +1076,9 @@ export class GalleryComponent {
|
|
|
933
1076
|
}
|
|
934
1077
|
});
|
|
935
1078
|
}
|
|
936
|
-
|
|
1079
|
+
gettaskQA(type) {
|
|
937
1080
|
this.selectedSection = [];
|
|
1081
|
+
this.tempselectedSection = [];
|
|
938
1082
|
this.loading = true;
|
|
939
1083
|
this.noData = false;
|
|
940
1084
|
this.viewloading = true;
|
|
@@ -943,21 +1087,22 @@ export class GalleryComponent {
|
|
|
943
1087
|
let obj = {
|
|
944
1088
|
"fromDate": this.galleryForm.value.fromDate,
|
|
945
1089
|
"toDate": this.galleryForm.value.toDate,
|
|
946
|
-
"ChecklistType": this.galleryForm.value.
|
|
1090
|
+
"ChecklistType": this.galleryForm.value.type,
|
|
947
1091
|
"checklistName": this.galleryForm.value.checklistName,
|
|
948
1092
|
"checklistId": this.galleryForm.value.checkListId,
|
|
949
1093
|
"storeId": stores,
|
|
950
1094
|
"answerType": this.galleryForm.value.answerType,
|
|
951
|
-
"viewFlag": this.galleryForm.value.viewFlag
|
|
1095
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1096
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
952
1097
|
};
|
|
953
|
-
this.traxService.
|
|
1098
|
+
this.traxService.getQuestions(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
954
1099
|
next: (res) => {
|
|
955
1100
|
if (res && res.code === 200) {
|
|
956
1101
|
this.checklistData = res?.data.checklistQuestions;
|
|
957
1102
|
this.loading = false;
|
|
958
1103
|
this.noData = false;
|
|
959
1104
|
this.galleryForm.get('storeList')?.setValue(res?.data?.storesDetails);
|
|
960
|
-
this.
|
|
1105
|
+
this.viewTaskList("all", "all");
|
|
961
1106
|
}
|
|
962
1107
|
else {
|
|
963
1108
|
this.checklistData = [];
|
|
@@ -970,6 +1115,50 @@ export class GalleryComponent {
|
|
|
970
1115
|
}
|
|
971
1116
|
});
|
|
972
1117
|
}
|
|
1118
|
+
viewTaskList(sectionName, questionName) {
|
|
1119
|
+
this.selectedExport = false;
|
|
1120
|
+
this.sectionName = sectionName;
|
|
1121
|
+
this.questionName = questionName;
|
|
1122
|
+
this.limit = 1;
|
|
1123
|
+
this.paginationSizes = [1];
|
|
1124
|
+
if (this.selectedSection.length > 0) {
|
|
1125
|
+
this.limit = 10,
|
|
1126
|
+
this.paginationSizes = [10];
|
|
1127
|
+
}
|
|
1128
|
+
this.viewloading = true;
|
|
1129
|
+
this.viewnoData = false;
|
|
1130
|
+
let stores = this.galleryForm.value.storeList.map((data) => data.storeId);
|
|
1131
|
+
this.viewChecklistsoptions = {
|
|
1132
|
+
"fromDate": this.galleryForm.value.fromDate,
|
|
1133
|
+
"toDate": this.galleryForm.value.toDate,
|
|
1134
|
+
"ChecklistType": this.galleryForm.value.type,
|
|
1135
|
+
"checklistName": this.galleryForm.value.checklistName,
|
|
1136
|
+
"storeId": stores,
|
|
1137
|
+
"answerType": this.galleryForm.value.answerType,
|
|
1138
|
+
"offset": (this.offset - 1),
|
|
1139
|
+
"limit": this.limit,
|
|
1140
|
+
"checklistId": this.galleryForm.value.checkListId,
|
|
1141
|
+
"sourceCheckList_id": this.galleryForm.value.checkListId,
|
|
1142
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1143
|
+
"viewRedo": this.galleryForm.value.viewRedo,
|
|
1144
|
+
"questions": this.selectedSection
|
|
1145
|
+
};
|
|
1146
|
+
this.traxService.getAnswers(this.viewChecklistsoptions)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
1147
|
+
next: (res) => {
|
|
1148
|
+
if (res && res.code === 200) {
|
|
1149
|
+
this.viewChecklistsData = res.data;
|
|
1150
|
+
this.totalCount = this.viewChecklistsData.total_count;
|
|
1151
|
+
this.viewloading = false;
|
|
1152
|
+
this.viewnoData = false;
|
|
1153
|
+
}
|
|
1154
|
+
else {
|
|
1155
|
+
this.viewChecklistsData = [];
|
|
1156
|
+
this.viewloading = false;
|
|
1157
|
+
this.viewnoData = true;
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
});
|
|
1161
|
+
}
|
|
973
1162
|
viewChecklists(sectionName, questionName) {
|
|
974
1163
|
// this.selectedSection = []
|
|
975
1164
|
this.selectedExport = false;
|
|
@@ -996,6 +1185,7 @@ export class GalleryComponent {
|
|
|
996
1185
|
"checklistId": this.galleryForm.value.checkListId,
|
|
997
1186
|
"sourceCheckList_id": this.galleryForm.value.checkListId,
|
|
998
1187
|
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1188
|
+
"viewRedo": this.galleryForm.value.viewRedo,
|
|
999
1189
|
"questions": this.selectedSection
|
|
1000
1190
|
};
|
|
1001
1191
|
this.traxService.viewChecklists(this.viewChecklistsoptions)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
@@ -1144,7 +1334,8 @@ export class GalleryComponent {
|
|
|
1144
1334
|
"clientId": this.headerFilters.client,
|
|
1145
1335
|
"questions": this.selectedSection,
|
|
1146
1336
|
"previewType": this.previewType,
|
|
1147
|
-
"viewFlag": this.galleryForm.value.viewFlag
|
|
1337
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1338
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
1148
1339
|
};
|
|
1149
1340
|
if (type === 'Export as CSV' || type === 'Export as PPT' || type === 'Export as ZIP') {
|
|
1150
1341
|
const modalRef = this.modalService.open(ExportGalleryComponent, {
|
|
@@ -1181,22 +1372,189 @@ export class GalleryComponent {
|
|
|
1181
1372
|
});
|
|
1182
1373
|
}
|
|
1183
1374
|
}
|
|
1184
|
-
|
|
1375
|
+
typeChange(event) {
|
|
1376
|
+
// console.log(event)
|
|
1377
|
+
this.galleryForm.get('type')?.setValue(event);
|
|
1378
|
+
if (event === 'task') {
|
|
1379
|
+
this.getAllTasks(event);
|
|
1380
|
+
}
|
|
1381
|
+
else {
|
|
1382
|
+
this.getAllCheckLists(event);
|
|
1383
|
+
}
|
|
1185
1384
|
}
|
|
1186
|
-
|
|
1385
|
+
getAllTasks(type) {
|
|
1386
|
+
let stores = this.stores?.map((data) => data.storeId);
|
|
1387
|
+
const payload = {
|
|
1388
|
+
fromDate: this.galleryForm.get('fromDate')?.value,
|
|
1389
|
+
toDate: this.galleryForm.get('toDate')?.value,
|
|
1390
|
+
storeId: stores,
|
|
1391
|
+
clientId: this.headerFilters?.client,
|
|
1392
|
+
sortColumnName: "checkListName",
|
|
1393
|
+
sortBy: 1
|
|
1394
|
+
};
|
|
1395
|
+
this.traxService.getTaskList(payload).subscribe({
|
|
1396
|
+
next: (res) => {
|
|
1397
|
+
if (res && res.code == 200) {
|
|
1398
|
+
this.checklists = res.data.checklistData;
|
|
1399
|
+
// console.log(this.queryParams)
|
|
1400
|
+
setTimeout(() => {
|
|
1401
|
+
if (this.queryParams.checklistId && this.queryParams.checklistType == 'task') {
|
|
1402
|
+
this.galleryForm.get('checkListId')?.setValue(this.queryParams.checklistId);
|
|
1403
|
+
this.galleryForm.get('type')?.setValue('task');
|
|
1404
|
+
this.galleryForm.get('checkListType')?.setValue(this.queryParams.checklistType);
|
|
1405
|
+
let getchecklist = this.checklists.filter((ele) => ele.sourceCheckList_id === this.queryParams.checklistId);
|
|
1406
|
+
if (getchecklist && getchecklist.length > 0) {
|
|
1407
|
+
this.galleryForm.get('checklistName')?.setValue(getchecklist[0]?.checkListName);
|
|
1408
|
+
this.galleryForm.get('checkListDescription')?.setValue(getchecklist[0]?.checkListDescription);
|
|
1409
|
+
this.checklistName = getchecklist[0]?.checkListName;
|
|
1410
|
+
}
|
|
1411
|
+
this.removeQueryParams();
|
|
1412
|
+
}
|
|
1413
|
+
else {
|
|
1414
|
+
this.galleryForm.get('checklistName')?.setValue(this.checklists[0]?.checkListName);
|
|
1415
|
+
this.galleryForm.get('checklistId')?.setValue(this.checklists[0]?.checklistId);
|
|
1416
|
+
}
|
|
1417
|
+
this.gettaskQA(false);
|
|
1418
|
+
}, 0);
|
|
1419
|
+
}
|
|
1420
|
+
else {
|
|
1421
|
+
this.checklists = [];
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
});
|
|
1425
|
+
}
|
|
1426
|
+
getTaskQA(type) {
|
|
1427
|
+
this.selectedSection = [];
|
|
1428
|
+
this.tempselectedSection = [];
|
|
1429
|
+
this.loading = true;
|
|
1430
|
+
this.noData = false;
|
|
1431
|
+
this.viewloading = true;
|
|
1432
|
+
this.viewnoData = false;
|
|
1433
|
+
let stores = this.galleryForm.value.storeList.map((data) => data.storeId);
|
|
1434
|
+
let obj = {
|
|
1435
|
+
"fromDate": this.galleryForm.value.fromDate,
|
|
1436
|
+
"toDate": this.galleryForm.value.toDate,
|
|
1437
|
+
"ChecklistType": this.galleryForm.value.type,
|
|
1438
|
+
"checklistName": this.galleryForm.value.checklistName,
|
|
1439
|
+
"checklistId": this.galleryForm.value.checkListId,
|
|
1440
|
+
"storeId": stores,
|
|
1441
|
+
"answerType": this.galleryForm.value.answerType,
|
|
1442
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1443
|
+
"viewRedo": this.galleryForm.value.viewRedo //[true, false]
|
|
1444
|
+
};
|
|
1445
|
+
this.traxService.getQuestions(obj)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
1446
|
+
next: (res) => {
|
|
1447
|
+
if (res && res.code === 200) {
|
|
1448
|
+
this.checklistData = res?.data.checklistQuestions;
|
|
1449
|
+
this.loading = false;
|
|
1450
|
+
this.noData = false;
|
|
1451
|
+
this.galleryForm.get('storeList')?.setValue(res?.data?.storesDetails);
|
|
1452
|
+
this.viewTaskList("all", "all");
|
|
1453
|
+
}
|
|
1454
|
+
else {
|
|
1455
|
+
this.checklistData = [];
|
|
1456
|
+
this.viewChecklistsData = [];
|
|
1457
|
+
this.loading = false;
|
|
1458
|
+
this.noData = true;
|
|
1459
|
+
this.viewloading = false;
|
|
1460
|
+
this.viewnoData = true;
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
});
|
|
1464
|
+
}
|
|
1465
|
+
viewTasks(sectionName, questionName) {
|
|
1466
|
+
// this.selectedSection = []
|
|
1467
|
+
this.selectedExport = false;
|
|
1468
|
+
this.sectionName = sectionName;
|
|
1469
|
+
this.questionName = questionName;
|
|
1470
|
+
this.limit = 1;
|
|
1471
|
+
this.paginationSizes = [1];
|
|
1472
|
+
if (this.selectedSection.length > 0) {
|
|
1473
|
+
this.limit = 10,
|
|
1474
|
+
this.paginationSizes = [10];
|
|
1475
|
+
}
|
|
1476
|
+
this.viewloading = true;
|
|
1477
|
+
this.viewnoData = false;
|
|
1478
|
+
let stores = this.galleryForm.value.storeList.map((data) => data.storeId);
|
|
1479
|
+
this.viewChecklistsoptions = {
|
|
1480
|
+
"fromDate": this.galleryForm.value.fromDate,
|
|
1481
|
+
"toDate": this.galleryForm.value.toDate,
|
|
1482
|
+
"ChecklistType": this.galleryForm.value.checkListType,
|
|
1483
|
+
"checklistName": this.galleryForm.value.checklistName,
|
|
1484
|
+
"storeId": stores,
|
|
1485
|
+
"answerType": this.galleryForm.value.answerType,
|
|
1486
|
+
"offset": (this.offset - 1),
|
|
1487
|
+
"limit": this.limit,
|
|
1488
|
+
"checklistId": this.galleryForm.value.checkListId,
|
|
1489
|
+
"sourceCheckList_id": this.galleryForm.value.checkListId,
|
|
1490
|
+
"viewFlag": this.galleryForm.value.viewFlag,
|
|
1491
|
+
"viewRedo": this.galleryForm.value.viewRedo,
|
|
1492
|
+
"questions": this.selectedSection
|
|
1493
|
+
};
|
|
1494
|
+
this.traxService.viewChecklists(this.viewChecklistsoptions)?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
1495
|
+
next: (res) => {
|
|
1496
|
+
if (res && res.code === 200) {
|
|
1497
|
+
this.viewChecklistsData = res.data;
|
|
1498
|
+
this.totalCount = this.viewChecklistsData.total_count;
|
|
1499
|
+
this.viewloading = false;
|
|
1500
|
+
this.viewnoData = false;
|
|
1501
|
+
}
|
|
1502
|
+
else {
|
|
1503
|
+
this.viewChecklistsData = [];
|
|
1504
|
+
this.viewloading = false;
|
|
1505
|
+
this.viewnoData = true;
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
});
|
|
1509
|
+
}
|
|
1510
|
+
taskredirect(question, storeProfile, checklistInfo) {
|
|
1511
|
+
this.router.navigate(['/manage/trax/gallery'], {
|
|
1512
|
+
queryParams: {
|
|
1513
|
+
ChecklistDate: dayjs(checklistInfo.date).format('YYYY-MM-DD'),
|
|
1514
|
+
storeId: storeProfile?.store_id,
|
|
1515
|
+
checklistType: "task",
|
|
1516
|
+
checklistId: question.taskId,
|
|
1517
|
+
},
|
|
1518
|
+
relativeTo: this.route,
|
|
1519
|
+
queryParamsHandling: 'merge',
|
|
1520
|
+
});
|
|
1521
|
+
}
|
|
1522
|
+
addTask(type, data, checklistInfo, storeProfile, section) {
|
|
1187
1523
|
const modalRef = this.modalService.open(AddTaskComponent, { centered: true, size: 'lg', });
|
|
1188
1524
|
modalRef.componentInstance.type = type;
|
|
1525
|
+
modalRef.componentInstance.operationtype = this.galleryForm.value.type;
|
|
1526
|
+
modalRef.componentInstance.sourceCheckList_id = this.galleryForm.value.checkListId;
|
|
1527
|
+
modalRef.componentInstance.inputData = data;
|
|
1528
|
+
modalRef.componentInstance.checklistInfo = checklistInfo;
|
|
1529
|
+
modalRef.componentInstance.storeProfile = storeProfile;
|
|
1530
|
+
modalRef.componentInstance.sectionInfo = section;
|
|
1531
|
+
modalRef.componentInstance.taskDetails = {
|
|
1532
|
+
sections: [
|
|
1533
|
+
{
|
|
1534
|
+
"id": "",
|
|
1535
|
+
"name": "",
|
|
1536
|
+
"questions": [data]
|
|
1537
|
+
}
|
|
1538
|
+
]
|
|
1539
|
+
};
|
|
1189
1540
|
modalRef.result.then((result) => {
|
|
1541
|
+
if (result == 'submit') {
|
|
1542
|
+
this.getChecklistQA(true);
|
|
1543
|
+
}
|
|
1190
1544
|
});
|
|
1191
1545
|
}
|
|
1546
|
+
selectedTask = 'yes';
|
|
1547
|
+
taskTab(task) {
|
|
1548
|
+
this.selectedTask = task;
|
|
1549
|
+
}
|
|
1192
1550
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GalleryComponent, deps: [{ token: i1.FormBuilder }, { token: i2.GlobalStateService }, { token: i3.TraxService }, { token: i0.ChangeDetectorRef }, { token: i4.NgbModal }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.ToastService }, { token: i7.Location }, { token: i2.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1193
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GalleryComponent, selector: "lib-gallery", host: { listeners: { "document:click": "onClick($event)" } }, ngImport: i0, template: "<div class=\"gallery-card\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"false\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [ngModelOptions]=\"{standalone: true}\" (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\" \r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\" \r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\" [idField]=\"'checkListName'\"\r\n (selected)=\"checklistNamechange($event,false)\" [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-select>\r\n </div> \r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('groupList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n \r\n <!-- Actual Select Component -->\r\n <lib-group-select [items]=\"groupList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'groupName'\"\r\n [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('groupList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <!-- {{storeList.length}}\r\n {{galleryForm.get('storeList')?.value.length}} -->\r\n <!-- Actual Select Component -->\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <div class=\"d-flex justify-content-end\">\r\n <span class=\"me-3 mt-3\">\r\n \r\n \r\n <input formControlName=\"viewFlag\" *ngIf=\"showflag\" change type=\"checkbox\" (click)=\"flagChanged($event)\" \r\n class=\"form-check-input cursor-pointer mt-1 me-4\" id=\"viewFlag\">\r\n <label *ngIf=\"showflag\" class=\"checkbox-label\" for=\"viewFlag\">View flagged only</label>\r\n </span>\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"row my-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-md-4':'d-none'\">\r\n <div class=\"card position-relative h-auto\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{this.checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-50 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" *ngIf=\"selectedSection.length>0\" (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0\" class=\"btn btn-primary w-25 btn-resize\" (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length==0 ? 'view-all':'view-questions'\" style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\" style=\"cursor: pointer;\"\r\n (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" >{{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"d-flex my-2 q-btn\"\r\n cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" (click)=\"selectedQuestion($event,section,question)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\" style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'||select ==='storeopenandclose'||select==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \" [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\" [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\" [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\" >{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\" *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n </section>\r\n <section *ngIf=\"select ==='eyetest'\">\r\n <div class=\"view-all my-6\">\r\n All Detections\r\n </div>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n \r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-md-8':'col-md-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-header border-0 px-0 my-0\" *ngIf=\"select ==='custom'&&!viewloading&&!viewnoData\">\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\"ms-5 btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-20 end-0 mt-10 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom' \">\r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"!datashow\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row px-10\" >\r\n\r\n <div *ngFor=\"let questionlist of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of questionlist.questions\">\r\n <ul>\r\n <li class=\"qa-heading\">{{question?.qno}}. {{question?.qname}}\r\n </li>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br *ngIf=\"question.questionReferenceImage!==''\">\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n </div>\r\n <span class=\"remarksTxt\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div> \r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n \r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='image'\">\r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n <div class=\"Partially my-3 px-5\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-3\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n \r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-3\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span [ngClass]=\"item.sopFlag ? 'flagclour':''\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question.remarks!=''\">{{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n\r\n <video controls class=\"recap-img p-3\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n \r\n </ul>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\" (click)=\"addTask('redo')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\" (click)=\"addTask('createtask')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2 font-task\">Task</span>\r\n </button>\r\n <button *ngIf=\"\" class=\"btn btn-sm btn-light-primary border-val1\">\r\n <span class=\"ms-2 font-task\">View Task</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imageUrl\">\r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='uniformdetection'\">\r\n Uniform Detection</div>\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='mobileusagedetection'\">\r\n Mobile Usage Detection</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n \r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <span class=\"me-3 store-title\">{{item.storeName}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.customer_id\">Cust ID : {{detection.customer_id}}</span>\r\n </h3>\r\n \r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_entry_time\">Entry time : {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_exit_time\">Exit time : {{detection.customer_exit_time}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"my-0\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"col-md-12 card\" *ngFor=\"let item of storeOpencloseView\">\r\n <div class=\"snapcard mx-8 my-8\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/open.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.closeTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 \">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]='paginationSizes' [pageSize]=\"limit\"\r\n (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n <!-- <div class=\"row px-10 my-5\" *ngIf=\"select ==='eyetest'\">\r\n <div class=\"qa-bodrer my-3\">\r\n <ul>\r\n <li class=\"qa-heading\">\r\n LKST001\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n\r\n <video controls autoplay class=\"recap-img p-3\"\r\n src=\"https://tangoeye.ai/wp-content/uploads/videos/tango-main-video.mp4\">\r\n </video>\r\n </div>\r\n\r\n </div>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\"container my-4\">\r\n\r\n <lib-pagination-v2 [totalItems]=\"totalItems\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" (pageChanged)=\"onPageChange($event)\">\r\n </lib-pagination-v2>\r\n </div>\r\n </div> -->\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:20%;height:125px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:6px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:cover!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.w-50{width:75%!important}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i6.CustomSelectComponent, selector: "lib-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "component", type: i10.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "component", type: i11.CustomSelectComponent, selector: "lib-stores-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i12.GroupSelectComponent, selector: "lib-group-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }] });
|
|
1551
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GalleryComponent, selector: "lib-gallery", host: { listeners: { "document:click": "onClick($event)" } }, ngImport: i0, template: "<div class=\"gallery-card\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"false\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [ngModelOptions]=\"{standalone: true}\" (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\" \r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\" \r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\" (itemChange)=\"typeChange($event)\" ></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\" [idField]=\"'checkListName'\"\r\n (selected)=\"checklistNamechange($event,false)\" [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-select>\r\n </div> \r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('groupList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n \r\n <!-- Actual Select Component -->\r\n <lib-group-select [items]=\"groupList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'groupName'\"\r\n [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('groupList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <!-- {{storeList.length}}\r\n {{galleryForm.get('storeList')?.value.length}} -->\r\n <!-- Actual Select Component -->\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <div class=\"d-flex justify-content-end\">\r\n <span class=\"me-4 mt-3\">\r\n \r\n \r\n <input formControlName=\"viewRedo\" *ngIf=\"showflag\" change type=\"checkbox\" (click)=\"redoChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewRedo\">\r\n <label *ngIf=\"showflag\" class=\"checkbox-label\" for=\"viewRedo\">View Re-do\u2019s only</label>\r\n </span>\r\n <span class=\"me-3 mt-3\">\r\n \r\n \r\n <input formControlName=\"viewFlag\" *ngIf=\"showflag\" change type=\"checkbox\" (click)=\"flagChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewFlag\">\r\n <label *ngIf=\"showflag\" class=\"checkbox-label\" for=\"viewFlag\">View flagged only</label>\r\n </span>\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"row my-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-md-4':'d-none'\">\r\n <div class=\"card position-relative h-auto\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{this.checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-50 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'||select === 'task'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" class=\"btn btn-primary w-25 btn-resize\" (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length==0 ? 'view-all':'view-questions'\" style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\" style=\"cursor: pointer;\"\r\n (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" >{{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"d-flex my-2 q-btn\"\r\n cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" (click)=\"selectedQuestion($event,section,question)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\" style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'||select ==='storeopenandclose'||select==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \" [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\" [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\" [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\" >{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\" *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n </section>\r\n \r\n </div>\r\n\r\n\r\n\r\n \r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-md-8':'col-md-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-header border-0 px-0 my-0\" *ngIf=\"select ==='custom'&&!viewloading&&!viewnoData||select === 'task'&&!viewloading&&!viewnoData\">\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\"ms-5 btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-20 end-0 mt-10 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom'||select==='task' \">\r\n <div *ngIf=\"showsingle\" class=\"qa-heading m-3 mx-11\">{{this.selectedSection[0]?.questions[0]}}</div>\r\n <div *ngIf=\"showsingle&&showfilter\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap mx-10\">\r\n <li class=\"nav-item\">\r\n <a (click)=\"taskTab('yes')\" [ngClass]=\"selectedTask === 'yes' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n Yes<span class=\"mx-2 \" [ngClass]=\"selectedTask === 'yes' ? 'badge-num-primary' :'badge-num-muted'\">10</span>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\" >\r\n <a (click)=\"taskTab('no')\" [ngClass]=\"selectedTask === 'no' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n No<span class=\"mx-2\" [ngClass]=\"selectedTask ==='no' ? 'badge-num-primary' :'badge-num-muted'\">20</span>\r\n </a>\r\n </li> \r\n <li class=\"nav-item\">\r\n <a (click)=\"taskTab('maybe')\" [ngClass]=\"selectedTask === 'maybe' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n May be<span class=\"mx-2 \" [ngClass]=\"selectedTask === 'maybe' ? 'badge-num-primary' :'badge-num-muted'\">0</span>\r\n </a>\r\n </li>\r\n \r\n </ul>\r\n </div>\r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n \r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n \r\n\r\n <div class=\"row px-10\" >\r\n\r\n <div *ngFor=\"let questionlist of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of questionlist.questions\">\r\n <div class=\"row w-100 m-3\" *ngIf=\"showsingle\">\r\n <div class=\"col-md-4 text-title\">\r\n {{checklist?.storeProfile?.storeName}}\r\n </div>\r\n <div class=\"col-md-8 text-end title-description\">\r\n Submitted by : {{checklist?.checklistInfo?.submittedBy}} On : {{checklist?.checklistInfo?.date}} {{checklist?.checklistInfo?.time}}\r\n </div>\r\n </div>\r\n <ul>\r\n <li *ngIf=\"showmulti\" class=\"qa-heading\">{{question?.qno}}. {{question?.qname}}</li>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br *ngIf=\"question.questionReferenceImage!==''\">\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n </div>\r\n <span class=\"remarksTxt\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div> \r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n \r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='image'\">\r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n <div class=\"Partially my-3 px-5\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-3\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n \r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-3\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span [ngClass]=\"item.sopFlag ? 'flagclour':''\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question.remarks!=''\">{{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n\r\n <video controls class=\"recap-img p-3\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n \r\n </ul>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"question.redo\" (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\" *ngIf=\"!question.task&&!question.taskId&&this.galleryForm.value.type!='task'\" (click)=\"addTask('createtask',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2 font-task\">Task</span>\r\n </button>\r\n <button *ngIf=\"question.task&&question.taskId &&this.galleryForm.value.type!=='task'\" class=\"btn btn-sm border-val1\" (click)=\"taskredirect(question,checklist?.storeProfile,checklist?.checklistInfo)\">\r\n <span class=\"ms-2 font-task\">View Task</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imageUrl\">\r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='uniformdetection'\">\r\n Uniform Detection</div>\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='mobileusagedetection'\">\r\n Mobile Usage Detection</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n \r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <span class=\"me-3 store-title\">{{item.storeName}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.customer_id\">Cust ID : {{detection.customer_id}}</span>\r\n </h3>\r\n \r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_entry_time\">Entry time : {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_exit_time\">Exit time : {{detection.customer_exit_time}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"my-0\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"col-md-12 card\" *ngFor=\"let item of storeOpencloseView\">\r\n <div class=\"snapcard mx-8 my-8\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/open.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.closeTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 \">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]='paginationSizes' [pageSize]=\"limit\"\r\n (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:20%;height:125px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:6px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:cover!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.w-50{width:75%!important}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-title{font-size:16px!important;font-weight:600!important;color:#101828!important;line-height:24px}.title-description{font-size:14px!important;font-weight:400;color:#101828!important;line-height:24px!important}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i6.CustomSelectComponent, selector: "lib-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "component", type: i10.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "component", type: i11.CustomSelectComponent, selector: "lib-stores-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i12.GroupSelectComponent, selector: "lib-group-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }] });
|
|
1194
1552
|
}
|
|
1195
1553
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GalleryComponent, decorators: [{
|
|
1196
1554
|
type: Component,
|
|
1197
|
-
args: [{ selector: 'lib-gallery', template: "<div class=\"gallery-card\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"false\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [ngModelOptions]=\"{standalone: true}\" (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\" \r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\" \r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\" [idField]=\"'checkListName'\"\r\n (selected)=\"checklistNamechange($event,false)\" [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-select>\r\n </div> \r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('groupList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n \r\n <!-- Actual Select Component -->\r\n <lib-group-select [items]=\"groupList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'groupName'\"\r\n [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('groupList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <!-- {{storeList.length}}\r\n {{galleryForm.get('storeList')?.value.length}} -->\r\n <!-- Actual Select Component -->\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <div class=\"d-flex justify-content-end\">\r\n <span class=\"me-3 mt-3\">\r\n \r\n \r\n <input formControlName=\"viewFlag\" *ngIf=\"showflag\" change type=\"checkbox\" (click)=\"flagChanged($event)\" \r\n class=\"form-check-input cursor-pointer mt-1 me-4\" id=\"viewFlag\">\r\n <label *ngIf=\"showflag\" class=\"checkbox-label\" for=\"viewFlag\">View flagged only</label>\r\n </span>\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"row my-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-md-4':'d-none'\">\r\n <div class=\"card position-relative h-auto\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{this.checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-50 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" *ngIf=\"selectedSection.length>0\" (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0\" class=\"btn btn-primary w-25 btn-resize\" (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length==0 ? 'view-all':'view-questions'\" style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\" style=\"cursor: pointer;\"\r\n (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" >{{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"d-flex my-2 q-btn\"\r\n cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" (click)=\"selectedQuestion($event,section,question)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\" style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'||select ==='storeopenandclose'||select==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \" [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\" [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\" [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\" >{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\" *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n </section>\r\n <section *ngIf=\"select ==='eyetest'\">\r\n <div class=\"view-all my-6\">\r\n All Detections\r\n </div>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n \r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-md-8':'col-md-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-header border-0 px-0 my-0\" *ngIf=\"select ==='custom'&&!viewloading&&!viewnoData\">\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\"ms-5 btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-20 end-0 mt-10 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom' \">\r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"!datashow\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row px-10\" >\r\n\r\n <div *ngFor=\"let questionlist of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of questionlist.questions\">\r\n <ul>\r\n <li class=\"qa-heading\">{{question?.qno}}. {{question?.qname}}\r\n </li>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br *ngIf=\"question.questionReferenceImage!==''\">\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n </div>\r\n <span class=\"remarksTxt\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div> \r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n \r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='image'\">\r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n <div class=\"Partially my-3 px-5\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-3\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n \r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-3\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span [ngClass]=\"item.sopFlag ? 'flagclour':''\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question.remarks!=''\">{{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n\r\n <video controls class=\"recap-img p-3\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n \r\n </ul>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\" (click)=\"addTask('redo')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\" (click)=\"addTask('createtask')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2 font-task\">Task</span>\r\n </button>\r\n <button *ngIf=\"\" class=\"btn btn-sm btn-light-primary border-val1\">\r\n <span class=\"ms-2 font-task\">View Task</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imageUrl\">\r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='uniformdetection'\">\r\n Uniform Detection</div>\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='mobileusagedetection'\">\r\n Mobile Usage Detection</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n \r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <span class=\"me-3 store-title\">{{item.storeName}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.customer_id\">Cust ID : {{detection.customer_id}}</span>\r\n </h3>\r\n \r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_entry_time\">Entry time : {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_exit_time\">Exit time : {{detection.customer_exit_time}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"my-0\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"col-md-12 card\" *ngFor=\"let item of storeOpencloseView\">\r\n <div class=\"snapcard mx-8 my-8\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/open.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.closeTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 \">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]='paginationSizes' [pageSize]=\"limit\"\r\n (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n <!-- <div class=\"row px-10 my-5\" *ngIf=\"select ==='eyetest'\">\r\n <div class=\"qa-bodrer my-3\">\r\n <ul>\r\n <li class=\"qa-heading\">\r\n LKST001\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n\r\n <video controls autoplay class=\"recap-img p-3\"\r\n src=\"https://tangoeye.ai/wp-content/uploads/videos/tango-main-video.mp4\">\r\n </video>\r\n </div>\r\n\r\n </div>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\"container my-4\">\r\n\r\n <lib-pagination-v2 [totalItems]=\"totalItems\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" (pageChanged)=\"onPageChange($event)\">\r\n </lib-pagination-v2>\r\n </div>\r\n </div> -->\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:20%;height:125px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:6px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:cover!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.w-50{width:75%!important}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}\n"] }]
|
|
1555
|
+
args: [{ selector: 'lib-gallery', template: "<div class=\"gallery-card\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"false\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [ngModelOptions]=\"{standalone: true}\" (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\" \r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\" \r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\" (itemChange)=\"typeChange($event)\" ></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\" [idField]=\"'checkListName'\"\r\n (selected)=\"checklistNamechange($event,false)\" [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-select>\r\n </div> \r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('groupList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n \r\n <!-- Actual Select Component -->\r\n <lib-group-select [items]=\"groupList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'groupName'\"\r\n [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('groupList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <div class=\"select-wrapper\">\r\n <!-- Placeholder Overlay -->\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <!-- {{storeList.length}}\r\n {{galleryForm.get('storeList')?.value.length}} -->\r\n <!-- Actual Select Component -->\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <div class=\"d-flex justify-content-end\">\r\n <span class=\"me-4 mt-3\">\r\n \r\n \r\n <input formControlName=\"viewRedo\" *ngIf=\"showflag\" change type=\"checkbox\" (click)=\"redoChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewRedo\">\r\n <label *ngIf=\"showflag\" class=\"checkbox-label\" for=\"viewRedo\">View Re-do\u2019s only</label>\r\n </span>\r\n <span class=\"me-3 mt-3\">\r\n \r\n \r\n <input formControlName=\"viewFlag\" *ngIf=\"showflag\" change type=\"checkbox\" (click)=\"flagChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewFlag\">\r\n <label *ngIf=\"showflag\" class=\"checkbox-label\" for=\"viewFlag\">View flagged only</label>\r\n </span>\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"row my-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-md-4':'d-none'\">\r\n <div class=\"card position-relative h-auto\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{this.checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-50 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'||select === 'task'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" class=\"btn btn-primary w-25 btn-resize\" (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length==0 ? 'view-all':'view-questions'\" style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\" style=\"cursor: pointer;\"\r\n (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" >{{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"d-flex my-2 q-btn\"\r\n cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" (click)=\"selectedQuestion($event,section,question)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\" style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'||select ==='storeopenandclose'||select==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \" [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\" [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\" [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\" >{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\" *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n </section>\r\n \r\n </div>\r\n\r\n\r\n\r\n \r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-md-8':'col-md-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-header border-0 px-0 my-0\" *ngIf=\"select ==='custom'&&!viewloading&&!viewnoData||select === 'task'&&!viewloading&&!viewnoData\">\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\"ms-5 btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-20 end-0 mt-10 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0\" class=\"px-5 cursor-pointer py-4\" type=\"button\" (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom'||select==='task' \">\r\n <div *ngIf=\"showsingle\" class=\"qa-heading m-3 mx-11\">{{this.selectedSection[0]?.questions[0]}}</div>\r\n <div *ngIf=\"showsingle&&showfilter\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap mx-10\">\r\n <li class=\"nav-item\">\r\n <a (click)=\"taskTab('yes')\" [ngClass]=\"selectedTask === 'yes' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n Yes<span class=\"mx-2 \" [ngClass]=\"selectedTask === 'yes' ? 'badge-num-primary' :'badge-num-muted'\">10</span>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\" >\r\n <a (click)=\"taskTab('no')\" [ngClass]=\"selectedTask === 'no' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n No<span class=\"mx-2\" [ngClass]=\"selectedTask ==='no' ? 'badge-num-primary' :'badge-num-muted'\">20</span>\r\n </a>\r\n </li> \r\n <li class=\"nav-item\">\r\n <a (click)=\"taskTab('maybe')\" [ngClass]=\"selectedTask === 'maybe' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n May be<span class=\"mx-2 \" [ngClass]=\"selectedTask === 'maybe' ? 'badge-num-primary' :'badge-num-muted'\">0</span>\r\n </a>\r\n </li>\r\n \r\n </ul>\r\n </div>\r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n \r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n \r\n\r\n <div class=\"row px-10\" >\r\n\r\n <div *ngFor=\"let questionlist of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of questionlist.questions\">\r\n <div class=\"row w-100 m-3\" *ngIf=\"showsingle\">\r\n <div class=\"col-md-4 text-title\">\r\n {{checklist?.storeProfile?.storeName}}\r\n </div>\r\n <div class=\"col-md-8 text-end title-description\">\r\n Submitted by : {{checklist?.checklistInfo?.submittedBy}} On : {{checklist?.checklistInfo?.date}} {{checklist?.checklistInfo?.time}}\r\n </div>\r\n </div>\r\n <ul>\r\n <li *ngIf=\"showmulti\" class=\"qa-heading\">{{question?.qno}}. {{question?.qname}}</li>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br *ngIf=\"question.questionReferenceImage!==''\">\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n </div>\r\n <span class=\"remarksTxt\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div> \r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n \r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='image'\">\r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n <div class=\"Partially my-3 px-5\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <span class=\"mt-3\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6 mt-2\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n \r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6 mt-3\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span [ngClass]=\"item.sopFlag ? 'flagclour':''\" *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question.remarks!=''\">{{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n\r\n <video controls class=\"recap-img p-3\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div class=\"col-md-6\" *ngIf=\"question.questionReferenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div class=\"col-md-6\" *ngIf=\"item.validation&&item.validationAnswer!=''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType=='Capture Image'||item.validationType=='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType=='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"recap-img p-3\" *ngIf=\"item.validationType=='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType=='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!=''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n \r\n </ul>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"question.redo\" (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\" *ngIf=\"!question.task&&!question.taskId&&this.galleryForm.value.type!='task'\" (click)=\"addTask('createtask',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2 font-task\">Task</span>\r\n </button>\r\n <button *ngIf=\"question.task&&question.taskId &&this.galleryForm.value.type!=='task'\" class=\"btn btn-sm border-val1\" (click)=\"taskredirect(question,checklist?.storeProfile,checklist?.checklistInfo)\">\r\n <span class=\"ms-2 font-task\">View Task</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='mobileusagedetection'||select ==='uniformdetection'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imageUrl\">\r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='uniformdetection'\">\r\n Uniform Detection</div>\r\n <div class=\"text-center mt-3\" *ngIf=\"select ==='mobileusagedetection'\">\r\n Mobile Usage Detection</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"select ==='customerunattended'||select ==='staffleftinthemiddle'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div>\r\n <div class=\"qa-bodrer my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <ul class=\"row w-100\">\r\n <li class=\"qa-heading\">\r\n \r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <span class=\"me-3 store-title\">{{item.storeName}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.customer_id\">Cust ID : {{detection.customer_id}}</span>\r\n </h3>\r\n \r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_entry_time\">Entry time : {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_exit_time\">Exit time : {{detection.customer_exit_time}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"my-0\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"col-md-12 card\" *ngFor=\"let item of storeOpencloseView\">\r\n <div class=\"snapcard mx-8 my-8\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/open.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.closeTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 \">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]='paginationSizes' [pageSize]=\"limit\"\r\n (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:20%;height:125px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:6px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:cover!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.w-50{width:75%!important}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-title{font-size:16px!important;font-weight:600!important;color:#101828!important;line-height:24px}.title-description{font-size:14px!important;font-weight:400;color:#101828!important;line-height:24px!important}\n"] }]
|
|
1198
1556
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.GlobalStateService }, { type: i3.TraxService }, { type: i0.ChangeDetectorRef }, { type: i4.NgbModal }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.ToastService }, { type: i7.Location }, { type: i2.PageInfoService }], propDecorators: { onClick: [{
|
|
1199
1557
|
type: HostListener,
|
|
1200
1558
|
args: ['document:click', ['$event']]
|
|
1201
1559
|
}] } });
|
|
1202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTlGLE9BQU8sS0FBZ0IsTUFBTSxPQUFPLENBQUM7QUFDckMsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFLbkMsT0FBTyxFQUFFLE9BQU8sRUFBOEMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXRGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVZsRSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBaUJsQixNQUFNLE9BQU8sZ0JBQWdCO0lBa0VQO0lBQXlCO0lBQWdDO0lBQWtDO0lBQStCO0lBQ3BJO0lBQStCO0lBQXdCO0lBQW9DO0lBQTRCO0lBbEVqSSxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2IsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLFlBQVksR0FBRyxDQUFDLENBQWMsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlDLENB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QUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7d0JBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLHNMQUFzTCxDQUFDLENBQUE7cUJBQzFOO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUE7cUJBQzFEO29CQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFBO2dCQUM3QixDQUFDO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBR0QsS0FBSztJQUVMLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBUTtRQUNkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMzRixRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzt3R0ExcENVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLGlIQ3JCN0IseTZtRUF5MUJBOzs0RkRwMEJhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO29VQXVqQ3ZCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcbmRheWpzLmV4dGVuZCh1dGMpO1xyXG5pbXBvcnQgeyBUaW1lUGVyaW9kIH0gZnJvbSAnbmd4LWRhdGVyYW5nZXBpY2tlci1tYXRlcmlhbC9kYXRlcmFuZ2VwaWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVHJheFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmF4LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBFeHBvcnRHYWxsZXJ5Q29tcG9uZW50IH0gZnJvbSAnLi4vZXhwb3J0LWdhbGxlcnkvZXhwb3J0LWdhbGxlcnkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFkZFRhc2tDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtdGFzay9hZGQtdGFzay5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ2FsbGVyeScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dhbGxlcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgR2FsbGVyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkYXlqcyA9IGRheWpzXHJcbiAgc2VsZWN0ZWREYXRlUmFuZ2U6IGFueSA9IHt9O1xyXG4gIGlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgY29uc3QgaXNWYWxpZERhdGUgPSBtID4gdGhpcy5kYXlqcygpO1xyXG4gICAgcmV0dXJuIGlzVmFsaWREYXRlID8gJ2ludmFsaWQtZGF0ZScgOiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBnYWxsZXJ5Rm9ybTogRm9ybUdyb3VwXHJcbiAgdHlwZTogYW55ID0gW3sgdmFsdWU6ICdjaGVja2xpc3QnLCBsYWJlbDogJ0NoZWNrbGlzdCcgfSxcclxuICAgIC8vIHt2YWx1ZTondGFzaycsIGxhYmVsOidUYXNrJ31cclxuICBdXHJcbiAgY2hlY2tsaXN0czogYW55ID0gW11cclxuICBhbnN3ZXJUeXBlID0gW1xyXG4gICAgeyBsYWJlbDogJ0FsbCBBbnN3ZXIgVHlwZScsIHZhbHVlOiAnYWxsJyB9LFxyXG4gICAgeyBsYWJlbDogJ0Rlc2NyaXB0aXZlIEFuc3dlcicsIHZhbHVlOiAnZGVzY3JpcHRpdmUnIH0sXHJcbiAgICB7IGxhYmVsOiAnQS9CIFF1ZXN0aW9uJywgdmFsdWU6ICd5ZXMvbm8nIH0sXHJcbiAgICB7IGxhYmVsOiAnTXVsdGlwbGUgQ2hvaWNlIFF1ZXN0aW9uIC0gU2luZ2xlIEFuc3dlcicsIHZhbHVlOiAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnTXVsdGlwbGUgQ2hvaWNlIFF1ZXN0aW9uIC0gTXVsdGlwbGUgQW5zd2VyJywgdmFsdWU6ICdtdWx0aXBsZWNob2ljZW11bHRpcGxlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgSW1hZ2UgYXMgYW5zd2VyJywgdmFsdWU6ICdpbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIEltYWdlIHdpdGggRGVzY3JpcHRpb24nLCB2YWx1ZTogJ2Rlc2NyaXB0aXZlSW1hZ2UnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSB2aWRlbyBhcyBhbnN3ZXInLCB2YWx1ZTogJ3ZpZGVvJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgTXVsdGlwbGUgSW1hZ2UnLCB2YWx1ZTogJ211bHRpcGxlSW1hZ2UnIH0sXHJcbiAgICB7IGxhYmVsOiAnRGF0ZSBBcyBBbnN3ZXInLCB2YWx1ZTogJ2RhdGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnVGltZSBBcyBBbnN3ZXInLCB2YWx1ZTogJ3RpbWUnIH0sXHJcbiAgICB7IGxhYmVsOiAnTGluZWFyIFNjYWxlJywgdmFsdWU6ICdsaW5lYXJzY2FsZScgfVxyXG5cclxuICBdXHJcbiAgaGVhZGVyRmlsdGVyczogYW55ID0ge307XHJcbiAgc3RvcmVMaXN0OiBhbnlbXSA9IFtdXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY2hlY2tsaXN0RGF0YTogYW55ID0ge31cclxuICBzdG9yZXM6IGFueSA9IFtdO1xyXG4gIGdyb3VwczogYW55ID0gW107XHJcbiAgaXRlbXM6IGFueTtcclxuICBwYWdpbmF0ZWRJdGVtczogYW55O1xyXG4gIGl0ZW1zUGVyUGFnZSA9IDEwO1xyXG4gIGN1cnJlbnRQYWdlID0gMTtcclxuICB0b3RhbEl0ZW1zID0gMDtcclxuICB2aWV3Q2hlY2tsaXN0c0RhdGE6IGFueTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2aWV3bG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdmlld25vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9mZnNldDogYW55ID0gMTtcclxuICBsaW1pdDogYW55ID0gMTtcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMV1cclxuICB0b3RhbENvdW50OiBhbnk7XHJcbiAgdmlld0NoZWNrbGlzdHNvcHRpb25zOiBhbnkgPSB7fTtcclxuICBtb2JpbGV1c2FnZURhdGE6IGFueTtcclxuICBtb2JpbGV1c2FnZURhdGFMaXN0OiBhbnkgPSBbXVxyXG4gIHNlbGVjdEFsbDogYW55XHJcbiAgc3RvcmVPcGVuY2xvc2VWaWV3OiBhbnk7XHJcbiAgcXVlcnlQYXJhbXM6IGFueTtcclxuICBjdXN0b21lcnVuYXR0ZW5kZWREYXRhOiBhbnk7XHJcbiAgc2VjdGlvbk5hbWU6IGFueSA9ICdhbGwnO1xyXG4gIHF1ZXN0aW9uTmFtZTogYW55ID0gJ2FsbCc7XHJcbiAgY2xpZW50RGF0YTogYW55O1xyXG4gIGNoZWNrbGlzdE5hbWU6IGFueSA9ICcnO1xyXG4gIGdyb3VwTGlzdDogYW55ID0gW107XHJcbiAgZW52aXJvbm1lbnQ6IGFueTtcclxuICBzaG93ZmxhZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBbXVxyXG4gIHByZXZpZXdUeXBlOiBhbnkgPSAnaW1hZ2UnO1xyXG4gIGNoZWNrTGlzdERlc2NyaXB0aW9uOmFueT0nJ1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsIHByaXZhdGUgdHJheFNlcnZpY2U6IFRyYXhTZXJ2aWNlLCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLCBwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgc3RhcnREYXRlOiB0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgPyB0aGlzLmRheWpzKHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJykgOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICBlbmREYXRlOiB0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgPyB0aGlzLmRheWpzKHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJykgOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICB9XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudlxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKVxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudERldGFpbHMoKVxyXG4gICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKVxyXG4gICAgICAgICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXItaW5mb1wiKSB8fCBcIlwiKVxyXG4gICAgICAgICAgaWYgKHVzZXJpbmZvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQgPSB1c2VyaW5mbz8uY2xpZW50SWRcclxuICAgICAgICAgICAgdGhpcy5jbGllbnREZXRhaWxzKClcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKVxyXG4gICAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJHYWxsZXJ5XCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcIlwiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7IHRpdGxlOiBcIlRhbmdvIFRyYXhcIiwgcGF0aDogXCIvbWFuYWdlL3RyYXgvZGFzaGJvYXJkXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcblxyXG4gIH1cclxuICBnZXRBbGxHcm91cHMoKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNsdXN0ZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGdyb3VwOiBbXSwgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBMaXN0ID0gcmVzLmRhdGEuZ3JvdXBEYXRhXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBMaXN0ID0gW11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBjbGllbnREZXRhaWxzKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjbGllbnQoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnREYXRhID0gcmVzLmRhdGEucmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZmxhZ0NoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwidmlld0ZsYWdcIik/LnNldFZhbHVlKHRydWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldChcInZpZXdGbGFnXCIpPy5zZXRWYWx1ZShmYWxzZSlcclxuICAgIH1cclxuICB9XHJcbiAgb25jaGVja2xpc3RyZXNldCgpIHtcclxuICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0VmFsaWRhdGlvbigpIHtcclxuICAgIHRoaXMuaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBnaXZlbiBkYXRlIGlzIGJlZm9yZSB5ZXN0ZXJkYXlcclxuICAgICAgcmV0dXJuIG0uaXNBZnRlcih0aGlzLmRheWpzKCksICdkYXknKSA/ICdpbnZhbGlkLWRhdGUnIDogZmFsc2U7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25TdGFydERhdGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9XHJcbiAgICAgICAgICBtID4gdGhpcy5kYXlqcygpIHx8IG0gPiB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZS5hZGQoMiwgXCJkYXlzXCIpKTtcclxuICAgICAgICByZXR1cm4gaXNWYWxpZERhdGUgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmdldEFsbENoZWNrTGlzdHMoZmFsc2UpXHJcbiAgfVxyXG4gIHNlbGVjdEFsbFN0b3JlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmKGV2ZW50LnRhcmdldC5jaGVja2VkKXtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZvckVhY2goKG9iajogYW55KSA9PiAob2JqLmNoZWNrZWQgPSB0aGlzLnNlbGVjdEFsbCkpOyAgICAgXHJcbiAgICAgICAgbGV0IHN0b3JlID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZpbHRlcigoZWw6YW55KT0+ZWwuY2hlY2tlZClcclxuICAgICAgICBjb25zb2xlLmxvZyhzdG9yZSlcclxuICAgICAgICBjb25zdCBjaGFuZ2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN0b3JlKSlcclxuICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKGNoYW5nZSlcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbCAgPSAgZmFsc2VcclxuICAgICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZvckVhY2goKG9iajogYW55KSA9PiAob2JqLmNoZWNrZWQgPSB0aGlzLnNlbGVjdEFsbCkpOyAgICBcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgIH1cclxuICAgIFxyXG5cclxuICB9XHJcbiAgZGF0YXNob3c6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIHVwZGF0ZUNoZWNrKGV2ZW50OiBhbnksIHN0b3JlZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlLnN0b3JlSWQgPT09IHN0b3JlZGF0YS5zdG9yZUlkKSB7XHJcbiAgICAgICAgZWxlLmNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfSk7IFxyXG4gICBpZih0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QubGVuZ3RoID09PTApIFxyXG4gICAgdGhpcy5kYXRhc2hvdyA9ZmFsc2VcclxuICAgIGxldCBzdG9yZSA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5maWx0ZXIoKGRhdGE6YW55KSA9PiBkYXRhLmNoZWNrZWQpO1xyXG4gICAgY29uc3QgY2hhbmdlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdG9yZSkpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKGNoYW5nZSlcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuXHJcbiAgfVxyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZyb21EYXRlOiBbZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXSxcclxuICAgICAgdG9EYXRlOiBbZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLCBcIkRELU1NLVlZWVlcIikuZm9ybWF0KCdZWVlZLU1NLUREJyldLFxyXG4gICAgICB0eXBlOiBbJ2NoZWNrbGlzdCddLFxyXG4gICAgICBjaGVja2xpc3ROYW1lOiAnJyxcclxuICAgICAgc3RvcmVMaXN0OiBbdGhpcy5zdG9yZXNdLFxyXG4gICAgICBhbnN3ZXJUeXBlOiBbJ2FsbCddLFxyXG4gICAgICB2aWV3RmxhZzogW2ZhbHNlXSxcclxuICAgICAgY2hlY2tMaXN0VHlwZTogXCJjdXN0b21cIixcclxuICAgICAgY2hlY2tMaXN0SWQ6IFwiXCIsXHJcbiAgICAgIGdyb3VwTGlzdDogW3RoaXMuZ3JvdXBzXSxcclxuICAgICAgY2hlY2tMaXN0RGVzY3JpcHRpb246XCJcIlxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBUaW1lUGVyaW9kKSB7XHJcbiAgICBpZiAoIWV2ZW50LmVuZERhdGUgfHwgIWV2ZW50LnN0YXJ0RGF0ZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKCk7XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZnJvbURhdGUnKT8uc2V0VmFsdWUoZXZlbnQuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3RvRGF0ZScpPy5zZXRWYWx1ZShldmVudC5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpKVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGF0YVxyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlTGlzdClcclxuICAgICAgICAgIC8vIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyhmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMuc3RvcmVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICAgIGxldCBnZXRzdG9yZSA9IHRoaXMuc3RvcmVMaXN0LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5zdG9yZUlkID09PSB0aGlzLnF1ZXJ5UGFyYW1zLnN0b3JlSWQpXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVzID0gZ2V0c3RvcmVcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKHRydWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWUsXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlLFxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxDaGVja0xpc3RzKHR5cGU6IGFueSkge1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuc3RvcmVzPy5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmcm9tRGF0ZScpPy52YWx1ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmdhbGxlcnlGb3JtLmdldCgndG9EYXRlJyk/LnZhbHVlLFxyXG4gICAgICBzdG9yZUlkOiBzdG9yZXMsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudCxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IFwiY2hlY2tMaXN0TmFtZVwiLFxyXG4gICAgICBzb3J0Qnk6IDFcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Q2hlY2tsaXN0cyhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RzID0gWy4uLnJlcy5kYXRhLmNoZWNrbGlzdERhdGEsIC4uLltcclxuICAgICAgICAgICAgeyBzb3VyY2VDaGVja0xpc3RfaWQ6ICdzdG9yZW9wZW5hbmRjbG9zZScsIGNoZWNrTGlzdFR5cGU6IFwiQUlcIiwgY2hlY2tMaXN0TmFtZTogJ1N0b3JlIE9wZW4gJiBjbG9zZScsXCJjaGVja0xpc3REZXNjcmlwdGlvblwiOlwiTW9uaXRvcnMgcHVuY3R1YWxpdHkgb2Ygc3RvcmUgb3BlcmF0aW9uc1wiIH0sXHJcbiAgICAgICAgICAgIHsgc291cmNlQ2hlY2tMaXN0X2lkOiAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nLCBjaGVja0xpc3RUeXBlOiBcIkFJXCIsIGNoZWNrTGlzdE5hbWU6ICdNb2JpbGUgdXNhZ2UgZGV0ZWN0aW9uJyxcImNoZWNrTGlzdERlc2NyaXB0aW9uXCI6XCJEZXRlY3RzIHN0YWZmIHVzaW5nIG1vYmlsZSBkZXZpY2VzIGR1cmluZyB3b3JrIGhvdXJzXCIgfSxcclxuICAgICAgICAgICAgeyBzb3VyY2VDaGVja0xpc3RfaWQ6ICd1bmlmb3JtZGV0ZWN0aW9uJywgY2hlY2tMaXN0VHlwZTogXCJBSVwiLCBjaGVja0xpc3ROYW1lOiAnVW5pZm9ybSBkZXRlY3Rpb24nLFwiY2hlY2tMaXN0RGVzY3JpcHRpb25cIjpcIk1vbml0b3JzIFZlcmlmaWVzIHN0YWZmIGFkaGVyZW5jZSB0byBkcmVzcyBjb2RlLlwiIH0sXHJcbiAgICAgICAgICAgIHsgc291cmNlQ2hlY2tMaXN0X2lkOiAnY3VzdG9tZXJ1bmF0dGVuZGVkJywgY2hlY2tMaXN0VHlwZTogXCJBSVwiLCBjaGVja0xpc3ROYW1lOiAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcsXCJjaGVja0xpc3REZXNjcmlwdGlvblwiOlwiTW9uaXRvcnMgSWRlbnRpZmllcyBpbnN0YW5jZXMgb2YgdW5hdHRlbmRlZCBjdXN0b21lcnMuXCIgfSxcclxuICAgICAgICAgICAgeyBzb3VyY2VDaGVja0xpc3RfaWQ6ICdzdGFmZmxlZnRpbnRoZW1pZGRsZScsIGNoZWNrTGlzdFR5cGU6IFwiQUlcIiwgY2hlY2tMaXN0TmFtZTogJ1N0YWZmIGxlZnQgaW4gdGhlIG1pZGRsZScsXCJjaGVja0xpc3REZXNjcmlwdGlvblwiOlwiRGV0ZWN0cyBzdGFmZiBsZWF2aW5nIGZyb20gdGhlIHN0b3JlIGR1cmluZyB0aGUgb3BlcmF0aW9uIGhvdXInc1wiIH1dXTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RJZCAmJiB0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0SWQnKT8uc2V0VmFsdWUodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RJZClcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUpXHJcblxyXG4gICAgICAgICAgICAgIGxldCBnZXRjaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdHMuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gdGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RJZClcclxuICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0RGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3REZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0TmFtZSA9IGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSA9PT0gJ2N1c3RvbWVydW5hdHRlbmRlZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ2N1c3RvbWVydW5hdHRlbmRlZCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbWVydW5hdHRlbmRlZGxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT09ICdtb2JpbGV1c2FnZWRldGVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJztcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhbGlzdChmYWxzZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlID09PSAndW5pZm9ybWRldGVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3VuaWZvcm1kZXRlY3Rpb24nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGFsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlID09PSAnc3RhZmZsZWZ0aW50aGVtaWRkbGUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICdzdGFmZmxlZnRpbnRoZW1pZGRsZSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbWVydW5hdHRlbmRlZGxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT09ICdjdXN0b20nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdFFBKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZSAmJiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdFR5cGUnKT8uc2V0VmFsdWUodGhpcy5jaGVja2xpc3RzWzBdPy5jaGVja0xpc3RUeXBlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZSAmJiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGxldCBnZXRjaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdHMuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLmNoZWNrTGlzdE5hbWUgPT09IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIGlmIChnZXRjaGVja2xpc3QgJiYgZ2V0Y2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrbGlzdE5hbWUnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3ROYW1lKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdE5hbWUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWVcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdElkJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0RGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3REZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdE5hbWUgPSB0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdE5hbWVcclxuICAgICAgICAgICAgICAgICAgbGV0IGdldGNoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0cy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuY2hlY2tMaXN0TmFtZSA9PT0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdERlc2NyaXB0aW9uID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3REZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdElkJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0RGVzY3JpcHRpb24nKT8uc2V0VmFsdWUodGhpcy5jaGVja2xpc3RzWzBdPy5jaGVja0xpc3REZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0TmFtZSA9IHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgbGV0IGdldGNoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0cy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuY2hlY2tMaXN0TmFtZSA9PT0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lKVxyXG4gICAgICAgICAgICAgICAgaWYgKGdldGNoZWNrbGlzdCAmJiBnZXRjaGVja2xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3REZXNjcmlwdGlvbiA9IGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0RGVzY3JpcHRpb25cclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RJZCcpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RzID0gW107XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tsaXN0cyA9IFtdO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJlbW92ZVF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgY29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IHRoaXMubG9jYXRpb24ucGF0aCgpLnNwbGl0KCc/JylbMF07XHJcbiAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh1cmxXaXRob3V0UGFyYW1zKTtcclxuICB9XHJcbiAgb25ncm91cFNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZ3JvdXBMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gICAgdGhpcy5ncm91cHMgPSBldmVudC5tYXAoKGVsOiBhbnkpID0+IGVsLmdyb3VwTmFtZSlcclxuICAgIC8vIHRoaXMuZ2V0QWxsU3RvcmVzKClcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KSBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblxyXG4gIH1cclxuICBvblN0b3JlU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUoZXZlbnQpXHJcbiAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoc3RvcmU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpc1N0b3JlU2VsZWN0ZWQgPSBldmVudC5zb21lKChzZWxlY3RlZFN0b3JlOiBhbnkpID0+IHNlbGVjdGVkU3RvcmUuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZCk7XHJcbiAgICAgIGlmIChpc1N0b3JlU2VsZWN0ZWQpIHtcclxuICAgICAgICBzdG9yZS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdG9yZS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIHN0b3JlTGlzdGRyb3Bkb3duKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGxldCBzdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0SWQsXHJcbiAgICAgICAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgICAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICAgICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNoZWNrbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEZXRhaWxzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RldGFpbHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgc2VsZWN0ID0gJ2N1c3RvbSdcclxuICBvblN1Ym1pdCgpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gMVxyXG4gICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lXHJcbiAgICB0aGlzLmNoZWNrTGlzdERlc2NyaXB0aW9uID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3REZXNjcmlwdGlvblxyXG5cclxuICAgIC8vIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsZ3JvdXBzOnRoaXMuZ3JvdXBzIH0pLnN1YnNjcmliZSh7XHJcbiAgICAvLyAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnJlc3VsdDtcclxuICAgIC8vICAgICAgICAgdGhpcy5zdG9yZXMgPSB0aGlzLnN0b3JlTGlzdFxyXG4gICAgLy8gdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdG9yZSBPcGVuICYgY2xvc2UnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NlbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnTW9iaWxlIHVzYWdlIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nO1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdVbmlmb3JtIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAndW5pZm9ybWRldGVjdGlvbic7XHJcbiAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnY3VzdG9tZXJ1bmF0dGVuZGVkJztcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdGFmZiBsZWZ0IGluIHRoZSBtaWRkbGUnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0YWZmbGVmdGludGhlbWlkZGxlJztcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnID8gXCJjdXN0b21cIiA6IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RvcmVMaXN0ZHJvcGRvd24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3c6IG51bWJlciA9IDA7XHJcbiAgYWNjb3JkaWFuKGluZGV4OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNob3cgPT0gaW5kZXgpIHtcclxuICAgICAgdGhpcy5zaG93ID0gLTE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3cgPSBpbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzdG9yZU9wZW5jbG9zZWxpc3QodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwic2VhcmNoXCI6IFwiXCIsXHJcbiAgICAgIFwic29ydFwiOiBcIlwiLFxyXG4gICAgICBcInNvcnRCeVwiOiAxXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLnN0b3JlT3BlbmNsb3NlbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0ID0gcmVzLmRhdGEuc3RvcmVvcGVuYW5kY2xvc2VEYXRhXHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IFtdXHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgc3RvcmVJZDogZWxlbWVudC5zdG9yZUlkLFxyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gdGhpcy5zdG9yZXNcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZXMpXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlT3BlbmNsb3NldmlldygpXHJcblxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgc3RvcmVPcGVuY2xvc2V2aWV3KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTBcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJzZWFyY2hcIjogXCJcIixcclxuICAgICAgXCJzb3J0XCI6IFwiXCIsXHJcbiAgICAgIFwic29ydEJ5XCI6IDFcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTBdO1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5zdG9yZU9wZW5jbG9zZWxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2VWaWV3ID0gcmVzLmRhdGEuc3RvcmVvcGVuYW5kY2xvc2VEYXRhXHJcblxyXG4gICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZVZpZXcuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZGF0ZVN0cmluZyA9IGRheWpzKGVsZW1lbnQuZGF0ZVN0cmluZykuZm9ybWF0KCdERC1NTS1ZWVlZJylcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxDb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNoZWNrbGlzdE5hbWVjaGFuZ2UoZXZlbnQ6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tMaXN0VHlwZSA9PT0gXCJBSVwiKSB7XHJcbiAgICAgIHRoaXMuc2hvd2ZsYWcgPSBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdFR5cGUnKT8uc2V0VmFsdWUoJ2N1c3RvbScpXHJcbiAgICAgIHRoaXMuc2hvd2ZsYWcgPSB0cnVlXHJcbiAgICB9XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0SWQnKT8uc2V0VmFsdWUoZXZlbnQ/LnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGV2ZW50Py5jaGVja0xpc3ROYW1lKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKGV2ZW50Py5jaGVja0xpc3REZXNjcmlwdGlvbilcclxuICAgIC8vIHRoaXMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPSBldmVudD8uY2hlY2tMaXN0RGVzY3JpcHRpb25cclxuICAgIC8vIHRoaXMuY2hlY2tsaXN0TmFtZSA9ICBldmVudD8uY2hlY2tMaXN0TmFtZVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGF0YVxyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlTGlzdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdCh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImRhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmdldGN1c3RvbWVydW5hdHRlbmRlZHZpZXcoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNlbGVjdGVkRXhwb3J0ID0gZmFsc2VcclxuICBzZWxlY3RlZFF1ZXN0aW9uKGV2ZW50OiBhbnksIHNlY3Rpb246IGFueSwgUXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIGxldCBxdWVzdGlvbnM6IGFueSA9IFtdXHJcbiAgICAgICAgcXVlc3Rpb25zLnB1c2goUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICBsZXQgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICBzZWN0aW9uTmFtZTogc2VjdGlvbi5zZWN0aW9uTmFtZSxcclxuICAgICAgICAgIHF1ZXN0aW9uczogcXVlc3Rpb25zXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnB1c2gocmVzcG9uc2UpXHJcbiAgICAgICAgdGhpcy5kYXRhc2hvdyA9ZmFsc2VcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGFzaG93ID1mYWxzZVxyXG4gICAgICAgIGxldCBzZWN0aW9uRXhpc3RzID0gdGhpcy5zZWxlY3RlZFNlY3Rpb24uZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuc2VjdGlvbk5hbWUgPT09IHNlY3Rpb24uc2VjdGlvbk5hbWUpXHJcbiAgICAgICAgaWYgKHNlY3Rpb25FeGlzdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24ubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuc2VjdGlvbk5hbWUgPT09IHNlY3Rpb24uc2VjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICBkYXRhLnF1ZXN0aW9ucy5wdXNoKFF1ZXN0aW9uLnFuYW1lLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBxdWVzdGlvbnM6IGFueSA9IFtdXHJcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChRdWVzdGlvbi5xbmFtZS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpKVxyXG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBzZWN0aW9uTmFtZTogc2VjdGlvbi5zZWN0aW9uTmFtZSxcclxuICAgICAgICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnNcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnB1c2gocmVzcG9uc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGVja2xpc3REYXRhLm1hcCgoc2VjOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoc2VjLnNlY3Rpb25OYW1lID09IHNlY3Rpb24uc2VjdGlvbk5hbWUpIHtcclxuICAgICAgICAgIHNlYy5xdWVzdGlvbnMubWFwKChxdWVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHF1ZXMucW5hbWUgPT09IFF1ZXN0aW9uLnFuYW1lLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikpIHtcclxuICAgICAgICAgICAgICBxdWVzLmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEuc2VjdGlvbk5hbWUgPT0gc2VjdGlvbi5zZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgZGF0YS5xdWVzdGlvbnMgPSBkYXRhLnF1ZXN0aW9ucy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUgIT0gUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWxlY3RlZFNlY3Rpb24uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnF1ZXN0aW9ucy5sZW5ndGggPiAwKVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydCA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkU2VjdGlvbilcclxuICB9XHJcbiAgZ2V0bW9iaWxlVXNhZ2VEYXRhbGlzdCh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJkYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuc2VsZWN0LFxyXG4gICAgICBcInZpZXdJbWFnZVwiOiBmYWxzZSxcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0TW9iVXNhZ2VsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSBbXVxyXG4gICAgICAgICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHN0b3JlSWQ6IGVsZW1lbnQuc3RvcmVJZCxcclxuICAgICAgICAgICAgICBzdG9yZU5hbWU6IGVsZW1lbnQuc3RvcmVOYW1lXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsX2NvdW50XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gdGhpcy5zdG9yZXNcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZXMpXHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhdmlldygpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgb25yZXNldCgpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICB0aGlzLm9mZnNldCA9IDFcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdG9yZSBPcGVuICYgY2xvc2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlT3BlbmNsb3NlbGlzdChmYWxzZSlcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnTW9iaWxlIHVzYWdlIGRldGVjdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nO1xyXG4gICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdVbmlmb3JtIGRldGVjdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSAndW5pZm9ybWRldGVjdGlvbic7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhbGlzdChmYWxzZSlcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSAnY3VzdG9tZXJ1bmF0dGVuZGVkJztcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnID8gXCJjdXN0b21cIiA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ZHJvcGRvd24oKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW107XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIG9udmlldygpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICBcclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdG9yZSBPcGVuICYgY2xvc2UnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NldmlldygpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ01vYmlsZSB1c2FnZSBkZXRlY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJztcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ1VuaWZvcm0gZGV0ZWN0aW9uJykge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICd1bmlmb3JtZGV0ZWN0aW9uJztcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcpIHtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ2N1c3RvbWVydW5hdHRlbmRlZCc7XHJcbiAgICAgIHRoaXMuZ2V0Y3VzdG9tZXJ1bmF0dGVuZGVkdmlldygpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ1N0YWZmIGxlZnQgaW4gdGhlIG1pZGRsZScpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnc3RhZmZsZWZ0aW50aGVtaWRkbGUnO1xyXG4gICAgICB0aGlzLmdldGN1c3RvbWVydW5hdHRlbmRlZHZpZXcoKVxyXG4gICAgfVxyXG4gICAgaWYoKHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID09PSAwKSlcclxuICAgICAgdGhpcy5kYXRhc2hvdyA9dHJ1ZTtcclxuICBlbHNlIGlmKHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMSl7XHJcbiAgICB0aGlzLmRhdGFzaG93ID1mYWxzZTtcclxuICB9XHJcbiAgfVxyXG4gIGdldGN1c3RvbWVydW5hdHRlbmRlZHZpZXcoKSB7XHJcblxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXVxyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImRhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IHRydWUsXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGN1c3RvbWVydW5hdHRlbmRlZGxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkRGF0YSA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0bW9iaWxlVXNhZ2VEYXRhdmlldygpIHtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTBcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXVxyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImRhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IHRydWUsXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldE1vYlVzYWdlbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5tb2JpbGV1c2FnZURhdGEgPSByZXMuZGF0YS5kYXRhXHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxfY291bnRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgc2VsZWN0c2luZ2xlcXVlc3Rpb24oKXtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLmRhdGFzaG93ID10cnVlXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGlmKCh0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA9PT0gMCkpXHJcbiAgICAgIHRoaXMuZGF0YXNob3cgPXRydWU7XHJcbiAgZWxzZSBpZih0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA+IDEpe1xyXG4gICAgdGhpcy5kYXRhc2hvdyA9ZmFsc2U7XHJcbiAgfVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdElkLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjaGVja2xpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIC8vIHRoaXMuY2hlY2tsaXN0RGF0YSA9IHJlcz8uZGF0YS5jaGVja2xpc3RRdWVzdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHMoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldENoZWNrbGlzdFFBKHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXVxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImN1c3RvbVwiLCBcIkFJXCJdXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZyAvL1t0cnVlLCBmYWxzZV1cclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2hlY2tsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSByZXM/LmRhdGEuY2hlY2tsaXN0UXVlc3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzKFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHZpZXdDaGVja2xpc3RzKHNlY3Rpb25OYW1lOiBhbnksIHF1ZXN0aW9uTmFtZTogYW55KSB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IFtdICAgIFxyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lO1xyXG4gICAgdGhpcy5xdWVzdGlvbk5hbWUgPSBxdWVzdGlvbk5hbWVcclxuXHJcbiAgICB0aGlzLmxpbWl0ID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzFdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwLFxyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgdGhpcy52aWV3Q2hlY2tsaXN0c29wdGlvbnMgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImNoZWNrbGlzdFwiLCBcInRhc2tcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdICAgICAgXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXQsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJzb3VyY2VDaGVja0xpc3RfaWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLFxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvblxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS52aWV3Q2hlY2tsaXN0cyh0aGlzLnZpZXdDaGVja2xpc3Rzb3B0aW9ucyk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEudG90YWxfY291bnRcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW11cclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGV4cG9ydFhMU1godHlwZTogYW55KSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSBhcyBzdHJpbmcpXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IFtdLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdElkLFxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImZpbGVUeXBlXCI6IHR5cGUsXHJcbiAgICAgIFwic3RvcmVJZHNcIjogc3RvcmVzLFxyXG4gICAgICBcInVzZXJJZFwiOiB1c2VyPy5faWQsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJheFNlcnZpY2UucmVwb3J0VGFibGVFeHBvcnQocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPkRvd25sb2FkaW5nIHlvdXIgcmVwb3J0czwvc3Bhbj48YSBocmVmPVwibm90aWZpY2F0aW9ucy9hbGVydHM/dGFiPWRvd25sb2FkXCIgc3R5bGU9XCJjb2xvcjojOTljM2ZmOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBjdXJzb3I6cG9pbnRlclwiID5WaWV3PC9hPjwvZGl2PmApXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFNvbWV0aGluZyB3ZW50IHdyb25nICFgKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICB0YXNrQ3JlYXRlKCkgeyB9XHJcblxyXG4gIHNob3dzaWRlbmF2OiBib29sZWFuID0gdHJ1ZTtcclxuICBzaWRlbmF2KCkge1xyXG4gICAgdGhpcy5zaG93c2lkZW5hdiA9ICF0aGlzLnNob3dzaWRlbmF2O1xyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZXZpZXcocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnU3RvcmUgT3BlbiAmIGNsb3NlJykge1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NldmlldygpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ01vYmlsZSB1c2FnZSBkZXRlY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhdmlldygpXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdVbmlmb3JtIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnY3VzdG9tZXJ1bmF0dGVuZGVkJztcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnU3RhZmYgbGVmdCBpbiB0aGUgbWlkZGxlJykge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdzdGFmZmxlZnRpbnRoZW1pZGRsZSc7XHJcbiAgICAgIHRoaXMuZ2V0Y3VzdG9tZXJ1bmF0dGVuZGVkdmlldygpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdDaGVja2xpc3RzKCcnLCAnJyk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDMwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5saW1pdCA9IHBhZ2VTaXplO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ1N0b3JlIE9wZW4gJiBjbG9zZScpIHtcclxuICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZXZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdNb2JpbGUgdXNhZ2UgZGV0ZWN0aW9uJykge1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YXZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdVbmlmb3JtIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcpIHtcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdGFmZiBsZWZ0IGluIHRoZSBtaWRkbGUnKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld0NoZWNrbGlzdHMoJycsICcnKTtcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwb3J0U2hvdyA9IGZhbHNlO1xyXG4gIH1cclxuICBleHBvcnRTaG93ID0gZmFsc2U7XHJcbiAgZXhwb3J0TGFiZWw6IHN0cmluZyA9ICdFeHBvcnQnO1xyXG4gIGV4cG9ydERldChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5leHBvcnRTaG93ID0gIXRoaXMuZXhwb3J0U2hvdztcclxuICB9XHJcbiAgcXVlc3Rpb25zY291bnQoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgY291bnQgPSAwXHJcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb3VudCA9IGNvdW50ICsgZWxlbWVudC5xdWVzdGlvbnMubGVuZ3RoXHJcblxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG4gIHNldEV4cG9ydEFzUFBUKHR5cGU6IGFueSwgZmlsZVR5cGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBvcnRMYWJlbCA9IHR5cGU7ICAvLyBVcGRhdGUgdGhlIGxhYmVsIHRleHRcclxuICAgIHRoaXMuZXhwb3J0U2hvdyA9IGZhbHNlOyAgLy8gQ2xvc2UgdGhlIGV4cG9ydCBtZW51IGFmdGVyIHNlbGVjdGlvblxyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcblxyXG4gICAgaWYgKGZpbGVUeXBlID09PSAncHB0Jykge1xyXG4gICAgICBsZXQgc3RhcnQgPSBkYXlqcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlKTtcclxuICAgICAgbGV0IGVuZCA9IGRheWpzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlKTtcclxuICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5cycpO1xyXG5cclxuICAgICAgaWYgKGRpZmZlcmVuY2UgPT09IDIgJiYgdGhpcy5xdWVzdGlvbnNjb3VudCh0aGlzLnNlbGVjdGVkU2VjdGlvbikgPiAxKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgUGxlYXNlIHNlbGVjdCBtYXhpbXVtIG9mIDEgcXVlc3Rpb24gb25seWApXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRpZmZlcmVuY2UgPT09IDEgJiYgdGhpcy5xdWVzdGlvbnNjb3VudCh0aGlzLnNlbGVjdGVkU2VjdGlvbikgPiAzKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgUGxlYXNlIHNlbGVjdCBtYXhpbXVtIG9mIDMgcXVlc3Rpb24gb25seWApXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRpZmZlcmVuY2UgPT09IDAgJiYgdGhpcy5xdWVzdGlvbnNjb3VudCh0aGlzLnNlbGVjdGVkU2VjdGlvbikgPiAzKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgUGxlYXNlIHNlbGVjdCBtYXhpbXVtIG9mIDMgcXVlc3Rpb24gb25seWApXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5leHBvcnRMYWJlbCA9ICdFeHBvcnQnXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiZG93bmxvYWRJbnNlcnRGcm9tXCI6IFwiZ2FsbGVyeVwiLFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IFtdLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdElkLFxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLFxyXG4gICAgICBcImZpbGVUeXBlXCI6IGZpbGVUeXBlLFxyXG4gICAgICBcInN0b3JlSWRzXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbixcclxuICAgICAgXCJwcmV2aWV3VHlwZVwiOiB0aGlzLnByZXZpZXdUeXBlLFxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWdcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHR5cGUgPT09ICdFeHBvcnQgYXMgQ1NWJyB8fCB0eXBlID09PSAnRXhwb3J0IGFzIFBQVCcgfHwgdHlwZSA9PT0gJ0V4cG9ydCBhcyBaSVAnKSB7XHJcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFeHBvcnRHYWxsZXJ5Q29tcG9uZW50LCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgICAgc2l6ZTogXCJsZ1wiLFxyXG4gICAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiICAvLyA8LS0gQWRkIGEgY3VzdG9tIGNsYXNzIGhlcmUgIFxyXG4gICAgICB9KTtcclxuICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHR5cGU7XHJcbiAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJzdWNjZXNzXCIpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGA8ZGl2PjxzcGFuIGNsYXNzPVwibWUtOFwiID5Eb3dubG9hZGluZyB5b3VyIHJlcG9ydHM8L3NwYW4+PGEgaHJlZj1cIm5vdGlmaWNhdGlvbnMvYWxlcnRzP3RhYj1kb3dubG9hZFwiIHN0eWxlPVwiY29sb3I6Izk5YzNmZjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgY3Vyc29yOnBvaW50ZXJcIiA+VmlldzwvYT48L2Rpdj5gKVxyXG4gICAgICAgICAgfSBlbHNlIGlmKHJlc3VsdCA9PT0gXCJlcnJvclwiKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFNvbWV0aGluZyB3ZW50IHdyb25nICFgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5leHBvcnRMYWJlbCA9ICdFeHBvcnQnXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UucmVwb3J0VGFibGVFeHBvcnQocGF5bG9hZCk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPkRvd25sb2FkaW5nIHlvdXIgcmVwb3J0czwvc3Bhbj48YSBocmVmPVwibm90aWZpY2F0aW9ucy9hbGVydHM/dGFiPWRvd25sb2FkXCIgc3R5bGU9XCJjb2xvcjojOTljM2ZmOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBjdXJzb3I6cG9pbnRlclwiID5WaWV3PC9hPjwvZGl2PmApXHJcbiAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGBTb21ldGhpbmcgd2VudCB3cm9uZyAhYClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICByZXNldCgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBhZGRUYXNrKHR5cGU6YW55KXtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRUYXNrQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnLCB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ2FsbGVyeS1jYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIG1iLTRcIj5HYWxsZXJ5PC9kaXY+XHJcblxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJnYWxsZXJ5Rm9ybVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJ0b3A6IDIwJTtcIiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMy4zMzMzIDEuNjY2NjNWNC45OTk5Nk02LjY2NjY3IDEuNjY2NjNWNC45OTk5Nk0yLjUgOC4zMzMyOUgxNy41TTQuMTY2NjcgMy4zMzMyOUgxNS44MzMzQzE2Ljc1MzggMy4zMzMyOSAxNy41IDQuMDc5NDggMTcuNSA0Ljk5OTk2VjE2LjY2NjZDMTcuNSAxNy41ODcxIDE2Ljc1MzggMTguMzMzMyAxNS44MzMzIDE4LjMzMzNINC4xNjY2N0MzLjI0NjE5IDE4LjMzMzMgMi41IDE3LjU4NzEgMi41IDE2LjY2NjZWNC45OTk5NkMyLjUgNC4wNzk0OCAzLjI0NjE5IDMuMzMzMjkgNC4xNjY2NyAzLjMzMzI5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZngtZGF0ZS1yYW5nZSBmb3JtLWNvbnRyb2wgcHMtMTQgei0yXCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIG1hdElucHV0IG5neERhdGVyYW5nZXBpY2tlck1kICBbZHJvcHNdPVwiJ2Rvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3BlbnNdPVwiJ3JpZ2h0J1wiIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cImZhbHNlXCIgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxdPVwiZmFsc2VcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgKGNsaWNrKT1cInJlc2V0VmFsaWRhdGlvbigpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0RGF0ZUNoYW5nZWQpPVwib25TdGFydERhdGVDaGFuZ2UoJGV2ZW50KVwiIFtpc0N1c3RvbURhdGVdPVwiaXNDdXN0b21EYXRlXCIgW2F1dG9BcHBseV09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlcmFuZ2VcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInR5cGVcIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInR5cGVcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgW2l0ZW1zXT1cImNoZWNrbGlzdHNcIiAgW211bHRpXT1cImZhbHNlXCIgW3NlYXJjaEZpZWxkXT1cIidjaGVja0xpc3ROYW1lJ1wiIFtpZEZpZWxkXT1cIidjaGVja0xpc3ROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hlY2tsaXN0TmFtZWNoYW5nZSgkZXZlbnQsZmFsc2UpXCIgW3NlbGVjdGVkVmFsdWVzXT1cIlt7Y2hlY2tMaXN0TmFtZTpnYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrbGlzdE5hbWUnKT8udmFsdWV9XVwiPjwvbGliLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiYW5zd2VyVHlwZVwiPjwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGxhY2Vob2xkZXIgT3ZlcmxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlci1vdmVybGF5XCIgKm5nSWY9XCIhKGdhbGxlcnlGb3JtLmdldCgnZ3JvdXBMaXN0Jyk/LnZhbHVlPy5sZW5ndGgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBjbHVzdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0dWFsIFNlbGVjdCBDb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWdyb3VwLXNlbGVjdCBbaXRlbXNdPVwiZ3JvdXBMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ2dyb3VwTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidncm91cE5hbWUnXCIgKHNlbGVjdGVkKT1cIm9uZ3JvdXBTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVzXT1cImdhbGxlcnlGb3JtLmdldCgnZ3JvdXBMaXN0Jyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1ncm91cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGxhY2Vob2xkZXIgT3ZlcmxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBTdG9yZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7e3N0b3JlTGlzdC5sZW5ndGh9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2dhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnZhbHVlLmxlbmd0aH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0dWFsIFNlbGVjdCBDb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmVzLXNlbGVjdCBbaXRlbXNdPVwic3RvcmVMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ3N0b3JlTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3N0b3JlSWQnXCIgKHNlbGVjdGVkKT1cIm9uU3RvcmVTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWVcIj48L2xpYi1zdG9yZXMtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInZpZXdGbGFnXCIgKm5nSWY9XCJzaG93ZmxhZ1wiIGNoYW5nZSB0eXBlPVwiY2hlY2tib3hcIiAoY2xpY2spPVwiZmxhZ0NoYW5nZWQoJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG10LTEgbWUtNFwiIGlkPVwidmlld0ZsYWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwic2hvd2ZsYWdcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwidmlld0ZsYWdcIj5WaWV3IGZsYWdnZWQgb25seTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9uU3VibWl0KClcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCBcIj48c3Bhbj5BcHBseTwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicm93IG15LTVcIj5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwic2hvd3NpZGVuYXYgPyAnY29sLW1kLTQnOidkLW5vbmUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgcG9zaXRpb24tcmVsYXRpdmUgaC1hdXRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LXRpdGxlXCI+e3t0aGlzLmNoZWNrbGlzdE5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2xpc3QtdGV4dFwiPnt7Y2hlY2tMaXN0RGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJyb3cgbXQtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTUwIGgtMzAwcHhcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS10aXRsZSBtdC0wXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS1zdWJcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIHRoaXMgY2hlY2tsaXN0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c2VjdGlvbiAqbmdJZj1cIiFub0RhdGEgJiYgIWxvYWRpbmdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdCA9PT0gJ2N1c3RvbSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kIG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0yNSBtZS0zIGJ0bi1yZXNpemVcIiAoY2xpY2spPVwidmlld0NoZWNrbGlzdHMoKVwiPiBSZXNldCA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMjUgbWUtMyBidG4tcmVzaXplXCIgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjBcIiAoY2xpY2spPVwib25jaGVja2xpc3RyZXNldCgpXCI+IFJlc2V0IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbi5sZW5ndGg+MFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMjUgIGJ0bi1yZXNpemVcIiAoY2xpY2spPVwic2VsZWN0c2luZ2xlcXVlc3Rpb24oKVwiPkFwcGx5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS02XCIgIFtuZ0NsYXNzXT1cInNlbGVjdGVkU2VjdGlvbi5sZW5ndGg9PTAgPyAndmlldy1hbGwnOid2aWV3LXF1ZXN0aW9ucydcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiAoY2xpY2spPVwib25jaGVja2xpc3RyZXNldCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IEFsbCBBbnN3ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGNoZWNrbGlzdERhdGE7IGxldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtNFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjY29yZGlhbihpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy00IGZ3LWJvbGQgc2VjdGlvblwiID57e3NlY3Rpb24uc2VjdGlvbk5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW25nQ2xhc3NdPVwieydyb3RhdGUnIDogc2hvdyAhPT0gaX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNVwiIGhlaWdodD1cIjI1XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSA3LjVMMTAgMTIuNUwxNSA3LjVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvdz09PWlcIiBjbGFzcz1cInF1ZXN0aW9uLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwic2VjdGlvbi5xdWVzdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnM7bGV0IGo9aW5kZXg7XCIgY2xhc3M9XCJkLWZsZXggbXktMiBxLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBpZD1cImxhYmVsXCIgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi5jaGVja2VkXCIgKGNsaWNrKT1cInNlbGVjdGVkUXVlc3Rpb24oJGV2ZW50LHNlY3Rpb24scXVlc3Rpb24pXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG10LTIgbWUtNFwiICB0eXBlPVwiY2hlY2tib3hcIiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0YWJsZWNvbnRlbnRcIiBbbmdDbGFzc109XCJxdWVzdGlvbj8uY2hlY2tlZCA/ICd2aWV3LWFsbCc6JydcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLnFub319IC4ge3txdWVzdGlvbi5xbmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+ICAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3QgPT09J21vYmlsZXVzYWdlZGV0ZWN0aW9uJ3x8c2VsZWN0ID09PSd1bmlmb3JtZGV0ZWN0aW9uJ3x8c2VsZWN0ID09PSdzdG9yZW9wZW5hbmRjbG9zZSd8fHNlbGVjdD09PSdjdXN0b21lcnVuYXR0ZW5kZWQnfHxzZWxlY3QgPT09J3N0YWZmbGVmdGludGhlbWlkZGxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZCBtdC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTI1IG1lLTMgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJvbnJlc2V0KClcIj4gUmVzZXQgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMjUgIGJ0bi1yZXNpemVcIiAoY2xpY2spPVwib252aWV3KClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bnNlbGVjdCBoLTkwMHB4IHNjcm9sbC15XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWxlZnQgXCIgW25nQ2xhc3NdPVwic2VsZWN0QWxsID8gJ2JhY2tncm91bmRCb3JkZXInOid3aXRob3V0YmFja2dyb3VuZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG1lLTRcIiB0eXBlPVwiY2hlY2tib3hcIiAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbFN0b3JlKCRldmVudClcIj4gPHNwYW4gW25nQ2xhc3NdPVwic2VsZWN0QWxsID8gJ3VzYWdlLWRldGVjdGlvbic6J3VzYWdlLXRleHQnXCI+U2VsZWN0IEFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZHJvcGRvd25iZyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTRcIiAqbmdGb3I9XCJsZXQgbGlzdCBvZiBtb2JpbGV1c2FnZURhdGFMaXN0O2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjaGFuZ2UpPVwidXBkYXRlQ2hlY2soJGV2ZW50LGxpc3QpXCIgW25nQ2xhc3NdPVwibGlzdC5jaGVja2VkID8gJ2JhY2tncm91bmRCb3JkZXInOid3aXRob3V0YmFja2dyb3VuZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJsYWJlbHt7aX19XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG1lLTRcIiAgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaXN0LmNoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibGFiZWx7e2l9fVwiIFtuZ0NsYXNzXT1cImxpc3QuY2hlY2tlZCA/ICd1c2FnZS1kZXRlY3Rpb24nOid1c2FnZS10ZXh0J1wiID57e2xpc3Q/LnN0b3JlTmFtZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgZGV0ZWN0aW9ucmlnaHRcIiAqbmdJZj1cImxpc3QuZGV0ZWN0aW9uXCI+e3tsaXN0LmRldGVjdGlvbn19IERldGVjdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCJzZWxlY3QgPT09J2V5ZXRlc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctYWxsIG15LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsIERldGVjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ucmlnaHQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMSAxN0w2IDEyTDExIDdNMTggMTdMMTMgMTJMMTggN1wiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtbWQtOCc6J2NvbC1tZC0xMidcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgIHB4LTAgbXktMFwiICpuZ0lmPVwic2VsZWN0ID09PSdjdXN0b20nJiYhdmlld2xvYWRpbmcmJiF2aWV3bm9EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8aDM+PC9oMz5cclxuICAgICAgICAgICAgICAgIDwhLS0gU3dpdGNoIHRvZ2dsZSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgY3Vyc29yLXBvaW50ZXIgbWUtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLTUgYnRuIGJ0bi1wcmltYXJ5IGZvcm0tY29udHJvbCBuby10ZXh0LXRyYW5zZm9ybVwiIChjbGljayk9XCJleHBvcnREZXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV4cG9ydExhYmVsIH19IDwhLS0gQmluZCBsYWJlbCB0ZXh0IGhlcmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZXhwb3J0U2hvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZCBweS0yICBwb3NpdGlvbi1hYnNvbHV0ZSBwcm9kdWN0ZHJvcCB0b3AtMjAgZW5kLTAgbXQtMTAgei0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInB4LTUgY3Vyc29yLXBvaW50ZXIgcHktNFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2V0RXhwb3J0QXNQUFQoJ0V4cG9ydCBhcyBQREYnLCdwZGYnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0IGFzIFBERlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicHgtNSBjdXJzb3ItcG9pbnRlciBweS00XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZXRFeHBvcnRBc1BQVCgnRXhwb3J0IGFzIENTVicsJ2NzdicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgYXMgQ1NWXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjBcIiBjbGFzcz1cInB4LTUgY3Vyc29yLXBvaW50ZXIgcHktNFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2V0RXhwb3J0QXNQUFQoJ0V4cG9ydCBhcyBQUFQnLCdwcHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0IGFzIFBQVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwic2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD4wXCIgY2xhc3M9XCJweC01IGN1cnNvci1wb2ludGVyIHB5LTRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNldEV4cG9ydEFzUFBUKCdFeHBvcnQgYXMgWklQJywnemlwZmlsZXMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0IGFzIFpJUFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2aWV3bG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdub0RhdGFcIiBjbGFzcz1cInJvdyBtdC0yMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwICBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjIHctNDBcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS1zdWJcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIHRoaXMgY2hlY2tsaXN0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCIhdmlld2xvYWRpbmcgJiYgIXZpZXdub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdD09PSdjdXN0b20nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2hlY2tsaXN0IG9mIHZpZXdDaGVja2xpc3RzRGF0YT8uY2hlY2tsaXN0QW5zd2Vyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwiY2xpZW50RGF0YS5sb2dvJiZjbGllbnREYXRhLmxvZ28hPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXQtNSBtYi0zIHRleHQtY2VudGVyIGljb25zaXplXCIgc3JjPVwie3tjbGllbnREYXRhLmxvZ299fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwIG10LTVcIiAqbmdJZj1cIiFkYXRhc2hvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPlN0b3JlIE5hbWU6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj57e2NoZWNrbGlzdD8uc3RvcmVQcm9maWxlPy5zdG9yZU5hbWV9fSA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkNoZWNrbGlzdCBOYW1lOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmNoZWNrbGlzdE5hbWV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RhdGUgJiBDb3VudHJ5IDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5zdG9yZVByb2ZpbGU/LnN0YXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjaGVja2xpc3Q/LnN0b3JlUHJvZmlsZT8uQ291bnRyeX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EdXJhdGlvbiA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj4ge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmR1cmF0aW9ufX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPk5vLiBvZiBRdWVzdGlvbnMgOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/Lm5vb2ZRdWVzdGlvbnN9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RGF0ZSA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj4ge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmRhdGV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3VibWl0dGVkIEJ5IDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5zdWJtaXR0ZWRCeX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5UaW1lIDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPiB7e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8udGltZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMTBcIiA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbmxpc3Qgb2YgY2hlY2tsaXN0LnF1ZXN0aW9uQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicWEtYm9kcmVyIG15LTVcIiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcXVlc3Rpb25saXN0LnF1ZXN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicWEtaGVhZGluZ1wiPnt7cXVlc3Rpb24/LnFub319LiB7e3F1ZXN0aW9uPy5xbmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdkZXNjcmlwdGl2ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2xpbmVhcnNjYWxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxicj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTRcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0ndGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC00XCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtNFwiIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSd5ZXMvbm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC00XCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb24mJml0ZW0udmFsaWRhdGlvbkFuc3dlciE9JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiPlZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0Rlc2NyaXB0aXZlIEFuc3dlcidcIj5WYWxpZGF0aW9uIEFuc3dlciA6e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdtdWx0aXBsZWNob2ljZXNpbmdsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb24mJml0ZW0udmFsaWRhdGlvbkFuc3dlciE9JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiPlZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJyZWNhcC1pbWcgcC0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdpbWFnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJpdGVtLnJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS5yZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG10LTJcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgSW1hZ2UnfHxpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBWaWRlbydcIj5WYWxpZGF0aW9uIEFuc3dlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nRGVzY3JpcHRpdmUgQW5zd2VyJ1wiIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+VmFsaWRhdGlvbiBBbnN3ZXIgOiB7e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J211bHRpcGxlY2hvaWNlbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0zXCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG10LTJcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiPlZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInJlY2FwLWltZyBwLTNcIiAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBWaWRlbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdkZXNjcmlwdGl2ZUltYWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0ucmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLmFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG10LTNcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgSW1hZ2UnfHxpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBWaWRlbydcIj5WYWxpZGF0aW9uIEFuc3dlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCI+VmFsaWRhdGlvbiBBbnN3ZXIgOiB7e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj57e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSd2aWRlbydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+VXBsb2FkZWQgVmlkZW88L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLmFuc3dlcn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdtdWx0aXBsZUltYWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLmFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uJiZpdGVtLnZhbGlkYXRpb25BbnN3ZXIhPScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCI+VmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInJlY2FwLWltZyBwLTNcIiAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBWaWRlbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCI+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0Rlc2NyaXB0aXZlIEFuc3dlcidcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGVmYXVsdCBib3JkZXItZGVmYXVsdCBtZS0zXCIgKGNsaWNrKT1cImFkZFRhc2soJ3JlZG8nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYwMDRfMTE3MzQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTkuMTY5MyAzLjMzMzMxVjguMzMzMzJNMTkuMTY5MyA4LjMzMzMySDE0LjE2OTNNMTkuMTY5MyA4LjMzMzMyTDE1LjMwMjYgNC42OTk5OEMxNC40MDcgMy44MDM5MSAxMy4yOTkgMy4xNDkzMiAxMi4wODE5IDIuNzk3MjlDMTAuODY0OSAyLjQ0NTI3IDkuNTc4NTMgMi40MDcyNyA4LjM0Mjg0IDIuNjg2ODZDNy4xMDcxNiAyLjk2NjQ1IDUuOTYyNDQgMy41NTQ1MSA1LjAxNTQ5IDQuMzk2MTZDNC4wNjg1NSA1LjIzNzgyIDMuMzUwMjQgNi4zMDU2NCAyLjkyNzYgNy40OTk5OE0wLjgzNTkzOCAxNi42NjY2VjExLjY2NjZNMC44MzU5MzggMTEuNjY2Nkg1LjgzNTk0TTAuODM1OTM4IDExLjY2NjZMNC43MDI2IDE1LjNDNS41OTgyMyAxNi4xOTYxIDYuNzA2MjUgMTYuODUwNiA3LjkyMzI4IDE3LjIwMjdDOS4xNDAzMSAxNy41NTQ3IDEwLjQyNjcgMTcuNTkyNyAxMS42NjI0IDE3LjMxMzFDMTIuODk4IDE3LjAzMzUgMTQuMDQyOCAxNi40NDU1IDE0Ljk4OTcgMTUuNjAzOEMxNS45MzY3IDE0Ljc2MjEgMTYuNjU1IDEzLjY5NDMgMTcuMDc3NiAxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYwMDRfMTE3MzRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgZm9udC1kZWZ1bHQtdGFza1wiPlJlZG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSAgYm9yZGVyLXZhbDFcIiAoY2xpY2spPVwiYWRkVGFzaygnY3JlYXRldGFzaycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNjY5MyAxLjY2Njc1SDUuMDAyNkM0LjU2MDU4IDEuNjY2NzUgNC4xMzY2NSAxLjg0MjM0IDMuODI0MDkgMi4xNTQ5QzMuNTExNTMgMi40Njc0NiAzLjMzNTk0IDIuODkxMzkgMy4zMzU5NCAzLjMzMzQxVjE2LjY2NjdDMy4zMzU5NCAxNy4xMDg4IDMuNTExNTMgMTcuNTMyNyAzLjgyNDA5IDE3Ljg0NTNDNC4xMzY2NSAxOC4xNTc4IDQuNTYwNTggMTguMzMzNCA1LjAwMjYgMTguMzMzNEgxNS4wMDI2QzE1LjQ0NDYgMTguMzMzNCAxNS44Njg2IDE4LjE1NzggMTYuMTgxMSAxNy44NDUzQzE2LjQ5MzcgMTcuNTMyNyAxNi42NjkzIDE3LjEwODggMTYuNjY5MyAxNi42NjY3VjYuNjY2NzVNMTEuNjY5MyAxLjY2Njc1TDE2LjY2OTMgNi42NjY3NU0xMS42NjkzIDEuNjY2NzVWNi42NjY3NUgxNi42NjkzTTEwLjAwMjYgMTUuMDAwMVYxMC4wMDAxTTcuNTAyNiAxMi41MDAxSDEyLjUwMjZcIiBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMiBmb250LXRhc2tcIj5UYXNrPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IGJvcmRlci12YWwxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMiBmb250LXRhc2tcIj5WaWV3IFRhc2s8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xMCBteS01XCIgKm5nSWY9XCJzZWxlY3QgPT09J21vYmlsZXVzYWdlZGV0ZWN0aW9uJ3x8c2VsZWN0ID09PSd1bmlmb3JtZGV0ZWN0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm10LTUgbWItMyB0ZXh0LWNlbnRlciBpY29uc2l6ZVwiIHNyYz1cInt7Y2xpZW50RGF0YS5sb2dvfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Q2hlY2tsaXN0IE5hbWUgOiB7e3RoaXMuY2hlY2tsaXN0TmFtZX19PC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFhLWJvZHJlciBteS0zIG10LTVcIiAqbmdGb3I9XCJsZXQgaXRlbSAgb2YgbW9iaWxldXNhZ2VEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwicm93IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInFhLWhlYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5zdG9yZU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG15LTJcIiAqbmdGb3I9XCJsZXQgZGV0ZWN0aW9uIG9mIGl0ZW0uaW1hZ2VVcmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMCBoLTUwMHB4IHJvdW5kZWQtdG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFJY2hlY2tsaXN0Q0ROfX17e2RldGVjdGlvbn19XCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0zXCIgKm5nSWY9XCJzZWxlY3QgPT09J3VuaWZvcm1kZXRlY3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlmb3JtIERldGVjdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtM1wiICpuZ0lmPVwic2VsZWN0ID09PSdtb2JpbGV1c2FnZWRldGVjdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vYmlsZSBVc2FnZSBEZXRlY3Rpb248L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEwIG15LTVcIiAqbmdJZj1cInNlbGVjdCA9PT0nY3VzdG9tZXJ1bmF0dGVuZGVkJ3x8c2VsZWN0ID09PSdzdGFmZmxlZnRpbnRoZW1pZGRsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwiY2xpZW50RGF0YS5sb2dvJiZjbGllbnREYXRhLmxvZ28hPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1jZW50ZXIgaWNvbnNpemVcIiBzcmM9XCJ7e2NsaWVudERhdGEubG9nb319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkNoZWNrbGlzdCBOYW1lIDoge3t0aGlzLmNoZWNrbGlzdE5hbWV9fTwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxYS1ib2RyZXIgbXktMyBtdC01XCIgKm5nRm9yPVwibGV0IGl0ZW0gIG9mIGN1c3RvbWVydW5hdHRlbmRlZERhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJyb3cgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicWEtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBteS0yXCIgKm5nRm9yPVwibGV0IGRldGVjdGlvbiBvZiBpdGVtLmltYWdlc0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgbWluLWgtNDVweCBweC0wIG15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIHN0b3JlLXRpdGxlXCI+e3tpdGVtLnN0b3JlTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIiAqbmdJZj1cImRldGVjdGlvbj8uY3VzdG9tZXJfaWRcIj5DdXN0IElEIDoge3tkZXRlY3Rpb24uY3VzdG9tZXJfaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTd2l0Y2ggdG9nZ2xlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIiAqbmdJZj1cImRldGVjdGlvbj8uY3VzdG9tZXJfZW50cnlfdGltZVwiPkVudHJ5IHRpbWUgOiB7e2RldGVjdGlvbi5jdXN0b21lcl9lbnRyeV90aW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIiAqbmdJZj1cImRldGVjdGlvbj8uY3VzdG9tZXJfZXhpdF90aW1lXCI+RXhpdCB0aW1lIDoge3tkZXRlY3Rpb24uY3VzdG9tZXJfZXhpdF90aW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInctMTAwIGgtNDUwcHggcm91bmRlZC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QUljaGVja2xpc3RDRE59fXt7ZGV0ZWN0aW9uLnZpZGVvX3BhdGh9fVwiIGFsdD1cIlwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ID09PSdzdG9yZW9wZW5hbmRjbG9zZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY2FyZFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0b3JlT3BlbmNsb3NlVmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwY2FyZCBteC04IG15LThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXBoZWFkZXIgbXMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnN0b3JlTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG0tMCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZyBtdC00IHB4LTMgcG9zaXRpb24tcmVsYXRpdmVcIiAqbmdJZj1cIiFpdGVtLm9wZW5UaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIzXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIzIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwiR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVmVjdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNSA2LjMyMjI3SDYuNTFNMTYuMjUgOS4zMjIyN0gyMS41TDE4IDE2LjMyMjNMMTQuOTEgMTIuMDAyM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JfMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBydnR4dCBtdC01IHRleHRjbHJcIj5QcmV2aWV3IG5vdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmcmVzaHR4dCBtdC0yIHRleHRjbHJcIj5UaGUgc2VsZWN0ZWQgY2FtZXJhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiaXRlbS5vcGVuVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXgtMSBpbWctb3BjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheE9wZW5jbG9zZWNoZWNrbGlzdENETn19e3tpdGVtLnN0b3JlSWR9fS97e2l0ZW0uZGF0ZVN0cmluZ319L29wZXJhdGlvbl9zbmFwcy9vcGVuLmpwZWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiQ2hlY2tsaXN0IFZpZGVvIFBsYXllclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgbXgtMSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXB0ZXh0XCI+T3BlbmluZyBTbmFwPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwdGltZVwiPnt7aXRlbS5vcGVuVGltZX19IC0ge3tpdGVtLmRhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IHNuYXBiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0/Lm9wZW5UaW1lRmxhZ1wiPk9uIFRpbWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXIgc25hcGJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5vcGVuVGltZUZsYWdcIj5MYXRlIE9wZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nIG10LTQgcHgtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiICpuZ0lmPVwiIWl0ZW0uY2xvc2VUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIzXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIzIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwiR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVmVjdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNSA2LjMyMjI3SDYuNTFNMTYuMjUgOS4zMjIyN0gyMS41TDE4IDE2LjMyMjNMMTQuOTEgMTIuMDAyM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JfMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBydnR4dCBtdC01IHRleHRjbHJcIj5QcmV2aWV3IG5vdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmcmVzaHR4dCBtdC0yIHRleHRjbHJcIj5UaGUgc2VsZWN0ZWQgY2FtZXJhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiaXRlbS5jbG9zZVRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm14LTEgaW1nLW9wY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhPcGVuY2xvc2VjaGVja2xpc3RDRE59fXt7aXRlbS5zdG9yZUlkfX0ve3tpdGVtLmRhdGVTdHJpbmd9fS9vcGVyYXRpb25fc25hcHMvY2xvc2UuanBlZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJDaGVja2xpc3QgVmlkZW8gUGxheWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBteC0xIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwdGV4dFwiPkNsb3NpbmcgU25hcDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hcHRpbWVcIj57e2l0ZW0uY2xvc2VUaW1lfX0gLSB7e2l0ZW0uZGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBzbmFwYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpdGVtPy5jbG9zZVRpbWVGbGFnXCI+T24gVGltZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlciBzbmFwYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LmNsb3NlVGltZUZsYWdcIj5FYXJseSBDbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uICpuZ0lmPVwiIXZpZXdsb2FkaW5nICYmICF2aWV3bm9EYXRhXCIgW2l0ZW1zUGVyUGFnZV09XCJsaW1pdFwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIiBbdG90YWxJdGVtc109XCJ0b3RhbENvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPSdwYWdpbmF0aW9uU2l6ZXMnIFtwYWdlU2l6ZV09XCJsaW1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2V2aWV3KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvdyBweC0xMCBteS01XCIgKm5nSWY9XCJzZWxlY3QgPT09J2V5ZXRlc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFhLWJvZHJlciBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInFhLWhlYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMS1NUMDAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBhdXRvcGxheSBjbGFzcz1cInJlY2FwLWltZyBwLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly90YW5nb2V5ZS5haS93cC1jb250ZW50L3VwbG9hZHMvdmlkZW9zL3RhbmdvLW1haW4tdmlkZW8ubXA0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIG15LTRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbi12MiAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1wYWdpbmF0aW9uLXYyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ubGVmdCB0ZXh0LWNlbnRlciBwdC0xIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXQtMiBtcy0yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS43MjcxNCAxMi42MzY1TDEzLjM2MzUgOS4wMDAxM0w5LjcyNzE0IDUuMzYzNzdNNC42MzYyMyAxMi42MzY1TDguMjcyNTkgOS4wMDAxM0w0LjYzNjIzIDUuMzYzNzdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuIl19
|
|
1560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTlGLE9BQU8sS0FBZ0IsTUFBTSxPQUFPLENBQUM7QUFDckMsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFLbkMsT0FBTyxFQUFFLE9BQU8sRUFBOEMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXRGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVZsRSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBa0JsQixNQUFNLE9BQU8sZ0JBQWdCO0lBc0VQO0lBQXlCO0lBQWdDO0lBQWtDO0lBQStCO0lBQ3BJO0lBQStCO0lBQXdCO0lBQW9DO0lBQTRCO0lBdEVqSSxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2IsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLFlBQVksR0FBRyxDQUFDLENBQWMsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlDLENB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LFNBQVM7K0JBQ0UsYUFBYTtvVUF1d0N2QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCBkYXlqcywgeyBEYXlqcyB9IGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuaW1wb3J0IHsgVGltZVBlcmlvZCB9IGZyb20gJ25neC1kYXRlcmFuZ2VwaWNrZXItbWF0ZXJpYWwvZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRXhwb3J0R2FsbGVyeUNvbXBvbmVudCB9IGZyb20gJy4uL2V4cG9ydC1nYWxsZXJ5L2V4cG9ydC1nYWxsZXJ5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBZGRUYXNrQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkLXRhc2svYWRkLXRhc2suY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFza0xvZ3NDb21wb25lbnQgfSBmcm9tICcuLi90YXNrLWxvZ3MvdGFzay1sb2dzLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1nYWxsZXJ5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2dhbGxlcnkuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYWxsZXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGRheWpzID0gZGF5anNcclxuICBzZWxlY3RlZERhdGVSYW5nZTogYW55ID0ge307XHJcbiAgaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IG0gPiB0aGlzLmRheWpzKCk7XHJcbiAgICByZXR1cm4gaXNWYWxpZERhdGUgPyAnaW52YWxpZC1kYXRlJyA6IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIGdhbGxlcnlGb3JtOiBGb3JtR3JvdXBcclxuICB0eXBlOiBhbnkgPSBbeyB2YWx1ZTogJ2NoZWNrbGlzdCcsIGxhYmVsOiAnQ2hlY2tsaXN0JyB9LFxyXG4gICAge3ZhbHVlOid0YXNrJywgbGFiZWw6J1Rhc2snfVxyXG4gIF1cclxuICBjaGVja2xpc3RzOiBhbnkgPSBbXVxyXG4gIGFuc3dlclR5cGUgPSBbXHJcbiAgICB7IGxhYmVsOiAnQWxsIEFuc3dlciBUeXBlJywgdmFsdWU6ICdhbGwnIH0sXHJcbiAgICB7IGxhYmVsOiAnRGVzY3JpcHRpdmUgQW5zd2VyJywgdmFsdWU6ICdkZXNjcmlwdGl2ZScgfSxcclxuICAgIHsgbGFiZWw6ICdBL0IgUXVlc3Rpb24nLCB2YWx1ZTogJ3llcy9ubycgfSxcclxuICAgIHsgbGFiZWw6ICdNdWx0aXBsZSBDaG9pY2UgUXVlc3Rpb24gLSBTaW5nbGUgQW5zd2VyJywgdmFsdWU6ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfSxcclxuICAgIHsgbGFiZWw6ICdNdWx0aXBsZSBDaG9pY2UgUXVlc3Rpb24gLSBNdWx0aXBsZSBBbnN3ZXInLCB2YWx1ZTogJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZSBhcyBhbnN3ZXInLCB2YWx1ZTogJ2ltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgSW1hZ2Ugd2l0aCBEZXNjcmlwdGlvbicsIHZhbHVlOiAnZGVzY3JpcHRpdmVJbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIHZpZGVvIGFzIGFuc3dlcicsIHZhbHVlOiAndmlkZW8nIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBNdWx0aXBsZSBJbWFnZScsIHZhbHVlOiAnbXVsdGlwbGVJbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdEYXRlIEFzIEFuc3dlcicsIHZhbHVlOiAnZGF0ZScgfSxcclxuICAgIHsgbGFiZWw6ICdUaW1lIEFzIEFuc3dlcicsIHZhbHVlOiAndGltZScgfSxcclxuICAgIHsgbGFiZWw6ICdMaW5lYXIgU2NhbGUnLCB2YWx1ZTogJ2xpbmVhcnNjYWxlJyB9XHJcblxyXG4gIF1cclxuICBoZWFkZXJGaWx0ZXJzOiBhbnkgPSB7fTtcclxuICBzdG9yZUxpc3Q6IGFueVtdID0gW11cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBjaGVja2xpc3REYXRhOiBhbnkgPSB7fVxyXG4gIHN0b3JlczogYW55ID0gW107XHJcbiAgZ3JvdXBzOiBhbnkgPSBbXTtcclxuICBpdGVtczogYW55O1xyXG4gIHBhZ2luYXRlZEl0ZW1zOiBhbnk7XHJcbiAgaXRlbXNQZXJQYWdlID0gMTA7XHJcbiAgY3VycmVudFBhZ2UgPSAxO1xyXG4gIHRvdGFsSXRlbXMgPSAwO1xyXG4gIHZpZXdDaGVja2xpc3RzRGF0YTogYW55O1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZpZXdsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICB2aWV3bm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb2Zmc2V0OiBhbnkgPSAxO1xyXG4gIGxpbWl0OiBhbnkgPSAxO1xyXG4gIHBhZ2luYXRpb25TaXplcyA9IFsxXVxyXG4gIHRvdGFsQ291bnQ6IGFueTtcclxuICB2aWV3Q2hlY2tsaXN0c29wdGlvbnM6IGFueSA9IHt9O1xyXG4gIG1vYmlsZXVzYWdlRGF0YTogYW55O1xyXG4gIG1vYmlsZXVzYWdlRGF0YUxpc3Q6IGFueSA9IFtdXHJcbiAgc2VsZWN0QWxsOiBhbnlcclxuICBzdG9yZU9wZW5jbG9zZVZpZXc6IGFueTtcclxuICBxdWVyeVBhcmFtczogYW55O1xyXG4gIGN1c3RvbWVydW5hdHRlbmRlZERhdGE6IGFueTtcclxuICBzZWN0aW9uTmFtZTogYW55ID0gJ2FsbCc7XHJcbiAgcXVlc3Rpb25OYW1lOiBhbnkgPSAnYWxsJztcclxuICBjbGllbnREYXRhOiBhbnk7XHJcbiAgY2hlY2tsaXN0TmFtZTogYW55ID0gJyc7XHJcbiAgZ3JvdXBMaXN0OiBhbnkgPSBbXTtcclxuICBlbnZpcm9ubWVudDogYW55O1xyXG4gIHNob3dmbGFnOiBib29sZWFuID0gdHJ1ZTtcclxuICBzZWxlY3RlZFNlY3Rpb246IGFueSA9IFtdXHJcbiAgdGVtcHNlbGVjdGVkU2VjdGlvbjogYW55ID0gW11cclxuICBzaG93bXVsdGk6Ym9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd3NpbmdsZTpib29sZWFuID0gZmFsc2VcclxuICBzaG93ZmlsdGVyOmJvb2xlYW49ZmFsc2VcclxuICBwcmV2aWV3VHlwZTogYW55ID0gJ2ltYWdlJztcclxuICBjaGVja0xpc3REZXNjcmlwdGlvbjogYW55ID0gJydcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIHRyYXhTZXJ2aWNlOiBUcmF4U2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiwgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJvdXRlPy5xdWVyeVBhcmFtc1xyXG4gICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlID0ge1xyXG4gICAgICAgICAgICBzdGFydERhdGU6IHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSA/IHRoaXMuZGF5anModGhpcy5xdWVyeVBhcmFtcy5DaGVja2xpc3REYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKSA6IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC1NTS1ZWVlZJyksXHJcbiAgICAgICAgICAgIGVuZERhdGU6IHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSA/IHRoaXMuZGF5anModGhpcy5xdWVyeVBhcmFtcy5DaGVja2xpc3REYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKSA6IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgxLCAnZGF5JykuZm9ybWF0KCdERC1NTS1ZWVlZJylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZ2V0QWxsU3RvcmVzKClcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjExMTEtLS0tLT5cIix0aGlzLnF1ZXJ5UGFyYW1zKVxyXG5cclxuICAgXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudlxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKVxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudERldGFpbHMoKVxyXG4gICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKVxyXG4gICAgICAgICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXItaW5mb1wiKSB8fCBcIlwiKVxyXG4gICAgICAgICAgaWYgKHVzZXJpbmZvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQgPSB1c2VyaW5mbz8uY2xpZW50SWRcclxuICAgICAgICAgICAgdGhpcy5jbGllbnREZXRhaWxzKClcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKVxyXG4gICAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJHYWxsZXJ5XCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcIlwiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7IHRpdGxlOiBcIlRhbmdvIFRyYXhcIiwgcGF0aDogXCIvbWFuYWdlL3RyYXgvZGFzaGJvYXJkXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcblxyXG4gIH1cclxuICBnZXRBbGxHcm91cHMoKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNsdXN0ZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGdyb3VwOiBbXSwgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBMaXN0ID0gcmVzLmRhdGEuZ3JvdXBEYXRhXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBMaXN0ID0gW11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBjbGllbnREZXRhaWxzKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjbGllbnQoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnREYXRhID0gcmVzLmRhdGEucmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVkb0NoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwidmlld1JlZG9cIik/LnNldFZhbHVlKHRydWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldChcInZpZXdSZWRvXCIpPy5zZXRWYWx1ZShmYWxzZSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBmbGFnQ2hhbmdlZChldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoXCJ2aWV3RmxhZ1wiKT8uc2V0VmFsdWUodHJ1ZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwidmlld0ZsYWdcIik/LnNldFZhbHVlKGZhbHNlKVxyXG4gICAgfVxyXG4gIH1cclxuICBvbmNoZWNrbGlzdHJlc2V0KCkge1xyXG4gICAgdGhpcy5zaG93bXVsdGkgPSB0cnVlXHJcbiAgICBpZih0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0Jyl7XHJcbiAgICB0aGlzLmdldENoZWNrbGlzdFFBKGZhbHNlKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmdldFRhc2tRQSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRWYWxpZGF0aW9uKCkge1xyXG4gICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGRhdGUgaXMgYmVmb3JlIHllc3RlcmRheVxyXG4gICAgICByZXR1cm4gbS5pc0FmdGVyKHRoaXMuZGF5anMoKSwgJ2RheScpID8gJ2ludmFsaWQtZGF0ZScgOiBmYWxzZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCgyLCBcImRheXNcIikpO1xyXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZSA/IFwiaW52YWxpZC1kYXRlXCIgOiBmYWxzZTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyhmYWxzZSlcclxuICB9XHJcbiAgc2VsZWN0QWxsU3RvcmUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgICAgbGV0IHN0b3JlID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZpbHRlcigoZWw6IGFueSkgPT4gZWwuY2hlY2tlZClcclxuICAgICAgY29uc3QgY2hhbmdlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdG9yZSkpXHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUoY2hhbmdlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZVxyXG4gICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgob2JqOiBhbnkpID0+IChvYmouY2hlY2tlZCA9IHRoaXMuc2VsZWN0QWxsKSk7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUoW10pXHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcbiAgdXBkYXRlQ2hlY2soZXZlbnQ6IGFueSwgc3RvcmVkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlLnN0b3JlSWQgPT09IHN0b3JlZGF0YS5zdG9yZUlkKSB7XHJcbiAgICAgICAgZWxlLmNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgc3RvcmUgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuY2hlY2tlZCk7XHJcbiAgICBjb25zdCBjaGFuZ2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN0b3JlKSlcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUoY2hhbmdlKVxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmV2ZXJ5KChvYmo6IGFueSkgPT4gb2JqLmNoZWNrZWQpO1xyXG5cclxuICB9XHJcbiAgY3JlYXRlRm9ybSgpIHtcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgZnJvbURhdGU6IFtkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSwgXCJERC1NTS1ZWVlZXCIpLmZvcm1hdChcIllZWVktTU0tRERcIildLFxyXG4gICAgICB0b0RhdGU6IFtkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoJ1lZWVktTU0tREQnKV0sXHJcbiAgICAgIHR5cGU6ICdjaGVja2xpc3QnLFxyXG4gICAgICBjaGVja2xpc3ROYW1lOiAnJyxcclxuICAgICAgc3RvcmVMaXN0OiBbdGhpcy5zdG9yZXNdLFxyXG4gICAgICBhbnN3ZXJUeXBlOiBbJ2FsbCddLFxyXG4gICAgICB2aWV3RmxhZzogW2ZhbHNlXSxcclxuICAgICAgdmlld1JlZG86IFtmYWxzZV0sXHJcbiAgICAgIGNoZWNrTGlzdFR5cGU6IFwiY3VzdG9tXCIsXHJcbiAgICAgIGNoZWNrTGlzdElkOiBcIlwiLFxyXG4gICAgICBncm91cExpc3Q6IFt0aGlzLmdyb3Vwc10sXHJcbiAgICAgIGNoZWNrTGlzdERlc2NyaXB0aW9uOiBcIlwiXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIGRhdGVjaGFuZ2UoZXZlbnQ6IFRpbWVQZXJpb2QpIHtcclxuICAgIGlmICghZXZlbnQuZW5kRGF0ZSB8fCAhZXZlbnQuc3RhcnREYXRlKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKTtcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5zZXRWYWx1ZShldmVudC5zdGFydERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndG9EYXRlJyk/LnNldFZhbHVlKGV2ZW50LmVuZERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykpXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KVxyXG4gICAgICAgICAgLy8gdGhpcy5nZXRBbGxDaGVja0xpc3RzKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldEFsbFN0b3JlcygpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICBpZiAodGhpcy5xdWVyeVBhcmFtcy5zdG9yZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgbGV0IGdldHN0b3JlID0gdGhpcy5zdG9yZUxpc3QuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnN0b3JlSWQgPT09IHRoaXMucXVlcnlQYXJhbXMuc3RvcmVJZClcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSBnZXRzdG9yZVxyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgICBpZih0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGU9PSd0YXNrJyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFRhc2tzKHRydWUpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWUsXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlLFxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxDaGVja0xpc3RzKHR5cGU6IGFueSkge1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuc3RvcmVzPy5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmcm9tRGF0ZScpPy52YWx1ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmdhbGxlcnlGb3JtLmdldCgndG9EYXRlJyk/LnZhbHVlLFxyXG4gICAgICBzdG9yZUlkOiBzdG9yZXMsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudCxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IFwiY2hlY2tMaXN0TmFtZVwiLFxyXG4gICAgICBzb3J0Qnk6IDFcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Q2hlY2tsaXN0cyhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RzID0gWy4uLnJlcy5kYXRhLmNoZWNrbGlzdERhdGEsIC4uLltcclxuICAgICAgICAgICAgeyBzb3VyY2VDaGVja0xpc3RfaWQ6ICdzdG9yZW9wZW5hbmRjbG9zZScsIGNoZWNrTGlzdFR5cGU6IFwiQUlcIiwgY2hlY2tMaXN0TmFtZTogJ1N0b3JlIE9wZW4gJiBjbG9zZScsIFwiY2hlY2tMaXN0RGVzY3JpcHRpb25cIjogXCJNb25pdG9ycyBwdW5jdHVhbGl0eSBvZiBzdG9yZSBvcGVyYXRpb25zXCIgfSxcclxuICAgICAgICAgICAgeyBzb3VyY2VDaGVja0xpc3RfaWQ6ICdtb2JpbGV1c2FnZWRldGVjdGlvbicsIGNoZWNrTGlzdFR5cGU6IFwiQUlcIiwgY2hlY2tMaXN0TmFtZTogJ01vYmlsZSB1c2FnZSBkZXRlY3Rpb24nLCBcImNoZWNrTGlzdERlc2NyaXB0aW9uXCI6IFwiRGV0ZWN0cyBzdGFmZiB1c2luZyBtb2JpbGUgZGV2aWNlcyBkdXJpbmcgd29yayBob3Vyc1wiIH0sXHJcbiAgICAgICAgICAgIHsgc291cmNlQ2hlY2tMaXN0X2lkOiAndW5pZm9ybWRldGVjdGlvbicsIGNoZWNrTGlzdFR5cGU6IFwiQUlcIiwgY2hlY2tMaXN0TmFtZTogJ1VuaWZvcm0gZGV0ZWN0aW9uJywgXCJjaGVja0xpc3REZXNjcmlwdGlvblwiOiBcIk1vbml0b3JzIFZlcmlmaWVzIHN0YWZmIGFkaGVyZW5jZSB0byBkcmVzcyBjb2RlLlwiIH0sXHJcbiAgICAgICAgICAgIHsgc291cmNlQ2hlY2tMaXN0X2lkOiAnY3VzdG9tZXJ1bmF0dGVuZGVkJywgY2hlY2tMaXN0VHlwZTogXCJBSVwiLCBjaGVja0xpc3ROYW1lOiAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcsIFwiY2hlY2tMaXN0RGVzY3JpcHRpb25cIjogXCJNb25pdG9ycyBJZGVudGlmaWVzIGluc3RhbmNlcyBvZiB1bmF0dGVuZGVkIGN1c3RvbWVycy5cIiB9LFxyXG4gICAgICAgICAgICB7IHNvdXJjZUNoZWNrTGlzdF9pZDogJ3N0YWZmbGVmdGludGhlbWlkZGxlJywgY2hlY2tMaXN0VHlwZTogXCJBSVwiLCBjaGVja0xpc3ROYW1lOiAnU3RhZmYgbGVmdCBpbiB0aGUgbWlkZGxlJywgXCJjaGVja0xpc3REZXNjcmlwdGlvblwiOiBcIkRldGVjdHMgc3RhZmYgbGVhdmluZyBmcm9tIHRoZSBzdG9yZSBkdXJpbmcgdGhlIG9wZXJhdGlvbiBob3VyJ3NcIiB9XV07XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0SWQgJiYgdGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdElkJyk/LnNldFZhbHVlKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0SWQpXHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdFR5cGUnKT8uc2V0VmFsdWUodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKVxyXG5cclxuICAgICAgICAgICAgICBsZXQgZ2V0Y2hlY2tsaXN0ID0gdGhpcy5jaGVja2xpc3RzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09IHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0SWQpXHJcbiAgICAgICAgICAgICAgaWYgKGdldGNoZWNrbGlzdCAmJiBnZXRjaGVja2xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrbGlzdE5hbWUnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3ROYW1lKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdE5hbWUgPSBnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdE5hbWVcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT09ICdjdXN0b21lcnVuYXR0ZW5kZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICdjdXN0b21lcnVuYXR0ZW5kZWQnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlID09PSAnc3RvcmVvcGVuYW5kY2xvc2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICdzdG9yZW9wZW5hbmRjbG9zZSdcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2VsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlID09PSAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICdtb2JpbGV1c2FnZWRldGVjdGlvbic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSA9PT0gJ3VuaWZvcm1kZXRlY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICd1bmlmb3JtZGV0ZWN0aW9uJztcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhbGlzdChmYWxzZSlcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSA9PT0gJ3N0YWZmbGVmdGludGhlbWlkZGxlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSAnc3RhZmZsZWZ0aW50aGVtaWRkbGUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlID09PSAnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVF1ZXJ5UGFyYW1zKClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUgJiYgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0VHlwZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUgJiYgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0Y2hlY2tsaXN0ID0gdGhpcy5jaGVja2xpc3RzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5jaGVja0xpc3ROYW1lID09PSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RJZCcpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5jaGVja2xpc3RzWzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgIGxldCBnZXRjaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdHMuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLmNoZWNrTGlzdE5hbWUgPT09IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGdldGNoZWNrbGlzdCAmJiBnZXRjaGVja2xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPSBnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdElkJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0RGVzY3JpcHRpb24nKT8uc2V0VmFsdWUodGhpcy5jaGVja2xpc3RzWzBdPy5jaGVja0xpc3REZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0TmFtZSA9IHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgbGV0IGdldGNoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0cy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuY2hlY2tMaXN0TmFtZSA9PT0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lKVxyXG4gICAgICAgICAgICAgICAgaWYgKGdldGNoZWNrbGlzdCAmJiBnZXRjaGVja2xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdERlc2NyaXB0aW9uID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3REZXNjcmlwdGlvblxyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdElkJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdFFBKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RzID0gW107XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVtb3ZlUXVlcnlQYXJhbXMoKSB7XHJcbiAgICBjb25zdCB1cmxXaXRob3V0UGFyYW1zID0gdGhpcy5sb2NhdGlvbi5wYXRoKCkuc3BsaXQoJz8nKVswXTtcclxuICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHVybFdpdGhvdXRQYXJhbXMpO1xyXG4gIH1cclxuICBvbmdyb3VwU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdncm91cExpc3QnKT8uc2V0VmFsdWUoZXZlbnQpXHJcbiAgICB0aGlzLmdyb3VwcyA9IGV2ZW50Lm1hcCgoZWw6IGFueSkgPT4gZWwuZ3JvdXBOYW1lKVxyXG4gICAgLy8gdGhpcy5nZXRBbGxTdG9yZXMoKVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cclxuICB9XHJcbiAgb25TdG9yZVNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaXNTdG9yZVNlbGVjdGVkID0gZXZlbnQuc29tZSgoc2VsZWN0ZWRTdG9yZTogYW55KSA9PiBzZWxlY3RlZFN0b3JlLnN0b3JlSWQgPT09IHN0b3JlLnN0b3JlSWQpO1xyXG4gICAgICBpZiAoaXNTdG9yZVNlbGVjdGVkKSB7XHJcbiAgICAgICAgc3RvcmUuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3RvcmUuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIHN0b3JlTGlzdGRyb3Bkb3duVGFzaygpe1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGxldCBzdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0SWQsXHJcbiAgICAgICAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgICAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICAgICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcgLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8gLy9bdHJ1ZSwgZmFsc2VdXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRRdWVzdGlvbnMob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEZXRhaWxzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldHRhc2tRQShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGFza1FBKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc3RvcmVMaXN0ZHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgbGV0IHN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGEubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgICAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImN1c3RvbVwiLCBcIkFJXCJdXHJcbiAgICAgICAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgICAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgICAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZyAsLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbyAvL1t0cnVlLCBmYWxzZV1cclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNoZWNrbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEZXRhaWxzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RldGFpbHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdFFBKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBzZWxlY3QgPSAnY3VzdG9tJ1xyXG4gIG9uU3VibWl0KCkge1xyXG5cclxuICAgIHRoaXMub2Zmc2V0ID0gMVxyXG4gICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lXHJcbiAgICB0aGlzLmNoZWNrTGlzdERlc2NyaXB0aW9uID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3REZXNjcmlwdGlvblxyXG5cclxuICAgIC8vIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsZ3JvdXBzOnRoaXMuZ3JvdXBzIH0pLnN1YnNjcmliZSh7XHJcbiAgICAvLyAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnJlc3VsdDtcclxuICAgIC8vICAgICAgICAgdGhpcy5zdG9yZXMgPSB0aGlzLnN0b3JlTGlzdFxyXG4gICAgLy8gdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdG9yZSBPcGVuICYgY2xvc2UnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NlbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnTW9iaWxlIHVzYWdlIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nO1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdVbmlmb3JtIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAndW5pZm9ybWRldGVjdGlvbic7XHJcbiAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnQ3VzdG9tZXIgVW5hdHRlbmRlZCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnY3VzdG9tZXJ1bmF0dGVuZGVkJztcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdGFmZiBsZWZ0IGluIHRoZSBtaWRkbGUnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0YWZmbGVmdGludGhlbWlkZGxlJztcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnID8gXCJjdXN0b21cIiA6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZTtcclxuICAgICAgaWYodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCcpe1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0ZHJvcGRvd24oKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3Rkcm9wZG93blRhc2soKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3c6IG51bWJlciA9IDA7XHJcbiAgYWNjb3JkaWFuKGluZGV4OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNob3cgPT0gaW5kZXgpIHtcclxuICAgICAgdGhpcy5zaG93ID0gLTE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3cgPSBpbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzdG9yZU9wZW5jbG9zZWxpc3QodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwic2VhcmNoXCI6IFwiXCIsXHJcbiAgICAgIFwic29ydFwiOiBcIlwiLFxyXG4gICAgICBcInNvcnRCeVwiOiAxXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLnN0b3JlT3BlbmNsb3NlbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0ID0gcmVzLmRhdGEuc3RvcmVvcGVuYW5kY2xvc2VEYXRhXHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IFtdXHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgc3RvcmVJZDogZWxlbWVudC5zdG9yZUlkLFxyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gdGhpcy5zdG9yZXNcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZXMpXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlT3BlbmNsb3NldmlldygpXHJcblxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgc3RvcmVPcGVuY2xvc2V2aWV3KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTBcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJzZWFyY2hcIjogXCJcIixcclxuICAgICAgXCJzb3J0XCI6IFwiXCIsXHJcbiAgICAgIFwic29ydEJ5XCI6IDFcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTBdO1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5zdG9yZU9wZW5jbG9zZWxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2VWaWV3ID0gcmVzLmRhdGEuc3RvcmVvcGVuYW5kY2xvc2VEYXRhXHJcblxyXG4gICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZVZpZXcuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZGF0ZVN0cmluZyA9IGRheWpzKGVsZW1lbnQuZGF0ZVN0cmluZykuZm9ybWF0KCdERC1NTS1ZWVlZJylcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxDb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNoZWNrbGlzdE5hbWVjaGFuZ2UoZXZlbnQ6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tMaXN0VHlwZSA9PT0gXCJBSVwiKSB7XHJcbiAgICAgIHRoaXMuc2hvd2ZsYWcgPSBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdFR5cGUnKT8uc2V0VmFsdWUoJ2N1c3RvbScpXHJcbiAgICAgIHRoaXMuc2hvd2ZsYWcgPSB0cnVlXHJcbiAgICB9XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0SWQnKT8uc2V0VmFsdWUoZXZlbnQ/LnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGV2ZW50Py5jaGVja0xpc3ROYW1lKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKGV2ZW50Py5jaGVja0xpc3REZXNjcmlwdGlvbilcclxuICAgIC8vIHRoaXMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPSBldmVudD8uY2hlY2tMaXN0RGVzY3JpcHRpb25cclxuICAgIC8vIHRoaXMuY2hlY2tsaXN0TmFtZSA9ICBldmVudD8uY2hlY2tMaXN0TmFtZVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGF0YVxyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlTGlzdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdCh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImRhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmdldGN1c3RvbWVydW5hdHRlbmRlZHZpZXcoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNlbGVjdGVkRXhwb3J0ID0gZmFsc2VcclxuICBzZWxlY3RlZFF1ZXN0aW9uKGV2ZW50OiBhbnksIHNlY3Rpb246IGFueSwgUXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIGlmICh0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID09IDApIHtcclxuICAgICAgICBsZXQgcXVlc3Rpb25zOiBhbnkgPSBbXVxyXG4gICAgICAgIGxldCBhbnN3ZXI6IGFueSA9IFtdXHJcbiAgICAgICAgYW5zd2VyLnB1c2goUXVlc3Rpb24uYW5zd2VyVHlwZSlcclxuICAgICAgICBxdWVzdGlvbnMucHVzaChRdWVzdGlvbi5xbmFtZS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpKVxyXG4gICAgICAgIGxldCByZXNwb25zZSA9IHtcclxuICAgICAgICAgIHNlY3Rpb25OYW1lOiBzZWN0aW9uLnNlY3Rpb25OYW1lLFxyXG4gICAgICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnMsXHJcbiAgICAgICAgICBhbnN3ZXJUeXBlOmFuc3dlclxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24ucHVzaChyZXNwb25zZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgc2VjdGlvbkV4aXN0cyA9IHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbi5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YS5zZWN0aW9uTmFtZSA9PT0gc2VjdGlvbi5zZWN0aW9uTmFtZSlcclxuICAgICAgICBpZiAoc2VjdGlvbkV4aXN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24ubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuc2VjdGlvbk5hbWUgPT09IHNlY3Rpb24uc2VjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICBkYXRhLnF1ZXN0aW9ucy5wdXNoKFF1ZXN0aW9uLnFuYW1lLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBxdWVzdGlvbnM6IGFueSA9IFtdXHJcbiAgICAgICAgICBsZXQgYW5zd2VyOiBhbnkgPSBbXVxyXG5cclxuXHJcbiAgICAgICAgICBhbnN3ZXIucHVzaChRdWVzdGlvbi5hbnN3ZXJUeXBlKVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChRdWVzdGlvbi5xbmFtZS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpKVxyXG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBzZWN0aW9uTmFtZTogc2VjdGlvbi5zZWN0aW9uTmFtZSxcclxuICAgICAgICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnMsXHJcbiAgICAgICAgICAgIGFuc3dlclR5cGU6YW5zd2VyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24ucHVzaChyZXNwb25zZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YS5tYXAoKHNlYzogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlYy5zZWN0aW9uTmFtZSA9PSBzZWN0aW9uLnNlY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICBzZWMucXVlc3Rpb25zLm1hcCgocXVlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChxdWVzLnFuYW1lID09PSBRdWVzdGlvbi5xbmFtZS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpKSB7XHJcbiAgICAgICAgICAgICAgcXVlcy5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24ubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5zZWN0aW9uTmFtZSA9PSBzZWN0aW9uLnNlY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICBkYXRhLnF1ZXN0aW9ucyA9IGRhdGEucXVlc3Rpb25zLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZSAhPSBRdWVzdGlvbi5xbmFtZS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpKVxyXG4gICAgICAgICAgZGF0YS5hbnN3ZXJUeXBlID0gZGF0YS5hbnN3ZXJUeXBlLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZSAhPSBRdWVzdGlvbi5hbnN3ZXJUeXBlKVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbiA9IHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbi5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUucXVlc3Rpb25zLmxlbmd0aCA+IDApXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0ID0gdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDA7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24pXHJcbiAgfVxyXG4gIGdldG1vYmlsZVVzYWdlRGF0YWxpc3QodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogZmFsc2UsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldE1vYlVzYWdlbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0ID0gcmVzLmRhdGEuZGF0YTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gW11cclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YXZpZXcoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIG9ucmVzZXQoKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KVxyXG4gICAgICAgICAgdGhpcy5vZmZzZXQgPSAxXHJcbiAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnU3RvcmUgT3BlbiAmIGNsb3NlJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICdzdG9yZW9wZW5hbmRjbG9zZSdcclxuICAgICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ01vYmlsZSB1c2FnZSBkZXRlY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJztcclxuICAgICAgICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGFsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnVW5pZm9ybSBkZXRlY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3VuaWZvcm1kZXRlY3Rpb24nO1xyXG4gICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ0N1c3RvbWVyIFVuYXR0ZW5kZWQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ2N1c3RvbWVydW5hdHRlbmRlZCc7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0JyA/IFwiY3VzdG9tXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdGRyb3Bkb3duKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBvbnZpZXcoKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ1N0b3JlIE9wZW4gJiBjbG9zZScpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnc3RvcmVvcGVuYW5kY2xvc2UnXHJcbiAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2V2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnTW9iaWxlIHVzYWdlIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nO1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YXZpZXcoKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnVW5pZm9ybSBkZXRlY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3VuaWZvcm1kZXRlY3Rpb24nO1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YXZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdDdXN0b21lciBVbmF0dGVuZGVkJykge1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3QgPSAnY3VzdG9tZXJ1bmF0dGVuZGVkJztcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnU3RhZmYgbGVmdCBpbiB0aGUgbWlkZGxlJykge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdzdGFmZmxlZnRpbnRoZW1pZGRsZSc7XHJcbiAgICAgIHRoaXMuZ2V0Y3VzdG9tZXJ1bmF0dGVuZGVkdmlldygpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBnZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KCkge1xyXG5cclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLmxpbWl0ID0gMVxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMV1cclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJkYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuc2VsZWN0LFxyXG4gICAgICBcInZpZXdJbWFnZVwiOiB0cnVlLFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbWVydW5hdHRlbmRlZERhdGEgPSByZXMuZGF0YS5kYXRhXHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxfY291bnRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldG1vYmlsZVVzYWdlRGF0YXZpZXcoKSB7XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMF1cclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJkYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuc2VsZWN0LFxyXG4gICAgICBcInZpZXdJbWFnZVwiOiB0cnVlLFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRNb2JVc2FnZWxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhID0gcmVzLmRhdGEuZGF0YVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsX2NvdW50XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNlbGVjdHNpbmdsZXF1ZXN0aW9uKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb25cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA9PSAwIHx8IHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMSkge1xyXG4gICAgICB0aGlzLnNob3dzaW5nbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93bXVsdGkgPSB0cnVlXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID09IDEpIHtcclxuICAgICAgdGhpcy5zaG93c2luZ2xlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93bXVsdGkgPSBmYWxzZVxyXG4gICAgICBcclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRTZWN0aW9uKVxyXG4gICAgfVxyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlKVxyXG4gICAgaWYodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCcpe1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdElkLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvIC8vW3RydWUsIGZhbHNlXVxyXG5cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNoZWNrbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgLy8gdGhpcy5jaGVja2xpc3REYXRhID0gcmVzPy5kYXRhLmNoZWNrbGlzdFF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cyhcImFsbFwiLCBcImFsbFwiKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1lbHNle1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdElkLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnICwvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRRdWVzdGlvbnMob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIC8vIHRoaXMuY2hlY2tsaXN0RGF0YSA9IHJlcz8uZGF0YS5jaGVja2xpc3RRdWVzdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgIHRoaXMudmlld1Rhc2tMaXN0KFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tsaXN0UUEodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcbiAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24gPSBbXVxyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0SWQsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8gLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNoZWNrbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gcmVzPy5kYXRhLmNoZWNrbGlzdFF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cyhcImFsbFwiLCBcImFsbFwiKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXR0YXNrUUEodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcbiAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24gPSBbXVxyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0SWQsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8gLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFF1ZXN0aW9ucyhvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gcmVzPy5kYXRhLmNoZWNrbGlzdFF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgdGhpcy52aWV3VGFza0xpc3QoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICB2aWV3VGFza0xpc3Qoc2VjdGlvbk5hbWU6YW55LHF1ZXN0aW9uTmFtZTphbnkpe1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lO1xyXG4gICAgdGhpcy5xdWVzdGlvbk5hbWUgPSBxdWVzdGlvbk5hbWVcclxuXHJcbiAgICB0aGlzLmxpbWl0ID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzFdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwLFxyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgdGhpcy52aWV3Q2hlY2tsaXN0c29wdGlvbnMgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUsIC8vIFtcImNoZWNrbGlzdFwiLCBcInRhc2tcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdICAgICAgXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXQsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJzb3VyY2VDaGVja0xpc3RfaWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLFxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvblxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRBbnN3ZXJzKHRoaXMudmlld0NoZWNrbGlzdHNvcHRpb25zKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZpZXdDaGVja2xpc3RzKHNlY3Rpb25OYW1lOiBhbnksIHF1ZXN0aW9uTmFtZTogYW55KSB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IFtdICAgIFxyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lO1xyXG4gICAgdGhpcy5xdWVzdGlvbk5hbWUgPSBxdWVzdGlvbk5hbWVcclxuXHJcbiAgICB0aGlzLmxpbWl0ID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzFdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwLFxyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgdGhpcy52aWV3Q2hlY2tsaXN0c29wdGlvbnMgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImNoZWNrbGlzdFwiLCBcInRhc2tcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdICAgICAgXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXQsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJzb3VyY2VDaGVja0xpc3RfaWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLFxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLnZpZXdDaGVja2xpc3RzKHRoaXMudmlld0NoZWNrbGlzdHNvcHRpb25zKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgZXhwb3J0WExTWCh0eXBlOiBhbnkpIHtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgY29uc3QgdXNlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIGFzIHN0cmluZylcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogW10sXHJcbiAgICAgIFwic291cmNlQ2hlY2tMaXN0X2lkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0SWQsXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwiZmlsZVR5cGVcIjogdHlwZSxcclxuICAgICAgXCJzdG9yZUlkc1wiOiBzdG9yZXMsXHJcbiAgICAgIFwidXNlcklkXCI6IHVzZXI/Ll9pZCxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5yZXBvcnRUYWJsZUV4cG9ydChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChgPGRpdj48c3BhbiBjbGFzcz1cIm1lLThcIiA+RG93bmxvYWRpbmcgeW91ciByZXBvcnRzPC9zcGFuPjxhIGhyZWY9XCJub3RpZmljYXRpb25zL2FsZXJ0cz90YWI9ZG93bmxvYWRcIiBzdHlsZT1cImNvbG9yOiM5OWMzZmY7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IGN1cnNvcjpwb2ludGVyXCIgPlZpZXc8L2E+PC9kaXY+YClcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgU29tZXRoaW5nIHdlbnQgd3JvbmcgIWApXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG5cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHRhc2tDcmVhdGUoKSB7IH1cclxuXHJcbiAgc2hvd3NpZGVuYXY6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNpZGVuYXYoKSB7XHJcbiAgICB0aGlzLnNob3dzaWRlbmF2ID0gIXRoaXMuc2hvd3NpZGVuYXY7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICB9XHJcbiAgb25QYWdlQ2hhbmdldmlldyhwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdG9yZSBPcGVuICYgY2xvc2UnKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2V2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnTW9iaWxlIHVzYWdlIGRldGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ1VuaWZvcm0gZGV0ZWN0aW9uJykge1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YXZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdDdXN0b21lciBVbmF0dGVuZGVkJykge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdjdXN0b21lcnVuYXR0ZW5kZWQnO1xyXG4gICAgICB0aGlzLmdldGN1c3RvbWVydW5hdHRlbmRlZHZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdTdGFmZiBsZWZ0IGluIHRoZSBtaWRkbGUnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0YWZmbGVmdGludGhlbWlkZGxlJztcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld0NoZWNrbGlzdHMoJycsICcnKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMzAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxpbWl0ID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lID09PSAnU3RvcmUgT3BlbiAmIGNsb3NlJykge1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NldmlldygpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ01vYmlsZSB1c2FnZSBkZXRlY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMuZ2V0bW9iaWxlVXNhZ2VEYXRhdmlldygpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ1VuaWZvcm0gZGV0ZWN0aW9uJykge1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YXZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUgPT09ICdDdXN0b21lciBVbmF0dGVuZGVkJykge1xyXG4gICAgICB0aGlzLmN1c3RvbWVydW5hdHRlbmRlZGxpc3QoZmFsc2UpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSA9PT0gJ1N0YWZmIGxlZnQgaW4gdGhlIG1pZGRsZScpIHtcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cygnJywgJycpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBvcnRTaG93ID0gZmFsc2U7XHJcbiAgfVxyXG4gIGV4cG9ydFNob3cgPSBmYWxzZTtcclxuICBleHBvcnRMYWJlbDogc3RyaW5nID0gJ0V4cG9ydCc7XHJcbiAgZXhwb3J0RGV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmV4cG9ydFNob3cgPSAhdGhpcy5leHBvcnRTaG93O1xyXG4gIH1cclxuICBxdWVzdGlvbnNjb3VudChkYXRhOiBhbnkpIHtcclxuICAgIGxldCBjb3VudCA9IDBcclxuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvdW50ID0gY291bnQgKyBlbGVtZW50LnF1ZXN0aW9ucy5sZW5ndGhcclxuXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcbiAgc2V0RXhwb3J0QXNQUFQodHlwZTogYW55LCBmaWxlVHlwZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cG9ydExhYmVsID0gdHlwZTsgIC8vIFVwZGF0ZSB0aGUgbGFiZWwgdGV4dFxyXG4gICAgdGhpcy5leHBvcnRTaG93ID0gZmFsc2U7ICAvLyBDbG9zZSB0aGUgZXhwb3J0IG1lbnUgYWZ0ZXIgc2VsZWN0aW9uXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuXHJcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdwcHQnKSB7XHJcbiAgICAgIGxldCBzdGFydCA9IGRheWpzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUpO1xyXG4gICAgICBsZXQgZW5kID0gZGF5anModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XHJcblxyXG4gICAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMiAmJiB0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA+IDEpIHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGBQbGVhc2Ugc2VsZWN0IG1heGltdW0gb2YgMSBxdWVzdGlvbiBvbmx5YClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMSAmJiB0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA+IDMpIHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGBQbGVhc2Ugc2VsZWN0IG1heGltdW0gb2YgMyBxdWVzdGlvbiBvbmx5YClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMCAmJiB0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA+IDMpIHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGBQbGVhc2Ugc2VsZWN0IG1heGltdW0gb2YgMyBxdWVzdGlvbiBvbmx5YClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV4cG9ydExhYmVsID0gJ0V4cG9ydCdcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJkb3dubG9hZEluc2VydEZyb21cIjogXCJnYWxsZXJ5XCIsXHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogW10sXHJcbiAgICAgIFwic291cmNlQ2hlY2tMaXN0X2lkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0SWQsXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsXHJcbiAgICAgIFwiZmlsZVR5cGVcIjogZmlsZVR5cGUsXHJcbiAgICAgIFwic3RvcmVJZHNcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLFxyXG4gICAgICBcInByZXZpZXdUeXBlXCI6IHRoaXMucHJldmlld1R5cGUsXHJcbiAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZyxcclxuICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ0V4cG9ydCBhcyBDU1YnIHx8IHR5cGUgPT09ICdFeHBvcnQgYXMgUFBUJyB8fCB0eXBlID09PSAnRXhwb3J0IGFzIFpJUCcpIHtcclxuICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEV4cG9ydEdhbGxlcnlDb21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgICBzaXplOiBcImxnXCIsXHJcbiAgICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgICB3aW5kb3dDbGFzczogXCJjdXN0b20taGVpZ2h0LW1vZGFsXCIgIC8vIDwtLSBBZGQgYSBjdXN0b20gY2xhc3MgaGVyZSAgXHJcbiAgICAgIH0pO1xyXG4gICAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdHlwZTtcclxuICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPkRvd25sb2FkaW5nIHlvdXIgcmVwb3J0czwvc3Bhbj48YSBocmVmPVwibm90aWZpY2F0aW9ucy9hbGVydHM/dGFiPWRvd25sb2FkXCIgc3R5bGU9XCJjb2xvcjojOTljM2ZmOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBjdXJzb3I6cG9pbnRlclwiID5WaWV3PC9hPjwvZGl2PmApXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFNvbWV0aGluZyB3ZW50IHdyb25nICFgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5leHBvcnRMYWJlbCA9ICdFeHBvcnQnXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UucmVwb3J0VGFibGVFeHBvcnQocGF5bG9hZCk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPkRvd25sb2FkaW5nIHlvdXIgcmVwb3J0czwvc3Bhbj48YSBocmVmPVwibm90aWZpY2F0aW9ucy9hbGVydHM/dGFiPWRvd25sb2FkXCIgc3R5bGU9XCJjb2xvcjojOTljM2ZmOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBjdXJzb3I6cG9pbnRlclwiID5WaWV3PC9hPjwvZGl2PmApXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGBTb21ldGhpbmcgd2VudCB3cm9uZyAhYClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGVDaGFuZ2UoZXZlbnQ6YW55KXtcclxuICAgIC8vIGNvbnNvbGUubG9nKGV2ZW50KVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3R5cGUnKT8uc2V0VmFsdWUoZXZlbnQpXHJcbiAgICBpZihldmVudD09PSd0YXNrJyl7XHJcbiAgICAgIHRoaXMuZ2V0QWxsVGFza3MoZXZlbnQpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKGV2ZW50KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBnZXRBbGxUYXNrcyh0eXBlOiBhbnkpIHtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLnN0b3Jlcz8ubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZnJvbURhdGUnKT8udmFsdWUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3RvRGF0ZScpPy52YWx1ZSxcclxuICAgICAgc3RvcmVJZDogc3RvcmVzLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiBcImNoZWNrTGlzdE5hbWVcIixcclxuICAgICAgc29ydEJ5OiAxXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFRhc2tMaXN0KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSByZXMuZGF0YS5jaGVja2xpc3REYXRhXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXJ5UGFyYW1zKVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RJZCYmdGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlPT0ndGFzaycpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RJZCcpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdElkKVxyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd0eXBlJyk/LnNldFZhbHVlKCd0YXNrJylcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdFR5cGUnKT8uc2V0VmFsdWUodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKVxyXG5cclxuICAgICAgICAgICAgICBsZXQgZ2V0Y2hlY2tsaXN0ID0gdGhpcy5jaGVja2xpc3RzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09IHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0SWQpXHJcblxyXG4gICAgICAgICAgICAgIGlmIChnZXRjaGVja2xpc3QgJiYgZ2V0Y2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrbGlzdElkJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tsaXN0SWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXR0YXNrUUEoZmFsc2UpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB9LDApXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2xpc3RzID0gW11cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIGdldFRhc2tRQSh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gW11cclxuICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUsIC8vIFtcImN1c3RvbVwiLCBcIkFJXCJdXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RJZCxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbyAvL1t0cnVlLCBmYWxzZV1cclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0UXVlc3Rpb25zKG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSByZXM/LmRhdGEuY2hlY2tsaXN0UXVlc3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICB0aGlzLnZpZXdUYXNrTGlzdChcImFsbFwiLCBcImFsbFwiKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICB2aWV3VGFza3Moc2VjdGlvbk5hbWU6IGFueSwgcXVlc3Rpb25OYW1lOiBhbnkpIHtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gW10gICAgXHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlY3Rpb25OYW1lID0gc2VjdGlvbk5hbWU7XHJcbiAgICB0aGlzLnF1ZXN0aW9uTmFtZSA9IHF1ZXN0aW9uTmFtZVxyXG5cclxuICAgIHRoaXMubGltaXQgPSAxO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMV07XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxpbWl0ID0gMTAsXHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTBdO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZVxyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICB0aGlzLnZpZXdDaGVja2xpc3Rzb3B0aW9ucyA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSwgLy8gW1wiY2hlY2tsaXN0XCIsIFwidGFza1wiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl0gICAgICBcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdElkLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdElkLFxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLnZpZXdDaGVja2xpc3RzKHRoaXMudmlld0NoZWNrbGlzdHNvcHRpb25zKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICB0YXNrcmVkaXJlY3QocXVlc3Rpb246YW55LHN0b3JlUHJvZmlsZTphbnksY2hlY2tsaXN0SW5mbzphbnkpe1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RyYXgvZ2FsbGVyeSddLCBcclxuICAgICAge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICBDaGVja2xpc3REYXRlOiBkYXlqcyhjaGVja2xpc3RJbmZvLmRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxyXG4gICAgICAgICAgc3RvcmVJZDpzdG9yZVByb2ZpbGU/LnN0b3JlX2lkLFxyXG4gICAgICAgICAgY2hlY2tsaXN0VHlwZTpcInRhc2tcIixcclxuICAgICAgICAgIGNoZWNrbGlzdElkOiBxdWVzdGlvbi50YXNrSWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIH1cclxuICAgICAgIClcclxuXHJcbiAgfVxyXG5cclxuICBhZGRUYXNrKHR5cGU6IGFueSwgZGF0YTogYW55LGNoZWNrbGlzdEluZm86YW55LHN0b3JlUHJvZmlsZTphbnksc2VjdGlvbjphbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRUYXNrQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnLCB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uub3BlcmF0aW9udHlwZSA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNvdXJjZUNoZWNrTGlzdF9pZCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0SWQ7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pbnB1dERhdGEgPSBkYXRhO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2hlY2tsaXN0SW5mbyA9IGNoZWNrbGlzdEluZm87XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zdG9yZVByb2ZpbGUgPSBzdG9yZVByb2ZpbGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZWN0aW9uSW5mbyA9IHNlY3Rpb247XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50YXNrRGV0YWlscyA9IHtcclxuICAgICAgc2VjdGlvbnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImlkXCI6IFwiXCIsXHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJcIixcclxuICAgICAgICAgIFwicXVlc3Rpb25zXCI6IFtkYXRhXVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZihyZXN1bHQgPT0gJ3N1Ym1pdCcpe1xyXG4gICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEodHJ1ZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgc2VsZWN0ZWRUYXNrOmFueSA9J3llcydcclxuICB0YXNrVGFiKHRhc2s6YW55KXtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYXNrID0gdGFzaztcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJnYWxsZXJ5LWNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgbWItNFwiPkdhbGxlcnk8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImdhbGxlcnlGb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDogMjAlO1wiIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmeC1kYXRlLXJhbmdlIGZvcm0tY29udHJvbCBwcy0xNCB6LTJcIiBzdHlsZT1cIm1pbi13aWR0aDogMjYwcHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgbmd4RGF0ZXJhbmdlcGlja2VyTWQgIFtkcm9wc109XCInZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuc109XCIncmlnaHQnXCIgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwiZmFsc2VcIiBba2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbF09XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlUmFuZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiAoY2xpY2spPVwicmVzZXRWYWxpZGF0aW9uKClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnREYXRlQ2hhbmdlZCk9XCJvblN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCIgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIiBbYXV0b0FwcGx5XT1cInRydWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cInsgZm9ybWF0OiAnREQtTU0tWVlZWScsIGZpcnN0RGF5OiAxLCBtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwidHlwZVwiIChpdGVtQ2hhbmdlKT1cInR5cGVDaGFuZ2UoJGV2ZW50KVwiID48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgW2l0ZW1zXT1cImNoZWNrbGlzdHNcIiAgW211bHRpXT1cImZhbHNlXCIgW3NlYXJjaEZpZWxkXT1cIidjaGVja0xpc3ROYW1lJ1wiIFtpZEZpZWxkXT1cIidjaGVja0xpc3ROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hlY2tsaXN0TmFtZWNoYW5nZSgkZXZlbnQsZmFsc2UpXCIgW3NlbGVjdGVkVmFsdWVzXT1cIlt7Y2hlY2tMaXN0TmFtZTpnYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrbGlzdE5hbWUnKT8udmFsdWV9XVwiPjwvbGliLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiYW5zd2VyVHlwZVwiPjwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGxhY2Vob2xkZXIgT3ZlcmxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlci1vdmVybGF5XCIgKm5nSWY9XCIhKGdhbGxlcnlGb3JtLmdldCgnZ3JvdXBMaXN0Jyk/LnZhbHVlPy5sZW5ndGgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBjbHVzdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0dWFsIFNlbGVjdCBDb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWdyb3VwLXNlbGVjdCBbaXRlbXNdPVwiZ3JvdXBMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ2dyb3VwTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidncm91cE5hbWUnXCIgKHNlbGVjdGVkKT1cIm9uZ3JvdXBTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVzXT1cImdhbGxlcnlGb3JtLmdldCgnZ3JvdXBMaXN0Jyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1ncm91cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGxhY2Vob2xkZXIgT3ZlcmxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBTdG9yZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7e3N0b3JlTGlzdC5sZW5ndGh9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2dhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnZhbHVlLmxlbmd0aH19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0dWFsIFNlbGVjdCBDb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmVzLXNlbGVjdCBbaXRlbXNdPVwic3RvcmVMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ3N0b3JlTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3N0b3JlSWQnXCIgKHNlbGVjdGVkKT1cIm9uU3RvcmVTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWVcIj48L2xpYi1zdG9yZXMtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS00IG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmlld1JlZG9cIiAqbmdJZj1cInNob3dmbGFnXCIgY2hhbmdlIHR5cGU9XCJjaGVja2JveFwiIChjbGljayk9XCJyZWRvQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbXQtMSBtZS0yXCIgaWQ9XCJ2aWV3UmVkb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwic2hvd2ZsYWdcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwidmlld1JlZG9cIj5WaWV3IFJlLWRv4oCZcyBvbmx5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2aWV3RmxhZ1wiICpuZ0lmPVwic2hvd2ZsYWdcIiBjaGFuZ2UgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cImZsYWdDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG10LTEgbWUtMlwiIGlkPVwidmlld0ZsYWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwic2hvd2ZsYWdcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwidmlld0ZsYWdcIj5WaWV3IGZsYWdnZWQgb25seTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9uU3VibWl0KClcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCBcIj48c3Bhbj5BcHBseTwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInJvdyBteS01XCI+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInNob3dzaWRlbmF2ID8gJ2NvbC1tZC00JzonZC1ub25lJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHBvc2l0aW9uLXJlbGF0aXZlIGgtYXV0b1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrbGlzdC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrbGlzdC10aXRsZVwiPnt7dGhpcy5jaGVja2xpc3ROYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LXRleHRcIj57e2NoZWNrTGlzdERlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YVwiIGNsYXNzPVwicm93IG10LTIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtdC0yMCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy01MCBoLTMwMHB4XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGUgbXQtMFwiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciB0aGlzIGNoZWNrbGlzdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCIhbm9EYXRhICYmICFsb2FkaW5nXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3QgPT09ICdjdXN0b20nfHxzZWxlY3QgPT09ICd0YXNrJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTI1IG1lLTMgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJ2aWV3Q2hlY2tsaXN0cygpXCI+IFJlc2V0IDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0yNSBtZS0zIGJ0bi1yZXNpemVcIiAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbi5sZW5ndGg+MHx8dGVtcHNlbGVjdGVkU2VjdGlvbi5sZW5ndGg+MFwiIChjbGljayk9XCJvbmNoZWNrbGlzdHJlc2V0KClcIj4gUmVzZXQgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD4wfHx0ZW1wc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD4wXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0yNSAgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJzZWxlY3RzaW5nbGVxdWVzdGlvbigpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTZcIiAgW25nQ2xhc3NdPVwic2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD09MCA/ICd2aWV3LWFsbCc6J3ZpZXctcXVlc3Rpb25zJ1wiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJvbmNoZWNrbGlzdHJlc2V0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgQWxsIEFuc3dlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgY2hlY2tsaXN0RGF0YTsgbGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC00XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWNjb3JkaWFuKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTQgZnctYm9sZCBzZWN0aW9uXCIgPnt7c2VjdGlvbi5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbbmdDbGFzc109XCJ7J3JvdGF0ZScgOiBzaG93ICE9PSBpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI1XCIgaGVpZ2h0PVwiMjVcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01IDcuNUwxMCAxMi41TDE1IDcuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93PT09aVwiIGNsYXNzPVwicXVlc3Rpb24tbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0RGF0YV09XCJzZWN0aW9uLnF1ZXN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucztsZXQgaj1pbmRleDtcIiBjbGFzcz1cImQtZmxleCBteS0yIHEtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgIGlkPVwibGFiZWxcIiBbKG5nTW9kZWwpXT1cInF1ZXN0aW9uLmNoZWNrZWRcIiAoY2xpY2spPVwic2VsZWN0ZWRRdWVzdGlvbigkZXZlbnQsc2VjdGlvbixxdWVzdGlvbilcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbXQtMiBtZS00XCIgIHR5cGU9XCJjaGVja2JveFwiID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRhYmxlY29udGVudFwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9uPy5jaGVja2VkID8gJ3ZpZXctYWxsJzonJ1wiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cXVlc3Rpb24ucW5vfX0gLiB7e3F1ZXN0aW9uLnFuYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdCA9PT0nbW9iaWxldXNhZ2VkZXRlY3Rpb24nfHxzZWxlY3QgPT09J3VuaWZvcm1kZXRlY3Rpb24nfHxzZWxlY3QgPT09J3N0b3Jlb3BlbmFuZGNsb3NlJ3x8c2VsZWN0PT09J2N1c3RvbWVydW5hdHRlbmRlZCd8fHNlbGVjdCA9PT0nc3RhZmZsZWZ0aW50aGVtaWRkbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kIG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMjUgbWUtMyBidG4tcmVzaXplXCIgKGNsaWNrKT1cIm9ucmVzZXQoKVwiPiBSZXNldCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0yNSAgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJvbnZpZXcoKVwiPkFwcGx5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duc2VsZWN0IGgtOTAwcHggc2Nyb2xsLXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtbGVmdCBcIiBbbmdDbGFzc109XCJzZWxlY3RBbGwgPyAnYmFja2dyb3VuZEJvcmRlcic6J3dpdGhvdXRiYWNrZ3JvdW5kJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbWUtNFwiIHR5cGU9XCJjaGVja2JveFwiICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsU3RvcmUoJGV2ZW50KVwiPiA8c3BhbiBbbmdDbGFzc109XCJzZWxlY3RBbGwgPyAndXNhZ2UtZGV0ZWN0aW9uJzondXNhZ2UtdGV4dCdcIj5TZWxlY3QgQWxsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkcm9wZG93bmJnIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiICpuZ0Zvcj1cImxldCBsaXN0IG9mIG1vYmlsZXVzYWdlRGF0YUxpc3Q7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNoYW5nZSk9XCJ1cGRhdGVDaGVjaygkZXZlbnQsbGlzdClcIiBbbmdDbGFzc109XCJsaXN0LmNoZWNrZWQgPyAnYmFja2dyb3VuZEJvcmRlcic6J3dpdGhvdXRiYWNrZ3JvdW5kJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImxhYmVse3tpfX1cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbWUtNFwiICB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImxpc3QuY2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJsYWJlbHt7aX19XCIgW25nQ2xhc3NdPVwibGlzdC5jaGVja2VkID8gJ3VzYWdlLWRldGVjdGlvbic6J3VzYWdlLXRleHQnXCIgPnt7bGlzdD8uc3RvcmVOYW1lfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBkZXRlY3Rpb25yaWdodFwiICpuZ0lmPVwibGlzdC5kZXRlY3Rpb25cIj57e2xpc3QuZGV0ZWN0aW9ufX0gRGV0ZWN0aW9uczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ucmlnaHQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMSAxN0w2IDEyTDExIDdNMTggMTdMMTMgMTJMMTggN1wiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtbWQtOCc6J2NvbC1tZC0xMidcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgIHB4LTAgbXktMFwiICpuZ0lmPVwic2VsZWN0ID09PSdjdXN0b20nJiYhdmlld2xvYWRpbmcmJiF2aWV3bm9EYXRhfHxzZWxlY3QgPT09ICd0YXNrJyYmIXZpZXdsb2FkaW5nJiYhdmlld25vRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGgzPjwvaDM+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN3aXRjaCB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGN1cnNvci1wb2ludGVyIG1lLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy01IGJ0biBidG4tcHJpbWFyeSBmb3JtLWNvbnRyb2wgbm8tdGV4dC10cmFuc2Zvcm1cIiAoY2xpY2spPVwiZXhwb3J0RGV0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBleHBvcnRMYWJlbCB9fSA8IS0tIEJpbmQgbGFiZWwgdGV4dCBoZXJlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImV4cG9ydFNob3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQgcHktMiAgcG9zaXRpb24tYWJzb2x1dGUgcHJvZHVjdGRyb3AgdG9wLTIwIGVuZC0wIG10LTEwIHotMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJweC01IGN1cnNvci1wb2ludGVyIHB5LTRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNldEV4cG9ydEFzUFBUKCdFeHBvcnQgYXMgUERGJywncGRmJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydCBhcyBQREZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInB4LTUgY3Vyc29yLXBvaW50ZXIgcHktNFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2V0RXhwb3J0QXNQUFQoJ0V4cG9ydCBhcyBDU1YnLCdjc3YnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0IGFzIENTVlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwic2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD4wXCIgY2xhc3M9XCJweC01IGN1cnNvci1wb2ludGVyIHB5LTRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNldEV4cG9ydEFzUFBUKCdFeHBvcnQgYXMgUFBUJywncHB0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydCBhcyBQUFRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbi5sZW5ndGg+MFwiIGNsYXNzPVwicHgtNSBjdXJzb3ItcG9pbnRlciBweS00XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZXRFeHBvcnRBc1BQVCgnRXhwb3J0IGFzIFpJUCcsJ3ppcGZpbGVzJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydCBhcyBaSVBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld2xvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2aWV3bm9EYXRhXCIgY2xhc3M9XCJyb3cgbXQtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtdC0yMCAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTQwXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciB0aGlzIGNoZWNrbGlzdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uICpuZ0lmPVwiIXZpZXdsb2FkaW5nICYmICF2aWV3bm9EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Q9PT0nY3VzdG9tJ3x8c2VsZWN0PT09J3Rhc2snIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dzaW5nbGVcIiBjbGFzcz1cInFhLWhlYWRpbmcgbS0zIG14LTExXCI+e3t0aGlzLnNlbGVjdGVkU2VjdGlvblswXT8ucXVlc3Rpb25zWzBdfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93c2luZ2xlJiZzaG93ZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXAgbXgtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwidGFza1RhYigneWVzJylcIiBbbmdDbGFzc109XCJzZWxlY3RlZFRhc2sgPT09ICd5ZXMnID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFllczxzcGFuIGNsYXNzPVwibXgtMiBcIiBbbmdDbGFzc109XCJzZWxlY3RlZFRhc2sgPT09ICd5ZXMnID8gJ2JhZGdlLW51bS1wcmltYXJ5JyA6J2JhZGdlLW51bS1tdXRlZCdcIj4xMDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJ0YXNrVGFiKCdubycpXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYXNrID09PSAnbm8nID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vPHNwYW4gY2xhc3M9XCJteC0yXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYXNrID09PSdubycgPyAnYmFkZ2UtbnVtLXByaW1hcnknIDonYmFkZ2UtbnVtLW11dGVkJ1wiPjIwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInRhc2tUYWIoJ21heWJlJylcIiBbbmdDbGFzc109XCJzZWxlY3RlZFRhc2sgPT09ICdtYXliZScgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IGJlPHNwYW4gY2xhc3M9XCJteC0yIFwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFzayA9PT0gJ21heWJlJyA/ICdiYWRnZS1udW0tcHJpbWFyeScgOidiYWRnZS1udW0tbXV0ZWQnXCI+MDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGVja2xpc3Qgb2Ygdmlld0NoZWNrbGlzdHNEYXRhPy5jaGVja2xpc3RBbnN3ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1jZW50ZXIgaWNvbnNpemVcIiBzcmM9XCJ7e2NsaWVudERhdGEubG9nb319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMTAgbXQtNVwiICpuZ0lmPVwic2hvd211bHRpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RvcmUgTmFtZTo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5zdG9yZVByb2ZpbGU/LnN0b3JlTmFtZX19IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+Q2hlY2tsaXN0IE5hbWU6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj57e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uY2hlY2tsaXN0TmFtZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5TdGF0ZSAmIENvdW50cnkgOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3Q/LnN0b3JlUHJvZmlsZT8uc3RhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NoZWNrbGlzdD8uc3RvcmVQcm9maWxlPy5Db3VudHJ5fX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkR1cmF0aW9uIDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPiB7e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uZHVyYXRpb259fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+Tm8uIG9mIFF1ZXN0aW9ucyA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj57e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8ubm9vZlF1ZXN0aW9uc319PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EYXRlIDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPiB7e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uZGF0ZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5TdWJtaXR0ZWQgQnkgOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LnN1Ym1pdHRlZEJ5fX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPlRpbWUgOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+IHt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy50aW1lfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMTBcIiA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbmxpc3Qgb2YgY2hlY2tsaXN0LnF1ZXN0aW9uQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicWEtYm9kcmVyIG15LTVcIiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcXVlc3Rpb25saXN0LnF1ZXN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdy0xMDAgbS0zXCIgKm5nSWY9XCJzaG93c2luZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCB0ZXh0LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NoZWNrbGlzdD8uc3RvcmVQcm9maWxlPy5zdG9yZU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IHRleHQtZW5kIHRpdGxlLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXR0ZWQgYnkgOiB7e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uc3VibWl0dGVkQnl9fSBPbiA6IHt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5kYXRlfX0ge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LnRpbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cInNob3dtdWx0aVwiIGNsYXNzPVwicWEtaGVhZGluZ1wiPnt7cXVlc3Rpb24/LnFub319LiB7e3F1ZXN0aW9uPy5xbmFtZX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2Rlc2NyaXB0aXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMlwiIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0nbGluZWFyc2NhbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJyPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtNFwiIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSd0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTRcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0nZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC00XCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J3llcy9ubydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTRcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0ucmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCI+VmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIEltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJyZWNhcC1pbWcgcC0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCI+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nRGVzY3JpcHRpdmUgQW5zd2VyJ1wiPlZhbGlkYXRpb24gQW5zd2VyIDp7e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICBcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J211bHRpcGxlY2hvaWNlc2luZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMlwiIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0ucmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCI+VmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInJlY2FwLWltZyBwLTNcIiAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBWaWRlbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCI+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0Rlc2NyaXB0aXZlIEFuc3dlcidcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPlZhbGlkYXRpb24gQW5zd2VyIDoge3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2ltYWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+VXBsb2FkZWQgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS5hbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbXQtMlwiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uJiZpdGVtLnZhbGlkYXRpb25BbnN3ZXIhPScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiPlZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIEltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJyZWNhcC1pbWcgcC0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0nbXVsdGlwbGVjaG9pY2VtdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0ucmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTNcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbXQtMlwiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uJiZpdGVtLnZhbGlkYXRpb25BbnN3ZXIhPScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCI+VmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0Rlc2NyaXB0aXZlIEFuc3dlcidcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPlZhbGlkYXRpb24gQW5zd2VyIDoge3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2Rlc2NyaXB0aXZlSW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJpdGVtLnJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS5yZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+VXBsb2FkZWQgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbXQtM1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uJiZpdGVtLnZhbGlkYXRpb25BbnN3ZXIhPScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiPlZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIEltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJyZWNhcC1pbWcgcC0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgVmlkZW8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0Rlc2NyaXB0aXZlIEFuc3dlcidcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT0nJ1wiPnt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J3ZpZGVvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBWaWRlbzwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJyZWNhcC1pbWcgcC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J211bHRpcGxlSW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb24mJml0ZW0udmFsaWRhdGlvbkFuc3dlciE9JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09J0NhcHR1cmUgSW1hZ2UnfHxpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBWaWRlbydcIj5WYWxpZGF0aW9uIEFuc3dlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT0nRGVzY3JpcHRpdmUgQW5zd2VyJ1wiPlZhbGlkYXRpb24gQW5zd2VyIDoge3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWZhdWx0IGJvcmRlci1kZWZhdWx0IG1lLTNcIiBbZGlzYWJsZWRdPVwicXVlc3Rpb24ucmVkb1wiIChjbGljayk9XCJhZGRUYXNrKCdyZWRvJyxxdWVzdGlvbixjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8sY2hlY2tsaXN0Py5zdG9yZVByb2ZpbGUscXVlc3Rpb25saXN0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYwMDRfMTE3MzQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTkuMTY5MyAzLjMzMzMxVjguMzMzMzJNMTkuMTY5MyA4LjMzMzMySDE0LjE2OTNNMTkuMTY5MyA4LjMzMzMyTDE1LjMwMjYgNC42OTk5OEMxNC40MDcgMy44MDM5MSAxMy4yOTkgMy4xNDkzMiAxMi4wODE5IDIuNzk3MjlDMTAuODY0OSAyLjQ0NTI3IDkuNTc4NTMgMi40MDcyNyA4LjM0Mjg0IDIuNjg2ODZDNy4xMDcxNiAyLjk2NjQ1IDUuOTYyNDQgMy41NTQ1MSA1LjAxNTQ5IDQuMzk2MTZDNC4wNjg1NSA1LjIzNzgyIDMuMzUwMjQgNi4zMDU2NCAyLjkyNzYgNy40OTk5OE0wLjgzNTkzOCAxNi42NjY2VjExLjY2NjZNMC44MzU5MzggMTEuNjY2Nkg1LjgzNTk0TTAuODM1OTM4IDExLjY2NjZMNC43MDI2IDE1LjNDNS41OTgyMyAxNi4xOTYxIDYuNzA2MjUgMTYuODUwNiA3LjkyMzI4IDE3LjIwMjdDOS4xNDAzMSAxNy41NTQ3IDEwLjQyNjcgMTcuNTkyNyAxMS42NjI0IDE3LjMxMzFDMTIuODk4IDE3LjAzMzUgMTQuMDQyOCAxNi40NDU1IDE0Ljk4OTcgMTUuNjAzOEMxNS45MzY3IDE0Ljc2MjEgMTYuNjU1IDEzLjY5NDMgMTcuMDc3NiAxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYwMDRfMTE3MzRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgZm9udC1kZWZ1bHQtdGFza1wiPlJlZG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSAgYm9yZGVyLXZhbDFcIiAqbmdJZj1cIiFxdWVzdGlvbi50YXNrJiYhcXVlc3Rpb24udGFza0lkJiZ0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUhPSd0YXNrJ1wiIChjbGljayk9XCJhZGRUYXNrKCdjcmVhdGV0YXNrJyxxdWVzdGlvbixjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8sY2hlY2tsaXN0Py5zdG9yZVByb2ZpbGUscXVlc3Rpb25saXN0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjY2OTMgMS42NjY3NUg1LjAwMjZDNC41NjA1OCAxLjY2Njc1IDQuMTM2NjUgMS44NDIzNCAzLjgyNDA5IDIuMTU0OUMzLjUxMTUzIDIuNDY3NDYgMy4zMzU5NCAyLjg5MTM5IDMuMzM1OTQgMy4zMzM0MVYxNi42NjY3QzMuMzM1OTQgMTcuMTA4OCAzLjUxMTUzIDE3LjUzMjcgMy44MjQwOSAxNy44NDUzQzQuMTM2NjUgMTguMTU3OCA0LjU2MDU4IDE4LjMzMzQgNS4wMDI2IDE4LjMzMzRIMTUuMDAyNkMxNS40NDQ2IDE4LjMzMzQgMTUuODY4NiAxOC4xNTc4IDE2LjE4MTEgMTcuODQ1M0MxNi40OTM3IDE3LjUzMjcgMTYuNjY5MyAxNy4xMDg4IDE2LjY2OTMgMTYuNjY2N1Y2LjY2Njc1TTExLjY2OTMgMS42NjY3NUwxNi42NjkzIDYuNjY2NzVNMTEuNjY5MyAxLjY2Njc1VjYuNjY2NzVIMTYuNjY5M00xMC4wMDI2IDE1LjAwMDFWMTAuMDAwMU03LjUwMjYgMTIuNTAwMUgxMi41MDI2XCIgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgZm9udC10YXNrXCI+VGFzazwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInF1ZXN0aW9uLnRhc2smJnF1ZXN0aW9uLnRhc2tJZCAmJnRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSE9PSd0YXNrJ1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSAgYm9yZGVyLXZhbDFcIiAoY2xpY2spPVwidGFza3JlZGlyZWN0KHF1ZXN0aW9uLGNoZWNrbGlzdD8uc3RvcmVQcm9maWxlLGNoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGZvbnQtdGFza1wiPlZpZXcgVGFzazwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEwIG15LTVcIiAqbmdJZj1cInNlbGVjdCA9PT0nbW9iaWxldXNhZ2VkZXRlY3Rpb24nfHxzZWxlY3QgPT09J3VuaWZvcm1kZXRlY3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cImNsaWVudERhdGEubG9nbyYmY2xpZW50RGF0YS5sb2dvIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXQtNSBtYi0zIHRleHQtY2VudGVyIGljb25zaXplXCIgc3JjPVwie3tjbGllbnREYXRhLmxvZ299fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5DaGVja2xpc3QgTmFtZSA6IHt7dGhpcy5jaGVja2xpc3ROYW1lfX08L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicWEtYm9kcmVyIG15LTMgbXQtNVwiICpuZ0Zvcj1cImxldCBpdGVtICBvZiBtb2JpbGV1c2FnZURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJyb3cgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicWEtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnN0b3JlTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbXktMlwiICpuZ0Zvcj1cImxldCBkZXRlY3Rpb24gb2YgaXRlbS5pbWFnZVVybFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMTAwIGgtNTAwcHggcm91bmRlZC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QUljaGVja2xpc3RDRE59fXt7ZGV0ZWN0aW9ufX1cIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTNcIiAqbmdJZj1cInNlbGVjdCA9PT0ndW5pZm9ybWRldGVjdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWZvcm0gRGV0ZWN0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0zXCIgKm5nSWY9XCJzZWxlY3QgPT09J21vYmlsZXVzYWdlZGV0ZWN0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9iaWxlIFVzYWdlIERldGVjdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMTAgbXktNVwiICpuZ0lmPVwic2VsZWN0ID09PSdjdXN0b21lcnVuYXR0ZW5kZWQnfHxzZWxlY3QgPT09J3N0YWZmbGVmdGludGhlbWlkZGxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm10LTUgbWItMyB0ZXh0LWNlbnRlciBpY29uc2l6ZVwiIHNyYz1cInt7Y2xpZW50RGF0YS5sb2dvfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Q2hlY2tsaXN0IE5hbWUgOiB7e3RoaXMuY2hlY2tsaXN0TmFtZX19PC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFhLWJvZHJlciBteS0zIG10LTVcIiAqbmdGb3I9XCJsZXQgaXRlbSAgb2YgY3VzdG9tZXJ1bmF0dGVuZGVkRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvdyB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJxYS1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG15LTJcIiAqbmdGb3I9XCJsZXQgZGV0ZWN0aW9uIG9mIGl0ZW0uaW1hZ2VzRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBtaW4taC00NXB4IHB4LTAgbXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTMgc3RvcmUtdGl0bGVcIj57e2l0ZW0uc3RvcmVOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jdXN0b21lcl9pZFwiPkN1c3QgSUQgOiB7e2RldGVjdGlvbi5jdXN0b21lcl9pZH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN3aXRjaCB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jdXN0b21lcl9lbnRyeV90aW1lXCI+RW50cnkgdGltZSA6IHt7ZGV0ZWN0aW9uLmN1c3RvbWVyX2VudHJ5X3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jdXN0b21lcl9leGl0X3RpbWVcIj5FeGl0IHRpbWUgOiB7e2RldGVjdGlvbi5jdXN0b21lcl9leGl0X3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwidy0xMDAgaC00NTBweCByb3VuZGVkLXRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBSWNoZWNrbGlzdENETn19e3tkZXRlY3Rpb24udmlkZW9fcGF0aH19XCIgYWx0PVwiXCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3QgPT09J3N0b3Jlb3BlbmFuZGNsb3NlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjYXJkXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RvcmVPcGVuY2xvc2VWaWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXBjYXJkIG14LTggbXktOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hcGhlYWRlciBtcy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uc3RvcmVOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbS0wIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nIG10LTQgcHgtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiICpuZ0lmPVwiIWl0ZW0ub3BlblRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXcgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjNcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjMgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi41IDYuMzIyMjdINi41MU0xNi4yNSA5LjMyMjI3SDIxLjVMMTggMTYuMzIyM0wxNC45MSAxMi4wMDIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3Rvcl8yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEuNSAxNi4zMjI5SDUuMjZDNS42MzI3MyAxNi4zMjU1IDUuOTk4NzcgMTYuMjIzOSA2LjMxNjgyIDE2LjAyOTVDNi42MzQ4NyAxNS44MzUyIDYuODkyMjggMTUuNTU1OCA3LjA2IDE1LjIyMjlMOC41IDEyLjMyMjlNMS41IDE4LjMyMjlWMTQuMzIyOU0xNy41IDYuODIyOTFMMTMuNSAxNC44MjI5TDMuMTEgOS42MjI5MUMyLjQyMDMzIDkuMjc1NTMgMS44OTYzNSA4LjY2OTEgMS42NTI3MiA3LjkzNjMyQzEuNDA5MDkgNy4yMDM1NCAxLjQ2NTY0IDYuNDA0MSAxLjgxIDUuNzEyOTFMMy4xOSAyLjkyMjkxQzMuMzYyIDIuNTgwMTQgMy41OTk4NCAyLjI3NDYgMy44ODk5NCAyLjAyMzc1QzQuMTgwMDMgMS43NzI5IDQuNTE2NyAxLjU4MTY1IDQuODgwNzIgMS40NjA5M0M1LjI0NDc0IDEuMzQwMjEgNS42Mjg5NyAxLjI5MjM5IDYuMDExNDcgMS4zMjAxOEM2LjM5Mzk4IDEuMzQ3OTcgNi43NjcyNiAxLjQ1MDg0IDcuMTEgMS42MjI5MUwxNy41IDYuODIyOTFaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJ2dHh0IG10LTUgdGV4dGNsclwiPlByZXZpZXcgbm90XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZyZXNodHh0IG10LTIgdGV4dGNsclwiPlRoZSBzZWxlY3RlZCBjYW1lcmFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJpdGVtLm9wZW5UaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJteC0xIGltZy1vcGNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4T3BlbmNsb3NlY2hlY2tsaXN0Q0ROfX17e2l0ZW0uc3RvcmVJZH19L3t7aXRlbS5kYXRlU3RyaW5nfX0vb3BlcmF0aW9uX3NuYXBzL29wZW4uanBlZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJDaGVja2xpc3QgVmlkZW8gUGxheWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBteC0xIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hcHRleHRcIj5PcGVuaW5nIFNuYXA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXB0aW1lXCI+e3tpdGVtLm9wZW5UaW1lfX0gLSB7e2l0ZW0uZGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgc25hcGJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbT8ub3BlblRpbWVGbGFnXCI+T24gVGltZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlciBzbmFwYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/Lm9wZW5UaW1lRmxhZ1wiPkxhdGUgT3Blbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWcgbXQtNCBweC0zIHBvc2l0aW9uLXJlbGF0aXZlXCIgKm5nSWY9XCIhaXRlbS5jbG9zZVRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXcgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjNcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjMgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi41IDYuMzIyMjdINi41MU0xNi4yNSA5LjMyMjI3SDIxLjVMMTggMTYuMzIyM0wxNC45MSAxMi4wMDIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3Rvcl8yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEuNSAxNi4zMjI5SDUuMjZDNS42MzI3MyAxNi4zMjU1IDUuOTk4NzcgMTYuMjIzOSA2LjMxNjgyIDE2LjAyOTVDNi42MzQ4NyAxNS44MzUyIDYuODkyMjggMTUuNTU1OCA3LjA2IDE1LjIyMjlMOC41IDEyLjMyMjlNMS41IDE4LjMyMjlWMTQuMzIyOU0xNy41IDYuODIyOTFMMTMuNSAxNC44MjI5TDMuMTEgOS42MjI5MUMyLjQyMDMzIDkuMjc1NTMgMS44OTYzNSA4LjY2OTEgMS42NTI3MiA3LjkzNjMyQzEuNDA5MDkgNy4yMDM1NCAxLjQ2NTY0IDYuNDA0MSAxLjgxIDUuNzEyOTFMMy4xOSAyLjkyMjkxQzMuMzYyIDIuNTgwMTQgMy41OTk4NCAyLjI3NDYgMy44ODk5NCAyLjAyMzc1QzQuMTgwMDMgMS43NzI5IDQuNTE2NyAxLjU4MTY1IDQuODgwNzIgMS40NjA5M0M1LjI0NDc0IDEuMzQwMjEgNS42Mjg5NyAxLjI5MjM5IDYuMDExNDcgMS4zMjAxOEM2LjM5Mzk4IDEuMzQ3OTcgNi43NjcyNiAxLjQ1MDg0IDcuMTEgMS42MjI5MUwxNy41IDYuODIyOTFaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJ2dHh0IG10LTUgdGV4dGNsclwiPlByZXZpZXcgbm90XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZyZXNodHh0IG10LTIgdGV4dGNsclwiPlRoZSBzZWxlY3RlZCBjYW1lcmFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJpdGVtLmNsb3NlVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXgtMSBpbWctb3BjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheE9wZW5jbG9zZWNoZWNrbGlzdENETn19e3tpdGVtLnN0b3JlSWR9fS97e2l0ZW0uZGF0ZVN0cmluZ319L29wZXJhdGlvbl9zbmFwcy9jbG9zZS5qcGVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkNoZWNrbGlzdCBWaWRlbyBQbGF5ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIG14LTEgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXB0ZXh0XCI+Q2xvc2luZyBTbmFwPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwdGltZVwiPnt7aXRlbS5jbG9zZVRpbWV9fSAtIHt7aXRlbS5kYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IHNuYXBiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0/LmNsb3NlVGltZUZsYWdcIj5PbiBUaW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyIHNuYXBiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uY2xvc2VUaW1lRmxhZ1wiPkVhcmx5IENsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gKm5nSWY9XCIhdmlld2xvYWRpbmcgJiYgIXZpZXdub0RhdGFcIiBbaXRlbXNQZXJQYWdlXT1cImxpbWl0XCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25TaXplc109J3BhZ2luYXRpb25TaXplcycgW3BhZ2VTaXplXT1cImxpbWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZXZpZXcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ubGVmdCB0ZXh0LWNlbnRlciBwdC0xIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXQtMiBtcy0yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS43MjcxNCAxMi42MzY1TDEzLjM2MzUgOS4wMDAxM0w5LjcyNzE0IDUuMzYzNzdNNC42MzYyMyAxMi42MzY1TDguMjcyNTkgOS4wMDAxM0w0LjYzNjIzIDUuMzYzNzdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuIl19
|