stream-chat-angular 5.7.0 → 5.7.2
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/assets/i18n/en.d.ts +2 -0
- package/assets/version.d.ts +1 -1
- package/esm2020/assets/i18n/en.mjs +3 -1
- package/esm2020/assets/version.mjs +2 -2
- package/esm2020/lib/attachment.service.mjs +45 -2
- package/esm2020/lib/is-safari.mjs +2 -2
- package/esm2020/lib/message-input/message-input.component.mjs +3 -3
- package/esm2020/lib/message-list/message-list.component.mjs +4 -3
- package/esm2020/lib/voice-recorder/audio-recorder.service.mjs +2 -2
- package/fesm2015/stream-chat-angular.mjs +56 -8
- package/fesm2015/stream-chat-angular.mjs.map +1 -1
- package/fesm2020/stream-chat-angular.mjs +54 -8
- package/fesm2020/stream-chat-angular.mjs.map +1 -1
- package/lib/attachment.service.d.ts +12 -0
- package/lib/is-safari.d.ts +1 -1
- package/lib/message-list/message-list.component.d.ts +1 -0
- package/package.json +1 -1
- package/src/assets/i18n/en.ts +4 -0
- package/src/assets/version.ts +1 -1
|
@@ -86,6 +86,7 @@ export class MessageListComponent {
|
|
|
86
86
|
this.parsedDates = new Map();
|
|
87
87
|
this.isViewInited = false;
|
|
88
88
|
this.forceRepaintSubject = new Subject();
|
|
89
|
+
this.isSafari = isSafari();
|
|
89
90
|
this.scrollPosition$ = new BehaviorSubject('bottom');
|
|
90
91
|
this.messageNotificationJumpClicked = () => {
|
|
91
92
|
this.jumpToFirstUnreadMessage();
|
|
@@ -330,7 +331,7 @@ export class MessageListComponent {
|
|
|
330
331
|
scrollToBottom() {
|
|
331
332
|
this.scrollContainer.nativeElement.scrollTop =
|
|
332
333
|
this.scrollContainer.nativeElement.scrollHeight + 0.1;
|
|
333
|
-
if (isSafari) {
|
|
334
|
+
if (this.isSafari) {
|
|
334
335
|
this.forceRepaintSubject.next();
|
|
335
336
|
}
|
|
336
337
|
}
|
|
@@ -453,7 +454,7 @@ export class MessageListComponent {
|
|
|
453
454
|
(messageToAlignTo?.getBoundingClientRect()?.top || 0) -
|
|
454
455
|
(this.anchorMessageTopOffset || 0);
|
|
455
456
|
this.anchorMessageTopOffset = undefined;
|
|
456
|
-
if (isSafari) {
|
|
457
|
+
if (this.isSafari) {
|
|
457
458
|
this.forceRepaintSubject.next();
|
|
458
459
|
}
|
|
459
460
|
}
|
|
@@ -676,4 +677,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
676
677
|
type: HostBinding,
|
|
677
678
|
args: ['class']
|
|
678
679
|
}] } });
|
|
679
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFdBQVcsRUFDWCxLQUFLLEVBT0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLEdBQUcsRUFDSCxXQUFXLEVBQ1gsSUFBSSxFQUNKLEdBQUcsRUFDSCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQVl4QixPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7QUFFeEM7O0dBRUc7QUFPSCxNQUFNLE9BQU8sb0JBQW9CO0lBZ0gvQixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDOUMsVUFBNkIsRUFDN0IsTUFBYyxFQUNkLEtBQXdCO1FBTHhCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIs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SUcsU0FBUztzQkFBakIsS0FBSztnQkFLRyxrQ0FBa0M7c0JBQTFDLEtBQUs7Z0JBSUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUlHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFJRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBSUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU9HLDBDQUEwQztzQkFBbEQsS0FBSztnQkFJRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBaUNFLGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUdwQixvQkFBb0I7c0JBRDNCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQXdCckIsS0FBSztzQkFEaEIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHRha2UsXG4gIHRhcCxcbiAgdGhyb3R0bGVUaW1lLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBNZXNzYWdlQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgU3RyZWFtTWVzc2FnZSxcbiAgVHlwaW5nSW5kaWNhdG9yQ29udGV4dCxcbiAgRGF0ZVNlcGFyYXRvckNvbnRleHQsXG4gIFVucmVhZE1lc3NhZ2VzTm90aWZpY2F0aW9uQ29udGV4dCxcbiAgVW5yZWFkTWVzc2FnZXNJbmRpY2F0b3JDb250ZXh0LFxuICBWaXJ0dWFsaXplZExpc3RTY3JvbGxQb3NpdGlvbixcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEdyb3VwU3R5bGVzLCBHcm91cFN0eWxlIH0gZnJvbSAnLi9ncm91cC1zdHlsZXMnO1xuaW1wb3J0IHsgTWVzc2FnZVJlc3BvbnNlLCBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IGxpc3RVc2VycyB9IGZyb20gJy4uL2xpc3QtdXNlcnMnO1xuaW1wb3J0IHsgRGF0ZVBhcnNlclNlcnZpY2UgfSBmcm9tICcuLi9kYXRlLXBhcnNlci5zZXJ2aWNlJztcbmltcG9ydCB7IGlzT25TZXBhcmF0ZURhdGUgfSBmcm9tICcuLi9pcy1vbi1zZXBhcmF0ZS1kYXRlJztcbmltcG9ydCB7IFZpcnR1YWxpemVkTWVzc2FnZUxpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vdmlydHVhbGl6ZWQtbWVzc2FnZS1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNTYWZhcmkgfSBmcm9tICcuLi9pcy1zYWZhcmknO1xuXG4vKipcbiAqIFRoZSBgTWVzc2FnZUxpc3RgIGNvbXBvbmVudCByZW5kZXJzIGEgc2Nyb2xsYWJsZSBsaXN0IG9mIG1lc3NhZ2VzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlTGlzdENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgbGlzdCBzaG91bGQgZGlzcGxheSBjaGFubmVsIG1lc3NhZ2VzIG9yIFt0aHJlYWQgbWVzc2FnZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ21haW4nIHwgJ3RocmVhZCcgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBtZXNzYWdlcyBpbiB0aGUgbGlzdCwgYGJvdHRvbS10by10b3BgIG1lYW5zIG5ld2VzdCBtZXNzYWdlIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIG1lc3NhZ2UgbGlzdCBhbmQgdXNlcnMgc2Nyb2xsIHVwd2FyZHMgdG8gbG9hZCBvbGRlciBtZXNzYWdlc1xuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0aW9uOiAnYm90dG9tLXRvLXRvcCcgfCAndG9wLXRvLWJvdHRvbScgPSAnYm90dG9tLXRvLXRvcCc7XG4gIC8qKlxuICAgKiBZb3UgY2FuIGhpZGUgdGhlIFwianVtcCB0byBsYXRlc3RcIiBidXR0b24gd2hpbGUgc2Nyb2xsaW5nLiBBIHBvdGVudGlhbCB1c2UtY2FzZSBmb3IgdGhpcyBpbnB1dCB3b3VsZCBiZSB0byBbd29ya2Fyb3VuZCBhIGtub3duIGlzc3VlIG9uIGlPUyBTYWZhciB3ZWJ2aWV3XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvaXNzdWVzLzQxOClcbiAgICpcbiAgICovXG4gIEBJbnB1dCgpIGhpZGVKdW1wVG9MYXRlc3RCdXR0b25EdXJpbmdTY3JvbGwgPSBmYWxzZTtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCBkYXRlIHNlcGFyYXRvcnMgd2lsbCBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlEYXRlU2VwYXJhdG9yID0gdHJ1ZTtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCB1bnJlYWQgaW5kaWNhdG9yIHdpbGwgYmUgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5VW5yZWFkU2VwYXJhdG9yID0gdHJ1ZTtcbiAgLyoqXG4gICAqIElmIGRhdGUgc2VwYXJhdG9ycyBhcmUgZGlzcGxheWVkLCB5b3UgY2FuIHNldCB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgZGF0ZSB0ZXh0LlxuICAgKi9cbiAgQElucHV0KCkgZGF0ZVNlcGFyYXRvclRleHRQb3M6ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdjZW50ZXInO1xuICAvKipcbiAgICogYGxhc3QtbWVzc2FnZWAgb3B0aW9uIHdpbGwgb3BlbiB0aGUgbWVzc2FnZSBsaXN0IGF0IHRoZSBsYXN0IG1lc3NhZ2UsIGBsYXN0LXJlYWQtbWVzc2FnZWAgd2lsbCBvcGVuIHRoZSBsaXN0IGF0IHRoZSBsYXN0IHVucmVhZCBtZXNzYWdlLiBUaGlzIG9wdGlvbiBvbmx5IHdvcmtzIGlmIG1vZGUgaXMgYG1haW5gLlxuICAgKi9cbiAgQElucHV0KCkgb3Blbk1lc3NhZ2VMaXN0QXQ6ICdsYXN0LW1lc3NhZ2UnIHwgJ2xhc3QtcmVhZC1tZXNzYWdlJyA9XG4gICAgJ2xhc3QtbWVzc2FnZSc7XG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBoYXMgdW5yZWFkIG1lc3NhZ2VzIHdoZW4gdGhleSBvcGVuIHRoZSBjaGFubmVsIHRoZSBVSSBzaG93cyB0aGUgdW5yZWFkIGluZGljYXRvciAvIG5vdGlmaWNhdGlvbiB3aGljaCBmZWF0dXJlcyB0aGUgdW5yZWFkIGNvdW50IGJ5IGRlZmF1bHQuIFRoaXMgY291bnQgd2lsbCBiZSBpbmNyZWFzZWQgZXZlcnkgdGltZSBhIHVzZXIgcmVjZWl2ZXMgYSBuZXcgbWVzc2FnZS4gSWYgeW91IGRvbid0IHdhbnQgdG8gc2hvdyB0aGUgdW5yZWFkIGNvdW50LCB5b3UgY2FuIHR1cm4gdGhhdCBvZmYuXG4gICAqXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGZvciBgbWFpbmAgbW9kZSwgYXMgdGhyZWFkcyBkb2Vzbid0IGhhdmUgcmVhZCBpbmZyb21hdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIGhpZGVVbnJlYWRDb3VudEZvck5vdGlmaWNhdGlvbkFuZEluZGljYXRvciA9IGZhbHNlO1xuICAvKipcbiAgICogWW91IGNhbiB0dXJuIG9uIGFuZCBvZmYgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIHRoYXQgc2lnbmFscyB0byB1c2VycyB0aGF0IG1vcmUgbWVzc2FnZXMgYXJlIGJlaW5nIGxvYWRlZCB0byB0aGUgbWVzc2FnZSBsaXN0XG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5TG9hZGluZ0luZGljYXRvciA9IHRydWU7XG4gIHR5cGluZ0luZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxUeXBpbmdJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGN1c3RvbURhdGVTZXBhcmF0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8RGF0ZVNlcGFyYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBjdXN0b21uZXdNZXNzYWdlc0luZGljYXRvclRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8VW5yZWFkTWVzc2FnZXNJbmRpY2F0b3JDb250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBjdXN0b21uZXdNZXNzYWdlc05vdGlmaWNhdGlvblRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8VW5yZWFkTWVzc2FnZXNOb3RpZmljYXRpb25Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBlbXB0eU1haW5NZXNzYWdlTGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBlbXB0eVRocmVhZE1lc3NhZ2VMaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIG1lc3NhZ2VzJCE6IE9ic2VydmFibGU8U3RyZWFtTWVzc2FnZVtdPjtcbiAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBpc0VtcHR5ID0gdHJ1ZTtcbiAgbmV3TWVzc2FnZUNvdW50V2hpbGVCZWluZ1Njcm9sbGVkID0gMDtcbiAgaXNVc2VyU2Nyb2xsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGdyb3VwU3R5bGVzOiBHcm91cFN0eWxlW10gPSBbXTtcbiAgaXNOZXh0TWVzc2FnZU9uU2VwYXJhdGVEYXRlOiBib29sZWFuW10gPSBbXTtcbiAgbGFzdFNlbnRNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGFyZW50TWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgaGlnaGxpZ2h0ZWRNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbG9hZGluZ1N0YXRlOiAnaWRsZScgfCAnbG9hZGluZy10b3AnIHwgJ2xvYWRpbmctYm90dG9tJyA9ICdpZGxlJztcbiAgc2Nyb2xsRW5kVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBsYXN0UmVhZE1lc3NhZ2VJZD86IHN0cmluZztcbiAgaXNVbnJlYWROb3RpZmljYXRpb25WaXNpYmxlID0gdHJ1ZTtcbiAgZmlyc3RVbnJlYWRNZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIHVucmVhZENvdW50PzogbnVtYmVyO1xuICBpc0p1bXBpbmdUb0xhdGVzdFVucmVhZE1lc3NhZ2UgPSBmYWxzZTtcbiAgaXNKdW1wVG9MYXRlc3RCdXR0b25WaXNpYmxlID0gdHJ1ZTtcbiAgaXNKdW1waW5nVG9NZXNzYWdlID0gZmFsc2U7XG4gIHNjcm9sbCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBAVmlld0NoaWxkKCdzY3JvbGxDb250YWluZXInKVxuICBwcml2YXRlIHNjcm9sbENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdwYXJlbnRNZXNzYWdlRWxlbWVudCcpXG4gIHByaXZhdGUgcGFyZW50TWVzc2FnZUVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgcHJpdmF0ZSBpc05ld01lc3NhZ2VTZW50QnlVc2VyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBuZXdNZXNzYWdlU3Vic2NyaXB0aW9uOiB7IHVuc3Vic2NyaWJlOiAoKSA9PiB2b2lkIH0gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlcnNUeXBpbmdJbkNoYW5uZWwkITogT2JzZXJ2YWJsZTxcbiAgICBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXVxuICA+O1xuICBwcml2YXRlIHVzZXJzVHlwaW5nSW5UaHJlYWQkITogT2JzZXJ2YWJsZTxcbiAgICBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXVxuICA+O1xuICBwcml2YXRlIGlzTGF0ZXN0TWVzc2FnZUluTGlzdCA9IHRydWU7XG4gIHByaXZhdGUgY2hhbm5lbElkPzogc3RyaW5nO1xuICBwcml2YXRlIHBhcnNlZERhdGVzID0gbmV3IE1hcDxEYXRlLCBzdHJpbmc+KCk7XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgY2hlY2tJZlVucmVhZE5vdGlmaWNhdGlvbklzVmlzaWJsZVRpbWVvdXQ/OiBSZXR1cm5UeXBlPFxuICAgIHR5cGVvZiBzZXRUaW1lb3V0XG4gID47XG4gIHByaXZhdGUganVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJpbGl0eVRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBmb3JjZVJlcGFpbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBtZXNzYWdlSWRUb0FuY2hvclRvPzogc3RyaW5nO1xuICBwcml2YXRlIGFuY2hvck1lc3NhZ2VUb3BPZmZzZXQ/OiBudW1iZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIHByaXZhdGUgZ2V0IGNsYXNzKCkge1xuICAgIHJldHVybiBgc3RyLWNoYXQtYW5ndWxhcl9fbWFpbi1wYW5lbC1pbm5lciBzdHItY2hhdC1hbmd1bGFyX19tZXNzYWdlLWxpc3QtaG9zdCBzdHItY2hhdF9fbWFpbi1wYW5lbC1pbm5lciAke1xuICAgICAgdGhpcy5pc0VtcHR5ID8gJ3N0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2UtbGlzdC1ob3N0LS1lbXB0eScgOiAnJ1xuICAgIH1gO1xuICB9XG4gIHByaXZhdGUgdmlydHVhbGl6ZWRMaXN0PzogVmlydHVhbGl6ZWRNZXNzYWdlTGlzdFNlcnZpY2U7XG4gIHByaXZhdGUgc2Nyb2xsUG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWaXJ0dWFsaXplZExpc3RTY3JvbGxQb3NpdGlvbj4oXG4gICAgJ2JvdHRvbSdcbiAgKTtcbiAgcHJpdmF0ZSBqdW1wVG9JdGVtU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBhcnNlcjogRGF0ZVBhcnNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICAgIHRoaXMudXNlcnNUeXBpbmdJblRocmVhZCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVzZXJzVHlwaW5nSW5UaHJlYWQkO1xuICB9XG5cbiAgbWVzc2FnZU5vdGlmaWNhdGlvbkp1bXBDbGlja2VkID0gKCkgPT4ge1xuICAgIHRoaXMuanVtcFRvRmlyc3RVbnJlYWRNZXNzYWdlKCk7XG4gICAgdGhpcy5pc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgPSBmYWxzZTtcbiAgfTtcblxuICBtZXNzYWdlTm90aWZpY2F0aW9uRGlzbWlzc0NsaWNrZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5pc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgPSBmYWxzZTtcbiAgfTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuZm9yY2VSZXBhaW50U3ViamVjdC5waXBlKHRocm90dGxlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JjZVJlcGFpbnQoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbCQuc3Vic2NyaWJlKChjaGFubmVsKSA9PiB7XG4gICAgICAgIGxldCBpc05ld0NoYW5uZWwgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbElkICE9PSBjaGFubmVsPy5pZCkge1xuICAgICAgICAgIGlzTmV3Q2hhbm5lbCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlVucmVhZE5vdGlmaWNhdGlvbklzVmlzaWJsZVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNoZWNrSWZVbnJlYWROb3RpZmljYXRpb25Jc1Zpc2libGVUaW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnBhcnNlZERhdGVzID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuc2V0TWVzc2FnZXMkKCk7XG4gICAgICAgICAgdGhpcy5jaGFubmVsSWQgPSBjaGFubmVsPy5pZDtcbiAgICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnbWFpbicpIHtcbiAgICAgICAgICBjb25zdCBsYXN0UmVhZE1lc3NhZ2VJZCA9XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWxMYXN0UmVhZE1lc3NhZ2VJZDtcbiAgICAgICAgICBjb25zdCB1bnJlYWRDb3VudCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbFVucmVhZENvdW50O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxhc3RSZWFkTWVzc2FnZUlkICE9PSB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkIHx8XG4gICAgICAgICAgICB1bnJlYWRDb3VudCAhPT0gdGhpcy51bnJlYWRDb3VudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sYXN0UmVhZE1lc3NhZ2VJZCA9IGxhc3RSZWFkTWVzc2FnZUlkO1xuICAgICAgICAgICAgdGhpcy51bnJlYWRDb3VudCA9IHVucmVhZENvdW50IHx8IDA7XG4gICAgICAgICAgICBpZiAoaXNOZXdDaGFubmVsICYmIHRoaXMubGFzdFJlYWRNZXNzYWdlSWQpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMub3Blbk1lc3NhZ2VMaXN0QXQgPT09ICdsYXN0LXJlYWQtbWVzc2FnZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb0ZpcnN0VW5yZWFkTWVzc2FnZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdhaXQgdGlsbCBtZXNzYWdlcyBhbmQgdGhlIHVucmVhZCBiYW5uZXIgaXMgcmVuZGVyZWRcbiAgICAgICAgICAgICAgICAvLyBJZiB1bnJlYWQgYmFubmVyIGlzbid0IHZpc2libGUgb24gdGhlIHNjcmVlbiwgd2UgZGlzcGxheSB0aGUgdW5yZWFkIG5vdGlmaWNhaW9uXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBiYW5uZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICdzdHJlYW0tY2hhdC1uZXctbWVzc2FnZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhYmFubmVyRWxlbWVudCB8fFxuICAgICAgICAgICAgICAgICAgICBiYW5uZXJFbGVtZW50Py5vZmZzZXRUb3AgPFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVbnJlYWROb3RpZmljYXRpb25WaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFJlYWRNZXNzYWdlSWQpIHtcbiAgICAgICAgICB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMudW5yZWFkQ291bnQgPSAwO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGVzID0gY2hhbm5lbD8uZGF0YT8ub3duX2NhcGFiaWxpdGllcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0ZXNTdHJpbmcgPSBbLi4uKGNhcGFiaWxpdGVzIHx8IFtdKV0uc29ydCgpLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbmFibGVkQWN0aW9uc1N0cmluZyA9IFsuLi4odGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMgfHwgW10pXVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIGlmIChjYXBhYmlsaXRlc1N0cmluZyAhPT0gZW5hYmxlZEFjdGlvbnNTdHJpbmcpIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyA9IGNhcGFiaWxpdGVzIHx8IFtdO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV3TWVzc2FnZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICB0aGlzLm5ld01lc3NhZ2VTdWJzY3JpcHRpb24gPSBjaGFubmVsLm9uKCdtZXNzYWdlLm5ldycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubmV3TWVzc2FnZVJlY2VpdmVkKGV2ZW50Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZVBhcmVudE1lc3NhZ2UkLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVzc2FnZSAmJlxuICAgICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSAmJlxuICAgICAgICAgIG1lc3NhZ2UuaWQgIT09IHRoaXMucGFyZW50TWVzc2FnZS5pZCAmJlxuICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnRNZXNzYWdlID09PSBtZXNzYWdlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZVRlbXBsYXRlJC5zdWJzY3JpYmUoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VUZW1wbGF0ZSA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXNzYWdlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5kYXRlU2VwYXJhdG9yVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VzdG9tRGF0ZVNlcGFyYXRvclRlbXBsYXRlID09PSB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1c3RvbURhdGVTZXBhcmF0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5uZXdNZXNzYWdlc0luZGljYXRvclRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1c3RvbW5ld01lc3NhZ2VzSW5kaWNhdG9yVGVtcGxhdGUgPT09IHRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VzdG9tbmV3TWVzc2FnZXNJbmRpY2F0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5uZXdNZXNzYWdlc05vdGlmaWNhdGlvblRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1c3RvbW5ld01lc3NhZ2VzTm90aWZpY2F0aW9uVGVtcGxhdGUgPT09IHRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VzdG9tbmV3TWVzc2FnZXNOb3RpZmljYXRpb25UZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5lbXB0eU1haW5NZXNzYWdlTGlzdFBsYWNlaG9sZGVyJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQ2hhbmdlZCA9IHRoaXMuZW1wdHlNYWluTWVzc2FnZUxpc3RUZW1wbGF0ZSAhPT0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5lbXB0eU1haW5NZXNzYWdlTGlzdFRlbXBsYXRlID0gdGVtcGxhdGUgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoaXNDaGFuZ2VkICYmIHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5VGhyZWFkTWVzc2FnZUxpc3RQbGFjZWhvbGRlciQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0NoYW5nZWQgPSB0aGlzLmVtcHR5VGhyZWFkTWVzc2FnZUxpc3RUZW1wbGF0ZSAhPT0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5lbXB0eVRocmVhZE1lc3NhZ2VMaXN0VGVtcGxhdGUgPSB0ZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICAgIGlmIChpc0NoYW5nZWQgJiYgdGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tb2RlIHx8IGNoYW5nZXMuZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgIHRoaXMuc2V0TWVzc2FnZXMkKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmRpcmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuanVtcFRvTGF0ZXN0TWVzc2FnZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlld0luaXRlZCA9IHRydWU7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+XG4gICAgICAgIHRoaXMuc2Nyb2xsZWQoKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5pc0p1bXBpbmdUb01lc3NhZ2UpIHtcbiAgICAgIHRoaXMuaXNOZXdNZXNzYWdlU2VudEJ5VXNlciA9IGZhbHNlO1xuICAgICAgdGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5hbmNob3JNZXNzYWdlVG9wT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvICYmIHRoaXMubG9hZGluZ1N0YXRlID09PSAnaWRsZScpIHtcbiAgICAgIHRoaXMucHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAoIXRoaXMuaXNVc2VyU2Nyb2xsZWQgJiZcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudD8uc2Nyb2xsSGVpZ2h0ID5cbiAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAgICAgdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpICE9PVxuICAgICAgICAgICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnID8gJ2JvdHRvbScgOiAndG9wJykpIHx8XG4gICAgICAodGhpcy5pc1VzZXJTY3JvbGxlZCAmJiB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuanVtcFRvTGF0ZXN0TWVzc2FnZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMubmV3TWVzc2FnZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5zY3JvbGxFbmRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxFbmRUaW1lb3V0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tJZlVucmVhZE5vdGlmaWNhdGlvbklzVmlzaWJsZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNoZWNrSWZVbnJlYWROb3RpZmljYXRpb25Jc1Zpc2libGVUaW1lb3V0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuanVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJpbGl0eVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmp1bXBUb0xhdGVzdEJ1dHRvblZpc2liaWxpdHlUaW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy5kaXNwb3NlVmlydHVhbGl6ZWRMaXN0KCk7XG4gIH1cblxuICB0cmFja0J5TWVzc2FnZUlkKF86IG51bWJlciwgaXRlbTogU3RyZWFtTWVzc2FnZSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgdHJhY2tCeVVzZXJJZChfOiBudW1iZXIsIHVzZXI6IFVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiB1c2VyLmlkO1xuICB9XG5cbiAganVtcFRvTGF0ZXN0TWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3QpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCdcbiAgICAgICAgPyB0aGlzLnNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgOiB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5qdW1wVG9NZXNzYWdlKFxuICAgICAgICAnbGF0ZXN0JyxcbiAgICAgICAgdGhpcy5tb2RlID09PSAndGhyZWFkJyA/IHRoaXMucGFyZW50TWVzc2FnZT8uaWQgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9Cb3R0b20oKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgKyAwLjE7XG4gICAgaWYgKGlzU2FmYXJpKSB7XG4gICAgICB0aGlzLmZvcmNlUmVwYWludFN1YmplY3QubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvVG9wKCkge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgfVxuXG4gIHNjcm9sbGVkKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID09PVxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLmlzSnVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmlzSnVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5ld01lc3NhZ2VDb3VudFdoaWxlQmVpbmdTY3JvbGxlZCA9IDA7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjcm9sbCQubmV4dCgpO1xuICAgIGxldCBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKTtcblxuICAgIGNvbnN0IGlzVXNlclNjcm9sbGVkID1cbiAgICAgICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnXG4gICAgICAgID8gc2Nyb2xsUG9zaXRpb24gIT09ICdib3R0b20nXG4gICAgICAgIDogc2Nyb2xsUG9zaXRpb24gIT09ICd0b3AnKSB8fCAhdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3Q7XG4gICAgaWYgKHRoaXMuaXNVc2VyU2Nyb2xsZWQgIT09IGlzVXNlclNjcm9sbGVkKSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmlzVXNlclNjcm9sbGVkID0gaXNVc2VyU2Nyb2xsZWQ7XG4gICAgICAgIGlmICghdGhpcy5pc1VzZXJTY3JvbGxlZCkge1xuICAgICAgICAgIHRoaXMubmV3TWVzc2FnZUNvdW50V2hpbGVCZWluZ1Njcm9sbGVkID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVKdW1wVG9MYXRlc3RCdXR0b25EdXJpbmdTY3JvbGwpIHtcbiAgICAgIGlmICh0aGlzLmlzSnVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmlzSnVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmp1bXBUb0xhdGVzdEJ1dHRvblZpc2liaWxpdHlUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmp1bXBUb0xhdGVzdEJ1dHRvblZpc2liaWxpdHlUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuanVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJpbGl0eVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VyU2Nyb2xsZWQpIHtcbiAgICAgICAgICB0aGlzLmlzSnVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5qdW1wVG9MYXRlc3RCdXR0b25WaXNpYmlsaXR5VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2U2Nyb2xsUG9zaXRpb24gPSB0aGlzLnNjcm9sbFBvc2l0aW9uJC5nZXRWYWx1ZSgpO1xuXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScpIHtcbiAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAnYm90dG9tJztcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gJ3RvcCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgIXRoaXMuaXNKdW1waW5nVG9NZXNzYWdlKSB7XG4gICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09ICd0b3AnIHx8IHNjcm9sbFBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgICB0aGlzLnZpcnR1YWxpemVkTGlzdD8udmlydHVhbGl6ZWRJdGVtcyRcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VJZFRvQW5jaG9yVG8gPVxuICAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9PT0gJ3RvcCdcbiAgICAgICAgICAgICAgICA/IGl0ZW1zWzBdPy5pZFxuICAgICAgICAgICAgICAgIDogaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LmlkO1xuICAgICAgICAgICAgdGhpcy5hbmNob3JNZXNzYWdlVG9wT2Zmc2V0ID0gZG9jdW1lbnRcbiAgICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKHRoaXMubWVzc2FnZUlkVG9BbmNob3JUbylcbiAgICAgICAgICAgICAgPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8udG9wO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbiQubmV4dChzY3JvbGxQb3NpdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBqdW1wVG9GaXJzdFVucmVhZE1lc3NhZ2UoKSB7XG4gICAgaWYgKCF0aGlzLmxhc3RSZWFkTWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNKdW1waW5nVG9MYXRlc3RVbnJlYWRNZXNzYWdlID0gdHJ1ZTtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UuanVtcFRvTWVzc2FnZSh0aGlzLmxhc3RSZWFkTWVzc2FnZUlkKTtcbiAgfVxuXG4gIGdldFR5cGluZ0luZGljYXRvckNvbnRleHQoKTogVHlwaW5nSW5kaWNhdG9yQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXJzVHlwaW5nJDogdGhpcy51c2Vyc1R5cGluZyQsXG4gICAgfTtcbiAgfVxuXG4gIGdldFR5cGluZ0luZGljYXRvclRleHQodXNlcnM6IFVzZXJSZXNwb25zZVtdKSB7XG4gICAgY29uc3QgdGV4dCA9IGxpc3RVc2Vycyh1c2Vycyk7XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGlzU2VudEJ5Q3VycmVudFVzZXIobWVzc2FnZT86IFN0cmVhbU1lc3NhZ2UpIHtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2UudXNlcj8uaWQgPT09IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudC51c2VyPy5pZDtcbiAgfVxuXG4gIHBhcnNlRGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMucGFyc2VkRGF0ZXMuaGFzKGRhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZWREYXRlcy5nZXQoZGF0ZSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLmRhdGVQYXJzZXIucGFyc2VEYXRlKGRhdGUpO1xuICAgIHRoaXMucGFyc2VkRGF0ZXMuc2V0KGRhdGUsIHBhcnNlZERhdGUpO1xuICAgIHJldHVybiBwYXJzZWREYXRlO1xuICB9XG5cbiAgZ2V0IHJlcGx5Q291bnRQYXJhbSgpIHtcbiAgICByZXR1cm4geyByZXBseUNvdW50OiB0aGlzLnBhcmVudE1lc3NhZ2U/LnJlcGx5X2NvdW50IH07XG4gIH1cblxuICBnZXQgZW1wdHlMaXN0VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICA/IHRoaXMuZW1wdHlNYWluTWVzc2FnZUxpc3RUZW1wbGF0ZVxuICAgICAgOiB0aGlzLmVtcHR5VGhyZWFkTWVzc2FnZUxpc3RUZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZUlkVG9BbmNob3JUbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlVG9BbGlnblRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvKTtcbiAgICB0aGlzLm1lc3NhZ2VJZFRvQW5jaG9yVG8gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgKz1cbiAgICAgIChtZXNzYWdlVG9BbGlnblRvPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8udG9wIHx8IDApIC1cbiAgICAgICh0aGlzLmFuY2hvck1lc3NhZ2VUb3BPZmZzZXQgfHwgMCk7XG4gICAgdGhpcy5hbmNob3JNZXNzYWdlVG9wT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc1NhZmFyaSkge1xuICAgICAgdGhpcy5mb3JjZVJlcGFpbnRTdWJqZWN0Lm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcmNlUmVwYWludCgpIHtcbiAgICAvLyBTb2x2ZXMgdGhlIGlzc3VlIG9mIGVtcHR5IHNjcmVlbiBvbiBTYWZhcmkgd2hlbiBzY3JvbGxpbmdcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7IC8vIG5vIG5lZWQgdG8gc3RvcmUgdGhpcyBhbnl3aGVyZSwgdGhlIHJlZmVyZW5jZSBpcyBlbm91Z2hcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2Nyb2xsUG9zaXRpb24oKTogJ3RvcCcgfCAnYm90dG9tJyB8ICdtaWRkbGUnIHtcbiAgICBsZXQgcG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgfCAnbWlkZGxlJyA9ICdtaWRkbGUnO1xuICAgIGlmIChcbiAgICAgIE1hdGguZmxvb3IodGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3ApIDw9XG4gICAgICAodGhpcy5wYXJlbnRNZXNzYWdlRWxlbWVudD8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMClcbiAgICApIHtcbiAgICAgIHBvc2l0aW9uID0gJ3RvcCc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE1hdGguY2VpbCh0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCkgK1xuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCArXG4gICAgICAgIDEgPj1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgKSB7XG4gICAgICBwb3NpdGlvbiA9ICdib3R0b20nO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWVzc2FnZXMkKCkge1xuICAgIHRoaXMuZGlzcG9zZVZpcnR1YWxpemVkTGlzdCgpO1xuICAgIHRoaXMudmlydHVhbGl6ZWRMaXN0ID0gbmV3IFZpcnR1YWxpemVkTWVzc2FnZUxpc3RTZXJ2aWNlKFxuICAgICAgdGhpcy5tb2RlLFxuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbiQsXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlXG4gICAgKTtcbiAgICB0aGlzLnF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnZpcnR1YWxpemVkTGlzdC5xdWVyeVN0YXRlJC5zdWJzY3JpYmUoXG4gICAgICAocXVlcnlTdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgbWFwcGVkU3RhdGU6ICdpZGxlJyB8ICdsb2FkaW5nLXRvcCcgfCAnbG9hZGluZy1ib3R0b20nID0gJ2lkbGUnO1xuICAgICAgICBpZiAocXVlcnlTdGF0ZS5zdGF0ZS5pbmNsdWRlcygnbG9hZGluZycpKSB7XG4gICAgICAgICAgbWFwcGVkU3RhdGUgPSAocXVlcnlTdGF0ZS5zdGF0ZSBhcyAnbG9hZGluZy10b3AnKSB8fCAnbG9hZGluZy1ib3R0b20nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZWRTdGF0ZSAhPT0gdGhpcy5sb2FkaW5nU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IG1hcHBlZFN0YXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLm1lc3NhZ2VzJCA9IHRoaXMudmlydHVhbGl6ZWRMaXN0LnZpcnR1YWxpemVkSXRlbXMkLnBpcGUoXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkge1xuICAgICAgICAgIC8vIGNkUmVmLmRldGVjdENoYW5nZXMoKSBpc24ndCBlbm91Z2ggaGVyZSwgdGVzdCB3aWxsIGZhaWxcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmlzRW1wdHkgPSBmYWxzZSksIDApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcCgobWVzc2FnZXMpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuaXNKdW1waW5nVG9MYXRlc3RVbnJlYWRNZXNzYWdlICYmXG4gICAgICAgICAgIXRoaXMuZmlyc3RVbnJlYWRNZXNzYWdlSWQgJiZcbiAgICAgICAgICB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGxhc3RSZWFkSW5kZXggPSBtZXNzYWdlcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAobSkgPT4gbS5pZCA9PT0gdGhpcy5sYXN0UmVhZE1lc3NhZ2VJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5maXJzdFVucmVhZE1lc3NhZ2VJZCA9XG4gICAgICAgICAgICBtZXNzYWdlc1tsYXN0UmVhZEluZGV4ICsgMV0/LmlkIHx8IHRoaXMubGFzdFJlYWRNZXNzYWdlSWQ7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKFxuICAgICAgICAobWVzc2FnZXMpID0+XG4gICAgICAgICAgKHRoaXMubGFzdFNlbnRNZXNzYWdlSWQgPSBbLi4ubWVzc2FnZXNdXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgKG0pID0+XG4gICAgICAgICAgICAgICAgbS51c2VyPy5pZCA9PT0gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5jaGF0Q2xpZW50Py51c2VyPy5pZCAmJlxuICAgICAgICAgICAgICAgIG0uc3RhdHVzICE9PSAnc2VuZGluZydcbiAgICAgICAgICAgICk/LmlkKVxuICAgICAgKSxcbiAgICAgIHRhcCgobWVzc2FnZXMpID0+IHtcbiAgICAgICAgY29uc3QgbGF0ZXN0TWVzc2FnZUluTGlzdCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsO1xuICAgICAgICBjb25zdCBtZXNzYWdlc0Zyb21TdGF0ZSA9XG4gICAgICAgICAgKHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgICAgICA/IGNoYW5uZWw/LnN0YXRlLmxhdGVzdE1lc3NhZ2VzXG4gICAgICAgICAgICA6IGNoYW5uZWw/LnN0YXRlLnRocmVhZHNbdGhpcy5wYXJlbnRNZXNzYWdlPy5pZCB8fCAnJ10pIHx8IFtdO1xuICAgICAgICB0aGlzLmlzTGF0ZXN0TWVzc2FnZUluTGlzdCA9XG4gICAgICAgICAgIWxhdGVzdE1lc3NhZ2VJbkxpc3QgfHxcbiAgICAgICAgICBsYXRlc3RNZXNzYWdlSW5MaXN0LmNpZCAhPT0gY2hhbm5lbD8uY2lkIHx8XG4gICAgICAgICAgbGF0ZXN0TWVzc2FnZUluTGlzdD8uaWQgPT09XG4gICAgICAgICAgICBtZXNzYWdlc0Zyb21TdGF0ZVttZXNzYWdlc0Zyb21TdGF0ZS5sZW5ndGggLSAxXT8uaWQ7XG4gICAgICAgIGlmICghdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3QpIHtcbiAgICAgICAgICB0aGlzLmlzVXNlclNjcm9sbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBtYXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnXG4gICAgICAgICAgPyBtZXNzYWdlc1xuICAgICAgICAgIDogWy4uLm1lc3NhZ2VzXS5yZXZlcnNlKCk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgobWVzc2FnZXMpID0+IHtcbiAgICAgICAgdGhpcy5ncm91cFN0eWxlcyA9IG1lc3NhZ2VzLm1hcCgobSwgaSkgPT5cbiAgICAgICAgICBnZXRHcm91cFN0eWxlcyhtLCBtZXNzYWdlc1tpIC0gMV0sIG1lc3NhZ2VzW2kgKyAxXSwge1xuICAgICAgICAgICAgbGFzdFJlYWRNZXNzYWdlSWQ6IHRoaXMubGFzdFJlYWRNZXNzYWdlSWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc05leHRNZXNzYWdlT25TZXBhcmF0ZURhdGUgPSBtZXNzYWdlcy5tYXAoKG0sIGkpID0+XG4gICAgICAgICAgdGhpcy5jaGVja0lmT25TZXBhcmF0ZURhdGVzKG0sIG1lc3NhZ2VzW2kgKyAxXSlcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICAgIGlmICh0aGlzLnZpcnR1YWxpemVkTGlzdD8uanVtcFRvSXRlbSQpIHtcbiAgICAgIHRoaXMuanVtcFRvSXRlbVN1YnNjcmlwdGlvbiA9IHRoaXMudmlydHVhbGl6ZWRMaXN0Lmp1bXBUb0l0ZW0kXG4gICAgICAgIC5waXBlKGZpbHRlcigoanVtcFRvTWVzc2FnZSkgPT4gISFqdW1wVG9NZXNzYWdlLml0ZW0/LmlkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoanVtcFRvTWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGxldCBtZXNzYWdlSWQgPSBqdW1wVG9NZXNzYWdlLml0ZW0/LmlkO1xuICAgICAgICAgIGlmIChtZXNzYWdlSWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSnVtcGluZ1RvTGF0ZXN0VW5yZWFkTWVzc2FnZSkge1xuICAgICAgICAgICAgICBtZXNzYWdlSWQgPSB0aGlzLmZpcnN0VW5yZWFkTWVzc2FnZUlkIHx8IG1lc3NhZ2VJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqdW1wVG9NZXNzYWdlLnBvc2l0aW9uICE9PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkTWVzc2FnZUlkID0gbWVzc2FnZUlkO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3RvcC10by1ib3R0b20nKSB7XG4gICAgICAgICAgICAgIGp1bXBUb01lc3NhZ2UucG9zaXRpb24gPSAndG9wJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNKdW1waW5nVG9NZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTWVzc2FnZUludG9WaWV3KHtcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiB0aGlzLmZpcnN0VW5yZWFkTWVzc2FnZUlkIHx8IG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgcG9zaXRpb246IGp1bXBUb01lc3NhZ2UucG9zaXRpb24gfHwgJ21pZGRsZScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTY3JvbGxTdGF0ZSgpIHtcbiAgICB0aGlzLmlzRW1wdHkgPSB0cnVlO1xuICAgIHRoaXMuaXNVc2VyU2Nyb2xsZWQgPSBmYWxzZTtcbiAgICB0aGlzLm1lc3NhZ2VJZFRvQW5jaG9yVG8gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hbmNob3JNZXNzYWdlVG9wT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubmV3TWVzc2FnZUNvdW50V2hpbGVCZWluZ1Njcm9sbGVkID0gMDtcbiAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPSBmYWxzZTtcbiAgICB0aGlzLmlzTGF0ZXN0TWVzc2FnZUluTGlzdCA9IHRydWU7XG4gICAgdGhpcy5pc0p1bXBpbmdUb01lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFBvc2l0aW9uJC5uZXh0KCdib3R0b20nKTtcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9ICdpZGxlJztcbiAgfVxuXG4gIHByaXZhdGUgZGlzcG9zZVZpcnR1YWxpemVkTGlzdCgpIHtcbiAgICB0aGlzLnZpcnR1YWxpemVkTGlzdD8uZGlzcG9zZSgpO1xuICAgIHRoaXMuanVtcFRvSXRlbVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCB1c2Vyc1R5cGluZyQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgID8gdGhpcy51c2Vyc1R5cGluZ0luVGhyZWFkJFxuICAgICAgOiB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJDtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsTWVzc2FnZUludG9WaWV3KFxuICAgIG9wdGlvbnM6IHsgbWVzc2FnZUlkOiBzdHJpbmc7IHBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ21pZGRsZScgfSxcbiAgICB3aXRoUmV0cnk6IGJvb2xlYW4gPSB0cnVlXG4gICkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLm1lc3NhZ2VJZCk7XG4gICAgaWYgKCFlbGVtZW50ICYmIHdpdGhSZXRyeSkge1xuICAgICAgLy8gSWYgdGhlIG1lc3NhZ2Ugd2FzIG5ld2x5IGluc2VydGVkIGludG8gYWN0aXZlQ2hhbm5lbE1lc3NhZ2VzJCwgdGhlIG1lc3NhZ2Ugd2lsbCBiZSByZW5kZXJlZCBhZnRlciB0aGUgY3VycmVudCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIC0+IHdhaXQgZm9yIHRoaXMgY3ljbGUgdG8gY29tcGxldGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxNZXNzYWdlSW50b1ZpZXcob3B0aW9ucywgZmFsc2UpKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJsb2NrTWFwcGluZzogeyBba2V5OiBzdHJpbmddOiBTY3JvbGxMb2dpY2FsUG9zaXRpb24gfSA9IHtcbiAgICAgICAgdG9wOiAnc3RhcnQnLFxuICAgICAgICBib3R0b206ICdlbmQnLFxuICAgICAgICBtaWRkbGU6ICdjZW50ZXInLFxuICAgICAgfTtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogYmxvY2tNYXBwaW5nW29wdGlvbnMucG9zaXRpb25dLFxuICAgICAgfSk7XG4gICAgICBpZiAob3B0aW9ucy5wb3NpdGlvbiAhPT0gJ21pZGRsZScpIHtcbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbiA9PT0gJ2JvdHRvbSdcbiAgICAgICAgICA/IHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICAgIDogdGhpcy5zY3JvbGxUb1RvcCgpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNKdW1waW5nVG9NZXNzYWdlID0gZmFsc2U7XG4gICAgICB9LCAwKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkTWVzc2FnZUlkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZpcnN0VW5yZWFkTWVzc2FnZUlkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzSnVtcGluZ1RvTGF0ZXN0VW5yZWFkTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV3TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2U6IE1lc3NhZ2VSZXNwb25zZSkge1xuICAgIGlmIChcbiAgICAgICh0aGlzLm1vZGUgPT09ICdtYWluJyAmJiBtZXNzYWdlLnBhcmVudF9pZCkgfHxcbiAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmIG1lc3NhZ2UucGFyZW50X2lkICE9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmlkKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05ld01lc3NhZ2VTZW50QnlDdXJyZW50VXNlciA9XG4gICAgICBtZXNzYWdlLnVzZXI/LmlkID09PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkO1xuXG4gICAgbGV0IHNob3VsZERldGVjdENoYW5nZXMgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyICYmIGlzTmV3TWVzc2FnZVNlbnRCeUN1cnJlbnRVc2VyKSB7XG4gICAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPSB0cnVlO1xuICAgICAgc2hvdWxkRGV0ZWN0Q2hhbmdlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVc2VyU2Nyb2xsZWQpIHtcbiAgICAgIHRoaXMubmV3TWVzc2FnZUNvdW50V2hpbGVCZWluZ1Njcm9sbGVkKys7XG4gICAgICBzaG91bGREZXRlY3RDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgJiYgdGhpcy51bnJlYWRDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVucmVhZENvdW50Kys7XG4gICAgICBzaG91bGREZXRlY3RDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkRGV0ZWN0Q2hhbmdlcyAmJiB0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmT25TZXBhcmF0ZURhdGVzKFxuICAgIG1lc3NhZ2U/OiBTdHJlYW1NZXNzYWdlLFxuICAgIG5leHRNZXNzYWdlPzogU3RyZWFtTWVzc2FnZVxuICApIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIW5leHRNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBpc09uU2VwYXJhdGVEYXRlKG1lc3NhZ2UuY3JlYXRlZF9hdCwgbmV4dE1lc3NhZ2UuY3JlYXRlZF9hdCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICBsYXN0UmVhZE1lc3NhZ2VJZCAmJlxuICAgIGlzVW5yZWFkTm90aWZpY2F0aW9uVmlzaWJsZSAmJlxuICAgIG9wZW5NZXNzYWdlTGlzdEF0ID09PSAnbGFzdC1tZXNzYWdlJyAmJlxuICAgIGRpc3BsYXlVbnJlYWRTZXBhcmF0b3JcbiAgXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBjdXN0b21uZXdNZXNzYWdlc05vdGlmaWNhdGlvblRlbXBsYXRlIHx8XG4gICAgICAgIGRlZmF1bHRVbnJlYWRNZXNzYWdlc05vdGlmaWNhdGlvbjtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgdW5yZWFkQ291bnQ6IHVucmVhZENvdW50LFxuICAgICAgICBvbkRpc21pc3M6IG1lc3NhZ2VOb3RpZmljYXRpb25EaXNtaXNzQ2xpY2tlZCxcbiAgICAgICAgb25KdW1wOiBtZXNzYWdlTm90aWZpY2F0aW9uSnVtcENsaWNrZWRcbiAgICAgIH1cbiAgICBcIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdFVucmVhZE1lc3NhZ2VzTm90aWZpY2F0aW9uXG4gIGxldC11bnJlYWRDb3VudD1cInVucmVhZENvdW50XCJcbiAgbGV0LW9uRGlzbWlzcz1cIm9uRGlzbWlzc1wiXG4gIGxldC1vbkp1bXA9XCJvbkp1bXBcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fdW5yZWFkLW1lc3NhZ2VzLW5vdGlmaWNhdGlvblwiXG4gICAgZGF0YS10ZXN0aWQ9XCJ1bnJlYWQtbWVzc2FnZXMtbm90aWZpY2F0aW9uXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwidW5yZWFkLW1lc3NhZ2VzLW5vdGlmaWNhdGlvbi1qdW1wLXRvLW1lc3NhZ2VcIlxuICAgICAgKGNsaWNrKT1cIm9uSnVtcCgpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgdW5yZWFkQ291bnQgPiAwICYmICFoaWRlVW5yZWFkQ291bnRGb3JOb3RpZmljYXRpb25BbmRJbmRpY2F0b3I7XG4gICAgICAgICAgZWxzZSBub1VucmVhZENvdW50XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgKHVucmVhZENvdW50ID09PSAxXG4gICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5cXHtcXHtjb3VudFxcfVxcfSB1bnJlYWQgbWVzc2FnZVwiXG4gICAgICAgICAgICA6IFwic3RyZWFtQ2hhdC5cXHtcXHtjb3VudFxcfVxcfSB1bnJlYWQgbWVzc2FnZXNcIlxuICAgICAgICAgICkgfCB0cmFuc2xhdGUgOiB7IGNvdW50OiB1bnJlYWRDb3VudCB9XG4gICAgICAgIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9VbnJlYWRDb3VudD5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LlVucmVhZCBtZXNzYWdlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwidW5yZWFkLW1lc3NhZ2VzLW5vdGlmaWNhdGlvbi1kaXNtaXNzXCJcbiAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJjbG9zZVwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxkaXYgI3Njcm9sbENvbnRhaW5lciBkYXRhLXRlc3RpZD1cInNjcm9sbC1jb250YWluZXJcIiBjbGFzcz1cInN0ci1jaGF0X19saXN0XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnbWFpbicgJiYgaXNFbXB0eSAmJiBlbXB0eUxpc3RUZW1wbGF0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eUxpc3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19yZXZlcnNlLWluZmluaXRlLXNjcm9sbCBzdHItY2hhdF9fbWVzc2FnZS1saXN0LXNjcm9sbFwiPlxuICAgIDx1bCBjbGFzcz1cInN0ci1jaGF0X191bFwiPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RocmVhZCcgJiYgcGFyZW50TWVzc2FnZVwiXG4gICAgICAgICNwYXJlbnRNZXNzYWdlRWxlbWVudFxuICAgICAgICBkYXRhLXRlc3RpZD1cInBhcmVudC1tZXNzYWdlXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fcGFyZW50LW1lc3NhZ2UtbGlcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogcGFyZW50TWVzc2FnZSwgaW5kZXg6ICdwYXJlbnQnIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJyZXBseS1jb3VudFwiIGNsYXNzPVwic3RyLWNoYXRfX3RocmVhZC1zdGFydFwiPlxuICAgICAgICAgIHt7cGFyZW50TWVzc2FnZS5yZXBseV9jb3VudCA9PT0gMSA/ICgnc3RyZWFtQ2hhdC4xIHJlcGx5JyB8IHRyYW5zbGF0ZSkgOiAoJ3N0cmVhbUNoYXQue3sgcmVwbHlDb3VudCB9fVxuICAgICAgICAgIHJlcGxpZXMnIHwgdHJhbnNsYXRlOnJlcGx5Q291bnRQYXJhbSl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RocmVhZCcgJiYgaXNFbXB0eSAmJiBlbXB0eUxpc3RUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlMaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHN0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICgobG9hZGluZ1N0YXRlID09PSAnbG9hZGluZy10b3AnICYmIGRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnKSB8fFxuICAgICAgICAgICAgKGxvYWRpbmdTdGF0ZSA9PT0gJ2xvYWRpbmctYm90dG9tJyAmJlxuICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09ICd0b3AtdG8tYm90dG9tJykpICYmXG4gICAgICAgICAgICBkaXNwbGF5TG9hZGluZ0luZGljYXRvcjtcbiAgICAgICAgICBlbHNlIGxvYWRpbmdJbmRpY2F0b3JQbGFjZWhvbGRlclxuICAgICAgICBcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInRvcC1sb2FkaW5nLWluZGljYXRvclwiXG4gICAgICA+PC9zdHJlYW0tbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZXMkIHwgYXN5bmMgYXMgbWVzc2FnZXNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IG1lc3NhZ2Ugb2YgbWVzc2FnZXM7XG4gICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBmaXJzdDtcbiAgICAgICAgICAgIGxldCBpc0xhc3QgPSBsYXN0O1xuICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeU1lc3NhZ2VJZFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGaXJzdFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGRhdGVTZXBhcmF0b3I7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgZGF0ZTogbWVzc2FnZS5jcmVhdGVkX2F0LFxuICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZTogcGFyc2VEYXRlKG1lc3NhZ2UuY3JlYXRlZF9hdClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2xpIHN0ci1jaGF0X19saS0te3sgZ3JvdXBTdHlsZXNbaV0gfX1cIlxuICAgICAgICAgICAgaWQ9XCJ7eyBtZXNzYWdlLmlkIH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgbWVzc2FnZVRlbXBsYXRlQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogbWVzc2FnZSwgaW5kZXg6IGkgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKGxhc3RSZWFkTWVzc2FnZUlkID09PSBtZXNzYWdlPy5pZCAmJlxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnKSB8fFxuICAgICAgICAgICAgICAoZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScgJiZcbiAgICAgICAgICAgICAgICBsYXN0UmVhZE1lc3NhZ2VJZCA9PT0gbWVzc2FnZXNbaSArIDFdPy5pZClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVVucmVhZFNlcGFyYXRvclwiXG4gICAgICAgICAgICAgIGlkPVwic3RyZWFtLWNoYXQtbmV3LW1lc3NhZ2UtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJuZXctbWVzc2FnZXMtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbGkgc3RyLWNoYXRfX3VucmVhZC1tZXNzYWdlcy1zZXBhcmF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgY3VzdG9tbmV3TWVzc2FnZXNJbmRpY2F0b3JUZW1wbGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TmV3TWVzc2FnZXNJbmRpY2F0b3I7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHVucmVhZENvdW50OiB1bnJlYWRDb3VudCB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNOZXh0TWVzc2FnZU9uU2VwYXJhdGVEYXRlW2ldXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZGF0ZVNlcGFyYXRvcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICBkYXRlOiBtZXNzYWdlc1tpICsgMV0uY3JlYXRlZF9hdCxcbiAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGU6IHBhcnNlRGF0ZShtZXNzYWdlc1tpICsgMV0uY3JlYXRlZF9hdClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKChsb2FkaW5nU3RhdGUgPT09ICdsb2FkaW5nLWJvdHRvbScgJiZcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnKSB8fFxuICAgICAgICAgICAgKGxvYWRpbmdTdGF0ZSA9PT0gJ2xvYWRpbmctdG9wJyAmJlxuICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09ICd0b3AtdG8tYm90dG9tJykpICYmXG4gICAgICAgICAgICBkaXNwbGF5TG9hZGluZ0luZGljYXRvcjtcbiAgICAgICAgICBlbHNlIGxvYWRpbmdJbmRpY2F0b3JQbGFjZWhvbGRlclxuICAgICAgICBcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImJvdHRvbS1sb2FkaW5nLWluZGljYXRvclwiXG4gICAgICA+PC9zdHJlYW0tbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJbmRpY2F0b3JQbGFjZWhvbGRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlclwiPjwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3VsPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFR5cGluZ0luZGljYXRvciBsZXQtdXNlcnNUeXBpbmckPVwidXNlcnNUeXBpbmckXCI+XG4gICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvbm8tYW55IC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiRhbnkodXNlcnNUeXBpbmckIHwgYXN5bmMpIGFzIHVzZXJzXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInVzZXJzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidHlwaW5nLWluZGljYXRvclwiXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvciBzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvci0tdHlwaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90c1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidHlwaW5nLXVzZXJzXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX3VzZXJzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB1c2Vycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICA/IChcInN0cmVhbUNoYXQudXNlciBpcyB0eXBpbmdcIlxuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IHVzZXI6IGdldFR5cGluZ0luZGljYXRvclRleHQodXNlcnMpIH0pXG4gICAgICAgICAgICAgICAgOiAoXCJzdHJlYW1DaGF0LnVzZXJzIGFyZSB0eXBpbmdcIlxuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IHVzZXJzOiBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzKSB9KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHR5cGluZ0luZGljYXRvclRlbXBsYXRlIHx8IGRlZmF1bHRUeXBpbmdJbmRpY2F0b3I7XG4gICAgICAgIGNvbnRleHQ6IGdldFR5cGluZ0luZGljYXRvckNvbnRleHQoKVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2p1bXAtdG8tbGF0ZXN0LW1lc3NhZ2VcIj5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiaXNVc2VyU2Nyb2xsZWQgJiYgaXNKdW1wVG9MYXRlc3RCdXR0b25WaXNpYmxlXCJcbiAgICBkYXRhLXRlc3RpZD1cInNjcm9sbC10by1sYXRlc3RcIlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC10by1sYXRlc3Qgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC10by1sYXRlc3QtcmlnaHQgc3RyLWNoYXRfX2NpcmNsZS1mYWJcIlxuICAgIChrZXl1cC5lbnRlcik9XCJqdW1wVG9MYXRlc3RNZXNzYWdlKClcIlxuICAgIChjbGljayk9XCJqdW1wVG9MYXRlc3RNZXNzYWdlKClcIlxuICA+XG4gICAgPHN0cmVhbS1pY29uXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19qdW1wLXRvLWxhdGVzdC1pY29uIHN0ci1jaGF0X19jaXJjbGUtZmFiLWljb25cIlxuICAgICAgW2ljb25dPVwiZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCcgPyAnYXJyb3ctZG93bicgOiAnYXJyb3ctdXAnXCJcbiAgICA+PC9zdHJlYW0taWNvbj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIm5ld01lc3NhZ2VDb3VudFdoaWxlQmVpbmdTY3JvbGxlZCA+IDBcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb24gc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC10by1sYXRlc3QtdW5yZWFkLWNvdW50IHN0ci1jaGF0X19qdW1wLXRvLWxhdGVzdC11bnJlYWQtY291bnRcIlxuICAgID5cbiAgICAgIHt7IG5ld01lc3NhZ2VDb3VudFdoaWxlQmVpbmdTY3JvbGxlZCB9fVxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lciBsZXQtbWVzc2FnZT1cIm1lc3NhZ2VcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICA8bmctdGVtcGxhdGVcbiAgICAjZGVmYXVsdE1lc3NhZ2VUZW1wbGF0ZVxuICAgIGxldC1tZXNzYWdlSW5wdXQ9XCJtZXNzYWdlXCJcbiAgICBsZXQtaXNMYXN0U2VudE1lc3NhZ2U9XCJpc0xhc3RTZW50TWVzc2FnZVwiXG4gICAgbGV0LWVuYWJsZWRNZXNzYWdlQWN0aW9ucz1cImVuYWJsZWRNZXNzYWdlQWN0aW9uc1wiXG4gICAgbGV0LW1vZGU9XCJtb2RlXCJcbiAgICBsZXQtaXNIaWdobGlnaHRlZD1cImlzSGlnaGxpZ2h0ZWRcIlxuICAgIGxldC1zY3JvbGwkPVwic2Nyb2xsJFwiXG4gID5cbiAgICA8c3RyZWFtLW1lc3NhZ2VcbiAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICBbaXNMYXN0U2VudE1lc3NhZ2VdPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgICAgW2VuYWJsZWRNZXNzYWdlQWN0aW9uc109XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICBbaXNIaWdobGlnaHRlZF09XCJpc0hpZ2hsaWdodGVkXCJcbiAgICAgIFtzY3JvbGwkXT1cInNjcm9sbCRcIlxuICAgID48L3N0cmVhbS1tZXNzYWdlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIG1lc3NhZ2VUZW1wbGF0ZSB8fCBkZWZhdWx0TWVzc2FnZVRlbXBsYXRlO1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBpc0xhc3RTZW50TWVzc2FnZTogISEoXG4gICAgICAgICAgbGFzdFNlbnRNZXNzYWdlSWQgJiYgbWVzc2FnZT8uaWQgPT09IGxhc3RTZW50TWVzc2FnZUlkXG4gICAgICAgICksXG4gICAgICAgIGVuYWJsZWRNZXNzYWdlQWN0aW9uczogZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLFxuICAgICAgICBtb2RlOiBtb2RlLFxuICAgICAgICBpc0hpZ2hsaWdodGVkOiBtZXNzYWdlPy5pZCA9PT0gaGlnaGxpZ2h0ZWRNZXNzYWdlSWQsXG4gICAgICAgIHNjcm9sbCQ6IHNjcm9sbCRcbiAgICAgIH1cbiAgICBcIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RhdGVTZXBhcmF0b3IgbGV0LWRhdGU9XCJkYXRlXCIgbGV0LXBhcnNlZERhdGU9XCJwYXJzZWREYXRlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5RGF0ZVNlcGFyYXRvclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGN1c3RvbURhdGVTZXBhcmF0b3JUZW1wbGF0ZSB8fCBkZWZhdWx0RGF0ZVNlcGFyYXRvcjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgcGFyc2VkRGF0ZTogcGFyc2VkRGF0ZVxuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHREYXRlU2VwYXJhdG9yXG4gICAgbGV0LWRhdGU9XCJkYXRlXCJcbiAgICBsZXQtcGFyc2VkRGF0ZT1cInBhcnNlZERhdGVcIlxuICA+XG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRhdGUtc2VwYXJhdG9yXCIgY2xhc3M9XCJzdHItY2hhdF9fZGF0ZS1zZXBhcmF0b3JcIj5cbiAgICAgIDxoclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGRhdGVTZXBhcmF0b3JUZXh0UG9zID09PSAncmlnaHQnIHx8IGRhdGVTZXBhcmF0b3JUZXh0UG9zID09PSAnY2VudGVyJ1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19kYXRlLXNlcGFyYXRvci1saW5lXCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2RhdGUtc2VwYXJhdG9yLWRhdGVcIj5cbiAgICAgICAge3sgcGFyc2VkRGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8aHJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBkYXRlU2VwYXJhdG9yVGV4dFBvcyA9PT0gJ2xlZnQnIHx8IGRhdGVTZXBhcmF0b3JUZXh0UG9zID09PSAnY2VudGVyJ1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19kYXRlLXNlcGFyYXRvci1saW5lXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHROZXdNZXNzYWdlc0luZGljYXRvciBsZXQtdW5yZWFkQ291bnQ9XCJ1bnJlYWRDb3VudFwiPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3VucmVhZC1tZXNzYWdlcy1zZXBhcmF0b3JcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICB1bnJlYWRDb3VudCA+IDAgJiYgIWhpZGVVbnJlYWRDb3VudEZvck5vdGlmaWNhdGlvbkFuZEluZGljYXRvcjtcbiAgICAgICAgZWxzZSBub1VucmVhZENvdW50XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7XG4gICAgICAgICh1bnJlYWRDb3VudCA9PT0gMVxuICAgICAgICAgID8gXCJzdHJlYW1DaGF0Llxce1xce2NvdW50XFx9XFx9IHVucmVhZCBtZXNzYWdlXCJcbiAgICAgICAgICA6IFwic3RyZWFtQ2hhdC5cXHtcXHtjb3VudFxcfVxcfSB1bnJlYWQgbWVzc2FnZXNcIlxuICAgICAgICApIHwgdHJhbnNsYXRlIDogeyBjb3VudDogdW5yZWFkQ291bnQgfVxuICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI25vVW5yZWFkQ291bnQ+XG4gICAgICB7eyBcInN0cmVhbUNoYXQuVW5yZWFkIG1lc3NhZ2VzXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
680
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFdBQVcsRUFDWCxLQUFLLEVBT0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLEdBQUcsRUFDSCxXQUFXLEVBQ1gsSUFBSSxFQUNKLEdBQUcsRUFDSCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQVl4QixPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7QUFFeEM7O0dBRUc7QUFPSCxNQUFNLE9BQU8sb0JBQW9CO0lBaUgvQixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDOUMsVUFBNkIsRUFDN0IsTUFBYyxFQUNkLEtBQXdCO1FBTHhCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIs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QXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07K1BBUXRDLElBQUk7c0JBQVosS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLGtDQUFrQztzQkFBMUMsS0FBSztnQkFJRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBSUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUlHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFJRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csMENBQTBDO3NCQUFsRCxLQUFLO2dCQUlHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFpQ0UsZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBR3BCLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBeUJyQixLQUFLO3NCQURoQixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZSxcbiAgdGFwLFxuICB0aHJvdHRsZVRpbWUsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIE1lc3NhZ2VDb250ZXh0LFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBTdHJlYW1NZXNzYWdlLFxuICBUeXBpbmdJbmRpY2F0b3JDb250ZXh0LFxuICBEYXRlU2VwYXJhdG9yQ29udGV4dCxcbiAgVW5yZWFkTWVzc2FnZXNOb3RpZmljYXRpb25Db250ZXh0LFxuICBVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQsXG4gIFZpcnR1YWxpemVkTGlzdFNjcm9sbFBvc2l0aW9uLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0R3JvdXBTdHlsZXMsIEdyb3VwU3R5bGUgfSBmcm9tICcuL2dyb3VwLXN0eWxlcyc7XG5pbXBvcnQgeyBNZXNzYWdlUmVzcG9uc2UsIFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgbGlzdFVzZXJzIH0gZnJvbSAnLi4vbGlzdC11c2Vycyc7XG5pbXBvcnQgeyBEYXRlUGFyc2VyU2VydmljZSB9IGZyb20gJy4uL2RhdGUtcGFyc2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNPblNlcGFyYXRlRGF0ZSB9IGZyb20gJy4uL2lzLW9uLXNlcGFyYXRlLWRhdGUnO1xuaW1wb3J0IHsgVmlydHVhbGl6ZWRNZXNzYWdlTGlzdFNlcnZpY2UgfSBmcm9tICcuLi92aXJ0dWFsaXplZC1tZXNzYWdlLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBpc1NhZmFyaSB9IGZyb20gJy4uL2lzLXNhZmFyaSc7XG5cbi8qKlxuICogVGhlIGBNZXNzYWdlTGlzdGAgY29tcG9uZW50IHJlbmRlcnMgYSBzY3JvbGxhYmxlIGxpc3Qgb2YgbWVzc2FnZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VMaXN0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbWVzc2FnZSBsaXN0IHNob3VsZCBkaXNwbGF5IGNoYW5uZWwgbWVzc2FnZXMgb3IgW3RocmVhZCBtZXNzYWdlc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvdGhyZWFkcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlOiAnbWFpbicgfCAndGhyZWFkJyA9ICdtYWluJztcbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1lc3NhZ2VzIGluIHRoZSBsaXN0LCBgYm90dG9tLXRvLXRvcGAgbWVhbnMgbmV3ZXN0IG1lc3NhZ2UgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWVzc2FnZSBsaXN0IGFuZCB1c2VycyBzY3JvbGwgdXB3YXJkcyB0byBsb2FkIG9sZGVyIG1lc3NhZ2VzXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3Rpb246ICdib3R0b20tdG8tdG9wJyB8ICd0b3AtdG8tYm90dG9tJyA9ICdib3R0b20tdG8tdG9wJztcbiAgLyoqXG4gICAqIFlvdSBjYW4gaGlkZSB0aGUgXCJqdW1wIHRvIGxhdGVzdFwiIGJ1dHRvbiB3aGlsZSBzY3JvbGxpbmcuIEEgcG90ZW50aWFsIHVzZS1jYXNlIGZvciB0aGlzIGlucHV0IHdvdWxkIGJlIHRvIFt3b3JrYXJvdW5kIGEga25vd24gaXNzdWUgb24gaU9TIFNhZmFyIHdlYnZpZXddKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9pc3N1ZXMvNDE4KVxuICAgKlxuICAgKi9cbiAgQElucHV0KCkgaGlkZUp1bXBUb0xhdGVzdEJ1dHRvbkR1cmluZ1Njcm9sbCA9IGZhbHNlO1xuICAvKipcbiAgICogSWYgYHRydWVgIGRhdGUgc2VwYXJhdG9ycyB3aWxsIGJlIGRpc3BsYXllZFxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheURhdGVTZXBhcmF0b3IgPSB0cnVlO1xuICAvKipcbiAgICogSWYgYHRydWVgIHVucmVhZCBpbmRpY2F0b3Igd2lsbCBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlVbnJlYWRTZXBhcmF0b3IgPSB0cnVlO1xuICAvKipcbiAgICogSWYgZGF0ZSBzZXBhcmF0b3JzIGFyZSBkaXNwbGF5ZWQsIHlvdSBjYW4gc2V0IHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBkYXRlIHRleHQuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlU2VwYXJhdG9yVGV4dFBvczogJ2NlbnRlcicgfCAncmlnaHQnIHwgJ2xlZnQnID0gJ2NlbnRlcic7XG4gIC8qKlxuICAgKiBgbGFzdC1tZXNzYWdlYCBvcHRpb24gd2lsbCBvcGVuIHRoZSBtZXNzYWdlIGxpc3QgYXQgdGhlIGxhc3QgbWVzc2FnZSwgYGxhc3QtcmVhZC1tZXNzYWdlYCB3aWxsIG9wZW4gdGhlIGxpc3QgYXQgdGhlIGxhc3QgdW5yZWFkIG1lc3NhZ2UuIFRoaXMgb3B0aW9uIG9ubHkgd29ya3MgaWYgbW9kZSBpcyBgbWFpbmAuXG4gICAqL1xuICBASW5wdXQoKSBvcGVuTWVzc2FnZUxpc3RBdDogJ2xhc3QtbWVzc2FnZScgfCAnbGFzdC1yZWFkLW1lc3NhZ2UnID1cbiAgICAnbGFzdC1tZXNzYWdlJztcbiAgLyoqXG4gICAqIElmIHRoZSB1c2VyIGhhcyB1bnJlYWQgbWVzc2FnZXMgd2hlbiB0aGV5IG9wZW4gdGhlIGNoYW5uZWwgdGhlIFVJIHNob3dzIHRoZSB1bnJlYWQgaW5kaWNhdG9yIC8gbm90aWZpY2F0aW9uIHdoaWNoIGZlYXR1cmVzIHRoZSB1bnJlYWQgY291bnQgYnkgZGVmYXVsdC4gVGhpcyBjb3VudCB3aWxsIGJlIGluY3JlYXNlZCBldmVyeSB0aW1lIGEgdXNlciByZWNlaXZlcyBhIG5ldyBtZXNzYWdlLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzaG93IHRoZSB1bnJlYWQgY291bnQsIHlvdSBjYW4gdHVybiB0aGF0IG9mZi5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIGBtYWluYCBtb2RlLCBhcyB0aHJlYWRzIGRvZXNuJ3QgaGF2ZSByZWFkIGluZnJvbWF0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgaGlkZVVucmVhZENvdW50Rm9yTm90aWZpY2F0aW9uQW5kSW5kaWNhdG9yID0gZmFsc2U7XG4gIC8qKlxuICAgKiBZb3UgY2FuIHR1cm4gb24gYW5kIG9mZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IgdGhhdCBzaWduYWxzIHRvIHVzZXJzIHRoYXQgbW9yZSBtZXNzYWdlcyBhcmUgYmVpbmcgbG9hZGVkIHRvIHRoZSBtZXNzYWdlIGxpc3RcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlMb2FkaW5nSW5kaWNhdG9yID0gdHJ1ZTtcbiAgdHlwaW5nSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFR5cGluZ0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgY3VzdG9tRGF0ZVNlcGFyYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxEYXRlU2VwYXJhdG9yQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGN1c3RvbW5ld01lc3NhZ2VzSW5kaWNhdG9yVGVtcGxhdGU6XG4gICAgfCBUZW1wbGF0ZVJlZjxVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQ+XG4gICAgfCB1bmRlZmluZWQ7XG4gIGN1c3RvbW5ld01lc3NhZ2VzTm90aWZpY2F0aW9uVGVtcGxhdGU6XG4gICAgfCBUZW1wbGF0ZVJlZjxVbnJlYWRNZXNzYWdlc05vdGlmaWNhdGlvbkNvbnRleHQ+XG4gICAgfCB1bmRlZmluZWQ7XG4gIGVtcHR5TWFpbk1lc3NhZ2VMaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIGVtcHR5VGhyZWFkTWVzc2FnZUxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgbWVzc2FnZXMkITogT2JzZXJ2YWJsZTxTdHJlYW1NZXNzYWdlW10+O1xuICBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGlzRW1wdHkgPSB0cnVlO1xuICBuZXdNZXNzYWdlQ291bnRXaGlsZUJlaW5nU2Nyb2xsZWQgPSAwO1xuICBpc1VzZXJTY3JvbGxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZ3JvdXBTdHlsZXM6IEdyb3VwU3R5bGVbXSA9IFtdO1xuICBpc05leHRNZXNzYWdlT25TZXBhcmF0ZURhdGU6IGJvb2xlYW5bXSA9IFtdO1xuICBsYXN0U2VudE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwYXJlbnRNZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBoaWdobGlnaHRlZE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsb2FkaW5nU3RhdGU6ICdpZGxlJyB8ICdsb2FkaW5nLXRvcCcgfCAnbG9hZGluZy1ib3R0b20nID0gJ2lkbGUnO1xuICBzY3JvbGxFbmRUaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIGxhc3RSZWFkTWVzc2FnZUlkPzogc3RyaW5nO1xuICBpc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgPSB0cnVlO1xuICBmaXJzdFVucmVhZE1lc3NhZ2VJZD86IHN0cmluZztcbiAgdW5yZWFkQ291bnQ/OiBudW1iZXI7XG4gIGlzSnVtcGluZ1RvTGF0ZXN0VW5yZWFkTWVzc2FnZSA9IGZhbHNlO1xuICBpc0p1bXBUb0xhdGVzdEJ1dHRvblZpc2libGUgPSB0cnVlO1xuICBpc0p1bXBpbmdUb01lc3NhZ2UgPSBmYWxzZTtcbiAgc2Nyb2xsJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpXG4gIHByaXZhdGUgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhcmVudE1lc3NhZ2VFbGVtZW50JylcbiAgcHJpdmF0ZSBwYXJlbnRNZXNzYWdlRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIGlzTmV3TWVzc2FnZVNlbnRCeVVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIG5ld01lc3NhZ2VTdWJzY3JpcHRpb246IHsgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQgfSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB1c2Vyc1R5cGluZ0luQ2hhbm5lbCQhOiBPYnNlcnZhYmxlPFxuICAgIFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdXG4gID47XG4gIHByaXZhdGUgdXNlcnNUeXBpbmdJblRocmVhZCQhOiBPYnNlcnZhYmxlPFxuICAgIFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdXG4gID47XG4gIHByaXZhdGUgaXNMYXRlc3RNZXNzYWdlSW5MaXN0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBjaGFubmVsSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcGFyc2VkRGF0ZXMgPSBuZXcgTWFwPERhdGUsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBpc1ZpZXdJbml0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjaGVja0lmVW5yZWFkTm90aWZpY2F0aW9uSXNWaXNpYmxlVGltZW91dD86IFJldHVyblR5cGU8XG4gICAgdHlwZW9mIHNldFRpbWVvdXRcbiAgPjtcbiAgcHJpdmF0ZSBqdW1wVG9MYXRlc3RCdXR0b25WaXNpYmlsaXR5VGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIGZvcmNlUmVwYWludFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIG1lc3NhZ2VJZFRvQW5jaG9yVG8/OiBzdHJpbmc7XG4gIHByaXZhdGUgYW5jaG9yTWVzc2FnZVRvcE9mZnNldD86IG51bWJlcjtcbiAgcHJpdmF0ZSBpc1NhZmFyaSA9IGlzU2FmYXJpKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIHByaXZhdGUgZ2V0IGNsYXNzKCkge1xuICAgIHJldHVybiBgc3RyLWNoYXQtYW5ndWxhcl9fbWFpbi1wYW5lbC1pbm5lciBzdHItY2hhdC1hbmd1bGFyX19tZXNzYWdlLWxpc3QtaG9zdCBzdHItY2hhdF9fbWFpbi1wYW5lbC1pbm5lciAke1xuICAgICAgdGhpcy5pc0VtcHR5ID8gJ3N0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2UtbGlzdC1ob3N0LS1lbXB0eScgOiAnJ1xuICAgIH1gO1xuICB9XG4gIHByaXZhdGUgdmlydHVhbGl6ZWRMaXN0PzogVmlydHVhbGl6ZWRNZXNzYWdlTGlzdFNlcnZpY2U7XG4gIHByaXZhdGUgc2Nyb2xsUG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWaXJ0dWFsaXplZExpc3RTY3JvbGxQb3NpdGlvbj4oXG4gICAgJ2JvdHRvbSdcbiAgKTtcbiAgcHJpdmF0ZSBqdW1wVG9JdGVtU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBhcnNlcjogRGF0ZVBhcnNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICAgIHRoaXMudXNlcnNUeXBpbmdJblRocmVhZCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVzZXJzVHlwaW5nSW5UaHJlYWQkO1xuICB9XG5cbiAgbWVzc2FnZU5vdGlmaWNhdGlvbkp1bXBDbGlja2VkID0gKCkgPT4ge1xuICAgIHRoaXMuanVtcFRvRmlyc3RVbnJlYWRNZXNzYWdlKCk7XG4gICAgdGhpcy5pc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgPSBmYWxzZTtcbiAgfTtcblxuICBtZXNzYWdlTm90aWZpY2F0aW9uRGlzbWlzc0NsaWNrZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5pc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgPSBmYWxzZTtcbiAgfTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuZm9yY2VSZXBhaW50U3ViamVjdC5waXBlKHRocm90dGxlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JjZVJlcGFpbnQoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbCQuc3Vic2NyaWJlKChjaGFubmVsKSA9PiB7XG4gICAgICAgIGxldCBpc05ld0NoYW5uZWwgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbElkICE9PSBjaGFubmVsPy5pZCkge1xuICAgICAgICAgIGlzTmV3Q2hhbm5lbCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlVucmVhZE5vdGlmaWNhdGlvbklzVmlzaWJsZVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNoZWNrSWZVbnJlYWROb3RpZmljYXRpb25Jc1Zpc2libGVUaW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnBhcnNlZERhdGVzID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuc2V0TWVzc2FnZXMkKCk7XG4gICAgICAgICAgdGhpcy5jaGFubmVsSWQgPSBjaGFubmVsPy5pZDtcbiAgICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnbWFpbicpIHtcbiAgICAgICAgICBjb25zdCBsYXN0UmVhZE1lc3NhZ2VJZCA9XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWxMYXN0UmVhZE1lc3NhZ2VJZDtcbiAgICAgICAgICBjb25zdCB1bnJlYWRDb3VudCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbFVucmVhZENvdW50O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxhc3RSZWFkTWVzc2FnZUlkICE9PSB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkIHx8XG4gICAgICAgICAgICB1bnJlYWRDb3VudCAhPT0gdGhpcy51bnJlYWRDb3VudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sYXN0UmVhZE1lc3NhZ2VJZCA9IGxhc3RSZWFkTWVzc2FnZUlkO1xuICAgICAgICAgICAgdGhpcy51bnJlYWRDb3VudCA9IHVucmVhZENvdW50IHx8IDA7XG4gICAgICAgICAgICBpZiAoaXNOZXdDaGFubmVsICYmIHRoaXMubGFzdFJlYWRNZXNzYWdlSWQpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMub3Blbk1lc3NhZ2VMaXN0QXQgPT09ICdsYXN0LXJlYWQtbWVzc2FnZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb0ZpcnN0VW5yZWFkTWVzc2FnZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdhaXQgdGlsbCBtZXNzYWdlcyBhbmQgdGhlIHVucmVhZCBiYW5uZXIgaXMgcmVuZGVyZWRcbiAgICAgICAgICAgICAgICAvLyBJZiB1bnJlYWQgYmFubmVyIGlzbid0IHZpc2libGUgb24gdGhlIHNjcmVlbiwgd2UgZGlzcGxheSB0aGUgdW5yZWFkIG5vdGlmaWNhaW9uXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBiYW5uZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICdzdHJlYW0tY2hhdC1uZXctbWVzc2FnZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhYmFubmVyRWxlbWVudCB8fFxuICAgICAgICAgICAgICAgICAgICBiYW5uZXJFbGVtZW50Py5vZmZzZXRUb3AgPFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVbnJlYWROb3RpZmljYXRpb25WaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFJlYWRNZXNzYWdlSWQpIHtcbiAgICAgICAgICB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMudW5yZWFkQ291bnQgPSAwO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGVzID0gY2hhbm5lbD8uZGF0YT8ub3duX2NhcGFiaWxpdGllcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0ZXNTdHJpbmcgPSBbLi4uKGNhcGFiaWxpdGVzIHx8IFtdKV0uc29ydCgpLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbmFibGVkQWN0aW9uc1N0cmluZyA9IFsuLi4odGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMgfHwgW10pXVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIGlmIChjYXBhYmlsaXRlc1N0cmluZyAhPT0gZW5hYmxlZEFjdGlvbnNTdHJpbmcpIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyA9IGNhcGFiaWxpdGVzIHx8IFtdO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV3TWVzc2FnZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICB0aGlzLm5ld01lc3NhZ2VTdWJzY3JpcHRpb24gPSBjaGFubmVsLm9uKCdtZXNzYWdlLm5ldycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubmV3TWVzc2FnZVJlY2VpdmVkKGV2ZW50Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZVBhcmVudE1lc3NhZ2UkLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVzc2FnZSAmJlxuICAgICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSAmJlxuICAgICAgICAgIG1lc3NhZ2UuaWQgIT09IHRoaXMucGFyZW50TWVzc2FnZS5pZCAmJlxuICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnRNZXNzYWdlID09PSBtZXNzYWdlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZVRlbXBsYXRlJC5zdWJzY3JpYmUoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VUZW1wbGF0ZSA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXNzYWdlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5kYXRlU2VwYXJhdG9yVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VzdG9tRGF0ZVNlcGFyYXRvclRlbXBsYXRlID09PSB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1c3RvbURhdGVTZXBhcmF0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5uZXdNZXNzYWdlc0luZGljYXRvclRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1c3RvbW5ld01lc3NhZ2VzSW5kaWNhdG9yVGVtcGxhdGUgPT09IHRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VzdG9tbmV3TWVzc2FnZXNJbmRpY2F0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5uZXdNZXNzYWdlc05vdGlmaWNhdGlvblRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1c3RvbW5ld01lc3NhZ2VzTm90aWZpY2F0aW9uVGVtcGxhdGUgPT09IHRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VzdG9tbmV3TWVzc2FnZXNOb3RpZmljYXRpb25UZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5lbXB0eU1haW5NZXNzYWdlTGlzdFBsYWNlaG9sZGVyJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQ2hhbmdlZCA9IHRoaXMuZW1wdHlNYWluTWVzc2FnZUxpc3RUZW1wbGF0ZSAhPT0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5lbXB0eU1haW5NZXNzYWdlTGlzdFRlbXBsYXRlID0gdGVtcGxhdGUgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoaXNDaGFuZ2VkICYmIHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5VGhyZWFkTWVzc2FnZUxpc3RQbGFjZWhvbGRlciQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0NoYW5nZWQgPSB0aGlzLmVtcHR5VGhyZWFkTWVzc2FnZUxpc3RUZW1wbGF0ZSAhPT0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5lbXB0eVRocmVhZE1lc3NhZ2VMaXN0VGVtcGxhdGUgPSB0ZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICAgIGlmIChpc0NoYW5nZWQgJiYgdGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tb2RlIHx8IGNoYW5nZXMuZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgIHRoaXMuc2V0TWVzc2FnZXMkKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmRpcmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuanVtcFRvTGF0ZXN0TWVzc2FnZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlld0luaXRlZCA9IHRydWU7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+XG4gICAgICAgIHRoaXMuc2Nyb2xsZWQoKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5pc0p1bXBpbmdUb01lc3NhZ2UpIHtcbiAgICAgIHRoaXMuaXNOZXdNZXNzYWdlU2VudEJ5VXNlciA9IGZhbHNlO1xuICAgICAgdGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5hbmNob3JNZXNzYWdlVG9wT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvICYmIHRoaXMubG9hZGluZ1N0YXRlID09PSAnaWRsZScpIHtcbiAgICAgIHRoaXMucHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAoIXRoaXMuaXNVc2VyU2Nyb2xsZWQgJiZcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudD8uc2Nyb2xsSGVpZ2h0ID5cbiAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAgICAgdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpICE9PVxuICAgICAgICAgICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnID8gJ2JvdHRvbScgOiAndG9wJykpIHx8XG4gICAgICAodGhpcy5pc1VzZXJTY3JvbGxlZCAmJiB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuanVtcFRvTGF0ZXN0TWVzc2FnZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMubmV3TWVzc2FnZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5zY3JvbGxFbmRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxFbmRUaW1lb3V0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tJZlVucmVhZE5vdGlmaWNhdGlvbklzVmlzaWJsZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNoZWNrSWZVbnJlYWROb3RpZmljYXRpb25Jc1Zpc2libGVUaW1lb3V0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuanVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJpbGl0eVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmp1bXBUb0xhdGVzdEJ1dHRvblZpc2liaWxpdHlUaW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy5kaXNwb3NlVmlydHVhbGl6ZWRMaXN0KCk7XG4gIH1cblxuICB0cmFja0J5TWVzc2FnZUlkKF86IG51bWJlciwgaXRlbTogU3RyZWFtTWVzc2FnZSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgdHJhY2tCeVVzZXJJZChfOiBudW1iZXIsIHVzZXI6IFVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiB1c2VyLmlkO1xuICB9XG5cbiAganVtcFRvTGF0ZXN0TWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3QpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCdcbiAgICAgICAgPyB0aGlzLnNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgOiB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5qdW1wVG9NZXNzYWdlKFxuICAgICAgICAnbGF0ZXN0JyxcbiAgICAgICAgdGhpcy5tb2RlID09PSAndGhyZWFkJyA/IHRoaXMucGFyZW50TWVzc2FnZT8uaWQgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9Cb3R0b20oKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgKyAwLjE7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkpIHtcbiAgICAgIHRoaXMuZm9yY2VSZXBhaW50U3ViamVjdC5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9Ub3AoKSB7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICB9XG5cbiAgc2Nyb2xsZWQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPT09XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodFxuICAgICkge1xuICAgICAgaWYgKHRoaXMuaXNKdW1wVG9MYXRlc3RCdXR0b25WaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuaXNKdW1wVG9MYXRlc3RCdXR0b25WaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubmV3TWVzc2FnZUNvdW50V2hpbGVCZWluZ1Njcm9sbGVkID0gMDtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsJC5uZXh0KCk7XG4gICAgbGV0IHNjcm9sbFBvc2l0aW9uID0gdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgaXNVc2VyU2Nyb2xsZWQgPVxuICAgICAgKHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCdcbiAgICAgICAgPyBzY3JvbGxQb3NpdGlvbiAhPT0gJ2JvdHRvbSdcbiAgICAgICAgOiBzY3JvbGxQb3NpdGlvbiAhPT0gJ3RvcCcpIHx8ICF0aGlzLmlzTGF0ZXN0TWVzc2FnZUluTGlzdDtcbiAgICBpZiAodGhpcy5pc1VzZXJTY3JvbGxlZCAhPT0gaXNVc2VyU2Nyb2xsZWQpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVc2VyU2Nyb2xsZWQgPSBpc1VzZXJTY3JvbGxlZDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkKSB7XG4gICAgICAgICAgdGhpcy5uZXdNZXNzYWdlQ291bnRXaGlsZUJlaW5nU2Nyb2xsZWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZUp1bXBUb0xhdGVzdEJ1dHRvbkR1cmluZ1Njcm9sbCkge1xuICAgICAgaWYgKHRoaXMuaXNKdW1wVG9MYXRlc3RCdXR0b25WaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuaXNKdW1wVG9MYXRlc3RCdXR0b25WaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuanVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJpbGl0eVRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuanVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJpbGl0eVRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgdGhpcy5qdW1wVG9MYXRlc3RCdXR0b25WaXNpYmlsaXR5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc1VzZXJTY3JvbGxlZCkge1xuICAgICAgICAgIHRoaXMuaXNKdW1wVG9MYXRlc3RCdXR0b25WaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmp1bXBUb0xhdGVzdEJ1dHRvblZpc2liaWxpdHlUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZTY3JvbGxQb3NpdGlvbiA9IHRoaXMuc2Nyb2xsUG9zaXRpb24kLmdldFZhbHVlKCk7XG5cbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd0b3AtdG8tYm90dG9tJykge1xuICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9ICdib3R0b20nO1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAndG9wJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldlNjcm9sbFBvc2l0aW9uICE9PSBzY3JvbGxQb3NpdGlvbiAmJiAhdGhpcy5pc0p1bXBpbmdUb01lc3NhZ2UpIHtcbiAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgc2Nyb2xsUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIHRoaXMudmlydHVhbGl6ZWRMaXN0Py52aXJ0dWFsaXplZEl0ZW1zJFxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUlkVG9BbmNob3JUbyA9XG4gICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID09PSAndG9wJ1xuICAgICAgICAgICAgICAgID8gaXRlbXNbMF0/LmlkXG4gICAgICAgICAgICAgICAgOiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXT8uaWQ7XG4gICAgICAgICAgICB0aGlzLmFuY2hvck1lc3NhZ2VUb3BPZmZzZXQgPSBkb2N1bWVudFxuICAgICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQodGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvKVxuICAgICAgICAgICAgICA/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPy50b3A7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uJC5uZXh0KHNjcm9sbFBvc2l0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGp1bXBUb0ZpcnN0VW5yZWFkTWVzc2FnZSgpIHtcbiAgICBpZiAoIXRoaXMubGFzdFJlYWRNZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0p1bXBpbmdUb0xhdGVzdFVucmVhZE1lc3NhZ2UgPSB0cnVlO1xuICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5qdW1wVG9NZXNzYWdlKHRoaXMubGFzdFJlYWRNZXNzYWdlSWQpO1xuICB9XG5cbiAgZ2V0VHlwaW5nSW5kaWNhdG9yQ29udGV4dCgpOiBUeXBpbmdJbmRpY2F0b3JDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdXNlcnNUeXBpbmckOiB0aGlzLnVzZXJzVHlwaW5nJCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0VHlwaW5nSW5kaWNhdG9yVGV4dCh1c2VyczogVXNlclJlc3BvbnNlW10pIHtcbiAgICBjb25zdCB0ZXh0ID0gbGlzdFVzZXJzKHVzZXJzKTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgaXNTZW50QnlDdXJyZW50VXNlcihtZXNzYWdlPzogU3RyZWFtTWVzc2FnZSkge1xuICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZS51c2VyPy5pZCA9PT0gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5jaGF0Q2xpZW50LnVzZXI/LmlkO1xuICB9XG5cbiAgcGFyc2VEYXRlKGRhdGU6IERhdGUpIHtcbiAgICBpZiAodGhpcy5wYXJzZWREYXRlcy5oYXMoZGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlZERhdGVzLmdldChkYXRlKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IHRoaXMuZGF0ZVBhcnNlci5wYXJzZURhdGUoZGF0ZSk7XG4gICAgdGhpcy5wYXJzZWREYXRlcy5zZXQoZGF0ZSwgcGFyc2VkRGF0ZSk7XG4gICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gIH1cblxuICBnZXQgcmVwbHlDb3VudFBhcmFtKCkge1xuICAgIHJldHVybiB7IHJlcGx5Q291bnQ6IHRoaXMucGFyZW50TWVzc2FnZT8ucmVwbHlfY291bnQgfTtcbiAgfVxuXG4gIGdldCBlbXB0eUxpc3RUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnbWFpbidcbiAgICAgID8gdGhpcy5lbXB0eU1haW5NZXNzYWdlTGlzdFRlbXBsYXRlXG4gICAgICA6IHRoaXMuZW1wdHlUaHJlYWRNZXNzYWdlTGlzdFRlbXBsYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVzZXJ2ZVNjcm9sbGJhclBvc2l0aW9uKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VUb0FsaWduVG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1lc3NhZ2VJZFRvQW5jaG9yVG8pO1xuICAgIHRoaXMubWVzc2FnZUlkVG9BbmNob3JUbyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCArPVxuICAgICAgKG1lc3NhZ2VUb0FsaWduVG8/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPy50b3AgfHwgMCkgLVxuICAgICAgKHRoaXMuYW5jaG9yTWVzc2FnZVRvcE9mZnNldCB8fCAwKTtcbiAgICB0aGlzLmFuY2hvck1lc3NhZ2VUb3BPZmZzZXQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkpIHtcbiAgICAgIHRoaXMuZm9yY2VSZXBhaW50U3ViamVjdC5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JjZVJlcGFpbnQoKSB7XG4gICAgLy8gU29sdmVzIHRoZSBpc3N1ZSBvZiBlbXB0eSBzY3JlZW4gb24gU2FmYXJpIHdoZW4gc2Nyb2xsaW5nXG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0OyAvLyBubyBuZWVkIHRvIHN0b3JlIHRoaXMgYW55d2hlcmUsIHRoZSByZWZlcmVuY2UgaXMgZW5vdWdoXG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGdldFNjcm9sbFBvc2l0aW9uKCk6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbWlkZGxlJyB7XG4gICAgbGV0IHBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ21pZGRsZScgPSAnbWlkZGxlJztcbiAgICBpZiAoXG4gICAgICBNYXRoLmZsb29yKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wKSA8PVxuICAgICAgKHRoaXMucGFyZW50TWVzc2FnZUVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IDApXG4gICAgKSB7XG4gICAgICBwb3NpdGlvbiA9ICd0b3AnO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBNYXRoLmNlaWwodGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3ApICtcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgK1xuICAgICAgICAxID49XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgICkge1xuICAgICAgcG9zaXRpb24gPSAnYm90dG9tJztcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBwcml2YXRlIHNldE1lc3NhZ2VzJCgpIHtcbiAgICB0aGlzLmRpc3Bvc2VWaXJ0dWFsaXplZExpc3QoKTtcbiAgICB0aGlzLnZpcnR1YWxpemVkTGlzdCA9IG5ldyBWaXJ0dWFsaXplZE1lc3NhZ2VMaXN0U2VydmljZShcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb24kLFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZVxuICAgICk7XG4gICAgdGhpcy5xdWVyeVN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy52aXJ0dWFsaXplZExpc3QucXVlcnlTdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgKHF1ZXJ5U3RhdGUpID0+IHtcbiAgICAgICAgbGV0IG1hcHBlZFN0YXRlOiAnaWRsZScgfCAnbG9hZGluZy10b3AnIHwgJ2xvYWRpbmctYm90dG9tJyA9ICdpZGxlJztcbiAgICAgICAgaWYgKHF1ZXJ5U3RhdGUuc3RhdGUuaW5jbHVkZXMoJ2xvYWRpbmcnKSkge1xuICAgICAgICAgIG1hcHBlZFN0YXRlID0gKHF1ZXJ5U3RhdGUuc3RhdGUgYXMgJ2xvYWRpbmctdG9wJykgfHwgJ2xvYWRpbmctYm90dG9tJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVkU3RhdGUgIT09IHRoaXMubG9hZGluZ1N0YXRlKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBtYXBwZWRTdGF0ZTtcbiAgICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5tZXNzYWdlcyQgPSB0aGlzLnZpcnR1YWxpemVkTGlzdC52aXJ0dWFsaXplZEl0ZW1zJC5waXBlKFxuICAgICAgdGFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFN0YXRlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkpIHtcbiAgICAgICAgICAvLyBjZFJlZi5kZXRlY3RDaGFuZ2VzKCkgaXNuJ3QgZW5vdWdoIGhlcmUsIHRlc3Qgd2lsbCBmYWlsXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5pc0VtcHR5ID0gZmFsc2UpLCAwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmlzSnVtcGluZ1RvTGF0ZXN0VW5yZWFkTWVzc2FnZSAmJlxuICAgICAgICAgICF0aGlzLmZpcnN0VW5yZWFkTWVzc2FnZUlkICYmXG4gICAgICAgICAgdGhpcy5sYXN0UmVhZE1lc3NhZ2VJZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBsYXN0UmVhZEluZGV4ID0gbWVzc2FnZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKG0pID0+IG0uaWQgPT09IHRoaXMubGFzdFJlYWRNZXNzYWdlSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZmlyc3RVbnJlYWRNZXNzYWdlSWQgPVxuICAgICAgICAgICAgbWVzc2FnZXNbbGFzdFJlYWRJbmRleCArIDFdPy5pZCB8fCB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcChcbiAgICAgICAgKG1lc3NhZ2VzKSA9PlxuICAgICAgICAgICh0aGlzLmxhc3RTZW50TWVzc2FnZUlkID0gWy4uLm1lc3NhZ2VzXVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAgIChtKSA9PlxuICAgICAgICAgICAgICAgIG0udXNlcj8uaWQgPT09IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudD8udXNlcj8uaWQgJiZcbiAgICAgICAgICAgICAgICBtLnN0YXR1cyAhPT0gJ3NlbmRpbmcnXG4gICAgICAgICAgICApPy5pZClcbiAgICAgICksXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhdGVzdE1lc3NhZ2VJbkxpc3QgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbDtcbiAgICAgICAgY29uc3QgbWVzc2FnZXNGcm9tU3RhdGUgPVxuICAgICAgICAgICh0aGlzLm1vZGUgPT09ICdtYWluJ1xuICAgICAgICAgICAgPyBjaGFubmVsPy5zdGF0ZS5sYXRlc3RNZXNzYWdlc1xuICAgICAgICAgICAgOiBjaGFubmVsPy5zdGF0ZS50aHJlYWRzW3RoaXMucGFyZW50TWVzc2FnZT8uaWQgfHwgJyddKSB8fCBbXTtcbiAgICAgICAgdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3QgPVxuICAgICAgICAgICFsYXRlc3RNZXNzYWdlSW5MaXN0IHx8XG4gICAgICAgICAgbGF0ZXN0TWVzc2FnZUluTGlzdC5jaWQgIT09IGNoYW5uZWw/LmNpZCB8fFxuICAgICAgICAgIGxhdGVzdE1lc3NhZ2VJbkxpc3Q/LmlkID09PVxuICAgICAgICAgICAgbWVzc2FnZXNGcm9tU3RhdGVbbWVzc2FnZXNGcm9tU3RhdGUubGVuZ3RoIC0gMV0/LmlkO1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0KSB7XG4gICAgICAgICAgdGhpcy5pc1VzZXJTY3JvbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJ1xuICAgICAgICAgID8gbWVzc2FnZXNcbiAgICAgICAgICA6IFsuLi5tZXNzYWdlc10ucmV2ZXJzZSgpO1xuICAgICAgfSksXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JvdXBTdHlsZXMgPSBtZXNzYWdlcy5tYXAoKG0sIGkpID0+XG4gICAgICAgICAgZ2V0R3JvdXBTdHlsZXMobSwgbWVzc2FnZXNbaSAtIDFdLCBtZXNzYWdlc1tpICsgMV0sIHtcbiAgICAgICAgICAgIGxhc3RSZWFkTWVzc2FnZUlkOiB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNOZXh0TWVzc2FnZU9uU2VwYXJhdGVEYXRlID0gbWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tJZk9uU2VwYXJhdGVEYXRlcyhtLCBtZXNzYWdlc1tpICsgMV0pXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgICBpZiAodGhpcy52aXJ0dWFsaXplZExpc3Q/Lmp1bXBUb0l0ZW0kKSB7XG4gICAgICB0aGlzLmp1bXBUb0l0ZW1TdWJzY3JpcHRpb24gPSB0aGlzLnZpcnR1YWxpemVkTGlzdC5qdW1wVG9JdGVtJFxuICAgICAgICAucGlwZShmaWx0ZXIoKGp1bXBUb01lc3NhZ2UpID0+ICEhanVtcFRvTWVzc2FnZS5pdGVtPy5pZCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGp1bXBUb01lc3NhZ2UpID0+IHtcbiAgICAgICAgICBsZXQgbWVzc2FnZUlkID0ganVtcFRvTWVzc2FnZS5pdGVtPy5pZDtcbiAgICAgICAgICBpZiAobWVzc2FnZUlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0p1bXBpbmdUb0xhdGVzdFVucmVhZE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZUlkID0gdGhpcy5maXJzdFVucmVhZE1lc3NhZ2VJZCB8fCBtZXNzYWdlSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoanVtcFRvTWVzc2FnZS5wb3NpdGlvbiAhPT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZE1lc3NhZ2VJZCA9IG1lc3NhZ2VJZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd0b3AtdG8tYm90dG9tJykge1xuICAgICAgICAgICAgICBqdW1wVG9NZXNzYWdlLnBvc2l0aW9uID0gJ3RvcCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzSnVtcGluZ1RvTWVzc2FnZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE1lc3NhZ2VJbnRvVmlldyh7XG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogdGhpcy5maXJzdFVucmVhZE1lc3NhZ2VJZCB8fCBtZXNzYWdlSWQsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBqdW1wVG9NZXNzYWdlLnBvc2l0aW9uIHx8ICdtaWRkbGUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2Nyb2xsU3RhdGUoKSB7XG4gICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcbiAgICB0aGlzLmlzVXNlclNjcm9sbGVkID0gZmFsc2U7XG4gICAgdGhpcy5tZXNzYWdlSWRUb0FuY2hvclRvID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYW5jaG9yTWVzc2FnZVRvcE9mZnNldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm5ld01lc3NhZ2VDb3VudFdoaWxlQmVpbmdTY3JvbGxlZCA9IDA7XG4gICAgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyID0gZmFsc2U7XG4gICAgdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3QgPSB0cnVlO1xuICAgIHRoaXMuaXNKdW1waW5nVG9NZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxQb3NpdGlvbiQubmV4dCgnYm90dG9tJyk7XG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSAnaWRsZSc7XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VWaXJ0dWFsaXplZExpc3QoKSB7XG4gICAgdGhpcy52aXJ0dWFsaXplZExpc3Q/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLmp1bXBUb0l0ZW1TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5xdWVyeVN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgdXNlcnNUeXBpbmckKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICd0aHJlYWQnXG4gICAgICA/IHRoaXMudXNlcnNUeXBpbmdJblRocmVhZCRcbiAgICAgIDogdGhpcy51c2Vyc1R5cGluZ0luQ2hhbm5lbCQ7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbE1lc3NhZ2VJbnRvVmlldyhcbiAgICBvcHRpb25zOiB7IG1lc3NhZ2VJZDogc3RyaW5nOyBwb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyB8ICdtaWRkbGUnIH0sXG4gICAgd2l0aFJldHJ5OiBib29sZWFuID0gdHJ1ZVxuICApIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5tZXNzYWdlSWQpO1xuICAgIGlmICghZWxlbWVudCAmJiB3aXRoUmV0cnkpIHtcbiAgICAgIC8vIElmIHRoZSBtZXNzYWdlIHdhcyBuZXdseSBpbnNlcnRlZCBpbnRvIGFjdGl2ZUNoYW5uZWxNZXNzYWdlcyQsIHRoZSBtZXNzYWdlIHdpbGwgYmUgcmVuZGVyZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSAtPiB3YWl0IGZvciB0aGlzIGN5Y2xlIHRvIGNvbXBsZXRlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsTWVzc2FnZUludG9WaWV3KG9wdGlvbnMsIGZhbHNlKSk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50KSB7XG4gICAgICBjb25zdCBibG9ja01hcHBpbmc6IHsgW2tleTogc3RyaW5nXTogU2Nyb2xsTG9naWNhbFBvc2l0aW9uIH0gPSB7XG4gICAgICAgIHRvcDogJ3N0YXJ0JyxcbiAgICAgICAgYm90dG9tOiAnZW5kJyxcbiAgICAgICAgbWlkZGxlOiAnY2VudGVyJyxcbiAgICAgIH07XG4gICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmxvY2s6IGJsb2NrTWFwcGluZ1tvcHRpb25zLnBvc2l0aW9uXSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24gIT09ICdtaWRkbGUnKSB7XG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24gPT09ICdib3R0b20nXG4gICAgICAgICAgPyB0aGlzLnNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgICA6IHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzSnVtcGluZ1RvTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgfSwgMCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZE1lc3NhZ2VJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5maXJzdFVucmVhZE1lc3NhZ2VJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0p1bXBpbmdUb0xhdGVzdFVucmVhZE1lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5ld01lc3NhZ2VSZWNlaXZlZChtZXNzYWdlOiBNZXNzYWdlUmVzcG9uc2UpIHtcbiAgICBpZiAoXG4gICAgICAodGhpcy5tb2RlID09PSAnbWFpbicgJiYgbWVzc2FnZS5wYXJlbnRfaWQpIHx8XG4gICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiBtZXNzYWdlLnBhcmVudF9pZCAhPT0gdGhpcy5wYXJlbnRNZXNzYWdlPy5pZClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZXdNZXNzYWdlU2VudEJ5Q3VycmVudFVzZXIgPVxuICAgICAgbWVzc2FnZS51c2VyPy5pZCA9PT0gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5jaGF0Q2xpZW50Py51c2VyPy5pZDtcblxuICAgIGxldCBzaG91bGREZXRlY3RDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuaXNOZXdNZXNzYWdlU2VudEJ5VXNlciAmJiBpc05ld01lc3NhZ2VTZW50QnlDdXJyZW50VXNlcikge1xuICAgICAgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyID0gdHJ1ZTtcbiAgICAgIHNob3VsZERldGVjdENoYW5nZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVXNlclNjcm9sbGVkKSB7XG4gICAgICB0aGlzLm5ld01lc3NhZ2VDb3VudFdoaWxlQmVpbmdTY3JvbGxlZCsrO1xuICAgICAgc2hvdWxkRGV0ZWN0Q2hhbmdlcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyICYmIHRoaXMudW5yZWFkQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy51bnJlYWRDb3VudCsrO1xuICAgICAgc2hvdWxkRGV0ZWN0Q2hhbmdlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZERldGVjdENoYW5nZXMgJiYgdGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZk9uU2VwYXJhdGVEYXRlcyhcbiAgICBtZXNzYWdlPzogU3RyZWFtTWVzc2FnZSxcbiAgICBuZXh0TWVzc2FnZT86IFN0cmVhbU1lc3NhZ2VcbiAgKSB7XG4gICAgaWYgKCFtZXNzYWdlIHx8ICFuZXh0TWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaXNPblNlcGFyYXRlRGF0ZShtZXNzYWdlLmNyZWF0ZWRfYXQsIG5leHRNZXNzYWdlLmNyZWF0ZWRfYXQpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICpuZ0lmPVwiXG4gICAgbGFzdFJlYWRNZXNzYWdlSWQgJiZcbiAgICBpc1VucmVhZE5vdGlmaWNhdGlvblZpc2libGUgJiZcbiAgICBvcGVuTWVzc2FnZUxpc3RBdCA9PT0gJ2xhc3QtbWVzc2FnZScgJiZcbiAgICBkaXNwbGF5VW5yZWFkU2VwYXJhdG9yXG4gIFwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgY3VzdG9tbmV3TWVzc2FnZXNOb3RpZmljYXRpb25UZW1wbGF0ZSB8fFxuICAgICAgICBkZWZhdWx0VW5yZWFkTWVzc2FnZXNOb3RpZmljYXRpb247XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHVucmVhZENvdW50OiB1bnJlYWRDb3VudCxcbiAgICAgICAgb25EaXNtaXNzOiBtZXNzYWdlTm90aWZpY2F0aW9uRGlzbWlzc0NsaWNrZWQsXG4gICAgICAgIG9uSnVtcDogbWVzc2FnZU5vdGlmaWNhdGlvbkp1bXBDbGlja2VkXG4gICAgICB9XG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGVcbiAgI2RlZmF1bHRVbnJlYWRNZXNzYWdlc05vdGlmaWNhdGlvblxuICBsZXQtdW5yZWFkQ291bnQ9XCJ1bnJlYWRDb3VudFwiXG4gIGxldC1vbkRpc21pc3M9XCJvbkRpc21pc3NcIlxuICBsZXQtb25KdW1wPVwib25KdW1wXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX3VucmVhZC1tZXNzYWdlcy1ub3RpZmljYXRpb25cIlxuICAgIGRhdGEtdGVzdGlkPVwidW5yZWFkLW1lc3NhZ2VzLW5vdGlmaWNhdGlvblwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cInVucmVhZC1tZXNzYWdlcy1ub3RpZmljYXRpb24tanVtcC10by1tZXNzYWdlXCJcbiAgICAgIChjbGljayk9XCJvbkp1bXAoKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHVucmVhZENvdW50ID4gMCAmJiAhaGlkZVVucmVhZENvdW50Rm9yTm90aWZpY2F0aW9uQW5kSW5kaWNhdG9yO1xuICAgICAgICAgIGVsc2Ugbm9VbnJlYWRDb3VudFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICB7e1xuICAgICAgICAgICh1bnJlYWRDb3VudCA9PT0gMVxuICAgICAgICAgICAgPyBcInN0cmVhbUNoYXQuXFx7XFx7Y291bnRcXH1cXH0gdW5yZWFkIG1lc3NhZ2VcIlxuICAgICAgICAgICAgOiBcInN0cmVhbUNoYXQuXFx7XFx7Y291bnRcXH1cXH0gdW5yZWFkIG1lc3NhZ2VzXCJcbiAgICAgICAgICApIHwgdHJhbnNsYXRlIDogeyBjb3VudDogdW5yZWFkQ291bnQgfVxuICAgICAgICB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI25vVW5yZWFkQ291bnQ+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5VbnJlYWQgbWVzc2FnZXNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cInVucmVhZC1tZXNzYWdlcy1ub3RpZmljYXRpb24tZGlzbWlzc1wiXG4gICAgICAoY2xpY2spPVwib25EaXNtaXNzKClcIlxuICAgID5cbiAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwiY2xvc2VcIj48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48ZGl2ICNzY3JvbGxDb250YWluZXIgZGF0YS10ZXN0aWQ9XCJzY3JvbGwtY29udGFpbmVyXCIgY2xhc3M9XCJzdHItY2hhdF9fbGlzdFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ21haW4nICYmIGlzRW1wdHkgJiYgZW1wdHlMaXN0VGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlMaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcmV2ZXJzZS1pbmZpbml0ZS1zY3JvbGwgc3RyLWNoYXRfX21lc3NhZ2UtbGlzdC1zY3JvbGxcIj5cbiAgICA8dWwgY2xhc3M9XCJzdHItY2hhdF9fdWxcIj5cbiAgICAgIDxsaVxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd0aHJlYWQnICYmIHBhcmVudE1lc3NhZ2VcIlxuICAgICAgICAjcGFyZW50TWVzc2FnZUVsZW1lbnRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJwYXJlbnQtbWVzc2FnZVwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3BhcmVudC1tZXNzYWdlLWxpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IHBhcmVudE1lc3NhZ2UsIGluZGV4OiAncGFyZW50JyB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwicmVwbHktY291bnRcIiBjbGFzcz1cInN0ci1jaGF0X190aHJlYWQtc3RhcnRcIj5cbiAgICAgICAgICB7e3BhcmVudE1lc3NhZ2UucmVwbHlfY291bnQgPT09IDEgPyAoJ3N0cmVhbUNoYXQuMSByZXBseScgfCB0cmFuc2xhdGUpIDogKCdzdHJlYW1DaGF0Lnt7IHJlcGx5Q291bnQgfX1cbiAgICAgICAgICByZXBsaWVzJyB8IHRyYW5zbGF0ZTpyZXBseUNvdW50UGFyYW0pfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0aHJlYWQnICYmIGlzRW1wdHkgJiYgZW1wdHlMaXN0VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5TGlzdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzdHJlYW0tbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAoKGxvYWRpbmdTdGF0ZSA9PT0gJ2xvYWRpbmctdG9wJyAmJiBkaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJykgfHxcbiAgICAgICAgICAgIChsb2FkaW5nU3RhdGUgPT09ICdsb2FkaW5nLWJvdHRvbScgJiZcbiAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScpKSAmJlxuICAgICAgICAgICAgZGlzcGxheUxvYWRpbmdJbmRpY2F0b3I7XG4gICAgICAgICAgZWxzZSBsb2FkaW5nSW5kaWNhdG9yUGxhY2Vob2xkZXJcbiAgICAgICAgXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b3AtbG9hZGluZy1pbmRpY2F0b3JcIlxuICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VzJCB8IGFzeW5jIGFzIG1lc3NhZ2VzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzO1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgIGxldCBpc0ZpcnN0ID0gZmlyc3Q7XG4gICAgICAgICAgICBsZXQgaXNMYXN0ID0gbGFzdDtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlNZXNzYWdlSWRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlyc3RcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBkYXRlU2VwYXJhdG9yO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGU6IG1lc3NhZ2UuY3JlYXRlZF9hdCxcbiAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGU6IHBhcnNlRGF0ZShtZXNzYWdlLmNyZWF0ZWRfYXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19saSBzdHItY2hhdF9fbGktLXt7IGdyb3VwU3R5bGVzW2ldIH19XCJcbiAgICAgICAgICAgIGlkPVwie3sgbWVzc2FnZS5pZCB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IG1lc3NhZ2UsIGluZGV4OiBpIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIChsYXN0UmVhZE1lc3NhZ2VJZCA9PT0gbWVzc2FnZT8uaWQgJiZcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJykgfHxcbiAgICAgICAgICAgICAgKGRpcmVjdGlvbiA9PT0gJ3RvcC10by1ib3R0b20nICYmXG4gICAgICAgICAgICAgICAgbGFzdFJlYWRNZXNzYWdlSWQgPT09IG1lc3NhZ2VzW2kgKyAxXT8uaWQpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAqbmdJZj1cImRpc3BsYXlVbnJlYWRTZXBhcmF0b3JcIlxuICAgICAgICAgICAgICBpZD1cInN0cmVhbS1jaGF0LW5ldy1tZXNzYWdlLWluZGljYXRvclwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibmV3LW1lc3NhZ2VzLWluZGljYXRvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2xpIHN0ci1jaGF0X191bnJlYWQtbWVzc2FnZXMtc2VwYXJhdG9yLXdyYXBwZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGN1c3RvbW5ld01lc3NhZ2VzSW5kaWNhdG9yVGVtcGxhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE5ld01lc3NhZ2VzSW5kaWNhdG9yO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogeyB1bnJlYWRDb3VudDogdW5yZWFkQ291bnQgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTmV4dE1lc3NhZ2VPblNlcGFyYXRlRGF0ZVtpXVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGRhdGVTZXBhcmF0b3I7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgZGF0ZTogbWVzc2FnZXNbaSArIDFdLmNyZWF0ZWRfYXQsXG4gICAgICAgICAgICAgICAgICBwYXJzZWREYXRlOiBwYXJzZURhdGUobWVzc2FnZXNbaSArIDFdLmNyZWF0ZWRfYXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHN0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICgobG9hZGluZ1N0YXRlID09PSAnbG9hZGluZy1ib3R0b20nICYmXG4gICAgICAgICAgICBkaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJykgfHxcbiAgICAgICAgICAgIChsb2FkaW5nU3RhdGUgPT09ICdsb2FkaW5nLXRvcCcgJiZcbiAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScpKSAmJlxuICAgICAgICAgICAgZGlzcGxheUxvYWRpbmdJbmRpY2F0b3I7XG4gICAgICAgICAgZWxzZSBsb2FkaW5nSW5kaWNhdG9yUGxhY2Vob2xkZXJcbiAgICAgICAgXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJib3R0b20tbG9hZGluZy1pbmRpY2F0b3JcIlxuICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nSW5kaWNhdG9yUGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC91bD5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUeXBpbmdJbmRpY2F0b3IgbGV0LXVzZXJzVHlwaW5nJD1cInVzZXJzVHlwaW5nJFwiPlxuICAgICAgPCEtLSBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL25vLWFueSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIkYW55KHVzZXJzVHlwaW5nJCB8IGFzeW5jKSBhcyB1c2Vyc1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJ1c2Vycy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInR5cGluZy1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3Igc3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3ItLXR5cGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdHNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInR5cGluZy11c2Vyc1wiXG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX191c2Vyc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgdXNlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgPyAoXCJzdHJlYW1DaGF0LnVzZXIgaXMgdHlwaW5nXCJcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyB1c2VyOiBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzKSB9KVxuICAgICAgICAgICAgICAgIDogKFwic3RyZWFtQ2hhdC51c2VycyBhcmUgdHlwaW5nXCJcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyB1c2VyczogZ2V0VHlwaW5nSW5kaWNhdG9yVGV4dCh1c2VycykgfSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICB0eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSB8fCBkZWZhdWx0VHlwaW5nSW5kaWNhdG9yO1xuICAgICAgICBjb250ZXh0OiBnZXRUeXBpbmdJbmRpY2F0b3JDb250ZXh0KClcbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInN0ci1jaGF0X19qdW1wLXRvLWxhdGVzdC1tZXNzYWdlXCI+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImlzVXNlclNjcm9sbGVkICYmIGlzSnVtcFRvTGF0ZXN0QnV0dG9uVmlzaWJsZVwiXG4gICAgZGF0YS10ZXN0aWQ9XCJzY3JvbGwtdG8tbGF0ZXN0XCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1zY3JvbGwtdG8tbGF0ZXN0IHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1zY3JvbGwtdG8tbGF0ZXN0LXJpZ2h0IHN0ci1jaGF0X19jaXJjbGUtZmFiXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwianVtcFRvTGF0ZXN0TWVzc2FnZSgpXCJcbiAgICAoY2xpY2spPVwianVtcFRvTGF0ZXN0TWVzc2FnZSgpXCJcbiAgPlxuICAgIDxzdHJlYW0taWNvblxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fanVtcC10by1sYXRlc3QtaWNvbiBzdHItY2hhdF9fY2lyY2xlLWZhYi1pY29uXCJcbiAgICAgIFtpY29uXT1cImRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnID8gJ2Fycm93LWRvd24nIDogJ2Fycm93LXVwJ1wiXG4gICAgPjwvc3RyZWFtLWljb24+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJuZXdNZXNzYWdlQ291bnRXaGlsZUJlaW5nU2Nyb2xsZWQgPiAwXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1zY3JvbGwtdG8tbGF0ZXN0LXVucmVhZC1jb3VudCBzdHItY2hhdF9fanVtcC10by1sYXRlc3QtdW5yZWFkLWNvdW50XCJcbiAgICA+XG4gICAgICB7eyBuZXdNZXNzYWdlQ291bnRXaGlsZUJlaW5nU2Nyb2xsZWQgfX1cbiAgICA8L2Rpdj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNtZXNzYWdlVGVtcGxhdGVDb250YWluZXIgbGV0LW1lc3NhZ2U9XCJtZXNzYWdlXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHRNZXNzYWdlVGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgbGV0LWlzTGFzdFNlbnRNZXNzYWdlPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgIGxldC1lbmFibGVkTWVzc2FnZUFjdGlvbnM9XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgIGxldC1tb2RlPVwibW9kZVwiXG4gICAgbGV0LWlzSGlnaGxpZ2h0ZWQ9XCJpc0hpZ2hsaWdodGVkXCJcbiAgICBsZXQtc2Nyb2xsJD1cInNjcm9sbCRcIlxuICA+XG4gICAgPHN0cmVhbS1tZXNzYWdlXG4gICAgICBbbWVzc2FnZV09XCJtZXNzYWdlSW5wdXRcIlxuICAgICAgW2lzTGFzdFNlbnRNZXNzYWdlXT1cImlzTGFzdFNlbnRNZXNzYWdlXCJcbiAgICAgIFtlbmFibGVkTWVzc2FnZUFjdGlvbnNdPVwiZW5hYmxlZE1lc3NhZ2VBY3Rpb25zXCJcbiAgICAgIFttb2RlXT1cIm1vZGVcIlxuICAgICAgW2lzSGlnaGxpZ2h0ZWRdPVwiaXNIaWdobGlnaHRlZFwiXG4gICAgICBbc2Nyb2xsJF09XCJzY3JvbGwkXCJcbiAgICA+PC9zdHJlYW0tbWVzc2FnZT5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBtZXNzYWdlVGVtcGxhdGUgfHwgZGVmYXVsdE1lc3NhZ2VUZW1wbGF0ZTtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgaXNMYXN0U2VudE1lc3NhZ2U6ICEhKFxuICAgICAgICAgIGxhc3RTZW50TWVzc2FnZUlkICYmIG1lc3NhZ2U/LmlkID09PSBsYXN0U2VudE1lc3NhZ2VJZFxuICAgICAgICApLFxuICAgICAgICBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IGVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgICAgbW9kZTogbW9kZSxcbiAgICAgICAgaXNIaWdobGlnaHRlZDogbWVzc2FnZT8uaWQgPT09IGhpZ2hsaWdodGVkTWVzc2FnZUlkLFxuICAgICAgICBzY3JvbGwkOiBzY3JvbGwkXG4gICAgICB9XG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkYXRlU2VwYXJhdG9yIGxldC1kYXRlPVwiZGF0ZVwiIGxldC1wYXJzZWREYXRlPVwicGFyc2VkRGF0ZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheURhdGVTZXBhcmF0b3JcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBjdXN0b21EYXRlU2VwYXJhdG9yVGVtcGxhdGUgfHwgZGVmYXVsdERhdGVTZXBhcmF0b3I7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBkYXRlOiBkYXRlLFxuICAgICAgICAgIHBhcnNlZERhdGU6IHBhcnNlZERhdGVcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZVxuICAgICNkZWZhdWx0RGF0ZVNlcGFyYXRvclxuICAgIGxldC1kYXRlPVwiZGF0ZVwiXG4gICAgbGV0LXBhcnNlZERhdGU9XCJwYXJzZWREYXRlXCJcbiAgPlxuICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJkYXRlLXNlcGFyYXRvclwiIGNsYXNzPVwic3RyLWNoYXRfX2RhdGUtc2VwYXJhdG9yXCI+XG4gICAgICA8aHJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBkYXRlU2VwYXJhdG9yVGV4dFBvcyA9PT0gJ3JpZ2h0JyB8fCBkYXRlU2VwYXJhdG9yVGV4dFBvcyA9PT0gJ2NlbnRlcidcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZGF0ZS1zZXBhcmF0b3ItbGluZVwiXG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kYXRlLXNlcGFyYXRvci1kYXRlXCI+XG4gICAgICAgIHt7IHBhcnNlZERhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGhyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgZGF0ZVNlcGFyYXRvclRleHRQb3MgPT09ICdsZWZ0JyB8fCBkYXRlU2VwYXJhdG9yVGV4dFBvcyA9PT0gJ2NlbnRlcidcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZGF0ZS1zZXBhcmF0b3ItbGluZVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TmV3TWVzc2FnZXNJbmRpY2F0b3IgbGV0LXVucmVhZENvdW50PVwidW5yZWFkQ291bnRcIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X191bnJlYWQtbWVzc2FnZXMtc2VwYXJhdG9yXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgdW5yZWFkQ291bnQgPiAwICYmICFoaWRlVW5yZWFkQ291bnRGb3JOb3RpZmljYXRpb25BbmRJbmRpY2F0b3I7XG4gICAgICAgIGVsc2Ugbm9VbnJlYWRDb3VudFxuICAgICAgXCJcbiAgICA+XG4gICAgICB7e1xuICAgICAgICAodW5yZWFkQ291bnQgPT09IDFcbiAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5cXHtcXHtjb3VudFxcfVxcfSB1bnJlYWQgbWVzc2FnZVwiXG4gICAgICAgICAgOiBcInN0cmVhbUNoYXQuXFx7XFx7Y291bnRcXH1cXH0gdW5yZWFkIG1lc3NhZ2VzXCJcbiAgICAgICAgKSB8IHRyYW5zbGF0ZSA6IHsgY291bnQ6IHVucmVhZENvdW50IH1cbiAgICAgIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub1VucmVhZENvdW50PlxuICAgICAge3sgXCJzdHJlYW1DaGF0LlVucmVhZCBtZXNzYWdlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -21,7 +21,7 @@ export class AudioRecorderService extends MultimediaRecorder {
|
|
|
21
21
|
* - For all other browsers we use audio/webm (which is then transcoded to wav)
|
|
22
22
|
*/
|
|
23
23
|
this.config = {
|
|
24
|
-
mimeType: isSafari ? 'audio/mp4;codecs=mp4a.40.2' : 'audio/webm',
|
|
24
|
+
mimeType: isSafari() ? 'audio/mp4;codecs=mp4a.40.2' : 'audio/webm',
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
enrichWithExtraData() {
|
|
@@ -76,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
76
76
|
type: Injectable,
|
|
77
77
|
args: [{ providedIn: NgModel }]
|
|
78
78
|
}], ctorParameters: function () { return [{ type: i1.NotificationService }, { type: i2.ChatClientService }, { type: i3.TranscoderService }, { type: i4.AmplitudeRecorderService }]; } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8tcmVjb3JkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi92b2ljZS1yZWNvcmRlci9hdWRpby1yZWNvcmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQXVCLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFFekM7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsa0JBRXpDO0lBVUMsWUFDRSxtQkFBd0MsRUFDeEMsV0FBOEIsRUFDOUIsVUFBNkIsRUFDckIsaUJBQTJDO1FBRW5ELEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFGNUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQWJyRDs7OztXQUlHO1FBQ0gsV0FBTSxHQUF3QjtZQUM1QixRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxZQUFZO1NBQ25FLENBQUM7SUFTRixDQUFDO0lBRVMsbUJBQW1CO1FBQzNCLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDMUMsQ0FBQztRQUVGLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMxRDtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWhDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBNkI7UUFDdEMsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6QyxPQUFPLE1BQU0sQ0FBQztTQUNmO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQzs7aUhBL0VVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRFAsT0FBTzsyRkFDcEIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFtcGxpdHVkZVJlY29yZGVyU2VydmljZSB9IGZyb20gJy4vYW1wbGl0dWRlLXJlY29yZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNTYWZhcmkgfSBmcm9tICcuLi9pcy1zYWZhcmknO1xuaW1wb3J0IHsgTWVkaWFSZWNvcmRlckNvbmZpZywgTXVsdGltZWRpYVJlY29yZGVyIH0gZnJvbSAnLi9tZWRpYS1yZWNvcmRlcic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zY29kZXJTZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2NvZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVzYW1wbGVXYXZlRm9ybSB9IGZyb20gJy4uL3dhdmUtZm9ybS1zYW1wbGVyJztcbmltcG9ydCB7IEF1ZGlvUmVjb3JkaW5nLCBNZWRpYVJlY29yZGluZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogVGhlIGBBdWRpb1JlY29yZGVyU2VydmljZWAgY2FuIHJlY29yZCBhbiBhdWRpbyBmaWxlLCB0aGUgU0RLIHVzZXMgdGhpcyB0byByZWNvcmQgYSB2b2ljZSBtZXNzYWdlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogTmdNb2RlbCB9KVxuZXhwb3J0IGNsYXNzIEF1ZGlvUmVjb3JkZXJTZXJ2aWNlIGV4dGVuZHMgTXVsdGltZWRpYVJlY29yZGVyPFxuICBPbWl0PEF1ZGlvUmVjb3JkaW5nLCBrZXlvZiBNZWRpYVJlY29yZGluZz5cbj4ge1xuICAvKipcbiAgICogRHVlIHRvIGJyb3dzZXIgcmVzdHJpY3Rpb25zIHRoZSBmb2xsb3dpbmcgY29uZmlnIGlzIHVzZWQ6XG4gICAqIC0gSW4gU2FmYXJpIHdlIHJlY29yZCBpbiBhdWRpby9tcDRcbiAgICogLSBGb3IgYWxsIG90aGVyIGJyb3dzZXJzIHdlIHVzZSBhdWRpby93ZWJtICh3aGljaCBpcyB0aGVuIHRyYW5zY29kZWQgdG8gd2F2KVxuICAgKi9cbiAgY29uZmlnOiBNZWRpYVJlY29yZGVyQ29uZmlnID0ge1xuICAgIG1pbWVUeXBlOiBpc1NhZmFyaSgpID8gJ2F1ZGlvL21wNDtjb2RlY3M9bXA0YS40MC4yJyA6ICdhdWRpby93ZWJtJyxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIGNoYXRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICB0cmFuc2NvZGVyOiBUcmFuc2NvZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGFtcGxpdHVkZVJlY29yZGVyOiBBbXBsaXR1ZGVSZWNvcmRlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIobm90aWZpY2F0aW9uU2VydmljZSwgY2hhdFNlcnZpY2UsIHRyYW5zY29kZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVucmljaFdpdGhFeHRyYURhdGEoKSB7XG4gICAgY29uc3Qgd2F2ZWZvcm1EYXRhID0gcmVzYW1wbGVXYXZlRm9ybShcbiAgICAgIHRoaXMuYW1wbGl0dWRlUmVjb3JkZXIuYW1wbGl0dWRlcyxcbiAgICAgIHRoaXMuYW1wbGl0dWRlUmVjb3JkZXIuY29uZmlnLnNhbXBsZUNvdW50XG4gICAgKTtcblxuICAgIHJldHVybiB7IHdhdmVmb3JtX2RhdGE6IHdhdmVmb3JtRGF0YSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGF1ZGlvIHJlY29yZGluZ1xuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VwZXIuc3RhcnQoKTtcblxuICAgIGlmICh0aGlzLm1lZGlhUmVjb3JkZXI/LnN0cmVhbSkge1xuICAgICAgdGhpcy5hbXBsaXR1ZGVSZWNvcmRlci5zdGFydCh0aGlzLm1lZGlhUmVjb3JkZXI/LnN0cmVhbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXVzZSBhdWRpbyByZWNvcmRpbmcsIGl0IGNhbiBiZSByZXN0YXJ0ZWQgdXNpbmcgYHJlc3VtZWBcbiAgICovXG4gIHBhdXNlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnBhdXNlKCk7XG5cbiAgICB0aGlzLmFtcGxpdHVkZVJlY29yZGVyLnBhdXNlKCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHByZXZpb3VzbHkgcGF1c2VkIHJlY29yZGluZ1xuICAgKi9cbiAgcmVzdW1lKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnJlc3VtZSgpO1xuXG4gICAgdGhpcy5hbXBsaXR1ZGVSZWNvcmRlci5yZXN1bWUoKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGUgcmVjb3JkaW5nIGFuZCBmcmVlIHVwIHVzZWQgcmVzb3VyY2VzXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zLmNhbmNlbCBpZiB0aGlzIGlzIGB0cnVlYCBubyByZWNvcmRpbmcgd2lsbCBiZSBjcmVhdGVkLCBidXQgcmVzb3VyY2VzIHdpbGwgYmUgZnJlZWRcbiAgICogQHJldHVybnMgdGhlIHJlY29yZGluZ1xuICAgKi9cbiAgYXN5bmMgc3RvcChvcHRpb25zPzogeyBjYW5jZWw6IGJvb2xlYW4gfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5zdG9wKG9wdGlvbnMpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmFtcGxpdHVkZVJlY29yZGVyLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|