tango-app-ui-analyse-trax 3.3.1-alpha-task.66 → 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.
@@ -6,9 +6,9 @@ import dayjs from "dayjs";
6
6
  import utc from 'dayjs/plugin/utc';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/forms";
9
- import * as i2 from "tango-app-ui-global";
10
- import * as i3 from "../../services/trax.service";
11
- import * as i4 from "@ng-bootstrap/ng-bootstrap";
9
+ import * as i2 from "@ng-bootstrap/ng-bootstrap";
10
+ import * as i3 from "tango-app-ui-global";
11
+ import * as i4 from "../../services/trax.service";
12
12
  import * as i5 from "@angular/router";
13
13
  import * as i6 from "tango-app-ui-shared";
14
14
  import * as i7 from "@angular/common";
@@ -16,15 +16,16 @@ import * as i8 from "ngx-daterangepicker-material";
16
16
  dayjs.extend(utc);
17
17
  export class AddTaskComponent {
18
18
  fb;
19
+ activeModal;
19
20
  gs;
20
21
  traxService;
21
22
  cd;
22
- activeModal;
23
+ modalService;
23
24
  router;
24
25
  toastService;
25
- elRef;
26
26
  taskForm;
27
27
  type;
28
+ sourceCheckList_id;
28
29
  headerData;
29
30
  answerTypes = [
30
31
  { label: 'Descriptive Answer', value: 'descriptive' },
@@ -49,18 +50,22 @@ export class AddTaskComponent {
49
50
  destroy$ = new Subject();
50
51
  taskDetails;
51
52
  inputData;
53
+ checklistInfo;
54
+ storeProfile;
55
+ sectionInfo;
56
+ operationtype;
52
57
  timeDetails = [{ id: '00:00', text: "00:00" }, { id: '00:30', text: "00:30" }, { id: '01:00', text: "01:00" }, { id: '01:30', text: "01:30" }, { id: '02:00', text: "02:00" }, { id: '02:30', text: "02:30" }, { id: '03:00', text: "03:00" }, { id: '03:30', text: "03:30" }, { id: '04:00', text: "04:00" }, { id: '04:30', text: "04:30" }, { id: '05:00', text: "05:00" }, { id: '05:30', text: "05:30" }, { id: '06:00', text: "06:00" }, { id: '06:30', text: "06:30" }, { id: '07:00', text: "07:00" }, { id: '07:30', text: "07:30" }, { id: '08:00', text: "08:00" }, { id: '08:30', text: "08:30" }, { id: '09:00', text: "09:00" }, { id: '09:30', text: "09:30" }, { id: '10:00', text: "10:00" }, { id: '10:30', text: "10:30" },
53
58
  { id: '11:00', text: "11:00" }, { id: '11:30', text: "11:30" }, { id: '12:00', text: "12:00" }, { id: '12:30', text: "12:30" }, { id: '13:00', text: "13:00" }, { id: '13:30', text: "13:30" }, { id: '14:00', text: "14:00" }, { id: '14:30', text: "14:30" }, { id: '15:00', text: "15:00" }, { id: '15:30', text: "15:30" }, { id: '16:00', text: "16:00" }, { id: '16:30', text: "16:30" }, { id: '17:00', text: "17:00" }, { id: '17:30', text: "17:30" }, { id: '18:00', text: "18:00" }, { id: '18:30', text: "18:30" }, { id: '19:00', text: "19:00" }, { id: '19:30', text: "19:30" }, { id: '20:00', text: "20:00" }, { id: '20:30', text: "20:30" }, { id: '21:00', text: "21:00" }, { id: '21:30', text: "21:30" }, { id: '22:00', text: "22:00" }, { id: '22:30', text: "22:30" }, { id: '23:00', text: "23:00" }, { id: '23:30', text: "23:30" }, { id: '24:00', text: "24:00" }
54
59
  ];
55
- constructor(fb, gs, traxService, cd, activeModal, router, toastService, elRef) {
60
+ constructor(fb, activeModal, gs, traxService, cd, modalService, router, toastService) {
56
61
  this.fb = fb;
62
+ this.activeModal = activeModal;
57
63
  this.gs = gs;
58
64
  this.traxService = traxService;
59
65
  this.cd = cd;
60
- this.activeModal = activeModal;
66
+ this.modalService = modalService;
61
67
  this.router = router;
62
68
  this.toastService = toastService;
63
- this.elRef = elRef;
64
69
  this.headerData = JSON.parse(localStorage.getItem('header-filters'));
65
70
  }
66
71
  ngOnInit() {
@@ -82,8 +87,6 @@ export class AddTaskComponent {
82
87
  });
83
88
  for (let i = 0; i < this.taskDetails?.sections?.length; i++) {
84
89
  this.addSectionForm(this.taskDetails.sections[i]);
85
- console.log(this.taskDetails.sections[i]);
86
- console.log(this.taskDetails.sections[i]?.questions);
87
90
  for (let j = 0; j < this.taskDetails.sections[i]?.questions?.length; j++) {
88
91
  this.addQuestionForm(this.taskDetails.sections[i]?.questions[j], i);
89
92
  for (let k = 0; k < this.taskDetails.sections[i]?.questions[j]?.answers?.length; k++) {
@@ -93,9 +96,85 @@ export class AddTaskComponent {
93
96
  }
94
97
  }
95
98
  cancel() {
96
- this.activeModal.close('cancel');
99
+ this.activeModal.close('submit');
100
+ const triggerButton = document.querySelector('#triggerButtonId');
101
+ triggerButton?.focus();
97
102
  }
98
103
  onSubmit() {
104
+ let response = this.taskForm.value.sections;
105
+ const time = dayjs(this.selectedItem, "HH:mm");
106
+ if (this.type === 'redo') {
107
+ let input = {
108
+ "payload": {
109
+ "_id": this.checklistInfo.checklistId,
110
+ "section_id": this.sectionInfo.section_id,
111
+ "qno": response[0].questions[0].qno
112
+ },
113
+ "upsert": {
114
+ "redoStatus": true,
115
+ "redo": true
116
+ }
117
+ };
118
+ if (this.operationtype == 'task') {
119
+ this.traxService.redoTask(input).pipe(takeUntil(this.destroy$)).subscribe({
120
+ next: (res) => {
121
+ if (res.code === 200) {
122
+ this.toastService.getSuccessToast(res?.message);
123
+ this.activeModal.close('submit');
124
+ }
125
+ }
126
+ });
127
+ }
128
+ else {
129
+ this.traxService.redoTaskchecklist(input).pipe(takeUntil(this.destroy$)).subscribe({
130
+ next: (res) => {
131
+ if (res.code === 200) {
132
+ this.toastService.getSuccessToast(res?.message);
133
+ this.activeModal.close('submit');
134
+ }
135
+ }
136
+ });
137
+ }
138
+ }
139
+ else {
140
+ let payload = {
141
+ "checkListName": this.taskForm.value.checklistName,
142
+ "checkListDescription": this.taskForm.value.checklistDescription,
143
+ "processedChecklistId": this.checklistInfo?.checklistId,
144
+ "checkListId": this.sourceCheckList_id,
145
+ "sectionId": this.sectionInfo.section_id,
146
+ "qno": response[0].questions[0].qno,
147
+ "question": [
148
+ {
149
+ "qno": 1,
150
+ "qname": response[0].questions[0].qname,
151
+ "answerType": response[0].questions[0].answerType,
152
+ "runAI": false,
153
+ "runAIDescription": "",
154
+ "allowUploadfromGallery": response[0].questions[0].allowUploadfromGallery,
155
+ "linkType": false,
156
+ "questionReferenceImage": this.uploadedFiles,
157
+ "descriptivetype": response[0].questions[0].descriptivetype,
158
+ "answers": response[0].questions[0].answers
159
+ }
160
+ ],
161
+ "scheduleDate": this.selectedDate.startDate,
162
+ "scheduleEndTime": time.format("hh:mm A"),
163
+ "userEmail": this.checklistInfo?.userEmail,
164
+ "userName": this.checklistInfo?.submittedBy,
165
+ "storeName": this.storeProfile.storeName,
166
+ "clientId": this.storeProfile.client_id,
167
+ "checkListType": "checklistTask" // ['checklistTask','cctv]
168
+ };
169
+ this.traxService.CreatechecklistTask(payload).pipe(takeUntil(this.destroy$)).subscribe({
170
+ next: (res) => {
171
+ if (res.code === 200) {
172
+ this.toastService.getSuccessToast(res?.message);
173
+ this.activeModal.close('submit');
174
+ }
175
+ }
176
+ });
177
+ }
99
178
  }
100
179
  createForm() {
101
180
  this.taskForm = this.fb.group({
@@ -106,7 +185,6 @@ export class AddTaskComponent {
106
185
  this.updateForm();
107
186
  }
108
187
  addSectionForm(section) {
109
- console.log(section);
110
188
  const sectionFormData = this.fb.group({
111
189
  id: [section?.id ?? ''],
112
190
  name: [section?.name ?? ''],
@@ -115,7 +193,6 @@ export class AddTaskComponent {
115
193
  this.taskForm.get('sections').push(sectionFormData);
116
194
  }
117
195
  addQuestionForm(question, sectionIndex, insertIndex) {
118
- console.log(question, sectionIndex, insertIndex);
119
196
  const questionFormData = this.fb.group({
120
197
  qno: [question?.qno ?? (this.getQuestions(sectionIndex)?.length ? this.getQuestions(sectionIndex).length + 1 : 1), [Validators.required]],
121
198
  qname: [question?.qname ?? '', [Validators.required]],
@@ -219,13 +296,19 @@ export class AddTaskComponent {
219
296
  currentTime = '';
220
297
  updateCurrentTime() {
221
298
  const now = new Date();
299
+ const nextHour = new Date();
300
+ nextHour.setHours(now.getHours() + 1);
222
301
  const hours = String(now.getHours()).padStart(2, '0');
223
302
  const minutes = String(Math.floor(now.getMinutes() / 30) * 30).padStart(2, '0');
224
303
  this.currentTime = `${hours}:${minutes}`;
225
- this.selectedItem = this.currentTime;
304
+ const nextHourStr = `${String(nextHour.getHours()).padStart(2, '0')}:00`;
305
+ this.selectedItem = nextHourStr;
226
306
  }
227
307
  isDisabled(time) {
228
- return time < this.currentTime;
308
+ const now = new Date();
309
+ now.setHours(now.getHours() + 1);
310
+ const disabledThreshold = `${String(now.getHours()).padStart(2, '0')}:00`;
311
+ return time < disabledThreshold;
229
312
  }
230
313
  selectItem(value) {
231
314
  this.selectedItem = value;
@@ -323,6 +406,25 @@ export class AddTaskComponent {
323
406
  return;
324
407
  }
325
408
  }
409
+ uploadedFiles = [];
410
+ onFilesSelected(event) {
411
+ if (event.target.files != undefined && event.target.files.length) {
412
+ const formData = new FormData();
413
+ const file = event.target.files[0];
414
+ formData.append('file', file, file.name);
415
+ formData.append('clientId', this.storeProfile.client_id);
416
+ this.traxService.imageupload(formData).pipe(takeUntil(this.destroy$)).subscribe({
417
+ next: (res) => {
418
+ if (res.data.imgUrl) {
419
+ this.uploadedFiles.push(res.data.imgUrl);
420
+ }
421
+ },
422
+ error: (err) => {
423
+ this.toastService.getErrorToast(err?.error?.error?.message || 'Something went wrong');
424
+ }
425
+ });
426
+ }
427
+ }
326
428
  selectedFile;
327
429
  previewUrl;
328
430
  fileInput;
@@ -340,18 +442,28 @@ export class AddTaskComponent {
340
442
  this.fileInput.nativeElement.value = '';
341
443
  }
342
444
  }
343
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddTaskComponent, deps: [{ token: i1.FormBuilder }, { token: i2.GlobalStateService }, { token: i3.TraxService }, { token: i0.ChangeDetectorRef }, { token: i4.NgbActiveModal }, { token: i5.Router }, { token: i6.ToastService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
344
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddTaskComponent, selector: "lib-add-task", inputs: { type: "type", taskDetails: "taskDetails", inputData: "inputData" }, host: { listeners: { "document:click": "closeDropdown($event)" } }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"card group-delete py-0\">\r\n <div *ngIf=\"type ==='createtask'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M30 18H22C21.4696 18 20.9609 18.2107 20.5858 18.5858C20.2107 18.9609 20 19.4696 20 20V36C20 36.5304 20.2107 37.0391 20.5858 37.4142C20.9609 37.7893 21.4696 38 22 38H34C34.5304 38 35.0391 37.7893 35.4142 37.4142C35.7893 37.0391 36 36.5304 36 36V24M30 18L36 24M30 18V24H36M28 34V28M25 31H31\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Name\r\n </label>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\"\r\n placeholder=\"Enter Task Name\" class=\"form-control mb-5\">\r\n <div\r\n class=\"fv-plugins-message-container fv-plugins-message-container--enabled invalid-feedback\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-gray-600\">This Task is linked to </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n {{question.get('qno')?.value}}. {{question.get('qname')?.value}}\r\n\r\n </label>\r\n </div>\r\n <div class=\"row px-5\" *ngIf=\"inputData.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\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>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='image'||inputData.answerType=='descriptiveImage'||inputData.answerType=='multipleImage'||inputData.answerType=='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='multiplechoicesingle'||inputData.answerType=='yes/no'||inputData.answerType=='date'||inputData.answerType=='time'||inputData.answerType=='linearscale'||inputData.answerType=='descriptive' \">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <span class=\"mt-1\">{{item.answer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Description\r\n </label>\r\n <textarea class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Response Type\r\n </label>\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name1 my-3\">\r\n Answer Options\r\n </label>\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"text\" [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"number\" [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n <button (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n\r\n\r\n\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n \r\n\r\n\r\n \r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n \r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\"> \r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n\r\n \r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span 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\" 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\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [showCustomRangeLabel]=\"false\" [alwaysShowCalendars]=\"false\" [autoApply]=\"true\" [singleDatePicker]=\"true\" [ngModelOptions]=\"{standalone: true}\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDate\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n\r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div> \r\n </div> \r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\" (click)=\"onSubmit()\">Create\r\n Task</button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div *ngIf=\"type ==='redo'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M39 20.0001V26.0001M39 26.0001H33M39 26.0001L34.36 21.6401C33.2853 20.5648 31.9556 19.7793 30.4952 19.3568C29.0348 18.9344 27.4911 18.8888 26.0083 19.2243C24.5255 19.5598 23.1518 20.2655 22.0155 21.2755C20.8791 22.2855 20.0172 23.5669 19.51 25.0001M17 36.0001V30.0001M17 30.0001H23M17 30.0001L21.64 34.3601C22.7147 35.4354 24.0444 36.2209 25.5048 36.6433C26.9652 37.0657 28.5089 37.1113 29.9917 36.7758C31.4745 36.4403 32.8482 35.7346 33.9845 34.7247C35.1209 33.7147 35.9828 32.4333 36.49 31.0001\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <h5 class=\"label-name1 my-2\">\r\n Redo\r\n </h5>\r\n <h5 class=\"label-name1 my-2\">\r\n Hygiene Task\r\n </h5>\r\n <div class=\"text-gray-600\">The table on the main room has to be cleaned immediately, because it is too\r\n clumsy to look there..,</div>\r\n\r\n <form [formGroup]=\"taskForm\">\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Comment\r\n </label>\r\n <textarea class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n\r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span 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\" 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\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [showCustomRangeLabel]=\"false\" [alwaysShowCalendars]=\"false\" [autoApply]=\"true\" [singleDatePicker]=\"true\" [ngModelOptions]=\"{standalone: true}\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDate\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckDefault\">\r\n <label class=\"form-check-label label-name\" for=\"flexCheckDefault\">\r\n Mandatory image response\r\n </label>\r\n </div>\r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\" (click)=\"onSubmit()\">Submit</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n</div>", styles: [".label-name{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500;line-height:20px}.form-control{color:var(--Gray-800, #1D2939)!important;font-size:16px!important;font-weight:400!important;line-height:24px!important}.btn-light1{padding:10px 18px!important;border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-transform:capitalize}.label-name1{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500;line-height:24px}.scroll-y{overflow-y:auto;position:relative;overflow-x:hidden}.border-attach{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}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}img.img-logo{width:100%;height:400px!important}.c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0}: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 .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}:host::ng-deep .daterangepicker{position:fixed!important;top:30%!important;left:50%!important;transform:translate(-50%);z-index:1050!important}.image-preview{position:relative;width:150px;height:150px;border:1px solid #ddd;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.image-preview img{width:100%;height:100%;object-fit:cover}.image-preview .remove-icon{position:absolute;top:0;right:0;background:#df0000;color:#fff;border:none;border-radius:50%;width:25px;height:25px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px}.image-preview .remove-icon:hover{background:#8b0000}.disabled{color:#b0b0b0;pointer-events:none}\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: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { 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: i8.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"] }] });
445
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddTaskComponent, deps: [{ token: i1.FormBuilder }, { token: i2.NgbActiveModal }, { token: i3.GlobalStateService }, { token: i4.TraxService }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }, { token: i5.Router }, { token: i6.ToastService }], target: i0.ɵɵFactoryTarget.Component });
446
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddTaskComponent, selector: "lib-add-task", inputs: { type: "type", sourceCheckList_id: "sourceCheckList_id", taskDetails: "taskDetails", inputData: "inputData", checklistInfo: "checklistInfo", storeProfile: "storeProfile", sectionInfo: "sectionInfo", operationtype: "operationtype" }, host: { listeners: { "document:click": "closeDropdown($event)" } }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"card group-delete py-0\">\r\n <div *ngIf=\"type ==='createtask'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M30 18H22C21.4696 18 20.9609 18.2107 20.5858 18.5858C20.2107 18.9609 20 19.4696 20 20V36C20 36.5304 20.2107 37.0391 20.5858 37.4142C20.9609 37.7893 21.4696 38 22 38H34C34.5304 38 35.0391 37.7893 35.4142 37.4142C35.7893 37.0391 36 36.5304 36 36V24M30 18L36 24M30 18V24H36M28 34V28M25 31H31\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Name\r\n </label>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\"\r\n placeholder=\"Enter Task Name\" class=\"form-control mb-5\">\r\n <div\r\n class=\"fv-plugins-message-container fv-plugins-message-container--enabled invalid-feedback\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-gray-600\">This Task is linked to </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n {{question.get('qno')?.value}}. {{question.get('qname')?.value}}\r\n\r\n </label>\r\n </div>\r\n <div class=\"row px-5\" *ngIf=\"inputData.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\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>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='image'||inputData.answerType==='descriptiveImage'||inputData.answerType==='multipleImage'||inputData.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='multiplechoicesingle'||inputData.answerType==='yes/no'||inputData.answerType==='date'||inputData.answerType==='time'||inputData.answerType==='linearscale'||inputData.answerType==='descriptive' \">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <span class=\"mt-1\">{{item.answer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Description\r\n </label>\r\n <textarea [formControl]=\"taskForm.controls.checklistDescription\"\r\n class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Response Type\r\n </label>\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name1 my-3\">\r\n Answer Options\r\n </label>\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"text\" [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"number\" [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n <button (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n\r\n\r\n\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n\r\n\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n\r\n\r\n <div>\r\n <div class=\"form-check form-switch ps-0\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch ps-0\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input me-3\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <div>\r\n <div class=\"form-check form-switch ps-0\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span 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\" type=\"text\" matInput ngxDaterangepickerMd\r\n [drops]=\"'down'\" [opens]=\"'right'\" [showCustomRangeLabel]=\"false\"\r\n [alwaysShowCalendars]=\"false\" [autoApply]=\"true\" [singleDatePicker]=\"true\"\r\n [ngModelOptions]=\"{standalone: true}\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDate\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [value]=\"this.checklistInfo?.submittedBy\" [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n\r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div> \r\n </div> \r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\" [disabled]=\"!this.taskForm.valid\"\r\n (click)=\"onSubmit()\">Create\r\n Task</button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div *ngIf=\"type ==='redo'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M39 20.0001V26.0001M39 26.0001H33M39 26.0001L34.36 21.6401C33.2853 20.5648 31.9556 19.7793 30.4952 19.3568C29.0348 18.9344 27.4911 18.8888 26.0083 19.2243C24.5255 19.5598 23.1518 20.2655 22.0155 21.2755C20.8791 22.2855 20.0172 23.5669 19.51 25.0001M17 36.0001V30.0001M17 30.0001H23M17 30.0001L21.64 34.3601C22.7147 35.4354 24.0444 36.2209 25.5048 36.6433C26.9652 37.0657 28.5089 37.1113 29.9917 36.7758C31.4745 36.4403 32.8482 35.7346 33.9845 34.7247C35.1209 33.7147 35.9828 32.4333 36.49 31.0001\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <h5 class=\"label-name1 my-2\">\r\n Redo\r\n </h5>\r\n <h5 class=\"label-name1 my-2\">\r\n {{checklistInfo.checklistName}}\r\n </h5>\r\n <div class=\"text-gray-600\">\r\n {{question.get('qno')?.value}}. {{question.get('qname')?.value}}\r\n </div>\r\n <div class=\"row px-5\" *ngIf=\"inputData.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\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>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='image'||inputData.answerType==='descriptiveImage'||inputData.answerType==='multipleImage'||inputData.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='multiplechoicesingle'||inputData.answerType==='yes/no'||inputData.answerType==='date'||inputData.answerType==='time'||inputData.answerType==='linearscale'||inputData.answerType==='descriptive' \">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <span class=\"mt-1\">{{item.answer}}</span>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"taskForm\">\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Comment\r\n </label>\r\n <textarea [formControl]=\"taskForm.controls.checklistDescription\"\r\n class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n \r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" 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\" type=\"text\" matInput\r\n ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\"\r\n [showCustomRangeLabel]=\"false\" [alwaysShowCalendars]=\"false\"\r\n [autoApply]=\"true\" [singleDatePicker]=\"true\"\r\n [ngModelOptions]=\"{standalone: true}\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDate\"\r\n (startDateChanged)=\"onStartDateChange($event)\"\r\n [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\"\r\n [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [value]=\"this.checklistInfo?.submittedBy\"\r\n [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckDefault\">\r\n <label class=\"form-check-label label-name\" for=\"flexCheckDefault\">\r\n Mandatory image response\r\n </label>\r\n </div>\r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\"\r\n (click)=\"onSubmit()\">Submit</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n</div>", styles: [".label-name{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500;line-height:20px}.form-control{color:var(--Gray-800, #1D2939)!important;font-size:16px!important;font-weight:400!important;line-height:24px!important}.btn-light1{padding:10px 18px!important;border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-transform:capitalize}.label-name1{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500;line-height:24px}.scroll-y{overflow-y:auto;position:relative;overflow-x:hidden}.border-attach{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}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}img.img-logo{width:100%;height:400px!important}.c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0}: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 .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}:host::ng-deep .daterangepicker{position:fixed!important;top:30%!important;left:50%!important;transform:translate(-50%);z-index:1050!important}.image-preview{position:relative;width:150px;height:150px;border:1px solid #ddd;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.image-preview img{width:100%;height:100%;object-fit:cover}.image-preview .remove-icon{position:absolute;top:0;right:0;background:#df0000;color:#fff;border:none;border-radius:50%;width:25px;height:25px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px}.image-preview .remove-icon:hover{background:#8b0000}.disabled{color:#b0b0b0;pointer-events:none}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}\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: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { 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: i8.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"] }] });
345
447
  }
346
448
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddTaskComponent, decorators: [{
347
449
  type: Component,
348
- args: [{ selector: 'lib-add-task', template: "<div class=\"card group-delete py-0\">\r\n <div *ngIf=\"type ==='createtask'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M30 18H22C21.4696 18 20.9609 18.2107 20.5858 18.5858C20.2107 18.9609 20 19.4696 20 20V36C20 36.5304 20.2107 37.0391 20.5858 37.4142C20.9609 37.7893 21.4696 38 22 38H34C34.5304 38 35.0391 37.7893 35.4142 37.4142C35.7893 37.0391 36 36.5304 36 36V24M30 18L36 24M30 18V24H36M28 34V28M25 31H31\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Name\r\n </label>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\"\r\n placeholder=\"Enter Task Name\" class=\"form-control mb-5\">\r\n <div\r\n class=\"fv-plugins-message-container fv-plugins-message-container--enabled invalid-feedback\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-gray-600\">This Task is linked to </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n {{question.get('qno')?.value}}. {{question.get('qname')?.value}}\r\n\r\n </label>\r\n </div>\r\n <div class=\"row px-5\" *ngIf=\"inputData.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\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>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='image'||inputData.answerType=='descriptiveImage'||inputData.answerType=='multipleImage'||inputData.answerType=='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='multiplechoicesingle'||inputData.answerType=='yes/no'||inputData.answerType=='date'||inputData.answerType=='time'||inputData.answerType=='linearscale'||inputData.answerType=='descriptive' \">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <span class=\"mt-1\">{{item.answer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Description\r\n </label>\r\n <textarea class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Response Type\r\n </label>\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name1 my-3\">\r\n Answer Options\r\n </label>\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"text\" [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"number\" [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n <button (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n\r\n\r\n\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n \r\n\r\n\r\n \r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n \r\n\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\"> \r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n\r\n \r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span 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\" 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\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [showCustomRangeLabel]=\"false\" [alwaysShowCalendars]=\"false\" [autoApply]=\"true\" [singleDatePicker]=\"true\" [ngModelOptions]=\"{standalone: true}\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDate\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n\r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div> \r\n </div> \r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\" (click)=\"onSubmit()\">Create\r\n Task</button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div *ngIf=\"type ==='redo'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M39 20.0001V26.0001M39 26.0001H33M39 26.0001L34.36 21.6401C33.2853 20.5648 31.9556 19.7793 30.4952 19.3568C29.0348 18.9344 27.4911 18.8888 26.0083 19.2243C24.5255 19.5598 23.1518 20.2655 22.0155 21.2755C20.8791 22.2855 20.0172 23.5669 19.51 25.0001M17 36.0001V30.0001M17 30.0001H23M17 30.0001L21.64 34.3601C22.7147 35.4354 24.0444 36.2209 25.5048 36.6433C26.9652 37.0657 28.5089 37.1113 29.9917 36.7758C31.4745 36.4403 32.8482 35.7346 33.9845 34.7247C35.1209 33.7147 35.9828 32.4333 36.49 31.0001\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <h5 class=\"label-name1 my-2\">\r\n Redo\r\n </h5>\r\n <h5 class=\"label-name1 my-2\">\r\n Hygiene Task\r\n </h5>\r\n <div class=\"text-gray-600\">The table on the main room has to be cleaned immediately, because it is too\r\n clumsy to look there..,</div>\r\n\r\n <form [formGroup]=\"taskForm\">\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Comment\r\n </label>\r\n <textarea class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n\r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span 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\" 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\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [showCustomRangeLabel]=\"false\" [alwaysShowCalendars]=\"false\" [autoApply]=\"true\" [singleDatePicker]=\"true\" [ngModelOptions]=\"{standalone: true}\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDate\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckDefault\">\r\n <label class=\"form-check-label label-name\" for=\"flexCheckDefault\">\r\n Mandatory image response\r\n </label>\r\n </div>\r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\" (click)=\"onSubmit()\">Submit</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n</div>", styles: [".label-name{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500;line-height:20px}.form-control{color:var(--Gray-800, #1D2939)!important;font-size:16px!important;font-weight:400!important;line-height:24px!important}.btn-light1{padding:10px 18px!important;border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-transform:capitalize}.label-name1{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500;line-height:24px}.scroll-y{overflow-y:auto;position:relative;overflow-x:hidden}.border-attach{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}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}img.img-logo{width:100%;height:400px!important}.c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0}: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 .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}:host::ng-deep .daterangepicker{position:fixed!important;top:30%!important;left:50%!important;transform:translate(-50%);z-index:1050!important}.image-preview{position:relative;width:150px;height:150px;border:1px solid #ddd;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.image-preview img{width:100%;height:100%;object-fit:cover}.image-preview .remove-icon{position:absolute;top:0;right:0;background:#df0000;color:#fff;border:none;border-radius:50%;width:25px;height:25px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px}.image-preview .remove-icon:hover{background:#8b0000}.disabled{color:#b0b0b0;pointer-events:none}\n"] }]
349
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.GlobalStateService }, { type: i3.TraxService }, { type: i0.ChangeDetectorRef }, { type: i4.NgbActiveModal }, { type: i5.Router }, { type: i6.ToastService }, { type: i0.ElementRef }], propDecorators: { type: [{
450
+ args: [{ selector: 'lib-add-task', template: "<div class=\"card group-delete py-0\">\r\n <div *ngIf=\"type ==='createtask'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M30 18H22C21.4696 18 20.9609 18.2107 20.5858 18.5858C20.2107 18.9609 20 19.4696 20 20V36C20 36.5304 20.2107 37.0391 20.5858 37.4142C20.9609 37.7893 21.4696 38 22 38H34C34.5304 38 35.0391 37.7893 35.4142 37.4142C35.7893 37.0391 36 36.5304 36 36V24M30 18L36 24M30 18V24H36M28 34V28M25 31H31\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <form [formGroup]=\"taskForm\">\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Name\r\n </label>\r\n <input [formControl]=\"taskForm.controls.checklistName\" type=\"text\"\r\n placeholder=\"Enter Task Name\" class=\"form-control mb-5\">\r\n <div\r\n class=\"fv-plugins-message-container fv-plugins-message-container--enabled invalid-feedback\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-gray-600\">This Task is linked to </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n {{question.get('qno')?.value}}. {{question.get('qname')?.value}}\r\n\r\n </label>\r\n </div>\r\n <div class=\"row px-5\" *ngIf=\"inputData.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\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>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='image'||inputData.answerType==='descriptiveImage'||inputData.answerType==='multipleImage'||inputData.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='multiplechoicesingle'||inputData.answerType==='yes/no'||inputData.answerType==='date'||inputData.answerType==='time'||inputData.answerType==='linearscale'||inputData.answerType==='descriptive' \">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <span class=\"mt-1\">{{item.answer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Task Description\r\n </label>\r\n <textarea [formControl]=\"taskForm.controls.checklistDescription\"\r\n class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Response Type\r\n </label>\r\n <select (change)=\"onQuestionChange($event, i, j)\" formControlName=\"answerType\"\r\n class=\"form-select mb-5\">\r\n <option *ngFor=\"let answer of answerTypes\" [value]=\"answer.value\">\r\n {{answer.label}}</option>\r\n </select>\r\n\r\n </div>\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name1 my-3\">\r\n Answer Options\r\n </label>\r\n <div [id]=\"'question-' + i + j\" class=\"question-container mb-10\">\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'descriptive'\">\r\n <div class=\"d-flex mb-5\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"text\" [id]=\"'descriptivetype_text' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_text' + i + j\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\" type=\"radio\"\r\n value=\"number\" [id]=\"'descriptivetype_number' + i + j\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptivetype_number' + i + j\">Number</label>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'yes/no'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"input-group \">\r\n <input formControlName=\"answer\" type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter answer here\">\r\n\r\n <button (click)=\"onAnswerDelete(i, j, k)\"\r\n class=\"btn btn-outline\" type=\"button\">\r\n <svg class=\"cursor-pointer\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path _ngcontent-ng-c1491044170=\"\"\r\n d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <div *ngIf=\"answer.get('answer')?.hasError('required')\"\r\n class=\"text-danger mt-2\">* Answer is required</div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <div (click)=\"addNewAnswer(i, j, 'multiplechoicesingle')\"\r\n class=\"add-reference-btn mb-5 d-flex justify-content-center\">\r\n Add More Answer\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'descriptiveImage' || question.get('answerType')?.value === 'image'\">\r\n\r\n\r\n\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n\r\n\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n\r\n\r\n <div>\r\n <div class=\"form-check form-switch ps-0\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"form-check form-switch ps-0\">\r\n <input formControlName=\"allowUploadfromGallery\"\r\n class=\"form-check-input me-3\" type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <div\r\n class=\"d-flex align-items-center justify-content-between\">\r\n <div>\r\n <div class=\"form-check form-switch ps-0\">\r\n <input\r\n [formControl]=\"question.controls.allowUploadfromGallery\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\" role=\"switch\"\r\n [id]=\"'allow_upload_from_gallery' + i + j\">\r\n <label\r\n class=\"form-check-label check-label\"\r\n [for]=\"'allow_upload_from_gallery' + i + j\">Allow\r\n upload from gallery</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"d-flex align-items-center h-100\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"text\"\r\n [id]=\"'descriptive_answer_validation_text' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_text' + i + j + k\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\"\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"radio\" value=\"number\"\r\n [id]=\"'descriptive_answer_validation_number' + i + j + k\">\r\n <label class=\"cursor-pointer dscriptiveType\"\r\n [for]=\"'descriptive_answer_validation_number' + i + j + k\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'date' || question.get('answerType')?.value === 'time'\">\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'linearscale'\">\r\n <ng-container\r\n *ngFor=\"let answer of getAnswers(i, j).controls; let k = index\">\r\n <ng-container [formGroup]=\"answer\">\r\n <div class=\"col-4\">\r\n <div class=\"d-flex justify-content-between align-items-center \">\r\n <div class=\"me-2\">\r\n <input type=\"number\" formControlName=\"rangeStart\"\r\n class=\"form-control\">\r\n </div>\r\n <div class=\"me-2 check-label\">\r\n to\r\n </div>\r\n <div>\r\n <input type=\"number\" formControlName=\"rangeEnd\"\r\n class=\"form-control\">\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span 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\" type=\"text\" matInput ngxDaterangepickerMd\r\n [drops]=\"'down'\" [opens]=\"'right'\" [showCustomRangeLabel]=\"false\"\r\n [alwaysShowCalendars]=\"false\" [autoApply]=\"true\" [singleDatePicker]=\"true\"\r\n [ngModelOptions]=\"{standalone: true}\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDate\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [value]=\"this.checklistInfo?.submittedBy\" [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n\r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div> \r\n </div> \r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\" [disabled]=\"!this.taskForm.valid\"\r\n (click)=\"onSubmit()\">Create\r\n Task</button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div *ngIf=\"type ==='redo'\" class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M39 20.0001V26.0001M39 26.0001H33M39 26.0001L34.36 21.6401C33.2853 20.5648 31.9556 19.7793 30.4952 19.3568C29.0348 18.9344 27.4911 18.8888 26.0083 19.2243C24.5255 19.5598 23.1518 20.2655 22.0155 21.2755C20.8791 22.2855 20.0172 23.5669 19.51 25.0001M17 36.0001V30.0001M17 30.0001H23M17 30.0001L21.64 34.3601C22.7147 35.4354 24.0444 36.2209 25.5048 36.6433C26.9652 37.0657 28.5089 37.1113 29.9917 36.7758C31.4745 36.4403 32.8482 35.7346 33.9845 34.7247C35.1209 33.7147 35.9828 32.4333 36.49 31.0001\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let section of getSections?.controls; let i = index\">\r\n <ng-container [formGroup]=\"section\">\r\n <ng-container *ngFor=\"let question of getQuestions(i)?.controls; let j = index\">\r\n <ng-container [formGroup]=\"question\">\r\n\r\n <div class=\"modal-body scroll-y w-100 p-1\">\r\n <h5 class=\"label-name1 my-2\">\r\n Redo\r\n </h5>\r\n <h5 class=\"label-name1 my-2\">\r\n {{checklistInfo.checklistName}}\r\n </h5>\r\n <div class=\"text-gray-600\">\r\n {{question.get('qno')?.value}}. {{question.get('qname')?.value}}\r\n </div>\r\n <div class=\"row px-5\" *ngIf=\"inputData.answerType==='video'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\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>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='image'||inputData.answerType==='descriptiveImage'||inputData.answerType==='multipleImage'||inputData.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row px-5\"\r\n *ngIf=\"inputData.answerType==='multiplechoicesingle'||inputData.answerType==='yes/no'||inputData.answerType==='date'||inputData.answerType==='time'||inputData.answerType==='linearscale'||inputData.answerType==='descriptive' \">\r\n <div class=\"col-md-6\" *ngFor=\"let item of inputData.userAnswer\">\r\n <span class=\"mt-1\">{{item.answer}}</span>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"taskForm\">\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Comment\r\n </label>\r\n <textarea [formControl]=\"taskForm.controls.checklistDescription\"\r\n class=\"form-control form-control\" placeholder=\"Enter a permission name\"\r\n name=\"Main entrance signage is cracked, and lights are flickering. Please retake the image\"\r\n rows=\"4\"></textarea>\r\n </div>\r\n <div class=\"fv-row my-3 fv-plugins-icon-container\">\r\n <div class=\"border-attach col-md-3 cursor-pointer\" (click)=\"fileInput.click()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.8666 9.2081L10.2082 16.8664C9.27005 17.8046 7.99757 18.3317 6.67075 18.3317C5.34393 18.3317 4.07145 17.8046 3.13325 16.8664C2.19505 15.9282 1.66797 14.6558 1.66797 13.3289C1.66797 12.0021 2.19505 10.7296 3.13325 9.79144L10.7916 2.1331C11.4171 1.50763 12.2654 1.15625 13.1499 1.15625C14.0345 1.15625 14.8828 1.50763 15.5082 2.1331C16.1337 2.75857 16.4851 3.60689 16.4851 4.49144C16.4851 5.37598 16.1337 6.2243 15.5082 6.84977L7.84158 14.5081C7.52885 14.8208 7.10469 14.9965 6.66242 14.9965C6.22014 14.9965 5.79598 14.8208 5.48325 14.5081C5.17051 14.1954 4.99482 13.7712 4.99482 13.3289C4.99482 12.8867 5.17051 12.4625 5.48325 12.1498L12.5582 5.0831\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span class=\"ms-3\">Add Attachment</span>\r\n <input #fileInput type=\"file\" accept=\".png, .jpg, .jpeg, .svg, .gif\" (change)=\"onFileSelected($event)\" hidden />\r\n </div>\r\n \r\n <div class=\"image-preview mt-2\" *ngIf=\"previewUrl\">\r\n <button class=\"remove-icon\" (click)=\"removeImage()\">\u2716</button>\r\n <img [src]=\"previewUrl\" alt=\"Preview\" />\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row mb-3 fv-plugins-icon-container \">\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">\r\n Due date\r\n </label>\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" 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\" type=\"text\" matInput\r\n ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\"\r\n [showCustomRangeLabel]=\"false\" [alwaysShowCalendars]=\"false\"\r\n [autoApply]=\"true\" [singleDatePicker]=\"true\"\r\n [ngModelOptions]=\"{standalone: true}\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDate\"\r\n (startDateChanged)=\"onStartDateChange($event)\"\r\n [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\"\r\n [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"label-name my-2\">Due time</label>\r\n <div class=\"position-relative w-100\">\r\n <button\r\n type=\"button\"\r\n (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default w-100 btn-outline btn-outline-default rounded-3 mt-1 text-nowrap border-val d-flex justify-content-between h-45px\"\r\n >\r\n <span class=\"svg-icon svg-icon-1 position-absolute\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.6665V4.99984M6.66667 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"ps-12\">{{ selectedItem }}</span>\r\n </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-100 position-absolute z-1 h-200px scroll-y top-50px end-0\">\r\n <ul class=\"list-unstyled\">\r\n <li\r\n *ngFor=\"let item of timeDetails\"\r\n [ngClass]=\"selectedItem === item.text ? 'active' : ''\"\r\n class=\"camera px-5 items fw-semibold cursor-pointer py-2\"\r\n [class.disabled]=\"isDisabled(item.text)\"\r\n (click)=\"selectItem(item.text)\"\r\n >\r\n {{ item.text }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fv-row mb-3 fv-plugins-icon-container\">\r\n <label class=\"label-name my-2\">\r\n Assign to\r\n </label>\r\n <input type=\"text\" class=\"form-control\" [value]=\"this.checklistInfo?.submittedBy\"\r\n [disabled]=\"true\">\r\n\r\n </div>\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckDefault\">\r\n <label class=\"form-check-label label-name\" for=\"flexCheckDefault\">\r\n Mandatory image response\r\n </label>\r\n </div>\r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-primary w-100 ms-3\"\r\n (click)=\"onSubmit()\">Submit</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n</div>", styles: [".label-name{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500;line-height:20px}.form-control{color:var(--Gray-800, #1D2939)!important;font-size:16px!important;font-weight:400!important;line-height:24px!important}.btn-light1{padding:10px 18px!important;border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-transform:capitalize}.label-name1{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500;line-height:24px}.scroll-y{overflow-y:auto;position:relative;overflow-x:hidden}.border-attach{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}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}img.img-logo{width:100%;height:400px!important}.c-card{padding:24px;background:#fff;border-radius:16px}.question-badge{padding:8px 12px;border-radius:6px;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px;cursor:pointer}.question-badge-selected{color:#009bf3;background:#eaf8ff}.question-container{border-radius:8px;border:1px solid #D0D5DD;padding:24px 16px 16px;position:relative}.question-container .question-name{position:absolute;top:-15px;left:15px;padding:0 4px;border-radius:4px;border:.5px solid #D0D5DD;background:#fff;color:#101828;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.add-reference-btn{padding:8px 14px;border-radius:8px;border:1px solid #EAF8FF;background:#eaf8ff;box-shadow:0 1px 2px #1018280d;color:#009bf3;font-size:14px;font-weight:600;line-height:20px;cursor:pointer}.ans-header{color:#101828;font-size:20px;font-weight:600;line-height:30px}.check-label{color:#344054;font-size:14px;font-weight:500;line-height:20px}.check-desc{color:#667085;font-size:14px;font-weight:400;line-height:20px}input[type=checkbox].c-checkbox{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox].c-checkbox:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox].c-checkbox:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.checklist-name{font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklist-desc{font-size:14px;font-weight:400;line-height:18px;text-align:left}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0}: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 .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}:host::ng-deep .daterangepicker{position:fixed!important;top:30%!important;left:50%!important;transform:translate(-50%);z-index:1050!important}.image-preview{position:relative;width:150px;height:150px;border:1px solid #ddd;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.image-preview img{width:100%;height:100%;object-fit:cover}.image-preview .remove-icon{position:absolute;top:0;right:0;background:#df0000;color:#fff;border:none;border-radius:50%;width:25px;height:25px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px}.image-preview .remove-icon:hover{background:#8b0000}.disabled{color:#b0b0b0;pointer-events:none}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}\n"] }]
451
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.NgbActiveModal }, { type: i3.GlobalStateService }, { type: i4.TraxService }, { type: i0.ChangeDetectorRef }, { type: i2.NgbModal }, { type: i5.Router }, { type: i6.ToastService }], propDecorators: { type: [{
452
+ type: Input
453
+ }], sourceCheckList_id: [{
350
454
  type: Input
351
455
  }], taskDetails: [{
352
456
  type: Input
353
457
  }], inputData: [{
354
458
  type: Input
459
+ }], checklistInfo: [{
460
+ type: Input
461
+ }], storeProfile: [{
462
+ type: Input
463
+ }], sectionInfo: [{
464
+ type: Input
465
+ }], operationtype: [{
466
+ type: Input
355
467
  }], closeDropdown: [{
356
468
  type: HostListener,
357
469
  args: ['document:click', ['$event']]
@@ -359,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
359
471
  type: ViewChild,
360
472
  args: ['fileInput']
361
473
  }] } });
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRhc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9hZGQtdGFzay9hZGQtdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2FkZC10YXNrL2FkZC10YXNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBMEIsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTTVGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSxrQ0FBa0MsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSx3Q0FBd0MsRUFBRSxzQ0FBc0MsRUFBRSwrQkFBK0IsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RaLE9BQU8sRUFBRSxPQUFPLEVBQThDLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7QUFFbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQU1sQixNQUFNLE9BQU8sZ0JBQWdCO0lBZ0NQO0lBQXlCO0lBQWdDO0lBQWtDO0lBQThCO0lBQXFDO0lBQXdCO0lBQW1DO0lBL0I3TyxRQUFRLENBQXNCO0lBQ3JCLElBQUksQ0FBSztJQUVsQixVQUFVLENBQWtDO0lBQzVDLFdBQVcsR0FBMkM7UUFDcEQsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtRQUNyRCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtRQUMxQyxFQUFFLEtBQUssRUFBRSwwQ0FBMEMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7UUFDcEYsRUFBRSxLQUFLLEVBQUUsNENBQTRDLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFO1FBQ3hGLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtRQUN0RSxFQUFFLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1FBQ3BELEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDcEQsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtRQUMzRCxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzdDLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQy9DLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0tBQUMsQ0FBQTtJQUNuQyxlQUFlLEdBQStDO1FBQzVELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO1FBQ2xELEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtRQUM1RCxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtLQUFDLENBQUE7SUFDckQsV0FBVyxDQUFNO0lBQ2pCLGFBQWEsQ0FBcUI7SUFDMUIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDeEIsV0FBVyxDQUFLO0lBQ2hCLFNBQVMsQ0FBSztJQUV2QixXQUFXLEdBQU8sQ0FBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUMvb0IsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUMsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFD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QVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUN6QztJQUNILENBQUM7d0dBeFZVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLDhTQ25CN0IsZ2kxQ0EyakJNOzs0RkR4aUJPLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjO2lSQU1mLElBQUk7c0JBQVosS0FBSztnQkFzQkcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQXlMTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBeUhsQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVHJheFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmF4LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQW5zd2VyLCBBbnN3ZXJGb3JtLCBBbnN3ZXJUeXBlLCBIZWFkZXJGaWx0ZXIsIElUYXNrLCBRdWVzdGlvbiwgUXVlc3Rpb25Gb3JtLCBTZWN0aW9uLCBTZWN0aW9uRm9ybSwgVGFza0Zvcm0sIFZhbGlkYXRpb25UeXBlIH0gZnJvbSAnLi9jcmVhdGUtdGFzay5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBkYXRlX3F1ZXN0aW9uX3RlbXBsYXRlLCBkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZSwgZGVzY3JpcHRpdmVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZSwgaW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGUsIGxpbmVhcnNjYWxlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlbXVsdGlwbGVfcXVlc3Rpb25fdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlc2luZ2xlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZUltYWdlX3F1ZXN0aW9uX3RlbXBsYXRlLCB0aW1lX3F1ZXN0aW9uX3RlbXBsYXRlLCB2aWRlb19xdWVzdGlvbl90ZW1wbGF0ZSwgeWVzb3Jub19xdWVzdGlvbl90ZW1wbGF0ZSB9IGZyb20gJy4vY3JlYXRlLXRhc2suZGF0YSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcclxuaW1wb3J0IHsgVGltZVBlcmlvZCB9IGZyb20gJ25neC1kYXRlcmFuZ2VwaWNrZXItbWF0ZXJpYWwvZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudCc7XHJcbmRheWpzLmV4dGVuZCh1dGMpO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hZGQtdGFzaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC10YXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWRkLXRhc2suY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRUYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICB0YXNrRm9ybTogRm9ybUdyb3VwPFRhc2tGb3JtPjtcclxuICBASW5wdXQoKSB0eXBlOiBhbnlcclxuXHJcbiAgaGVhZGVyRGF0YTogSGVhZGVyRmlsdGVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICBhbnN3ZXJUeXBlczogeyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogQW5zd2VyVHlwZSB9W10gPSBbXHJcbiAgICB7IGxhYmVsOiAnRGVzY3JpcHRpdmUgQW5zd2VyJywgdmFsdWU6ICdkZXNjcmlwdGl2ZScgfSxcclxuICAgIHsgbGFiZWw6ICdBL0IgUXVlc3Rpb24nLCB2YWx1ZTogJ3llcy9ubycgfSxcclxuICAgIHsgbGFiZWw6ICdNdWx0aXBsZSBDaG9pY2UgUXVlc3Rpb24gLSBTaW5nbGUgQW5zd2VyJywgdmFsdWU6ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfSxcclxuICAgIHsgbGFiZWw6ICdNdWx0aXBsZSBDaG9pY2UgUXVlc3Rpb24gLSBNdWx0aXBsZSBBbnN3ZXInLCB2YWx1ZTogJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZSB3aXRoIERlc2NyaXB0aW9uJywgdmFsdWU6ICdkZXNjcmlwdGl2ZUltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgSW1hZ2UgYXMgYW5zd2VyJywgdmFsdWU6ICdpbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIHZpZGVvIGFzIGFuc3dlcicsIHZhbHVlOiAndmlkZW8nIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBNdWx0aXBsZSBJbWFnZScsIHZhbHVlOiAnbXVsdGlwbGVJbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdEYXRlIC0gREQvTU0vWVlZWScsIHZhbHVlOiAnZGF0ZScgfSxcclxuICAgIHsgbGFiZWw6ICdMaW5lYXIgU2NhbGUnLCB2YWx1ZTogJ2xpbmVhcnNjYWxlJyB9LFxyXG4gICAgeyBsYWJlbDogJ1RpbWUnLCB2YWx1ZTogJ3RpbWUnIH1dXHJcbiAgdmFsaWRhdGlvblR5cGVzOiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBWYWxpZGF0aW9uVHlwZSB9W10gPSBbXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZScsIHZhbHVlOiAnQ2FwdHVyZSBJbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdEZXNjcmlwdGl2ZSBBbnN3ZXInLCB2YWx1ZTogJ0Rlc2NyaXB0aXZlIEFuc3dlcicgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIFZpZGVvJywgdmFsdWU6ICdDYXB0dXJlIFZpZGVvJyB9XVxyXG4gIGVudmlyb25tZW50OiBhbnk7XHJcbiAgdGFza0NvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHRhc2tEZXRhaWxzOiBhbnlcclxuICBASW5wdXQoKSBpbnB1dERhdGE6IGFueVxyXG5cclxuICB0aW1lRGV0YWlsczphbnkgPSBbe2lkOicwMDowMCcsIHRleHQ6IFwiMDA6MDBcIiB9LCB7aWQ6JzAwOjMwJywgdGV4dDogXCIwMDozMFwiIH0se2lkOicwMTowMCcsIHRleHQ6IFwiMDE6MDBcIiB9LHtpZDonMDE6MzAnLCB0ZXh0OiBcIjAxOjMwXCIgfSx7aWQ6JzAyOjAwJywgdGV4dDogXCIwMjowMFwiIH0se2lkOicwMjozMCcsIHRleHQ6IFwiMDI6MzBcIiB9LHtpZDonMDM6MDAnLCB0ZXh0OiBcIjAzOjAwXCIgfSx7aWQ6JzAzOjMwJywgdGV4dDogXCIwMzozMFwiIH0se2lkOicwNDowMCcsIHRleHQ6IFwiMDQ6MDBcIiB9LHtpZDonMDQ6MzAnLCB0ZXh0OiBcIjA0OjMwXCIgfSx7aWQ6JzA1OjAwJywgdGV4dDogXCIwNTowMFwiIH0se2lkOicwNTozMCcsIHRleHQ6IFwiMDU6MzBcIiB9LHtpZDonMDY6MDAnLCB0ZXh0OiBcIjA2OjAwXCIgfSx7aWQ6JzA2OjMwJywgdGV4dDogXCIwNjozMFwiIH0se2lkOicwNzowMCcsIHRleHQ6IFwiMDc6MDBcIiB9LHtpZDonMDc6MzAnLCB0ZXh0OiBcIjA3OjMwXCIgfSx7aWQ6JzA4OjAwJywgdGV4dDogXCIwODowMFwiIH0se2lkOicwODozMCcsIHRleHQ6IFwiMDg6MzBcIiB9LHtpZDonMDk6MDAnLCB0ZXh0OiBcIjA5OjAwXCIgfSx7aWQ6JzA5OjMwJywgdGV4dDogXCIwOTozMFwiIH0se2lkOicxMDowMCcsIHRleHQ6IFwiMTA6MDBcIiB9LHtpZDonMTA6MzAnLCB0ZXh0OiBcIjEwOjMwXCIgfSxcclxuICAgIHtpZDonMTE6MDAnLCB0ZXh0OiBcIjExOjAwXCIgfSwge2lkOicxMTozMCcsIHRleHQ6IFwiMTE6MzBcIiB9LHtpZDonMTI6MDAnLCB0ZXh0OiBcIjEyOjAwXCIgfSx7aWQ6JzEyOjMwJywgdGV4dDogXCIxMjozMFwiIH0se2lkOicxMzowMCcsIHRleHQ6IFwiMTM6MDBcIiB9LHtpZDonMTM6MzAnLCB0ZXh0OiBcIjEzOjMwXCIgfSx7aWQ6JzE0OjAwJywgdGV4dDogXCIxNDowMFwiIH0se2lkOicxNDozMCcsIHRleHQ6IFwiMTQ6MzBcIiB9LHtpZDonMTU6MDAnLCB0ZXh0OiBcIjE1OjAwXCIgfSx7aWQ6JzE1OjMwJywgdGV4dDogXCIxNTozMFwiIH0se2lkOicxNjowMCcsIHRleHQ6IFwiMTY6MDBcIiB9LHtpZDonMTY6MzAnLCB0ZXh0OiBcIjE2OjMwXCIgfSx7aWQ6JzE3OjAwJywgdGV4dDogXCIxNzowMFwiIH0se2lkOicxNzozMCcsIHRleHQ6IFwiMTc6MzBcIiB9LHtpZDonMTg6MDAnLCB0ZXh0OiBcIjE4OjAwXCIgfSx7aWQ6JzE4OjMwJywgdGV4dDogXCIxODozMFwiIH0se2lkOicxOTowMCcsIHRleHQ6IFwiMTk6MDBcIiB9LHtpZDonMTk6MzAnLCB0ZXh0OiBcIjE5OjMwXCIgfSx7aWQ6JzIwOjAwJywgdGV4dDogXCIyMDowMFwiIH0se2lkOicyMDozMCcsIHRleHQ6IFwiMjA6MzBcIiB9LHtpZDonMjE6MDAnLCB0ZXh0OiBcIjIxOjAwXCIgfSx7aWQ6JzIxOjMwJywgdGV4dDogXCIyMTozMFwiIH0se2lkOicyMjowMCcsIHRleHQ6IFwiMjI6MDBcIiB9LHtpZDonMjI6MzAnLCB0ZXh0OiBcIjIyOjMwXCIgfSx7aWQ6JzIzOjAwJywgdGV4dDogXCIyMzowMFwiIH0se2lkOicyMzozMCcsIHRleHQ6IFwiMjM6MzBcIiB9LHtpZDonMjQ6MDAnLCB0ZXh0OiBcIjI0OjAwXCIgfVxyXG4gIF1cclxuXHJcbiAgXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSwgcHJpdmF0ZSB0cmF4U2VydmljZTogVHJheFNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICAgIHRoaXMuaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJykgYXMgc3RyaW5nKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudlxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZS5zdGFydERhdGUgPSB0aGlzLmRheWpzKCkudXRjKCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKTtcclxuICAgIHRoaXMudXBkYXRlQ3VycmVudFRpbWUoKVxyXG4gIH1cclxuICB0YXNrczogbnVtYmVyW10gPSBbMV07IC8vIExpc3Qgb2YgdGFzayBJRHNcclxuICB0YXNrQ291bnRlcjogbnVtYmVyID0gMTsgLy8gQ291bnRlciB0byBnZW5lcmF0ZSB1bmlxdWUgdGFzayBJRHNcclxuXHJcblxyXG4gIHVwZGF0ZUZvcm0oKXtcclxuICAgIHRoaXMudGFza0Zvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIGNoZWNrbGlzdE5hbWU6IHRoaXMudGFza0RldGFpbHMuY2hlY2tMaXN0TmFtZSA/PyAnJyxcclxuICAgICAgY2hlY2tsaXN0RGVzY3JpcHRpb246IHRoaXMudGFza0RldGFpbHMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPz8gJycsXHJcbiAgICB9KVxyXG4gICAgXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFza0RldGFpbHM/LnNlY3Rpb25zPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmFkZFNlY3Rpb25Gb3JtKHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0pO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRhc2tEZXRhaWxzLnNlY3Rpb25zW2ldKVxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRhc2tEZXRhaWxzLnNlY3Rpb25zW2ldPy5xdWVzdGlvbnMpXHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9ucz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uRm9ybSh0aGlzLnRhc2tEZXRhaWxzLnNlY3Rpb25zW2ldPy5xdWVzdGlvbnNbal0sIGkpO1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy50YXNrRGV0YWlscy5zZWN0aW9uc1tpXT8ucXVlc3Rpb25zW2pdPy5hbnN3ZXJzPy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgdGhpcy5hZGRBbnN3ZXJGb3JtKHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9uc1tqXT8uYW5zd2Vyc1trXSwgaSwgaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnY2FuY2VsJylcclxuICB9XHJcbiAgb25TdWJtaXQoKSB7XHJcblxyXG4gIH1cclxuXHJcblxyXG5jcmVhdGVGb3JtKCkge1xyXG4gIHRoaXMudGFza0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgIGNoZWNrbGlzdE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIGNoZWNrbGlzdERlc2NyaXB0aW9uOiBbJyddLFxyXG4gICAgc2VjdGlvbnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4oW10pXHJcbiAgfSlcclxuICB0aGlzLnVwZGF0ZUZvcm0oKVxyXG5cclxufVxyXG4gIGFkZFNlY3Rpb25Gb3JtKHNlY3Rpb24/OiBTZWN0aW9uKSB7XHJcbiAgICBjb25zb2xlLmxvZyhzZWN0aW9uKVxyXG5cclxuICAgIGNvbnN0IHNlY3Rpb25Gb3JtRGF0YTogRm9ybUdyb3VwPFNlY3Rpb25Gb3JtPiA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZDogW3NlY3Rpb24/LmlkID8/ICcnXSxcclxuICAgICAgbmFtZTogW3NlY3Rpb24/Lm5hbWUgPz8gJyddLFxyXG4gICAgICBxdWVzdGlvbnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KFtdKVxyXG4gICAgfSk7XHJcblxyXG4gICAgKHRoaXMudGFza0Zvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8U2VjdGlvbkZvcm0+PikucHVzaChzZWN0aW9uRm9ybURhdGEpXHJcbiAgfVxyXG5cclxuICBhZGRRdWVzdGlvbkZvcm0ocXVlc3Rpb246IFF1ZXN0aW9uLCBzZWN0aW9uSW5kZXg6IG51bWJlciwgaW5zZXJ0SW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uLHNlY3Rpb25JbmRleCxpbnNlcnRJbmRleClcclxuICAgIGNvbnN0IHF1ZXN0aW9uRm9ybURhdGE6IEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+ID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHFubzogW3F1ZXN0aW9uPy5xbm8gPz8gKHRoaXMuZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleCk/Lmxlbmd0aCA/IHRoaXMuZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleCkubGVuZ3RoICsgMSA6IDEpLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBxbmFtZTogW3F1ZXN0aW9uPy5xbmFtZSA/PyAnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYW5zd2VyVHlwZTogW3F1ZXN0aW9uPy5hbnN3ZXJUeXBlID8/ICdkZXNjcmlwdGl2ZScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJ1bkFJOiBbcXVlc3Rpb24/LnJ1bkFJID8/IGZhbHNlXSxcclxuICAgICAgcnVuQUlEZXNjcmlwdGlvbjogW3F1ZXN0aW9uPy5ydW5BSURlc2NyaXB0aW9uID8/ICcnXSxcclxuICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogW3F1ZXN0aW9uPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5ID8/IGZhbHNlXSxcclxuICAgICAgbGlua1R5cGU6IFtxdWVzdGlvbj8ubGlua1R5cGUgPz8gZmFsc2VdLFxyXG4gICAgICBxdWVzdGlvblJlZmVyZW5jZUltYWdlOiBbcXVlc3Rpb24/LnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UgPz8gJyddLFxyXG4gICAgICBhbnN3ZXJzOiB0aGlzLmZiLmFycmF5PEZvcm1Hcm91cDxBbnN3ZXJGb3JtPj4oW10pXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocXVlc3Rpb24uYW5zd2VyVHlwZSA9PT0gJ2Rlc2NyaXB0aXZlJyB8fCBxdWVzdGlvbi5hbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVJbWFnZScpIHtcclxuICAgICAgcXVlc3Rpb25Gb3JtRGF0YS5hZGRDb250cm9sKCdkZXNjcmlwdGl2ZXR5cGUnLCBuZXcgRm9ybUNvbnRyb2wocXVlc3Rpb24/LmRlc2NyaXB0aXZldHlwZSA/PyAndGV4dCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluc2VydEluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAgICAgLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KS5pbnNlcnQoaW5zZXJ0SW5kZXgsIHF1ZXN0aW9uRm9ybURhdGEpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgICgodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KVxyXG4gICAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pLnB1c2gocXVlc3Rpb25Gb3JtRGF0YSlcclxuICB9XHJcblxyXG4gIGFkZEFuc3dlckZvcm0oYW5zd2VyOiBBbnN3ZXIsIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsIGluc2VydEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhbnN3ZXJGb3JtRGF0YTogRm9ybUdyb3VwPEFuc3dlckZvcm0+ID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGFuc3dlcjogW2Fuc3dlcj8uYW5zd2VyID8/ICcnXSxcclxuICAgICAgYW5zd2Vyb3B0aW9uTnVtYmVyOiBbYW5zd2VyPy5hbnN3ZXJvcHRpb25OdW1iZXIgPz8gKHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpPy5sZW5ndGggPyB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5sZW5ndGggKyAxIDogMSksIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHNvcEZsYWc6IFthbnN3ZXI/LnNvcEZsYWcgPz8gZmFsc2VdLFxyXG4gICAgICB2YWxpZGF0aW9uOiBbYW5zd2VyPy52YWxpZGF0aW9uID8/IGZhbHNlXSxcclxuICAgICAgdmFsaWRhdGlvblR5cGU6IFthbnN3ZXI/LnZhbGlkYXRpb25UeXBlID8/ICcnXSxcclxuICAgICAgcmVmZXJlbmNlSW1hZ2U6IFthbnN3ZXI/LnJlZmVyZW5jZUltYWdlID8/ICcnXSxcclxuICAgICAgc2hvd0xpbmtlZDogW2Fuc3dlcj8uc2hvd0xpbmtlZCA/PyBmYWxzZV0sXHJcbiAgICAgIGxpbmtlZFF1ZXN0aW9uOiBbYW5zd2VyPy5saW5rZWRRdWVzdGlvbiA/PyAwXSxcclxuICAgICAgbmVzdGVkUXVlc3Rpb246IFthbnN3ZXI/Lm5lc3RlZFF1ZXN0aW9uID8/IFtdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFuc3dlclR5cGU6IEFuc3dlclR5cGUgPSAoKHRoaXMudGFza0Zvcm0/LmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHNlY3Rpb25JbmRleCk/LmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChxdWVzdGlvbkluZGV4KT8uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlO1xyXG5cclxuICAgIGlmIChhbnN3ZXJUeXBlID09PSAnZGVzY3JpcHRpdmUnIHx8IGFuc3dlclR5cGUgPT09ICdkZXNjcmlwdGl2ZUltYWdlJyB8fCBhbnN3ZXJUeXBlID09PSAnaW1hZ2UnIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZUltYWdlJyB8fCBhbnN3ZXJUeXBlID09PSAnZGF0ZScgfHwgYW5zd2VyVHlwZSA9PT0gJ2xpbmVhcnNjYWxlJyB8fCBhbnN3ZXJUeXBlID09PSAndGltZScpIHtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgndmFsaWRhdGlvbkFuc3dlcicsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnZhbGlkYXRpb25BbnN3ZXIgPz8gJycpKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbnN3ZXJUeXBlID09PSAneWVzL25vJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZWNob2ljZW11bHRpcGxlJykge1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JywgbmV3IEZvcm1Db250cm9sKGFuc3dlcj8uYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSA/PyBmYWxzZSkpO1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdydW5BSScsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnJ1bkFJID8/IGZhbHNlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuc3dlclR5cGUgPT09ICdsaW5lYXJzY2FsZScpIHtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgncmFuZ2VTdGFydCcsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnJhbmdlU3RhcnQgPz8gMCkpO1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdyYW5nZUVuZCcsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LnJhbmdlRW5kID8/IDApKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYW5zd2VyVHlwZSA9PT0gJ3llcy9ubycgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlc2luZ2xlJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZScgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlSW1hZ2UnKSB7XHJcbiAgICAgIGFuc3dlckZvcm1EYXRhLmFkZENvbnRyb2woJ2Rlc2NyaXB0aXZldHlwZScsIG5ldyBGb3JtQ29udHJvbChhbnN3ZXI/LmRlc2NyaXB0aXZldHlwZSA/PyAndGV4dCcpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5zZXJ0SW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAoKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAgICAgLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KVxyXG4gICAgICAgIC5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPEFuc3dlckZvcm0+PikuaW5zZXJ0KGluc2VydEluZGV4LCBhbnN3ZXJGb3JtRGF0YSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgKCgodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KVxyXG4gICAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pXHJcbiAgICAgIC5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPEFuc3dlckZvcm0+PikucHVzaChhbnN3ZXJGb3JtRGF0YSlcclxuICB9XHJcblxyXG4gIGdldCBnZXRTZWN0aW9ucygpIHtcclxuICAgIHJldHVybiAodGhpcy50YXNrRm9ybT8uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8U2VjdGlvbkZvcm0+PilcclxuICB9XHJcblxyXG4gIGdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICgodGhpcy50YXNrRm9ybT8uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8U2VjdGlvbkZvcm0+PikuYXQoc2VjdGlvbkluZGV4KT8uZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KVxyXG4gIH1cclxuXHJcbiAgZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKCgodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KS5hdChzZWN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+PikuYXQocXVlc3Rpb25JbmRleCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxBbnN3ZXJGb3JtPj4pXHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKGV2ZW50OiBhbnksIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsIGFuc3dlckluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmZpbGVzICE9IHVuZGVmaW5lZCAmJiBldmVudC50YXJnZXQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUsIGZpbGUubmFtZSk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY2xpZW50SWQnLCB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCBhcyBzdHJpbmcpXHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UudGFza0ltYWdldXBsb2FkKGZvcm1EYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuZGF0YS5pbWdVcmwpIHtcclxuICAgICAgICAgICAgaWYgKGFuc3dlckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy5zZXRWYWx1ZShyZXMuZGF0YS5pbWdVcmwpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkuYXQoYW5zd2VySW5kZXgpLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUocmVzLmRhdGEuaW1nVXJsKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdTb21ldGhpbmcgd2VudCB3cm9uZycpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgY2xvc2VEcm9wZG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICBcclxuICAgICAgdGhpcy5kcm9wRG93biA9IGZhbHNlOyBcclxuICB9XHJcbiAgb3BlbkRyb3Bkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZHJvcERvd24gPSAhdGhpcy5kcm9wRG93bjtcclxuICAgXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZEl0ZW06IGFueSA9ICcwMDowMCc7XHJcbiAgZHJvcERvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXJyZW50VGltZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHVwZGF0ZUN1cnJlbnRUaW1lKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGhvdXJzID0gU3RyaW5nKG5vdy5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgbWludXRlcyA9IFN0cmluZyhNYXRoLmZsb29yKG5vdy5nZXRNaW51dGVzKCkgLyAzMCkgKiAzMCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIHRoaXMuY3VycmVudFRpbWUgPSBgJHtob3Vyc306JHttaW51dGVzfWA7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuY3VycmVudFRpbWVcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWQodGltZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGltZSA8IHRoaXMuY3VycmVudFRpbWU7XHJcbiAgfVxyXG4gIHNlbGVjdEl0ZW0odmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB2YWx1ZTtcclxuICAgIHRoaXMuZHJvcERvd24gPSBmYWxzZTtcclxuICB9XHJcbiAgb25EZWxldGVSZWZlcmVuY2VJbWFnZShzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBhbnN3ZXJJbmRleD86IG51bWJlcikge1xyXG4gICAgaWYgKGFuc3dlckluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkuYXQoYW5zd2VySW5kZXgpLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUoJycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy5zZXRWYWx1ZSgnJylcclxuICAgIH1cclxuICB9XHJcbiAgb25BbnN3ZXJEZWxldGUoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkucmVtb3ZlQXQoYW5zd2VySW5kZXgpXHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoJ0Fuc3dlciBkZWxldGVkIHN1Y2Nlc3NmdWxseScpXHJcblxyXG4gIH1cclxuXHJcbiAgb25WYWxpZGF0ZVJlc3BvbnNlQ2hhbmdlKGV2ZW50OiBhbnksIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsIGFuc3dlckluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5hdChhbnN3ZXJJbmRleCkuZ2V0KCdzaG93TGlua2VkJyk/LnNldFZhbHVlKGZhbHNlKVxyXG4gICAgfVxyXG4gIH1cclxuICBhZGROZXdBbnN3ZXIoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgdHlwZTogQW5zd2VyVHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgdHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnKSB7XHJcbiAgICAgIHRoaXMuYWRkQW5zd2VyRm9ybShtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUgYXMgQW5zd2VyLCBzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpXHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnQW5zd2VyIGFkZGVkIHN1Y2Nlc3NmdWxseScpXHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBvblF1ZXN0aW9uQ2hhbmdlKGV2ZW50OiBhbnksIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBxdWVzdGlvblxyXG4gICAgY29uc3QgYW5zd2VyVHlwZTogQW5zd2VyVHlwZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgc3dpdGNoIChhbnN3ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ2Rlc2NyaXB0aXZlJzogcXVlc3Rpb24gPSBkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd5ZXMvbm8nOiBxdWVzdGlvbiA9IHllc29ybm9fcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnOiBxdWVzdGlvbiA9IG11bHRpcGxlY2hvaWNlc2luZ2xlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnOiBxdWVzdGlvbiA9IG11bHRpcGxlY2hvaWNlbXVsdGlwbGVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGVzY3JpcHRpdmVJbWFnZSc6IHF1ZXN0aW9uID0gZGVzY3JpcHRpdmVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbWFnZSc6IHF1ZXN0aW9uID0gaW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlkZW8nOiBxdWVzdGlvbiA9IHZpZGVvX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211bHRpcGxlSW1hZ2UnOiBxdWVzdGlvbiA9IG11bHRpcGxlSW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGF0ZSc6IHF1ZXN0aW9uID0gZGF0ZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdsaW5lYXJzY2FsZSc6IHF1ZXN0aW9uID0gbGluZWFyc2NhbGVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndGltZSc6IHF1ZXN0aW9uID0gdGltZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiBxdWVzdGlvbiA9IGRlc2NyaXB0aXZlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBjb25zdCBxdWVzdGlvbk5hbWUgPSB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8udmFsdWUgfHwgJydcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLnJlbW92ZUF0KHF1ZXN0aW9uSW5kZXgpXHJcblxyXG4gICAgdGhpcy5hZGRRdWVzdGlvbkZvcm0ocXVlc3Rpb24gYXMgUXVlc3Rpb24sIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleClcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8uc2V0VmFsdWUocXVlc3Rpb25OYW1lKVxyXG5cclxuICAgIGlmIChxdWVzdGlvbj8uYW5zd2Vycy5sZW5ndGgpIHtcclxuICAgICAgcXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChlbGVtZW50LCBpZHgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZEFuc3dlckZvcm0oZWxlbWVudCBhcyBBbnN3ZXIsIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCwgaWR4KSAgICAgICBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkRGF0ZTphbnk9e307XHJcbiAgZGF5anMgPWRheWpzO1xyXG4gIGlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgY29uc3QgaXNWYWxpZERhdGUgPSBtID4gdGhpcy5kYXlqcygpO1xyXG4gICAgcmV0dXJuIGlzVmFsaWREYXRlID8gJ2ludmFsaWQtZGF0ZScgOiBmYWxzZTtcclxuICB9XHJcbiAgb25TdGFydERhdGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgICByZXR1cm4gbS5pc0JlZm9yZSh0aGlzLmRheWpzKCksICdkYXknKSA/ICdpbnZhbGlkLWRhdGUnIDogZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBUaW1lUGVyaW9kKSB7XHJcbiAgICBpZiAoIWV2ZW50LmVuZERhdGUgfHwgIWV2ZW50LnN0YXJ0RGF0ZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZWxlY3RlZEZpbGU/OiBGaWxlOyBcclxuICBwcmV2aWV3VXJsPzogYW55OyBcclxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmO1xyXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgICAgIHRoaXMucHJldmlld1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7IFxyXG4gICAgfVxyXG4gIH1cclxuICByZW1vdmVJbWFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5wcmV2aWV3VXJsID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgZ3JvdXAtZGVsZXRlIHB5LTBcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJ0eXBlID09PSdjcmVhdGV0YXNrJ1wiIGNsYXNzPVwiY2FyZC1ib2R5IHB5LTAgZC1mbGV4IGZsZXgtc3RhcnQgZmxleC1jb2x1bW4gcC05IFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMCAxOEgyMkMyMS40Njk2IDE4IDIwLjk2MDkgMTguMjEwNyAyMC41ODU4IDE4LjU4NThDMjAuMjEwNyAxOC45NjA5IDIwIDE5LjQ2OTYgMjAgMjBWMzZDMjAgMzYuNTMwNCAyMC4yMTA3IDM3LjAzOTEgMjAuNTg1OCAzNy40MTQyQzIwLjk2MDkgMzcuNzg5MyAyMS40Njk2IDM4IDIyIDM4SDM0QzM0LjUzMDQgMzggMzUuMDM5MSAzNy43ODkzIDM1LjQxNDIgMzcuNDE0MkMzNS43ODkzIDM3LjAzOTEgMzYgMzYuNTMwNCAzNiAzNlYyNE0zMCAxOEwzNiAyNE0zMCAxOFYyNEgzNk0yOCAzNFYyOE0yNSAzMUgzMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHctMTAwIHAtMVwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInRhc2tGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGdldFNlY3Rpb25zPy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKT8uY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJxdWVzdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbWItMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFzayBOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwidGFza0Zvcm0uY29udHJvbHMuY2hlY2tsaXN0TmFtZVwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgVGFzayBOYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ2LXBsdWdpbnMtbWVzc2FnZS1jb250YWluZXIgZnYtcGx1Z2lucy1tZXNzYWdlLWNvbnRhaW5lci0tZW5hYmxlZCBpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTYwMFwiPlRoaXMgVGFzayBpcyBsaW5rZWQgdG8gPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ2LXJvdyBtYi0zIGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtbmFtZSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLmdldCgncW5vJyk/LnZhbHVlfX0uIHt7cXVlc3Rpb24uZ2V0KCdxbmFtZScpPy52YWx1ZX19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiICpuZ0lmPVwiaW5wdXREYXRhLmFuc3dlclR5cGU9PT0ndmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlucHV0RGF0YS51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBWaWRlbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5wdXREYXRhLmFuc3dlclR5cGU9PT0naW1hZ2UnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09J2Rlc2NyaXB0aXZlSW1hZ2UnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09J211bHRpcGxlSW1hZ2UnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09J211bHRpcGxlY2hvaWNlbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlucHV0RGF0YS51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbnB1dERhdGEuYW5zd2VyVHlwZT09PSdtdWx0aXBsZWNob2ljZXNpbmdsZSd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT0neWVzL25vJ3x8aW5wdXREYXRhLmFuc3dlclR5cGU9PSdkYXRlJ3x8aW5wdXREYXRhLmFuc3dlclR5cGU9PSd0aW1lJ3x8aW5wdXREYXRhLmFuc3dlclR5cGU9PSdsaW5lYXJzY2FsZSd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT0nZGVzY3JpcHRpdmUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpbnB1dERhdGEudXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0xXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2sgRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBwZXJtaXNzaW9uIG5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIk1haW4gZW50cmFuY2Ugc2lnbmFnZSBpcyBjcmFja2VkLCBhbmQgbGlnaHRzIGFyZSBmbGlja2VyaW5nLiBQbGVhc2UgcmV0YWtlIHRoZSBpbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPVwiNFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbWItMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2UgVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFuc3dlciBvZiBhbnN3ZXJUeXBlc1wiIFt2YWx1ZV09XCJhbnN3ZXIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lMSBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnN3ZXIgT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCIncXVlc3Rpb24tJyArIGkgKyBqXCIgY2xhc3M9XCJxdWVzdGlvbi1jb250YWluZXIgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdkZXNjcmlwdGl2ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGl2ZXR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ0ZXh0XCIgW2lkXT1cIidkZXNjcmlwdGl2ZXR5cGVfdGV4dCcgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZldHlwZV90ZXh0JyArIGkgKyBqXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwibnVtYmVyXCIgW2lkXT1cIidkZXNjcmlwdGl2ZXR5cGVfbnVtYmVyJyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInZGVzY3JpcHRpdmV0eXBlX251bWJlcicgKyBpICsgalwiPk51bWJlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICd5ZXMvbm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGFuc3dlciBoZXJlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8uaW52YWxpZCAmJiBhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBBbnN3ZXIgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgYW5zd2VyIGhlcmVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkFuc3dlckRlbGV0ZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGUgYW5zd2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdGVzdFwiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBfbmdjb250ZW50LW5nLWMxNDkxMDQ0MTcwPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUgNUw1IDE1TTUgNUwxNSAxNVwiIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5pbnZhbGlkICYmIGFuc3dlci5nZXQoJ2Fuc3dlcicpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnYW5zd2VyJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIEFuc3dlciBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJhZGROZXdBbnN3ZXIoaSwgaiwgJ211bHRpcGxlY2hvaWNlc2luZ2xlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIG1iLTUgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIE1vcmUgQW5zd2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdkZXNjcmlwdGl2ZUltYWdlJyB8fCBxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdpbWFnZSdcIj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicXVlc3Rpb24uY29udHJvbHMuYWxsb3dVcGxvYWRmcm9tR2FsbGVyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2FsbG93X3VwbG9hZF9mcm9tX2dhbGxlcnknICsgaSArIGpcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPkFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZCBmcm9tIGdhbGxlcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAndmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBjaGVjay1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2FsbG93X3VwbG9hZF9mcm9tX2dhbGxlcnknICsgaSArIGpcIj5BbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdtdWx0aXBsZUltYWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBnZXRBbnN3ZXJzKGksIGopLmNvbnRyb2xzOyBsZXQgayA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJhbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTVcIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJxdWVzdGlvbi5jb250cm9scy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgY2hlY2stbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+QWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkIGZyb20gZ2FsbGVyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl90ZXh0JyArIGkgKyBqICsga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX3RleHQnICsgaSArIGogKyBrXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl9udW1iZXInICsgaSArIGogKyBrXCI+TnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ2RhdGUnIHx8IHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ3RpbWUnXCI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdsaW5lYXJzY2FsZSdcIj5cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInJhbmdlU3RhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMiBjaGVjay1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInJhbmdlRW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zIGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXIgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVlIGRhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgbmd4RGF0ZXJhbmdlcGlja2VyTWQgW2Ryb3BzXT1cIidkb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wZW5zXT1cIidyaWdodCdcIiBbc2hvd0N1c3RvbVJhbmdlTGFiZWxdPVwiZmFsc2VcIiBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiIFthdXRvQXBwbHldPVwidHJ1ZVwiIFtzaW5nbGVEYXRlUGlja2VyXT1cInRydWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZV09XCJ0cnVlXCIgW3Nob3dDYW5jZWxdPVwidHJ1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlXCIgKHN0YXJ0RGF0ZUNoYW5nZWQpPVwib25TdGFydERhdGVDaGFuZ2UoJGV2ZW50KVwiICBbaXNDdXN0b21EYXRlXT1cImlzQ3VzdG9tRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiBuYW1lPVwiZGF0ZXJhbmdlXCIgIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPkR1ZSB0aW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRyb3Bkb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgdy0xMDAgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgbXQtMSB0ZXh0LW5vd3JhcCBib3JkZXItdmFsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTQ1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMy4zMzMzIDEuNjY2NVY0Ljk5OTg0TTYuNjY2NjcgMS42NjY1VjQuOTk5ODRNMi41IDguMzMzMTdIMTcuNU00LjE2NjY3IDMuMzMzMTdIMTUuODMzM0MxNi43NTM4IDMuMzMzMTcgMTcuNSA0LjA3OTM2IDE3LjUgNC45OTk4NFYxNi42NjY1QzE3LjUgMTcuNTg3IDE2Ljc1MzggMTguMzMzMiAxNS44MzMzIDE4LjMzMzJINC4xNjY2N0MzLjI0NjE5IDE4LjMzMzIgMi41IDE3LjU4NyAyLjUgMTYuNjY2NVY0Ljk5OTg0QzIuNSA0LjA3OTM2IDMuMjQ2MTkgMy4zMzMxNyA0LjE2NjY3IDMuMzMzMTdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHMtMTJcIj57eyBzZWxlY3RlZEl0ZW0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3BEb3duXCIgY2xhc3M9XCJjYXJkIHB5LTEgdy0xMDAgcG9zaXRpb24tYWJzb2x1dGUgei0xIGgtMjAwcHggc2Nyb2xsLXkgdG9wLTUwcHggZW5kLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdGltZURldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkSXRlbSA9PT0gaXRlbS50ZXh0ID8gJ2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYW1lcmEgcHgtNSBpdGVtcyBmdy1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBweS0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChpdGVtLnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtLnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ2LXJvdyBtYi0zIGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG15LTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYXR0YWNoIGNvbC1tZC0zIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3Ljg2NjYgOS4yMDgxTDEwLjIwODIgMTYuODY2NEM5LjI3MDA1IDE3LjgwNDYgNy45OTc1NyAxOC4zMzE3IDYuNjcwNzUgMTguMzMxN0M1LjM0MzkzIDE4LjMzMTcgNC4wNzE0NSAxNy44MDQ2IDMuMTMzMjUgMTYuODY2NEMyLjE5NTA1IDE1LjkyODIgMS42Njc5NyAxNC42NTU4IDEuNjY3OTcgMTMuMzI4OUMxLjY2Nzk3IDEyLjAwMjEgMi4xOTUwNSAxMC43Mjk2IDMuMTMzMjUgOS43OTE0NEwxMC43OTE2IDIuMTMzMUMxMS40MTcxIDEuNTA3NjMgMTIuMjY1NCAxLjE1NjI1IDEzLjE0OTkgMS4xNTYyNUMxNC4wMzQ1IDEuMTU2MjUgMTQuODgyOCAxLjUwNzYzIDE1LjUwODIgMi4xMzMxQzE2LjEzMzcgMi43NTg1NyAxNi40ODUxIDMuNjA2ODkgMTYuNDg1MSA0LjQ5MTQ0QzE2LjQ4NTEgNS4zNzU5OCAxNi4xMzM3IDYuMjI0MyAxNS41MDgyIDYuODQ5NzdMNy44NDE1OCAxNC41MDgxQzcuNTI4ODUgMTQuODIwOCA3LjEwNDY5IDE0Ljk5NjUgNi42NjI0MiAxNC45OTY1QzYuMjIwMTQgMTQuOTk2NSA1Ljc5NTk4IDE0LjgyMDggNS40ODMyNSAxNC41MDgxQzUuMTcwNTEgMTQuMTk1NCA0Ljk5NDgyIDEzLjc3MTIgNC45OTQ4MiAxMy4zMjg5QzQuOTk0ODIgMTIuODg2NyA1LjE3MDUxIDEyLjQ2MjUgNS40ODMyNSAxMi4xNDk4TDEyLjU1ODIgNS4wODMxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCI+QWRkIEF0dGFjaG1lbnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLnBuZywgLmpwZywgLmpwZWcsIC5zdmcsIC5naWZcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiBoaWRkZW4gLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1wcmV2aWV3IG10LTJcIiAqbmdJZj1cInByZXZpZXdVcmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUltYWdlKClcIj7inJY8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInByZXZpZXdVcmxcIiBhbHQ9XCJQcmV2aWV3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTUgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJncm91cFwiIGNsYXNzPVwiZC1mbGV4IG10LTMgbWItMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTEwMCBtZS0zXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJhbGVydC10b2FzdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIG1zLTNcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiPkNyZWF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFzazwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ0eXBlID09PSdyZWRvJ1wiIGNsYXNzPVwiY2FyZC1ib2R5IHB5LTAgZC1mbGV4IGZsZXgtc3RhcnQgZmxleC1jb2x1bW4gcC05IFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zOSAyMC4wMDAxVjI2LjAwMDFNMzkgMjYuMDAwMUgzM00zOSAyNi4wMDAxTDM0LjM2IDIxLjY0MDFDMzMuMjg1MyAyMC41NjQ4IDMxLjk1NTYgMTkuNzc5MyAzMC40OTUyIDE5LjM1NjhDMjkuMDM0OCAxOC45MzQ0IDI3LjQ5MTEgMTguODg4OCAyNi4wMDgzIDE5LjIyNDNDMjQuNTI1NSAxOS41NTk4IDIzLjE1MTggMjAuMjY1NSAyMi4wMTU1IDIxLjI3NTVDMjAuODc5MSAyMi4yODU1IDIwLjAxNzIgMjMuNTY2OSAxOS41MSAyNS4wMDAxTTE3IDM2LjAwMDFWMzAuMDAwMU0xNyAzMC4wMDAxSDIzTTE3IDMwLjAwMDFMMjEuNjQgMzQuMzYwMUMyMi43MTQ3IDM1LjQzNTQgMjQuMDQ0NCAzNi4yMjA5IDI1LjUwNDggMzYuNjQzM0MyNi45NjUyIDM3LjA2NTcgMjguNTA4OSAzNy4xMTEzIDI5Ljk5MTcgMzYuNzc1OEMzMS40NzQ1IDM2LjQ0MDMgMzIuODQ4MiAzNS43MzQ2IDMzLjk4NDUgMzQuNzI0N0MzNS4xMjA5IDMzLjcxNDcgMzUuOTgyOCAzMi40MzMzIDM2LjQ5IDMxLjAwMDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSB3LTEwMCBwLTFcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibGFiZWwtbmFtZTEgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgUmVkb1xyXG4gICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJsYWJlbC1uYW1lMSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICBIeWdpZW5lIFRhc2tcclxuICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS02MDBcIj5UaGUgdGFibGUgb24gdGhlIG1haW4gcm9vbSBoYXMgdG8gYmUgY2xlYW5lZCBpbW1lZGlhdGVseSwgYmVjYXVzZSBpdCBpcyB0b29cclxuICAgICAgICAgICAgICAgIGNsdW1zeSB0byBsb29rIHRoZXJlLi4sPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInRhc2tGb3JtXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ2LXJvdyBtYi0zIGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBwZXJtaXNzaW9uIG5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiTWFpbiBlbnRyYW5jZSBzaWduYWdlIGlzIGNyYWNrZWQsIGFuZCBsaWdodHMgYXJlIGZsaWNrZXJpbmcuIFBsZWFzZSByZXRha2UgdGhlIGltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93cz1cIjRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG15LTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYXR0YWNoIGNvbC1tZC0zIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3Ljg2NjYgOS4yMDgxTDEwLjIwODIgMTYuODY2NEM5LjI3MDA1IDE3LjgwNDYgNy45OTc1NyAxOC4zMzE3IDYuNjcwNzUgMTguMzMxN0M1LjM0MzkzIDE4LjMzMTcgNC4wNzE0NSAxNy44MDQ2IDMuMTMzMjUgMTYuODY2NEMyLjE5NTA1IDE1LjkyODIgMS42Njc5NyAxNC42NTU4IDEuNjY3OTcgMTMuMzI4OUMxLjY2Nzk3IDEyLjAwMjEgMi4xOTUwNSAxMC43Mjk2IDMuMTMzMjUgOS43OTE0NEwxMC43OTE2IDIuMTMzMUMxMS40MTcxIDEuNTA3NjMgMTIuMjY1NCAxLjE1NjI1IDEzLjE0OTkgMS4xNTYyNUMxNC4wMzQ1IDEuMTU2MjUgMTQuODgyOCAxLjUwNzYzIDE1LjUwODIgMi4xMzMxQzE2LjEzMzcgMi43NTg1NyAxNi40ODUxIDMuNjA2ODkgMTYuNDg1MSA0LjQ5MTQ0QzE2LjQ4NTEgNS4zNzU5OCAxNi4xMzM3IDYuMjI0MyAxNS41MDgyIDYuODQ5NzdMNy44NDE1OCAxNC41MDgxQzcuNTI4ODUgMTQuODIwOCA3LjEwNDY5IDE0Ljk5NjUgNi42NjI0MiAxNC45OTY1QzYuMjIwMTQgMTQuOTk2NSA1Ljc5NTk4IDE0LjgyMDggNS40ODMyNSAxNC41MDgxQzUuMTcwNTEgMTQuMTk1NCA0Ljk5NDgyIDEzLjc3MTIgNC45OTQ4MiAxMy4zMjg5QzQuOTk0ODIgMTIuODg2NyA1LjE3MDUxIDEyLjQ2MjUgNS40ODMyNSAxMi4xNDk4TDEyLjU1ODIgNS4wODMxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCI+QWRkIEF0dGFjaG1lbnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLnBuZywgLmpwZywgLmpwZWcsIC5zdmcsIC5naWZcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiBoaWRkZW4gLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1wcmV2aWV3IG10LTJcIiAqbmdJZj1cInByZXZpZXdVcmxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUltYWdlKClcIj7inJY8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInByZXZpZXdVcmxcIiBhbHQ9XCJQcmV2aWV3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1ZSBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMy4zMzMzIDEuNjY2NjNWNC45OTk5Nk02LjY2NjY3IDEuNjY2NjNWNC45OTk5Nk0yLjUgOC4zMzMyOUgxNy41TTQuMTY2NjcgMy4zMzMyOUgxNS44MzMzQzE2Ljc1MzggMy4zMzMyOSAxNy41IDQuMDc5NDggMTcuNSA0Ljk5OTk2VjE2LjY2NjZDMTcuNSAxNy41ODcxIDE2Ljc1MzggMTguMzMzMyAxNS44MzMzIDE4LjMzMzNINC4xNjY2N0MzLjI0NjE5IDE4LjMzMzMgMi41IDE3LjU4NzEgMi41IDE2LjY2NjZWNC45OTk5NkMyLjUgNC4wNzk0OCAzLjI0NjE5IDMuMzMzMjkgNC4xNjY2NyAzLjMzMzI5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmeC1kYXRlLXJhbmdlIGZvcm0tY29udHJvbCBwcy0xNFwiICB0eXBlPVwidGV4dFwiIG1hdElucHV0IG5neERhdGVyYW5nZXBpY2tlck1kIFtkcm9wc109XCInZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuc109XCIncmlnaHQnXCIgW3Nob3dDdXN0b21SYW5nZUxhYmVsXT1cImZhbHNlXCIgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwiZmFsc2VcIiBbYXV0b0FwcGx5XT1cInRydWVcIiBbc2luZ2xlRGF0ZVBpY2tlcl09XCJ0cnVlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiIFtzaG93Q2FuY2VsXT1cInRydWVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiIChzdGFydERhdGVDaGFuZ2VkKT1cIm9uU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIiAgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTS1ZWVlZJywgZmlyc3REYXk6IDEsIG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgbmFtZT1cImRhdGVyYW5nZVwiICBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5EdWUgdGltZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IHctMTAwIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIG10LTEgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC00NXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuMzMzMyAxLjY2NjVWNC45OTk4NE02LjY2NjY3IDEuNjY2NVY0Ljk5OTg0TTIuNSA4LjMzMzE3SDE3LjVNNC4xNjY2NyAzLjMzMzE3SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzE3IDE3LjUgNC4wNzkzNiAxNy41IDQuOTk5ODRWMTYuNjY2NUMxNy41IDE3LjU4NyAxNi43NTM4IDE4LjMzMzIgMTUuODMzMyAxOC4zMzMySDQuMTY2NjdDMy4yNDYxOSAxOC4zMzMyIDIuNSAxNy41ODcgMi41IDE2LjY2NjVWNC45OTk4NEMyLjUgNC4wNzkzNiAzLjI0NjE5IDMuMzMzMTcgNC4xNjY2NyAzLjMzMzE3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBzLTEyXCI+e3sgc2VsZWN0ZWRJdGVtIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wRG93blwiIGNsYXNzPVwiY2FyZCBweS0xIHctMTAwIHBvc2l0aW9uLWFic29sdXRlIHotMSBoLTIwMHB4IHNjcm9sbC15IHRvcC01MHB4IGVuZC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRpbWVEZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZEl0ZW0gPT09IGl0ZW0udGV4dCA/ICdhY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FtZXJhIHB4LTUgaXRlbXMgZnctc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgcHktMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWQoaXRlbS50ZXh0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbS50ZXh0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ24gdG9cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2Rpc2FibGVkXT1cInRydWVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiXCIgaWQ9XCJmbGV4Q2hlY2tEZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBsYWJlbC1uYW1lXCIgZm9yPVwiZmxleENoZWNrRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYW5kYXRvcnkgaW1hZ2UgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC01IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwiZ3JvdXBcIiBjbGFzcz1cImQtZmxleCBtdC0zIG1iLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0xMDAgbWUtM1wiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYWxlcnQtdG9hc3RcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBtcy0zXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5TdWJtaXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRhc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9hZGQtdGFzay9hZGQtdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2FkZC10YXNrL2FkZC10YXNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBMEIsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTTVGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSxrQ0FBa0MsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSx3Q0FBd0MsRUFBRSxzQ0FBc0MsRUFBRSwrQkFBK0IsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RaLE9BQU8sRUFBRSxPQUFPLEVBQThDLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7QUFFbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQU1sQixNQUFNLE9BQU8sZ0JBQWdCO0lBc0NQO0lBQXlCO0lBQXFDO0lBQWdDO0lBQWtDO0lBQStCO0lBQWdDO0lBQXdCO0lBckMzTyxRQUFRLENBQXNCO0lBQ3JCLElBQUksQ0FBSztJQUNULGtCQUFrQixDQUFLO0lBR2hDLFVBQVUsQ0FBa0M7SUFDNUMsV0FBVyxHQUEyQztRQUNwRCxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3JELEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQzFDLEVBQUUsS0FBSyxFQUFFLDBDQUEwQyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRTtRQUNwRixFQUFFLEtBQUssRUFBRSw0Q0FBNEMsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUU7UUFDeEYsRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1FBQ3RFLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDcEQsRUFBRSxLQUFLLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtRQUNwRCxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO1FBQzNELEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDN0MsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDL0MsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7S0FBQyxDQUFBO0lBQ25DLGVBQWUsR0FBK0M7UUFDNUQsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7UUFDbEQsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO1FBQzVELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO0tBQUMsQ0FBQTtJQUNyRCxXQUFXLENBQU07SUFDakIsYUFBYSxDQUFxQjtJQUMxQixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN4QixXQUFXLENBQUs7SUFDaEIsU0FBUyxDQUFLO0lBQ2QsYUFBYSxDQUFLO0lBQ2xCLFlBQVksQ0FBSztJQUNqQixXQUFXLENBQUs7SUFDaEIsYUFBYSxDQUFLO0lBRTNCLFdBQVcsR0FBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1FBQ2x0QixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFP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IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQW5zd2VyLCBBbnN3ZXJGb3JtLCBBbnN3ZXJUeXBlLCBIZWFkZXJGaWx0ZXIsIElUYXNrLCBRdWVzdGlvbiwgUXVlc3Rpb25Gb3JtLCBTZWN0aW9uLCBTZWN0aW9uRm9ybSwgVGFza0Zvcm0sIFZhbGlkYXRpb25UeXBlIH0gZnJvbSAnLi9jcmVhdGUtdGFzay5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBkYXRlX3F1ZXN0aW9uX3RlbXBsYXRlLCBkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZSwgZGVzY3JpcHRpdmVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZSwgaW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGUsIGxpbmVhcnNjYWxlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlbXVsdGlwbGVfcXVlc3Rpb25fdGVtcGxhdGUsIG11bHRpcGxlY2hvaWNlc2luZ2xlX3F1ZXN0aW9uX3RlbXBsYXRlLCBtdWx0aXBsZUltYWdlX3F1ZXN0aW9uX3RlbXBsYXRlLCB0aW1lX3F1ZXN0aW9uX3RlbXBsYXRlLCB2aWRlb19xdWVzdGlvbl90ZW1wbGF0ZSwgeWVzb3Jub19xdWVzdGlvbl90ZW1wbGF0ZSB9IGZyb20gJy4vY3JlYXRlLXRhc2suZGF0YSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcclxuaW1wb3J0IHsgVGltZVBlcmlvZCB9IGZyb20gJ25neC1kYXRlcmFuZ2VwaWNrZXItbWF0ZXJpYWwvZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudCc7XHJcbmRheWpzLmV4dGVuZCh1dGMpO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hZGQtdGFzaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC10YXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWRkLXRhc2suY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRUYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICB0YXNrRm9ybTogRm9ybUdyb3VwPFRhc2tGb3JtPjtcclxuICBASW5wdXQoKSB0eXBlOiBhbnlcclxuICBASW5wdXQoKSBzb3VyY2VDaGVja0xpc3RfaWQ6IGFueVxyXG5cclxuXHJcbiAgaGVhZGVyRGF0YTogSGVhZGVyRmlsdGVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICBhbnN3ZXJUeXBlczogeyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogQW5zd2VyVHlwZSB9W10gPSBbXHJcbiAgICB7IGxhYmVsOiAnRGVzY3JpcHRpdmUgQW5zd2VyJywgdmFsdWU6ICdkZXNjcmlwdGl2ZScgfSxcclxuICAgIHsgbGFiZWw6ICdBL0IgUXVlc3Rpb24nLCB2YWx1ZTogJ3llcy9ubycgfSxcclxuICAgIHsgbGFiZWw6ICdNdWx0aXBsZSBDaG9pY2UgUXVlc3Rpb24gLSBTaW5nbGUgQW5zd2VyJywgdmFsdWU6ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfSxcclxuICAgIHsgbGFiZWw6ICdNdWx0aXBsZSBDaG9pY2UgUXVlc3Rpb24gLSBNdWx0aXBsZSBBbnN3ZXInLCB2YWx1ZTogJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZSB3aXRoIERlc2NyaXB0aW9uJywgdmFsdWU6ICdkZXNjcmlwdGl2ZUltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgSW1hZ2UgYXMgYW5zd2VyJywgdmFsdWU6ICdpbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIHZpZGVvIGFzIGFuc3dlcicsIHZhbHVlOiAndmlkZW8nIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBNdWx0aXBsZSBJbWFnZScsIHZhbHVlOiAnbXVsdGlwbGVJbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdEYXRlIC0gREQvTU0vWVlZWScsIHZhbHVlOiAnZGF0ZScgfSxcclxuICAgIHsgbGFiZWw6ICdMaW5lYXIgU2NhbGUnLCB2YWx1ZTogJ2xpbmVhcnNjYWxlJyB9LFxyXG4gICAgeyBsYWJlbDogJ1RpbWUnLCB2YWx1ZTogJ3RpbWUnIH1dXHJcbiAgdmFsaWRhdGlvblR5cGVzOiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBWYWxpZGF0aW9uVHlwZSB9W10gPSBbXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZScsIHZhbHVlOiAnQ2FwdHVyZSBJbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdEZXNjcmlwdGl2ZSBBbnN3ZXInLCB2YWx1ZTogJ0Rlc2NyaXB0aXZlIEFuc3dlcicgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIFZpZGVvJywgdmFsdWU6ICdDYXB0dXJlIFZpZGVvJyB9XVxyXG4gIGVudmlyb25tZW50OiBhbnk7XHJcbiAgdGFza0NvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHRhc2tEZXRhaWxzOiBhbnlcclxuICBASW5wdXQoKSBpbnB1dERhdGE6IGFueVxyXG4gIEBJbnB1dCgpIGNoZWNrbGlzdEluZm86IGFueVxyXG4gIEBJbnB1dCgpIHN0b3JlUHJvZmlsZTogYW55XHJcbiAgQElucHV0KCkgc2VjdGlvbkluZm86IGFueVxyXG4gIEBJbnB1dCgpIG9wZXJhdGlvbnR5cGU6IGFueVxyXG5cclxuICB0aW1lRGV0YWlsczogYW55ID0gW3sgaWQ6ICcwMDowMCcsIHRleHQ6IFwiMDA6MDBcIiB9LCB7IGlkOiAnMDA6MzAnLCB0ZXh0OiBcIjAwOjMwXCIgfSwgeyBpZDogJzAxOjAwJywgdGV4dDogXCIwMTowMFwiIH0sIHsgaWQ6ICcwMTozMCcsIHRleHQ6IFwiMDE6MzBcIiB9LCB7IGlkOiAnMDI6MDAnLCB0ZXh0OiBcIjAyOjAwXCIgfSwgeyBpZDogJzAyOjMwJywgdGV4dDogXCIwMjozMFwiIH0sIHsgaWQ6ICcwMzowMCcsIHRleHQ6IFwiMDM6MDBcIiB9LCB7IGlkOiAnMDM6MzAnLCB0ZXh0OiBcIjAzOjMwXCIgfSwgeyBpZDogJzA0OjAwJywgdGV4dDogXCIwNDowMFwiIH0sIHsgaWQ6ICcwNDozMCcsIHRleHQ6IFwiMDQ6MzBcIiB9LCB7IGlkOiAnMDU6MDAnLCB0ZXh0OiBcIjA1OjAwXCIgfSwgeyBpZDogJzA1OjMwJywgdGV4dDogXCIwNTozMFwiIH0sIHsgaWQ6ICcwNjowMCcsIHRleHQ6IFwiMDY6MDBcIiB9LCB7IGlkOiAnMDY6MzAnLCB0ZXh0OiBcIjA2OjMwXCIgfSwgeyBpZDogJzA3OjAwJywgdGV4dDogXCIwNzowMFwiIH0sIHsgaWQ6ICcwNzozMCcsIHRleHQ6IFwiMDc6MzBcIiB9LCB7IGlkOiAnMDg6MDAnLCB0ZXh0OiBcIjA4OjAwXCIgfSwgeyBpZDogJzA4OjMwJywgdGV4dDogXCIwODozMFwiIH0sIHsgaWQ6ICcwOTowMCcsIHRleHQ6IFwiMDk6MDBcIiB9LCB7IGlkOiAnMDk6MzAnLCB0ZXh0OiBcIjA5OjMwXCIgfSwgeyBpZDogJzEwOjAwJywgdGV4dDogXCIxMDowMFwiIH0sIHsgaWQ6ICcxMDozMCcsIHRleHQ6IFwiMTA6MzBcIiB9LFxyXG4gIHsgaWQ6ICcxMTowMCcsIHRleHQ6IFwiMTE6MDBcIiB9LCB7IGlkOiAnMTE6MzAnLCB0ZXh0OiBcIjExOjMwXCIgfSwgeyBpZDogJzEyOjAwJywgdGV4dDogXCIxMjowMFwiIH0sIHsgaWQ6ICcxMjozMCcsIHRleHQ6IFwiMTI6MzBcIiB9LCB7IGlkOiAnMTM6MDAnLCB0ZXh0OiBcIjEzOjAwXCIgfSwgeyBpZDogJzEzOjMwJywgdGV4dDogXCIxMzozMFwiIH0sIHsgaWQ6ICcxNDowMCcsIHRleHQ6IFwiMTQ6MDBcIiB9LCB7IGlkOiAnMTQ6MzAnLCB0ZXh0OiBcIjE0OjMwXCIgfSwgeyBpZDogJzE1OjAwJywgdGV4dDogXCIxNTowMFwiIH0sIHsgaWQ6ICcxNTozMCcsIHRleHQ6IFwiMTU6MzBcIiB9LCB7IGlkOiAnMTY6MDAnLCB0ZXh0OiBcIjE2OjAwXCIgfSwgeyBpZDogJzE2OjMwJywgdGV4dDogXCIxNjozMFwiIH0sIHsgaWQ6ICcxNzowMCcsIHRleHQ6IFwiMTc6MDBcIiB9LCB7IGlkOiAnMTc6MzAnLCB0ZXh0OiBcIjE3OjMwXCIgfSwgeyBpZDogJzE4OjAwJywgdGV4dDogXCIxODowMFwiIH0sIHsgaWQ6ICcxODozMCcsIHRleHQ6IFwiMTg6MzBcIiB9LCB7IGlkOiAnMTk6MDAnLCB0ZXh0OiBcIjE5OjAwXCIgfSwgeyBpZDogJzE5OjMwJywgdGV4dDogXCIxOTozMFwiIH0sIHsgaWQ6ICcyMDowMCcsIHRleHQ6IFwiMjA6MDBcIiB9LCB7IGlkOiAnMjA6MzAnLCB0ZXh0OiBcIjIwOjMwXCIgfSwgeyBpZDogJzIxOjAwJywgdGV4dDogXCIyMTowMFwiIH0sIHsgaWQ6ICcyMTozMCcsIHRleHQ6IFwiMjE6MzBcIiB9LCB7IGlkOiAnMjI6MDAnLCB0ZXh0OiBcIjIyOjAwXCIgfSwgeyBpZDogJzIyOjMwJywgdGV4dDogXCIyMjozMFwiIH0sIHsgaWQ6ICcyMzowMCcsIHRleHQ6IFwiMjM6MDBcIiB9LCB7IGlkOiAnMjM6MzAnLCB0ZXh0OiBcIjIzOjMwXCIgfSwgeyBpZDogJzI0OjAwJywgdGV4dDogXCIyNDowMFwiIH1cclxuICBdXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSwgcHJpdmF0ZSB0cmF4U2VydmljZTogVHJheFNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmhlYWRlckRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIGFzIHN0cmluZylcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGUuc3RhcnREYXRlID0gdGhpcy5kYXlqcygpLnV0YygpLmZvcm1hdChcIkRELU1NLVlZWVlcIik7XHJcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRUaW1lKClcclxuICB9XHJcbiAgdGFza3M6IG51bWJlcltdID0gWzFdOyAvLyBMaXN0IG9mIHRhc2sgSURzXHJcbiAgdGFza0NvdW50ZXI6IG51bWJlciA9IDE7IC8vIENvdW50ZXIgdG8gZ2VuZXJhdGUgdW5pcXVlIHRhc2sgSURzXHJcblxyXG5cclxuICB1cGRhdGVGb3JtKCkge1xyXG4gICAgdGhpcy50YXNrRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgY2hlY2tsaXN0TmFtZTogdGhpcy50YXNrRGV0YWlscy5jaGVja0xpc3ROYW1lID8/ICcnLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogdGhpcy50YXNrRGV0YWlscy5jaGVja0xpc3REZXNjcmlwdGlvbiA/PyAnJyxcclxuICAgIH0pXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhc2tEZXRhaWxzPy5zZWN0aW9ucz8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5hZGRTZWN0aW9uRm9ybSh0aGlzLnRhc2tEZXRhaWxzLnNlY3Rpb25zW2ldKTtcclxuICAgICAgXHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9ucz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICB0aGlzLmFkZFF1ZXN0aW9uRm9ybSh0aGlzLnRhc2tEZXRhaWxzLnNlY3Rpb25zW2ldPy5xdWVzdGlvbnNbal0sIGkpO1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy50YXNrRGV0YWlscy5zZWN0aW9uc1tpXT8ucXVlc3Rpb25zW2pdPy5hbnN3ZXJzPy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgdGhpcy5hZGRBbnN3ZXJGb3JtKHRoaXMudGFza0RldGFpbHMuc2VjdGlvbnNbaV0/LnF1ZXN0aW9uc1tqXT8uYW5zd2Vyc1trXSwgaSwgaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ3N1Ym1pdCcpXHJcbiAgICBjb25zdCB0cmlnZ2VyQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RyaWdnZXJCdXR0b25JZCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdHJpZ2dlckJ1dHRvbj8uZm9jdXMoKTtcclxuICB9XHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgIFxyXG5cclxuICAgIGxldCByZXNwb25zZTogYW55ID0gdGhpcy50YXNrRm9ybS52YWx1ZS5zZWN0aW9uc1xyXG5cclxuXHJcbiAgICBjb25zdCB0aW1lID0gZGF5anModGhpcy5zZWxlY3RlZEl0ZW0sIFwiSEg6bW1cIilcclxuXHJcbiAgICBpZiAodGhpcy50eXBlID09PSAncmVkbycpIHtcclxuICAgICAgXHJcbiAgICAgIGxldCBpbnB1dCA9IHtcclxuICAgICAgICBcInBheWxvYWRcIjoge1xyXG4gICAgICAgICAgXCJfaWRcIjogdGhpcy5jaGVja2xpc3RJbmZvLmNoZWNrbGlzdElkLFxyXG4gICAgICAgICAgXCJzZWN0aW9uX2lkXCI6dGhpcy5zZWN0aW9uSW5mby5zZWN0aW9uX2lkLFxyXG4gICAgICAgICAgXCJxbm9cIjogcmVzcG9uc2VbMF0ucXVlc3Rpb25zWzBdLnFub1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJ1cHNlcnRcIjoge1xyXG4gICAgICAgICAgXCJyZWRvU3RhdHVzXCI6IHRydWUsXHJcbiAgICAgICAgICBcInJlZG9cIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGlmKHRoaXMub3BlcmF0aW9udHlwZSA9PSAndGFzaycpe1xyXG4gICAgICAgIHRoaXMudHJheFNlcnZpY2UucmVkb1Rhc2soaW5wdXQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8ubWVzc2FnZSlcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdzdWJtaXQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMudHJheFNlcnZpY2UucmVkb1Rhc2tjaGVja2xpc3QoaW5wdXQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8ubWVzc2FnZSlcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdzdWJtaXQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgXCJjaGVja0xpc3ROYW1lXCI6IHRoaXMudGFza0Zvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgICBcImNoZWNrTGlzdERlc2NyaXB0aW9uXCI6IHRoaXMudGFza0Zvcm0udmFsdWUuY2hlY2tsaXN0RGVzY3JpcHRpb24sXHJcbiAgICAgICAgXCJwcm9jZXNzZWRDaGVja2xpc3RJZFwiOiB0aGlzLmNoZWNrbGlzdEluZm8/LmNoZWNrbGlzdElkLFxyXG4gICAgICAgIFwiY2hlY2tMaXN0SWRcIjp0aGlzLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgICBcInNlY3Rpb25JZFwiOnRoaXMuc2VjdGlvbkluZm8uc2VjdGlvbl9pZCxcclxuICAgICAgICBcInFub1wiOiByZXNwb25zZVswXS5xdWVzdGlvbnNbMF0ucW5vLFxyXG4gICAgICAgIFwicXVlc3Rpb25cIjogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcInFub1wiOiAxLFxyXG4gICAgICAgICAgICBcInFuYW1lXCI6IHJlc3BvbnNlWzBdLnF1ZXN0aW9uc1swXS5xbmFtZSxcclxuICAgICAgICAgICAgXCJhbnN3ZXJUeXBlXCI6IHJlc3BvbnNlWzBdLnF1ZXN0aW9uc1swXS5hbnN3ZXJUeXBlLFxyXG4gICAgICAgICAgICBcInJ1bkFJXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICBcInJ1bkFJRGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJhbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCI6IHJlc3BvbnNlWzBdLnF1ZXN0aW9uc1swXS5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5LFxyXG4gICAgICAgICAgICBcImxpbmtUeXBlXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICBcInF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VcIjogdGhpcy51cGxvYWRlZEZpbGVzLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aXZldHlwZVwiOiByZXNwb25zZVswXS5xdWVzdGlvbnNbMF0uZGVzY3JpcHRpdmV0eXBlLFxyXG4gICAgICAgICAgICBcImFuc3dlcnNcIjogcmVzcG9uc2VbMF0ucXVlc3Rpb25zWzBdLmFuc3dlcnNcclxuICAgICAgICAgIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIFwic2NoZWR1bGVEYXRlXCI6IHRoaXMuc2VsZWN0ZWREYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgICBcInNjaGVkdWxlRW5kVGltZVwiOiB0aW1lLmZvcm1hdChcImhoOm1tIEFcIiksXHJcbiAgICAgICAgXCJ1c2VyRW1haWxcIjogdGhpcy5jaGVja2xpc3RJbmZvPy51c2VyRW1haWwsXHJcbiAgICAgICAgXCJ1c2VyTmFtZVwiOiB0aGlzLmNoZWNrbGlzdEluZm8/LnN1Ym1pdHRlZEJ5LFxyXG4gICAgICAgIFwic3RvcmVOYW1lXCI6IHRoaXMuc3RvcmVQcm9maWxlLnN0b3JlTmFtZSxcclxuICAgICAgICBcImNsaWVudElkXCI6IHRoaXMuc3RvcmVQcm9maWxlLmNsaWVudF9pZCxcclxuICAgICAgICBcImNoZWNrTGlzdFR5cGVcIjogXCJjaGVja2xpc3RUYXNrXCIgIC8vIFsnY2hlY2tsaXN0VGFzaycsJ2NjdHZdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UuQ3JlYXRlY2hlY2tsaXN0VGFzayhwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXM/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ3N1Ym1pdCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuICBcclxuXHJcbiAgY3JlYXRlRm9ybSgpIHtcclxuICAgIHRoaXMudGFza0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgY2hlY2tsaXN0TmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogWycnXSxcclxuICAgICAgc2VjdGlvbnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4oW10pXHJcbiAgICB9KVxyXG4gICAgdGhpcy51cGRhdGVGb3JtKClcclxuXHJcbiAgfVxyXG4gIGFkZFNlY3Rpb25Gb3JtKHNlY3Rpb24/OiBTZWN0aW9uKSB7XHJcblxyXG4gICAgY29uc3Qgc2VjdGlvbkZvcm1EYXRhOiBGb3JtR3JvdXA8U2VjdGlvbkZvcm0+ID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGlkOiBbc2VjdGlvbj8uaWQgPz8gJyddLFxyXG4gICAgICBuYW1lOiBbc2VjdGlvbj8ubmFtZSA/PyAnJ10sXHJcbiAgICAgIHF1ZXN0aW9uczogdGhpcy5mYi5hcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4oW10pXHJcbiAgICB9KTtcclxuXHJcbiAgICAodGhpcy50YXNrRm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KS5wdXNoKHNlY3Rpb25Gb3JtRGF0YSlcclxuICB9XHJcblxyXG4gIGFkZFF1ZXN0aW9uRm9ybShxdWVzdGlvbjogUXVlc3Rpb24sIHNlY3Rpb25JbmRleDogbnVtYmVyLCBpbnNlcnRJbmRleD86IG51bWJlcikge1xyXG4gICAgY29uc3QgcXVlc3Rpb25Gb3JtRGF0YTogRm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcW5vOiBbcXVlc3Rpb24/LnFubyA/PyAodGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KT8ubGVuZ3RoID8gdGhpcy5nZXRRdWVzdGlvbnMoc2VjdGlvbkluZGV4KS5sZW5ndGggKyAxIDogMSksIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHFuYW1lOiBbcXVlc3Rpb24/LnFuYW1lID8/ICcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBhbnN3ZXJUeXBlOiBbcXVlc3Rpb24/LmFuc3dlclR5cGUgPz8gJ2Rlc2NyaXB0aXZlJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcnVuQUk6IFtxdWVzdGlvbj8ucnVuQUkgPz8gZmFsc2VdLFxyXG4gICAgICBydW5BSURlc2NyaXB0aW9uOiBbcXVlc3Rpb24/LnJ1bkFJRGVzY3JpcHRpb24gPz8gJyddLFxyXG4gICAgICBhbGxvd1VwbG9hZGZyb21HYWxsZXJ5OiBbcXVlc3Rpb24/LmFsbG93VXBsb2FkZnJvbUdhbGxlcnkgPz8gZmFsc2VdLFxyXG4gICAgICBsaW5rVHlwZTogW3F1ZXN0aW9uPy5saW5rVHlwZSA/PyBmYWxzZV0sXHJcbiAgICAgIHF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U6IFtxdWVzdGlvbj8ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSA/PyAnJ10sXHJcbiAgICAgIGFuc3dlcnM6IHRoaXMuZmIuYXJyYXk8Rm9ybUdyb3VwPEFuc3dlckZvcm0+PihbXSlcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChxdWVzdGlvbi5hbnN3ZXJUeXBlID09PSAnZGVzY3JpcHRpdmUnIHx8IHF1ZXN0aW9uLmFuc3dlclR5cGUgPT09ICdtdWx0aXBsZUltYWdlJykge1xyXG4gICAgICBxdWVzdGlvbkZvcm1EYXRhLmFkZENvbnRyb2woJ2Rlc2NyaXB0aXZldHlwZScsIG5ldyBGb3JtQ29udHJvbChxdWVzdGlvbj8uZGVzY3JpcHRpdmV0eXBlID8/ICd0ZXh0JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5zZXJ0SW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAoKHRoaXMudGFza0Zvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8U2VjdGlvbkZvcm0+PilcclxuICAgICAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pLmluc2VydChpbnNlcnRJbmRleCwgcXVlc3Rpb25Gb3JtRGF0YSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAgIC5hdChzZWN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+PikucHVzaChxdWVzdGlvbkZvcm1EYXRhKVxyXG4gIH1cclxuXHJcbiAgYWRkQW5zd2VyRm9ybShhbnN3ZXI6IEFuc3dlciwgc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgaW5zZXJ0SW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGFuc3dlckZvcm1EYXRhOiBGb3JtR3JvdXA8QW5zd2VyRm9ybT4gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgYW5zd2VyOiBbYW5zd2VyPy5hbnN3ZXIgPz8gJyddLFxyXG4gICAgICBhbnN3ZXJvcHRpb25OdW1iZXI6IFthbnN3ZXI/LmFuc3dlcm9wdGlvbk51bWJlciA/PyAodGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCk/Lmxlbmd0aCA/IHRoaXMuZ2V0QW5zd2VycyhzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpLmxlbmd0aCArIDEgOiAxKSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc29wRmxhZzogW2Fuc3dlcj8uc29wRmxhZyA/PyBmYWxzZV0sXHJcbiAgICAgIHZhbGlkYXRpb246IFthbnN3ZXI/LnZhbGlkYXRpb24gPz8gZmFsc2VdLFxyXG4gICAgICB2YWxpZGF0aW9uVHlwZTogW2Fuc3dlcj8udmFsaWRhdGlvblR5cGUgPz8gJyddLFxyXG4gICAgICByZWZlcmVuY2VJbWFnZTogW2Fuc3dlcj8ucmVmZXJlbmNlSW1hZ2UgPz8gJyddLFxyXG4gICAgICBzaG93TGlua2VkOiBbYW5zd2VyPy5zaG93TGlua2VkID8/IGZhbHNlXSxcclxuICAgICAgbGlua2VkUXVlc3Rpb246IFthbnN3ZXI/LmxpbmtlZFF1ZXN0aW9uID8/IDBdLFxyXG4gICAgICBuZXN0ZWRRdWVzdGlvbjogW2Fuc3dlcj8ubmVzdGVkUXVlc3Rpb24gPz8gW11dLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYW5zd2VyVHlwZTogQW5zd2VyVHlwZSA9ICgodGhpcy50YXNrRm9ybT8uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjdGlvbkluZGV4KT8uZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHF1ZXN0aW9uSW5kZXgpPy5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWU7XHJcblxyXG4gICAgaWYgKGFuc3dlclR5cGUgPT09ICdkZXNjcmlwdGl2ZScgfHwgYW5zd2VyVHlwZSA9PT0gJ2Rlc2NyaXB0aXZlSW1hZ2UnIHx8IGFuc3dlclR5cGUgPT09ICdpbWFnZScgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlSW1hZ2UnIHx8IGFuc3dlclR5cGUgPT09ICdkYXRlJyB8fCBhbnN3ZXJUeXBlID09PSAnbGluZWFyc2NhbGUnIHx8IGFuc3dlclR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCd2YWxpZGF0aW9uQW5zd2VyJywgbmV3IEZvcm1Db250cm9sKGFuc3dlcj8udmFsaWRhdGlvbkFuc3dlciA/PyAnJykpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuc3dlclR5cGUgPT09ICd5ZXMvbm8nIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgYW5zd2VyVHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnKSB7XHJcbiAgICAgIGFuc3dlckZvcm1EYXRhLmFkZENvbnRyb2woJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknLCBuZXcgRm9ybUNvbnRyb2woYW5zd2VyPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5ID8/IGZhbHNlKSk7XHJcbiAgICAgIGFuc3dlckZvcm1EYXRhLmFkZENvbnRyb2woJ3J1bkFJJywgbmV3IEZvcm1Db250cm9sKGFuc3dlcj8ucnVuQUkgPz8gZmFsc2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYW5zd2VyVHlwZSA9PT0gJ2xpbmVhcnNjYWxlJykge1xyXG4gICAgICBhbnN3ZXJGb3JtRGF0YS5hZGRDb250cm9sKCdyYW5nZVN0YXJ0JywgbmV3IEZvcm1Db250cm9sKGFuc3dlcj8ucmFuZ2VTdGFydCA/PyAwKSk7XHJcbiAgICAgIGFuc3dlckZvcm1EYXRhLmFkZENvbnRyb2woJ3JhbmdlRW5kJywgbmV3IEZvcm1Db250cm9sKGFuc3dlcj8ucmFuZ2VFbmQgPz8gMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbnN3ZXJUeXBlID09PSAneWVzL25vJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnIHx8IGFuc3dlclR5cGUgPT09ICdtdWx0aXBsZWNob2ljZW11bHRpcGxlJyB8fCBhbnN3ZXJUeXBlID09PSAnbXVsdGlwbGVJbWFnZScpIHtcclxuICAgICAgYW5zd2VyRm9ybURhdGEuYWRkQ29udHJvbCgnZGVzY3JpcHRpdmV0eXBlJywgbmV3IEZvcm1Db250cm9sKGFuc3dlcj8uZGVzY3JpcHRpdmV0eXBlID8/ICd0ZXh0JykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnNlcnRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICgoKHRoaXMudGFza0Zvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8U2VjdGlvbkZvcm0+PilcclxuICAgICAgICAuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pXHJcbiAgICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8QW5zd2VyRm9ybT4+KS5pbnNlcnQoaW5zZXJ0SW5kZXgsIGFuc3dlckZvcm1EYXRhKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICAoKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pXHJcbiAgICAgIC5hdChzZWN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxRdWVzdGlvbkZvcm0+PilcclxuICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8QW5zd2VyRm9ybT4+KS5wdXNoKGFuc3dlckZvcm1EYXRhKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFNlY3Rpb25zKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLnRhc2tGb3JtPy5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKCh0aGlzLnRhc2tGb3JtPy5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxTZWN0aW9uRm9ybT4+KS5hdChzZWN0aW9uSW5kZXgpPy5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheTxGb3JtR3JvdXA8UXVlc3Rpb25Gb3JtPj4pXHJcbiAgfVxyXG5cclxuICBnZXRBbnN3ZXJzKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAoKCh0aGlzLnRhc2tGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFNlY3Rpb25Gb3JtPj4pLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFF1ZXN0aW9uRm9ybT4+KS5hdChxdWVzdGlvbkluZGV4KS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPEFuc3dlckZvcm0+PilcclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGUoZXZlbnQ6IGFueSwgc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuZmlsZXMgIT0gdW5kZWZpbmVkICYmIGV2ZW50LnRhcmdldC5maWxlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSwgZmlsZS5uYW1lKTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdjbGllbnRJZCcsIHRoaXMuaGVhZGVyRGF0YT8uY2xpZW50IGFzIHN0cmluZylcclxuICAgICAgdGhpcy50cmF4U2VydmljZS50YXNrSW1hZ2V1cGxvYWQoZm9ybURhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhLmltZ1VybCkge1xyXG4gICAgICAgICAgICBpZiAoYW5zd2VySW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0UXVlc3Rpb25zKHNlY3Rpb25JbmRleCkuYXQocXVlc3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnNldFZhbHVlKHJlcy5kYXRhLmltZ1VybClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5hdChhbnN3ZXJJbmRleCkuZ2V0KCdyZWZlcmVuY2VJbWFnZScpPy5zZXRWYWx1ZShyZXMuZGF0YS5pbWdVcmwpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1NvbWV0aGluZyB3ZW50IHdyb25nJylcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBjbG9zZURyb3Bkb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgIFxyXG4gICAgICB0aGlzLmRyb3BEb3duID0gZmFsc2U7IFxyXG4gIH1cclxuICBvcGVuRHJvcGRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5kcm9wRG93biA9ICF0aGlzLmRyb3BEb3duO1xyXG5cclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSXRlbTogYW55ID0gJzAwOjAwJztcclxuICBkcm9wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRUaW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgdXBkYXRlQ3VycmVudFRpbWUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgbmV4dEhvdXIgPSBuZXcgRGF0ZSgpO1xyXG4gICAgbmV4dEhvdXIuc2V0SG91cnMobm93LmdldEhvdXJzKCkgKyAxKTsgXHJcbiAgXHJcbiAgICBjb25zdCBob3VycyA9IFN0cmluZyhub3cuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBTdHJpbmcoTWF0aC5mbG9vcihub3cuZ2V0TWludXRlcygpIC8gMzApICogMzApLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICB0aGlzLmN1cnJlbnRUaW1lID0gYCR7aG91cnN9OiR7bWludXRlc31gO1xyXG4gIFxyXG4gICAgY29uc3QgbmV4dEhvdXJTdHIgPSBgJHtTdHJpbmcobmV4dEhvdXIuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKX06MDBgO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBuZXh0SG91clN0cjsgXHJcbiAgfVxyXG4gIFxyXG4gIGlzRGlzYWJsZWQodGltZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgbm93LnNldEhvdXJzKG5vdy5nZXRIb3VycygpICsgMSk7IFxyXG4gICAgY29uc3QgZGlzYWJsZWRUaHJlc2hvbGQgPSBgJHtTdHJpbmcobm93LmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyl9OjAwYDtcclxuICBcclxuICAgIHJldHVybiB0aW1lIDwgZGlzYWJsZWRUaHJlc2hvbGQ7XHJcbiAgfVxyXG4gIFxyXG4gIHNlbGVjdEl0ZW0odmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB2YWx1ZTtcclxuICAgIHRoaXMuZHJvcERvd24gPSBmYWxzZTtcclxuICB9XHJcbiAgb25EZWxldGVSZWZlcmVuY2VJbWFnZShzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBhbnN3ZXJJbmRleD86IG51bWJlcikge1xyXG4gICAgaWYgKGFuc3dlckluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkuYXQoYW5zd2VySW5kZXgpLmdldCgncmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUoJycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy5zZXRWYWx1ZSgnJylcclxuICAgIH1cclxuICB9XHJcbiAgb25BbnN3ZXJEZWxldGUoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VySW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5nZXRBbnN3ZXJzKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCkucmVtb3ZlQXQoYW5zd2VySW5kZXgpXHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoJ0Fuc3dlciBkZWxldGVkIHN1Y2Nlc3NmdWxseScpXHJcblxyXG4gIH1cclxuXHJcbiAgb25WYWxpZGF0ZVJlc3BvbnNlQ2hhbmdlKGV2ZW50OiBhbnksIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsIGFuc3dlckluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmdldEFuc3dlcnMoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4KS5hdChhbnN3ZXJJbmRleCkuZ2V0KCdzaG93TGlua2VkJyk/LnNldFZhbHVlKGZhbHNlKVxyXG4gICAgfVxyXG4gIH1cclxuICBhZGROZXdBbnN3ZXIoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgdHlwZTogQW5zd2VyVHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgdHlwZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnKSB7XHJcbiAgICAgIHRoaXMuYWRkQW5zd2VyRm9ybShtdWx0aXBsZWNob2ljZV9hbnN3ZXJfdGVtcGxhdGUgYXMgQW5zd2VyLCBzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgpXHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnQW5zd2VyIGFkZGVkIHN1Y2Nlc3NmdWxseScpXHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBvblF1ZXN0aW9uQ2hhbmdlKGV2ZW50OiBhbnksIHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBxdWVzdGlvblxyXG4gICAgY29uc3QgYW5zd2VyVHlwZTogQW5zd2VyVHlwZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgc3dpdGNoIChhbnN3ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ2Rlc2NyaXB0aXZlJzogcXVlc3Rpb24gPSBkZXNjcmlwdGl2ZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd5ZXMvbm8nOiBxdWVzdGlvbiA9IHllc29ybm9fcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnOiBxdWVzdGlvbiA9IG11bHRpcGxlY2hvaWNlc2luZ2xlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnOiBxdWVzdGlvbiA9IG11bHRpcGxlY2hvaWNlbXVsdGlwbGVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGVzY3JpcHRpdmVJbWFnZSc6IHF1ZXN0aW9uID0gZGVzY3JpcHRpdmVJbWFnZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbWFnZSc6IHF1ZXN0aW9uID0gaW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlkZW8nOiBxdWVzdGlvbiA9IHZpZGVvX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211bHRpcGxlSW1hZ2UnOiBxdWVzdGlvbiA9IG11bHRpcGxlSW1hZ2VfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGF0ZSc6IHF1ZXN0aW9uID0gZGF0ZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdsaW5lYXJzY2FsZSc6IHF1ZXN0aW9uID0gbGluZWFyc2NhbGVfcXVlc3Rpb25fdGVtcGxhdGVcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndGltZSc6IHF1ZXN0aW9uID0gdGltZV9xdWVzdGlvbl90ZW1wbGF0ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiBxdWVzdGlvbiA9IGRlc2NyaXB0aXZlX3F1ZXN0aW9uX3RlbXBsYXRlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBjb25zdCBxdWVzdGlvbk5hbWUgPSB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8udmFsdWUgfHwgJydcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLnJlbW92ZUF0KHF1ZXN0aW9uSW5kZXgpXHJcblxyXG4gICAgdGhpcy5hZGRRdWVzdGlvbkZvcm0ocXVlc3Rpb24gYXMgUXVlc3Rpb24sIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleClcclxuXHJcbiAgICB0aGlzLmdldFF1ZXN0aW9ucyhzZWN0aW9uSW5kZXgpLmF0KHF1ZXN0aW9uSW5kZXgpLmdldCgncW5hbWUnKT8uc2V0VmFsdWUocXVlc3Rpb25OYW1lKVxyXG5cclxuICAgIGlmIChxdWVzdGlvbj8uYW5zd2Vycy5sZW5ndGgpIHtcclxuICAgICAgcXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChlbGVtZW50LCBpZHgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZEFuc3dlckZvcm0oZWxlbWVudCBhcyBBbnN3ZXIsIHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCwgaWR4KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgc2VsZWN0ZWREYXRlOiBhbnkgPSB7fTtcclxuICBkYXlqcyA9IGRheWpzO1xyXG4gIGlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgY29uc3QgaXNWYWxpZERhdGUgPSBtID4gdGhpcy5kYXlqcygpO1xyXG4gICAgcmV0dXJuIGlzVmFsaWREYXRlID8gJ2ludmFsaWQtZGF0ZScgOiBmYWxzZTtcclxuICB9XHJcbiAgb25TdGFydERhdGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgICByZXR1cm4gbS5pc0JlZm9yZSh0aGlzLmRheWpzKCksICdkYXknKSA/ICdpbnZhbGlkLWRhdGUnIDogZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBUaW1lUGVyaW9kKSB7XHJcbiAgICBpZiAoIWV2ZW50LmVuZERhdGUgfHwgIWV2ZW50LnN0YXJ0RGF0ZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRlZEZpbGVzOiBGaWxlW10gPSBbXTtcclxuXHJcbiAgb25GaWxlc1NlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmZpbGVzICE9IHVuZGVmaW5lZCAmJiBldmVudC50YXJnZXQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUsIGZpbGUubmFtZSk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY2xpZW50SWQnLCB0aGlzLnN0b3JlUHJvZmlsZS5jbGllbnRfaWQgYXMgc3RyaW5nKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmltYWdldXBsb2FkKGZvcm1EYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuZGF0YS5pbWdVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2gocmVzLmRhdGEuaW1nVXJsKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgc2VsZWN0ZWRGaWxlPzogRmlsZTsgXHJcbiAgcHJldmlld1VybD86IGFueTsgXHJcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0ITogRWxlbWVudFJlZjtcclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBmaWxlO1xyXG4gICAgICB0aGlzLnByZXZpZXdVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpOyBcclxuICAgIH1cclxuICB9XHJcbiAgcmVtb3ZlSW1hZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMucHJldmlld1VybCA9IHVuZGVmaW5lZDtcclxuICAgIGlmICh0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgZ3JvdXAtZGVsZXRlIHB5LTBcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJ0eXBlID09PSdjcmVhdGV0YXNrJ1wiIGNsYXNzPVwiY2FyZC1ib2R5IHB5LTAgZC1mbGV4IGZsZXgtc3RhcnQgZmxleC1jb2x1bW4gcC05IFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMCAxOEgyMkMyMS40Njk2IDE4IDIwLjk2MDkgMTguMjEwNyAyMC41ODU4IDE4LjU4NThDMjAuMjEwNyAxOC45NjA5IDIwIDE5LjQ2OTYgMjAgMjBWMzZDMjAgMzYuNTMwNCAyMC4yMTA3IDM3LjAzOTEgMjAuNTg1OCAzNy40MTQyQzIwLjk2MDkgMzcuNzg5MyAyMS40Njk2IDM4IDIyIDM4SDM0QzM0LjUzMDQgMzggMzUuMDM5MSAzNy43ODkzIDM1LjQxNDIgMzcuNDE0MkMzNS43ODkzIDM3LjAzOTEgMzYgMzYuNTMwNCAzNiAzNlYyNE0zMCAxOEwzNiAyNE0zMCAxOFYyNEgzNk0yOCAzNFYyOE0yNSAzMUgzMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHctMTAwIHAtMVwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInRhc2tGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGdldFNlY3Rpb25zPy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKT8uY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJxdWVzdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbWItMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFzayBOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwidGFza0Zvcm0uY29udHJvbHMuY2hlY2tsaXN0TmFtZVwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgVGFzayBOYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ2LXBsdWdpbnMtbWVzc2FnZS1jb250YWluZXIgZnYtcGx1Z2lucy1tZXNzYWdlLWNvbnRhaW5lci0tZW5hYmxlZCBpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTYwMFwiPlRoaXMgVGFzayBpcyBsaW5rZWQgdG8gPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ2LXJvdyBtYi0zIGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtbmFtZSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLmdldCgncW5vJyk/LnZhbHVlfX0uIHt7cXVlc3Rpb24uZ2V0KCdxbmFtZScpPy52YWx1ZX19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiICpuZ0lmPVwiaW5wdXREYXRhLmFuc3dlclR5cGU9PT0ndmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlucHV0RGF0YS51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBWaWRlbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwicmVjYXAtaW1nIHAtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5wdXREYXRhLmFuc3dlclR5cGU9PT0naW1hZ2UnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09PSdkZXNjcmlwdGl2ZUltYWdlJ3x8aW5wdXREYXRhLmFuc3dlclR5cGU9PT0nbXVsdGlwbGVJbWFnZSd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J211bHRpcGxlY2hvaWNlbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlucHV0RGF0YS51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbnB1dERhdGEuYW5zd2VyVHlwZT09PSdtdWx0aXBsZWNob2ljZXNpbmdsZSd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J3llcy9ubyd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J2RhdGUnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09PSd0aW1lJ3x8aW5wdXREYXRhLmFuc3dlclR5cGU9PT0nbGluZWFyc2NhbGUnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09PSdkZXNjcmlwdGl2ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlucHV0RGF0YS51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTFcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbWItMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFzayBEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW2Zvcm1Db250cm9sXT1cInRhc2tGb3JtLmNvbnRyb2xzLmNoZWNrbGlzdERlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBwZXJtaXNzaW9uIG5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIk1haW4gZW50cmFuY2Ugc2lnbmFnZSBpcyBjcmFja2VkLCBhbmQgbGlnaHRzIGFyZSBmbGlja2VyaW5nLiBQbGVhc2UgcmV0YWtlIHRoZSBpbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPVwiNFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbWItMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2UgVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwib25RdWVzdGlvbkNoYW5nZSgkZXZlbnQsIGksIGopXCIgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFuc3dlciBvZiBhbnN3ZXJUeXBlc1wiIFt2YWx1ZV09XCJhbnN3ZXIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Fuc3dlci5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lMSBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnN3ZXIgT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCIncXVlc3Rpb24tJyArIGkgKyBqXCIgY2xhc3M9XCJxdWVzdGlvbi1jb250YWluZXIgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdkZXNjcmlwdGl2ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGl2ZXR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ0ZXh0XCIgW2lkXT1cIidkZXNjcmlwdGl2ZXR5cGVfdGV4dCcgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZldHlwZV90ZXh0JyArIGkgKyBqXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwibnVtYmVyXCIgW2lkXT1cIidkZXNjcmlwdGl2ZXR5cGVfbnVtYmVyJyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInZGVzY3JpcHRpdmV0eXBlX251bWJlcicgKyBpICsgalwiPk51bWJlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICd5ZXMvbm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGFuc3dlciBoZXJlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8uaW52YWxpZCAmJiBhbnN3ZXIuZ2V0KCdhbnN3ZXInKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+KiBBbnN3ZXIgaXMgcmVxdWlyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgYW5zd2VyIGhlcmVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkFuc3dlckRlbGV0ZShpLCBqLCBrKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGUgYW5zd2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdGVzdFwiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBfbmdjb250ZW50LW5nLWMxNDkxMDQ0MTcwPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUgNUw1IDE1TTUgNUwxNSAxNVwiIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5pbnZhbGlkICYmIGFuc3dlci5nZXQoJ2Fuc3dlcicpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgnYW5zd2VyJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj4qIEFuc3dlciBpcyByZXF1aXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJhZGROZXdBbnN3ZXIoaSwgaiwgJ211bHRpcGxlY2hvaWNlc2luZ2xlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZC1yZWZlcmVuY2UtYnRuIG1iLTUgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIE1vcmUgQW5zd2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdkZXNjcmlwdGl2ZUltYWdlJyB8fCBxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdpbWFnZSdcIj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBwcy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJxdWVzdGlvbi5jb250cm9scy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBjaGVjay1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2FsbG93X3VwbG9hZF9mcm9tX2dhbGxlcnknICsgaSArIGpcIj5BbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgZnJvbSBnYWxsZXJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ3ZpZGVvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBwcy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtM1wiIHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2FsbG93X3VwbG9hZF9mcm9tX2dhbGxlcnknICsgaSArIGpcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPkFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZCBmcm9tIGdhbGxlcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ211bHRpcGxlSW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIGdldEFuc3dlcnMoaSwgaikuY29udHJvbHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggcHMtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicXVlc3Rpb24uY29udHJvbHMuYWxsb3dVcGxvYWRmcm9tR2FsbGVyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWxsb3dfdXBsb2FkX2Zyb21fZ2FsbGVyeScgKyBpICsgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgY2hlY2stbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidhbGxvd191cGxvYWRfZnJvbV9nYWxsZXJ5JyArIGkgKyBqXCI+QWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkIGZyb20gZ2FsbGVyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl90ZXh0JyArIGkgKyBqICsga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX3RleHQnICsgaSArIGogKyBrXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Rlc2NyaXB0aXZlX2Fuc3dlcl92YWxpZGF0aW9uX251bWJlcicgKyBpICsgaiArIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidkZXNjcmlwdGl2ZV9hbnN3ZXJfdmFsaWRhdGlvbl9udW1iZXInICsgaSArIGogKyBrXCI+TnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ2RhdGUnIHx8IHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ3RpbWUnXCI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdsaW5lYXJzY2FsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgZ2V0QW5zd2VycyhpLCBqKS5jb250cm9sczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiYW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwicmFuZ2VTdGFydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yIGNoZWNrLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwicmFuZ2VFbmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lciBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtbmFtZSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdWUgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuMzMzMyAxLjY2NjYzVjQuOTk5OTZNNi42NjY2NyAxLjY2NjYzVjQuOTk5OTZNMi41IDguMzMzMjlIMTcuNU00LjE2NjY3IDMuMzMzMjlIMTUuODMzM0MxNi43NTM4IDMuMzMzMjkgMTcuNSA0LjA3OTQ4IDE3LjUgNC45OTk5NlYxNi42NjY2QzE3LjUgMTcuNTg3MSAxNi43NTM4IDE4LjMzMzMgMTUuODMzMyAxOC4zMzMzSDQuMTY2NjdDMy4yNDYxOSAxOC4zMzMzIDIuNSAxNy41ODcxIDIuNSAxNi42NjY2VjQuOTk5OTZDMi41IDQuMDc5NDggMy4yNDYxOSAzLjMzMzI5IDQuMTY2NjcgMy4zMzMyOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wc109XCInZG93bidcIiBbb3BlbnNdPVwiJ3JpZ2h0J1wiIFtzaG93Q3VzdG9tUmFuZ2VMYWJlbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwiZmFsc2VcIiBbYXV0b0FwcGx5XT1cInRydWVcIiBbc2luZ2xlRGF0ZVBpY2tlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxdPVwidHJ1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnREYXRlQ2hhbmdlZCk9XCJvblN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCIgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTS1ZWVlZJywgZmlyc3REYXk6IDEsIG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLW5hbWUgbXktMlwiPkR1ZSB0aW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRyb3Bkb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgdy0xMDAgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgbXQtMSB0ZXh0LW5vd3JhcCBib3JkZXItdmFsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTQ1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMy4zMzMzIDEuNjY2NVY0Ljk5OTg0TTYuNjY2NjcgMS42NjY1VjQuOTk5ODRNMi41IDguMzMzMTdIMTcuNU00LjE2NjY3IDMuMzMzMTdIMTUuODMzM0MxNi43NTM4IDMuMzMzMTcgMTcuNSA0LjA3OTM2IDE3LjUgNC45OTk4NFYxNi42NjY1QzE3LjUgMTcuNTg3IDE2Ljc1MzggMTguMzMzMiAxNS44MzMzIDE4LjMzMzJINC4xNjY2N0MzLjI0NjE5IDE4LjMzMzIgMi41IDE3LjU4NyAyLjUgMTYuNjY2NVY0Ljk5OTg0QzIuNSA0LjA3OTM2IDMuMjQ2MTkgMy4zMzMxNyA0LjE2NjY3IDMuMzMzMTdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHMtMTJcIj57eyBzZWxlY3RlZEl0ZW0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3BEb3duXCIgY2xhc3M9XCJjYXJkIHB5LTEgdy0xMDAgcG9zaXRpb24tYWJzb2x1dGUgei0xIGgtMjAwcHggc2Nyb2xsLXkgdG9wLTUwcHggZW5kLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdGltZURldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkSXRlbSA9PT0gaXRlbS50ZXh0ID8gJ2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYW1lcmEgcHgtNSBpdGVtcyBmdy1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBweS0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChpdGVtLnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtLnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ2LXJvdyBtYi0zIGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFt2YWx1ZV09XCJ0aGlzLmNoZWNrbGlzdEluZm8/LnN1Ym1pdHRlZEJ5XCIgW2Rpc2FibGVkXT1cInRydWVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbXktMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1hdHRhY2ggY29sLW1kLTMgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuODY2NiA5LjIwODFMMTAuMjA4MiAxNi44NjY0QzkuMjcwMDUgMTcuODA0NiA3Ljk5NzU3IDE4LjMzMTcgNi42NzA3NSAxOC4zMzE3QzUuMzQzOTMgMTguMzMxNyA0LjA3MTQ1IDE3LjgwNDYgMy4xMzMyNSAxNi44NjY0QzIuMTk1MDUgMTUuOTI4MiAxLjY2Nzk3IDE0LjY1NTggMS42Njc5NyAxMy4zMjg5QzEuNjY3OTcgMTIuMDAyMSAyLjE5NTA1IDEwLjcyOTYgMy4xMzMyNSA5Ljc5MTQ0TDEwLjc5MTYgMi4xMzMxQzExLjQxNzEgMS41MDc2MyAxMi4yNjU0IDEuMTU2MjUgMTMuMTQ5OSAxLjE1NjI1QzE0LjAzNDUgMS4xNTYyNSAxNC44ODI4IDEuNTA3NjMgMTUuNTA4MiAyLjEzMzFDMTYuMTMzNyAyLjc1ODU3IDE2LjQ4NTEgMy42MDY4OSAxNi40ODUxIDQuNDkxNDRDMTYuNDg1MSA1LjM3NTk4IDE2LjEzMzcgNi4yMjQzIDE1LjUwODIgNi44NDk3N0w3Ljg0MTU4IDE0LjUwODFDNy41Mjg4NSAxNC44MjA4IDcuMTA0NjkgMTQuOTk2NSA2LjY2MjQyIDE0Ljk5NjVDNi4yMjAxNCAxNC45OTY1IDUuNzk1OTggMTQuODIwOCA1LjQ4MzI1IDE0LjUwODFDNS4xNzA1MSAxNC4xOTU0IDQuOTk0ODIgMTMuNzcxMiA0Ljk5NDgyIDEzLjMyODlDNC45OTQ4MiAxMi44ODY3IDUuMTcwNTEgMTIuNDYyNSA1LjQ4MzI1IDEyLjE0OThMMTIuNTU4MiA1LjA4MzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiPkFkZCBBdHRhY2htZW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2ZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi5wbmcsIC5qcGcsIC5qcGVnLCAuc3ZnLCAuZ2lmXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgaGlkZGVuIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtcHJldmlldyBtdC0yXCIgKm5nSWY9XCJwcmV2aWV3VXJsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtaWNvblwiIChjbGljayk9XCJyZW1vdmVJbWFnZSgpXCI+4pyWPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJwcmV2aWV3VXJsXCIgYWx0PVwiUHJldmlld1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC01IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwiZ3JvdXBcIiBjbGFzcz1cImQtZmxleCBtdC0zIG1iLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0xMDAgbWUtM1wiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYWxlcnQtdG9hc3RcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBtcy0zXCIgW2Rpc2FibGVkXT1cIiF0aGlzLnRhc2tGb3JtLnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdCgpXCI+Q3JlYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInR5cGUgPT09J3JlZG8nXCIgY2xhc3M9XCJjYXJkLWJvZHkgcHktMCBkLWZsZXggZmxleC1zdGFydCBmbGV4LWNvbHVtbiBwLTkgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtNzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCI4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM5IDIwLjAwMDFWMjYuMDAwMU0zOSAyNi4wMDAxSDMzTTM5IDI2LjAwMDFMMzQuMzYgMjEuNjQwMUMzMy4yODUzIDIwLjU2NDggMzEuOTU1NiAxOS43NzkzIDMwLjQ5NTIgMTkuMzU2OEMyOS4wMzQ4IDE4LjkzNDQgMjcuNDkxMSAxOC44ODg4IDI2LjAwODMgMTkuMjI0M0MyNC41MjU1IDE5LjU1OTggMjMuMTUxOCAyMC4yNjU1IDIyLjAxNTUgMjEuMjc1NUMyMC44NzkxIDIyLjI4NTUgMjAuMDE3MiAyMy41NjY5IDE5LjUxIDI1LjAwMDFNMTcgMzYuMDAwMVYzMC4wMDAxTTE3IDMwLjAwMDFIMjNNMTcgMzAuMDAwMUwyMS42NCAzNC4zNjAxQzIyLjcxNDcgMzUuNDM1NCAyNC4wNDQ0IDM2LjIyMDkgMjUuNTA0OCAzNi42NDMzQzI2Ljk2NTIgMzcuMDY1NyAyOC41MDg5IDM3LjExMTMgMjkuOTkxNyAzNi43NzU4QzMxLjQ3NDUgMzYuNDQwMyAzMi44NDgyIDM1LjczNDYgMzMuOTg0NSAzNC43MjQ3QzM1LjEyMDkgMzMuNzE0NyAzNS45ODI4IDMyLjQzMzMgMzYuNDkgMzEuMDAwMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBnZXRTZWN0aW9ucz8uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cInNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGdldFF1ZXN0aW9ucyhpKT8uY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwicXVlc3Rpb25cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHctMTAwIHAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibGFiZWwtbmFtZTEgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJsYWJlbC1uYW1lMSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjaGVja2xpc3RJbmZvLmNoZWNrbGlzdE5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3txdWVzdGlvbi5nZXQoJ3FubycpPy52YWx1ZX19LiB7e3F1ZXN0aW9uLmdldCgncW5hbWUnKT8udmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cImlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J3ZpZGVvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlucHV0RGF0YS51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIFZpZGVvPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInJlY2FwLWltZyBwLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J2ltYWdlJ3x8aW5wdXREYXRhLmFuc3dlclR5cGU9PT0nZGVzY3JpcHRpdmVJbWFnZSd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J211bHRpcGxlSW1hZ2UnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09PSdtdWx0aXBsZWNob2ljZW11bHRpcGxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlucHV0RGF0YS51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLmFuc3dlcn19XCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbnB1dERhdGEuYW5zd2VyVHlwZT09PSdtdWx0aXBsZWNob2ljZXNpbmdsZSd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J3llcy9ubyd8fGlucHV0RGF0YS5hbnN3ZXJUeXBlPT09J2RhdGUnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09PSd0aW1lJ3x8aW5wdXREYXRhLmFuc3dlclR5cGU9PT0nbGluZWFyc2NhbGUnfHxpbnB1dERhdGEuYW5zd2VyVHlwZT09PSdkZXNjcmlwdGl2ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaW5wdXREYXRhLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0xXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ0YXNrRm9ybVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIFtmb3JtQ29udHJvbF09XCJ0YXNrRm9ybS5jb250cm9scy5jaGVja2xpc3REZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgcGVybWlzc2lvbiBuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJNYWluIGVudHJhbmNlIHNpZ25hZ2UgaXMgY3JhY2tlZCwgYW5kIGxpZ2h0cyBhcmUgZmxpY2tlcmluZy4gUGxlYXNlIHJldGFrZSB0aGUgaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cz1cIjRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbXktMyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYXR0YWNoIGNvbC1tZC0zIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3Ljg2NjYgOS4yMDgxTDEwLjIwODIgMTYuODY2NEM5LjI3MDA1IDE3LjgwNDYgNy45OTc1NyAxOC4zMzE3IDYuNjcwNzUgMTguMzMxN0M1LjM0MzkzIDE4LjMzMTcgNC4wNzE0NSAxNy44MDQ2IDMuMTMzMjUgMTYuODY2NEMyLjE5NTA1IDE1LjkyODIgMS42Njc5NyAxNC42NTU4IDEuNjY3OTcgMTMuMzI4OUMxLjY2Nzk3IDEyLjAwMjEgMi4xOTUwNSAxMC43Mjk2IDMuMTMzMjUgOS43OTE0NEwxMC43OTE2IDIuMTMzMUMxMS40MTcxIDEuNTA3NjMgMTIuMjY1NCAxLjE1NjI1IDEzLjE0OTkgMS4xNTYyNUMxNC4wMzQ1IDEuMTU2MjUgMTQuODgyOCAxLjUwNzYzIDE1LjUwODIgMi4xMzMxQzE2LjEzMzcgMi43NTg1NyAxNi40ODUxIDMuNjA2ODkgMTYuNDg1MSA0LjQ5MTQ0QzE2LjQ4NTEgNS4zNzU5OCAxNi4xMzM3IDYuMjI0MyAxNS41MDgyIDYuODQ5NzdMNy44NDE1OCAxNC41MDgxQzcuNTI4ODUgMTQuODIwOCA3LjEwNDY5IDE0Ljk5NjUgNi42NjI0MiAxNC45OTY1QzYuMjIwMTQgMTQuOTk2NSA1Ljc5NTk4IDE0LjgyMDggNS40ODMyNSAxNC41MDgxQzUuMTcwNTEgMTQuMTk1NCA0Ljk5NDgyIDEzLjc3MTIgNC45OTQ4MiAxMy4zMjg5QzQuOTk0ODIgMTIuODg2NyA1LjE3MDUxIDEyLjQ2MjUgNS40ODMyNSAxMi4xNDk4TDEyLjU1ODIgNS4wODMxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiPkFkZCBBdHRhY2htZW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCIucG5nLCAuanBnLCAuanBlZywgLnN2ZywgLmdpZlwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIGhpZGRlbiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLXByZXZpZXcgbXQtMlwiICpuZ0lmPVwicHJldmlld1VybFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1pY29uXCIgKGNsaWNrKT1cInJlbW92ZUltYWdlKClcIj7inJY8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJwcmV2aWV3VXJsXCIgYWx0PVwiUHJldmlld1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lciBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdWUgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuMzMzMyAxLjY2NjYzVjQuOTk5OTZNNi42NjY2NyAxLjY2NjYzVjQuOTk5OTZNMi41IDguMzMzMjlIMTcuNU00LjE2NjY3IDMuMzMzMjlIMTUuODMzM0MxNi43NTM4IDMuMzMzMjkgMTcuNSA0LjA3OTQ4IDE3LjUgNC45OTk5NlYxNi42NjY2QzE3LjUgMTcuNTg3MSAxNi43NTM4IDE4LjMzMzMgMTUuODMzMyAxOC4zMzMzSDQuMTY2NjdDMy4yNDYxOSAxOC4zMzMzIDIuNSAxNy41ODcxIDIuNSAxNi42NjY2VjQuOTk5OTZDMi41IDQuMDc5NDggMy4yNDYxOSAzLjMzMzI5IDQuMTY2NjcgMy4zMzMyOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZngtZGF0ZS1yYW5nZSBmb3JtLWNvbnRyb2wgcHMtMTRcIiB0eXBlPVwidGV4dFwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neERhdGVyYW5nZXBpY2tlck1kIFtkcm9wc109XCInZG93bidcIiBbb3BlbnNdPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q3VzdG9tUmFuZ2VMYWJlbF09XCJmYWxzZVwiIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9BcHBseV09XCJ0cnVlXCIgW3NpbmdsZURhdGVQaWNrZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZV09XCJ0cnVlXCIgW3Nob3dDYW5jZWxdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0RGF0ZUNoYW5nZWQpPVwib25TdGFydERhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0N1c3RvbURhdGVdPVwiaXNDdXN0b21EYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgbmFtZT1cImRhdGVyYW5nZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5EdWUgdGltZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRHJvcGRvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgdy0xMDAgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgbXQtMSB0ZXh0LW5vd3JhcCBib3JkZXItdmFsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTQ1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY1VjQuOTk5ODRNNi42NjY2NyAxLjY2NjVWNC45OTk4NE0yLjUgOC4zMzMxN0gxNy41TTQuMTY2NjcgMy4zMzMxN0gxNS44MzMzQzE2Ljc1MzggMy4zMzMxNyAxNy41IDQuMDc5MzYgMTcuNSA0Ljk5OTg0VjE2LjY2NjVDMTcuNSAxNy41ODcgMTYuNzUzOCAxOC4zMzMyIDE1LjgzMzMgMTguMzMzMkg0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMiAyLjUgMTcuNTg3IDIuNSAxNi42NjY1VjQuOTk5ODRDMi41IDQuMDc5MzYgMy4yNDYxOSAzLjMzMzE3IDQuMTY2NjcgMy4zMzMxN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBzLTEyXCI+e3sgc2VsZWN0ZWRJdGVtIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3BEb3duXCIgY2xhc3M9XCJjYXJkIHB5LTEgdy0xMDAgcG9zaXRpb24tYWJzb2x1dGUgei0xIGgtMjAwcHggc2Nyb2xsLXkgdG9wLTUwcHggZW5kLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdGltZURldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZEl0ZW0gPT09IGl0ZW0udGV4dCA/ICdhY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhbWVyYSBweC01IGl0ZW1zIGZ3LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIHB5LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChpdGVtLnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbS50ZXh0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG1iLTMgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1uYW1lIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbiB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFt2YWx1ZV09XCJ0aGlzLmNoZWNrbGlzdEluZm8/LnN1Ym1pdHRlZEJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cIlwiIGlkPVwiZmxleENoZWNrRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGxhYmVsLW5hbWVcIiBmb3I9XCJmbGV4Q2hlY2tEZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5kYXRvcnkgaW1hZ2UgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNSB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJncm91cFwiIGNsYXNzPVwiZC1mbGV4IG10LTMgbWItMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0xMDAgbWUtM1wiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFsZXJ0LXRvYXN0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgbXMtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5TdWJtaXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=