@vgroup/dialbox 0.7.92 → 0.7.94
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/esm2020/lib/components/call-progress/call-progress.component.mjs +41 -15
- package/esm2020/lib/dialbox.component.mjs +10 -17
- package/esm2020/lib/environments/environments.mjs +14 -17
- package/fesm2015/vgroup-dialbox.mjs +64 -48
- package/fesm2015/vgroup-dialbox.mjs.map +1 -1
- package/fesm2020/vgroup-dialbox.mjs +62 -46
- package/fesm2020/vgroup-dialbox.mjs.map +1 -1
- package/lib/environments/environments.d.ts +0 -3
- package/package.json +1 -1
|
@@ -214,7 +214,6 @@ export class DialboxComponent {
|
|
|
214
214
|
incomingCallData = incomingCallData?.length > 0
|
|
215
215
|
? incomingCallData.filter((item) => item.participants?.length > 0)
|
|
216
216
|
: [];
|
|
217
|
-
console.log('244', incomingCallData);
|
|
218
217
|
// All conferenceIds received from socket this tick
|
|
219
218
|
const socketConferenceIds = incomingCallData.map((c) => c.conferenceId);
|
|
220
219
|
incomingCallData.forEach((callInfo) => {
|
|
@@ -242,14 +241,11 @@ export class DialboxComponent {
|
|
|
242
241
|
}
|
|
243
242
|
}
|
|
244
243
|
});
|
|
245
|
-
console.log('incomingCallsList 275', this.incomingCallsList);
|
|
246
244
|
// Remove active-call entries whose conferenceId is no longer in the socket
|
|
247
245
|
// but keep incoming-call notifications (they are managed by notificationCallList expiry)
|
|
248
|
-
this.incomingCallsList = this.incomingCallsList.filter((res) => socketConferenceIds.includes(res.conferenceId) || res.
|
|
249
|
-
console.log('incomingCallsList 281', this.incomingCallsList);
|
|
246
|
+
this.incomingCallsList = this.incomingCallsList.filter((res) => socketConferenceIds.includes(res.conferenceId) || res.callDirection === 'incoming-call');
|
|
250
247
|
// Remove expired notification entries
|
|
251
248
|
this.notificationCallList = this.notificationCallList.filter((res) => res.endTime >= new Date().getTime());
|
|
252
|
-
console.log('notificationCallList 286', this.notificationCallList, this.incomingCallsList);
|
|
253
249
|
// Merge notificationCallList ONCE (not inside forEach). A pending incoming-call
|
|
254
250
|
// notification is identified by its OWN participantId — never by conferenceId —
|
|
255
251
|
// because it can legitimately share the conferenceId of a conference we are already
|
|
@@ -258,10 +254,8 @@ export class DialboxComponent {
|
|
|
258
254
|
const existingNotificationParticipantIds = new Set(this.incomingCallsList
|
|
259
255
|
.filter((r) => r?._isNotification)
|
|
260
256
|
.map((r) => r?.participantId));
|
|
261
|
-
console.log('existingNotificationParticipantIds 296', existingNotificationParticipantIds);
|
|
262
257
|
const notificationsToAdd = this.notificationCallList.filter((n) => !existingNotificationParticipantIds.has(n?.participantId));
|
|
263
258
|
this.incomingCallsList = [...this.incomingCallsList, ...notificationsToAdd];
|
|
264
|
-
console.log('incomingCallsList 305', this.incomingCallsList, notificationsToAdd);
|
|
265
259
|
// Final deduplication. Active conference entries are keyed by conferenceId (socket data
|
|
266
260
|
// wins — last write wins). Pending incoming-call notifications are keyed in a SEPARATE
|
|
267
261
|
// namespace by participantId, so a notification and an active conference that share the
|
|
@@ -273,13 +267,11 @@ export class DialboxComponent {
|
|
|
273
267
|
: `conf:${item?.conferenceId}`;
|
|
274
268
|
seen.set(key, item);
|
|
275
269
|
}
|
|
276
|
-
console.log('incomingCallsList 320', this.incomingCallsList, Array.from(seen.values()));
|
|
277
270
|
let finalList = Array.from(seen.values());
|
|
278
271
|
// Remove any notification entry if an active conference with the same conferenceId already exists
|
|
279
272
|
// added for 7472 bug
|
|
280
273
|
const activeConferenceIds = new Set(finalList.filter((item) => !item._isNotification).map((item) => item.conferenceId));
|
|
281
274
|
finalList = finalList.filter((item) => !(item._isNotification && activeConferenceIds.has(item.conferenceId)));
|
|
282
|
-
console.log('incomingCallsList 33=0', this.incomingCallsList, finalList);
|
|
283
275
|
this.incomingCallsList = finalList;
|
|
284
276
|
if (this.incomingCallsList?.length && incomingCallData?.length) {
|
|
285
277
|
this.isCallInProgress = true;
|
|
@@ -289,7 +281,7 @@ export class DialboxComponent {
|
|
|
289
281
|
this.cdk.detectChanges();
|
|
290
282
|
}
|
|
291
283
|
else {
|
|
292
|
-
const hasPendingNotifications = this.incomingCallsList.some((res) => res?._isNotification || res?.
|
|
284
|
+
const hasPendingNotifications = this.incomingCallsList.some((res) => res?._isNotification || res?.callDirection === 'incoming-call');
|
|
293
285
|
const hasAcceptedCalls = this.twilioService.acceptedCallList?.length > 0;
|
|
294
286
|
if ((hasAcceptedCalls || hasPendingNotifications) && this.incomingCallsList?.length) {
|
|
295
287
|
this.isCallInProgress = true;
|
|
@@ -332,12 +324,12 @@ export class DialboxComponent {
|
|
|
332
324
|
if (acceptedParticipantId != null) {
|
|
333
325
|
this.notificationCallList = this.notificationCallList.filter((call) => call?.participantId != acceptedParticipantId);
|
|
334
326
|
this.incomingCallsList = this.incomingCallsList.filter((call) => !((call?.participantId == acceptedParticipantId || call?.id == acceptedParticipantId) &&
|
|
335
|
-
call?.
|
|
327
|
+
call?.callDirection == 'incoming-call'));
|
|
336
328
|
}
|
|
337
329
|
else {
|
|
338
330
|
// Legacy fallback: remove by conferenceId.
|
|
339
331
|
this.notificationCallList = this.notificationCallList.filter((call) => call?.conferenceId != acceptedConferenceId);
|
|
340
|
-
this.incomingCallsList = this.incomingCallsList.filter((call) => call?.conferenceId != acceptedConferenceId || call?.
|
|
332
|
+
this.incomingCallsList = this.incomingCallsList.filter((call) => call?.conferenceId != acceptedConferenceId || call?.callDirection != 'incoming-call');
|
|
341
333
|
}
|
|
342
334
|
});
|
|
343
335
|
this.getUserCallSetting();
|
|
@@ -508,7 +500,7 @@ export class DialboxComponent {
|
|
|
508
500
|
else if (snapshot?.data?.content == "Missed Call" || snapshot?.data?.data?.status == "rejected" || snapshot?.data?.data?.status == "accepted") {
|
|
509
501
|
this.notificationCallList = this.notificationCallList.filter((call) => call?.participantId != snapshot?.data?.data?.recordId && call?.participantId != snapshot?.data?.data?.participantId);
|
|
510
502
|
this.missCallInfo = snapshot;
|
|
511
|
-
let incomingCallIndex = this.incomingCallsList.findIndex((call) => (call?.participantId == snapshot?.data?.data?.recordId || call.participantId == snapshot?.data?.data?.participantId) && call?.
|
|
503
|
+
let incomingCallIndex = this.incomingCallsList.findIndex((call) => (call?.participantId == snapshot?.data?.data?.recordId || call.participantId == snapshot?.data?.data?.participantId) && call?.callDirection == 'incoming-call');
|
|
512
504
|
if (incomingCallIndex > -1) {
|
|
513
505
|
console.log('incomingCallIndex', incomingCallIndex, snapshot);
|
|
514
506
|
this.incomingCallsList.splice(incomingCallIndex, 1);
|
|
@@ -540,7 +532,7 @@ export class DialboxComponent {
|
|
|
540
532
|
this.notificationCallList = this.notificationCallList.filter((res) => res.endTime >= (new Date().getTime()));
|
|
541
533
|
this.notificationCallList.forEach((call) => {
|
|
542
534
|
this.incomingCallsList.forEach((item) => {
|
|
543
|
-
let info = item.participants.find((resInfo) => resInfo?.id === call?.participantId && call?.
|
|
535
|
+
let info = item.participants.find((resInfo) => resInfo?.id === call?.participantId && call?.callDirection !== 'incoming');
|
|
544
536
|
if (info) {
|
|
545
537
|
parentCall.push(info.id);
|
|
546
538
|
}
|
|
@@ -567,7 +559,7 @@ export class DialboxComponent {
|
|
|
567
559
|
if (this.twilioService.incomingCallToken != this.updatedTwilioToken) {
|
|
568
560
|
this.twilioService.incomingCallToken = this.updatedTwilioToken;
|
|
569
561
|
this.twilioService.tokenInitialized = true;
|
|
570
|
-
this.twilioService.initializeTwilioDevice(
|
|
562
|
+
this.twilioService.initializeTwilioDevice(localStorage.getItem('deviceId'));
|
|
571
563
|
}
|
|
572
564
|
}
|
|
573
565
|
if (changes['userId']?.currentValue && this.userId) {
|
|
@@ -733,7 +725,7 @@ export class DialboxComponent {
|
|
|
733
725
|
// so a notification can coexist with an active conference that shares its conferenceId.
|
|
734
726
|
_isNotification: true,
|
|
735
727
|
participantId: notification?.participantId,
|
|
736
|
-
|
|
728
|
+
callDirection: "incoming-call",
|
|
737
729
|
participants: [
|
|
738
730
|
{
|
|
739
731
|
direction: "incoming-call", businessNumber: notification.c2cBusiness, img: notification.fromImage || notification.image || 'assets/images/user.jpg', isIncomingCall: true, isHold: false, isConference: false, isAcceptCall: false, dial: true, phone: notification.fromNumber, to: notification.toNumber,
|
|
@@ -1303,6 +1295,7 @@ export class DialboxComponent {
|
|
|
1303
1295
|
this.incomingCallsList = [];
|
|
1304
1296
|
// Clean up Twilio device when component is destroyed
|
|
1305
1297
|
if (this.twilioService['device']) {
|
|
1298
|
+
console.log('Destroying Twilio device...');
|
|
1306
1299
|
this.twilioService['device'].disconnectAll();
|
|
1307
1300
|
this.twilioService['device'].destroy();
|
|
1308
1301
|
}
|
|
@@ -1370,4 +1363,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1370
1363
|
type: HostListener,
|
|
1371
1364
|
args: ['window:unload']
|
|
1372
1365
|
}] } });
|
|
1373
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRW5NLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUcvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7Ozs7Ozs7Ozs7OztBQVluQyxNQUFNLE9BQU8sZ0JBQWdCO0lBaUIzQixJQUFhLGVBQWUsQ0FBQyxLQUFjO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFNRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQWlFRCwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDhDQUE4QztJQUM5QyxnREFBZ0Q7SUFDaEQseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixzRkFBc0Y7SUFFdEYscUZBQXFGO0lBQ3JGLHFFQUFxRTtJQUNyRSw4QkFBOEI7SUFDOUIsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6QyxNQUFNO0lBQ04sSUFBSTtJQUVKLHNDQUFzQztJQUN0QyxrQ0FBa0M7SUFDbEMsY0FBYztJQUNkLE1BQU07SUFDTixXQUFX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ZCxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQzs7OEdBNzNDVSxnQkFBZ0I7a0dBQWhCLGdCQUFnQiwyNkJDbEI3QiwrNllBb05NOzRGRGxNTyxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsYUFBYTsrUkFPZCxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQVVPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBT0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUksaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkFDWixZQUFZO3NCQUFyQixNQUFNO2dCQWdIUCxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBcUIvQyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUd2lsaW9TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcclxuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsga2V5cGFkIH0gZnJvbSAnLi4va2V5cGFkJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pcC1hZGRyZXNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pbmNvbWVpbmctY2FsbC1zb2NrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWRpYWxib3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsYm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsYm94LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuICBwcml2YXRlIF9pc0RpYWxwYWRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8vIExldCB0aGUgbGlicmFyeSBkZWNpZGUgdG8gYXV0by1vcGVuIG9uIGluY29taW5nIGNhbGwgd2l0aG91dCBob3N0IHdpcmluZ1xyXG4gIEBJbnB1dCgpIGF1dG9PcGVuT25JbmNvbWluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY29udGFjdEluZm86IGFueTtcclxuICBASW5wdXQoKSBkZXZpY2VJZDogYW55O1xyXG4gIEBJbnB1dCgpIHVzZXJJZDogYW55O1xyXG4gIEBJbnB1dCgpIGNhbGxBY3Rpb246IGFueTtcclxuICBpc0xvYWRlcnNob3cgPSBmYWxzZTtcclxuICBpc0luY29taW5nQ2FsbG5vdGlmaWNhdGlvbjogYW55ID0gZmFsc2U7XHJcbiAgbm90aWZpY2F0aW9uQ2FsbExpc3Q6IGFueSA9IFtdO1xyXG4gIGRldmljZU51bWJlckxpc3Q6IGFueVtdID0gW107XHJcbiAgbWlzc0NhbGxJbmZvOiBhbnkgPSB7fTtcclxuICBjb25uZWN0aW5nSW5jb21pbmdDYWxsSWQ6IHN0cmluZyA9ICcnO1xyXG4gIG5ld0NhbGxDb25mZXJlbmNlOiBhbnk7XHJcbiAgdXNlclNldHRpbmdJbmZvOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBpc0RpYWxwYWRIaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzRGlhbHBhZEhpZGRlbiA9IHZhbHVlO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAvLyBXaGVuIGRpYWxwYWQgYmVjb21lcyB2aXNpYmxlLCBlbnN1cmUgVHdpbGlvIGlzIGluaXRpYWxpemVkXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVR3aWxpbygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBASW5wdXQoKSBpbmNvbWluZ0NhbGxEYXRhOiBhbnlcclxuICBASW5wdXQoKSBpbmNvbWluZ0NhbGxub3RpZmljYXRpb246IGFueTtcclxuICBASW5wdXQoKSB1cGRhdGVkVHdpbGlvVG9rZW46IHN0cmluZyA9ICcnO1xyXG4gIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55ID0ge307XHJcbiAgaXNWYWxpZGF0aW9uTWVzc2FnZVNob3cgPSBmYWxzZVxyXG4gIGdldCBpc0RpYWxwYWRIaWRkZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNEaWFscGFkSGlkZGVuO1xyXG4gIH1cclxuICBAT3V0cHV0KCkgY2xvc2VEaWFscGFkRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgY2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZW5kQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG1pbmltaXNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsc05ld0luZm9FdmVudDogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBjb25mZXJlbmNlQ2FsbExpc3Q6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAVmlld0NoaWxkKCdkaWFsSW5wdXQnKSBkaWFsSW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcclxuICBAT3V0cHV0KCkgbnVtYmVyRGlhbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgLy8gTmV3IG9iamVjdCByZWZlcmVuY2UgZWFjaCB0aW1lIENhbmNlbCBpcyBjbGlja2VkLCBzbyBsaWItY2FsbC1wcm9ncmVzcydzIG5nT25DaGFuZ2VzXHJcbiAgLy8gZmlyZXMgZXZlbiBpZiB0aGUgY29tcG9uZW50IHdhc24ndCBtb3VudGVkIHlldCBhdCBjbGljayB0aW1lLlxyXG4gIGNhbmNlbENvbm5lY3RpbmdBY3Rpb246IGFueSA9IG51bGw7XHJcblxyXG4gIGlzQ2FsbEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBrZXlwYWRWYWwgPSBrZXlwYWQ7XHJcbiAgc2hvd0lucHV0Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaWFsZWROdW1iZXI6IHN0cmluZyA9ICcnO1xyXG4gIGNvbnRhY3RMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkQ29udGFjdExpc3Q6IGFueVtdID0gW107XHJcbiAgY2FsbGVySWRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ2FsbGVySWQ6IGFueTtcclxuICBpc0NhbGxlcklkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1RyaWFsUGVyaW9kT3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUGF5bWVudER1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcclxuICB0b2FzdFRpbWVvdXQgPSA3MDAwO1xyXG4gIGNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgIHNob3c6IGZhbHNlLFxyXG4gICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxyXG4gICAgbnVtYmVyOiAnJyxcclxuICAgIGRpc3BsYXlOdW06ICcnXHJcbiAgfVxyXG4gIGNhbGxEYXRhOiBhbnkgPSB7XHJcbiAgICBwaG9uZTogJycsXHJcbiAgICBkaXNwbGF5TnVtOiAnJyxcclxuICAgIGRpYWw6IGZhbHNlLFxyXG4gICAgbmFtZTogJycsXHJcbiAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgIGV4dE51bTogJydcclxuICB9O1xyXG4gIGxhc3REaWFsZWQ6IHsgbmFtZT86IHN0cmluZzsgaW1hZ2U/OiBzdHJpbmc7IG51bWJlcjogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcclxuICBzYW5pdGl6ZWROdW06IGFueTtcclxuICBkaWFsQWxlcnQgPSB7XHJcbiAgICBtc2c6ICcnLFxyXG4gICAgc2hvdzogZmFsc2VcclxuICB9XHJcbiAgdG9rZW4/OiBzdHJpbmc7XHJcbiAgc2hvd0RlZGljYXRlZFBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbmV3SW5jb21pbmdDYWxsczogYW55ID0gW107XHJcbiAgaW5jb21pbmdDYWxsc0xpc3Q6IGFueSA9IFtdO1xyXG4gIG5ld0luY29taW5nQ2FsbERhdGE/OiBDYWxsO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIGNhbGxQcmVmZXJlbmNlOiBhbnk7XHJcbiAgc2hha2VEZWRpY2F0ZWRCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1NtYXJ0RGlhbENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAvLyBTZXQgb25jZSB0aGUgdXNlciBjb25maXJtcyBhbiBpbnRlbnRpb25hbCByZWxvYWQgdmlhIG91ciBjdXN0b20gbW9kYWwsXHJcbiAgLy8gc28gdGhlIG5hdGl2ZSBiZWZvcmV1bmxvYWQgcHJvbXB0IGlzIG5vdCBzaG93biBvbiB0b3Agb2YgaXQuXHJcbiAgcHJpdmF0ZSBpc1JlbG9hZENvbmZpcm1lZCA9IGZhbHNlO1xyXG4gIG51bGxQYXJ0aWNpcGFudENhbGxMaXN0OiBhbnkgPVtdXHJcbiAgY29udGFjdE5hbWVGb3JMb2FkZXIgPSAnJztcclxuICBjb250YWN0SW1nRm9yTG9hZGVyID0gJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xyXG4gIGluY29taW5nRnJvbUltYWdlID0gJyc7XHJcbiAgLy8gSW50ZXJjZXB0IHRoZSBrZXlib2FyZCByZWZyZXNoIHNob3J0Y3V0cyAoRjUsIEN0cmwrUiAvIENtZCtSKSBzbyB3ZSBjYW5cclxuICAvLyBzaG93IE9VUiBjdXN0b20td29yZGVkIGNvbmZpcm1hdGlvbiBpbnN0ZWFkIG9mIHRoZSBicm93c2VyJ3MgZ2VuZXJpYyBvbmUuXHJcbiAgLy8gQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIC8vIGhhbmRsZVJlZnJlc2hTaG9ydGN1dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gIC8vICAgY29uc3QgaXNSZWZyZXNoS2V5ID1cclxuICAvLyAgICAgZXZlbnQua2V5ID09PSAnRjUnIHx8XHJcbiAgLy8gICAgICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAoZXZlbnQua2V5ID09PSAncicgfHwgZXZlbnQua2V5ID09PSAnUicpKTtcclxuXHJcbiAgLy8gICBpZiAoaXNSZWZyZXNoS2V5ICYmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgfHwgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSkge1xyXG4gIC8vICAgICAvLyBTdG9wIHRoZSBicm93c2VyJ3MgZGVmYXVsdCByZWZyZXNoIHNvIG91ciBtb2RhbCBjYW4gZGVjaWRlLlxyXG4gIC8vICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIC8vICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWU7XHJcbiAgLy8gICAgIC8vIHRoaXMuY29uZmlybVJlbG9hZER1cmluZ0NhbGwoKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIHByaXZhdGUgY29uZmlybVJlbG9hZER1cmluZ0NhbGwoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5pc1JlbG9hZENvbmZpcm1lZCkge1xyXG4gIC8vICAgICByZXR1cm47XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzd2FsKHtcclxuICAvLyAgICAgdGl0bGU6ICdSZWxvYWQgcGFnZT8nLFxyXG4gIC8vICAgICB0ZXh0OiAnUmVsb2FkaW5nIHRoaXMgcGFnZSB3aWxsIGRpc2Nvbm5lY3QgeW91ciBhY3RpdmUgY2FsbC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlPycsXHJcbiAgLy8gICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAvLyAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAvLyAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdSZWxvYWQnLFxyXG4gIC8vICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcclxuICAvLyAgICAgLy8gVGFnIG9ubHkgVEhJUyBtb2RhbCdzIGNvbnRhaW5lciBzbyB0aGUgei1pbmRleCBvdmVycmlkZSBhcHBsaWVzIHRvIHRoZVxyXG4gIC8vICAgICAvLyByZWxvYWQgd2FybmluZyBhbG9uZSwgbm90IHRvIG90aGVyIHN3YWwgZXJyb3Ivd2FybmluZyBhbGVydHMuXHJcbiAgLy8gICAgIG9uQmVmb3JlT3BlbjogKG1vZGFsRWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAvLyAgICAgICBtb2RhbEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ3N3YWwtcmVsb2FkLW9uLXRvcCcpO1xyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgfSlcclxuICAvLyAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gIC8vICAgICAgIGlmICghcmVzdWx0LnZhbHVlKSB7XHJcbiAgLy8gICAgICAgICAvLyBDYW5jZWwgLyBkaXNtaXNzIC0+IHN0YXkgb24gdGhlIHBhZ2UsIGtlZXAgdGhlIGNhbGwgYWN0aXZlLlxyXG4gIC8vICAgICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICAvLyBSZWxvYWQgY29uZmlybWVkOiB0ZWFyIGRvd24gdGhlIGNhbGwsIHRoZW4gcmVsb2FkLiBUaGUgZmxhZyBwcmV2ZW50c1xyXG4gIC8vICAgICAgIC8vIHRoZSBuYXRpdmUgYmVmb3JldW5sb2FkIGRpYWxvZyBmcm9tIGFwcGVhcmluZyBvbiB0b3Agb2YgdGhpcy5cclxuICAvLyAgICAgICB0aGlzLmlzUmVsb2FkQ29uZmlybWVkID0gdHJ1ZTtcclxuICAvLyAgICAgICBjb25zdCBjb25mZXJlbmNlSWQgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5bMF0/LmNvbmZlcmVuY2VJZDtcclxuICAvLyAgICAgICBpZiAoY29uZmVyZW5jZUlkKSB7XHJcbiAgLy8gICAgICAgICB0cnkge1xyXG4gIC8vICAgICAgICAgICBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2VcclxuICAvLyAgICAgICAgICAgICAuZ2V0UmVtb3ZlUGFydGljaXBhbnRzKCdhbGwnLCBjb25mZXJlbmNlSWQpXHJcbiAgLy8gICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIC8vICAgICAgICAgfSBjYXRjaCB7XHJcbiAgLy8gICAgICAgICAgIC8vIFByb2NlZWQgd2l0aCByZWxvYWQgZXZlbiBpZiBjbGVhbnVwIGZhaWxzLlxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXHJcbiAgYmVmb3JlVW5sb2FkSGFuZGxlcigkZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gQWxyZWFkeSBjb25maXJtZWQgdmlhIG91ciBjdXN0b20gbW9kYWwgLT4gcmVsb2FkIHNpbGVudGx5LlxyXG4gICAgaWYgKHRoaXMuaXNSZWxvYWRDb25maXJtZWQpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIC8vIEZhbGxiYWNrIGZvciB0aGUgYnJvd3NlcidzIHJlZnJlc2ggYnV0dG9uIC8gdGFiIGNsb3NlLCB3aGljaCBjYW5ub3QgYmVcclxuICAgIC8vIGludGVyY2VwdGVkIHdpdGggYSBjdXN0b20gbW9kYWwuIFRyaWdnZXJzIHRoZSBuYXRpdmUgY29uZmlybWF0aW9uIHNvIHRoZVxyXG4gICAgLy8gdXNlciBkb2VzIG5vdCBsb3NlIHRoZSBjYWxsIGFjY2lkZW50YWxseS4gKEJyb3dzZXIgY29udHJvbHMgdGhlIHdvcmRpbmcuKVxyXG4gICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyB8fCB0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuXHJcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbk1lc3NhZ2UgPSAnUmVsb2FkaW5nIHRoaXMgcGFnZSB3aWxsIGRpc2Nvbm5lY3QgeW91ciBhY3RpdmUgY2FsbC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlPyc7XHJcbiAgICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSBjb25maXJtYXRpb25NZXNzYWdlIDtcclxuICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmZpcm1hdGlvbk1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnVubG9hZCcpXHJcbiAgdW5sb2FkSGFuZGxlcigpIHtcclxuICAgIC8vIFNraXAgaWYgd2UgYWxyZWFkeSByZW1vdmVkIHBhcnRpY2lwYW50cyBpbiB0aGUgY3VzdG9tLW1vZGFsIGZsb3cuXHJcbiAgICBpZiAodGhpcy5pc1JlbG9hZENvbmZpcm1lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdHdpbGlvU2VydmljZTogVHdpbGlvU2VydmljZSxcclxuICAgIHByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZGs6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2U6IEluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBpZiBkaWFscGFkIGlzIHZpc2libGUgYnkgZGVmYXVsdFxyXG4gICAgaWYgKCF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuY3JlYXRlQXVkaW9CYXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVUd2lsaW8oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIHx8ICcnO1xyXG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdXRoZW50aWNhdGlvbiB0b2tlbiBmb3VuZCcpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBUd2lsaW8gc2VydmljZVxyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaW5pdGlhbGl6ZVR3aWxpb0RldmljZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGV2aWNlSWQnKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIEVuc3VyZSBUd2lsaW8gaXMgaW5pdGlhbGl6ZWQgZXZlbiB3aGVuIGRpYWxwYWQgc3RhcnRzIGhpZGRlbixcclxuICAgIC8vIHNvIHdlIGNhbiBhdXRvLW9wZW4gb24gaW5jb21pbmcgY2FsbHMuXHJcbiAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcclxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuY29ubmVjdCh0aGlzLmRldmljZUlkKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UubGlzdGVuKCkuc3Vic2NyaWJlKGFzeW5jIChpbmNvbWluZ0NhbGxEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvID0gaW5jb21pbmdDYWxsRGF0YTtcclxuICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5lbWl0KGluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XHJcbiAgICAgICAgaWYgKHRoaXMudG9rZW4gPT0gJ2xvZ291dCcpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvdW5kJyk7XHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlPy5kaXNjb25uZWN0QWxsKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZpbHRlciBvdXQgY29uZmVyZW5jZXMgd2l0aCBubyBwYXJ0aWNpcGFudHNcclxuICAgICAgICBpbmNvbWluZ0NhbGxEYXRhID0gaW5jb21pbmdDYWxsRGF0YT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyBpbmNvbWluZ0NhbGxEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcnRpY2lwYW50cz8ubGVuZ3RoID4gMClcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnMjQ0JywgaW5jb21pbmdDYWxsRGF0YSlcclxuICAgICAgICAvLyBBbGwgY29uZmVyZW5jZUlkcyByZWNlaXZlZCBmcm9tIHNvY2tldCB0aGlzIHRpY2tcclxuICAgICAgICBjb25zdCBzb2NrZXRDb25mZXJlbmNlSWRzOiBzdHJpbmdbXSA9IGluY29taW5nQ2FsbERhdGEubWFwKChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkKTtcclxuXHJcbiAgICAgICAgaW5jb21pbmdDYWxsRGF0YS5mb3JFYWNoKChjYWxsSW5mbzogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyBDaGVjayBpZiBXRSBhcmUgYW4gYWN0aXZlIHBhcnRpY2lwYW50IGluIHRoaXMgY29uZmVyZW5jZVxyXG4gICAgICAgICAgY29uc3Qgb3VyTnVtYmVyID0gY2FsbEluZm8/LnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcmVzRGF0YT8uY2xpZW50KSB8fFxyXG4gICAgICAgICAgICAgICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcmVzRGF0YT8uY2xpZW50KVxyXG4gICAgICAgICAgICApICYmICFyZXNEYXRhPy5pc0xlZnQpO1xyXG5cclxuICAgICAgICAgIC8vIE1hdGNoIHRoZSBBQ1RJVkUgY29uZmVyZW5jZSBlbnRyeSBvbmx5IOKAlCBuZXZlciBhIHBlbmRpbmcgaW5jb21pbmctY2FsbFxyXG4gICAgICAgICAgLy8gbm90aWZpY2F0aW9uLCB3aGljaCBjYW4gc2hhcmUgdGhpcyBjb25mZXJlbmNlSWQgYnV0IG11c3Qgbm90IGJlIG92ZXJ3cml0dGVuXHJcbiAgICAgICAgICAvLyB3aXRoIHNvY2tldCBkYXRhIChpdCBpcyBrZXllZC9tYW5hZ2VkIHNlcGFyYXRlbHkgYnkgcGFydGljaXBhbnRJZCkuXHJcbiAgICAgICAgICBjb25zdCBjYWxsSW5kZXggPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbmRJbmRleCgocmVzOiBhbnkpID0+IHJlcy5jb25mZXJlbmNlSWQgPT0gY2FsbEluZm8uY29uZmVyZW5jZUlkICYmICFyZXM/Ll9pc05vdGlmaWNhdGlvbik7XHJcblxyXG4gICAgICAgICAgaWYgKG91ck51bWJlcj8uaWQpIHtcclxuICAgICAgICAgICAgLy8gV2UgYXJlIGluIHRoaXMgY2FsbCDigJQgdXBkYXRlIGV4aXN0aW5nIG9yIGFkZCBuZXdcclxuICAgICAgICAgICAgaWYgKGNhbGxJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdFtjYWxsSW5kZXhdID0geyAuLi50aGlzLmluY29taW5nQ2FsbHNMaXN0W2NhbGxJbmRleF0sIC4uLmNhbGxJbmZvIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKHsgLi4uY2FsbEluZm8gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFdlIGFyZSBOT1QgYSBwYXJ0aWNpcGFudCDigJQgcmVtb3ZlIGZyb20gaW5jb21pbmdDYWxsc0xpc3Qgb25seSBpZiBpdCBpcyBOT1QgYW4gaW5jb21pbmctY2FsbCBub3RpZmljYXRpb25cclxuICAgICAgICAgICAgaWYgKGNhbGxJbmRleCA+IC0xICYmIHRoaXMuaW5jb21pbmdDYWxsc0xpc3RbY2FsbEluZGV4XT8uZGlyZWN0aW9uICE9PSAnaW5jb21pbmctY2FsbCcpIHtcclxuICAgICAgICAgICAgICAvLyBGSVg6IHNwbGljZShpbmRleCwgZGVsZXRlQ291bnQpIOKAlCB3YXMgaW5jb3JyZWN0bHkgc3BsaWNlKDEsIGNhbGxJbmRleClcclxuICAgICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnNwbGljZShjYWxsSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luY29taW5nQ2FsbHNMaXN0IDI3NScsIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QpO1xyXG4gICAgICAgIC8vIFJlbW92ZSBhY3RpdmUtY2FsbCBlbnRyaWVzIHdob3NlIGNvbmZlcmVuY2VJZCBpcyBubyBsb25nZXIgaW4gdGhlIHNvY2tldFxyXG4gICAgICAgIC8vIGJ1dCBrZWVwIGluY29taW5nLWNhbGwgbm90aWZpY2F0aW9ucyAodGhleSBhcmUgbWFuYWdlZCBieSBub3RpZmljYXRpb25DYWxsTGlzdCBleHBpcnkpXHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChyZXM6IGFueSkgPT5cclxuICAgICAgICAgIHNvY2tldENvbmZlcmVuY2VJZHMuaW5jbHVkZXMocmVzLmNvbmZlcmVuY2VJZCkgfHwgcmVzLmRpcmVjdGlvbiA9PT0gJ2luY29taW5nLWNhbGwnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnaW5jb21pbmdDYWxsc0xpc3QgMjgxJywgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCk7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGV4cGlyZWQgbm90aWZpY2F0aW9uIGVudHJpZXNcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHJlcy5lbmRUaW1lID49IG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnbm90aWZpY2F0aW9uQ2FsbExpc3QgMjg2JywgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdCwgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCk7XHJcbiAgICAgICAgLy8gTWVyZ2Ugbm90aWZpY2F0aW9uQ2FsbExpc3QgT05DRSAobm90IGluc2lkZSBmb3JFYWNoKS4gQSBwZW5kaW5nIGluY29taW5nLWNhbGxcclxuICAgICAgICAvLyBub3RpZmljYXRpb24gaXMgaWRlbnRpZmllZCBieSBpdHMgT1dOIHBhcnRpY2lwYW50SWQg4oCUIG5ldmVyIGJ5IGNvbmZlcmVuY2VJZCDigJRcclxuICAgICAgICAvLyBiZWNhdXNlIGl0IGNhbiBsZWdpdGltYXRlbHkgc2hhcmUgdGhlIGNvbmZlcmVuY2VJZCBvZiBhIGNvbmZlcmVuY2Ugd2UgYXJlIGFscmVhZHlcclxuICAgICAgICAvLyBpbiAoZS5nLiB3aGVuIGEgc2Vjb25kIG9uZSBvZiBvdXIgbnVtYmVycyBpcyBpbnZpdGVkIGludG8gdGhhdCBzYW1lIGNvbmZlcmVuY2UpLlxyXG4gICAgICAgIC8vIE9ubHkgc2tpcCBhIG5vdGlmaWNhdGlvbiBpZiBhbiBpZGVudGljYWwgb25lIChzYW1lIHBhcnRpY2lwYW50SWQpIGlzIGFscmVhZHkgcHJlc2VudC5cclxuICAgICAgICBjb25zdCBleGlzdGluZ05vdGlmaWNhdGlvblBhcnRpY2lwYW50SWRzID0gbmV3IFNldChcclxuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3RcclxuICAgICAgICAgICAgLmZpbHRlcigocjogYW55KSA9PiByPy5faXNOb3RpZmljYXRpb24pXHJcbiAgICAgICAgICAgIC5tYXAoKHI6IGFueSkgPT4gcj8ucGFydGljaXBhbnRJZClcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdleGlzdGluZ05vdGlmaWNhdGlvblBhcnRpY2lwYW50SWRzIDI5NicsIGV4aXN0aW5nTm90aWZpY2F0aW9uUGFydGljaXBhbnRJZHMpO1xyXG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNUb0FkZCA9IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKG46IGFueSkgPT4gIWV4aXN0aW5nTm90aWZpY2F0aW9uUGFydGljaXBhbnRJZHMuaGFzKG4/LnBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gWy4uLnRoaXMuaW5jb21pbmdDYWxsc0xpc3QsIC4uLm5vdGlmaWNhdGlvbnNUb0FkZF07XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luY29taW5nQ2FsbHNMaXN0IDMwNScsIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QsIG5vdGlmaWNhdGlvbnNUb0FkZCk7XHJcbiAgICAgICAgLy8gRmluYWwgZGVkdXBsaWNhdGlvbi4gQWN0aXZlIGNvbmZlcmVuY2UgZW50cmllcyBhcmUga2V5ZWQgYnkgY29uZmVyZW5jZUlkIChzb2NrZXQgZGF0YVxyXG4gICAgICAgIC8vIHdpbnMg4oCUIGxhc3Qgd3JpdGUgd2lucykuIFBlbmRpbmcgaW5jb21pbmctY2FsbCBub3RpZmljYXRpb25zIGFyZSBrZXllZCBpbiBhIFNFUEFSQVRFXHJcbiAgICAgICAgLy8gbmFtZXNwYWNlIGJ5IHBhcnRpY2lwYW50SWQsIHNvIGEgbm90aWZpY2F0aW9uIGFuZCBhbiBhY3RpdmUgY29uZmVyZW5jZSB0aGF0IHNoYXJlIHRoZVxyXG4gICAgICAgIC8vIHNhbWUgY29uZmVyZW5jZUlkIEJPVEggc3Vydml2ZSAodGhlIHNlY29uZC1udW1iZXIgc2NlbmFyaW8pIGluc3RlYWQgb2YgcmVwbGFjaW5nIGVhY2ggb3RoZXIuXHJcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QpIHtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IGl0ZW0/Ll9pc05vdGlmaWNhdGlvblxyXG4gICAgICAgICAgICA/IGBub3RpZjoke2l0ZW0/LnBhcnRpY2lwYW50SWR9YFxyXG4gICAgICAgICAgICA6IGBjb25mOiR7aXRlbT8uY29uZmVyZW5jZUlkfWA7XHJcbiAgICAgICAgICBzZWVuLnNldChrZXksIGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnaW5jb21pbmdDYWxsc0xpc3QgMzIwJywgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCwgQXJyYXkuZnJvbShzZWVuLnZhbHVlcygpKSk7XHJcbiAgICAgICAgbGV0IGZpbmFsTGlzdCA9IEFycmF5LmZyb20oc2Vlbi52YWx1ZXMoKSk7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBhbnkgbm90aWZpY2F0aW9uIGVudHJ5IGlmIGFuIGFjdGl2ZSBjb25mZXJlbmNlIHdpdGggdGhlIHNhbWUgY29uZmVyZW5jZUlkIGFscmVhZHkgZXhpc3RzXHJcbiAgICAgICAgLy8gYWRkZWQgZm9yIDc0NzIgYnVnXHJcbiAgICAgICAgY29uc3QgYWN0aXZlQ29uZmVyZW5jZUlkcyA9IG5ldyBTZXQoXHJcbiAgICAgICAgICBmaW5hbExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+ICFpdGVtLl9pc05vdGlmaWNhdGlvbikubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uY29uZmVyZW5jZUlkKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZmluYWxMaXN0ID0gZmluYWxMaXN0LmZpbHRlcihcclxuICAgICAgICAgIChpdGVtOiBhbnkpID0+ICEoaXRlbS5faXNOb3RpZmljYXRpb24gJiYgYWN0aXZlQ29uZmVyZW5jZUlkcy5oYXMoaXRlbS5jb25mZXJlbmNlSWQpKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luY29taW5nQ2FsbHNMaXN0IDMzPTAnLCB0aGlzLmluY29taW5nQ2FsbHNMaXN0LCBmaW5hbExpc3QpO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBmaW5hbExpc3Q7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggJiYgaW5jb21pbmdDYWxsRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHRoaXMuaXNMb2FkZXJzaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkay5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGhhc1BlbmRpbmdOb3RpZmljYXRpb25zID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5zb21lKFxyXG4gICAgICAgICAgICAocmVzOiBhbnkpID0+IHJlcz8uX2lzTm90aWZpY2F0aW9uIHx8IHJlcz8uZGlyZWN0aW9uID09PSAnaW5jb21pbmctY2FsbCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBoYXNBY2NlcHRlZENhbGxzID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3Q/Lmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgICAgaWYgKChoYXNBY2NlcHRlZENhbGxzIHx8IGhhc1BlbmRpbmdOb3RpZmljYXRpb25zKSAmJiB0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0luY29taW5nQ2FsbG5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICAvLyBHZW51aW5lbHkgaWRsZTogbm8gYW5zd2VyZWQgY2FsbHMgYW5kIG5vIHJpbmdpbmcgbm90aWZpY2F0aW9ucyDihpIgZnVsbCByZXNldC5cclxuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5kZXZpY2U/LmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5pbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmKCF0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5kZXZpY2U/LmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnNwYXJlRGV2aWNlPy5kaXNjb25uZWN0QWxsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIHx8ICcnO1xyXG4gICAgICB0aGlzLmdldENvbnRhY3RMaXN0KCk7XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0xvYWRlcnNob3cuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkZXJzaG93ID0gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBGSVg6IC5maWx0ZXIoKSByZXR1cm5zIGEgbmV3IGFycmF5IOKAlCBtdXN0IGFzc2lnbiBiYWNrIHRvIGFjdHVhbGx5IG11dGF0ZSB0aGUgbGlzdHNcclxuICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmlzQWNjZXB0SUluY29taW5nQ2FsbC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gYHJlc2AgaXMgZWl0aGVyIGEgcGxhaW4gY29uZmVyZW5jZUlkIChsZWdhY3kpIG9yIHsgY29uZmVyZW5jZUlkLCBwYXJ0aWNpcGFudElkIH0uXHJcbiAgICAgICAgY29uc3QgYWNjZXB0ZWRDb25mZXJlbmNlSWQgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IHJlcyA6IHJlcz8uY29uZmVyZW5jZUlkO1xyXG4gICAgICAgIGNvbnN0IGFjY2VwdGVkUGFydGljaXBhbnRJZCA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gbnVsbCA6IHJlcz8ucGFydGljaXBhbnRJZDtcclxuXHJcbiAgICAgICAgaWYgKGFjY2VwdGVkUGFydGljaXBhbnRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAgIChjYWxsOiBhbnkpID0+IGNhbGw/LnBhcnRpY2lwYW50SWQgIT0gYWNjZXB0ZWRQYXJ0aWNpcGFudElkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAoY2FsbDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICEoKGNhbGw/LnBhcnRpY2lwYW50SWQgPT0gYWNjZXB0ZWRQYXJ0aWNpcGFudElkIHx8IGNhbGw/LmlkID09IGFjY2VwdGVkUGFydGljaXBhbnRJZCkgJiZcclxuICAgICAgICAgICAgICAgIGNhbGw/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBMZWdhY3kgZmFsbGJhY2s6IHJlbW92ZSBieSBjb25mZXJlbmNlSWQuXHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoKGNhbGw6IGFueSkgPT4gY2FsbD8uY29uZmVyZW5jZUlkICE9IGFjY2VwdGVkQ29uZmVyZW5jZUlkKTtcclxuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgKGNhbGw6IGFueSkgPT4gY2FsbD8uY29uZmVyZW5jZUlkICE9IGFjY2VwdGVkQ29uZmVyZW5jZUlkIHx8IGNhbGw/LmRpcmVjdGlvbiAhPSAnaW5jb21pbmctY2FsbCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcclxuICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkLnN1YnNjcmliZSgoY2FsbElkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBjYWxsSWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBzdWIxID0gdGhpcy50d2lsaW9TZXJ2aWNlLmRpYWxOdW1iZXJGcm9tT3RoZXJNb2R1bGUuc3Vic2NyaWJlKChjb250YWN0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY29udGFjdC5udW1iZXIpIHtcclxuICAgICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoY29udGFjdC5pc0RpYWxGcm9tSGlzdG9yeSkge1xyXG4gICAgICAgICAgICAvL2hhbmRsZSBkaWFsaW5nIGZyb20gaGlzdG9yeSBwYWdlXHJcbiAgICAgICAgICAgIGlmIChjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSB7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcclxuICAgICAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcclxuICAgICAgICAgICAgICB0aGlzLm91dGdvaW5nQ29udGFjdE5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gY29udGFjdC5mcm9tO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXHJcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnMjgyJywgY29udGFjdClcclxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjb250YWN0LmNhbGxlcklkID09ICdhbHdheXNBc2snIHx8IGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gY29udGFjdC5uYW1lO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XHJcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIGhhbmRsZSBpbmNvbWluZyBjYWxsIChtYW5hZ2VkIGludGVybmFsbHk7IGhvc3QgbmVlZCBub3QgcGFzcyBpbmNvbWluZ0NhbGxEYXRhKVxyXG4gICAgICBjb25zdCBzdWIyID0gdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsLnN1YnNjcmliZSgoaW5jb21pbmdDYWxsRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGluY29taW5nQ2FsbERhdGEpIHtcclxuICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYXV0b09wZW5PbkluY29taW5nICYmIHRoaXMuX2lzRGlhbHBhZEhpZGRlbikge1xyXG4gICAgICAgICAgICB0aGlzLl9pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc0NhbGxJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluY29taW5nQ2FsbERhdGFbJ2lzRmlyc3RDYWxsJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzdWIzID0gdGhpcy50d2lsaW9TZXJ2aWNlLmluY29taW5nQ2FsbE5vdGlmaWNhdGlvbi5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maW5kSW5kZXgoKHJlc0luZm86IGFueSk9PiByZXNJbmZvPy5jb25mZXJlbmNlSWQgPT0gbm90aWZpY2F0aW9uPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgICBpZihpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBjYWxsZXJJbmZvOiBhbnk7XHJcbiAgICAgICAgICBsZXQgbnVtYmVyTGlzdCA9IHRoaXMuY2FsbGVySWRMaXN0Lm1hcCgocmVzKSA9PiByZXMubnVtYmVyKVxyXG4gICAgICAgICAgICBpZiAoIW51bWJlckxpc3QuaW5jbHVkZXMobm90aWZpY2F0aW9uPy5mcm9tTnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24/LmMyY0J1c2luZXNzICE9ICdmYWxzZScgJiYgbm90aWZpY2F0aW9uPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKG5vdGlmaWNhdGlvbj8ucGFydGljaXBhbnRJZCkuc3Vic2NyaWJlKChyZXNJbmZvOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY2FsbGVySW5mbyA9IHJlc0luZm8/LmMyY0luZm9ybWF0aW9uIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbE5vdGlmaWNhdGlvbihjYWxsZXJJbmZvLCBub3RpZmljYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oe30sIG5vdGlmaWNhdGlvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaW5jb21pbmdGcm9tSW1hZ2UgPSAnJztcclxuICAgICAgICAgICAgaWYobm90aWZpY2F0aW9uPy5mcm9tSW1hZ2Upe1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdGcm9tSW1hZ2UgPSBub3RpZmljYXRpb24/LmZyb21JbWFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIxKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIyKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIzKTtcclxuICAgICAgdGhpcy5nZXRVc2VyU2V0dGluZ3MoKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhOiBhbnkpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5mcm9tRW50cmllcyhBcnJheS5mcm9tKGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5lbnRyaWVzKCkpKTtcclxuICAgIGlmKGRhdGFbJ3R3aWxpb0F1dGhJZCddKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oZGF0YVsndHdpbGlvQXV0aElkJ10pLnN1YnNjcmliZShcclxuICAgICAgICByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICBpbmNvbWluZ0NhbGxEYXRhWyd1c2VySW5mbyddID0gcmVzcG9uc2VcclxuICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tRW50cmllcyhlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5yZWdpc3RlckRyYWdFbGVtZW50KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1snaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbiAmJiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbj8uZGF0YT8uY29udGVudCAhPSBcIlZvaWNlbWFpbFwiKSB7XHJcbiAgICAgIC8vIENhcHR1cmUgc25hcHNob3QgaW1tZWRpYXRlbHkgc28gYXN5bmMgY2FsbGJhY2tzIGFsd2F5cyB1c2UgdGhpcyBjYWxsJ3MgZGF0YSxcclxuICAgICAgLy8gbm90IHdoYXRldmVyIHRoaXMuaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uIHBvaW50cyB0byB3aGVuIHRoZXkgZXZlbnR1YWxseSBydW4uXHJcbiAgICAgIGNvbnNvbGUubG9nKCdub3RpZmljYXRpb25mcm9tQkUnLCB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbik7XHJcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb247XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmluZEluZGV4KChyZXNJbmZvOiBhbnkpPT4gcmVzSW5mbz8uY29uZmVyZW5jZUlkID09IHNuYXBzaG90Py5kYXRhPy5kYXRhPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgIC8vIGluY29taW5nIGNhbGwgZGV0YWlsIGZyb20gbm90aWZhY3Rpb25cclxuICAgICAgaWYgKGluZGV4ID09IC0xICYmIHNuYXBzaG90Py5kYXRhPy5jb250ZW50ID09IFwiSW5jb21pbmdDYWxsXCIgJiYgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyAhPSBcInJlamVjdGVkXCIgJiYgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyAhPSBcImFjY2VwdGVkXCIpIHtcclxuICAgICAgICAvLyB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICAvLyBsZXQgY2FsbGVySW5mbzogYW55O1xyXG4gICAgICAgIC8vIGxldCBudW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXMpID0+IHJlcy5udW1iZXIpXHJcbiAgICAgICAgLy8gaWYgKCFudW1iZXJMaXN0LmluY2x1ZGVzKHNuYXBzaG90LmRhdGEuZGF0YT8uZnJvbU51bWJlcikpIHtcclxuICAgICAgICAvLyAgIGlmIChzbmFwc2hvdC5kYXRhPy5kYXRhPy5jMmNCdXNpbmVzcyAhPSAnZmFsc2UnICYmIHNuYXBzaG90LmRhdGEuZGF0YT8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKHNuYXBzaG90LmRhdGEuZGF0YT8ucGFydGljaXBhbnRJZCkuc3Vic2NyaWJlKChyZXNJbmZvOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgICBjYWxsZXJJbmZvID0gcmVzSW5mbz8uYzJjSW5mb3JtYXRpb24gfHwge307XHJcbiAgICAgICAgLy8gICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oY2FsbGVySW5mbywgc25hcHNob3QpO1xyXG4gICAgICAgIC8vICAgICB9KVxyXG4gICAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oe30sIHNuYXBzaG90KTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0Zyb21JbWFnZSA9ICcnO1xyXG4gICAgICAgIC8vIGlmKHNuYXBzaG90LmRhdGEuZGF0YT8uZnJvbUltYWdlKXtcclxuICAgICAgICAvLyAgIHRoaXMuaW5jb21pbmdGcm9tSW1hZ2UgPSBzbmFwc2hvdC5kYXRhLmRhdGE/LmZyb21JbWFnZVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfSBlbHNlIGlmIChzbmFwc2hvdD8uZGF0YT8uY29udGVudCA9PSBcIk1pc3NlZCBDYWxsXCIgfHwgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyA9PSBcInJlamVjdGVkXCIgfHwgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyA9PSBcImFjY2VwdGVkXCIpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoKGNhbGw6IGFueSkgPT4gY2FsbD8ucGFydGljaXBhbnRJZCAhPSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgJiYgY2FsbD8ucGFydGljaXBhbnRJZCAhPSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgdGhpcy5taXNzQ2FsbEluZm8gPSBzbmFwc2hvdDtcclxuICAgICAgICBsZXQgaW5jb21pbmdDYWxsSW5kZXggPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbmRJbmRleCgoY2FsbDogYW55KSA9PiAoY2FsbD8ucGFydGljaXBhbnRJZCA9PSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgfHwgY2FsbC5wYXJ0aWNpcGFudElkID09IHNuYXBzaG90Py5kYXRhPy5kYXRhPy5wYXJ0aWNpcGFudElkKSAmJiBjYWxsPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKTtcclxuICAgICAgICAgIGlmIChpbmNvbWluZ0NhbGxJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbmNvbWluZ0NhbGxJbmRleCcsIGluY29taW5nQ2FsbEluZGV4LCBzbmFwc2hvdCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3Quc3BsaWNlKGluY29taW5nQ2FsbEluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmNkay5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJzQwNycpO1xyXG4gICAgICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZih0aGlzLmNvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9PSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgfHwgdGhpcy5jb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPT0gc25hcHNob3Q/LmRhdGE/LmRhdGE/LnBhcnRpY2lwYW50SWQgJiYgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyAhPSBcImFjY2VwdGVkXCIpIHtcclxuICAgICAgICAgICAgLy8gc3dhbChcIkVycm9yXCIsICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndGVzdCcsIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QpO1xyXG4gICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgdGhpcy5pc0luY29taW5nQ2FsbG5vdGlmaWNhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJzU5MCcsIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBjYWxsRW5kSW5kZXggPSB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LmZpbmRJbmRleCgoY2FsbDogYW55KSA9PiBjYWxsPy5wYXJ0aWNpcGFudElkID09PSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgfHwgY2FsbD8ucGFydGljaXBhbnRJZCA9PT0gc25hcHNob3Q/LmRhdGE/LmRhdGE/LnBhcnRpY2lwYW50SWQpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3Quc3BsaWNlKGNhbGxFbmRJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coJ25vdGlmaWNhdGlvbkNhbGxMaXN0JywgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdCk7XHJcbiAgICAgIGxldCBwYXJlbnRDYWxsOiBzdHJpbmdbXSA9IFtdXHJcbiAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoKHJlczogYW55KSA9PiByZXMuZW5kVGltZSA+PSAobmV3IERhdGUoKS5nZXRUaW1lKCkpKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LmZvckVhY2goKGNhbGw6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGluZm8gPSBpdGVtLnBhcnRpY2lwYW50cy5maW5kKChyZXNJbmZvOiBhbnkpID0+IHJlc0luZm8/LmlkID09PSBjYWxsPy5wYXJ0aWNpcGFudElkICYmIGNhbGw/LmRpcmVjdGlvbiAhPT0gJ2luY29taW5nJylcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICBwYXJlbnRDYWxsLnB1c2goaW5mby5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYXJlbnRDYWxsPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdCA9IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+ICFwYXJlbnRDYWxsLmluY2x1ZGVzKGl0ZW0/LnBhcnRpY2lwYW50SWQpKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnLi4uLi4nLCB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0KVxyXG4gICAgICB9XHJcbiAgICAgIC8vIE1lcmdlIG5vdGlmaWNhdGlvbkNhbGxMaXN0IGludG8gaW5jb21pbmdDYWxsc0xpc3Qgd2l0aG91dCBkdXBsaWNhdGluZyBlbnRyaWVzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudC5cclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJ0aWNpcGFudElkcyA9IG5ldyBTZXQodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5tYXAoKGM6IGFueSkgPT4gYz8ucGFydGljaXBhbnRJZCkpO1xyXG4gICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmlsdGVyKChuOiBhbnkpID0+ICFleGlzdGluZ1BhcnRpY2lwYW50SWRzLmhhcyhuPy5wYXJ0aWNpcGFudElkKSk7XHJcbiAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gWy4uLnRoaXMuaW5jb21pbmdDYWxsc0xpc3QsIC4uLm5ld0l0ZW1zXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkay5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZGV2aWNlSWQnXSkge1xyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlSWQgPSBjaGFuZ2VzWydkZXZpY2VJZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5leHRTZXJ2aWNlLmdldElwSW5mbygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3VwZGF0ZWRUd2lsaW9Ub2tlbiddPy5jdXJyZW50VmFsdWUgJiYgdGhpcy51cGRhdGVkVHdpbGlvVG9rZW4pIHtcclxuICAgICAgaWYodGhpcy50d2lsaW9TZXJ2aWNlLmluY29taW5nQ2FsbFRva2VuICE9IHRoaXMudXBkYXRlZFR3aWxpb1Rva2VuKSB7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmluY29taW5nQ2FsbFRva2VuID0gdGhpcy51cGRhdGVkVHdpbGlvVG9rZW47XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnRva2VuSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pbml0aWFsaXplVHdpbGlvRGV2aWNlKHRoaXMuZGV2aWNlSWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZUlkJykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndXNlcklkJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLnVzZXJJZCkge1xyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkID0gdGhpcy51c2VySWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snY29udGFjdEluZm8nXT8uY3VycmVudFZhbHVlICYmIHRoaXMuY29udGFjdEluZm8pIHtcclxuICAgICAgbGV0IGNvbnRhY3QgPSB0aGlzLmNvbnRhY3RJbmZvO1xyXG4gICAgICB0aGlzLmlzVmFsaWRhdGlvbk1lc3NhZ2VTaG93ID0gdHJ1ZTtcclxuICAgICAgaWYgKGNvbnRhY3QubnVtYmVyICYmICF0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICBpZiAoY29udGFjdC5pc0RpYWxGcm9tSGlzdG9yeSkge1xyXG4gICAgICAgICAgLy9oYW5kbGUgZGlhbGluZyBmcm9tIGhpc3RvcnkgcGFnZVxyXG4gICAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcclxuICAgICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XHJcbiAgICAgICAgICAgIHRoaXMub3V0Z29pbmdDb250YWN0TmFtZSA9IGNvbnRhY3QubmFtZTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gY29udGFjdC5mcm9tO1xyXG4gICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycgfHwgY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XHJcbiAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIGlmIChjb250YWN0Lm51bWJlciAmJiB0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBpbmNvbWluZyBjYWxsc1xyXG4gICAgICAgIHRoaXMubmV3Q2FsbENvbmZlcmVuY2UgPSBjb250YWN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaXNEaWFscGFkSGlkZGVuJ10gJiYgIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q29udGFjdExpc3QoKTtcclxuICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaWFsSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIGlmICghdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pbmNvbWluZ0NhbGxEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzLnB1c2godGhpcy5pbmNvbWluZ0NhbGxEYXRhKTtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XHJcbiAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbih0aGlzLmluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XHJcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEYXRhLm9uKCdjYW5jZWwnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnNTIzJyk7XHJcbiAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnNTI2Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjYWxsQWN0aW9uJ10/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5jYWxsQWN0aW9uPy50eXBlID09ICdyZUpvaW4nKSB7XHJcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmdldElwSW5mbygpO1xyXG4gICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZih0aGlzLmNhbGxBY3Rpb24/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMoJ2FsbCcsIHRoaXMuY2FsbEFjdGlvbj8uY29uZmVyZW5jZUlkKS5zdWJzY3JpYmUoKHJlcykgPT4geyB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVnaXN0ZXJEcmFnRWxlbWVudCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGVsbW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RyYWdwYXJlbnQxJyk7XHJcbiAgICAgIGlmICghZWxtbnQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdEcmFnIGVsZW1lbnQgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcG9zMSA9IDAsIHBvczIgPSAwLCBwb3MzID0gMCwgcG9zNCA9IDA7XHJcblxyXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0Jykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XHJcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiBlbGVtZW50RHJhZyhtb3ZlRXZlbnQpO1xyXG4gICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGVsZW1lbnREcmFnID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XHJcbiAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7XHJcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcclxuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBlbG1udC5zdHlsZS50b3AgPSAoZWxtbnQub2Zmc2V0VG9wIC0gcG9zMikgKyAncHgnO1xyXG4gICAgICAgIGVsbW50LnN0eWxlLmxlZnQgPSAoZWxtbnQub2Zmc2V0TGVmdCAtIHBvczEpICsgJ3B4JztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciBoZWFkZXIgZWxlbWVudFxyXG4gICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbG1udC5pZCArICdoZWFkZXInKTtcclxuICAgICAgaWYgKGhlYWRlcikge1xyXG4gICAgICAgIGhlYWRlci5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oY2FsbGVySW5mbzogYW55LCBub3RpZmljYXRpb246IGFueSkge1xyXG4gICAgaWYoIW5vdGlmaWNhdGlvbj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBpbmNvbWluZ0NhbGw6IGFueSA9IHtcclxuICAgICAgY29uZmVyZW5jZUlkOiBub3RpZmljYXRpb24/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgIGlzSW5jb21pbmdDYWxsOiB0cnVlLFxyXG4gICAgICAvLyBDbGllbnQtb25seSBtYXJrZXI6IHRoaXMgZW50cnkgaXMgYSBwZW5kaW5nIGluY29taW5nLWNhbGwgbm90aWZpY2F0aW9uLCBOT1QgYW5cclxuICAgICAgLy8gYWN0aXZlIHNvY2tldCBjb25mZXJlbmNlLiBVc2VkIHRvIGRlZHVwZSBieSBwYXJ0aWNpcGFudElkIGluc3RlYWQgb2YgY29uZmVyZW5jZUlkLFxyXG4gICAgICAvLyBzbyBhIG5vdGlmaWNhdGlvbiBjYW4gY29leGlzdCB3aXRoIGFuIGFjdGl2ZSBjb25mZXJlbmNlIHRoYXQgc2hhcmVzIGl0cyBjb25mZXJlbmNlSWQuXHJcbiAgICAgIF9pc05vdGlmaWNhdGlvbjogdHJ1ZSxcclxuICAgICAgcGFydGljaXBhbnRJZDogbm90aWZpY2F0aW9uPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICBkaXJlY3Rpb246IFwiaW5jb21pbmctY2FsbFwiLFxyXG4gICAgICBwYXJ0aWNpcGFudHM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkaXJlY3Rpb246IFwiaW5jb21pbmctY2FsbFwiLCBidXNpbmVzc051bWJlcjogbm90aWZpY2F0aW9uLmMyY0J1c2luZXNzLCBpbWc6IG5vdGlmaWNhdGlvbi5mcm9tSW1hZ2UgfHwgbm90aWZpY2F0aW9uLmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJywgaXNJbmNvbWluZ0NhbGw6IHRydWUsIGlzSG9sZDogZmFsc2UsIGlzQ29uZmVyZW5jZTogZmFsc2UsIGlzQWNjZXB0Q2FsbDogZmFsc2UsIGRpYWw6IHRydWUsIHBob25lOiBub3RpZmljYXRpb24uZnJvbU51bWJlciwgdG86IG5vdGlmaWNhdGlvbi50b051bWJlcixcclxuICAgICAgICAgIGZyb206IG5vdGlmaWNhdGlvbi5mcm9tTnVtYmVyLCBmcm9tTmFtZTogbm90aWZpY2F0aW9uLmZyb21OYW1lLCBwYXJ0aWNpcGFudElkOiBub3RpZmljYXRpb24ucGFydGljaXBhbnRJZCwgbmFtZTogbm90aWZpY2F0aW9uLmZyb21OYW1lLCB0aW1lOiAnJywgaWQ6IG5vdGlmaWNhdGlvbi5wYXJ0aWNpcGFudElkLCBjb25mZXJlbmNlSWQ6IG5vdGlmaWNhdGlvbi5jb25mZXJlbmNlSWQsIGNsaWVudFNpZDogbm90aWZpY2F0aW9uLmNsaWVudFNpZCwgY2FsbFN0YXR1czogJ3JpbmdpbmcnXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgfVxyXG4gICAgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdCA9IGF3YWl0IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmlsdGVyKChyZXM6IGFueSkgPT4gcmVzPy5lbmRUaW1lID4gbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xyXG5cclxuICAgIGlmIChjYWxsZXJJbmZvKSB7XHJcbiAgICAgIGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudHNbMF1bJ2VtYWlsJ10gPSBjYWxsZXJJbmZvLmVtYWlsO1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWyduYW1lJ10gPSBjYWxsZXJJbmZvLm5hbWU7XHJcbiAgICAgIGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudHNbMF1bJ2ltYWdlJ10gPSBjYWxsZXJJbmZvLmltYWdlO1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWydleHRlbnNpb24nXSA9IGNhbGxlckluZm8uZXh0ZW5zaW9uO1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWyd1c2VySW5mb0lkJ10gPSBjYWxsZXJJbmZvLmlkO1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWydtZXNzYWdlJ10gPSBjYWxsZXJJbmZvLm1lc3NhZ2U7XHJcbiAgICAgIGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudHNbMF1bJ25vdGUnXSA9IGNhbGxlckluZm8ubm90ZTtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsnbnVtYmVyJ10gPSBjYWxsZXJJbmZvLm51bWJlcjtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsncG9pbnROYW1lJ10gPSBjYWxsZXJJbmZvLnBvaW50TmFtZTtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsnc29mdHBob25lVHdpbGlvQXV0aElkJ10gPSBjYWxsZXJJbmZvLnNvZnRwaG9uZVR3aWxpb0F1dGhJZDtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsnc291cmNlTmFtZSddID0gY2FsbGVySW5mby5zb3VyY2VOYW1lO1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWydzdWJqZWN0J10gPSBjYWxsZXJJbmZvLnN1YmplY3Q7XHJcbiAgICB9XHJcbiAgICBpbmNvbWluZ0NhbGxbJ2VuZFRpbWUnXSA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDQ1ICogMTAwMCk7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LnB1c2goaW5jb21pbmdDYWxsKTtcclxuICAgIC8vIE9ubHkgYWRkIHRoaXMgc3BlY2lmaWMgY2FsbCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LCBwcmV2ZW50aW5nIGR1cGxpY2F0ZXMgd2hlblxyXG4gICAgLy8gbXVsdGlwbGUgY2FsbHMgYXJyaXZlIHNpbXVsdGFuZW91c2x5IGFuZCBub3RpZmljYXRpb25DYWxsTGlzdCBoYXMgcHJpb3IgZW50cmllcy5cclxuICAgIGNvbnN0IGFscmVhZHlJbkxpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnNvbWUoKGM6IGFueSkgPT4gYz8ucGFydGljaXBhbnRJZCA9PT0gaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50SWQpO1xyXG4gICAgaWYgKCFhbHJlYWR5SW5MaXN0KSB7XHJcbiAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBbLi4udGhpcy5pbmNvbWluZ0NhbGxzTGlzdCwgaW5jb21pbmdDYWxsXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdGFydCB0aGUgcmluZyBmb3IgdGhpcyBpbmNvbWluZyBjYWxsICh1bmxlc3MgdGhlIHVzZXIgaGFzIG11dGVkIGluY29taW5nIGNhbGxzKS5cclxuXHJcbiAgICB0aGlzLmNkay5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAobm90aWZpY2F0aW9uPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZE51bWJlcihudW06IGFueSkge1xyXG4gICAgaWYgKG51bSA9PSAnIycgfHwgbnVtID09ICcqJyB8fCBudW0gPT0gJysnIHx8IE51bWJlci5pc0ludGVnZXIobnVtKSkge1xyXG4gICAgICBpZiAobnVtID09ICcjJykge1xyXG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1oYXNoLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAobnVtID09ICcqJykge1xyXG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1zdGFyLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLSR7bnVtfS0ubXAzYCkucGxheSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRpYWxlZE51bWJlciArPSBudW07XHJcbiAgICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5udW1iZXJEaWFsZWQuZW1pdCh0aGlzLmRpYWxlZE51bWJlcik7XHJcblxyXG4gICAgICB0aGlzLm9uRGlhbElucHV0Q2hhbmdlKHRoaXMuZGlhbGVkTnVtYmVyKVxyXG4gICAgfSBlbHNlIGlmIChudW0gPT09ICd2b2ljZW1haWwnKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZXh0ZW5zaW9uL3ZvaWNlbWFpbC8nICsgdGhpcy50b2tlbl0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZURpYWxwYWQoKSB7XHJcbiAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IHRydWU7XHJcbiAgICB0aGlzLmNsb3NlRGlhbHBhZEV2ZW50LmVtaXQoKTtcclxuICAgIHRoaXMuY2xlYXJBbGxEaWFsZWQoKTtcclxuICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdCA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25EaWFsSW5wdXRDaGFuZ2UoaW5wdXRWYWw6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVXBkYXRlZCByZWdleCB0byBpbmNsdWRlIHgsIFgsIGV4dC4sIEV4dC4sIGFuZCAsXHJcbiAgICAgIGNvbnN0IGlzTnVtZXJpY0lucHV0ID0gL15bXFxkXFxzK1xcLV0rJC8udGVzdChpbnB1dFZhbCk7XHJcbiAgICAgIGxldCBtYWluTnVtYmVyID0gaW5wdXRWYWw7XHJcbiAgICAgIFxyXG4gICAgICBcclxuICAgICAgLy8gQ2hlY2sgZm9yIGV4dGVuc2lvbiBpbmRpY2F0b3JzIGFuZCBzcGxpdCB0aGUgaW5wdXRcclxuICAgICAgY29uc3QgZXh0TWF0Y2ggPSBpbnB1dFZhbC5tYXRjaCgvKHh8WHxleHRcXC58RXh0XFwufCwpKC4qKS8pO1xyXG4gICAgICBpZiAoZXh0TWF0Y2gpIHtcclxuICAgICAgICBtYWluTnVtYmVyID0gaW5wdXRWYWwuc3Vic3RyaW5nKDAsIGV4dE1hdGNoLmluZGV4KS50cmltKCk7XHJcbiAgICAgICAgdGhpcy5jYWxsRGF0YS5leHROdW0gPSBleHRNYXRjaFsyXS50cmltKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBpc051bWVyaWNJbnB1dCA/IG1haW5OdW1iZXIucmVwbGFjZSgvW1xcc1xcLV0rL2csICcnKSA6IG1haW5OdW1iZXI7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gaXNOdW1lcmljSW5wdXQgPyB0aGlzLnNhbml0aXplZE51bSA6ICcnO1xyXG4gICAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gaW5wdXRWYWwubGVuZ3RoID4gMDtcclxuICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gZW1pdCBjdXJyZW50IG51bWJlciB3aGVuZXZlciBpbnB1dCBjaGFuZ2VzXHJcbiAgICAgICAgdGhpcy5udW1iZXJEaWFsZWQuZW1pdCh0aGlzLmRpYWxlZE51bWJlcik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGlucHV0VmFsLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICB0aGlzLmlzVmFsaWRhdGlvbk1lc3NhZ2VTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5jb250YWN0TGlzdC5mb3JFYWNoKGNvbnRhY3QgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTnVtZXJpY0lucHV0KSB7XHJcbiAgICAgICAgICAgIGNvbnRhY3QubnVtYmVyc0xpc3QuZm9yRWFjaCgobnVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAobnVtLm51bWJlci5pbmNsdWRlcyh0aGlzLnNhbml0aXplZE51bSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdC5wdXNoKHsgLi4uY29udGFjdCwgc2VsZWN0ZWROdW1iZXI6IG51bSB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbE5hbWUgPSBgJHtjb250YWN0LmZpcnN0TmFtZX0gJHtjb250YWN0Lm1pZGRsZU5hbWV9ICR7Y29udGFjdC5sYXN0TmFtZX1gLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChmdWxsTmFtZS5pbmNsdWRlcyh0aGlzLnNhbml0aXplZE51bS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgIGNvbnRhY3QubnVtYmVyc0xpc3QuZm9yRWFjaCgobnVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdC5wdXNoKHsgLi4uY29udGFjdCwgc2VsZWN0ZWROdW1iZXI6IG51bSB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdCA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZpcnN0TGV0dGVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmFtZSA/IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgOiAnJztcclxuICB9XHJcbiAgY2xlYXJJbnB1dCgpIHtcclxuICAgIGlmICh0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gdGhpcy5kaWFsZWROdW1iZXIuc2xpY2UoMCwgLTEpO1xyXG4gICAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gdGhpcy5kaWFsZWROdW1iZXIubGVuZ3RoICE9PSAwO1xyXG5cclxuICAgICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcilcclxuICAgIH1cclxuICB9XHJcbiAgY2xlYXJBbGxEaWFsZWQoKSB7XHJcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9ICcnO1xyXG4gICAgdGhpcy5zYW5pdGl6ZWROdW0gPSAnJztcclxuICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSBmYWxzZTtcclxuICB9XHJcbiAgZ2V0Q2FsbGVySWRMaXN0KCkge1xyXG4gICAgdGhpcy5leHRTZXJ2aWNlLmRpc3BsYXlJRCh0aGlzLnRva2VuIHx8ICcnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY2FsbGVySWRMaXN0ID0gcmVzLmNhbGxlcklkTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS52b2ljZUZlYXR1cmUgPT09IHRydWUpO1xyXG4gICAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgICAgaWYgKHRoaXMuY2FsbGVySWRMaXN0Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gdGhpcy5jYWxsZXJJZExpc3RbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsbFByZWZlcmVuY2UgPT09ICdhbHdheXNBc2snIHx8IHRoaXMuY2FsbFByZWZlcmVuY2UgPT09ICdzbWFydERpYWxpbmcnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSB0aGlzLmNhbGxlcklkTGlzdC5maW5kKGl0ZW0gPT4gKGl0ZW0ubnVtYmVyID09IHRoaXMuY2FsbFByZWZlcmVuY2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRDb250YWN0TGlzdCgpIHtcclxuICAgIHRoaXMudHdpbGlvU2VydmljZS5nZXRDb250YWN0TGlzdCgpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwLnJlc3BvbnNlID09ICdTdWNjZXNzJykge1xyXG4gICAgICAgIHRoaXMuY29udGFjdExpc3QgPSByZXNwLnBob25lQm9vaztcclxuICAgICAgfVxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0RnVsbE5hbWUoY29udGFjdDogYW55KTogc3RyaW5nIHtcclxuICAgIGxldCBmdWxsTmFtZSA9IGNvbnRhY3QuZmlyc3ROYW1lIHx8ICcnO1xyXG4gICAgaWYgKGNvbnRhY3QubWlkZGxlTmFtZSkge1xyXG4gICAgICBmdWxsTmFtZSArPSBgICR7Y29udGFjdC5taWRkbGVOYW1lfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGFjdC5sYXN0TmFtZSkge1xyXG4gICAgICBmdWxsTmFtZSArPSBgICR7Y29udGFjdC5sYXN0TmFtZX1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bGxOYW1lLnRyaW0oKTtcclxuICB9XHJcblxyXG5cclxuICB0b2dnbGVDYWxsZXJJZERpdigpIHtcclxuICAgIHRoaXMuaXNDYWxsZXJJZEhpZGRlbiA9ICF0aGlzLmlzQ2FsbGVySWRIaWRkZW47XHJcbiAgfVxyXG4gIG91dGdvaW5nQ29udGFjdE5hbWU6c3RyaW5nID0gJyc7XHJcbiAgb25Db250YWN0U2VsZWN0KGNvbnRhY3Q6IGFueSkge1xyXG4gICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0LnNlbGVjdGVkTnVtYmVyLm51bWJlcjtcclxuICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IHRoaXMuZ2V0RnVsbE5hbWUoY29udGFjdCk7XHJcbiAgICB0aGlzLm91dGdvaW5nQ29udGFjdE5hbWUgPSB0aGlzLmNhbGxEYXRhLm5hbWU7XHJcbiAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xyXG4gICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcik7XHJcbiAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcclxuICAgIHRoaXMuaXNWYWxpZGF0aW9uTWVzc2FnZVNob3cgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZW5kQ2FsbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcclxuXHJcbiAgICAgIC8vIFJlc2V0IGNhbGwgZGF0YVxyXG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xyXG4gICAgICAgIHBob25lOiAnJyxcclxuICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgZGlhbDogZmFsc2UsXHJcbiAgICAgICAgZGlzcGxheU51bTogJycsXHJcbiAgICAgICAgZXh0TnVtOiAnJ1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gUmVzZXQgZGlhbGVkIG51bWJlclxyXG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9ICcnO1xyXG4gICAgICB0aGlzLnNhbml0aXplZE51bSA9ICcnO1xyXG4gICAgICBjb25zb2xlLmxvZygnNzk1Jyk7XHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5kZXZpY2UuZGlzY29ubmVjdEFsbCgpXHJcbiAgICAgIC8vIEVtaXQgZW5kIGNhbGwgZXZlbnRcclxuICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUncyBhbiBlcnJvciwgdHJ5IHRvIHJlc2V0IHRoZSBzdGF0ZVxyXG4gICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcclxuICAgICAgICBwaG9uZTogJycsXHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGRpYWw6IGZhbHNlLFxyXG4gICAgICAgIGRpc3BsYXlOdW06ICcnLFxyXG4gICAgICAgIGV4dE51bTogJydcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FuY2VscyBhbiBvdXRnb2luZyBjYWxsIHdoaWxlIGl0IGlzIHN0aWxsIGNvbm5lY3RpbmcgKHRoZSBcIkNvbm5lY3RpbmcuLi5cIiBsb2FkZXIgc2hvd25cclxuICAvLyBiZWZvcmUgdGhlIGNhbGwgaGFzIGpvaW5lZCB0aGUgY29uZmVyZW5jZSkuIGVuZENhbGwoKSBjYW4ndCBiZSByZXVzZWQgaGVyZSBiZWNhdXNlIGl0XHJcbiAgLy8gZGlzY29ubmVjdHMgdHdpbGlvU2VydmljZS5kZXZpY2UsIHdoaWNoIGhhbmRsZXMgaW5jb21pbmcgY2FsbHMsIG5vdCB0aGUgb3V0Z29pbmcgY2FsbFxyXG4gIC8vIGNyZWF0ZWQgYnkgY2FsbC1wcm9ncmVzcydzIG93biBkZXZpY2UvY2FsbCBpbnN0YW5jZS5cclxuICBjYW5jZWxDb25uZWN0aW5nQ2FsbCgpIHtcclxuICAgIC8vIERyaXZlIHRoZSBjaGlsZCB2aWEgYW4gQElucHV0IHJhdGhlciB0aGFuIEBWaWV3Q2hpbGQ6IHRoaXMgZGVsaXZlcnMgZXZlbiBpZlxyXG4gICAgLy8gbGliLWNhbGwtcHJvZ3Jlc3MgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQgYXQgY2xpY2sgdGltZSwgc2luY2UgQW5ndWxhciBhcHBsaWVzXHJcbiAgICAvLyB0aGUgYm91bmQgdmFsdWUgYXMgc29vbiBhcyB0aGUgY29tcG9uZW50IGRvZXMgbW91bnQuXHJcbiAgICB0aGlzLmNhbmNlbENvbm5lY3RpbmdBY3Rpb24gPSB7IHRzOiBEYXRlLm5vdygpIH07XHJcbiAgICB0aGlzLmlzTG9hZGVyc2hvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcclxuICAgIHRoaXMuY2FsbERhdGEgPSB7XHJcbiAgICAgIHBob25lOiAnJyxcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgIGRpYWw6IGZhbHNlLFxyXG4gICAgICBkaXNwbGF5TnVtOiAnJyxcclxuICAgICAgZXh0TnVtOiAnJ1xyXG4gICAgfTtcclxuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gJyc7XHJcbiAgICB0aGlzLnNhbml0aXplZE51bSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmRpYWxlZE51bWJlciAmJiB0aGlzLmxhc3REaWFsZWQpIHtcclxuICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMubGFzdERpYWxlZC5udW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XHJcbiAgICAgIGlmIChpc0ludmFsaWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zYXZlTGFzdERpYWxlZCgpO1xyXG4gICAgICB0aGlzLmlzU2F2ZWRDb250YWN0RGlhbGxlZCgpO1xyXG5cclxuICAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmlzUGF5bWVudER1ZSkge1xyXG4gICAgICAgIHN3YWwoJ1dhcm5pbmcnLCAnUGxlYXNlIG5vdGUgdGhhdCB5b3VyIHBheW1lbnQgaXMgZHVlLCBUbyBjb250aW51ZSBvbiB5b3VyIHNlcnZpY2VzIGtpbmRseSBzdWJzY3JpYmUgdG8gdXNlIHVuaW50ZXJydXB0ZWQgc2VydmljZXMuJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcclxuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XHJcbiAgICAgIGlmICghaGFzUGVybWlzc2lvbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaXNMb2FkZXJzaG93ID0gdHJ1ZTtcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpIHtcclxuICAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDMwMDApO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZXJzaG93ID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIE1vdW50IGxpYi1jYWxsLXByb2dyZXNzIG5vdyAobm90IGFmdGVyIGdldFRvTnVtYmVyJ3MgYXdhaXQpIHNvIGl0J3MgcmVhZHlcclxuICAgICAgLy8gdG8gcmVjZWl2ZSBjYWxsRGF0YS9jYW5jZWxDb25uZWN0aW5nQWN0aW9uIGFzIHNvb24gYXMgdGhlIENhbmNlbCBidXR0b24gYXBwZWFycy5cclxuICAgICAgLy8gUmVzZXQgZmlyc3Q6IGEgc3RhbGUgbm9uLW51bGwgdmFsdWUgaGVyZSB3b3VsZCBsb29rIGxpa2UgYSBmcmVzaCBjYW5jZWwgdG8gdGhlXHJcbiAgICAgIC8vIGZyZXNobHktbW91bnRlZCBjaGlsZCdzIG5nT25DaGFuZ2VzLCBzaW5jZSAqbmdJZiBkZXN0cm95cy9yZWNyZWF0ZXMgaXQgcGVyIGNhbGwuXHJcbiAgICAgIHRoaXMuY2FuY2VsQ29ubmVjdGluZ0FjdGlvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgIC8vIENsZWFyIGRpc3BsYXlOdW0gaWYgdmFsdWUgaXMgYm91bmQgZnJvbSBwcmV2aW91cyBjYWxsXHJcbiAgICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xyXG5cclxuICAgICAgLy8gR2V0IG51bWJlciB0byBiZSBkaWFsZWQgZnJvbSBiYWNrZW5kXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIodGhpcy5zYW5pdGl6ZWROdW0pO1xyXG4gICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XHJcbiAgICAgICAgdGhpcy50ZXJtaW5hdGVDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcGRhdGUgY2FsbCBkYXRhIGluIGEgc2luZ2xlIG9wZXJhdGlvblxyXG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xyXG4gICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXHJcbiAgICAgICAgcGhvbmU6IHRoaXMuc2FuaXRpemVkTnVtLFxyXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgIGZyb206IHRoaXMuaXNTbWFydERpYWxDYWxsID8gdGhpcy5jYWxsRGF0YS5mcm9tIDogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5nZXRVc2VyU2V0dGluZ3MoKTtcclxuICAgICAgdGhpcy5jYWxsSW5pdGlhdGVkLmVtaXQoeyAuLi50aGlzLmNhbGxEYXRhIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3IgaW4gaW5pdGlhdGVDYWxsOicsIGUpO1xyXG4gICAgICB0aGlzLmlzTG9hZGVyc2hvdyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ZhaWxlZCB0byBpbml0aWF0ZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xyXG4gICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaXNJbnZhbGlkTnVtYmVyKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHZhbGlkTnVtYmVyUGF0dGVybiA9IC9eWytcXGRcXHMoKS1dKiQvOyAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdmFsaWQgY2hhcmFjdGVyc1xyXG4gICAgICBjb25zdCBwaG9uZU51bWJlciA9IHRoaXMuc2FuaXRpemVkTnVtO1xyXG4gICAgICBpZiAoIXZhbGlkTnVtYmVyUGF0dGVybi50ZXN0KHBob25lTnVtYmVyKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLnNhbml0aXplZE51bS5sZW5ndGggPiAxNSl7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgcmV0dXJuIHRydWU7IC8vIFJldHVybiB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkLCBtZWFuaW5nIHRoZSBudW1iZXIgaXMgaW52YWxpZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUxhc3REaWFsZWQoKSB7XHJcbiAgICBjb25zdCBjb250YWN0ID0gdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LmZpbmQoKGM6IGFueSkgPT4gYy5udW1iZXJzTGlzdC5zb21lKChuOiBhbnkpID0+IG4ubnVtYmVyID09PSB0aGlzLmRpYWxlZE51bWJlcikpO1xyXG4gICAgaWYgKGNvbnRhY3QpIHtcclxuICAgICAgdGhpcy5sYXN0RGlhbGVkID0ge1xyXG4gICAgICAgIG5hbWU6IGNvbnRhY3QubmFtZSxcclxuICAgICAgICBpbWFnZTogY29udGFjdC5pbWFnZSxcclxuICAgICAgICBudW1iZXI6IHRoaXMuZGlhbGVkTnVtYmVyXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kaWFsZWROdW1iZXIpIHtcclxuICAgICAgICB0aGlzLmxhc3REaWFsZWQgPSB7IG51bWJlcjogdGhpcy5kaWFsZWROdW1iZXIgfTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcbiAgaXNTYXZlZENvbnRhY3REaWFsbGVkKCkge1xyXG4gICAgbGV0IHBob25lTnVtID0gdGhpcy5zYW5pdGl6ZWROdW0ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XHJcbiAgICBsZXQgY29udGFjdCA9IHRoaXMuY29udGFjdExpc3QuZmlsdGVyKChjb250YWN0OiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IHBob25lTnVtKVxyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhjb250YWN0KTtcclxuICAgIGlmIChjb250YWN0Lmxlbmd0aCkge1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gYCR7Y29udGFjdFswXS5maXJzdE5hbWV9ICR7Y29udGFjdFswXS5taWRkbGVOYW1lfSAke2NvbnRhY3RbMF0ubGFzdE5hbWV9YC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLmNvbnRhY3ROYW1lRm9yTG9hZGVyID0gdGhpcy5jYWxsRGF0YS5uYW1lO1xyXG4gICAgICB0aGlzLm91dGdvaW5nQ29udGFjdE5hbWUgPSB0aGlzLmNvbnRhY3ROYW1lRm9yTG9hZGVyO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0WzBdLmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcclxuICAgICAgdGhpcy5jb250YWN0SW1nRm9yTG9hZGVyID0gdGhpcy5jYWxsRGF0YS5pbWc7XHJcbiAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSB0aGlzLnNhbml0aXplZE51bTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5jb250YWN0TmFtZUZvckxvYWRlciA9ICcnO1xyXG4gICAgICAgdGhpcy5vdXRnb2luZ0NvbnRhY3ROYW1lID0gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHNob3dEaWFsQWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWxBbGVydCA9IHtcclxuICAgICAgbXNnOiBtZXNzYWdlLFxyXG4gICAgICBzaG93OiB0cnVlXHJcbiAgICB9O1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGlhbEFsZXJ0LnNob3cgPSBmYWxzZTtcclxuICAgIH0sIDMwMDApO1xyXG4gIH1cclxuICBhc3luYyBpc0NhbGxlcklkU2V0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdGtuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpO1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IHRoaXMuZXh0U2VydmljZS5mZXRjaENhbGxlcklkKHRrbiB8fCAnJykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0cmlhbE92ZXInLCByZXMudHJpYWxPdmVyKTtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNUcmlhbE92ZXIubmV4dChyZXMudHJpYWxPdmVyKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGF5bWVudER1ZScsIHJlcy5wYXltZW50RHVlKTtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNQYXltZW50RHVlLm5leHQocmVzLnBheW1lbnREdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXMuY2FsbGVyaWQpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FsbGVySUQnLCByZXMuY2FsbGVyaWQpO1xyXG4gICAgICAgIHRoaXMuZXh0U2VydmljZS5jaGFuZ2VNZXNzYWdlKHJlcy5jYWxsZXJpZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgJ05vdCBzZXQnKTtcclxuICAgICAgICB0aGlzLmV4dFNlcnZpY2UuY2hhbmdlTWVzc2FnZSgnTm90IHNldCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhbGxlcklEJykgIT09ICdOb3Qgc2V0Jyk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGNoZWNrTWljcm9waG9uZVBlcm1pc3Npb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pO1xyXG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5uYW1lID09PSAnTm90QWxsb3dlZEVycm9yJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pO1xyXG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVXNlciBkZW5pZWQgbWljcm9waG9uZSBwZXJtaXNzaW9uOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gYmVsb3cgZnVuY3Rpb24gaXMgdG8gZ2V0IHRoZSBjb3VudHJ5IGNvZGUgd2l0aCBudW1iZXIgZnJvbSBzZXJ2ZXIgXHJcbiAgYXN5bmMgZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyOiBzdHJpbmcpIHtcclxuICAgIGlmIChkaWFsZWROdW1iZXJbMF0gIT09ICcrJykge1xyXG4gICAgICAvLyB0aGlzIGlzIGNhc2Ugd2hlbiB1c2VyIGdlb2xvY2F0aW9uIGRpYWwgY29kZSBpcyBvblxyXG4gICAgICBsZXQgaXBBZGRyZXNzOiBhbnkgPSBhd2FpdCB0aGlzLmlwU2VydmljZS5nZXRJcEFkZHJlc3NJbmZvKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmdldFRvTnVtYmVyKGRpYWxlZE51bWJlciwgaXBBZGRyZXNzLmFkZHJlc3MuY291bnRyeUNvZGUpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLnRvYXN0VGltZW91dCA9IHJlcy50aW1lSW50ZXJ2YWwgKiAxMDAwO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2hvd051bWJlclRvYXN0KHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaXNBbGVydEVuYWJsZSgpIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNBbGVydEVuYWJsZScpO1xyXG4gIH1cclxuICBhc3luYyBzaG93TnVtYmVyVG9hc3QoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5zaG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0Lm51bWJlciA9IGRhdGEudG9OdW1iZXI7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5kaXNwbGF5TnVtID0gZGF0YS5kaXNwbGF5TnVtYmVyO1xyXG4gICAgdGhpcy5jYWxsRGF0YS5kaXNwbGF5TnVtID0gZGF0YS5kaXNwbGF5TnVtYmVyO1xyXG4gICAgYXdhaXQgdGhpcy5kZWxheSh0aGlzLnRvYXN0VGltZW91dCk7XHJcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9IGRhdGEudG9OdW1iZXI7XHJcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IGRhdGEudG9OdW1iZXI7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5zaG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5udW1iZXIgPSAnJztcclxuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW0gPSAnJztcclxuICB9XHJcbiAgZGVsYXkobXM6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG4gIH1cclxuICBpc01pbmltaXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9uTWluaW1pc2UoaXNNaW5pbWlzZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNNaW5pbWlzZWQgPSBpc01pbmltaXNlZDtcclxuICAgIHRoaXMubWluaW1pc2VFdmVudC5lbWl0KGlzTWluaW1pc2VkKTtcclxuICB9XHJcbiAgaGFuZGxlTnVtYmVyUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEgfHwgKHdpbmRvdyBhcyBhbnkpLmNsaXBib2FyZERhdGE7XHJcbiAgICBjb25zdCBwYXN0ZWREYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcblxyXG4gICAgLy8gTG9nIHRoZSBwYXN0ZWQgY29udGVudCB0byB0aGUgY29uc29sZVxyXG4gICAgaWYgKHBhc3RlZERhdGEpIHtcclxuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBwYXN0ZWREYXRhLnRyaW0oKTtcclxuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBwYXN0ZWREYXRhLnRyaW0oKTtcclxuXHJcbiAgICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0cnVlO1xyXG4gICAgICB0aGlzLm9uRGlhbElucHV0Q2hhbmdlKHRoaXMuZGlhbGVkTnVtYmVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTG9hZGVyc2hvdyhldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQgfHwgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkZXJzaG93ID0gZXZlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uRW50ZXIobnVtOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gdGhpcy5kaWFsZWROdW1iZXIgKyBudW07XHJcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMuZGlhbGVkTnVtYmVyO1xyXG4gICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IHRydWU7XHJcbiAgICB0aGlzLm51bWJlckRpYWxlZC5lbWl0KHRoaXMuZGlhbGVkTnVtYmVyKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJDYWxsU2V0dGluZygpIHtcclxuICAgIGNvbnN0IHRrbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcclxuICAgIHRoaXMuZXh0U2VydmljZS5mZXRjaENhbGxlcklkKHRrbiB8fCAnJykuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3Auc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuY2FsbFByZWZlcmVuY2UgPSByZXNwLmNhbGxlcmlkO1xyXG4gICAgICAgIHRoaXMuZ2V0Q2FsbGVySWRMaXN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIG9uRGVkaWNhdGVkTnVtU2VsZWN0KGlkOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IGlkO1xyXG4gICAgdGhpcy5pc0NhbGxlcklkSGlkZGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuZXh0U2VydmljZS5zZXRDYWxsZXJJZChpZCk7XHJcbiAgfVxyXG4gIGNhbmNlbERpYWxOdW1iZXIoKSB7XHJcbiAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRGl2S2V5ZG93bihldjogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kaWFsZWROdW1iZXIubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5kaWFsSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldi5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpYWxwYWQgaXMgb3BlblxyXG4gICAgICBpZiAoIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDIgJiYgdGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDYWxsZXJJZCkge1xyXG4gICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xyXG4gICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBvbkNhbGxCdG5Nb3VzZUVudGVyKGV2OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZENhbGxlcklkIHx8ICh0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycpIHx8ICh0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpKSB7XHJcbiAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgb25DYWxsQnRuTW91c2VMZWF2ZShldjogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDYWxsZXJJZCB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdhbHdheXNBc2snKSB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSkge1xyXG4gICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmRJbmNvbWluZ0NhbGwoaW5jb21pbmdDYWxsOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCcxMTAxJylcclxuICAgIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QgPSB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtPy5wYXJ0aWNpcGFudElkICE9PSBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRJZCk7XHJcbiAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbT8ucGFydGljaXBhbnRJZCAhPT0gaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50SWQpO1xyXG4gICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBhY2NlcHROZXdJbmNvbWluZ0NhbGwoY2FsbDogQ2FsbCkge1xyXG4gICAgLy9maXJzdCBjdXQgdGhlIGN1cnJlbnQgY2FsbFxyXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxEYXRhID0gY2FsbDtcclxuICB9XHJcbiAgcmVqZWN0TmV3SW5jb21pbmdDYWxsKGNhbGw6IENhbGwpIHtcclxuICAgIGNhbGwucmVqZWN0KCk7XHJcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMgPSB0aGlzLm5ld0luY29taW5nQ2FsbHMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XHJcbiAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzLkNhbGxTaWQgIT09IGNhbGwucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcclxuICB9XHJcbiAgbmV3SW5jb21pbmdDYWxsSW5pdGlhdGVkKCkge1xyXG4gICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgIHRoaXMubmV3SW5jb21pbmdDYWxscyA9IFtdO1xyXG4gICAgdGhpcy5pbmNvbWluZ0NhbGxJbml0aWF0ZWQuZW1pdCgpO1xyXG4gIH1cclxuICBpbmNvbWluZ0NhbGxzTmV3SW5mbyhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBkYXRhO1xyXG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mb0V2ZW50LmVtaXQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlclNldHRpbmdzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXR0aW5nSW5mbyA9IHJlcy51c2VyU2V0dGluZztcclxuICAgICAgICB0aGlzLmNkay5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXHJcbiAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTdG9wIHJpbmdpbmcgaWYgYW4gaW5jb21pbmcgY2FsbCB3YXMgcGVuZGluZyB3aGVuIHRoZSBjb21wb25lbnQgaXMgdG9ybiBkb3duIChlLmcuIGxvZ291dCkuXHJcbiAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IFtdO1xyXG5cclxuICAgICAgLy8gQ2xlYW4gdXAgVHdpbGlvIGRldmljZSB3aGVuIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcclxuICAgICAgaWYgKHRoaXMudHdpbGlvU2VydmljZVsnZGV2aWNlJ10pIHtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2VbJ2RldmljZSddLmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2VbJ2RldmljZSddLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZCh0cnVlKTtcclxuXHJcbiAgICAgIC8vIEVuZCBhbnkgYWN0aXZlIGNhbGxcclxuICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDbGVhciBhbnkgdGltZW91dHMgb3IgaW50ZXJ2YWxzIGlmIHRoZXkgZXhpc3RcclxuICAgICAgaWYgKHRoaXMudG9hc3RUaW1lb3V0KSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG9hc3RUaW1lb3V0KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGNvbXBvbmVudCBjbGVhbnVwOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cImRyYWdwYXJlbnQxXCIgW25nU3R5bGVdPVwieydkaXNwbGF5Jzppc0RpYWxwYWRIaWRkZW4gPyAnbm9uZSc6ICdibG9jayd9XCI+XHJcbiAgPGxpYi1jYWxsLXByb2dyZXNzICpuZ0lmPVwiaXNDYWxsSW5Qcm9ncmVzc1wiIChlbmRDYWxsRXZlbnQpPVwiZW5kQ2FsbCgpXCIgKG1pbmltaXNlRXZlbnQpPVwib25NaW5pbWlzZSgkZXZlbnQpXCJcclxuICAgIChpbmNvbWluZ0NhbGxJbml0aWF0ZWQpPVwibmV3SW5jb21pbmdDYWxsSW5pdGlhdGVkKClcIiBbbmV3SW5jb21pbmdDYWxsRGF0YV09XCJuZXdJbmNvbWluZ0NhbGxEYXRhXCJcclxuICAgIFtkZXZpY2VJZF09XCJkZXZpY2VJZFwiIFtuZXdJbmNvbWluZ0NhbGxzTGlzdF09XCJpbmNvbWluZ0NhbGxzTGlzdFwiIFttaXNzQ2FsbEluZm9dPVwibWlzc0NhbGxJbmZvXCJcclxuICAgIChpbmNvbWluZ0NhbGxzTmV3SW5mbyk9XCJpbmNvbWluZ0NhbGxzTmV3SW5mbygkZXZlbnQpXCIgW3NlbGVjdGVkQ2FsbGVySWRdPVwic2VsZWN0ZWRDYWxsZXJJZFwiXHJcbiAgICBbY2FsbGVySWRMaXN0XT1cImNhbGxlcklkTGlzdFwiIFtjYWxsQWN0aW9uXT1cImNhbGxBY3Rpb25cIiBbY29uZmVyZW5jZUNhbGxJbmZvXT1cImNvbmZlcmVuY2VDYWxsSW5mb1wiXHJcbiAgICBbbmV3Q2FsbENvbmZlcmVuY2VdPVwibmV3Q2FsbENvbmZlcmVuY2VcIiBbdXNlclNldHRpbmdJbmZvXT1cInVzZXJTZXR0aW5nSW5mb1wiXHJcbiAgICBbY2FuY2VsQ29ubmVjdGluZ0FjdGlvbl09XCJjYW5jZWxDb25uZWN0aW5nQWN0aW9uXCJcclxuICAgIFtvdXRnb2luZ0NvbnRhY3ROYW1lXT1cIm91dGdvaW5nQ29udGFjdE5hbWVcIlxyXG4gICAgW2luY29taW5nRnJvbUltYWdlXT1cImluY29taW5nRnJvbUltYWdlXCJcclxuICAgIChlbmRJbmNvbWluZ0NhbGxFdmVudCk9XCJlbmRJbmNvbWluZ0NhbGwoJGV2ZW50KVwiIChpc0xvYWRlcnNob3duKT1cIm9uTG9hZGVyc2hvdygkZXZlbnQpXCIgW2NhbGxEYXRhXT1cImNhbGxEYXRhXCI+XHJcbiAgPC9saWItY2FsbC1wcm9ncmVzcz5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibG9hZGVyLXdyYXBwZXIgb3V0Z29pbmctY2FsbC1sb2FkZXJcIiAqbmdJZj1cImlzTG9hZGVyc2hvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aXZlLWNhbGxcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IHBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb24gY2FsbC1hbmltYXRpb24tcGxheVwiPlxyXG4gICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiBbc3JjXT1cImNvbnRhY3RJbWdGb3JMb2FkZXJcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XHJcbiAgICAgICAgICA8aDEgc3R5bGU9XCJtYXJnaW4tdG9wOiA4cHg7XCI+Q29ubmVjdGluZy4uLjwvaDE+XHJcbiAgICAgICAgICA8cCBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiPnt7IGNvbnRhY3ROYW1lRm9yTG9hZGVyIHx8IGRpYWxlZE51bWJlciB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFjdGlvbi1idG5zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIGVuZC1jYWxsLWJ0blwiIChjbGljayk9XCJjYW5jZWxDb25uZWN0aW5nQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRpYWxwYWQtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydtaW5pLWRpYWxwYWQnOiBpc01pbmltaXNlZH1cIlxyXG4gICAgKm5nSWY9XCIoIWlzQ2FsbEluUHJvZ3Jlc3MgJiYgIWluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCkgJiYgIWlzTG9hZGVyc2hvd1wiIHRhYmluZGV4PVwiMFwiIChrZXlkb3duKT1cImhhbmRsZURpdktleWRvd24oJGV2ZW50KVwiPlxyXG4gICAgPGRpdiBpZD1cInRvcFBhbmVsXCIgW25nU3R5bGVdPVwieydoZWlnaHQnOiBjYWxsZXJJZExpc3QubGVuZ3RoID8gJzQwJScgOiAnMzklJ31cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxwYWQtYWxlcnRzXCIgKm5nSWY9XCJkaWFsQWxlcnQuc2hvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1zZWxlY3Rpb24tYWxlcnRcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7ZGlhbEFsZXJ0Lm1zZ319PC9wPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10aW1lc1wiIChjbGljayk9XCJzaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxwYWQtYWxlcnRzXCIgKm5nSWY9XCJjYWxsTnVtYmVyVG9hc3Quc2hvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsYm94LXBvcDEgYWxlcnQgZmFkZSBzaG93XCIgW25nQ2xhc3NdPVwiY2FsbE51bWJlclRvYXN0LnR5cGVcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG15LWF1dG8gdGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgWW91J3IgY2FsbGluZyA8c3Ryb25nPnt7Y2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW19fTwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1kaXNjIHAtMCBweC0xXCIgKGNsaWNrKT1cImNhbmNlbERpYWxOdW1iZXIoKVwiPkNhbmNlbCBDYWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxOHB4XCIgKHBhc3RlKT1cImhhbmRsZU51bWJlclBhc3RlKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTJcIj5cclxuICAgICAgICAgIDxwPjwvcD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBkaWFsLWNsb3NlLWJ0blwiIChjbGljayk9XCJoaWRlRGlhbHBhZCgpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiI2ZmZmZmZlwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiICNkaWFsSW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBhIG5hbWUgb3IgbnVtYmVyXCIgdGFiaW5kZXg9XCIxXCIgWyhuZ01vZGVsKV09XCJkaWFsZWROdW1iZXJcIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRpYWxJbnB1dENoYW5nZSgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCIgaWQ9XCJpbnB1dC1jbGVhci1idG5cIiAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCIgKm5nSWY9XCJzaG93SW5wdXRDbGVhckJ0blwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNTBweFwiIGhlaWdodD1cIjMwcHhcIiB2aWV3Qm94PVwiMCAxMCA0MCA2MFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZlcnNpb249XCIxLjFcIiBiYXNlUHJvZmlsZT1cImZ1bGxcIlxyXG4gICAgICAgICAgICAgIGVuYWJsZS1iYWNrZ3JvdW5kPVwibmV3IDAgMCA3Ni4wMCA3Ni4wMFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiM1ZDYwNjFcIiBmaWxsLW9wYWNpdHk9XCIxXCIgc3Ryb2tlLXdpZHRoPVwiMC4yXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgZD1cIk0gNDcuNTI4Miw0Mi45NDk3TCA0Mi41Nzg0LDM4TCA0Ny41MjgyLDMzLjA1MDJMIDQ0Ljk0OTcsMzAuNDcxOEwgNDAsMzUuNDIxNkwgMzUuMDUwMiwzMC40NzE4TCAzMi40NzE4LDMzLjA1MDJMIDM3LjQyMTYsMzhMIDMyLjQ3MTgsNDIuOTQ5N0wgMzUuMDUwMiw0NS41MjgyTCA0MCw0MC41Nzg0TCA0NC45NDk3LDQ1LjUyODJMIDQ3LjUyODIsNDIuOTQ5NyBaIE0gMTguMDE0Nyw0MS41MzU1TCAyNi45NjQ2LDUwLjQ4NTRDIDI4LjA2ODMsNTEuNTg5IDI5LDUyIDMxLDUyTCA1Miw1MkMgNTQuNzYxNCw1MiA1Nyw0OS43NjE0IDU3LDQ3TCA1NywyOUMgNTcsMjYuMjM4NiA1NC43NjE0LDI0IDUyLDI0TCAzMSwyNEMgMjksMjQgMjguMDY4MywyNC40MTEzIDI2Ljk2NDYsMjUuNTE0OUwgMTguMDE0NywzNC40NjQ1QyAxNi4wNjIxLDM2LjQxNzEgMTYuMDYyMSwzOS41ODI5IDE4LjAxNDcsNDEuNTM1NSBaIE0gMzEsNDlDIDMwLDQ5IDI5LjYwNDgsNDguODgyOCAyOS4wODYsNDguMzY0MUwgMjAuMTM2MSwzOS40MTQyQyAxOS4zNTUsMzguNjMzMiAxOS4zNTUsMzcuMzY2OSAyMC4xMzYxLDM2LjU4NThMIDI5LjA4NiwyNy42MzYyQyAyOS42MDQ4LDI3LjExNzUgMzAsMjcgMzEsMjcuMDAwMUwgNTIsMjcuMDAwMUMgNTMuMTA0NiwyNy4wMDAxIDU0LDI3Ljg5NTUgNTQsMjkuMDAwMUwgNTQsNDcuMDAwMUMgNTQsNDguMTA0NiA1My4xMDQ2LDQ5LjAwMDEgNTIsNDkuMDAwMUwgMzEsNDkgWiBcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtaW5mby1pY29uXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdG9vbHRpcENsYXNzPVwiaW5wdXQtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJGb3IgZXh0ZW5zaW9uIGRpYWxpbmcsIHVzZSBmb3JtYXRzIGxpa2UgKzEyMzQ1Njc4OTEwIHgxMjMsKzEyMzQ1Njc4OTEwIGV4dC4xMjMsICsxMjM0NTY3ODkxMCwxMjNcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJndWlkZVwiICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aCAmJiAhKGRpYWxlZE51bWJlci5sZW5ndGggPiAyKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJndWlkZXRleHRcIj5QbGVhc2UgZW50ZXIgYSBudW1iZXIgb3Igc2VsZWN0IGEgc2F2ZWQgY29udGFjdDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMTlweDsgb3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1jYXJkXCIgKm5nRm9yPVwibGV0IGNvbnRhY3Qgb2YgZmlsdGVyZWRDb250YWN0TGlzdFwiIChjbGljayk9XCJvbkNvbnRhY3RTZWxlY3QoY29udGFjdClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW1nXCI+XHJcbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbnRhY3QuaW1hZ2VcIiBhbHQ9XCJ1c2VyIGltYWdlXCIgbG9hZGluZz1cImxhenlcIiAqbmdJZj1cImNvbnRhY3QuaW1hZ2UgZWxzZSBhbHBoYU5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWxwaGFOYW1lPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250YWN0LWFscGhhLWltZ1wiPnt7Z2V0Rmlyc3RMZXR0ZXIoY29udGFjdC5maXJzdE5hbWUpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWRldGFpbHNcIj5cclxuICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDRweFwiIGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tnZXRGdWxsTmFtZShjb250YWN0KSB9fTwvcD5cclxuICAgICAgICAgICAgICA8cD57e2NvbnRhY3Quc2VsZWN0ZWROdW1iZXIubnVtYmVyfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1jYXJkXCIgKm5nSWY9XCIhZmlsdGVyZWRDb250YWN0TGlzdC5sZW5ndGggJiYgZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDIgJiYgIWlzVmFsaWRhdGlvbk1lc3NhZ2VTaG93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jb250YWN0LW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICBObyBDb250YWN0cyBGb3VuZFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndhdmUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cIndhdmVzXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAyNCAxNTAgMjhcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiIHNoYXBlLXJlbmRlcmluZz1cImF1dG9cIj5cclxuICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICA8cGF0aCBpZD1cImdlbnRsZS13YXZlXCIgZD1cIk0tMTYwIDQ0YzMwIDAgNTgtMTggODgtMThzIDU4IDE4IDg4IDE4IDU4LTE4IDg4LTE4IDU4IDE4IDg4IDE4IHY0NGgtMzUyelwiIC8+XHJcbiAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XHJcbiAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIwXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiIC8+XHJcbiAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIzXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiIC8+XHJcbiAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCI3XCIgZmlsbD1cIiNmZmZcIiAvPlxyXG4gICAgICAgICAgPC9nPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXJcIiAqbmdJZj1cIiFpc01pbmltaXNlZFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGlhbC1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbDtsZXQgaSA9IGluZGV4XCIgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcihrZXkubnVtKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzoga2V5LnRleHQgPT09ICcrJyA/ICczcHgnIDogJzAnfVwiIFt0YWJpbmRleF09XCJkaWFsZWROdW1iZXIubGVuZ3RoID8gJzAnOiBpKzJcIiBsb25nUHJlc3NcclxuICAgICAgICAobG9uZ1ByZXNzKT1cImFkZE51bWJlcihrZXkudGV4dClcIiBzaG9ydFByZXNzIChzaG9ydFByZXNzKT1cImFkZE51bWJlcihrZXkubnVtKVwiPlxyXG4gICAgICAgIHt7a2V5Lm51bX19XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJrZXkubnVtID09IDE7ZWxzZSBvdGhlclRoYW5PbmVcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdm9pY2VtYWlsXCI+XHJcbiAgICAgICAgICB2b2ljZW1haWxcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlclRoYW5PbmU+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1hbGJoYWJldHNcIiBbbmdDbGFzc109XCJ7J3BsdXNTaWduJzoga2V5LnRleHQgPT09ICcrJ31cIj57e2tleS50ZXh0ID8ga2V5LnRleHQgOlxyXG4gICAgICAgICAgICAnJm5ic3A7J319PC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1idG4tY29udGFpbmVyXCIgKm5nSWY9XCIhaXNNaW5pbWlzZWRcIiAobW91c2VlbnRlcik9XCJvbkNhbGxCdG5Nb3VzZUVudGVyKCRldmVudClcIlxyXG4gICAgICAobW91c2VsZWF2ZSk9XCJvbkNhbGxCdG5Nb3VzZUxlYXZlKCRldmVudClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYnRuXCIgKGNsaWNrKT1cImluaXRpYXRlQ2FsbCgpXCIgW3RhYmluZGV4XT1cImRpYWxlZE51bWJlci5sZW5ndGggPyAnMic6ICcxNSdcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsncG9pbnRlci1ldmVudHMnOiBkaWFsZWROdW1iZXIubGVuZ3RoICYmIHNlbGVjdGVkQ2FsbGVySWQgPyAnYXV0bycgOiAnbm9uZScsICdvcGFjaXR5JzogZGlhbGVkTnVtYmVyLmxlbmd0aCAmJiBzZWxlY3RlZENhbGxlcklkID8gJzEnIDogJzAuNSd9XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgc3R5bGU9XCJjb2xvcjogd2hpdGVcIj5cclxuICAgICAgICAgIGNhbGxcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aCAmJiAhaXNNaW5pbWlzZWRcIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaG93bkNhbGxlcklkXCIgKm5nSWY9XCJzZWxlY3RlZENhbGxlcklkOyBlbHNlIGFza0Jsb2NrXCIgKGNsaWNrKT1cInRvZ2dsZUNhbGxlcklkRGl2KClcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiJ2ZpIGZpLScgKyBzZWxlY3RlZENhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAge3tzZWxlY3RlZENhbGxlcklkPy5udW1iZXJ9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNhc2tCbG9jaz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hvd25DYWxsZXJJZFwiIChjbGljayk9XCJ0b2dnbGVDYWxsZXJJZERpdigpXCIgW25nQ2xhc3NdPVwieyAndGlsdC1zaGFraW5nJzogc2hha2VEZWRpY2F0ZWRCdG4gfVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTBcIj5TZWxlY3QgQzJDIG51bWJlcjwvaDU+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtYW5nbGUtZG93biBtbC0yIHRleHQtYmx1ZVwiIHN0eWxlPVwibWFyZ2luLXRvcDoycHhcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImd1aWRlMlwiICpuZ0lmPVwic2hha2VEZWRpY2F0ZWRCdG5cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImd1aWRldGV4dFwiPlBsZWFzZSBzZWxlY3QgYSBudW1iZXIgZnJvbSBiZWxvdyBkcm9wZG93bjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aDsgZWxzZSBub0NhbGxlcklkTWVzc2FnZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyLWlkLWxpc3QtY29udGFpbmVyXCIgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoICYmICFpc01pbmltaXNlZFwiIGlkPVwiY2FsbGVySWRDb250YWluZXJcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsndmlzaWJsZSc6ICFpc0NhbGxlcklkSGlkZGVufVwiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cIj5cclxuICAgICAgICAgIDwhLS0gPGg0PlNlbGVjdCBDMkMgU29mdHBob25lIE51bWJlcjwvaDQ+IC0tPlxyXG4gICAgICAgICAgPGg0Pk1ha2Ugb3V0Z29pbmcgY2FsbCB1c2luZzwvaDQ+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIChjbGljayk9XCJpc0NhbGxlcklkSGlkZGVuID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICBjbG9zZVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGxlcklkIG9mIGNhbGxlcklkTGlzdFwiPlxyXG4gICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydzZWxlY3RlZENhbGxlcklkQ2xhc3MnOiBjYWxsZXJJZD8ubnVtYmVyID09IHNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcn1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkRlZGljYXRlZE51bVNlbGVjdChjYWxsZXJJZClcIj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiJ2ZpIGZpLScgKyBjYWxsZXJJZD8uaXNvQ29kZT8udG9Mb3dlckNhc2UoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIHt7Y2FsbGVySWQ/Lm51bWJlcn19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tjYWxsZXJJZD8uY291bnRyeU5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vQ2FsbGVySWRNZXNzYWdlPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm5vLWNhbGxlci1pZC1tZXNzYWdlXCI+VG8gbWFrZSBhbnkgdm9pY2UgY2FsbHMsIHBsZWFzZSA8YVxyXG4gICAgICAgICAgcm91dGVyTGluaz1cIi9leHRlbnNpb24vZGVkaWNhdGVkbnVtYmVyL3t7dG9rZW59fVwiIGNsYXNzPVwiY2xpY2staGVyZS1saW5rXCJcclxuICAgICAgICAgIHRpdGxlPVwiU2V0dGluZ3MgPiBDMkMgTnVtYmVyXCI+c3Vic2NyaWJlPC9hPiB0byBhIHZvaWNlIGNhcGFibGUgQzJDIE51bWJlci5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJkZWRpY2F0ZWQtb3ZlcmxheVwiICpuZ0lmPVwic2hvd0RlZGljYXRlZFBvcHVwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGRlZGljYXRlZE51bVBvcHVwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGNob29zZURlZGljYXRlZEhlYWRlclwiPlxyXG4gICAgICAgICAgPGg1PkNob29zZSBDMkMgTnVtYmVyPC9oNT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBkaWFsLWNsb3NlLWJ0blwiIChjbGljayk9XCJzaG93RGVkaWNhdGVkUG9wdXAgPSBmYWxzZVwiPmNsb3NlPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZGVkaWNhdGVkTnVtTGlzdFwiPlxyXG4gICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYWxsZXJJZCBvZiBjYWxsZXJJZExpc3RcIj5cclxuICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydzZWxlY3RlZENhbGxlcklkQ2xhc3MnOiBjYWxsZXJJZD8ubnVtYmVyID09IHNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcn1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWRpY2F0ZWRQb3B1cCA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIGNhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e2NhbGxlcklkPy5udW1iZXJ9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2NhbGxlcklkPy5jb3VudHJ5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
1366
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRW5NLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUcvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7Ozs7Ozs7Ozs7OztBQVluQyxNQUFNLE9BQU8sZ0JBQWdCO0lBaUIzQixJQUFhLGVBQWUsQ0FBQyxLQUFjO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFNRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQWlFRCwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDhDQUE4QztJQUM5QyxnREFBZ0Q7SUFDaEQseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixzRkFBc0Y7SUFFdEYscUZBQXFGO0lBQ3JGLHFFQUFxRTtJQUNyRSw4QkFBOEI7SUFDOUIsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6QyxNQUFNO0lBQ04sSUFBSTtJQUVKLHNDQUFzQztJQUN0QyxrQ0FBa0M7SUFDbEMsY0FBYztJQUNkLE1BQU07SUFDTixXQUFX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QUFZO3NCQUFyQixNQUFNO2dCQWdIUCxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBcUIvQyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUd2lsaW9TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcclxuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsga2V5cGFkIH0gZnJvbSAnLi4va2V5cGFkJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pcC1hZGRyZXNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pbmNvbWVpbmctY2FsbC1zb2NrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWRpYWxib3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsYm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsYm94LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuICBwcml2YXRlIF9pc0RpYWxwYWRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8vIExldCB0aGUgbGlicmFyeSBkZWNpZGUgdG8gYXV0by1vcGVuIG9uIGluY29taW5nIGNhbGwgd2l0aG91dCBob3N0IHdpcmluZ1xyXG4gIEBJbnB1dCgpIGF1dG9PcGVuT25JbmNvbWluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY29udGFjdEluZm86IGFueTtcclxuICBASW5wdXQoKSBkZXZpY2VJZDogYW55O1xyXG4gIEBJbnB1dCgpIHVzZXJJZDogYW55O1xyXG4gIEBJbnB1dCgpIGNhbGxBY3Rpb246IGFueTtcclxuICBpc0xvYWRlcnNob3cgPSBmYWxzZTtcclxuICBpc0luY29taW5nQ2FsbG5vdGlmaWNhdGlvbjogYW55ID0gZmFsc2U7XHJcbiAgbm90aWZpY2F0aW9uQ2FsbExpc3Q6IGFueSA9IFtdO1xyXG4gIGRldmljZU51bWJlckxpc3Q6IGFueVtdID0gW107XHJcbiAgbWlzc0NhbGxJbmZvOiBhbnkgPSB7fTtcclxuICBjb25uZWN0aW5nSW5jb21pbmdDYWxsSWQ6IHN0cmluZyA9ICcnO1xyXG4gIG5ld0NhbGxDb25mZXJlbmNlOiBhbnk7XHJcbiAgdXNlclNldHRpbmdJbmZvOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBpc0RpYWxwYWRIaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzRGlhbHBhZEhpZGRlbiA9IHZhbHVlO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAvLyBXaGVuIGRpYWxwYWQgYmVjb21lcyB2aXNpYmxlLCBlbnN1cmUgVHdpbGlvIGlzIGluaXRpYWxpemVkXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVR3aWxpbygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBASW5wdXQoKSBpbmNvbWluZ0NhbGxEYXRhOiBhbnlcclxuICBASW5wdXQoKSBpbmNvbWluZ0NhbGxub3RpZmljYXRpb246IGFueTtcclxuICBASW5wdXQoKSB1cGRhdGVkVHdpbGlvVG9rZW46IHN0cmluZyA9ICcnO1xyXG4gIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55ID0ge307XHJcbiAgaXNWYWxpZGF0aW9uTWVzc2FnZVNob3cgPSBmYWxzZVxyXG4gIGdldCBpc0RpYWxwYWRIaWRkZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNEaWFscGFkSGlkZGVuO1xyXG4gIH1cclxuICBAT3V0cHV0KCkgY2xvc2VEaWFscGFkRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgY2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZW5kQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG1pbmltaXNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsc05ld0luZm9FdmVudDogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBjb25mZXJlbmNlQ2FsbExpc3Q6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAVmlld0NoaWxkKCdkaWFsSW5wdXQnKSBkaWFsSW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcclxuICBAT3V0cHV0KCkgbnVtYmVyRGlhbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgLy8gTmV3IG9iamVjdCByZWZlcmVuY2UgZWFjaCB0aW1lIENhbmNlbCBpcyBjbGlja2VkLCBzbyBsaWItY2FsbC1wcm9ncmVzcydzIG5nT25DaGFuZ2VzXHJcbiAgLy8gZmlyZXMgZXZlbiBpZiB0aGUgY29tcG9uZW50IHdhc24ndCBtb3VudGVkIHlldCBhdCBjbGljayB0aW1lLlxyXG4gIGNhbmNlbENvbm5lY3RpbmdBY3Rpb246IGFueSA9IG51bGw7XHJcblxyXG4gIGlzQ2FsbEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBrZXlwYWRWYWwgPSBrZXlwYWQ7XHJcbiAgc2hvd0lucHV0Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaWFsZWROdW1iZXI6IHN0cmluZyA9ICcnO1xyXG4gIGNvbnRhY3RMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkQ29udGFjdExpc3Q6IGFueVtdID0gW107XHJcbiAgY2FsbGVySWRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ2FsbGVySWQ6IGFueTtcclxuICBpc0NhbGxlcklkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1RyaWFsUGVyaW9kT3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUGF5bWVudER1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcclxuICB0b2FzdFRpbWVvdXQgPSA3MDAwO1xyXG4gIGNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgIHNob3c6IGZhbHNlLFxyXG4gICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxyXG4gICAgbnVtYmVyOiAnJyxcclxuICAgIGRpc3BsYXlOdW06ICcnXHJcbiAgfVxyXG4gIGNhbGxEYXRhOiBhbnkgPSB7XHJcbiAgICBwaG9uZTogJycsXHJcbiAgICBkaXNwbGF5TnVtOiAnJyxcclxuICAgIGRpYWw6IGZhbHNlLFxyXG4gICAgbmFtZTogJycsXHJcbiAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgIGV4dE51bTogJydcclxuICB9O1xyXG4gIGxhc3REaWFsZWQ6IHsgbmFtZT86IHN0cmluZzsgaW1hZ2U/OiBzdHJpbmc7IG51bWJlcjogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcclxuICBzYW5pdGl6ZWROdW06IGFueTtcclxuICBkaWFsQWxlcnQgPSB7XHJcbiAgICBtc2c6ICcnLFxyXG4gICAgc2hvdzogZmFsc2VcclxuICB9XHJcbiAgdG9rZW4/OiBzdHJpbmc7XHJcbiAgc2hvd0RlZGljYXRlZFBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbmV3SW5jb21pbmdDYWxsczogYW55ID0gW107XHJcbiAgaW5jb21pbmdDYWxsc0xpc3Q6IGFueSA9IFtdO1xyXG4gIG5ld0luY29taW5nQ2FsbERhdGE/OiBDYWxsO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIGNhbGxQcmVmZXJlbmNlOiBhbnk7XHJcbiAgc2hha2VEZWRpY2F0ZWRCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1NtYXJ0RGlhbENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAvLyBTZXQgb25jZSB0aGUgdXNlciBjb25maXJtcyBhbiBpbnRlbnRpb25hbCByZWxvYWQgdmlhIG91ciBjdXN0b20gbW9kYWwsXHJcbiAgLy8gc28gdGhlIG5hdGl2ZSBiZWZvcmV1bmxvYWQgcHJvbXB0IGlzIG5vdCBzaG93biBvbiB0b3Agb2YgaXQuXHJcbiAgcHJpdmF0ZSBpc1JlbG9hZENvbmZpcm1lZCA9IGZhbHNlO1xyXG4gIG51bGxQYXJ0aWNpcGFudENhbGxMaXN0OiBhbnkgPVtdXHJcbiAgY29udGFjdE5hbWVGb3JMb2FkZXIgPSAnJztcclxuICBjb250YWN0SW1nRm9yTG9hZGVyID0gJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xyXG4gIGluY29taW5nRnJvbUltYWdlID0gJyc7XHJcbiAgLy8gSW50ZXJjZXB0IHRoZSBrZXlib2FyZCByZWZyZXNoIHNob3J0Y3V0cyAoRjUsIEN0cmwrUiAvIENtZCtSKSBzbyB3ZSBjYW5cclxuICAvLyBzaG93IE9VUiBjdXN0b20td29yZGVkIGNvbmZpcm1hdGlvbiBpbnN0ZWFkIG9mIHRoZSBicm93c2VyJ3MgZ2VuZXJpYyBvbmUuXHJcbiAgLy8gQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIC8vIGhhbmRsZVJlZnJlc2hTaG9ydGN1dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gIC8vICAgY29uc3QgaXNSZWZyZXNoS2V5ID1cclxuICAvLyAgICAgZXZlbnQua2V5ID09PSAnRjUnIHx8XHJcbiAgLy8gICAgICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAoZXZlbnQua2V5ID09PSAncicgfHwgZXZlbnQua2V5ID09PSAnUicpKTtcclxuXHJcbiAgLy8gICBpZiAoaXNSZWZyZXNoS2V5ICYmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgfHwgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSkge1xyXG4gIC8vICAgICAvLyBTdG9wIHRoZSBicm93c2VyJ3MgZGVmYXVsdCByZWZyZXNoIHNvIG91ciBtb2RhbCBjYW4gZGVjaWRlLlxyXG4gIC8vICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIC8vICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWU7XHJcbiAgLy8gICAgIC8vIHRoaXMuY29uZmlybVJlbG9hZER1cmluZ0NhbGwoKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIHByaXZhdGUgY29uZmlybVJlbG9hZER1cmluZ0NhbGwoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5pc1JlbG9hZENvbmZpcm1lZCkge1xyXG4gIC8vICAgICByZXR1cm47XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzd2FsKHtcclxuICAvLyAgICAgdGl0bGU6ICdSZWxvYWQgcGFnZT8nLFxyXG4gIC8vICAgICB0ZXh0OiAnUmVsb2FkaW5nIHRoaXMgcGFnZSB3aWxsIGRpc2Nvbm5lY3QgeW91ciBhY3RpdmUgY2FsbC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlPycsXHJcbiAgLy8gICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAvLyAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAvLyAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdSZWxvYWQnLFxyXG4gIC8vICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcclxuICAvLyAgICAgLy8gVGFnIG9ubHkgVEhJUyBtb2RhbCdzIGNvbnRhaW5lciBzbyB0aGUgei1pbmRleCBvdmVycmlkZSBhcHBsaWVzIHRvIHRoZVxyXG4gIC8vICAgICAvLyByZWxvYWQgd2FybmluZyBhbG9uZSwgbm90IHRvIG90aGVyIHN3YWwgZXJyb3Ivd2FybmluZyBhbGVydHMuXHJcbiAgLy8gICAgIG9uQmVmb3JlT3BlbjogKG1vZGFsRWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAvLyAgICAgICBtb2RhbEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ3N3YWwtcmVsb2FkLW9uLXRvcCcpO1xyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgfSlcclxuICAvLyAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gIC8vICAgICAgIGlmICghcmVzdWx0LnZhbHVlKSB7XHJcbiAgLy8gICAgICAgICAvLyBDYW5jZWwgLyBkaXNtaXNzIC0+IHN0YXkgb24gdGhlIHBhZ2UsIGtlZXAgdGhlIGNhbGwgYWN0aXZlLlxyXG4gIC8vICAgICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICAvLyBSZWxvYWQgY29uZmlybWVkOiB0ZWFyIGRvd24gdGhlIGNhbGwsIHRoZW4gcmVsb2FkLiBUaGUgZmxhZyBwcmV2ZW50c1xyXG4gIC8vICAgICAgIC8vIHRoZSBuYXRpdmUgYmVmb3JldW5sb2FkIGRpYWxvZyBmcm9tIGFwcGVhcmluZyBvbiB0b3Agb2YgdGhpcy5cclxuICAvLyAgICAgICB0aGlzLmlzUmVsb2FkQ29uZmlybWVkID0gdHJ1ZTtcclxuICAvLyAgICAgICBjb25zdCBjb25mZXJlbmNlSWQgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5bMF0/LmNvbmZlcmVuY2VJZDtcclxuICAvLyAgICAgICBpZiAoY29uZmVyZW5jZUlkKSB7XHJcbiAgLy8gICAgICAgICB0cnkge1xyXG4gIC8vICAgICAgICAgICBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2VcclxuICAvLyAgICAgICAgICAgICAuZ2V0UmVtb3ZlUGFydGljaXBhbnRzKCdhbGwnLCBjb25mZXJlbmNlSWQpXHJcbiAgLy8gICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIC8vICAgICAgICAgfSBjYXRjaCB7XHJcbiAgLy8gICAgICAgICAgIC8vIFByb2NlZWQgd2l0aCByZWxvYWQgZXZlbiBpZiBjbGVhbnVwIGZhaWxzLlxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXHJcbiAgYmVmb3JlVW5sb2FkSGFuZGxlcigkZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gQWxyZWFkeSBjb25maXJtZWQgdmlhIG91ciBjdXN0b20gbW9kYWwgLT4gcmVsb2FkIHNpbGVudGx5LlxyXG4gICAgaWYgKHRoaXMuaXNSZWxvYWRDb25maXJtZWQpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIC8vIEZhbGxiYWNrIGZvciB0aGUgYnJvd3NlcidzIHJlZnJlc2ggYnV0dG9uIC8gdGFiIGNsb3NlLCB3aGljaCBjYW5ub3QgYmVcclxuICAgIC8vIGludGVyY2VwdGVkIHdpdGggYSBjdXN0b20gbW9kYWwuIFRyaWdnZXJzIHRoZSBuYXRpdmUgY29uZmlybWF0aW9uIHNvIHRoZVxyXG4gICAgLy8gdXNlciBkb2VzIG5vdCBsb3NlIHRoZSBjYWxsIGFjY2lkZW50YWxseS4gKEJyb3dzZXIgY29udHJvbHMgdGhlIHdvcmRpbmcuKVxyXG4gICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyB8fCB0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuXHJcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbk1lc3NhZ2UgPSAnUmVsb2FkaW5nIHRoaXMgcGFnZSB3aWxsIGRpc2Nvbm5lY3QgeW91ciBhY3RpdmUgY2FsbC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlPyc7XHJcbiAgICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSBjb25maXJtYXRpb25NZXNzYWdlIDtcclxuICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmZpcm1hdGlvbk1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnVubG9hZCcpXHJcbiAgdW5sb2FkSGFuZGxlcigpIHtcclxuICAgIC8vIFNraXAgaWYgd2UgYWxyZWFkeSByZW1vdmVkIHBhcnRpY2lwYW50cyBpbiB0aGUgY3VzdG9tLW1vZGFsIGZsb3cuXHJcbiAgICBpZiAodGhpcy5pc1JlbG9hZENvbmZpcm1lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdHdpbGlvU2VydmljZTogVHdpbGlvU2VydmljZSxcclxuICAgIHByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZGs6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2U6IEluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBpZiBkaWFscGFkIGlzIHZpc2libGUgYnkgZGVmYXVsdFxyXG4gICAgaWYgKCF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuY3JlYXRlQXVkaW9CYXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVUd2lsaW8oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIHx8ICcnO1xyXG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdXRoZW50aWNhdGlvbiB0b2tlbiBmb3VuZCcpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBUd2lsaW8gc2VydmljZVxyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaW5pdGlhbGl6ZVR3aWxpb0RldmljZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGV2aWNlSWQnKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIEVuc3VyZSBUd2lsaW8gaXMgaW5pdGlhbGl6ZWQgZXZlbiB3aGVuIGRpYWxwYWQgc3RhcnRzIGhpZGRlbixcclxuICAgIC8vIHNvIHdlIGNhbiBhdXRvLW9wZW4gb24gaW5jb21pbmcgY2FsbHMuXHJcbiAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcclxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuY29ubmVjdCh0aGlzLmRldmljZUlkKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UubGlzdGVuKCkuc3Vic2NyaWJlKGFzeW5jIChpbmNvbWluZ0NhbGxEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvID0gaW5jb21pbmdDYWxsRGF0YTtcclxuICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5lbWl0KGluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XHJcbiAgICAgICAgaWYgKHRoaXMudG9rZW4gPT0gJ2xvZ291dCcpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvdW5kJyk7XHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlPy5kaXNjb25uZWN0QWxsKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZpbHRlciBvdXQgY29uZmVyZW5jZXMgd2l0aCBubyBwYXJ0aWNpcGFudHNcclxuICAgICAgICBpbmNvbWluZ0NhbGxEYXRhID0gaW5jb21pbmdDYWxsRGF0YT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyBpbmNvbWluZ0NhbGxEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcnRpY2lwYW50cz8ubGVuZ3RoID4gMClcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgLy8gQWxsIGNvbmZlcmVuY2VJZHMgcmVjZWl2ZWQgZnJvbSBzb2NrZXQgdGhpcyB0aWNrXHJcbiAgICAgICAgY29uc3Qgc29ja2V0Q29uZmVyZW5jZUlkczogc3RyaW5nW10gPSBpbmNvbWluZ0NhbGxEYXRhLm1hcCgoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCk7XHJcblxyXG4gICAgICAgIGluY29taW5nQ2FsbERhdGEuZm9yRWFjaCgoY2FsbEluZm86IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgV0UgYXJlIGFuIGFjdGl2ZSBwYXJ0aWNpcGFudCBpbiB0aGlzIGNvbmZlcmVuY2VcclxuICAgICAgICAgIGNvbnN0IG91ck51bWJlciA9IGNhbGxJbmZvPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHJlc0RhdGE/LmNsaWVudCkgfHxcclxuICAgICAgICAgICAgICAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHJlc0RhdGE/LmNsaWVudClcclxuICAgICAgICAgICAgKSAmJiAhcmVzRGF0YT8uaXNMZWZ0KTtcclxuXHJcbiAgICAgICAgICAvLyBNYXRjaCB0aGUgQUNUSVZFIGNvbmZlcmVuY2UgZW50cnkgb25seSDigJQgbmV2ZXIgYSBwZW5kaW5nIGluY29taW5nLWNhbGxcclxuICAgICAgICAgIC8vIG5vdGlmaWNhdGlvbiwgd2hpY2ggY2FuIHNoYXJlIHRoaXMgY29uZmVyZW5jZUlkIGJ1dCBtdXN0IG5vdCBiZSBvdmVyd3JpdHRlblxyXG4gICAgICAgICAgLy8gd2l0aCBzb2NrZXQgZGF0YSAoaXQgaXMga2V5ZWQvbWFuYWdlZCBzZXBhcmF0ZWx5IGJ5IHBhcnRpY2lwYW50SWQpLlxyXG4gICAgICAgICAgY29uc3QgY2FsbEluZGV4ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maW5kSW5kZXgoKHJlczogYW55KSA9PiByZXMuY29uZmVyZW5jZUlkID09IGNhbGxJbmZvLmNvbmZlcmVuY2VJZCAmJiAhcmVzPy5faXNOb3RpZmljYXRpb24pO1xyXG5cclxuICAgICAgICAgIGlmIChvdXJOdW1iZXI/LmlkKSB7XHJcbiAgICAgICAgICAgIC8vIFdlIGFyZSBpbiB0aGlzIGNhbGwg4oCUIHVwZGF0ZSBleGlzdGluZyBvciBhZGQgbmV3XHJcbiAgICAgICAgICAgIGlmIChjYWxsSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3RbY2FsbEluZGV4XSA9IHsgLi4udGhpcy5pbmNvbWluZ0NhbGxzTGlzdFtjYWxsSW5kZXhdLCAuLi5jYWxsSW5mbyB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaCh7IC4uLmNhbGxJbmZvIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBXZSBhcmUgTk9UIGEgcGFydGljaXBhbnQg4oCUIHJlbW92ZSBmcm9tIGluY29taW5nQ2FsbHNMaXN0IG9ubHkgaWYgaXQgaXMgTk9UIGFuIGluY29taW5nLWNhbGwgbm90aWZpY2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChjYWxsSW5kZXggPiAtMSAmJiB0aGlzLmluY29taW5nQ2FsbHNMaXN0W2NhbGxJbmRleF0/LmRpcmVjdGlvbiAhPT0gJ2luY29taW5nLWNhbGwnKSB7XHJcbiAgICAgICAgICAgICAgLy8gRklYOiBzcGxpY2UoaW5kZXgsIGRlbGV0ZUNvdW50KSDigJQgd2FzIGluY29ycmVjdGx5IHNwbGljZSgxLCBjYWxsSW5kZXgpXHJcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5zcGxpY2UoY2FsbEluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIFJlbW92ZSBhY3RpdmUtY2FsbCBlbnRyaWVzIHdob3NlIGNvbmZlcmVuY2VJZCBpcyBubyBsb25nZXIgaW4gdGhlIHNvY2tldFxyXG4gICAgICAgIC8vIGJ1dCBrZWVwIGluY29taW5nLWNhbGwgbm90aWZpY2F0aW9ucyAodGhleSBhcmUgbWFuYWdlZCBieSBub3RpZmljYXRpb25DYWxsTGlzdCBleHBpcnkpXHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChyZXM6IGFueSkgPT5cclxuICAgICAgICAgIHNvY2tldENvbmZlcmVuY2VJZHMuaW5jbHVkZXMocmVzLmNvbmZlcmVuY2VJZCkgfHwgcmVzLmNhbGxEaXJlY3Rpb24gPT09ICdpbmNvbWluZy1jYWxsJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGV4cGlyZWQgbm90aWZpY2F0aW9uIGVudHJpZXNcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHJlcy5lbmRUaW1lID49IG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBNZXJnZSBub3RpZmljYXRpb25DYWxsTGlzdCBPTkNFIChub3QgaW5zaWRlIGZvckVhY2gpLiBBIHBlbmRpbmcgaW5jb21pbmctY2FsbFxyXG4gICAgICAgIC8vIG5vdGlmaWNhdGlvbiBpcyBpZGVudGlmaWVkIGJ5IGl0cyBPV04gcGFydGljaXBhbnRJZCDigJQgbmV2ZXIgYnkgY29uZmVyZW5jZUlkIOKAlFxyXG4gICAgICAgIC8vIGJlY2F1c2UgaXQgY2FuIGxlZ2l0aW1hdGVseSBzaGFyZSB0aGUgY29uZmVyZW5jZUlkIG9mIGEgY29uZmVyZW5jZSB3ZSBhcmUgYWxyZWFkeVxyXG4gICAgICAgIC8vIGluIChlLmcuIHdoZW4gYSBzZWNvbmQgb25lIG9mIG91ciBudW1iZXJzIGlzIGludml0ZWQgaW50byB0aGF0IHNhbWUgY29uZmVyZW5jZSkuXHJcbiAgICAgICAgLy8gT25seSBza2lwIGEgbm90aWZpY2F0aW9uIGlmIGFuIGlkZW50aWNhbCBvbmUgKHNhbWUgcGFydGljaXBhbnRJZCkgaXMgYWxyZWFkeSBwcmVzZW50LlxyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTm90aWZpY2F0aW9uUGFydGljaXBhbnRJZHMgPSBuZXcgU2V0KFxyXG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdFxyXG4gICAgICAgICAgICAuZmlsdGVyKChyOiBhbnkpID0+IHI/Ll9pc05vdGlmaWNhdGlvbilcclxuICAgICAgICAgICAgLm1hcCgocjogYW55KSA9PiByPy5wYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uc1RvQWRkID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAobjogYW55KSA9PiAhZXhpc3RpbmdOb3RpZmljYXRpb25QYXJ0aWNpcGFudElkcy5oYXMobj8ucGFydGljaXBhbnRJZClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBbLi4udGhpcy5pbmNvbWluZ0NhbGxzTGlzdCwgLi4ubm90aWZpY2F0aW9uc1RvQWRkXTtcclxuICAgICAgICAvLyBGaW5hbCBkZWR1cGxpY2F0aW9uLiBBY3RpdmUgY29uZmVyZW5jZSBlbnRyaWVzIGFyZSBrZXllZCBieSBjb25mZXJlbmNlSWQgKHNvY2tldCBkYXRhXHJcbiAgICAgICAgLy8gd2lucyDigJQgbGFzdCB3cml0ZSB3aW5zKS4gUGVuZGluZyBpbmNvbWluZy1jYWxsIG5vdGlmaWNhdGlvbnMgYXJlIGtleWVkIGluIGEgU0VQQVJBVEVcclxuICAgICAgICAvLyBuYW1lc3BhY2UgYnkgcGFydGljaXBhbnRJZCwgc28gYSBub3RpZmljYXRpb24gYW5kIGFuIGFjdGl2ZSBjb25mZXJlbmNlIHRoYXQgc2hhcmUgdGhlXHJcbiAgICAgICAgLy8gc2FtZSBjb25mZXJlbmNlSWQgQk9USCBzdXJ2aXZlICh0aGUgc2Vjb25kLW51bWJlciBzY2VuYXJpbykgaW5zdGVhZCBvZiByZXBsYWNpbmcgZWFjaCBvdGhlci5cclxuICAgICAgICBjb25zdCBzZWVuID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCkge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gaXRlbT8uX2lzTm90aWZpY2F0aW9uXHJcbiAgICAgICAgICAgID8gYG5vdGlmOiR7aXRlbT8ucGFydGljaXBhbnRJZH1gXHJcbiAgICAgICAgICAgIDogYGNvbmY6JHtpdGVtPy5jb25mZXJlbmNlSWR9YDtcclxuICAgICAgICAgIHNlZW4uc2V0KGtleSwgaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmaW5hbExpc3QgPSBBcnJheS5mcm9tKHNlZW4udmFsdWVzKCkpO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgYW55IG5vdGlmaWNhdGlvbiBlbnRyeSBpZiBhbiBhY3RpdmUgY29uZmVyZW5jZSB3aXRoIHRoZSBzYW1lIGNvbmZlcmVuY2VJZCBhbHJlYWR5IGV4aXN0c1xyXG4gICAgICAgIC8vIGFkZGVkIGZvciA3NDcyIGJ1Z1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNvbmZlcmVuY2VJZHMgPSBuZXcgU2V0KFxyXG4gICAgICAgICAgZmluYWxMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiAhaXRlbS5faXNOb3RpZmljYXRpb24pLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmNvbmZlcmVuY2VJZClcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbmFsTGlzdCA9IGZpbmFsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoaXRlbTogYW55KSA9PiAhKGl0ZW0uX2lzTm90aWZpY2F0aW9uICYmIGFjdGl2ZUNvbmZlcmVuY2VJZHMuaGFzKGl0ZW0uY29uZmVyZW5jZUlkKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBmaW5hbExpc3Q7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggJiYgaW5jb21pbmdDYWxsRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHRoaXMuaXNMb2FkZXJzaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkay5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGhhc1BlbmRpbmdOb3RpZmljYXRpb25zID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5zb21lKFxyXG4gICAgICAgICAgICAocmVzOiBhbnkpID0+IHJlcz8uX2lzTm90aWZpY2F0aW9uIHx8IHJlcz8uY2FsbERpcmVjdGlvbiA9PT0gJ2luY29taW5nLWNhbGwnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgaGFzQWNjZXB0ZWRDYWxscyA9IHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0Py5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICAgIGlmICgoaGFzQWNjZXB0ZWRDYWxscyB8fCBoYXNQZW5kaW5nTm90aWZpY2F0aW9ucykgJiYgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNJbmNvbWluZ0NhbGxub3RpZmljYXRpb24pIHtcclxuICAgICAgICAgICAgLy8gR2VudWluZWx5IGlkbGU6IG5vIGFuc3dlcmVkIGNhbGxzIGFuZCBubyByaW5naW5nIG5vdGlmaWNhdGlvbnMg4oaSIGZ1bGwgcmVzZXQuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlPy5kaXNjb25uZWN0QWxsKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuaW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZighdGhpcy5pbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlPy5kaXNjb25uZWN0QWxsKCk7XHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zcGFyZURldmljZT8uZGlzY29ubmVjdEFsbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB8fCAnJztcclxuICAgICAgdGhpcy5nZXRDb250YWN0TGlzdCgpO1xyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaXNMb2FkZXJzaG93LnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGVyc2hvdyA9IHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgLy8gRklYOiAuZmlsdGVyKCkgcmV0dXJucyBhIG5ldyBhcnJheSDigJQgbXVzdCBhc3NpZ24gYmFjayB0byBhY3R1YWxseSBtdXRhdGUgdGhlIGxpc3RzXHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0FjY2VwdElJbmNvbWluZ0NhbGwuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGByZXNgIGlzIGVpdGhlciBhIHBsYWluIGNvbmZlcmVuY2VJZCAobGVnYWN5KSBvciB7IGNvbmZlcmVuY2VJZCwgcGFydGljaXBhbnRJZCB9LlxyXG4gICAgICAgIGNvbnN0IGFjY2VwdGVkQ29uZmVyZW5jZUlkID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyByZXMgOiByZXM/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICBjb25zdCBhY2NlcHRlZFBhcnRpY2lwYW50SWQgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IG51bGwgOiByZXM/LnBhcnRpY2lwYW50SWQ7XHJcblxyXG4gICAgICAgIGlmIChhY2NlcHRlZFBhcnRpY2lwYW50SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdCA9IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAoY2FsbDogYW55KSA9PiBjYWxsPy5wYXJ0aWNpcGFudElkICE9IGFjY2VwdGVkUGFydGljaXBhbnRJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgKGNhbGw6IGFueSkgPT5cclxuICAgICAgICAgICAgICAhKChjYWxsPy5wYXJ0aWNpcGFudElkID09IGFjY2VwdGVkUGFydGljaXBhbnRJZCB8fCBjYWxsPy5pZCA9PSBhY2NlcHRlZFBhcnRpY2lwYW50SWQpICYmXHJcbiAgICAgICAgICAgICAgICBjYWxsPy5jYWxsRGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIExlZ2FjeSBmYWxsYmFjazogcmVtb3ZlIGJ5IGNvbmZlcmVuY2VJZC5cclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QgPSB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LmZpbHRlcigoY2FsbDogYW55KSA9PiBjYWxsPy5jb25mZXJlbmNlSWQgIT0gYWNjZXB0ZWRDb25mZXJlbmNlSWQpO1xyXG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAoY2FsbDogYW55KSA9PiBjYWxsPy5jb25mZXJlbmNlSWQgIT0gYWNjZXB0ZWRDb25mZXJlbmNlSWQgfHwgY2FsbD8uY2FsbERpcmVjdGlvbiAhPSAnaW5jb21pbmctY2FsbCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcclxuICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkLnN1YnNjcmliZSgoY2FsbElkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBjYWxsSWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBzdWIxID0gdGhpcy50d2lsaW9TZXJ2aWNlLmRpYWxOdW1iZXJGcm9tT3RoZXJNb2R1bGUuc3Vic2NyaWJlKChjb250YWN0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY29udGFjdC5udW1iZXIpIHtcclxuICAgICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoY29udGFjdC5pc0RpYWxGcm9tSGlzdG9yeSkge1xyXG4gICAgICAgICAgICAvL2hhbmRsZSBkaWFsaW5nIGZyb20gaGlzdG9yeSBwYWdlXHJcbiAgICAgICAgICAgIGlmIChjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSB7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcclxuICAgICAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcclxuICAgICAgICAgICAgICB0aGlzLm91dGdvaW5nQ29udGFjdE5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gY29udGFjdC5mcm9tO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXHJcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnMjgyJywgY29udGFjdClcclxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjb250YWN0LmNhbGxlcklkID09ICdhbHdheXNBc2snIHx8IGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gY29udGFjdC5uYW1lO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XHJcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIGhhbmRsZSBpbmNvbWluZyBjYWxsIChtYW5hZ2VkIGludGVybmFsbHk7IGhvc3QgbmVlZCBub3QgcGFzcyBpbmNvbWluZ0NhbGxEYXRhKVxyXG4gICAgICBjb25zdCBzdWIyID0gdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsLnN1YnNjcmliZSgoaW5jb21pbmdDYWxsRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGluY29taW5nQ2FsbERhdGEpIHtcclxuICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYXV0b09wZW5PbkluY29taW5nICYmIHRoaXMuX2lzRGlhbHBhZEhpZGRlbikge1xyXG4gICAgICAgICAgICB0aGlzLl9pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc0NhbGxJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluY29taW5nQ2FsbERhdGFbJ2lzRmlyc3RDYWxsJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzdWIzID0gdGhpcy50d2lsaW9TZXJ2aWNlLmluY29taW5nQ2FsbE5vdGlmaWNhdGlvbi5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maW5kSW5kZXgoKHJlc0luZm86IGFueSk9PiByZXNJbmZvPy5jb25mZXJlbmNlSWQgPT0gbm90aWZpY2F0aW9uPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgICBpZihpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBjYWxsZXJJbmZvOiBhbnk7XHJcbiAgICAgICAgICBsZXQgbnVtYmVyTGlzdCA9IHRoaXMuY2FsbGVySWRMaXN0Lm1hcCgocmVzKSA9PiByZXMubnVtYmVyKVxyXG4gICAgICAgICAgICBpZiAoIW51bWJlckxpc3QuaW5jbHVkZXMobm90aWZpY2F0aW9uPy5mcm9tTnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24/LmMyY0J1c2luZXNzICE9ICdmYWxzZScgJiYgbm90aWZpY2F0aW9uPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKG5vdGlmaWNhdGlvbj8ucGFydGljaXBhbnRJZCkuc3Vic2NyaWJlKChyZXNJbmZvOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY2FsbGVySW5mbyA9IHJlc0luZm8/LmMyY0luZm9ybWF0aW9uIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbE5vdGlmaWNhdGlvbihjYWxsZXJJbmZvLCBub3RpZmljYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oe30sIG5vdGlmaWNhdGlvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaW5jb21pbmdGcm9tSW1hZ2UgPSAnJztcclxuICAgICAgICAgICAgaWYobm90aWZpY2F0aW9uPy5mcm9tSW1hZ2Upe1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdGcm9tSW1hZ2UgPSBub3RpZmljYXRpb24/LmZyb21JbWFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIxKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIyKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIzKTtcclxuICAgICAgdGhpcy5nZXRVc2VyU2V0dGluZ3MoKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhOiBhbnkpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5mcm9tRW50cmllcyhBcnJheS5mcm9tKGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5lbnRyaWVzKCkpKTtcclxuICAgIGlmKGRhdGFbJ3R3aWxpb0F1dGhJZCddKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oZGF0YVsndHdpbGlvQXV0aElkJ10pLnN1YnNjcmliZShcclxuICAgICAgICByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICBpbmNvbWluZ0NhbGxEYXRhWyd1c2VySW5mbyddID0gcmVzcG9uc2VcclxuICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcm9tRW50cmllcyhlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5yZWdpc3RlckRyYWdFbGVtZW50KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1snaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbiAmJiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbj8uZGF0YT8uY29udGVudCAhPSBcIlZvaWNlbWFpbFwiKSB7XHJcbiAgICAgIC8vIENhcHR1cmUgc25hcHNob3QgaW1tZWRpYXRlbHkgc28gYXN5bmMgY2FsbGJhY2tzIGFsd2F5cyB1c2UgdGhpcyBjYWxsJ3MgZGF0YSxcclxuICAgICAgLy8gbm90IHdoYXRldmVyIHRoaXMuaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uIHBvaW50cyB0byB3aGVuIHRoZXkgZXZlbnR1YWxseSBydW4uXHJcbiAgICAgIGNvbnNvbGUubG9nKCdub3RpZmljYXRpb25mcm9tQkUnLCB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbik7XHJcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb247XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmluZEluZGV4KChyZXNJbmZvOiBhbnkpPT4gcmVzSW5mbz8uY29uZmVyZW5jZUlkID09IHNuYXBzaG90Py5kYXRhPy5kYXRhPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgIC8vIGluY29taW5nIGNhbGwgZGV0YWlsIGZyb20gbm90aWZhY3Rpb25cclxuICAgICAgaWYgKGluZGV4ID09IC0xICYmIHNuYXBzaG90Py5kYXRhPy5jb250ZW50ID09IFwiSW5jb21pbmdDYWxsXCIgJiYgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyAhPSBcInJlamVjdGVkXCIgJiYgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyAhPSBcImFjY2VwdGVkXCIpIHtcclxuICAgICAgICAvLyB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICAvLyBsZXQgY2FsbGVySW5mbzogYW55O1xyXG4gICAgICAgIC8vIGxldCBudW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXMpID0+IHJlcy5udW1iZXIpXHJcbiAgICAgICAgLy8gaWYgKCFudW1iZXJMaXN0LmluY2x1ZGVzKHNuYXBzaG90LmRhdGEuZGF0YT8uZnJvbU51bWJlcikpIHtcclxuICAgICAgICAvLyAgIGlmIChzbmFwc2hvdC5kYXRhPy5kYXRhPy5jMmNCdXNpbmVzcyAhPSAnZmFsc2UnICYmIHNuYXBzaG90LmRhdGEuZGF0YT8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKHNuYXBzaG90LmRhdGEuZGF0YT8ucGFydGljaXBhbnRJZCkuc3Vic2NyaWJlKChyZXNJbmZvOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgICBjYWxsZXJJbmZvID0gcmVzSW5mbz8uYzJjSW5mb3JtYXRpb24gfHwge307XHJcbiAgICAgICAgLy8gICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oY2FsbGVySW5mbywgc25hcHNob3QpO1xyXG4gICAgICAgIC8vICAgICB9KVxyXG4gICAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oe30sIHNuYXBzaG90KTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0Zyb21JbWFnZSA9ICcnO1xyXG4gICAgICAgIC8vIGlmKHNuYXBzaG90LmRhdGEuZGF0YT8uZnJvbUltYWdlKXtcclxuICAgICAgICAvLyAgIHRoaXMuaW5jb21pbmdGcm9tSW1hZ2UgPSBzbmFwc2hvdC5kYXRhLmRhdGE/LmZyb21JbWFnZVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfSBlbHNlIGlmIChzbmFwc2hvdD8uZGF0YT8uY29udGVudCA9PSBcIk1pc3NlZCBDYWxsXCIgfHwgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyA9PSBcInJlamVjdGVkXCIgfHwgc25hcHNob3Q/LmRhdGE/LmRhdGE/LnN0YXR1cyA9PSBcImFjY2VwdGVkXCIpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoKGNhbGw6IGFueSkgPT4gY2FsbD8ucGFydGljaXBhbnRJZCAhPSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgJiYgY2FsbD8ucGFydGljaXBhbnRJZCAhPSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgdGhpcy5taXNzQ2FsbEluZm8gPSBzbmFwc2hvdDtcclxuICAgICAgICBsZXQgaW5jb21pbmdDYWxsSW5kZXggPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbmRJbmRleCgoY2FsbDogYW55KSA9PiAoY2FsbD8ucGFydGljaXBhbnRJZCA9PSBzbmFwc2hvdD8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgfHwgY2FsbC5wYXJ0aWNpcGFudElkID09IHNuYXBzaG90Py5kYXRhPy5kYXRhPy5wYXJ0aWNpcGFudElkKSAmJiBjYWxsPy5jYWxsRGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyk7XHJcbiAgICAgICAgICBpZiAoaW5jb21pbmdDYWxsSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaW5jb21pbmdDYWxsSW5kZXgnLCBpbmNvbWluZ0NhbGxJbmRleCwgc25hcHNob3QpO1xyXG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnNwbGljZShpbmNvbWluZ0NhbGxJbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAvLyBpZiAoIXRoaXMuaW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCc0MDcnKTtcclxuICAgICAgICAgICAgLy8gICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYodGhpcy5jb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPT0gc25hcHNob3Q/LmRhdGE/LmRhdGE/LnJlY29yZElkIHx8IHRoaXMuY29ubmVjdGluZ0luY29taW5nQ2FsbElkID09IHNuYXBzaG90Py5kYXRhPy5kYXRhPy5wYXJ0aWNpcGFudElkICYmIHNuYXBzaG90Py5kYXRhPy5kYXRhPy5zdGF0dXMgIT0gXCJhY2NlcHRlZFwiKSB7XHJcbiAgICAgICAgICAgIC8vIHN3YWwoXCJFcnJvclwiLCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkLm5leHQoJycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QnLCB0aGlzLmluY29taW5nQ2FsbHNMaXN0KTtcclxuICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxub3RpZmljYXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCc1OTAnLCB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0KTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgY2FsbEVuZEluZGV4ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maW5kSW5kZXgoKGNhbGw6IGFueSkgPT4gY2FsbD8ucGFydGljaXBhbnRJZCA9PT0gc25hcHNob3Q/LmRhdGE/LmRhdGE/LnJlY29yZElkIHx8IGNhbGw/LnBhcnRpY2lwYW50SWQgPT09IHNuYXBzaG90Py5kYXRhPy5kYXRhPy5wYXJ0aWNpcGFudElkKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LnNwbGljZShjYWxsRW5kSW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKCdub3RpZmljYXRpb25DYWxsTGlzdCcsIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QpO1xyXG4gICAgICBsZXQgcGFyZW50Q2FsbDogc3RyaW5nW10gPSBbXVxyXG4gICAgICBpZiAodGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdCA9IHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QuZmlsdGVyKChyZXM6IGFueSkgPT4gcmVzLmVuZFRpbWUgPj0gKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5mb3JFYWNoKChjYWxsOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpbmZvID0gaXRlbS5wYXJ0aWNpcGFudHMuZmluZCgocmVzSW5mbzogYW55KSA9PiByZXNJbmZvPy5pZCA9PT0gY2FsbD8ucGFydGljaXBhbnRJZCAmJiBjYWxsPy5jYWxsRGlyZWN0aW9uICE9PSAnaW5jb21pbmcnKVxyXG4gICAgICAgICAgICBpZiAoaW5mbykge1xyXG4gICAgICAgICAgICAgIHBhcmVudENhbGwucHVzaChpbmZvLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcmVudENhbGw/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIXBhcmVudENhbGwuaW5jbHVkZXMoaXRlbT8ucGFydGljaXBhbnRJZCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCcuLi4uLicsIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QpXHJcbiAgICAgIH1cclxuICAgICAgLy8gTWVyZ2Ugbm90aWZpY2F0aW9uQ2FsbExpc3QgaW50byBpbmNvbWluZ0NhbGxzTGlzdCB3aXRob3V0IGR1cGxpY2F0aW5nIGVudHJpZXMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50LlxyXG4gICAgICBjb25zdCBleGlzdGluZ1BhcnRpY2lwYW50SWRzID0gbmV3IFNldCh0aGlzLmluY29taW5nQ2FsbHNMaXN0Lm1hcCgoYzogYW55KSA9PiBjPy5wYXJ0aWNpcGFudElkKSk7XHJcbiAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoKG46IGFueSkgPT4gIWV4aXN0aW5nUGFydGljaXBhbnRJZHMuaGFzKG4/LnBhcnRpY2lwYW50SWQpKTtcclxuICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBbLi4udGhpcy5pbmNvbWluZ0NhbGxzTGlzdCwgLi4ubmV3SXRlbXNdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydkZXZpY2VJZCddKSB7XHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5kZXZpY2VJZCA9IGNoYW5nZXNbJ2RldmljZUlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLmV4dFNlcnZpY2UuZ2V0SXBJbmZvKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndXBkYXRlZFR3aWxpb1Rva2VuJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLnVwZGF0ZWRUd2lsaW9Ub2tlbikge1xyXG4gICAgICBpZih0aGlzLnR3aWxpb1NlcnZpY2UuaW5jb21pbmdDYWxsVG9rZW4gIT0gdGhpcy51cGRhdGVkVHdpbGlvVG9rZW4pIHtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaW5jb21pbmdDYWxsVG9rZW4gPSB0aGlzLnVwZGF0ZWRUd2lsaW9Ub2tlbjtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmluaXRpYWxpemVUd2lsaW9EZXZpY2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZUlkJykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndXNlcklkJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLnVzZXJJZCkge1xyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkID0gdGhpcy51c2VySWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snY29udGFjdEluZm8nXT8uY3VycmVudFZhbHVlICYmIHRoaXMuY29udGFjdEluZm8pIHtcclxuICAgICAgbGV0IGNvbnRhY3QgPSB0aGlzLmNvbnRhY3RJbmZvO1xyXG4gICAgICB0aGlzLmlzVmFsaWRhdGlvbk1lc3NhZ2VTaG93ID0gdHJ1ZTtcclxuICAgICAgaWYgKGNvbnRhY3QubnVtYmVyICYmICF0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICBpZiAoY29udGFjdC5pc0RpYWxGcm9tSGlzdG9yeSkge1xyXG4gICAgICAgICAgLy9oYW5kbGUgZGlhbGluZyBmcm9tIGhpc3RvcnkgcGFnZVxyXG4gICAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcclxuICAgICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XHJcbiAgICAgICAgICAgIHRoaXMub3V0Z29pbmdDb250YWN0TmFtZSA9IGNvbnRhY3QubmFtZTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gY29udGFjdC5mcm9tO1xyXG4gICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycgfHwgY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XHJcbiAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIGlmIChjb250YWN0Lm51bWJlciAmJiB0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBpbmNvbWluZyBjYWxsc1xyXG4gICAgICAgIHRoaXMubmV3Q2FsbENvbmZlcmVuY2UgPSBjb250YWN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaXNEaWFscGFkSGlkZGVuJ10gJiYgIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q29udGFjdExpc3QoKTtcclxuICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaWFsSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIGlmICghdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pbmNvbWluZ0NhbGxEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzLnB1c2godGhpcy5pbmNvbWluZ0NhbGxEYXRhKTtcclxuICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XHJcbiAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbih0aGlzLmluY29taW5nQ2FsbERhdGEpO1xyXG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XHJcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEYXRhLm9uKCdjYW5jZWwnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnNTIzJyk7XHJcbiAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnNTI2Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjYWxsQWN0aW9uJ10/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5jYWxsQWN0aW9uPy50eXBlID09ICdyZUpvaW4nKSB7XHJcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmdldElwSW5mbygpO1xyXG4gICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZih0aGlzLmNhbGxBY3Rpb24/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMoJ2FsbCcsIHRoaXMuY2FsbEFjdGlvbj8uY29uZmVyZW5jZUlkKS5zdWJzY3JpYmUoKHJlcykgPT4geyB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVnaXN0ZXJEcmFnRWxlbWVudCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGVsbW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RyYWdwYXJlbnQxJyk7XHJcbiAgICAgIGlmICghZWxtbnQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdEcmFnIGVsZW1lbnQgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcG9zMSA9IDAsIHBvczIgPSAwLCBwb3MzID0gMCwgcG9zNCA9IDA7XHJcblxyXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0Jykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XHJcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcclxuXHJcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiBlbGVtZW50RHJhZyhtb3ZlRXZlbnQpO1xyXG4gICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGVsZW1lbnREcmFnID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XHJcbiAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7XHJcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcclxuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xyXG5cclxuICAgICAgICBlbG1udC5zdHlsZS50b3AgPSAoZWxtbnQub2Zmc2V0VG9wIC0gcG9zMikgKyAncHgnO1xyXG4gICAgICAgIGVsbW50LnN0eWxlLmxlZnQgPSAoZWxtbnQub2Zmc2V0TGVmdCAtIHBvczEpICsgJ3B4JztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciBoZWFkZXIgZWxlbWVudFxyXG4gICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbG1udC5pZCArICdoZWFkZXInKTtcclxuICAgICAgaWYgKGhlYWRlcikge1xyXG4gICAgICAgIGhlYWRlci5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbmNvbWluZ0NhbGxOb3RpZmljYXRpb24oY2FsbGVySW5mbzogYW55LCBub3RpZmljYXRpb246IGFueSkge1xyXG4gICAgaWYoIW5vdGlmaWNhdGlvbj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBpbmNvbWluZ0NhbGw6IGFueSA9IHtcclxuICAgICAgY29uZmVyZW5jZUlkOiBub3RpZmljYXRpb24/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgIGlzSW5jb21pbmdDYWxsOiB0cnVlLFxyXG4gICAgICAvLyBDbGllbnQtb25seSBtYXJrZXI6IHRoaXMgZW50cnkgaXMgYSBwZW5kaW5nIGluY29taW5nLWNhbGwgbm90aWZpY2F0aW9uLCBOT1QgYW5cclxuICAgICAgLy8gYWN0aXZlIHNvY2tldCBjb25mZXJlbmNlLiBVc2VkIHRvIGRlZHVwZSBieSBwYXJ0aWNpcGFudElkIGluc3RlYWQgb2YgY29uZmVyZW5jZUlkLFxyXG4gICAgICAvLyBzbyBhIG5vdGlmaWNhdGlvbiBjYW4gY29leGlzdCB3aXRoIGFuIGFjdGl2ZSBjb25mZXJlbmNlIHRoYXQgc2hhcmVzIGl0cyBjb25mZXJlbmNlSWQuXHJcbiAgICAgIF9pc05vdGlmaWNhdGlvbjogdHJ1ZSxcclxuICAgICAgcGFydGljaXBhbnRJZDogbm90aWZpY2F0aW9uPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICBjYWxsRGlyZWN0aW9uOiBcImluY29taW5nLWNhbGxcIixcclxuICAgICAgcGFydGljaXBhbnRzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZGlyZWN0aW9uOiBcImluY29taW5nLWNhbGxcIiwgYnVzaW5lc3NOdW1iZXI6IG5vdGlmaWNhdGlvbi5jMmNCdXNpbmVzcywgaW1nOiBub3RpZmljYXRpb24uZnJvbUltYWdlIHx8IG5vdGlmaWNhdGlvbi5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsIGlzSW5jb21pbmdDYWxsOiB0cnVlLCBpc0hvbGQ6IGZhbHNlLCBpc0NvbmZlcmVuY2U6IGZhbHNlLCBpc0FjY2VwdENhbGw6IGZhbHNlLCBkaWFsOiB0cnVlLCBwaG9uZTogbm90aWZpY2F0aW9uLmZyb21OdW1iZXIsIHRvOiBub3RpZmljYXRpb24udG9OdW1iZXIsXHJcbiAgICAgICAgICBmcm9tOiBub3RpZmljYXRpb24uZnJvbU51bWJlciwgZnJvbU5hbWU6IG5vdGlmaWNhdGlvbi5mcm9tTmFtZSwgcGFydGljaXBhbnRJZDogbm90aWZpY2F0aW9uLnBhcnRpY2lwYW50SWQsIG5hbWU6IG5vdGlmaWNhdGlvbi5mcm9tTmFtZSwgdGltZTogJycsIGlkOiBub3RpZmljYXRpb24ucGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkOiBub3RpZmljYXRpb24uY29uZmVyZW5jZUlkLCBjbGllbnRTaWQ6IG5vdGlmaWNhdGlvbi5jbGllbnRTaWQsIGNhbGxTdGF0dXM6ICdyaW5naW5nJ1xyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgIH1cclxuICAgIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QgPSBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LmZpbHRlcigocmVzOiBhbnkpID0+IHJlcz8uZW5kVGltZSA+IG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcclxuXHJcbiAgICBpZiAoY2FsbGVySW5mbykge1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWydlbWFpbCddID0gY2FsbGVySW5mby5lbWFpbDtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsnbmFtZSddID0gY2FsbGVySW5mby5uYW1lO1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWydpbWFnZSddID0gY2FsbGVySW5mby5pbWFnZTtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsnZXh0ZW5zaW9uJ10gPSBjYWxsZXJJbmZvLmV4dGVuc2lvbjtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsndXNlckluZm9JZCddID0gY2FsbGVySW5mby5pZDtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsnbWVzc2FnZSddID0gY2FsbGVySW5mby5tZXNzYWdlO1xyXG4gICAgICBpbmNvbWluZ0NhbGwucGFydGljaXBhbnRzWzBdWydub3RlJ10gPSBjYWxsZXJJbmZvLm5vdGU7XHJcbiAgICAgIGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudHNbMF1bJ251bWJlciddID0gY2FsbGVySW5mby5udW1iZXI7XHJcbiAgICAgIGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudHNbMF1bJ3BvaW50TmFtZSddID0gY2FsbGVySW5mby5wb2ludE5hbWU7XHJcbiAgICAgIGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudHNbMF1bJ3NvZnRwaG9uZVR3aWxpb0F1dGhJZCddID0gY2FsbGVySW5mby5zb2Z0cGhvbmVUd2lsaW9BdXRoSWQ7XHJcbiAgICAgIGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudHNbMF1bJ3NvdXJjZU5hbWUnXSA9IGNhbGxlckluZm8uc291cmNlTmFtZTtcclxuICAgICAgaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50c1swXVsnc3ViamVjdCddID0gY2FsbGVySW5mby5zdWJqZWN0O1xyXG4gICAgfVxyXG4gICAgaW5jb21pbmdDYWxsWydlbmRUaW1lJ10gPSAobmV3IERhdGUoKS5nZXRUaW1lKCkgKyA0NSAqIDEwMDApO1xyXG4gICAgdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5wdXNoKGluY29taW5nQ2FsbCk7XHJcbiAgICAvLyBPbmx5IGFkZCB0aGlzIHNwZWNpZmljIGNhbGwgaWYgbm90IGFscmVhZHkgcHJlc2VudCwgcHJldmVudGluZyBkdXBsaWNhdGVzIHdoZW5cclxuICAgIC8vIG11bHRpcGxlIGNhbGxzIGFycml2ZSBzaW11bHRhbmVvdXNseSBhbmQgbm90aWZpY2F0aW9uQ2FsbExpc3QgaGFzIHByaW9yIGVudHJpZXMuXHJcbiAgICBjb25zdCBhbHJlYWR5SW5MaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5zb21lKChjOiBhbnkpID0+IGM/LnBhcnRpY2lwYW50SWQgPT09IGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudElkKTtcclxuICAgIGlmICghYWxyZWFkeUluTGlzdCkge1xyXG4gICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gWy4uLnRoaXMuaW5jb21pbmdDYWxsc0xpc3QsIGluY29taW5nQ2FsbF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3RhcnQgdGhlIHJpbmcgZm9yIHRoaXMgaW5jb21pbmcgY2FsbCAodW5sZXNzIHRoZSB1c2VyIGhhcyBtdXRlZCBpbmNvbWluZyBjYWxscykuXHJcblxyXG4gICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgaWYgKG5vdGlmaWNhdGlvbj8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNkay5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGROdW1iZXIobnVtOiBhbnkpIHtcclxuICAgIGlmIChudW0gPT0gJyMnIHx8IG51bSA9PSAnKicgfHwgbnVtID09ICcrJyB8fCBOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcclxuICAgICAgaWYgKG51bSA9PSAnIycpIHtcclxuICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtaGFzaC0ubXAzYCkucGxheSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcclxuICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtc3Rhci0ubXAzYCkucGxheSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgKz0gbnVtO1xyXG4gICAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xyXG5cclxuICAgICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcilcclxuICAgIH0gZWxzZSBpZiAobnVtID09PSAndm9pY2VtYWlsJykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2V4dGVuc2lvbi92b2ljZW1haWwvJyArIHRoaXMudG9rZW5dKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVEaWFscGFkKCkge1xyXG4gICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5jbG9zZURpYWxwYWRFdmVudC5lbWl0KCk7XHJcbiAgICB0aGlzLmNsZWFyQWxsRGlhbGVkKCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uRGlhbElucHV0Q2hhbmdlKGlucHV0VmFsOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFVwZGF0ZWQgcmVnZXggdG8gaW5jbHVkZSB4LCBYLCBleHQuLCBFeHQuLCBhbmQgLFxyXG4gICAgICBjb25zdCBpc051bWVyaWNJbnB1dCA9IC9eW1xcZFxccytcXC1dKyQvLnRlc3QoaW5wdXRWYWwpO1xyXG4gICAgICBsZXQgbWFpbk51bWJlciA9IGlucHV0VmFsO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIC8vIENoZWNrIGZvciBleHRlbnNpb24gaW5kaWNhdG9ycyBhbmQgc3BsaXQgdGhlIGlucHV0XHJcbiAgICAgIGNvbnN0IGV4dE1hdGNoID0gaW5wdXRWYWwubWF0Y2goLyh4fFh8ZXh0XFwufEV4dFxcLnwsKSguKikvKTtcclxuICAgICAgaWYgKGV4dE1hdGNoKSB7XHJcbiAgICAgICAgbWFpbk51bWJlciA9IGlucHV0VmFsLnN1YnN0cmluZygwLCBleHRNYXRjaC5pbmRleCkudHJpbSgpO1xyXG4gICAgICAgIHRoaXMuY2FsbERhdGEuZXh0TnVtID0gZXh0TWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gaXNOdW1lcmljSW5wdXQgPyBtYWluTnVtYmVyLnJlcGxhY2UoL1tcXHNcXC1dKy9nLCAnJykgOiBtYWluTnVtYmVyO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGlzTnVtZXJpY0lucHV0ID8gdGhpcy5zYW5pdGl6ZWROdW0gOiAnJztcclxuICAgICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IGlucHV0VmFsLmxlbmd0aCA+IDA7XHJcbiAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGVtaXQgY3VycmVudCBudW1iZXIgd2hlbmV2ZXIgaW5wdXQgY2hhbmdlc1xyXG4gICAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChpbnB1dFZhbC5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpb25NZXNzYWdlU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29udGFjdExpc3QuZm9yRWFjaChjb250YWN0ID0+IHtcclxuICAgICAgICAgIGlmIChpc051bWVyaWNJbnB1dCkge1xyXG4gICAgICAgICAgICBjb250YWN0Lm51bWJlcnNMaXN0LmZvckVhY2goKG51bTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG51bS5udW1iZXIuaW5jbHVkZXModGhpcy5zYW5pdGl6ZWROdW0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QucHVzaCh7IC4uLmNvbnRhY3QsIHNlbGVjdGVkTnVtYmVyOiBudW0gfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7Y29udGFjdC5maXJzdE5hbWV9ICR7Y29udGFjdC5taWRkbGVOYW1lfSAke2NvbnRhY3QubGFzdE5hbWV9YC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpZiAoZnVsbE5hbWUuaW5jbHVkZXModGhpcy5zYW5pdGl6ZWROdW0udG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICBjb250YWN0Lm51bWJlcnNMaXN0LmZvckVhY2goKG51bTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QucHVzaCh7IC4uLmNvbnRhY3QsIHNlbGVjdGVkTnVtYmVyOiBudW0gfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGaXJzdExldHRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5hbWUgPyBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpIDogJyc7XHJcbiAgfVxyXG4gIGNsZWFySW5wdXQoKSB7XHJcbiAgICBpZiAodGhpcy5kaWFsZWROdW1iZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9IHRoaXMuZGlhbGVkTnVtYmVyLnNsaWNlKDAsIC0xKTtcclxuICAgICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCAhPT0gMDtcclxuXHJcbiAgICAgIHRoaXMub25EaWFsSW5wdXRDaGFuZ2UodGhpcy5kaWFsZWROdW1iZXIpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNsZWFyQWxsRGlhbGVkKCkge1xyXG4gICAgdGhpcy5kaWFsZWROdW1iZXIgPSAnJztcclxuICAgIHRoaXMuc2FuaXRpemVkTnVtID0gJyc7XHJcbiAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGdldENhbGxlcklkTGlzdCgpIHtcclxuICAgIHRoaXMuZXh0U2VydmljZS5kaXNwbGF5SUQodGhpcy50b2tlbiB8fCAnJykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNhbGxlcklkTGlzdCA9IHJlcy5jYWxsZXJJZExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udm9pY2VGZWF0dXJlID09PSB0cnVlKTtcclxuICAgICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgICAgIGlmICh0aGlzLmNhbGxlcklkTGlzdC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHRoaXMuY2FsbGVySWRMaXN0WzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGxQcmVmZXJlbmNlID09PSAnYWx3YXlzQXNrJyB8fCB0aGlzLmNhbGxQcmVmZXJlbmNlID09PSAnc21hcnREaWFsaW5nJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gdGhpcy5jYWxsZXJJZExpc3QuZmluZChpdGVtID0+IChpdGVtLm51bWJlciA9PSB0aGlzLmNhbGxQcmVmZXJlbmNlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0Q29udGFjdExpc3QoKSB7XHJcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0Q29udGFjdExpc3QoKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcC5yZXNwb25zZSA9PSAnU3VjY2VzcycpIHtcclxuICAgICAgICB0aGlzLmNvbnRhY3RMaXN0ID0gcmVzcC5waG9uZUJvb2s7XHJcbiAgICAgIH1cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldEZ1bGxOYW1lKGNvbnRhY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnVsbE5hbWUgPSBjb250YWN0LmZpcnN0TmFtZSB8fCAnJztcclxuICAgIGlmIChjb250YWN0Lm1pZGRsZU5hbWUpIHtcclxuICAgICAgZnVsbE5hbWUgKz0gYCAke2NvbnRhY3QubWlkZGxlTmFtZX1gO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbnRhY3QubGFzdE5hbWUpIHtcclxuICAgICAgZnVsbE5hbWUgKz0gYCAke2NvbnRhY3QubGFzdE5hbWV9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBmdWxsTmFtZS50cmltKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdG9nZ2xlQ2FsbGVySWREaXYoKSB7XHJcbiAgICB0aGlzLmlzQ2FsbGVySWRIaWRkZW4gPSAhdGhpcy5pc0NhbGxlcklkSGlkZGVuO1xyXG4gIH1cclxuICBvdXRnb2luZ0NvbnRhY3ROYW1lOnN0cmluZyA9ICcnO1xyXG4gIG9uQ29udGFjdFNlbGVjdChjb250YWN0OiBhbnkpIHtcclxuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5zZWxlY3RlZE51bWJlci5udW1iZXI7XHJcbiAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSB0aGlzLmdldEZ1bGxOYW1lKGNvbnRhY3QpO1xyXG4gICAgdGhpcy5vdXRnb2luZ0NvbnRhY3ROYW1lID0gdGhpcy5jYWxsRGF0YS5uYW1lO1xyXG4gICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcclxuICAgIHRoaXMub25EaWFsSW5wdXRDaGFuZ2UodGhpcy5kaWFsZWROdW1iZXIpO1xyXG4gICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XHJcbiAgICB0aGlzLmlzVmFsaWRhdGlvbk1lc3NhZ2VTaG93ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGVuZENhbGwoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XHJcblxyXG4gICAgICAvLyBSZXNldCBjYWxsIGRhdGFcclxuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcclxuICAgICAgICBwaG9uZTogJycsXHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGRpYWw6IGZhbHNlLFxyXG4gICAgICAgIGRpc3BsYXlOdW06ICcnLFxyXG4gICAgICAgIGV4dE51bTogJydcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFJlc2V0IGRpYWxlZCBudW1iZXJcclxuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSAnJztcclxuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSAnJztcclxuICAgICAgY29uc29sZS5sb2coJzc5NScpO1xyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlLmRpc2Nvbm5lY3RBbGwoKVxyXG4gICAgICAvLyBFbWl0IGVuZCBjYWxsIGV2ZW50XHJcbiAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBFdmVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IsIHRyeSB0byByZXNldCB0aGUgc3RhdGVcclxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FsbERhdGEgPSB7XHJcbiAgICAgICAgcGhvbmU6ICcnLFxyXG4gICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgICAgICBkaWFsOiBmYWxzZSxcclxuICAgICAgICBkaXNwbGF5TnVtOiAnJyxcclxuICAgICAgICBleHROdW06ICcnXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENhbmNlbHMgYW4gb3V0Z29pbmcgY2FsbCB3aGlsZSBpdCBpcyBzdGlsbCBjb25uZWN0aW5nICh0aGUgXCJDb25uZWN0aW5nLi4uXCIgbG9hZGVyIHNob3duXHJcbiAgLy8gYmVmb3JlIHRoZSBjYWxsIGhhcyBqb2luZWQgdGhlIGNvbmZlcmVuY2UpLiBlbmRDYWxsKCkgY2FuJ3QgYmUgcmV1c2VkIGhlcmUgYmVjYXVzZSBpdFxyXG4gIC8vIGRpc2Nvbm5lY3RzIHR3aWxpb1NlcnZpY2UuZGV2aWNlLCB3aGljaCBoYW5kbGVzIGluY29taW5nIGNhbGxzLCBub3QgdGhlIG91dGdvaW5nIGNhbGxcclxuICAvLyBjcmVhdGVkIGJ5IGNhbGwtcHJvZ3Jlc3MncyBvd24gZGV2aWNlL2NhbGwgaW5zdGFuY2UuXHJcbiAgY2FuY2VsQ29ubmVjdGluZ0NhbGwoKSB7XHJcbiAgICAvLyBEcml2ZSB0aGUgY2hpbGQgdmlhIGFuIEBJbnB1dCByYXRoZXIgdGhhbiBAVmlld0NoaWxkOiB0aGlzIGRlbGl2ZXJzIGV2ZW4gaWZcclxuICAgIC8vIGxpYi1jYWxsLXByb2dyZXNzIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0IGF0IGNsaWNrIHRpbWUsIHNpbmNlIEFuZ3VsYXIgYXBwbGllc1xyXG4gICAgLy8gdGhlIGJvdW5kIHZhbHVlIGFzIHNvb24gYXMgdGhlIGNvbXBvbmVudCBkb2VzIG1vdW50LlxyXG4gICAgdGhpcy5jYW5jZWxDb25uZWN0aW5nQWN0aW9uID0geyB0czogRGF0ZS5ub3coKSB9O1xyXG4gICAgdGhpcy5pc0xvYWRlcnNob3cgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XHJcbiAgICB0aGlzLmNhbGxEYXRhID0ge1xyXG4gICAgICBwaG9uZTogJycsXHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICBkaWFsOiBmYWxzZSxcclxuICAgICAgZGlzcGxheU51bTogJycsXHJcbiAgICAgIGV4dE51bTogJydcclxuICAgIH07XHJcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9ICcnO1xyXG4gICAgdGhpcy5zYW5pdGl6ZWROdW0gPSAnJztcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRpYXRlQ2FsbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XHJcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcigpO1xyXG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2F2ZUxhc3REaWFsZWQoKTtcclxuICAgICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcclxuXHJcbiAgICAgIHRoaXMuaXNQYXltZW50RHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BheW1lbnREdWUnKSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5pc1BheW1lbnREdWUpIHtcclxuICAgICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZSwgVG8gY29udGludWUgb24geW91ciBzZXJ2aWNlcyBraW5kbHkgc3Vic2NyaWJlIHRvIHVzZSB1bmludGVycnVwdGVkIHNlcnZpY2VzLicpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc1RyaWFsUGVyaW9kT3ZlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0cmlhbE92ZXInKSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNhbml0aXplZE51bSA9PT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3R3aWxpb051bWJlcicpKSB7XHJcbiAgICAgICAgc3dhbCgnRXJyb3InLCAnWW91IGNhbiBub3QgZGlhbCB0aGlzIG51bWJlcicpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGF3YWl0IHRoaXMuY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpO1xyXG4gICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmFza0Zvck1pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzTG9hZGVyc2hvdyA9IHRydWU7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XHJcbiAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdTZWxlY3QgYSBDMkMgbnVtYmVyIHRvIGNhbGwnKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcclxuICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICB0aGlzLmlzTG9hZGVyc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBNb3VudCBsaWItY2FsbC1wcm9ncmVzcyBub3cgKG5vdCBhZnRlciBnZXRUb051bWJlcidzIGF3YWl0KSBzbyBpdCdzIHJlYWR5XHJcbiAgICAgIC8vIHRvIHJlY2VpdmUgY2FsbERhdGEvY2FuY2VsQ29ubmVjdGluZ0FjdGlvbiBhcyBzb29uIGFzIHRoZSBDYW5jZWwgYnV0dG9uIGFwcGVhcnMuXHJcbiAgICAgIC8vIFJlc2V0IGZpcnN0OiBhIHN0YWxlIG5vbi1udWxsIHZhbHVlIGhlcmUgd291bGQgbG9vayBsaWtlIGEgZnJlc2ggY2FuY2VsIHRvIHRoZVxyXG4gICAgICAvLyBmcmVzaGx5LW1vdW50ZWQgY2hpbGQncyBuZ09uQ2hhbmdlcywgc2luY2UgKm5nSWYgZGVzdHJveXMvcmVjcmVhdGVzIGl0IHBlciBjYWxsLlxyXG4gICAgICB0aGlzLmNhbmNlbENvbm5lY3RpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAvLyBDbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJvdW5kIGZyb20gcHJldmlvdXMgY2FsbFxyXG4gICAgICB0aGlzLmNhbGxEYXRhLmRpc3BsYXlOdW0gPSAnJztcclxuXHJcbiAgICAgIC8vIEdldCBudW1iZXIgdG8gYmUgZGlhbGVkIGZyb20gYmFja2VuZFxyXG4gICAgICBhd2FpdCB0aGlzLmdldFRvTnVtYmVyKHRoaXMuc2FuaXRpemVkTnVtKTtcclxuICAgICAgaWYgKHRoaXMudGVybWluYXRlQ2FsbCkge1xyXG4gICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIGNhbGwgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb25cclxuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLmNhbGxEYXRhLFxyXG4gICAgICAgIHBob25lOiB0aGlzLnNhbml0aXplZE51bSxcclxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICBmcm9tOiB0aGlzLmlzU21hcnREaWFsQ2FsbCA/IHRoaXMuY2FsbERhdGEuZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZC5udW1iZXIsXHJcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XHJcbiAgICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGluaXRpYXRlQ2FsbDonLCBlKTtcclxuICAgICAgdGhpcy5pc0xvYWRlcnNob3cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGlzSW52YWxpZE51bWJlcigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnNhbml0aXplZE51bSA9PSAnJykge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YWxpZE51bWJlclBhdHRlcm4gPSAvXlsrXFxkXFxzKCktXSokLzsgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGNoYXJhY3RlcnNcclxuICAgICAgY29uc3QgcGhvbmVOdW1iZXIgPSB0aGlzLnNhbml0aXplZE51bTtcclxuICAgICAgaWYgKCF2YWxpZE51bWJlclBhdHRlcm4udGVzdChwaG9uZU51bWJlcikpIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5zYW5pdGl6ZWROdW0ubGVuZ3RoID4gMTUpe1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgIHJldHVybiB0cnVlOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCwgbWVhbmluZyB0aGUgbnVtYmVyIGlzIGludmFsaWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVMYXN0RGlhbGVkKCkge1xyXG4gICAgY29uc3QgY29udGFjdCA9IHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdC5maW5kKChjOiBhbnkpID0+IGMubnVtYmVyc0xpc3Quc29tZSgobjogYW55KSA9PiBuLm51bWJlciA9PT0gdGhpcy5kaWFsZWROdW1iZXIpKTtcclxuICAgIGlmIChjb250YWN0KSB7XHJcbiAgICAgIHRoaXMubGFzdERpYWxlZCA9IHtcclxuICAgICAgICBuYW1lOiBjb250YWN0Lm5hbWUsXHJcbiAgICAgICAgaW1hZ2U6IGNvbnRhY3QuaW1hZ2UsXHJcbiAgICAgICAgbnVtYmVyOiB0aGlzLmRpYWxlZE51bWJlclxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZGlhbGVkTnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0RGlhbGVkID0geyBudW1iZXI6IHRoaXMuZGlhbGVkTnVtYmVyIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzU2F2ZWRDb250YWN0RGlhbGxlZCgpIHtcclxuICAgIGxldCBwaG9uZU51bSA9IHRoaXMuc2FuaXRpemVkTnVtLnJlcGxhY2UoL1xccysvZywgJycpO1xyXG4gICAgbGV0IGNvbnRhY3QgPSB0aGlzLmNvbnRhY3RMaXN0LmZpbHRlcigoY29udGFjdDogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBjb250YWN0Lm51bWJlcnNMaXN0LnNvbWUoKG51bTogYW55KSA9PiBudW0ubnVtYmVyID09PSBwaG9uZU51bSlcclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coY29udGFjdCk7XHJcbiAgICBpZiAoY29udGFjdC5sZW5ndGgpIHtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGAke2NvbnRhY3RbMF0uZmlyc3ROYW1lfSAke2NvbnRhY3RbMF0ubWlkZGxlTmFtZX0gJHtjb250YWN0WzBdLmxhc3ROYW1lfWAudG9Mb3dlckNhc2UoKTtcclxuICAgICAgdGhpcy5jb250YWN0TmFtZUZvckxvYWRlciA9IHRoaXMuY2FsbERhdGEubmFtZTtcclxuICAgICAgdGhpcy5vdXRnb2luZ0NvbnRhY3ROYW1lID0gdGhpcy5jb250YWN0TmFtZUZvckxvYWRlcjtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdFswXS5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XHJcbiAgICAgIHRoaXMuY29udGFjdEltZ0ZvckxvYWRlciA9IHRoaXMuY2FsbERhdGEuaW1nO1xyXG4gICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuY29udGFjdE5hbWVGb3JMb2FkZXIgPSAnJztcclxuICAgICAgIHRoaXMub3V0Z29pbmdDb250YWN0TmFtZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBzaG93RGlhbEFsZXJ0KG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWFsQWxlcnQgPSB7XHJcbiAgICAgIG1zZzogbWVzc2FnZSxcclxuICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxBbGVydC5zaG93ID0gZmFsc2U7XHJcbiAgICB9LCAzMDAwKTtcclxuICB9XHJcbiAgYXN5bmMgaXNDYWxsZXJJZFNldCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHRrbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmV4dFNlcnZpY2UuZmV0Y2hDYWxsZXJJZCh0a24gfHwgJycpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndHJpYWxPdmVyJywgcmVzLnRyaWFsT3Zlcik7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzVHJpYWxPdmVyLm5leHQocmVzLnRyaWFsT3Zlcik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BheW1lbnREdWUnLCByZXMucGF5bWVudER1ZSk7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzUGF5bWVudER1ZS5uZXh0KHJlcy5wYXltZW50RHVlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzLmNhbGxlcmlkKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgcmVzLmNhbGxlcmlkKTtcclxuICAgICAgICB0aGlzLmV4dFNlcnZpY2UuY2hhbmdlTWVzc2FnZShyZXMuY2FsbGVyaWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYWxsZXJJRCcsICdOb3Qgc2V0Jyk7XHJcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmNoYW5nZU1lc3NhZ2UoJ05vdCBzZXQnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYWxsZXJJRCcpICE9PSAnTm90IHNldCcpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBjaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSB9KTtcclxuICAgICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkubmFtZSA9PT0gJ05vdEFsbG93ZWRFcnJvcicpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGFza0Zvck1pY3JvcGhvbmVQZXJtaXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSB9KTtcclxuICAgICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VzZXIgZGVuaWVkIG1pY3JvcGhvbmUgcGVybWlzc2lvbjonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIGJlbG93IGZ1bmN0aW9uIGlzIHRvIGdldCB0aGUgY291bnRyeSBjb2RlIHdpdGggbnVtYmVyIGZyb20gc2VydmVyIFxyXG4gIGFzeW5jIGdldFRvTnVtYmVyKGRpYWxlZE51bWJlcjogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGlhbGVkTnVtYmVyWzBdICE9PSAnKycpIHtcclxuICAgICAgLy8gdGhpcyBpcyBjYXNlIHdoZW4gdXNlciBnZW9sb2NhdGlvbiBkaWFsIGNvZGUgaXMgb25cclxuICAgICAgbGV0IGlwQWRkcmVzczogYW55ID0gYXdhaXQgdGhpcy5pcFNlcnZpY2UuZ2V0SXBBZGRyZXNzSW5mbygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IHRoaXMudHdpbGlvU2VydmljZS5nZXRUb051bWJlcihkaWFsZWROdW1iZXIsIGlwQWRkcmVzcy5hZGRyZXNzLmNvdW50cnlDb2RlKS50b1Byb21pc2UoKTtcclxuICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdFRpbWVvdXQgPSByZXMudGltZUludGVydmFsICogMTAwMDtcclxuICAgICAgICBhd2FpdCB0aGlzLnNob3dOdW1iZXJUb2FzdChyZXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzQWxlcnRFbmFibGUoKSB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2lzQWxlcnRFbmFibGUnKTtcclxuICB9XHJcbiAgYXN5bmMgc2hvd051bWJlclRvYXN0KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IHRydWU7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5udW1iZXIgPSBkYXRhLnRvTnVtYmVyO1xyXG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3QuZGlzcGxheU51bSA9IGRhdGEuZGlzcGxheU51bWJlcjtcclxuICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9IGRhdGEuZGlzcGxheU51bWJlcjtcclxuICAgIGF3YWl0IHRoaXMuZGVsYXkodGhpcy50b2FzdFRpbWVvdXQpO1xyXG4gICAgdGhpcy5kaWFsZWROdW1iZXIgPSBkYXRhLnRvTnVtYmVyO1xyXG4gICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBkYXRhLnRvTnVtYmVyO1xyXG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3QubnVtYmVyID0gJyc7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5kaXNwbGF5TnVtID0gJyc7XHJcbiAgfVxyXG4gIGRlbGF5KG1zOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICB9XHJcbiAgaXNNaW5pbWlzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvbk1pbmltaXNlKGlzTWluaW1pc2VkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gaXNNaW5pbWlzZWQ7XHJcbiAgICB0aGlzLm1pbmltaXNlRXZlbnQuZW1pdChpc01pbmltaXNlZCk7XHJcbiAgfVxyXG4gIGhhbmRsZU51bWJlclBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhIHx8ICh3aW5kb3cgYXMgYW55KS5jbGlwYm9hcmREYXRhO1xyXG4gICAgY29uc3QgcGFzdGVkRGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG5cclxuICAgIC8vIExvZyB0aGUgcGFzdGVkIGNvbnRlbnQgdG8gdGhlIGNvbnNvbGVcclxuICAgIGlmIChwYXN0ZWREYXRhKSB7XHJcbiAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gcGFzdGVkRGF0YS50cmltKCk7XHJcbiAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gcGFzdGVkRGF0YS50cmltKCk7XHJcblxyXG4gICAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkxvYWRlcnNob3coZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50IHx8IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGVyc2hvdyA9IGV2ZW50O1xyXG4gICAgfVxyXG4gIH1cclxuICBvbkVudGVyKG51bTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9IHRoaXMuZGlhbGVkTnVtYmVyICsgbnVtO1xyXG4gICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmRpYWxlZE51bWJlcjtcclxuICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0cnVlO1xyXG4gICAgdGhpcy5udW1iZXJEaWFsZWQuZW1pdCh0aGlzLmRpYWxlZE51bWJlcik7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ2FsbFNldHRpbmcoKSB7XHJcbiAgICBjb25zdCB0a24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgICB0aGlzLmV4dFNlcnZpY2UuZmV0Y2hDYWxsZXJJZCh0a24gfHwgJycpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmNhbGxQcmVmZXJlbmNlID0gcmVzcC5jYWxsZXJpZDtcclxuICAgICAgICB0aGlzLmdldENhbGxlcklkTGlzdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBvbkRlZGljYXRlZE51bVNlbGVjdChpZDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSBpZDtcclxuICAgIHRoaXMuaXNDYWxsZXJJZEhpZGRlbiA9IHRydWU7XHJcbiAgICB0aGlzLmV4dFNlcnZpY2Uuc2V0Q2FsbGVySWQoaWQpO1xyXG4gIH1cclxuICBjYW5jZWxEaWFsTnVtYmVyKCkge1xyXG4gICAgdGhpcy50ZXJtaW5hdGVDYWxsID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZURpdktleWRvd24oZXY6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuZGlhbElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXYua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBkaWFscGFkIGlzIG9wZW5cclxuICAgICAgaWYgKCF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggPiAyICYmIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCkge1xyXG4gICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpIHtcclxuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgb25DYWxsQnRuTW91c2VFbnRlcihldjogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDYWxsZXJJZCB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdhbHdheXNBc2snKSB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSkge1xyXG4gICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIG9uQ2FsbEJ0bk1vdXNlTGVhdmUoZXY6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnYWx3YXlzQXNrJykgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykpIHtcclxuICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kSW5jb21pbmdDYWxsKGluY29taW5nQ2FsbDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnMTEwMScpXHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0ID0gdGhpcy5ub3RpZmljYXRpb25DYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbT8ucGFydGljaXBhbnRJZCAhPT0gaW5jb21pbmdDYWxsLnBhcnRpY2lwYW50SWQpO1xyXG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0/LnBhcnRpY2lwYW50SWQgIT09IGluY29taW5nQ2FsbC5wYXJ0aWNpcGFudElkKTtcclxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgYWNjZXB0TmV3SW5jb21pbmdDYWxsKGNhbGw6IENhbGwpIHtcclxuICAgIC8vZmlyc3QgY3V0IHRoZSBjdXJyZW50IGNhbGxcclxuICAgIHRoaXMubmV3SW5jb21pbmdDYWxsRGF0YSA9IGNhbGw7XHJcbiAgfVxyXG4gIHJlamVjdE5ld0luY29taW5nQ2FsbChjYWxsOiBDYWxsKSB7XHJcbiAgICBjYWxsLnJlamVjdCgpO1xyXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnMuQ2FsbFNpZCAhPT0gY2FsbC5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xyXG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XHJcbiAgfVxyXG4gIG5ld0luY29taW5nQ2FsbEluaXRpYXRlZCgpIHtcclxuICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMgPSBbXTtcclxuICAgIHRoaXMuaW5jb21pbmdDYWxsSW5pdGlhdGVkLmVtaXQoKTtcclxuICB9XHJcbiAgaW5jb21pbmdDYWxsc05ld0luZm8oZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gZGF0YTtcclxuICAgIHRoaXMuaW5jb21pbmdDYWxsc05ld0luZm9FdmVudC5lbWl0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFVzZXJTZXR0aW5ncygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZ0luZm8gPSByZXMudXNlclNldHRpbmc7XHJcbiAgICAgICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gU3RvcCByaW5naW5nIGlmIGFuIGluY29taW5nIGNhbGwgd2FzIHBlbmRpbmcgd2hlbiB0aGUgY29tcG9uZW50IGlzIHRvcm4gZG93biAoZS5nLiBsb2dvdXQpLlxyXG4gICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBbXTtcclxuXHJcbiAgICAgIC8vIENsZWFuIHVwIFR3aWxpbyBkZXZpY2Ugd2hlbiBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICAgIGlmICh0aGlzLnR3aWxpb1NlcnZpY2VbJ2RldmljZSddKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Rlc3Ryb3lpbmcgVHdpbGlvIGRldmljZS4uLicpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZVsnZGV2aWNlJ10uZGlzY29ubmVjdEFsbCgpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZVsnZGV2aWNlJ10uZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zZXRJbmNvbWluZ011dGVkKHRydWUpO1xyXG5cclxuICAgICAgLy8gRW5kIGFueSBhY3RpdmUgY2FsbFxyXG4gICAgICBpZiAodGhpcy5pc0NhbGxJblByb2dyZXNzKSB7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENsZWFyIGFueSB0aW1lb3V0cyBvciBpbnRlcnZhbHMgaWYgdGhleSBleGlzdFxyXG4gICAgICBpZiAodGhpcy50b2FzdFRpbWVvdXQpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50b2FzdFRpbWVvdXQpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgY29tcG9uZW50IGNsZWFudXA6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiZHJhZ3BhcmVudDFcIiBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOmlzRGlhbHBhZEhpZGRlbiA/ICdub25lJzogJ2Jsb2NrJ31cIj5cclxuICA8bGliLWNhbGwtcHJvZ3Jlc3MgKm5nSWY9XCJpc0NhbGxJblByb2dyZXNzXCIgKGVuZENhbGxFdmVudCk9XCJlbmRDYWxsKClcIiAobWluaW1pc2VFdmVudCk9XCJvbk1pbmltaXNlKCRldmVudClcIlxyXG4gICAgKGluY29taW5nQ2FsbEluaXRpYXRlZCk9XCJuZXdJbmNvbWluZ0NhbGxJbml0aWF0ZWQoKVwiIFtuZXdJbmNvbWluZ0NhbGxEYXRhXT1cIm5ld0luY29taW5nQ2FsbERhdGFcIlxyXG4gICAgW2RldmljZUlkXT1cImRldmljZUlkXCIgW25ld0luY29taW5nQ2FsbHNMaXN0XT1cImluY29taW5nQ2FsbHNMaXN0XCIgW21pc3NDYWxsSW5mb109XCJtaXNzQ2FsbEluZm9cIlxyXG4gICAgKGluY29taW5nQ2FsbHNOZXdJbmZvKT1cImluY29taW5nQ2FsbHNOZXdJbmZvKCRldmVudClcIiBbc2VsZWN0ZWRDYWxsZXJJZF09XCJzZWxlY3RlZENhbGxlcklkXCJcclxuICAgIFtjYWxsZXJJZExpc3RdPVwiY2FsbGVySWRMaXN0XCIgW2NhbGxBY3Rpb25dPVwiY2FsbEFjdGlvblwiIFtjb25mZXJlbmNlQ2FsbEluZm9dPVwiY29uZmVyZW5jZUNhbGxJbmZvXCJcclxuICAgIFtuZXdDYWxsQ29uZmVyZW5jZV09XCJuZXdDYWxsQ29uZmVyZW5jZVwiIFt1c2VyU2V0dGluZ0luZm9dPVwidXNlclNldHRpbmdJbmZvXCJcclxuICAgIFtjYW5jZWxDb25uZWN0aW5nQWN0aW9uXT1cImNhbmNlbENvbm5lY3RpbmdBY3Rpb25cIlxyXG4gICAgW291dGdvaW5nQ29udGFjdE5hbWVdPVwib3V0Z29pbmdDb250YWN0TmFtZVwiXHJcbiAgICBbaW5jb21pbmdGcm9tSW1hZ2VdPVwiaW5jb21pbmdGcm9tSW1hZ2VcIlxyXG4gICAgKGVuZEluY29taW5nQ2FsbEV2ZW50KT1cImVuZEluY29taW5nQ2FsbCgkZXZlbnQpXCIgKGlzTG9hZGVyc2hvd24pPVwib25Mb2FkZXJzaG93KCRldmVudClcIiBbY2FsbERhdGFdPVwiY2FsbERhdGFcIj5cclxuICA8L2xpYi1jYWxsLXByb2dyZXNzPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkZXItd3JhcHBlciBvdXRnb2luZy1jYWxsLWxvYWRlclwiICpuZ0lmPVwiaXNMb2FkZXJzaG93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhY3RpdmUtY2FsbFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgcG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvbiBjYWxsLWFuaW1hdGlvbi1wbGF5XCI+XHJcbiAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwiY29udGFjdEltZ0ZvckxvYWRlclwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIj5cclxuICAgICAgICAgIDxoMSBzdHlsZT1cIm1hcmdpbi10b3A6IDhweDtcIj5Db25uZWN0aW5nLi4uPC9oMT5cclxuICAgICAgICAgIDxwIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCI+e3sgY29udGFjdE5hbWVGb3JMb2FkZXIgfHwgZGlhbGVkTnVtYmVyIH19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgKGNsaWNrKT1cImNhbmNlbENvbm5lY3RpbmdDYWxsKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J21pbmktZGlhbHBhZCc6IGlzTWluaW1pc2VkfVwiXHJcbiAgICAqbmdJZj1cIighaXNDYWxsSW5Qcm9ncmVzcyAmJiAhaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoKSAmJiAhaXNMb2FkZXJzaG93XCIgdGFiaW5kZXg9XCIwXCIgKGtleWRvd24pPVwiaGFuZGxlRGl2S2V5ZG93bigkZXZlbnQpXCI+XHJcbiAgICA8ZGl2IGlkPVwidG9wUGFuZWxcIiBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IGNhbGxlcklkTGlzdC5sZW5ndGggPyAnNDAlJyA6ICczOSUnfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1hbGVydHNcIiAqbmdJZj1cImRpYWxBbGVydC5zaG93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXNlbGVjdGlvbi1hbGVydFwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3tkaWFsQWxlcnQubXNnfX08L3A+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRpbWVzXCIgKGNsaWNrKT1cInNoYWtlRGVkaWNhdGVkQnRuID0gZmFsc2VcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1hbGVydHNcIiAqbmdJZj1cImNhbGxOdW1iZXJUb2FzdC5zaG93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxib3gtcG9wMSBhbGVydCBmYWRlIHNob3dcIiBbbmdDbGFzc109XCJjYWxsTnVtYmVyVG9hc3QudHlwZVwiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXktYXV0byB0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICBZb3UnciBjYWxsaW5nIDxzdHJvbmc+e3tjYWxsTnVtYmVyVG9hc3QuZGlzcGxheU51bX19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLWRpc2MgcC0wIHB4LTFcIiAoY2xpY2spPVwiY2FuY2VsRGlhbE51bWJlcigpXCI+Q2FuY2VsIENhbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAwIDE4cHhcIiAocGFzdGUpPVwiaGFuZGxlTnVtYmVyUGFzdGUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMlwiPlxyXG4gICAgICAgICAgPHA+PC9wPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cImhpZGVEaWFscGFkKClcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCIjZmZmZmZmXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJtMjU2LTIwMC01Ni01NiAyMjQtMjI0LTIyNC0yMjQgNTYtNTYgMjI0IDIyNCAyMjQtMjI0IDU2IDU2LTIyNCAyMjQgMjI0IDIyNC01NiA1Ni0yMjQtMjI0LTIyNCAyMjRaXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI2RpYWxJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIGEgbmFtZSBvciBudW1iZXJcIiB0YWJpbmRleD1cIjFcIiBbKG5nTW9kZWwpXT1cImRpYWxlZE51bWJlclwiXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGlhbElucHV0Q2hhbmdlKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJcIiBpZD1cImlucHV0LWNsZWFyLWJ0blwiIChjbGljayk9XCJjbGVhcklucHV0KClcIiAqbmdJZj1cInNob3dJbnB1dENsZWFyQnRuXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI1MHB4XCIgaGVpZ2h0PVwiMzBweFwiIHZpZXdCb3g9XCIwIDEwIDQwIDYwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmVyc2lvbj1cIjEuMVwiIGJhc2VQcm9maWxlPVwiZnVsbFwiXHJcbiAgICAgICAgICAgICAgZW5hYmxlLWJhY2tncm91bmQ9XCJuZXcgMCAwIDc2LjAwIDc2LjAwXCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzVkNjA2MVwiIGZpbGwtb3BhY2l0eT1cIjFcIiBzdHJva2Utd2lkdGg9XCIwLjJcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBkPVwiTSA0Ny41MjgyLDQyLjk0OTdMIDQyLjU3ODQsMzhMIDQ3LjUyODIsMzMuMDUwMkwgNDQuOTQ5NywzMC40NzE4TCA0MCwzNS40MjE2TCAzNS4wNTAyLDMwLjQ3MThMIDMyLjQ3MTgsMzMuMDUwMkwgMzcuNDIxNiwzOEwgMzIuNDcxOCw0Mi45NDk3TCAzNS4wNTAyLDQ1LjUyODJMIDQwLDQwLjU3ODRMIDQ0Ljk0OTcsNDUuNTI4MkwgNDcuNTI4Miw0Mi45NDk3IFogTSAxOC4wMTQ3LDQxLjUzNTVMIDI2Ljk2NDYsNTAuNDg1NEMgMjguMDY4Myw1MS41ODkgMjksNTIgMzEsNTJMIDUyLDUyQyA1NC43NjE0LDUyIDU3LDQ5Ljc2MTQgNTcsNDdMIDU3LDI5QyA1NywyNi4yMzg2IDU0Ljc2MTQsMjQgNTIsMjRMIDMxLDI0QyAyOSwyNCAyOC4wNjgzLDI0LjQxMTMgMjYuOTY0NiwyNS41MTQ5TCAxOC4wMTQ3LDM0LjQ2NDVDIDE2LjA2MjEsMzYuNDE3MSAxNi4wNjIxLDM5LjU4MjkgMTguMDE0Nyw0MS41MzU1IFogTSAzMSw0OUMgMzAsNDkgMjkuNjA0OCw0OC44ODI4IDI5LjA4Niw0OC4zNjQxTCAyMC4xMzYxLDM5LjQxNDJDIDE5LjM1NSwzOC42MzMyIDE5LjM1NSwzNy4zNjY5IDIwLjEzNjEsMzYuNTg1OEwgMjkuMDg2LDI3LjYzNjJDIDI5LjYwNDgsMjcuMTE3NSAzMCwyNyAzMSwyNy4wMDAxTCA1MiwyNy4wMDAxQyA1My4xMDQ2LDI3LjAwMDEgNTQsMjcuODk1NSA1NCwyOS4wMDAxTCA1NCw0Ny4wMDAxQyA1NCw0OC4xMDQ2IDUzLjEwNDYsNDkuMDAwMSA1Miw0OS4wMDAxTCAzMSw0OSBaIFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1pbmZvLWljb25cIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0b29sdGlwQ2xhc3M9XCJpbnB1dC10b29sdGlwXCJcclxuICAgICAgICAgICAgbmdiVG9vbHRpcD1cIkZvciBleHRlbnNpb24gZGlhbGluZywgdXNlIGZvcm1hdHMgbGlrZSArMTIzNDU2Nzg5MTAgeDEyMywrMTIzNDU2Nzg5MTAgZXh0LjEyMywgKzEyMzQ1Njc4OTEwLDEyM1wiPjxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImd1aWRlXCIgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoICYmICEoZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDIpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImd1aWRldGV4dFwiPlBsZWFzZSBlbnRlciBhIG51bWJlciBvciBzZWxlY3QgYSBzYXZlZCBjb250YWN0PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDExOXB4OyBvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWNhcmRcIiAqbmdGb3I9XCJsZXQgY29udGFjdCBvZiBmaWx0ZXJlZENvbnRhY3RMaXN0XCIgKGNsaWNrKT1cIm9uQ29udGFjdFNlbGVjdChjb250YWN0KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbWdcIj5cclxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY29udGFjdC5pbWFnZVwiIGFsdD1cInVzZXIgaW1hZ2VcIiBsb2FkaW5nPVwibGF6eVwiICpuZ0lmPVwiY29udGFjdC5pbWFnZSBlbHNlIGFscGhhTmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhbHBoYU5hbWU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbnRhY3QtYWxwaGEtaW1nXCI+e3tnZXRGaXJzdExldHRlcihjb250YWN0LmZpcnN0TmFtZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNHB4XCIgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2dldEZ1bGxOYW1lKGNvbnRhY3QpIH19PC9wPlxyXG4gICAgICAgICAgICAgIDxwPnt7Y29udGFjdC5zZWxlY3RlZE51bWJlci5udW1iZXJ9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWNhcmRcIiAqbmdJZj1cIiFmaWx0ZXJlZENvbnRhY3RMaXN0Lmxlbmd0aCAmJiBkaWFsZWROdW1iZXIubGVuZ3RoID4gMiAmJiAhaXNWYWxpZGF0aW9uTWVzc2FnZVNob3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvbnRhY3QtbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgIE5vIENvbnRhY3RzIEZvdW5kXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2F2ZS1jb250YWluZXJcIj5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwid2F2ZXNcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcclxuICAgICAgICAgIHZpZXdCb3g9XCIwIDI0IDE1MCAyOFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCIgc2hhcGUtcmVuZGVyaW5nPVwiYXV0b1wiPlxyXG4gICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgIDxwYXRoIGlkPVwiZ2VudGxlLXdhdmVcIiBkPVwiTS0xNjAgNDRjMzAgMCA1OC0xOCA4OC0xOHMgNTggMTggODggMTggNTgtMTggODgtMTggNTggMTggODggMTggdjQ0aC0zNTJ6XCIgLz5cclxuICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgIDxnIGNsYXNzPVwicGFyYWxsYXhcIj5cclxuICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjBcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgLz5cclxuICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjNcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjUpXCIgLz5cclxuICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjdcIiBmaWxsPVwiI2ZmZlwiIC8+XHJcbiAgICAgICAgICA8L2c+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJkaWFsLWJ0blwiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5cGFkVmFsO2xldCBpID0gaW5kZXhcIiAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyKGtleS5udW0pXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBrZXkudGV4dCA9PT0gJysnID8gJzNweCcgOiAnMCd9XCIgW3RhYmluZGV4XT1cImRpYWxlZE51bWJlci5sZW5ndGggPyAnMCc6IGkrMlwiIGxvbmdQcmVzc1xyXG4gICAgICAgIChsb25nUHJlc3MpPVwiYWRkTnVtYmVyKGtleS50ZXh0KVwiIHNob3J0UHJlc3MgKHNob3J0UHJlc3MpPVwiYWRkTnVtYmVyKGtleS5udW0pXCI+XHJcbiAgICAgICAge3trZXkubnVtfX1cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImtleS5udW0gPT0gMTtlbHNlIG90aGVyVGhhbk9uZVwiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB2b2ljZW1haWxcIj5cclxuICAgICAgICAgIHZvaWNlbWFpbFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI290aGVyVGhhbk9uZT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiIFtuZ0NsYXNzXT1cInsncGx1c1NpZ24nOiBrZXkudGV4dCA9PT0gJysnfVwiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6XHJcbiAgICAgICAgICAgICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxsLWJ0bi1jb250YWluZXJcIiAqbmdJZj1cIiFpc01pbmltaXNlZFwiIChtb3VzZWVudGVyKT1cIm9uQ2FsbEJ0bk1vdXNlRW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm9uQ2FsbEJ0bk1vdXNlTGVhdmUoJGV2ZW50KVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1idG5cIiAoY2xpY2spPVwiaW5pdGlhdGVDYWxsKClcIiBbdGFiaW5kZXhdPVwiZGlhbGVkTnVtYmVyLmxlbmd0aCA/ICcyJzogJzE1J1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydwb2ludGVyLWV2ZW50cyc6IGRpYWxlZE51bWJlci5sZW5ndGggJiYgc2VsZWN0ZWRDYWxsZXJJZCA/ICdhdXRvJyA6ICdub25lJywgJ29wYWNpdHknOiBkaWFsZWROdW1iZXIubGVuZ3RoICYmIHNlbGVjdGVkQ2FsbGVySWQgPyAnMScgOiAnMC41J31cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZVwiPlxyXG4gICAgICAgICAgY2FsbFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoICYmICFpc01pbmltaXNlZFwiIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNob3duQ2FsbGVySWRcIiAqbmdJZj1cInNlbGVjdGVkQ2FsbGVySWQ7IGVsc2UgYXNrQmxvY2tcIiAoY2xpY2spPVwidG9nZ2xlQ2FsbGVySWREaXYoKVwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIHNlbGVjdGVkQ2FsbGVySWQ/Lmlzb0NvZGU/LnRvTG93ZXJDYXNlKClcIj48L3NwYW4+XHJcbiAgICAgICAgICB7e3NlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcn19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Fza0Jsb2NrPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaG93bkNhbGxlcklkXCIgKGNsaWNrKT1cInRvZ2dsZUNhbGxlcklkRGl2KClcIiBbbmdDbGFzc109XCJ7ICd0aWx0LXNoYWtpbmcnOiBzaGFrZURlZGljYXRlZEJ0biB9XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMFwiPlNlbGVjdCBDMkMgbnVtYmVyPC9oNT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3duIG1sLTIgdGV4dC1ibHVlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjJweFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3VpZGUyXCIgKm5nSWY9XCJzaGFrZURlZGljYXRlZEJ0blwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ3VpZGV0ZXh0XCI+UGxlYXNlIHNlbGVjdCBhIG51bWJlciBmcm9tIGJlbG93IGRyb3Bkb3duPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoOyBlbHNlIG5vQ2FsbGVySWRNZXNzYWdlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXItaWQtbGlzdC1jb250YWluZXJcIiAqbmdJZj1cImNhbGxlcklkTGlzdC5sZW5ndGggJiYgIWlzTWluaW1pc2VkXCIgaWQ9XCJjYWxsZXJJZENvbnRhaW5lclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyd2aXNpYmxlJzogIWlzQ2FsbGVySWRIaWRkZW59XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblwiPlxyXG4gICAgICAgICAgPCEtLSA8aDQ+U2VsZWN0IEMyQyBTb2Z0cGhvbmUgTnVtYmVyPC9oND4gLS0+XHJcbiAgICAgICAgICA8aDQ+TWFrZSBvdXRnb2luZyBjYWxsIHVzaW5nPC9oND5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgKGNsaWNrKT1cImlzQ2FsbGVySWRIaWRkZW4gPSB0cnVlXCI+XHJcbiAgICAgICAgICAgIGNsb3NlXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbGVySWQgb2YgY2FsbGVySWRMaXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7J3NlbGVjdGVkQ2FsbGVySWRDbGFzcyc6IGNhbGxlcklkPy5udW1iZXIgPT0gc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyfVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVkaWNhdGVkTnVtU2VsZWN0KGNhbGxlcklkKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIGNhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge3tjYWxsZXJJZD8ubnVtYmVyfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3Bhbj57e2NhbGxlcklkPy5jb3VudHJ5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9DYWxsZXJJZE1lc3NhZ2U+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tY2FsbGVyLWlkLW1lc3NhZ2VcIj5UbyBtYWtlIGFueSB2b2ljZSBjYWxscywgcGxlYXNlIDxhXHJcbiAgICAgICAgICByb3V0ZXJMaW5rPVwiL2V4dGVuc2lvbi9kZWRpY2F0ZWRudW1iZXIve3t0b2tlbn19XCIgY2xhc3M9XCJjbGljay1oZXJlLWxpbmtcIlxyXG4gICAgICAgICAgdGl0bGU9XCJTZXR0aW5ncyA+IEMyQyBOdW1iZXJcIj5zdWJzY3JpYmU8L2E+IHRvIGEgdm9pY2UgY2FwYWJsZSBDMkMgTnVtYmVyLlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImRlZGljYXRlZC1vdmVybGF5XCIgKm5nSWY9XCJzaG93RGVkaWNhdGVkUG9wdXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZGVkaWNhdGVkTnVtUG9wdXBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgY2hvb3NlRGVkaWNhdGVkSGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDU+Q2hvb3NlIEMyQyBOdW1iZXI8L2g1PlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cInNob3dEZWRpY2F0ZWRQb3B1cCA9IGZhbHNlXCI+Y2xvc2U8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkZWRpY2F0ZWROdW1MaXN0XCI+XHJcbiAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGxlcklkIG9mIGNhbGxlcklkTGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7J3NlbGVjdGVkQ2FsbGVySWRDbGFzcyc6IGNhbGxlcklkPy5udW1iZXIgPT0gc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyfVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RlZGljYXRlZFBvcHVwID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIidmaSBmaS0nICsgY2FsbGVySWQ/Lmlzb0NvZGU/LnRvTG93ZXJDYXNlKClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7Y2FsbGVySWQ/Lm51bWJlcn19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7Y2FsbGVySWQ/LmNvdW50cnlOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|