tango-app-ui-manage-tickets 3.7.0-beta.8 → 3.7.0-beta.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +519 -0
- package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +389 -0
- package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +464 -0
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +187 -0
- package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
- package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +334 -206
- package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
- package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
- package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +81 -0
- package/esm2022/lib/components/start-audit/start-audit.component.mjs +761 -0
- package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +7 -3
- package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +519 -0
- package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2557 -0
- package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
- package/esm2022/lib/components/tickets/tickets.component.mjs +62 -8
- package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
- package/esm2022/lib/services/audit.service.mjs +88 -0
- package/esm2022/lib/services/ticket.service.mjs +196 -35
- package/esm2022/lib/services/timer.service.mjs +84 -0
- package/esm2022/lib/tango-manage-tickets-routing.module.mjs +22 -2
- package/esm2022/lib/tango-manage-tickets.module.mjs +60 -5
- package/fesm2022/tango-app-ui-manage-tickets.mjs +7457 -327
- package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
- package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
- package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +52 -0
- package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
- package/lib/components/custom-select/custom-select.component.d.ts +35 -0
- package/lib/components/filter-options/filter-options.component.d.ts +15 -0
- package/lib/components/footfall-dic/footfall-dic.component.d.ts +18 -9
- package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
- package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
- package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
- package/lib/components/start-audit/start-audit.component.d.ts +86 -0
- package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +1 -0
- package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +89 -0
- package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +301 -0
- package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
- package/lib/components/tickets/tickets.component.d.ts +4 -0
- package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
- package/lib/services/audit.service.d.ts +36 -0
- package/lib/services/ticket.service.d.ts +46 -8
- package/lib/services/timer.service.d.ts +22 -0
- package/lib/tango-manage-tickets.module.d.ts +22 -5
- package/package.json +1 -1
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
import { Component, HostListener } from '@angular/core';
|
|
2
|
+
import * as LZString from 'lz-string';
|
|
3
|
+
import { RemoveAuditComponent } from '../remove-audit/remove-audit.component';
|
|
4
|
+
import { AuditReportPopupComponent } from '../audit-report-popup/audit-report-popup.component';
|
|
5
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
6
|
+
import { ViewcategoryComponent } from '../viewcategory/viewcategory.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
import * as i2 from "@angular/router";
|
|
10
|
+
import * as i3 from "../../services/audit.service";
|
|
11
|
+
import * as i4 from "tango-app-ui-shared";
|
|
12
|
+
import * as i5 from "../../services/timer.service";
|
|
13
|
+
import * as i6 from "@angular/common";
|
|
14
|
+
export class AuditRetagComponent {
|
|
15
|
+
modalService;
|
|
16
|
+
router;
|
|
17
|
+
$api;
|
|
18
|
+
toastr;
|
|
19
|
+
route;
|
|
20
|
+
timerService;
|
|
21
|
+
cd;
|
|
22
|
+
totalfile = 0;
|
|
23
|
+
customer = 0;
|
|
24
|
+
junk = 0;
|
|
25
|
+
employee = 0;
|
|
26
|
+
junkimage = [];
|
|
27
|
+
retagimage = [];
|
|
28
|
+
submitvalue = true;
|
|
29
|
+
auditmappingdata = [];
|
|
30
|
+
customercount = 0;
|
|
31
|
+
junkcount = 0;
|
|
32
|
+
employeecount = 0;
|
|
33
|
+
employeimage = [];
|
|
34
|
+
filedetails = {};
|
|
35
|
+
auditLoading = false;
|
|
36
|
+
selectedType;
|
|
37
|
+
destroy$ = new Subject();
|
|
38
|
+
timePassed = 0;
|
|
39
|
+
subscription = null;
|
|
40
|
+
formattedTime = '00:00:00';
|
|
41
|
+
openmodel = false;
|
|
42
|
+
category = [];
|
|
43
|
+
handleKeyPress(event) {
|
|
44
|
+
if (this.openmodel)
|
|
45
|
+
return;
|
|
46
|
+
// if (event.key === 'g' || event.code === 'KeyG') {
|
|
47
|
+
// var group = this.auditmappingdata.filter((data: any) => data.selected === true)
|
|
48
|
+
// if (group.length > 0) {
|
|
49
|
+
// if (group.length == 1) {
|
|
50
|
+
// this.toastr.getErrorToast('Please Select multiple file then add to Group')
|
|
51
|
+
// } else {
|
|
52
|
+
// let dummyarray = group.shift()
|
|
53
|
+
// var groupimages: any = []
|
|
54
|
+
// group.forEach((data: any) => {
|
|
55
|
+
// this.auditmappingdata.splice(this.auditmappingdata.findIndex(({ img_name }: { img_name: string }) => img_name == data.img_name), 1);
|
|
56
|
+
// groupimages.push(data.mappedid[0])
|
|
57
|
+
// })
|
|
58
|
+
// dummyarray.count = dummyarray.count + groupimages.length
|
|
59
|
+
// dummyarray.selected = false
|
|
60
|
+
// dummyarray.mappedid = [...dummyarray.mappedid, ...groupimages]
|
|
61
|
+
// const jsonString = JSON.stringify(this.auditmappingdata);
|
|
62
|
+
// const compressedData = LZString.compress(jsonString);
|
|
63
|
+
// sessionStorage.setItem('audit', compressedData)
|
|
64
|
+
// }
|
|
65
|
+
// // this.initial_data_loading()
|
|
66
|
+
// } else {
|
|
67
|
+
// this.toastr.getErrorToast('Please Select file then add to Group')
|
|
68
|
+
// }
|
|
69
|
+
// }
|
|
70
|
+
const pressed = (event.key || '').toLowerCase();
|
|
71
|
+
const matched = this.category.find((m) => {
|
|
72
|
+
if (!m.key)
|
|
73
|
+
return false;
|
|
74
|
+
const mapKey = m.key.toLowerCase();
|
|
75
|
+
// match by event.key (preferred) OR by event.code like 'KeyJ'
|
|
76
|
+
return pressed === mapKey || event.code === `Key${mapKey.toUpperCase()}`;
|
|
77
|
+
});
|
|
78
|
+
if (!matched)
|
|
79
|
+
return;
|
|
80
|
+
if (matched) {
|
|
81
|
+
var newData = this.auditmappingdata.filter((data) => data.selected === true);
|
|
82
|
+
if (newData.length > 0) {
|
|
83
|
+
var oldData = JSON.parse(sessionStorage.getItem(matched?.type) || '{}');
|
|
84
|
+
if (Number(oldData.length) > 0) {
|
|
85
|
+
newData = [...oldData, ...newData];
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
newData = newData;
|
|
89
|
+
}
|
|
90
|
+
this.category.map((data) => {
|
|
91
|
+
if (data.type === matched?.type) {
|
|
92
|
+
data.count = newData.length;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
sessionStorage.setItem(matched?.type, JSON.stringify(newData));
|
|
96
|
+
this.auditmappingdata = this.auditmappingdata.filter((data) => data.selected === false);
|
|
97
|
+
const jsonString = JSON.stringify(this.auditmappingdata);
|
|
98
|
+
const compressedData = LZString.compress(jsonString);
|
|
99
|
+
sessionStorage.setItem('audit', compressedData);
|
|
100
|
+
this.toastr.getSuccessToast(`${matched?.name} Added Succesfully!`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.toastr.getErrorToast(`Please Select file then add to ${matched?.name} `);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
constructor(modalService, router, $api, toastr, route, timerService, cd) {
|
|
108
|
+
this.modalService = modalService;
|
|
109
|
+
this.router = router;
|
|
110
|
+
this.$api = $api;
|
|
111
|
+
this.toastr = toastr;
|
|
112
|
+
this.route = route;
|
|
113
|
+
this.timerService = timerService;
|
|
114
|
+
this.cd = cd;
|
|
115
|
+
this.selectedType = this.route.snapshot.paramMap.get('type');
|
|
116
|
+
}
|
|
117
|
+
ngOnInit() {
|
|
118
|
+
this.getAuditConfig();
|
|
119
|
+
if (this.retagimage.length == 0) {
|
|
120
|
+
this.submitvalue = false;
|
|
121
|
+
}
|
|
122
|
+
this.auditLoading = false;
|
|
123
|
+
this.setTimer();
|
|
124
|
+
}
|
|
125
|
+
getAuditConfig() {
|
|
126
|
+
let filedata = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
127
|
+
this.$api.getAuditconfig(filedata?.filedetails?.clientId).pipe(takeUntil(this.destroy$)).subscribe({
|
|
128
|
+
next: (res) => {
|
|
129
|
+
if (res && res?.code == 200) {
|
|
130
|
+
this.category = res.data.footfallDirectoryConfigs.taggingLimitation;
|
|
131
|
+
this.initial_data_loading();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
setTimer() {
|
|
137
|
+
this.subscription = this.timerService.getTimePassed().subscribe(time => {
|
|
138
|
+
this.timePassed = time;
|
|
139
|
+
this.formattedTime = this.timerService.formatTime(time);
|
|
140
|
+
this.cd.detectChanges();
|
|
141
|
+
});
|
|
142
|
+
this.timerService.startTimer();
|
|
143
|
+
document.addEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
144
|
+
document.addEventListener('click', this.handleGlobalMouseEvent);
|
|
145
|
+
document.addEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
146
|
+
document.addEventListener('scroll', this.handleGlobalMouseEvent);
|
|
147
|
+
}
|
|
148
|
+
handleGlobalMouseEvent = () => {
|
|
149
|
+
this.timerService.startTimer();
|
|
150
|
+
};
|
|
151
|
+
ngOnDestroy() {
|
|
152
|
+
this.destroy$.next(true);
|
|
153
|
+
this.destroy$.complete();
|
|
154
|
+
document.removeEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
155
|
+
document.removeEventListener('click', this.handleGlobalMouseEvent);
|
|
156
|
+
document.removeEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
157
|
+
document.removeEventListener('scroll', this.handleGlobalMouseEvent);
|
|
158
|
+
this.timerService.clearTimer();
|
|
159
|
+
}
|
|
160
|
+
initial_data_loading() {
|
|
161
|
+
if ('audit' in sessionStorage) {
|
|
162
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
163
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
164
|
+
var auditdata = JSON.parse(decompressedData || '{}');
|
|
165
|
+
if (auditdata.length > 0) {
|
|
166
|
+
this.auditmappingdata = auditdata;
|
|
167
|
+
this.customercount = this.auditmappingdata.length;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.auditmappingdata = [];
|
|
171
|
+
this.customercount = 0;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
this.category.map((data) => {
|
|
175
|
+
var count = JSON.parse(sessionStorage.getItem(data.type) || '{}');
|
|
176
|
+
data.count = count?.length;
|
|
177
|
+
});
|
|
178
|
+
if ('retag' in sessionStorage) {
|
|
179
|
+
var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
|
|
180
|
+
if (retagdata.length > 0) {
|
|
181
|
+
this.retagimage = retagdata;
|
|
182
|
+
this.submitvalue = true;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.retagimage = [];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if ('totalfiles' in sessionStorage) {
|
|
189
|
+
var files = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
190
|
+
this.totalfile = files?.totalfiles;
|
|
191
|
+
this.filedetails = files?.filedetails;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
getmappingdata() {
|
|
195
|
+
this.auditLoading = false;
|
|
196
|
+
var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
197
|
+
this.filedetails = totalfile?.filedetails;
|
|
198
|
+
var payload = {
|
|
199
|
+
storeId: totalfile?.filedetails?.storeId,
|
|
200
|
+
fileDate: totalfile?.filedetails?.Date,
|
|
201
|
+
auditId: totalfile?.auditId,
|
|
202
|
+
count: totalfile?.totalfiles
|
|
203
|
+
};
|
|
204
|
+
this.$api.getAuditmappinglist(payload).pipe(takeUntil(this.destroy$)).subscribe({
|
|
205
|
+
next: (res) => {
|
|
206
|
+
if (res && res?.code == 200) {
|
|
207
|
+
this.auditLoading = false;
|
|
208
|
+
sessionStorage.removeItem('retag');
|
|
209
|
+
this.retagimage = [];
|
|
210
|
+
this.category.map((data) => {
|
|
211
|
+
let filterData = res?.data?.result?.draftedData?.filter((x) => x.type === data.type);
|
|
212
|
+
data.value = filterData[0]?.value && filterData[0]?.value.length > 0 ? filterData[0]?.value : [];
|
|
213
|
+
data.count = data?.value?.length;
|
|
214
|
+
sessionStorage.setItem(data?.type, JSON.stringify(data?.value && data?.value.length > 0 ? data?.value : []));
|
|
215
|
+
});
|
|
216
|
+
let customerData = res?.data?.result?.draftedData?.filter((x) => x.type === 'customer');
|
|
217
|
+
this.auditmappingdata = customerData[0]?.value;
|
|
218
|
+
const jsonString = JSON.stringify(customerData[0]?.value);
|
|
219
|
+
const compressedData = LZString.compress(jsonString);
|
|
220
|
+
sessionStorage.setItem('audit', compressedData);
|
|
221
|
+
this.initial_data_loading();
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
error: (err) => {
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
reviewdata() {
|
|
229
|
+
this.submitvalue = false;
|
|
230
|
+
var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
231
|
+
if ('audit' in sessionStorage) {
|
|
232
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
233
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
234
|
+
var auditdata = JSON.parse(decompressedData || '{}');
|
|
235
|
+
if (auditdata.length > 0) {
|
|
236
|
+
this.auditmappingdata = auditdata;
|
|
237
|
+
this.customercount = this.auditmappingdata.length;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if ('retag' in sessionStorage) {
|
|
241
|
+
var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
|
|
242
|
+
this.retagimage = retagdata;
|
|
243
|
+
this.auditmappingdata = [...this.auditmappingdata, ...this.retagimage];
|
|
244
|
+
const jsonString = JSON.stringify(this.auditmappingdata);
|
|
245
|
+
const compressedData = LZString.compress(jsonString);
|
|
246
|
+
sessionStorage.setItem('audit', compressedData);
|
|
247
|
+
sessionStorage.removeItem('retag');
|
|
248
|
+
this.retagimage = [];
|
|
249
|
+
}
|
|
250
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
251
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
252
|
+
var customer = JSON.parse(decompressedData || '{}');
|
|
253
|
+
let storedData = [
|
|
254
|
+
{
|
|
255
|
+
type: "customer",
|
|
256
|
+
value: customer ? customer : [],
|
|
257
|
+
}
|
|
258
|
+
];
|
|
259
|
+
this.category.map((data) => {
|
|
260
|
+
let sessionvalue = JSON.parse(sessionStorage.getItem(data.type) || '{}');
|
|
261
|
+
storedData.push({
|
|
262
|
+
type: data.type,
|
|
263
|
+
value: sessionvalue && sessionvalue.length > 0 ? sessionvalue : []
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
var inserobj = {
|
|
267
|
+
storeId: totalfile?.filedetails?.storeId,
|
|
268
|
+
auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails.auditId,
|
|
269
|
+
fileDate: totalfile?.filedetails?.Date,
|
|
270
|
+
totalCount: totalfile?.totalfiles ? totalfile.totalfiles : 0,
|
|
271
|
+
retagCount: 0,
|
|
272
|
+
timeSpent: this.timePassed,
|
|
273
|
+
retagImage: [],
|
|
274
|
+
draftedData: storedData
|
|
275
|
+
};
|
|
276
|
+
this.$api.saveDraft(inserobj).pipe(takeUntil(this.destroy$)).subscribe({
|
|
277
|
+
next: (res) => {
|
|
278
|
+
if (res && res.code == 200) {
|
|
279
|
+
this.getmappingdata();
|
|
280
|
+
this.router.navigate(["/manage/tickets/mapping-list",]);
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
error: (err) => {
|
|
284
|
+
this.toastr.getErrorToast(err?.error);
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
retagallowDrop(event) {
|
|
289
|
+
event.preventDefault();
|
|
290
|
+
}
|
|
291
|
+
dragStart(event) {
|
|
292
|
+
event.dataTransfer.setData("text/plain", event.target.id);
|
|
293
|
+
}
|
|
294
|
+
dropretag(event) {
|
|
295
|
+
event.preventDefault();
|
|
296
|
+
const dropretagimage = event.dataTransfer.getData('text/plain');
|
|
297
|
+
event.target.appendChild(document.getElementById(dropretagimage));
|
|
298
|
+
const dropzone = dropretagimage;
|
|
299
|
+
this.auditmappingdata.map((data) => {
|
|
300
|
+
if (data.img_id == dropzone.id) {
|
|
301
|
+
if (data.mappedid.length > 0) {
|
|
302
|
+
var findone = this.auditmappingdata.filter((data) => data.img_name == dropretagimage);
|
|
303
|
+
if (findone.length > 0) {
|
|
304
|
+
data.count = data.count + findone[0].count;
|
|
305
|
+
data.mappedid = [...data.mappedid, ...findone[0].mappedid];
|
|
306
|
+
}
|
|
307
|
+
if ('duplicate' in sessionStorage) {
|
|
308
|
+
let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
|
|
309
|
+
filedata = [...filedata, ...findone];
|
|
310
|
+
sessionStorage.setItem('duplicate', JSON.stringify(filedata));
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
sessionStorage.setItem('duplicate', JSON.stringify(findone));
|
|
314
|
+
let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
|
|
315
|
+
}
|
|
316
|
+
this.category.map((data) => {
|
|
317
|
+
var count = JSON.parse(sessionStorage.getItem(data.type) || '{}');
|
|
318
|
+
data.count = count?.length;
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
data.count = data.count + 1,
|
|
323
|
+
data.mappedid.push(dropretagimage);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
selectretagimage(res) {
|
|
329
|
+
this.retagimage.map((data) => {
|
|
330
|
+
if (data.img_id == res) {
|
|
331
|
+
if (data.mappedid.length == 1) {
|
|
332
|
+
data.selected = !data.selected;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
selectgroupimage(res) {
|
|
338
|
+
this.auditmappingdata.map((data) => {
|
|
339
|
+
if (data.img_id == res) {
|
|
340
|
+
if (data.mappedid.length == 1) {
|
|
341
|
+
data.selected = !data.selected;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
removeaudit(data) {
|
|
347
|
+
const modalRef = this.modalService.open(RemoveAuditComponent, {
|
|
348
|
+
size: 'lg',
|
|
349
|
+
centered: true,
|
|
350
|
+
backdrop: 'static',
|
|
351
|
+
keyboard: false
|
|
352
|
+
});
|
|
353
|
+
modalRef.componentInstance.data = data;
|
|
354
|
+
modalRef.closed.subscribe((res) => {
|
|
355
|
+
if (res && res?.reload) {
|
|
356
|
+
this.initial_data_loading();
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
submitaudit() {
|
|
361
|
+
const modalRef = this.modalService.open(AuditReportPopupComponent, {
|
|
362
|
+
size: 'lg',
|
|
363
|
+
centered: true,
|
|
364
|
+
backdrop: 'static',
|
|
365
|
+
keyboard: false
|
|
366
|
+
});
|
|
367
|
+
modalRef.componentInstance.selectedType = this.selectedType;
|
|
368
|
+
modalRef.closed;
|
|
369
|
+
}
|
|
370
|
+
viewcategory(data) {
|
|
371
|
+
const modalRef = this.modalService.open(ViewcategoryComponent, {
|
|
372
|
+
size: 'lg',
|
|
373
|
+
centered: true,
|
|
374
|
+
backdrop: 'static',
|
|
375
|
+
keyboard: false
|
|
376
|
+
});
|
|
377
|
+
modalRef.componentInstance.data = data;
|
|
378
|
+
modalRef.componentInstance.imageList = data,
|
|
379
|
+
modalRef.closed.subscribe((res) => {
|
|
380
|
+
if (res && res?.reload) {
|
|
381
|
+
this.initial_data_loading();
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
dropImage(event) {
|
|
386
|
+
const htmltag = event.dataTransfer.getData('text/html');
|
|
387
|
+
var Name = getTagNameFromHTML(htmltag);
|
|
388
|
+
const dropZone = event.target;
|
|
389
|
+
// debugger
|
|
390
|
+
if (Name == 'customer' || Name == 'retag') {
|
|
391
|
+
event.preventDefault();
|
|
392
|
+
const draggedImageId = event.dataTransfer.getData('text/plain');
|
|
393
|
+
const draggedImage = document.getElementById(draggedImageId);
|
|
394
|
+
event.target.appendChild(draggedImage);
|
|
395
|
+
this.auditmappingdata.map((data, index) => {
|
|
396
|
+
if (data.img_id === dropZone.id) {
|
|
397
|
+
let findone = [];
|
|
398
|
+
const retagdata = JSON.parse(sessionStorage.getItem('retag') || '[]');
|
|
399
|
+
this.retagimage = retagdata;
|
|
400
|
+
findone = this.retagimage.filter((imgData) => imgData.img_id === draggedImageId);
|
|
401
|
+
if (findone.length === 0) {
|
|
402
|
+
findone = this.auditmappingdata.filter((imgData) => imgData.img_id === draggedImageId);
|
|
403
|
+
}
|
|
404
|
+
this.retagimage = this.retagimage.filter((imgData) => imgData.img_id !== draggedImageId);
|
|
405
|
+
sessionStorage.setItem('retag', JSON.stringify(this.retagimage));
|
|
406
|
+
if (findone.length > 0) {
|
|
407
|
+
data.mappedid = [...data.mappedid, ...findone[0].mappedid];
|
|
408
|
+
data.count = data.mappedid.length;
|
|
409
|
+
if ('duplicate' in sessionStorage) {
|
|
410
|
+
let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
|
|
411
|
+
filedata = [...filedata, ...findone];
|
|
412
|
+
sessionStorage.setItem('duplicate', JSON.stringify(filedata));
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
sessionStorage.setItem('duplicate', JSON.stringify(findone));
|
|
416
|
+
let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
data.count += 1;
|
|
421
|
+
data.mappedid.push(draggedImageId);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
if (Name == 'customer') {
|
|
426
|
+
this.auditmappingdata.splice(this.auditmappingdata.findIndex(({ img_id }) => img_id == draggedImageId), 1);
|
|
427
|
+
this.auditmappingdata.map((data) => data.selected = false);
|
|
428
|
+
}
|
|
429
|
+
this.customercount = this.auditmappingdata?.length;
|
|
430
|
+
const jsonString = JSON.stringify(this.auditmappingdata);
|
|
431
|
+
const compressedData = LZString.compress(jsonString);
|
|
432
|
+
sessionStorage.setItem('audit', compressedData);
|
|
433
|
+
var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
|
|
434
|
+
this.retagimage = retagdata;
|
|
435
|
+
if (this.retagimage.length == 0) {
|
|
436
|
+
this.submitvalue = false;
|
|
437
|
+
}
|
|
438
|
+
this.category.map((data) => {
|
|
439
|
+
var count = JSON.parse(sessionStorage.getItem(data.type) || '{}');
|
|
440
|
+
data.count = count?.length;
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
function getTagNameFromHTML(html) {
|
|
444
|
+
var tempElement = document.createElement('div');
|
|
445
|
+
tempElement.innerHTML = html;
|
|
446
|
+
var firstChild = tempElement.firstChild;
|
|
447
|
+
if (firstChild.hasAttribute('name')) {
|
|
448
|
+
var namePropertyValue = firstChild.getAttribute('name');
|
|
449
|
+
return namePropertyValue;
|
|
450
|
+
}
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditRetagComponent, deps: [{ token: i1.NgbModal }, { token: i2.Router }, { token: i3.AuditService }, { token: i4.ToastService }, { token: i2.ActivatedRoute }, { token: i5.TimerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
455
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditRetagComponent, selector: "lib-audit-retag", host: { listeners: { "window:keydown": "handleKeyPress($event)" } }, ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title\">\r\n <h3 class=\"flex-column\">\r\n <div class=\"card-label\">\r\n <span>{{filedetails?.storeId}}</span>\r\n <span class=\"mx-3 arrow-code\"> - </span>\r\n <span>{{filedetails?.Date}}</span>\r\n </div>\r\n </h3>\r\n <div class=\"rounded-3 ms-3 d-flex align-items-center bg-timer\">\r\n <span class=\"me-3 text-timer fw-semibold\">{{ formattedTime }}</span>\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.16667 2.87071C9.16667 2.62023 9.26617 2.38001 9.44329 2.20289C9.62041 2.02577 9.86063 1.92627 10.1111 1.92627H13.8889C14.1394 1.92627 14.3796 2.02577 14.5567 2.20289C14.7338 2.38001 14.8333 2.62023 14.8333 2.87071C14.8333 3.1212 14.7338 3.36142 14.5567 3.53854C14.3796 3.71565 14.1394 3.81516 13.8889 3.81516H12.9444V5.07442L12.9432 5.12605C14.5396 5.30097 16.0528 5.92787 17.3053 6.93308L17.3141 6.92553L18.2585 5.98108C18.374 5.85676 18.5208 5.76588 18.6835 5.71801C18.8463 5.67014 19.019 5.66706 19.1833 5.70908C19.3477 5.75111 19.4977 5.83669 19.6175 5.9568C19.7373 6.07692 19.8225 6.22713 19.8641 6.3916C19.906 6.55578 19.903 6.72823 19.8554 6.89085C19.8077 7.05348 19.7172 7.20029 19.5933 7.3159L18.6489 8.26034L18.6413 8.26915C19.6403 9.51974 20.2658 11.027 20.446 12.6174C20.6261 14.2078 20.3536 15.8167 19.6597 17.2591C18.9658 18.7014 17.8788 19.9185 16.5237 20.7704C15.1686 21.6222 13.6006 22.0741 12 22.0741C10.3994 22.0741 8.83137 21.6222 7.47629 20.7704C6.12122 19.9185 5.03419 18.7014 4.3403 17.2591C3.64641 15.8167 3.37386 14.2078 3.55402 12.6174C3.73418 11.027 4.35973 9.51974 5.35867 8.26915L5.35111 8.26034L4.40667 7.3159C4.23964 7.1369 4.14865 6.90003 4.15287 6.65524C4.1571 6.41045 4.25622 6.17687 4.42934 6.00375C4.60246 5.83063 4.83604 5.73151 5.08083 5.72728C5.32562 5.72306 5.56249 5.81405 5.74149 5.98108L6.68593 6.92553L6.69474 6.93308C7.94681 5.92809 9.45963 5.3012 11.0556 5.12605V3.81516H10.1111C9.86063 3.81516 9.62041 3.71565 9.44329 3.53854C9.26617 3.36142 9.16667 3.1212 9.16667 2.87071ZM12 20.1855C13.7535 20.1854 15.4352 19.4886 16.675 18.2485C17.9148 17.0085 18.6113 15.3267 18.6111 13.5732C18.6109 11.8196 17.9142 10.138 16.6741 8.89813C15.4341 7.65831 13.7523 6.96188 11.9987 6.96204C10.2452 6.96221 8.56354 7.65896 7.32372 8.89902C6.0839 10.1391 5.38747 11.8209 5.38763 13.5744C5.3878 15.328 6.08455 17.0096 7.32461 18.2494C8.56467 19.4893 10.2465 20.1857 12 20.1855ZM12.4899 11.7485L14.1647 10.0737C14.2517 9.98343 14.3559 9.91143 14.4711 9.86188C14.5863 9.81233 14.7102 9.78622 14.8356 9.78507C14.9611 9.78392 15.0854 9.80776 15.2015 9.85519C15.3176 9.90262 15.4231 9.9727 15.5118 10.0613C15.6005 10.15 15.6707 10.2554 15.7182 10.3714C15.7658 10.4875 15.7897 10.6118 15.7887 10.7372C15.7877 10.8626 15.7617 10.9866 15.7122 11.1018C15.6628 11.2171 15.5909 11.3213 15.5007 11.4085L13.8259 13.0846C13.9003 13.3645 13.9095 13.6579 13.8526 13.942C13.7958 14.226 13.6745 14.4933 13.4981 14.7231C13.3217 14.9529 13.0949 15.1391 12.8352 15.2675C12.5754 15.3958 12.2897 15.4628 12 15.4633C11.7327 15.461 11.4688 15.4019 11.226 15.29C10.9832 15.1781 10.767 15.0159 10.5916 14.8141C10.4162 14.6123 10.2857 14.3755 10.2087 14.1195C10.1316 13.8635 10.1099 13.594 10.1448 13.329C10.1798 13.0639 10.2706 12.8093 10.4114 12.582C10.5522 12.3547 10.7396 12.1599 10.9613 12.0104C11.183 11.861 11.4339 11.7604 11.6974 11.7152C11.9609 11.6701 12.231 11.6814 12.4899 11.7485Z\"\r\n fill=\"black\" />\r\n </svg></span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <a class=\"btn btn-sm btn-default btn-outline py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n <button class=\"btn btn-sm btn-primary py-2 mx-2\" [disabled]=\"submitvalue\"\r\n (click)=\"submitaudit()\">Submit\r\n <span class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M4.16699 10.0001H15.8337M15.8337 10.0001L10.0003 4.16675M15.8337 10.0001L10.0003 15.8334\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-header\">\r\n <h3 class=\"card-title align-items-center flex-row\">\r\n <span class=\"card-label text-dark\">Total Files - <span>{{totalfile}}</span></span>\r\n \r\n </h3>\r\n <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"me-3 text fw-semibold\">Unique Customers <span\r\n class=\" badge badge-light-primary\">{{auditmappingdata?.length ? auditmappingdata?.length :\r\n 0}}</span></span>\r\n <div *ngFor=\"let item of category\">\r\n <button class=\"btn btn-outline text w-semibold btn-sm py-2 butn-flag mx-2\" (click)=\"viewcategory(item)\" [disabled]=\"!item?.count\">View\r\n {{item?.name}}\r\n <span class=\" badge badge-light-primary\">{{item?.count}}</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"auditLoading\" class=\"card mt-5\">\r\n <div class=\"card-body h-500px\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <h5 class=\"text-dark-600 fw-bold text-center mt-5\">Loading Audit file......</h5> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-5\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Images for Retagging</div>\r\n <div class=\"text-sub mt-2 fw-semibold\">Drag and Drop on correct customers</div>\r\n <div class=\"item\" *ngFor=\"let obj1 of retagimage\" (dragover)=\"retagallowDrop($event)\">\r\n <img draggable=\"true\" (dragstart)=\"dragStart($event)\" id=\"{{obj1.img_id}}\" [src]=\"obj1.img_path\"\r\n class=\"my-3 mx-4 img-ret\" (click)=\"selectretagimage(obj1.img_id)\" name=\"retag\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj1.img_name}}</div>\r\n <span *ngIf=\"obj1.selected\" class=\"notify-badge1 nwbg\"><i class=\"fa fa-check colorvalue\"\r\n aria-hidden=\"true\" style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj1)\"\r\n *ngIf=\"obj1.count>1\">{{obj1.count}}</span>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-7\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Unique Customers <span class=\"card-label\">{{auditmappingdata?.length ?\r\n auditmappingdata?.length : 0}}</span></div>\r\n <div class=\"item\" *ngFor=\"let obj of auditmappingdata;let i=index\" style=\"padding: 10px;\">\r\n\r\n <img class=\"mx-3 mb-5 img\" [src]=\"obj.img_path\" id=\"{{obj.img_id}}\" alt=\"Image\" name=\"customer\"\r\n (dragover)=\"retagallowDrop($event)\" (drop)=\"dropImage($event)\" draggable=\"true\"\r\n (dragstart)=\"dragStart($event)\" (click)=\"selectgroupimage(obj.img_id )\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj.img_name}}</div>\r\n <span *ngIf=\"obj.selected\" class=\"notify-badge1\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj)\"\r\n *ngIf=\"obj.count>1\">{{obj.count}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>", styles: [".img{width:90px;height:200px}.text{color:var(--Gray-700, #344054);font-size:14px;line-height:20px}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.card-label{font-family:Inter;font-style:normal;font-size:18px!important}.text-col{font-family:Inter;font-style:normal;font-weight:400;font-size:14px;line-height:17px;color:#3f4254}.img-ret{width:90px;height:170px}.butn:hover{color:#009ef7!important}.butn-flag{border:1px solid #009ef7!important;border-right-style:none!important;border-radius:.5rem 0rem 0rem .5rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.butn-flag1{border:1px solid #009ef7!important;border-radius:0rem .5rem .5rem 0rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.btn-check:checked+.btn.btn-light-primary,.btn-check:active+.btn.btn-light-primary,.btn.btn-light-primary:focus:not(.btn-active),.btn.btn-light-primary:hover:not(.btn-active),.btn.btn-light-primary:active:not(.btn-active),.btn.btn-light-primary.active,.btn.btn-light-primary.show,.show>.btn.btn-light-primary{background-color:#fff!important}.butn{border:1px solid #009ef7!important;padding:calc(.65rem + 1px) calc(1.5rem + 1px)!important}.h-800px{min-height:120px;max-height:auto}.h-500{min-height:300px}.h-1000px{overflow:auto}.item{position:relative;padding-top:20px;display:inline-block}.notify-badge{position:absolute;right:0;top:195px;background:var(--Primary-50, #EAF8FF);border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;color:#00a3ff;padding:5px 10px;font-size:15px}.notify-badge1{position:absolute;right:14px;top:5px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;border:2px solid var(--Primary-600, #00A3FF);color:#00a3ff;padding:0 7px;font-size:19px}.colorvalue{font-size:20px;color:#fff}.nwbg{top:23px!important;right:7px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.text-timer{color:var(--Gray-900, #101828);font-size:24px;line-height:32px}.bg-timer{border-radius:12px;background:var(--Primary-25, #F6FCFF);padding:4px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
456
|
+
}
|
|
457
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditRetagComponent, decorators: [{
|
|
458
|
+
type: Component,
|
|
459
|
+
args: [{ selector: 'lib-audit-retag', template: "<div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title\">\r\n <h3 class=\"flex-column\">\r\n <div class=\"card-label\">\r\n <span>{{filedetails?.storeId}}</span>\r\n <span class=\"mx-3 arrow-code\"> - </span>\r\n <span>{{filedetails?.Date}}</span>\r\n </div>\r\n </h3>\r\n <div class=\"rounded-3 ms-3 d-flex align-items-center bg-timer\">\r\n <span class=\"me-3 text-timer fw-semibold\">{{ formattedTime }}</span>\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.16667 2.87071C9.16667 2.62023 9.26617 2.38001 9.44329 2.20289C9.62041 2.02577 9.86063 1.92627 10.1111 1.92627H13.8889C14.1394 1.92627 14.3796 2.02577 14.5567 2.20289C14.7338 2.38001 14.8333 2.62023 14.8333 2.87071C14.8333 3.1212 14.7338 3.36142 14.5567 3.53854C14.3796 3.71565 14.1394 3.81516 13.8889 3.81516H12.9444V5.07442L12.9432 5.12605C14.5396 5.30097 16.0528 5.92787 17.3053 6.93308L17.3141 6.92553L18.2585 5.98108C18.374 5.85676 18.5208 5.76588 18.6835 5.71801C18.8463 5.67014 19.019 5.66706 19.1833 5.70908C19.3477 5.75111 19.4977 5.83669 19.6175 5.9568C19.7373 6.07692 19.8225 6.22713 19.8641 6.3916C19.906 6.55578 19.903 6.72823 19.8554 6.89085C19.8077 7.05348 19.7172 7.20029 19.5933 7.3159L18.6489 8.26034L18.6413 8.26915C19.6403 9.51974 20.2658 11.027 20.446 12.6174C20.6261 14.2078 20.3536 15.8167 19.6597 17.2591C18.9658 18.7014 17.8788 19.9185 16.5237 20.7704C15.1686 21.6222 13.6006 22.0741 12 22.0741C10.3994 22.0741 8.83137 21.6222 7.47629 20.7704C6.12122 19.9185 5.03419 18.7014 4.3403 17.2591C3.64641 15.8167 3.37386 14.2078 3.55402 12.6174C3.73418 11.027 4.35973 9.51974 5.35867 8.26915L5.35111 8.26034L4.40667 7.3159C4.23964 7.1369 4.14865 6.90003 4.15287 6.65524C4.1571 6.41045 4.25622 6.17687 4.42934 6.00375C4.60246 5.83063 4.83604 5.73151 5.08083 5.72728C5.32562 5.72306 5.56249 5.81405 5.74149 5.98108L6.68593 6.92553L6.69474 6.93308C7.94681 5.92809 9.45963 5.3012 11.0556 5.12605V3.81516H10.1111C9.86063 3.81516 9.62041 3.71565 9.44329 3.53854C9.26617 3.36142 9.16667 3.1212 9.16667 2.87071ZM12 20.1855C13.7535 20.1854 15.4352 19.4886 16.675 18.2485C17.9148 17.0085 18.6113 15.3267 18.6111 13.5732C18.6109 11.8196 17.9142 10.138 16.6741 8.89813C15.4341 7.65831 13.7523 6.96188 11.9987 6.96204C10.2452 6.96221 8.56354 7.65896 7.32372 8.89902C6.0839 10.1391 5.38747 11.8209 5.38763 13.5744C5.3878 15.328 6.08455 17.0096 7.32461 18.2494C8.56467 19.4893 10.2465 20.1857 12 20.1855ZM12.4899 11.7485L14.1647 10.0737C14.2517 9.98343 14.3559 9.91143 14.4711 9.86188C14.5863 9.81233 14.7102 9.78622 14.8356 9.78507C14.9611 9.78392 15.0854 9.80776 15.2015 9.85519C15.3176 9.90262 15.4231 9.9727 15.5118 10.0613C15.6005 10.15 15.6707 10.2554 15.7182 10.3714C15.7658 10.4875 15.7897 10.6118 15.7887 10.7372C15.7877 10.8626 15.7617 10.9866 15.7122 11.1018C15.6628 11.2171 15.5909 11.3213 15.5007 11.4085L13.8259 13.0846C13.9003 13.3645 13.9095 13.6579 13.8526 13.942C13.7958 14.226 13.6745 14.4933 13.4981 14.7231C13.3217 14.9529 13.0949 15.1391 12.8352 15.2675C12.5754 15.3958 12.2897 15.4628 12 15.4633C11.7327 15.461 11.4688 15.4019 11.226 15.29C10.9832 15.1781 10.767 15.0159 10.5916 14.8141C10.4162 14.6123 10.2857 14.3755 10.2087 14.1195C10.1316 13.8635 10.1099 13.594 10.1448 13.329C10.1798 13.0639 10.2706 12.8093 10.4114 12.582C10.5522 12.3547 10.7396 12.1599 10.9613 12.0104C11.183 11.861 11.4339 11.7604 11.6974 11.7152C11.9609 11.6701 12.231 11.6814 12.4899 11.7485Z\"\r\n fill=\"black\" />\r\n </svg></span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <a class=\"btn btn-sm btn-default btn-outline py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n <button class=\"btn btn-sm btn-primary py-2 mx-2\" [disabled]=\"submitvalue\"\r\n (click)=\"submitaudit()\">Submit\r\n <span class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M4.16699 10.0001H15.8337M15.8337 10.0001L10.0003 4.16675M15.8337 10.0001L10.0003 15.8334\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-header\">\r\n <h3 class=\"card-title align-items-center flex-row\">\r\n <span class=\"card-label text-dark\">Total Files - <span>{{totalfile}}</span></span>\r\n \r\n </h3>\r\n <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"me-3 text fw-semibold\">Unique Customers <span\r\n class=\" badge badge-light-primary\">{{auditmappingdata?.length ? auditmappingdata?.length :\r\n 0}}</span></span>\r\n <div *ngFor=\"let item of category\">\r\n <button class=\"btn btn-outline text w-semibold btn-sm py-2 butn-flag mx-2\" (click)=\"viewcategory(item)\" [disabled]=\"!item?.count\">View\r\n {{item?.name}}\r\n <span class=\" badge badge-light-primary\">{{item?.count}}</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"auditLoading\" class=\"card mt-5\">\r\n <div class=\"card-body h-500px\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <h5 class=\"text-dark-600 fw-bold text-center mt-5\">Loading Audit file......</h5> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-5\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Images for Retagging</div>\r\n <div class=\"text-sub mt-2 fw-semibold\">Drag and Drop on correct customers</div>\r\n <div class=\"item\" *ngFor=\"let obj1 of retagimage\" (dragover)=\"retagallowDrop($event)\">\r\n <img draggable=\"true\" (dragstart)=\"dragStart($event)\" id=\"{{obj1.img_id}}\" [src]=\"obj1.img_path\"\r\n class=\"my-3 mx-4 img-ret\" (click)=\"selectretagimage(obj1.img_id)\" name=\"retag\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj1.img_name}}</div>\r\n <span *ngIf=\"obj1.selected\" class=\"notify-badge1 nwbg\"><i class=\"fa fa-check colorvalue\"\r\n aria-hidden=\"true\" style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj1)\"\r\n *ngIf=\"obj1.count>1\">{{obj1.count}}</span>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-7\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Unique Customers <span class=\"card-label\">{{auditmappingdata?.length ?\r\n auditmappingdata?.length : 0}}</span></div>\r\n <div class=\"item\" *ngFor=\"let obj of auditmappingdata;let i=index\" style=\"padding: 10px;\">\r\n\r\n <img class=\"mx-3 mb-5 img\" [src]=\"obj.img_path\" id=\"{{obj.img_id}}\" alt=\"Image\" name=\"customer\"\r\n (dragover)=\"retagallowDrop($event)\" (drop)=\"dropImage($event)\" draggable=\"true\"\r\n (dragstart)=\"dragStart($event)\" (click)=\"selectgroupimage(obj.img_id )\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj.img_name}}</div>\r\n <span *ngIf=\"obj.selected\" class=\"notify-badge1\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj)\"\r\n *ngIf=\"obj.count>1\">{{obj.count}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>", styles: [".img{width:90px;height:200px}.text{color:var(--Gray-700, #344054);font-size:14px;line-height:20px}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.card-label{font-family:Inter;font-style:normal;font-size:18px!important}.text-col{font-family:Inter;font-style:normal;font-weight:400;font-size:14px;line-height:17px;color:#3f4254}.img-ret{width:90px;height:170px}.butn:hover{color:#009ef7!important}.butn-flag{border:1px solid #009ef7!important;border-right-style:none!important;border-radius:.5rem 0rem 0rem .5rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.butn-flag1{border:1px solid #009ef7!important;border-radius:0rem .5rem .5rem 0rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.btn-check:checked+.btn.btn-light-primary,.btn-check:active+.btn.btn-light-primary,.btn.btn-light-primary:focus:not(.btn-active),.btn.btn-light-primary:hover:not(.btn-active),.btn.btn-light-primary:active:not(.btn-active),.btn.btn-light-primary.active,.btn.btn-light-primary.show,.show>.btn.btn-light-primary{background-color:#fff!important}.butn{border:1px solid #009ef7!important;padding:calc(.65rem + 1px) calc(1.5rem + 1px)!important}.h-800px{min-height:120px;max-height:auto}.h-500{min-height:300px}.h-1000px{overflow:auto}.item{position:relative;padding-top:20px;display:inline-block}.notify-badge{position:absolute;right:0;top:195px;background:var(--Primary-50, #EAF8FF);border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;color:#00a3ff;padding:5px 10px;font-size:15px}.notify-badge1{position:absolute;right:14px;top:5px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;border:2px solid var(--Primary-600, #00A3FF);color:#00a3ff;padding:0 7px;font-size:19px}.colorvalue{font-size:20px;color:#fff}.nwbg{top:23px!important;right:7px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.text-timer{color:var(--Gray-900, #101828);font-size:24px;line-height:32px}.bg-timer{border-radius:12px;background:var(--Primary-25, #F6FCFF);padding:4px}\n"] }]
|
|
460
|
+
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.Router }, { type: i3.AuditService }, { type: i4.ToastService }, { type: i2.ActivatedRoute }, { type: i5.TimerService }, { type: i0.ChangeDetectorRef }], propDecorators: { handleKeyPress: [{
|
|
461
|
+
type: HostListener,
|
|
462
|
+
args: ['window:keydown', ['$event']]
|
|
463
|
+
}] } });
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcmV0YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXRpY2tldHMvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXJldGFnL2F1ZGl0LXJldGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXRhZy9hdWRpdC1yZXRhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFLdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDL0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQU8vRSxNQUFNLE9BQU8sbUJBQW1CO0lBeUZYO0lBQWdDO0lBQXdCO0lBQ2pFO0lBQThCO0lBQStCO0lBQW9DO0lBeEYzRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsU0FBUyxHQUFRLEVBQUUsQ0FBQTtJQUNuQixVQUFVLEdBQVEsRUFBRSxDQUFBO0lBQ3BCLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsZ0JBQWdCLEdBQVEsRUFBRSxDQUFDO0lBQzNCLGFBQWEsR0FBUSxDQUFDLENBQUM7SUFDdkIsU0FBUyxHQUFRLENBQUMsQ0FBQztJQUNuQixhQUFhLEdBQVEsQ0FBQyxDQUFDO0lBQ3ZCLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIsV0FBVyxHQUFRLEVBQUUsQ0FBQztJQUN0QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFlBQVksQ0FBTTtJQUNELFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUF3QixJQUFJLENBQUM7SUFDekMsYUFBYSxHQUFXLFVBQVUsQ0FBQztJQUVuQyxTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFFBQVEsR0FBUSxFQUFFLENBQUE7SUFFbEIsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzNCLG9EQUFvRDtRQUNwRCxvRkFBb0Y7UUFDcEYsNEJBQTRCO1FBQzVCLCtCQUErQjtRQUMvQixtRkFBbUY7UUFDbkYsZUFBZTtRQUNmLHVDQUF1QztRQUN2QyxrQ0FBa0M7UUFDbEMsdUNBQXVDO1FBQ3ZDLCtJQUErSTtRQUMvSSw2Q0FBNkM7UUFDN0MsV0FBVztRQUNYLGlFQUFpRTtRQUNqRSxvQ0FBb0M7UUFFcEMsdUVBQXVFO1FBQ3ZFLGtFQUFrRTtRQUNsRSw4REFBOEQ7UUFDOUQsd0RBQXdEO1FBQ3hELFFBQVE7UUFFUixxQ0FBcUM7UUFDckMsYUFBYTtRQUNiLHdFQUF3RTtRQUN4RSxNQUFNO1FBQ04sSUFBSTtRQUNKLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLDhEQUE4RDtZQUM5RCxPQUFPLE9BQU8sS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFNO1FBQ3BCLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQTtZQUNqRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO2dCQUN2RSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM5QixPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFBO2lCQUNuQztxQkFBTTtvQkFDTCxPQUFPLEdBQUcsT0FBTyxDQUFBO2lCQUNsQjtnQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUM5QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLElBQUksRUFBRTt3QkFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO3FCQUM1QjtnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2dCQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQTtnQkFDNUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDekQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDckQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUkscUJBQXFCLENBQUMsQ0FBQzthQUNwRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQ0FBa0MsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUE7YUFDOUU7U0FFRjtJQUVILENBQUM7SUFDRCxZQUFtQixZQUFzQixFQUFVLE1BQWMsRUFBVSxJQUFrQixFQUNuRixNQUFvQixFQUFVLEtBQXFCLEVBQVUsWUFBMEIsRUFBVSxFQUFxQjtRQUQ3RyxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFjO1FBQ25GLFdBQU0sR0FBTixNQUFNLENBQWM7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDOUgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7UUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxjQUFjO1FBRVosSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDakcsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFO29CQUUzQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUE7b0JBQ25FLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO2lCQUU1QjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNyRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxzQkFBc0IsR0FBRyxHQUFTLEVBQUU7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNqQyxDQUFDLENBQUE7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3ZFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN4RSxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUE7SUFFaEMsQ0FBQztJQUVELG9CQUFvQjtRQUVsQixJQUFJLE9BQU8sSUFBSSxjQUFjLEVBQUU7WUFDN0IsSUFBSSxhQUFhLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUE7WUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLENBQUE7WUFFcEQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFBO2FBQ2xEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFBO2FBQ3ZCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7WUFFakUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxPQUFPLElBQUksY0FBYyxFQUFFO1lBQzdCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtZQUNuRSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7YUFDdEI7U0FFRjtRQUVELElBQUksWUFBWSxJQUFJLGNBQWMsRUFBRTtZQUNsQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7WUFDcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLEVBQUUsVUFBVSxDQUFBO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLFdBQVcsQ0FBQTtTQUV0QztJQUNILENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7UUFDekIsSUFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLFdBQVcsQ0FBQTtRQUV6QyxJQUFJLE9BQU8sR0FBUTtZQUNqQixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPO1lBQ3hDLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUk7WUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPO1lBQzNCLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVTtTQUM3QixDQUFBO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM5RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO29CQUN6QixjQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQTtvQkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxVQUFVLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7d0JBQ3pGLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTt3QkFDaEcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQTt3QkFDaEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBRTlHLENBQUMsQ0FBQyxDQUFBO29CQUNGLElBQUksWUFBWSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUE7b0JBRzVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFBO29CQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDckQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7b0JBQy9DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO2lCQUM1QjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUVwQixDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLFNBQVMsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksY0FBYyxFQUFFO1lBQzdCLElBQUksYUFBYSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFBO1lBQzNELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFBO1lBQ3BELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQzthQUNuRDtTQUNGO1FBQ0QsSUFBSSxPQUFPLElBQUksY0FBYyxFQUFFO1lBQzdCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtZQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDL0MsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUksYUFBYSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFBO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFBO1FBQ25ELElBQUksVUFBVSxHQUFHO1lBQ2Y7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNoQztTQUNGLENBQUE7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzlCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDekUsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQ25FLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxRQUFRLEdBQVE7WUFFbEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTztZQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxPQUFPO1lBQ2pGLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUk7WUFDdEMsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsVUFBVSxFQUFFLEVBQUU7WUFDZCxXQUFXLEVBQUUsVUFBVTtTQUN4QixDQUFBO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckUsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFBO2lCQUN4RDtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3ZDLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxTQUFTLENBQUMsS0FBVTtRQUNsQixLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVU7UUFDbEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBUSxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBRXRDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsQ0FBQTtvQkFDMUYsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7d0JBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7cUJBQzNEO29CQUNELElBQUksV0FBVyxJQUFJLGNBQWMsRUFBRTt3QkFDakMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO3dCQUN0RSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFBO3dCQUNwQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7cUJBQzlEO3lCQUFNO3dCQUNMLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTt3QkFDNUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO3FCQUd2RTtvQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO3dCQUM5QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO3dCQUNqRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUE7b0JBQzVCLENBQUMsQ0FBQyxDQUFBO2lCQUVIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO3dCQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtpQkFDckM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVE7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNoQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFO2dCQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7aUJBQy9CO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFRO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFO2dCQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7aUJBQy9CO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBUztRQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM1RCxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFBO1FBQ0YsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFO2dCQUN0QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUNELFdBQVc7UUFDVCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUNqRSxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFBO1FBQ0YsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzVELFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUdELFlBQVksQ0FBQyxJQUFTO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzdELElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUE7UUFDRixRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUN0QyxRQUFRLENBQUMsaUJBQWlCLENBQUMsU0FBUyxHQUFHLElBQUk7WUFDekMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRTtvQkFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVU7UUFDbEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUU5QixXQUFXO1FBQ1gsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUU7WUFDekMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxLQUFhLEVBQUUsRUFBRTtnQkFFckQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxFQUFFLEVBQUU7b0JBQy9CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUN0RSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztvQkFDNUIsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxDQUFDO29CQUN0RixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUN4QixPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsQ0FBQztxQkFDN0Y7b0JBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsQ0FBQztvQkFDOUYsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFHakUsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFFdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzt3QkFFbEMsSUFBSSxXQUFXLElBQUksY0FBYyxFQUFFOzRCQUNqQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7NEJBQ3RFLFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUE7NEJBQ3BDLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTt5QkFDOUQ7NkJBQU07NEJBQ0wsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBOzRCQUM1RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7eUJBR3ZFO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO3dCQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztxQkFDcEM7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtnQkFFdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQXNCLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQTthQUNoRTtZQUlELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztZQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDL0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO1lBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7Z0JBQ2pFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQTtZQUM1QixDQUFDLENBQUMsQ0FBQTtTQUNIO1FBSUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFTO1lBQ25DLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxVQUFVLEdBQVEsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUM3QyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ25DLElBQUksaUJBQWlCLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEQsT0FBTyxpQkFBaUIsQ0FBQzthQUMxQjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7d0dBN2RVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDRIQ2pCaEMsc3dVQWdJTTs7NEZEL0dPLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7Z1BBNkIzQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIExaU3RyaW5nIGZyb20gJ2x6LXN0cmluZyc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBBdWRpdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdWRpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZW1vdmVBdWRpdENvbXBvbmVudCB9IGZyb20gJy4uL3JlbW92ZS1hdWRpdC9yZW1vdmUtYXVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2F1ZGl0LXJlcG9ydC1wb3B1cC9hdWRpdC1yZXBvcnQtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdjYXRlZ29yeUNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXdjYXRlZ29yeS92aWV3Y2F0ZWdvcnkuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF1ZGl0LXJldGFnJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtcmV0YWcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hdWRpdC1yZXRhZy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0UmV0YWdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHRvdGFsZmlsZSA9IDA7XHJcbiAgY3VzdG9tZXIgPSAwO1xyXG4gIGp1bmsgPSAwO1xyXG4gIGVtcGxveWVlID0gMDtcclxuICBqdW5raW1hZ2U6IGFueSA9IFtdXHJcbiAgcmV0YWdpbWFnZTogYW55ID0gW11cclxuICBzdWJtaXR2YWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgYXVkaXRtYXBwaW5nZGF0YTogYW55ID0gW107XHJcbiAgY3VzdG9tZXJjb3VudDogYW55ID0gMDtcclxuICBqdW5rY291bnQ6IGFueSA9IDA7XHJcbiAgZW1wbG95ZWVjb3VudDogYW55ID0gMDtcclxuICBlbXBsb3llaW1hZ2U6IGFueSA9IFtdO1xyXG4gIGZpbGVkZXRhaWxzOiBhbnkgPSB7fTtcclxuICBhdWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICBzZWxlY3RlZFR5cGU6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICB0aW1lUGFzc2VkOiBudW1iZXIgPSAwO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgZm9ybWF0dGVkVGltZTogc3RyaW5nID0gJzAwOjAwOjAwJztcclxuXHJcbiAgb3Blbm1vZGVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2F0ZWdvcnk6IGFueSA9IFtdXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5vcGVubW9kZWwpIHJldHVybjtcclxuICAgIC8vIGlmIChldmVudC5rZXkgPT09ICdnJyB8fCBldmVudC5jb2RlID09PSAnS2V5RycpIHtcclxuICAgIC8vICAgdmFyIGdyb3VwID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLnNlbGVjdGVkID09PSB0cnVlKVxyXG4gICAgLy8gICBpZiAoZ3JvdXAubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgIGlmIChncm91cC5sZW5ndGggPT0gMSkge1xyXG4gICAgLy8gICAgICAgdGhpcy50b2FzdHIuZ2V0RXJyb3JUb2FzdCgnUGxlYXNlIFNlbGVjdCBtdWx0aXBsZSBmaWxlIHRoZW4gYWRkIHRvIEdyb3VwJylcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgbGV0IGR1bW15YXJyYXkgPSBncm91cC5zaGlmdCgpXHJcbiAgICAvLyAgICAgICB2YXIgZ3JvdXBpbWFnZXM6IGFueSA9IFtdXHJcbiAgICAvLyAgICAgICBncm91cC5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhLnNwbGljZSh0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmluZEluZGV4KCh7IGltZ19uYW1lIH06IHsgaW1nX25hbWU6IHN0cmluZyB9KSA9PiBpbWdfbmFtZSA9PSBkYXRhLmltZ19uYW1lKSwgMSk7XHJcbiAgICAvLyAgICAgICAgIGdyb3VwaW1hZ2VzLnB1c2goZGF0YS5tYXBwZWRpZFswXSlcclxuICAgIC8vICAgICAgIH0pXHJcbiAgICAvLyAgICAgICBkdW1teWFycmF5LmNvdW50ID0gZHVtbXlhcnJheS5jb3VudCArIGdyb3VwaW1hZ2VzLmxlbmd0aFxyXG4gICAgLy8gICAgICAgZHVtbXlhcnJheS5zZWxlY3RlZCA9IGZhbHNlXHJcblxyXG4gICAgLy8gICAgICAgZHVtbXlhcnJheS5tYXBwZWRpZCA9IFsuLi5kdW1teWFycmF5Lm1hcHBlZGlkLCAuLi5ncm91cGltYWdlc11cclxuICAgIC8vICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmF1ZGl0bWFwcGluZ2RhdGEpO1xyXG4gICAgLy8gICAgICAgY29uc3QgY29tcHJlc3NlZERhdGEgPSBMWlN0cmluZy5jb21wcmVzcyhqc29uU3RyaW5nKTtcclxuICAgIC8vICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICAvLyB0aGlzLmluaXRpYWxfZGF0YV9sb2FkaW5nKClcclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICB0aGlzLnRvYXN0ci5nZXRFcnJvclRvYXN0KCdQbGVhc2UgU2VsZWN0IGZpbGUgdGhlbiBhZGQgdG8gR3JvdXAnKVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCBwcmVzc2VkID0gKGV2ZW50LmtleSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLmNhdGVnb3J5LmZpbmQoKG06IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW0ua2V5KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGNvbnN0IG1hcEtleSA9IG0ua2V5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIC8vIG1hdGNoIGJ5IGV2ZW50LmtleSAocHJlZmVycmVkKSBPUiBieSBldmVudC5jb2RlIGxpa2UgJ0tleUonXHJcbiAgICAgIHJldHVybiBwcmVzc2VkID09PSBtYXBLZXkgfHwgZXZlbnQuY29kZSA9PT0gYEtleSR7bWFwS2V5LnRvVXBwZXJDYXNlKCl9YDtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICBpZiAoIW1hdGNoZWQpIHJldHVyblxyXG4gICAgaWYgKG1hdGNoZWQpIHtcclxuICAgICAgdmFyIG5ld0RhdGEgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuc2VsZWN0ZWQgPT09IHRydWUpXHJcbiAgICAgIGlmIChuZXdEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB2YXIgb2xkRGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShtYXRjaGVkPy50eXBlKSB8fCAne30nKVxyXG4gICAgICAgIGlmIChOdW1iZXIob2xkRGF0YS5sZW5ndGgpID4gMCkge1xyXG4gICAgICAgICAgbmV3RGF0YSA9IFsuLi5vbGREYXRhLCAuLi5uZXdEYXRhXVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdEYXRhID0gbmV3RGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBtYXRjaGVkPy50eXBlKSB7XHJcbiAgICAgICAgICAgIGRhdGEuY291bnQgPSBuZXdEYXRhLmxlbmd0aFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShtYXRjaGVkPy50eXBlLCBKU09OLnN0cmluZ2lmeShuZXdEYXRhKSlcclxuICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuc2VsZWN0ZWQgPT09IGZhbHNlKVxyXG4gICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmF1ZGl0bWFwcGluZ2RhdGEpO1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuY29tcHJlc3MoanNvblN0cmluZyk7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYXVkaXQnLCBjb21wcmVzc2VkRGF0YSlcclxuICAgICAgICB0aGlzLnRvYXN0ci5nZXRTdWNjZXNzVG9hc3QoYCR7bWF0Y2hlZD8ubmFtZX0gQWRkZWQgU3VjY2VzZnVsbHkhYCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZ2V0RXJyb3JUb2FzdChgUGxlYXNlIFNlbGVjdCBmaWxlIHRoZW4gYWRkIHRvICR7bWF0Y2hlZD8ubmFtZX0gYClcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlICRhcGk6IEF1ZGl0U2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHRpbWVyU2VydmljZTogVGltZXJTZXJ2aWNlLCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFR5cGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgndHlwZScpXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIFxyXG4gICAgdGhpcy5nZXRBdWRpdENvbmZpZygpXHJcbiAgICBpZiAodGhpcy5yZXRhZ2ltYWdlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuc3VibWl0dmFsdWUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2VcclxuICAgIHRoaXMuc2V0VGltZXIoKTtcclxuICB9XHJcbiAgZ2V0QXVkaXRDb25maWcoKSB7XHJcblxyXG4gICAgbGV0IGZpbGVkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9JylcclxuICAgIHRoaXMuJGFwaS5nZXRBdWRpdGNvbmZpZyhmaWxlZGF0YT8uZmlsZWRldGFpbHM/LmNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSByZXMuZGF0YS5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3MudGFnZ2luZ0xpbWl0YXRpb25cclxuICAgICAgICAgIHRoaXMuaW5pdGlhbF9kYXRhX2xvYWRpbmcoKVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNldFRpbWVyKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRpbWVyU2VydmljZS5nZXRUaW1lUGFzc2VkKCkuc3Vic2NyaWJlKHRpbWUgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVQYXNzZWQgPSB0aW1lO1xyXG4gICAgICB0aGlzLmZvcm1hdHRlZFRpbWUgPSB0aGlzLnRpbWVyU2VydmljZS5mb3JtYXRUaW1lKHRpbWUpO1xyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy50aW1lclNlcnZpY2Uuc3RhcnRUaW1lcigpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUdsb2JhbE1vdXNlRXZlbnQgPSAoKTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLnRpbWVyU2VydmljZS5zdGFydFRpbWVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICB0aGlzLnRpbWVyU2VydmljZS5jbGVhclRpbWVyKClcclxuXHJcbiAgfVxyXG5cclxuICBpbml0aWFsX2RhdGFfbG9hZGluZygpIHtcclxuICAgIFxyXG4gICAgaWYgKCdhdWRpdCcgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgbGV0IHN0cmluZ2lmeWRhdGEgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhdWRpdCcpIHx8ICd7fSdcclxuICAgICAgY29uc3QgZGVjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmRlY29tcHJlc3Moc3RyaW5naWZ5ZGF0YSk7XHJcbiAgICAgIHZhciBhdWRpdGRhdGEgPSBKU09OLnBhcnNlKGRlY29tcHJlc3NlZERhdGEgfHwgJ3t9JylcclxuICAgICAgXHJcbiAgICAgIGlmIChhdWRpdGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuYXVkaXRtYXBwaW5nZGF0YSA9IGF1ZGl0ZGF0YTtcclxuICAgICAgICB0aGlzLmN1c3RvbWVyY291bnQgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEubGVuZ3RoXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhID0gW11cclxuICAgICAgICB0aGlzLmN1c3RvbWVyY291bnQgPSAwXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIHZhciBjb3VudCA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShkYXRhLnR5cGUpIHx8ICd7fScpXHJcbiAgICAgIFxyXG4gICAgICBkYXRhLmNvdW50ID0gY291bnQ/Lmxlbmd0aFxyXG4gICAgfSlcclxuICAgIGlmICgncmV0YWcnIGluIHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgIHZhciByZXRhZ2RhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3JldGFnJykgfHwgJ3t9JylcclxuICAgICAgaWYgKHJldGFnZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gcmV0YWdkYXRhO1xyXG4gICAgICAgIHRoaXMuc3VibWl0dmFsdWUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmV0YWdpbWFnZSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gICBcclxuICAgIGlmICgndG90YWxmaWxlcycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgdmFyIGZpbGVzID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9JylcclxuICAgICAgdGhpcy50b3RhbGZpbGUgPSBmaWxlcz8udG90YWxmaWxlc1xyXG4gICAgICB0aGlzLmZpbGVkZXRhaWxzID0gZmlsZXM/LmZpbGVkZXRhaWxzXHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBnZXRtYXBwaW5nZGF0YSgpIHtcclxuICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2VcclxuICAgIHZhciB0b3RhbGZpbGU6IGFueSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG90YWxmaWxlcycpIHx8ICd7fScpO1xyXG4gICAgdGhpcy5maWxlZGV0YWlscyA9IHRvdGFsZmlsZT8uZmlsZWRldGFpbHNcclxuXHJcbiAgICB2YXIgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICBmaWxlRGF0ZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgYXVkaXRJZDogdG90YWxmaWxlPy5hdWRpdElkLFxyXG4gICAgICBjb3VudDogdG90YWxmaWxlPy50b3RhbGZpbGVzXHJcbiAgICB9XHJcbiAgICB0aGlzLiRhcGkuZ2V0QXVkaXRtYXBwaW5nbGlzdChwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0TG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdyZXRhZycpXHJcbiAgICAgICAgICB0aGlzLnJldGFnaW1hZ2UgPSBbXVxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyRGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0Py5kcmFmdGVkRGF0YT8uZmlsdGVyKCh4OiBhbnkpID0+IHgudHlwZSA9PT0gZGF0YS50eXBlKVxyXG4gICAgICAgICAgICBkYXRhLnZhbHVlID0gZmlsdGVyRGF0YVswXT8udmFsdWUgJiYgZmlsdGVyRGF0YVswXT8udmFsdWUubGVuZ3RoID4gMCA/IGZpbHRlckRhdGFbMF0/LnZhbHVlIDogW11cclxuICAgICAgICAgICAgZGF0YS5jb3VudCA9IGRhdGE/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShkYXRhPy50eXBlLCBKU09OLnN0cmluZ2lmeShkYXRhPy52YWx1ZSAmJiBkYXRhPy52YWx1ZS5sZW5ndGggPiAwID8gZGF0YT8udmFsdWUgOiBbXSkpXHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCBjdXN0b21lckRhdGEgPSByZXM/LmRhdGE/LnJlc3VsdD8uZHJhZnRlZERhdGE/LmZpbHRlcigoeDogYW55KSA9PiB4LnR5cGUgPT09ICdjdXN0b21lcicpXHJcbiAgICAgICAgICBcclxuXHJcbiAgICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEgPSBjdXN0b21lckRhdGFbMF0/LnZhbHVlXHJcbiAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXJEYXRhWzBdPy52YWx1ZSk7XHJcbiAgICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYXVkaXQnLCBjb21wcmVzc2VkRGF0YSlcclxuICAgICAgICAgIHRoaXMuaW5pdGlhbF9kYXRhX2xvYWRpbmcoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG5cclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZXZpZXdkYXRhKCkge1xyXG4gICAgdGhpcy5zdWJtaXR2YWx1ZSA9IGZhbHNlO1xyXG4gICAgdmFyIHRvdGFsZmlsZTogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9Jyk7XHJcbiAgICBpZiAoJ2F1ZGl0JyBpbiBzZXNzaW9uU3RvcmFnZSkge1xyXG4gICAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgICBjb25zdCBkZWNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuZGVjb21wcmVzcyhzdHJpbmdpZnlkYXRhKTtcclxuICAgICAgdmFyIGF1ZGl0ZGF0YSA9IEpTT04ucGFyc2UoZGVjb21wcmVzc2VkRGF0YSB8fCAne30nKVxyXG4gICAgICBpZiAoYXVkaXRkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEgPSBhdWRpdGRhdGE7XHJcbiAgICAgICAgdGhpcy5jdXN0b21lcmNvdW50ID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCdyZXRhZycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgdmFyIHJldGFnZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncmV0YWcnKSB8fCAne30nKVxyXG4gICAgICB0aGlzLnJldGFnaW1hZ2UgPSByZXRhZ2RhdGE7XHJcbiAgICAgIHRoaXMuYXVkaXRtYXBwaW5nZGF0YSA9IFsuLi50aGlzLmF1ZGl0bWFwcGluZ2RhdGEsIC4uLnRoaXMucmV0YWdpbWFnZV1cclxuICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYXVkaXRtYXBwaW5nZGF0YSk7XHJcbiAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuY29tcHJlc3MoanNvblN0cmluZyk7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3JldGFnJylcclxuICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gW107XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgY29uc3QgZGVjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmRlY29tcHJlc3Moc3RyaW5naWZ5ZGF0YSk7XHJcbiAgICB2YXIgY3VzdG9tZXIgPSBKU09OLnBhcnNlKGRlY29tcHJlc3NlZERhdGEgfHwgJ3t9JylcclxuICAgIGxldCBzdG9yZWREYXRhID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjdXN0b21lclwiLFxyXG4gICAgICAgIHZhbHVlOiBjdXN0b21lciA/IGN1c3RvbWVyIDogW10sXHJcbiAgICAgIH1cclxuICAgIF1cclxuXHJcbiAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGxldCBzZXNzaW9udmFsdWUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YS50eXBlKSB8fCAne30nKTtcclxuICAgICAgc3RvcmVkRGF0YS5wdXNoKHtcclxuICAgICAgICB0eXBlOiBkYXRhLnR5cGUsXHJcbiAgICAgICAgdmFsdWU6IHNlc3Npb252YWx1ZSAmJiBzZXNzaW9udmFsdWUubGVuZ3RoID4gMCA/IHNlc3Npb252YWx1ZSA6IFtdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgXHJcbiAgICB2YXIgaW5zZXJvYmo6IGFueSA9IHtcclxuXHJcbiAgICAgIHN0b3JlSWQ6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgIGF1ZGl0SWQ6IHRvdGFsZmlsZT8uYXVkaXRJZCA/IHRvdGFsZmlsZT8uYXVkaXRJZCA6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHMuYXVkaXRJZCxcclxuICAgICAgZmlsZURhdGU6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGUsXHJcbiAgICAgIHRvdGFsQ291bnQ6IHRvdGFsZmlsZT8udG90YWxmaWxlcyA/IHRvdGFsZmlsZS50b3RhbGZpbGVzIDogMCxcclxuICAgICAgcmV0YWdDb3VudDogMCxcclxuICAgICAgdGltZVNwZW50OiB0aGlzLnRpbWVQYXNzZWQsXHJcbiAgICAgIHJldGFnSW1hZ2U6IFtdLFxyXG4gICAgICBkcmFmdGVkRGF0YTogc3RvcmVkRGF0YVxyXG4gICAgfVxyXG4gICAgdGhpcy4kYXBpLnNhdmVEcmFmdChpbnNlcm9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmdldG1hcHBpbmdkYXRhKCk7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3RpY2tldHMvbWFwcGluZy1saXN0XCIsXSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3IpXHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmV0YWdhbGxvd0Ryb3AoZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgZHJhZ1N0YXJ0KGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKFwidGV4dC9wbGFpblwiLCBldmVudC50YXJnZXQuaWQpO1xyXG4gIH1cclxuXHJcbiAgZHJvcHJldGFnKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBkcm9wcmV0YWdpbWFnZSA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICBldmVudC50YXJnZXQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZHJvcHJldGFnaW1hZ2UpKTtcclxuICAgIGNvbnN0IGRyb3B6b25lOiBhbnkgPSBkcm9wcmV0YWdpbWFnZTtcclxuICAgIHRoaXMuYXVkaXRtYXBwaW5nZGF0YS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG5cclxuICAgICAgaWYgKGRhdGEuaW1nX2lkID09IGRyb3B6b25lLmlkKSB7XHJcbiAgICAgICAgaWYgKGRhdGEubWFwcGVkaWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFyIGZpbmRvbmUgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuaW1nX25hbWUgPT0gZHJvcHJldGFnaW1hZ2UpXHJcbiAgICAgICAgICBpZiAoZmluZG9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRhdGEuY291bnQgPSBkYXRhLmNvdW50ICsgZmluZG9uZVswXS5jb3VudFxyXG4gICAgICAgICAgICBkYXRhLm1hcHBlZGlkID0gWy4uLmRhdGEubWFwcGVkaWQsIC4uLmZpbmRvbmVbMF0ubWFwcGVkaWRdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoJ2R1cGxpY2F0ZScgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdkdXBsaWNhdGUnKSB8fCAne30nKVxyXG4gICAgICAgICAgICBmaWxlZGF0YSA9IFsuLi5maWxlZGF0YSwgLi4uZmluZG9uZV1cclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZHVwbGljYXRlJywgSlNPTi5zdHJpbmdpZnkoZmlsZWRhdGEpKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZHVwbGljYXRlJywgSlNPTi5zdHJpbmdpZnkoZmluZG9uZSkpXHJcbiAgICAgICAgICAgIGxldCBmaWxlZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZHVwbGljYXRlJykgfHwgJ3t9JylcclxuICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgY291bnQgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YS50eXBlKSB8fCAne30nKVxyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gY291bnQ/Lmxlbmd0aFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhLmNvdW50ID0gZGF0YS5jb3VudCArIDEsXHJcbiAgICAgICAgICAgIGRhdGEubWFwcGVkaWQucHVzaChkcm9wcmV0YWdpbWFnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWxlY3RyZXRhZ2ltYWdlKHJlczogYW55KSB7XHJcbiAgICB0aGlzLnJldGFnaW1hZ2UubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEuaW1nX2lkID09IHJlcykge1xyXG4gICAgICAgIGlmIChkYXRhLm1hcHBlZGlkLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICBkYXRhLnNlbGVjdGVkID0gIWRhdGEuc2VsZWN0ZWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWxlY3Rncm91cGltYWdlKHJlczogYW55KSB7XHJcbiAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEuaW1nX2lkID09IHJlcykge1xyXG4gICAgICAgIGlmIChkYXRhLm1hcHBlZGlkLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICBkYXRhLnNlbGVjdGVkID0gIWRhdGEuc2VsZWN0ZWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVhdWRpdChkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZW1vdmVBdWRpdENvbXBvbmVudCwge1xyXG4gICAgICBzaXplOiAnbGcnLFxyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICBrZXlib2FyZDogZmFsc2VcclxuICAgIH0pXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gZGF0YTtcclxuICAgIG1vZGFsUmVmLmNsb3NlZC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzPy5yZWxvYWQpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxfZGF0YV9sb2FkaW5nKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG4gIHN1Ym1pdGF1ZGl0KCkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0ZWRUeXBlID0gdGhpcy5zZWxlY3RlZFR5cGU7XHJcbiAgICBtb2RhbFJlZi5jbG9zZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgdmlld2NhdGVnb3J5KGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFZpZXdjYXRlZ29yeUNvbXBvbmVudCwge1xyXG4gICAgICBzaXplOiAnbGcnLFxyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICBrZXlib2FyZDogZmFsc2VcclxuICAgIH0pXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gZGF0YVxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW1hZ2VMaXN0ID0gZGF0YSxcclxuICAgICAgbW9kYWxSZWYuY2xvc2VkLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcz8ucmVsb2FkKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxfZGF0YV9sb2FkaW5nKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBkcm9wSW1hZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaHRtbHRhZyA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L2h0bWwnKTtcclxuICAgIHZhciBOYW1lID0gZ2V0VGFnTmFtZUZyb21IVE1MKGh0bWx0YWcpO1xyXG4gICAgY29uc3QgZHJvcFpvbmUgPSBldmVudC50YXJnZXQ7XHJcbiAgICBcclxuICAgIC8vIGRlYnVnZ2VyXHJcbiAgICBpZiAoTmFtZSA9PSAnY3VzdG9tZXInIHx8IE5hbWUgPT0gJ3JldGFnJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBjb25zdCBkcmFnZ2VkSW1hZ2VJZCA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIGNvbnN0IGRyYWdnZWRJbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRyYWdnZWRJbWFnZUlkKTtcclxuICAgICAgZXZlbnQudGFyZ2V0LmFwcGVuZENoaWxkKGRyYWdnZWRJbWFnZSk7XHJcbiAgICAgIHRoaXMuYXVkaXRtYXBwaW5nZGF0YS5tYXAoKGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG5cclxuICAgICAgICBpZiAoZGF0YS5pbWdfaWQgPT09IGRyb3Bab25lLmlkKSB7XHJcbiAgICAgICAgICBsZXQgZmluZG9uZSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgcmV0YWdkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdyZXRhZycpIHx8ICdbXScpO1xyXG4gICAgICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gcmV0YWdkYXRhO1xyXG4gICAgICAgICAgZmluZG9uZSA9IHRoaXMucmV0YWdpbWFnZS5maWx0ZXIoKGltZ0RhdGE6IGFueSkgPT4gaW1nRGF0YS5pbWdfaWQgPT09IGRyYWdnZWRJbWFnZUlkKTtcclxuICAgICAgICAgIGlmIChmaW5kb25lLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBmaW5kb25lID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmZpbHRlcigoaW1nRGF0YTogYW55KSA9PiBpbWdEYXRhLmltZ19pZCA9PT0gZHJhZ2dlZEltYWdlSWQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucmV0YWdpbWFnZSA9IHRoaXMucmV0YWdpbWFnZS5maWx0ZXIoKGltZ0RhdGE6IGFueSkgPT4gaW1nRGF0YS5pbWdfaWQgIT09IGRyYWdnZWRJbWFnZUlkKTtcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3JldGFnJywgSlNPTi5zdHJpbmdpZnkodGhpcy5yZXRhZ2ltYWdlKSk7XHJcblxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZiAoZmluZG9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRhLm1hcHBlZGlkID0gWy4uLmRhdGEubWFwcGVkaWQsIC4uLmZpbmRvbmVbMF0ubWFwcGVkaWRdO1xyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gZGF0YS5tYXBwZWRpZC5sZW5ndGg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoJ2R1cGxpY2F0ZScgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgICBsZXQgZmlsZWRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2R1cGxpY2F0ZScpIHx8ICd7fScpXHJcbiAgICAgICAgICAgICAgZmlsZWRhdGEgPSBbLi4uZmlsZWRhdGEsIC4uLmZpbmRvbmVdXHJcbiAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZHVwbGljYXRlJywgSlNPTi5zdHJpbmdpZnkoZmlsZWRhdGEpKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2R1cGxpY2F0ZScsIEpTT04uc3RyaW5naWZ5KGZpbmRvbmUpKVxyXG4gICAgICAgICAgICAgIGxldCBmaWxlZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZHVwbGljYXRlJykgfHwgJ3t9JylcclxuICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEuY291bnQgKz0gMTtcclxuICAgICAgICAgICAgZGF0YS5tYXBwZWRpZC5wdXNoKGRyYWdnZWRJbWFnZUlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChOYW1lID09ICdjdXN0b21lcicpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuc3BsaWNlKHRoaXMuYXVkaXRtYXBwaW5nZGF0YS5maW5kSW5kZXgoKHsgaW1nX2lkIH06IHsgaW1nX2lkOiBzdHJpbmcgfSkgPT4gaW1nX2lkID09IGRyYWdnZWRJbWFnZUlkKSwgMSk7XHJcbiAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnNlbGVjdGVkID0gZmFsc2UpXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBcclxuICAgICAgdGhpcy5jdXN0b21lcmNvdW50ID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhPy5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmF1ZGl0bWFwcGluZ2RhdGEpO1xyXG4gICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdhdWRpdCcsIGNvbXByZXNzZWREYXRhKVxyXG4gICAgICB2YXIgcmV0YWdkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdyZXRhZycpIHx8ICd7fScpXHJcbiAgICAgIHRoaXMucmV0YWdpbWFnZSA9IHJldGFnZGF0YTtcclxuICAgICAgaWYgKHRoaXMucmV0YWdpbWFnZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHRoaXMuc3VibWl0dmFsdWUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdmFyIGNvdW50ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGRhdGEudHlwZSkgfHwgJ3t9JylcclxuICAgICAgICBkYXRhLmNvdW50ID0gY291bnQ/Lmxlbmd0aFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VGFnTmFtZUZyb21IVE1MKGh0bWw6IGFueSkge1xyXG4gICAgICB2YXIgdGVtcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgdGVtcEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgdmFyIGZpcnN0Q2hpbGQ6IGFueSA9IHRlbXBFbGVtZW50LmZpcnN0Q2hpbGQ7XHJcbiAgICAgIGlmIChmaXJzdENoaWxkLmhhc0F0dHJpYnV0ZSgnbmFtZScpKSB7XHJcbiAgICAgICAgdmFyIG5hbWVQcm9wZXJ0eVZhbHVlID0gZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcclxuICAgICAgICByZXR1cm4gbmFtZVByb3BlcnR5VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tmaWxlZGV0YWlscz8uc3RvcmVJZH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMyBhcnJvdy1jb2RlXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZmlsZWRldGFpbHM/LkRhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC0zIG1zLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBiZy10aW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIHRleHQtdGltZXIgZnctc2VtaWJvbGRcIj57eyBmb3JtYXR0ZWRUaW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuMTY2NjcgMi44NzA3MUM5LjE2NjY3IDIuNjIwMjMgOS4yNjYxNyAyLjM4MDAxIDkuNDQzMjkgMi4yMDI4OUM5LjYyMDQxIDIuMDI1NzcgOS44NjA2MyAxLjkyNjI3IDEwLjExMTEgMS45MjYyN0gxMy44ODg5QzE0LjEzOTQgMS45MjYyNyAxNC4zNzk2IDIuMDI1NzcgMTQuNTU2NyAyLjIwMjg5QzE0LjczMzggMi4zODAwMSAxNC44MzMzIDIuNjIwMjMgMTQuODMzMyAyLjg3MDcxQzE0LjgzMzMgMy4xMjEyIDE0LjczMzggMy4zNjE0MiAxNC41NTY3IDMuNTM4NTRDMTQuMzc5NiAzLjcxNTY1IDE0LjEzOTQgMy44MTUxNiAxMy44ODg5IDMuODE1MTZIMTIuOTQ0NFY1LjA3NDQyTDEyLjk0MzIgNS4xMjYwNUMxNC41Mzk2IDUuMzAwOTcgMTYuMDUyOCA1LjkyNzg3IDE3LjMwNTMgNi45MzMwOEwxNy4zMTQxIDYuOTI1NTNMMTguMjU4NSA1Ljk4MTA4QzE4LjM3NCA1Ljg1Njc2IDE4LjUyMDggNS43NjU4OCAxOC42ODM1IDUuNzE4MDFDMTguODQ2MyA1LjY3MDE0IDE5LjAxOSA1LjY2NzA2IDE5LjE4MzMgNS43MDkwOEMxOS4zNDc3IDUuNzUxMTEgMTkuNDk3NyA1LjgzNjY5IDE5LjYxNzUgNS45NTY4QzE5LjczNzMgNi4wNzY5MiAxOS44MjI1IDYuMjI3MTMgMTkuODY0MSA2LjM5MTZDMTkuOTA2IDYuNTU1NzggMTkuOTAzIDYuNzI4MjMgMTkuODU1NCA2Ljg5MDg1QzE5LjgwNzcgNy4wNTM0OCAxOS43MTcyIDcuMjAwMjkgMTkuNTkzMyA3LjMxNTlMMTguNjQ4OSA4LjI2MDM0TDE4LjY0MTMgOC4yNjkxNUMxOS42NDAzIDkuNTE5NzQgMjAuMjY1OCAxMS4wMjcgMjAuNDQ2IDEyLjYxNzRDMjAuNjI2MSAxNC4yMDc4IDIwLjM1MzYgMTUuODE2NyAxOS42NTk3IDE3LjI1OTFDMTguOTY1OCAxOC43MDE0IDE3Ljg3ODggMTkuOTE4NSAxNi41MjM3IDIwLjc3MDRDMTUuMTY4NiAyMS42MjIyIDEzLjYwMDYgMjIuMDc0MSAxMiAyMi4wNzQxQzEwLjM5OTQgMjIuMDc0MSA4LjgzMTM3IDIxLjYyMjIgNy40NzYyOSAyMC43NzA0QzYuMTIxMjIgMTkuOTE4NSA1LjAzNDE5IDE4LjcwMTQgNC4zNDAzIDE3LjI1OTFDMy42NDY0MSAxNS44MTY3IDMuMzczODYgMTQuMjA3OCAzLjU1NDAyIDEyLjYxNzRDMy43MzQxOCAxMS4wMjcgNC4zNTk3MyA5LjUxOTc0IDUuMzU4NjcgOC4yNjkxNUw1LjM1MTExIDguMjYwMzRMNC40MDY2NyA3LjMxNTlDNC4yMzk2NCA3LjEzNjkgNC4xNDg2NSA2LjkwMDAzIDQuMTUyODcgNi42NTUyNEM0LjE1NzEgNi40MTA0NSA0LjI1NjIyIDYuMTc2ODcgNC40MjkzNCA2LjAwMzc1QzQuNjAyNDYgNS44MzA2MyA0LjgzNjA0IDUuNzMxNTEgNS4wODA4MyA1LjcyNzI4QzUuMzI1NjIgNS43MjMwNiA1LjU2MjQ5IDUuODE0MDUgNS43NDE0OSA1Ljk4MTA4TDYuNjg1OTMgNi45MjU1M0w2LjY5NDc0IDYuOTMzMDhDNy45NDY4MSA1LjkyODA5IDkuNDU5NjMgNS4zMDEyIDExLjA1NTYgNS4xMjYwNVYzLjgxNTE2SDEwLjExMTFDOS44NjA2MyAzLjgxNTE2IDkuNjIwNDEgMy43MTU2NSA5LjQ0MzI5IDMuNTM4NTRDOS4yNjYxNyAzLjM2MTQyIDkuMTY2NjcgMy4xMjEyIDkuMTY2NjcgMi44NzA3MVpNMTIgMjAuMTg1NUMxMy43NTM1IDIwLjE4NTQgMTUuNDM1MiAxOS40ODg2IDE2LjY3NSAxOC4yNDg1QzE3LjkxNDggMTcuMDA4NSAxOC42MTEzIDE1LjMyNjcgMTguNjExMSAxMy41NzMyQzE4LjYxMDkgMTEuODE5NiAxNy45MTQyIDEwLjEzOCAxNi42NzQxIDguODk4MTNDMTUuNDM0MSA3LjY1ODMxIDEzLjc1MjMgNi45NjE4OCAxMS45OTg3IDYuOTYyMDRDMTAuMjQ1MiA2Ljk2MjIxIDguNTYzNTQgNy42NTg5NiA3LjMyMzcyIDguODk5MDJDNi4wODM5IDEwLjEzOTEgNS4zODc0NyAxMS44MjA5IDUuMzg3NjMgMTMuNTc0NEM1LjM4NzggMTUuMzI4IDYuMDg0NTUgMTcuMDA5NiA3LjMyNDYxIDE4LjI0OTRDOC41NjQ2NyAxOS40ODkzIDEwLjI0NjUgMjAuMTg1NyAxMiAyMC4xODU1Wk0xMi40ODk5IDExLjc0ODVMMTQuMTY0NyAxMC4wNzM3QzE0LjI1MTcgOS45ODM0MyAxNC4zNTU5IDkuOTExNDMgMTQuNDcxMSA5Ljg2MTg4QzE0LjU4NjMgOS44MTIzMyAxNC43MTAyIDkuNzg2MjIgMTQuODM1NiA5Ljc4NTA3QzE0Ljk2MTEgOS43ODM5MiAxNS4wODU0IDkuODA3NzYgMTUuMjAxNSA5Ljg1NTE5QzE1LjMxNzYgOS45MDI2MiAxNS40MjMxIDkuOTcyNyAxNS41MTE4IDEwLjA2MTNDMTUuNjAwNSAxMC4xNSAxNS42NzA3IDEwLjI1NTQgMTUuNzE4MiAxMC4zNzE0QzE1Ljc2NTggMTAuNDg3NSAxNS43ODk3IDEwLjYxMTggMTUuNzg4NyAxMC43MzcyQzE1Ljc4NzcgMTAuODYyNiAxNS43NjE3IDEwLjk4NjYgMTUuNzEyMiAxMS4xMDE4QzE1LjY2MjggMTEuMjE3MSAxNS41OTA5IDExLjMyMTMgMTUuNTAwNyAxMS40MDg1TDEzLjgyNTkgMTMuMDg0NkMxMy45MDAzIDEzLjM2NDUgMTMuOTA5NSAxMy42NTc5IDEzLjg1MjYgMTMuOTQyQzEzLjc5NTggMTQuMjI2IDEzLjY3NDUgMTQuNDkzMyAxMy40OTgxIDE0LjcyMzFDMTMuMzIxNyAxNC45NTI5IDEzLjA5NDkgMTUuMTM5MSAxMi44MzUyIDE1LjI2NzVDMTIuNTc1NCAxNS4zOTU4IDEyLjI4OTcgMTUuNDYyOCAxMiAxNS40NjMzQzExLjczMjcgMTUuNDYxIDExLjQ2ODggMTUuNDAxOSAxMS4yMjYgMTUuMjlDMTAuOTgzMiAxNS4xNzgxIDEwLjc2NyAxNS4wMTU5IDEwLjU5MTYgMTQuODE0MUMxMC40MTYyIDE0LjYxMjMgMTAuMjg1NyAxNC4zNzU1IDEwLjIwODcgMTQuMTE5NUMxMC4xMzE2IDEzLjg2MzUgMTAuMTA5OSAxMy41OTQgMTAuMTQ0OCAxMy4zMjlDMTAuMTc5OCAxMy4wNjM5IDEwLjI3MDYgMTIuODA5MyAxMC40MTE0IDEyLjU4MkMxMC41NTIyIDEyLjM1NDcgMTAuNzM5NiAxMi4xNTk5IDEwLjk2MTMgMTIuMDEwNEMxMS4xODMgMTEuODYxIDExLjQzMzkgMTEuNzYwNCAxMS42OTc0IDExLjcxNTJDMTEuOTYwOSAxMS42NzAxIDEyLjIzMSAxMS42ODE0IDEyLjQ4OTkgMTEuNzQ4NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGVmYXVsdCBidG4tb3V0bGluZSBweS0yIG14LTJcIiAoY2xpY2spPVwicmV2aWV3ZGF0YSgpXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tcHJpbWFyeSBzdmctaWNvbi0yeFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNS44MzM3IDEwLjAwMDFINC4xNjY5OU00LjE2Njk5IDEwLjAwMDFMMTAuMDAwMyAxNS44MzM0TTQuMTY2OTkgMTAuMDAwMUwxMC4wMDAzIDQuMTY2NzVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PHNwYW4gY2xhc3M9XCJtcy0zXCI+QmFjayB0byBSZXZpZXc8L3NwYW4+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IHB5LTIgbXgtMlwiIFtkaXNhYmxlZF09XCJzdWJtaXR2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRhdWRpdCgpXCI+U3VibWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tcHJpbWFyeSBzdmctaWNvbi0yeFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjE2Njk5IDEwLjAwMDFIMTUuODMzN00xNS44MzM3IDEwLjAwMDFMMTAuMDAwMyA0LjE2Njc1TTE1LjgzMzcgMTAuMDAwMUwxMC4wMDAzIDE1LjgzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1yb3dcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsIHRleHQtZGFya1wiPlRvdGFsIEZpbGVzIC0gPHNwYW4+e3t0b3RhbGZpbGV9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMyB0ZXh0IGZ3LXNlbWlib2xkXCI+VW5pcXVlIEN1c3RvbWVycyA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPnt7YXVkaXRtYXBwaW5nZGF0YT8ubGVuZ3RoID8gYXVkaXRtYXBwaW5nZGF0YT8ubGVuZ3RoIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHRleHQgdy1zZW1pYm9sZCBidG4tc20gcHktMiBidXRuLWZsYWcgbXgtMlwiIChjbGljayk9XCJ2aWV3Y2F0ZWdvcnkoaXRlbSlcIiBbZGlzYWJsZWRdPVwiIWl0ZW0/LmNvdW50XCI+Vmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/Lm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiBiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+e3tpdGVtPy5jb3VudH19PC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cImF1ZGl0TG9hZGluZ1wiIGNsYXNzPVwiY2FyZCBtdC01XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTUwMHB4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxoNSBjbGFzcz1cInRleHQtZGFyay02MDAgZnctYm9sZCB0ZXh0LWNlbnRlciBtdC01XCI+TG9hZGluZyBBdWRpdCBmaWxlLi4uLi4uPC9oNT4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhYXVkaXRMb2FkaW5nXCIgY2xhc3M9XCJjb2wtbWQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG10LTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTEwMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWwgZnctYm9sZFwiPkltYWdlcyBmb3IgUmV0YWdnaW5nPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWIgbXQtMiBmdy1zZW1pYm9sZFwiPkRyYWcgYW5kIERyb3Agb24gY29ycmVjdCBjdXN0b21lcnM8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IG9iajEgb2YgcmV0YWdpbWFnZVwiIChkcmFnb3Zlcik9XCJyZXRhZ2FsbG93RHJvcCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBkcmFnZ2FibGU9XCJ0cnVlXCIgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoJGV2ZW50KVwiIGlkPVwie3tvYmoxLmltZ19pZH19XCIgW3NyY109XCJvYmoxLmltZ19wYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0zIG14LTQgaW1nLXJldFwiIChjbGljayk9XCJzZWxlY3RyZXRhZ2ltYWdlKG9iajEuaW1nX2lkKVwiIG5hbWU9XCJyZXRhZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtLTAgZnMtNyBmdy1ib2xkXCI+e3tvYmoxLmltZ19uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iajEuc2VsZWN0ZWRcIiBjbGFzcz1cIm5vdGlmeS1iYWRnZTEgbndiZ1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgY29sb3J2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImZvbnQtc2l6ZToxNXB4O2NvbG9yOiMwMEEzRkZcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWZ5LWJhZGdlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlbW92ZWF1ZGl0KG9iajEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvYmoxLmNvdW50PjFcIj57e29iajEuY291bnR9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhYXVkaXRMb2FkaW5nXCIgY2xhc3M9XCJjb2wtbWQtN1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG10LTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTEwMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWwgZnctYm9sZFwiPlVuaXF1ZSBDdXN0b21lcnMgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3thdWRpdG1hcHBpbmdkYXRhPy5sZW5ndGggP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpdG1hcHBpbmdkYXRhPy5sZW5ndGggOiAwfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBvYmogb2YgYXVkaXRtYXBwaW5nZGF0YTtsZXQgaT1pbmRleFwiIHN0eWxlPVwicGFkZGluZzogMTBweDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm14LTMgbWItNSBpbWdcIiBbc3JjXT1cIm9iai5pbWdfcGF0aFwiIGlkPVwie3tvYmouaW1nX2lkfX1cIiBhbHQ9XCJJbWFnZVwiIG5hbWU9XCJjdXN0b21lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJyZXRhZ2FsbG93RHJvcCgkZXZlbnQpXCIgKGRyb3ApPVwiZHJvcEltYWdlKCRldmVudClcIiBkcmFnZ2FibGU9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoJGV2ZW50KVwiIChjbGljayk9XCJzZWxlY3Rncm91cGltYWdlKG9iai5pbWdfaWQgKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtLTAgZnMtNyBmdy1ib2xkXCI+e3tvYmouaW1nX25hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLnNlbGVjdGVkXCIgY2xhc3M9XCJub3RpZnktYmFkZ2UxXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNXB4O2NvbG9yOiMwMEEzRkZcIj48L2k+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vdGlmeS1iYWRnZSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVhdWRpdChvYmopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvYmouY291bnQ+MVwiPnt7b2JqLmNvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=
|