@libs-ui/components-inputs-mention 0.2.306 → 0.2.308-0
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/defines/template.define.d.ts +1 -1
- package/esm2022/defines/caret-coords.define.mjs +9 -9
- package/esm2022/defines/keyboard.define.mjs +1 -1
- package/esm2022/defines/template.define.mjs +4 -4
- package/esm2022/defines/utils.define.mjs +8 -9
- package/esm2022/index.mjs +1 -1
- package/esm2022/interfaces/mention.interface.mjs +1 -1
- package/esm2022/list/list.component.mjs +25 -26
- package/esm2022/mention.directive.mjs +31 -29
- package/fesm2022/libs-ui-components-inputs-mention.mjs +51 -51
- package/fesm2022/libs-ui-components-inputs-mention.mjs.map +1 -1
- package/interfaces/mention.interface.d.ts +2 -2
- package/list/list.component.d.ts +1 -1
- package/mention.directive.d.ts +2 -2
- package/package.json +6 -6
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { Directive, ElementRef, effect, inject, input, output, signal, untracked } from
|
|
3
|
-
import { LibsUiDynamicComponentService } from
|
|
4
|
-
import { get, isNil, uuid } from
|
|
5
|
-
import { Subject, fromEvent } from
|
|
6
|
-
import { takeUntil, tap } from
|
|
7
|
-
import { KEY_BACKSPACE, KEY_BUFFERED, KEY_DOWN, KEY_ENTER, KEY_ESCAPE, KEY_SHIFT, KEY_SPACE, KEY_TAB, KEY_UP } from
|
|
8
|
-
import { DEFAULT_CONFIG, buildTemplate } from
|
|
9
|
-
import { getCaretPosition, getTextBeforeCursor, getValue, getWindowSelection, insertTextAtCaret, insertValue, setCaretPosition } from
|
|
10
|
-
import { LibsUiComponentsInputsMentionListComponent } from
|
|
2
|
+
import { Directive, ElementRef, effect, inject, input, output, signal, untracked } from '@angular/core';
|
|
3
|
+
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
4
|
+
import { get, isNil, uuid } from '@libs-ui/utils';
|
|
5
|
+
import { Subject, fromEvent } from 'rxjs';
|
|
6
|
+
import { takeUntil, tap } from 'rxjs/operators';
|
|
7
|
+
import { KEY_BACKSPACE, KEY_BUFFERED, KEY_DOWN, KEY_ENTER, KEY_ESCAPE, KEY_SHIFT, KEY_SPACE, KEY_TAB, KEY_UP } from './defines/keyboard.define';
|
|
8
|
+
import { DEFAULT_CONFIG, buildTemplate } from './defines/template.define';
|
|
9
|
+
import { getCaretPosition, getTextBeforeCursor, getValue, getWindowSelection, insertTextAtCaret, insertValue, setCaretPosition } from './defines/utils.define';
|
|
10
|
+
import { LibsUiComponentsInputsMentionListComponent } from './list/list.component';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
export class LibsUiComponentsInputsMentionDirective {
|
|
13
13
|
// #region PROPERTY
|
|
@@ -28,7 +28,7 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
28
28
|
dynamicComponentService = inject(LibsUiDynamicComponentService);
|
|
29
29
|
onDestroy = new Subject();
|
|
30
30
|
// #region INPUT
|
|
31
|
-
timeDelayInit = input(0, { transform: val => val ?? 0 });
|
|
31
|
+
timeDelayInit = input(0, { transform: (val) => val ?? 0 });
|
|
32
32
|
mentionConfig = input();
|
|
33
33
|
mentionListTemplate = input();
|
|
34
34
|
// #region OUTPUT
|
|
@@ -71,7 +71,7 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
71
71
|
setTimeout(() => {
|
|
72
72
|
this.handlerKeydown({ key: this.mentionConfig()?.triggerChar, keyCode: KEY_BACKSPACE, shiftKey: true, inputEvent: true }, element);
|
|
73
73
|
}, 500);
|
|
74
|
-
}
|
|
74
|
+
},
|
|
75
75
|
});
|
|
76
76
|
}, this.timeDelayInit());
|
|
77
77
|
}
|
|
@@ -84,7 +84,7 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
84
84
|
this.triggerChars.set({});
|
|
85
85
|
this.addConfig(mentionConfig);
|
|
86
86
|
if (mentionConfig.mention) {
|
|
87
|
-
mentionConfig.mention.forEach(config => this.addConfig(config));
|
|
87
|
+
mentionConfig.mention.forEach((config) => this.addConfig(config));
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
addConfig(config) {
|
|
@@ -101,15 +101,15 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
101
101
|
}
|
|
102
102
|
if (labelKey) {
|
|
103
103
|
// remove items without an labelKey (as it's required to filter the list)
|
|
104
|
-
config.items = config.items.filter(e => e[labelKey]);
|
|
104
|
+
config.items = config.items.filter((e) => e[labelKey]);
|
|
105
105
|
if (!config.disableSort) {
|
|
106
|
-
config.items.sort((a, b) => (a[labelKey] || '').localeCompare(
|
|
106
|
+
config.items.sort((a, b) => (a[labelKey] || '').localeCompare(b[labelKey] || ''));
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
-
this.triggerChars.update(item => ({
|
|
110
|
+
this.triggerChars.update((item) => ({
|
|
111
111
|
...item,
|
|
112
|
-
[config.triggerChar || '@']: config
|
|
112
|
+
[config.triggerChar || '@']: config,
|
|
113
113
|
}));
|
|
114
114
|
if (this.activeConfig() && this.activeConfig()?.triggerChar === config.triggerChar) {
|
|
115
115
|
this.activeConfig.set(config);
|
|
@@ -157,7 +157,7 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
157
157
|
if (!charPressed) {
|
|
158
158
|
const charCode = event.which || event.keyCode;
|
|
159
159
|
charPressed = String.fromCharCode(event.which || event.keyCode);
|
|
160
|
-
if (!event.shiftKey &&
|
|
160
|
+
if (!event.shiftKey && charCode >= 65 && charCode <= 90) {
|
|
161
161
|
charPressed = String.fromCharCode(charCode + 32);
|
|
162
162
|
}
|
|
163
163
|
}
|
|
@@ -224,13 +224,13 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
224
224
|
// optional function to format the selected item before inserting the text
|
|
225
225
|
this.insertMention(nativeElement, pos);
|
|
226
226
|
// fire input event so angular bindings are updated
|
|
227
|
-
if (
|
|
227
|
+
if ('Event' in window) {
|
|
228
228
|
// this seems backwards, but fire the event from this elements nativeElement (not the
|
|
229
229
|
// one provided that may be in an iframe, as it won't be propogate)
|
|
230
230
|
// Create the event using the modern Event constructor
|
|
231
|
-
const evt = new Event(this.iframe() ?
|
|
231
|
+
const evt = new Event(this.iframe() ? 'change' : 'input', {
|
|
232
232
|
bubbles: true,
|
|
233
|
-
cancelable: false
|
|
233
|
+
cancelable: false,
|
|
234
234
|
});
|
|
235
235
|
// Dispatch the event on the native element
|
|
236
236
|
nativeElement.dispatchEvent(evt);
|
|
@@ -269,11 +269,11 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
269
269
|
const searchString = mention.replace(String.fromCharCode(160), ' ').replace(String.fromCharCode(0), '');
|
|
270
270
|
this.searchString.set(searchString.trim());
|
|
271
271
|
const limitSpaceSearchQuery = this.activeConfig()?.limitSpaceSearchQuery;
|
|
272
|
-
if (limitSpaceSearchQuery &&
|
|
272
|
+
if (limitSpaceSearchQuery && searchString.split(' ').length - 1 > limitSpaceSearchQuery) {
|
|
273
273
|
this.searchString.set('');
|
|
274
274
|
}
|
|
275
275
|
if (this.activeConfig()?.returnTrigger) {
|
|
276
|
-
const triggerChar =
|
|
276
|
+
const triggerChar = this.searchString() || event.keyCode === KEY_BACKSPACE ? val.substring(this.startPos(), (this.startPos() || 0) + 1) : '';
|
|
277
277
|
this.outSearchTerm.emit(triggerChar + this.searchString());
|
|
278
278
|
this.updateSearchList();
|
|
279
279
|
return;
|
|
@@ -294,10 +294,10 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
294
294
|
return {
|
|
295
295
|
key: key,
|
|
296
296
|
config: this.triggerChars()[key],
|
|
297
|
-
index: textBeforeCursor.lastIndexOf(key)
|
|
297
|
+
index: textBeforeCursor.lastIndexOf(key),
|
|
298
298
|
};
|
|
299
299
|
});
|
|
300
|
-
const matchingCharacters = triggerChars.reduce((pre, current) => pre && current && current.index > pre.index ? current : pre);
|
|
300
|
+
const matchingCharacters = triggerChars.reduce((pre, current) => (pre && current && current.index > pre.index ? current : pre));
|
|
301
301
|
if (matchingCharacters.index < 0) {
|
|
302
302
|
this.stopSearch();
|
|
303
303
|
return;
|
|
@@ -313,7 +313,7 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
313
313
|
this.searchString.set(search.replace(matchingCharacters.key, ''));
|
|
314
314
|
this.searching.set(true);
|
|
315
315
|
this.handlerKeydown({ keyCode: ''.charCodeAt(0), inputEvent: false }, nativeElement);
|
|
316
|
-
const divElement = document.createElement(
|
|
316
|
+
const divElement = document.createElement('div');
|
|
317
317
|
divElement.style.width = 'max-content';
|
|
318
318
|
divElement.style.position = 'absolute';
|
|
319
319
|
divElement.innerText = search;
|
|
@@ -470,11 +470,13 @@ export class LibsUiComponentsInputsMentionDirective {
|
|
|
470
470
|
subscription: undefined,
|
|
471
471
|
item: itemActive,
|
|
472
472
|
triggerChar: triggerChar,
|
|
473
|
-
manualAdd: true
|
|
473
|
+
manualAdd: true,
|
|
474
474
|
};
|
|
475
475
|
this.nodesInsert().add(data);
|
|
476
476
|
if (mentionEventName) {
|
|
477
|
-
data.subscription = fromEvent(span, mentionEventName)
|
|
477
|
+
data.subscription = fromEvent(span, mentionEventName)
|
|
478
|
+
.pipe(tap((e) => e.stopPropagation()), takeUntil(this.onDestroy))
|
|
479
|
+
.subscribe(() => {
|
|
478
480
|
if (mentionActionByEvent) {
|
|
479
481
|
mentionActionByEvent(itemActive, triggerChar);
|
|
480
482
|
}
|
|
@@ -499,7 +501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
499
501
|
args: [{
|
|
500
502
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
501
503
|
selector: '[LibsUiComponentsInputsMentionDirective]',
|
|
502
|
-
standalone: true
|
|
504
|
+
standalone: true,
|
|
503
505
|
}]
|
|
504
506
|
}], ctorParameters: () => [] });
|
|
505
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL21lbnRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQStCLFNBQVMsRUFBRSxVQUFVLEVBQTBCLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEosT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9KLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU9uRixNQUFNLE9BQU8sc0NBQXNDO0lBRWpELG1CQUFtQjtJQUNYLGdCQUFnQixHQUFHLE1B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QUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0F4aEJVLHNDQUFzQzs0RkFBdEMsc0NBQXNDOzs0RkFBdEMsc0NBQXNDO2tCQUxsRCxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50UmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgVGVtcGxhdGVSZWYsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRXZlbnQsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLWR5bmFtaWMtY29tcG9uZW50XCI7XG5pbXBvcnQgeyBnZXQsIGlzTmlsLCB1dWlkIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEtFWV9CQUNLU1BBQ0UsIEtFWV9CVUZGRVJFRCwgS0VZX0RPV04sIEtFWV9FTlRFUiwgS0VZX0VTQ0FQRSwgS0VZX1NISUZULCBLRVlfU1BBQ0UsIEtFWV9UQUIsIEtFWV9VUCB9IGZyb20gXCIuL2RlZmluZXMva2V5Ym9hcmQuZGVmaW5lXCI7XG5pbXBvcnQgeyBERUZBVUxUX0NPTkZJRywgYnVpbGRUZW1wbGF0ZSB9IGZyb20gXCIuL2RlZmluZXMvdGVtcGxhdGUuZGVmaW5lXCI7XG5pbXBvcnQgeyBnZXRDYXJldFBvc2l0aW9uLCBnZXRUZXh0QmVmb3JlQ3Vyc29yLCBnZXRWYWx1ZSwgZ2V0V2luZG93U2VsZWN0aW9uLCBpbnNlcnRUZXh0QXRDYXJldCwgaW5zZXJ0VmFsdWUsIHNldENhcmV0UG9zaXRpb24gfSBmcm9tIFwiLi9kZWZpbmVzL3V0aWxzLmRlZmluZVwiO1xuaW1wb3J0IHsgSU1lbnRpb25Db25maWcsIElNZW50aW9uRnVuY3Rpb25Db250cm9sRXZlbnQsIElNZW50aW9uSW5zZXJ0LCBJTm9kZUluc2VydCB9IGZyb20gXCIuL2ludGVyZmFjZXMvbWVudGlvbi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNZW50aW9uTGlzdENvbXBvbmVudCB9IGZyb20gXCIuL2xpc3QvbGlzdC5jb21wb25lbnRcIjtcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW0xpYnNVaUNvbXBvbmVudHNJbnB1dHNNZW50aW9uRGlyZWN0aXZlXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSBsaXN0Q29tcG9uZW50UmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkxpc3RDb21wb25lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIG5vZGVzSW5zZXJ0ID0gc2lnbmFsPFNldDxJTm9kZUluc2VydD4+KG5ldyBTZXQoKSk7XG4gIHByaXZhdGUgYWN0aXZlQ29uZmlnID0gc2lnbmFsPElNZW50aW9uQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHRyaWdnZXJDaGFycyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBJTWVudGlvbkNvbmZpZz4+KHt9KTtcbiAgcHJpdmF0ZSBzZWFyY2hTdHJpbmcgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhcnRQb3MgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHN0YXJ0Tm9kZSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgc2VhcmNoTGlzdCA9IHNpZ25hbDxMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkxpc3RDb21wb25lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgc2VhcmNoaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBpZnJhbWUgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIGxhc3RLZXlDb2RlID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBpc0VkaXRvciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgaWZyYW1lSWQgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSB0aW1lRGVsYXlJbml0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDAsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IDAgfSk7XG4gIHJlYWRvbmx5IG1lbnRpb25Db25maWcgPSBpbnB1dDxJTWVudGlvbkNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgbWVudGlvbkxpc3RUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTZWFyY2hUZXJtID0gb3V0cHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgb3V0SXRlbVNlbGVjdGVkID0gb3V0cHV0PHVua25vd24+KCk7XG4gIHJlYWRvbmx5IG91dFRvZ2dsZSA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRJbnNlcnRNZW50aW9uID0gb3V0cHV0PElNZW50aW9uSW5zZXJ0PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2wgPSBvdXRwdXQ8SU1lbnRpb25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5tZW50aW9uQ29uZmlnKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy51cGRhdGVDb25maWcoKSk7XG4gICAgfSlcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5tZW50aW9uQ29uZmlnKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNDb250ZW50RWRpdGFibGUgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpO1xuICAgICAgdGhpcy5pc0VkaXRvci5zZXQoIWlzQ29udGVudEVkaXRhYmxlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAhdGhpcy5pc0VkaXRvcigpID8gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgOiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucWwtZWRpdG9yW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJLZXlkb3duLmJpbmQodGhpcykoZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJJbnB1dC5iaW5kKHRoaXMpKGV2ZW50LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJCbHVyLmJpbmQodGhpcykoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJGb2N1cy5iaW5kKHRoaXMpKGV2ZW50LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbC5lbWl0KHtcbiAgICAgICAgYWRkTWVudGlvbjogKCkgPT4ge1xuICAgICAgICAgIGluc2VydFRleHRBdENhcmV0KGVsZW1lbnQsIGAke3RoaXMubWVudGlvbkNvbmZpZygpPy50cmlnZ2VyQ2hhcn1gKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcktleWRvd24oeyBrZXk6IHRoaXMubWVudGlvbkNvbmZpZygpPy50cmlnZ2VyQ2hhciwga2V5Q29kZTogS0VZX0JBQ0tTUEFDRSwgc2hpZnRLZXk6IHRydWUsIGlucHV0RXZlbnQ6IHRydWUgfSwgZWxlbWVudCk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy50aW1lRGVsYXlJbml0KCkpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb25maWcoKSB7XG4gICAgY29uc3QgbWVudGlvbkNvbmZpZyA9IHRoaXMubWVudGlvbkNvbmZpZygpO1xuICAgIGlmICghbWVudGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDaGFycy5zZXQoe30pO1xuICAgIHRoaXMuYWRkQ29uZmlnKG1lbnRpb25Db25maWcpO1xuICAgIGlmIChtZW50aW9uQ29uZmlnLm1lbnRpb24pIHtcbiAgICAgIG1lbnRpb25Db25maWcubWVudGlvbi5mb3JFYWNoKGNvbmZpZyA9PiB0aGlzLmFkZENvbmZpZyhjb25maWcpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENvbmZpZyhjb25maWc6IElNZW50aW9uQ29uZmlnKSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRyk7XG4gICAgY29uc3QgbGFiZWxLZXkgPSBjb25maWcubGFiZWxLZXkgfHwgJ2xhYmVsJztcbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRzLCBjb25maWcpO1xuICAgIGlmIChjb25maWcuaXRlbXMgJiYgY29uZmlnLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLml0ZW1zWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25maWcuaXRlbXMuZm9yRWFjaCgobGFiZWwpID0+IHtcbiAgICAgICAgICBjb25zdCBvYmplY3Q6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+ID0ge307XG4gICAgICAgICAgb2JqZWN0W2xhYmVsS2V5XSA9IGxhYmVsO1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGxhYmVsS2V5KSB7XG4gICAgICAgIC8vIHJlbW92ZSBpdGVtcyB3aXRob3V0IGFuIGxhYmVsS2V5IChhcyBpdCdzIHJlcXVpcmVkIHRvIGZpbHRlciB0aGUgbGlzdClcbiAgICAgICAgY29uZmlnLml0ZW1zID0gY29uZmlnLml0ZW1zLmZpbHRlcihlID0+IGVbbGFiZWxLZXldKTtcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZVNvcnQpIHtcbiAgICAgICAgICBjb25maWcuaXRlbXMuc29ydCgoYSwgYikgPT4gKGFbbGFiZWxLZXldIHx8ICcnKS5sb2NhbGVDb21wYXJlKChiW2xhYmVsS2V5XSB8fCAnJykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDaGFycy51cGRhdGUoaXRlbSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIFtjb25maWcudHJpZ2dlckNoYXIgfHwgJ0AnXTogY29uZmlnXG4gICAgfSkpXG4gICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKCkgJiYgdGhpcy5hY3RpdmVDb25maWcoKT8udHJpZ2dlckNoYXIgPT09IGNvbmZpZy50cmlnZ2VyQ2hhcikge1xuICAgICAgdGhpcy5hY3RpdmVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaExpc3QoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0SWZyYW1lKGlmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICB0aGlzLmlmcmFtZS5zZXQoaWZyYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcEV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChnZXQoZXZlbnQsICd3YXNDbGljaycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckJsdXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICB0aGlzLnN0b3BTZWFyY2goKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbnB1dChldmVudDogRXZlbnQsIG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgIGNvbnN0IGRhdGEgPSBnZXQoZXZlbnQsICdkYXRhJyk7XG4gICAgaWYgKHRoaXMubGFzdEtleUNvZGUoKSA9PT0gS0VZX0JVRkZFUkVEICYmIGRhdGEpIHtcbiAgICAgIGNvbnN0IGtleUNvZGUgPSBkYXRhLmNoYXJDb2RlQXQoMCk7XG4gICAgICB0aGlzLmhhbmRsZXJLZXlkb3duKHsga2V5Q29kZSwgaW5wdXRFdmVudDogdHJ1ZSB9LCBuYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlcktleWRvd24oZXZlbnQ6IGFueSwgbmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTogYW55IHtcbiAgICB0aGlzLmxhc3RLZXlDb2RlLnNldChldmVudC5rZXlDb2RlKTtcbiAgICBpZiAoZXZlbnQuaXNDb21wb3NpbmcgfHwgZXZlbnQua2V5Q29kZSA9PT0gS0VZX0JVRkZFUkVEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsOiBhbnkgPSBnZXRWYWx1ZShuYXRpdmVFbGVtZW50KTtcbiAgICBsZXQgcG9zOiBhbnkgPSBnZXRDYXJldFBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIHRoaXMuaWZyYW1lKCkpO1xuICAgIGxldCBjaGFyUHJlc3NlZCA9IGV2ZW50LmtleTtcbiAgICBpZiAoIXRoaXMuaXNFZGl0b3IoKSkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtFWV9CQUNLU1BBQ0UpIHtcbiAgICAgICAgdGhpcy5hcHBlbmRFbXB0eVRvTGFzdE5vZGUocG9zLCB2YWwubGVuZ3RoLCBuYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGROb2RlWmVyb1dpZHRoU3BhY2UobmF0aXZlRWxlbWVudCksIDApO1xuICAgIH1cbiAgICBpZiAoIWNoYXJQcmVzc2VkKSB7XG4gICAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7XG4gICAgICBjaGFyUHJlc3NlZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSk7XG4gICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIChjaGFyQ29kZSA+PSA2NSAmJiBjaGFyQ29kZSA8PSA5MCkpIHtcbiAgICAgICAgY2hhclByZXNzZWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlICsgMzIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX0VOVEVSICYmIGV2ZW50Lndhc0NsaWNrICYmIHBvcyA8ICh0aGlzLnN0YXJ0UG9zKCkgfHwgMCkpIHtcbiAgICAgIHBvcyA9IHRoaXMuc3RhcnROb2RlKCkubGVuZ3RoO1xuICAgICAgc2V0Q2FyZXRQb3NpdGlvbih0aGlzLnN0YXJ0Tm9kZSgpLCBwb3MsIHRoaXMuaWZyYW1lKCkpO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRyaWdnZXJDaGFycygpW2NoYXJQcmVzc2VkXTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQoY29uZmlnKTtcbiAgICAgIHRoaXMuc3RhcnRQb3Muc2V0KGV2ZW50LmlucHV0RXZlbnQgPyBwb3MgLSAxIDogcG9zKTtcbiAgICAgIHRoaXMuc3RhcnROb2RlLnNldChnZXRXaW5kb3dTZWxlY3Rpb24odGhpcy5pZnJhbWUoKSk/LmFuY2hvck5vZGUpO1xuICAgICAgdGhpcy5zZWFyY2hpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcuc2V0KCcnKTtcbiAgICAgIHRoaXMuc2hvd1NlYXJjaExpc3QobmF0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaExpc3QoKTtcbiAgICAgIGlmIChjb25maWcucmV0dXJuVHJpZ2dlcikge1xuICAgICAgICB0aGlzLm91dFNlYXJjaFRlcm0uZW1pdChjb25maWcudHJpZ2dlckNoYXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXRlbVNldCBvZiB0aGlzLm5vZGVzSW5zZXJ0KCkpIHtcbiAgICAgICAgaWYgKCFuYXRpdmVFbGVtZW50LmNvbnRhaW5zKGl0ZW1TZXQuZWxlbWVudFNwYW4pKSB7XG4gICAgICAgICAgaXRlbVNldC5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5ub2Rlc0luc2VydCgpLmRlbGV0ZShpdGVtU2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gdGhpcy5zdGFydFBvcygpO1xuICAgIGlmIChpc05pbChzdGFydFBvcykgfHwgc3RhcnRQb3MgPCAwIHx8ICF0aGlzLnNlYXJjaGluZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaExpc3QgPSB0aGlzLnNlYXJjaExpc3QoKTtcbiAgICBpZiAocG9zIDw9IHN0YXJ0UG9zKSB7XG4gICAgICBpZiAoc2VhcmNoTGlzdCkge1xuICAgICAgICBzZWFyY2hMaXN0LmhpZGRlbi5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLRVlfU0hJRlQgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBwb3MgPD0gc3RhcnRQb3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFjdGl2ZUNvbmZpZygpPy5hbGxvd1NwYWNlICYmIGV2ZW50LmtleUNvZGUgPT09IEtFWV9TUEFDRSkge1xuICAgICAgdGhpcy5zdGFydFBvcy5zZXQoLTEpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX0JBQ0tTUEFDRSAmJiBwb3MgPiAwKSB7XG4gICAgICBwb3MtLTtcbiAgICAgIGlmIChwb3MgPT09IHRoaXMuc3RhcnRQb3MoKSkge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoc2VhcmNoTGlzdD8uaGlkZGVuKCkpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLRVlfVEFCIHx8IGV2ZW50LmtleUNvZGUgPT09IEtFWV9FTlRFUikge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICghc2VhcmNoTGlzdD8uaGlkZGVuKCkgJiYgdGhpcy5hY3RpdmVDb25maWcoKSkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtFWV9UQUIgfHwgZXZlbnQua2V5Q29kZSA9PT0gS0VZX0VOVEVSKSB7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgbGlzdCBpdGVtXG4gICAgICAgIHRoaXMub3V0SXRlbVNlbGVjdGVkLmVtaXQoc2VhcmNoTGlzdD8uQWN0aXZlSXRlbSk7XG4gICAgICAgIC8vIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgaXRlbSBiZWZvcmUgaW5zZXJ0aW5nIHRoZSB0ZXh0XG4gICAgICAgIHRoaXMuaW5zZXJ0TWVudGlvbihuYXRpdmVFbGVtZW50LCBwb3MpO1xuICAgICAgICAvLyBmaXJlIGlucHV0IGV2ZW50IHNvIGFuZ3VsYXIgYmluZGluZ3MgYXJlIHVwZGF0ZWRcbiAgICAgICAgaWYgKFwiRXZlbnRcIiBpbiB3aW5kb3cpIHtcbiAgICAgICAgICAvLyB0aGlzIHNlZW1zIGJhY2t3YXJkcywgYnV0IGZpcmUgdGhlIGV2ZW50IGZyb20gdGhpcyBlbGVtZW50cyBuYXRpdmVFbGVtZW50IChub3QgdGhlXG4gICAgICAgICAgLy8gb25lIHByb3ZpZGVkIHRoYXQgbWF5IGJlIGluIGFuIGlmcmFtZSwgYXMgaXQgd29uJ3QgYmUgcHJvcG9nYXRlKVxuICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgdXNpbmcgdGhlIG1vZGVybiBFdmVudCBjb25zdHJ1Y3RvclxuICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBFdmVudCh0aGlzLmlmcmFtZSgpID8gXCJjaGFuZ2VcIiA6IFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50IG9uIHRoZSBuYXRpdmUgZWxlbWVudFxuICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRQb3Muc2V0KC0xKTtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX0VTQ0FQRSkge1xuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLRVlfRE9XTikge1xuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHNlYXJjaExpc3Q/LmFjdGl2YXRlTmV4dEl0ZW0oKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX1VQKSB7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgc2VhcmNoTGlzdD8uYWN0aXZhdGVQcmV2aW91c0l0ZW0oKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFyUHJlc3NlZC5sZW5ndGggIT09IDEgJiYgZXZlbnQua2V5Q29kZSAhPT0gS0VZX0JBQ0tTUEFDRSkge1xuICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5zZWFyY2hpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbWVudGlvbiA9IHZhbC5zdWJzdHJpbmcoKHRoaXMuc3RhcnRQb3MoKSB8fCAwKSArIDEsIHBvcyk7XG5cbiAgICBpZiAoZXZlbnQua2V5Q29kZSAhPT0gS0VZX0JBQ0tTUEFDRSAmJiAhZXZlbnQuaW5wdXRFdmVudCkge1xuICAgICAgbWVudGlvbiArPSBjaGFyUHJlc3NlZDtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gbWVudGlvbi5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSwgJyAnKS5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoMCksICcnKTtcbiAgICB0aGlzLnNlYXJjaFN0cmluZy5zZXQoc2VhcmNoU3RyaW5nLnRyaW0oKSk7XG4gICAgY29uc3QgbGltaXRTcGFjZVNlYXJjaFF1ZXJ5ID0gdGhpcy5hY3RpdmVDb25maWcoKT8ubGltaXRTcGFjZVNlYXJjaFF1ZXJ5O1xuICAgIGlmIChsaW1pdFNwYWNlU2VhcmNoUXVlcnkgJiYgKHNlYXJjaFN0cmluZy5zcGxpdCgnICcpLmxlbmd0aCAtIDEpID4gbGltaXRTcGFjZVNlYXJjaFF1ZXJ5KSB7XG4gICAgICB0aGlzLnNlYXJjaFN0cmluZy5zZXQoJycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3RpdmVDb25maWcoKT8ucmV0dXJuVHJpZ2dlcikge1xuICAgICAgY29uc3QgdHJpZ2dlckNoYXIgPSAodGhpcy5zZWFyY2hTdHJpbmcoKSB8fCBldmVudC5rZXlDb2RlID09PSBLRVlfQkFDS1NQQUNFKSA/IHZhbC5zdWJzdHJpbmcodGhpcy5zdGFydFBvcygpLCAodGhpcy5zdGFydFBvcygpIHx8IDApICsgMSkgOiAnJztcblxuICAgICAgdGhpcy5vdXRTZWFyY2hUZXJtLmVtaXQodHJpZ2dlckNoYXIgKyB0aGlzLnNlYXJjaFN0cmluZygpKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGlzdCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0U2VhcmNoVGVybS5lbWl0KHRoaXMuc2VhcmNoU3RyaW5nKCkpO1xuICAgIHRoaXMudXBkYXRlU2VhcmNoTGlzdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGb2N1cyhlPzogRXZlbnQsIG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGdldFdpbmRvd1NlbGVjdGlvbih0aGlzLmlmcmFtZSgpKT8uYW5jaG9yTm9kZTtcblxuICAgICAgaWYgKG5vZGU/Lm5vZGVUeXBlICE9PSAzKSB7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHRCZWZvcmVDdXJzb3IgPSBnZXRUZXh0QmVmb3JlQ3Vyc29yKCkgfHwgJyc7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJDaGFycyA9IE9iamVjdC5rZXlzKHRoaXMudHJpZ2dlckNoYXJzKCkpLm1hcCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBjb25maWc6IHRoaXMudHJpZ2dlckNoYXJzKClba2V5XSxcbiAgICAgICAgICBpbmRleDogdGV4dEJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZihrZXkpIGFzIG51bWJlclxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBtYXRjaGluZ0NoYXJhY3RlcnMgPSB0cmlnZ2VyQ2hhcnMucmVkdWNlKChwcmUsIGN1cnJlbnQpID0+IHByZSAmJiBjdXJyZW50ICYmIGN1cnJlbnQuaW5kZXggPiBwcmUuaW5kZXggPyBjdXJyZW50IDogcHJlKTtcblxuICAgICAgaWYgKG1hdGNoaW5nQ2hhcmFjdGVycy5pbmRleCA8IDApIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoID0gdGV4dEJlZm9yZUN1cnNvcj8uc3Vic3RyaW5nKG1hdGNoaW5nQ2hhcmFjdGVycy5pbmRleCwgdGV4dEJlZm9yZUN1cnNvci5sZW5ndGgpO1xuXG4gICAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwb3MgPSBnZXRDYXJldFBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIHRoaXMuaWZyYW1lKCkpO1xuXG4gICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQobWF0Y2hpbmdDaGFyYWN0ZXJzLmNvbmZpZyk7XG4gICAgICB0aGlzLnN0YXJ0UG9zLnNldChwb3MgLSAodGV4dEJlZm9yZUN1cnNvci5sZW5ndGggLSBtYXRjaGluZ0NoYXJhY3RlcnMuaW5kZXgpKTtcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nLnNldChzZWFyY2gucmVwbGFjZShtYXRjaGluZ0NoYXJhY3RlcnMua2V5LCAnJykpO1xuICAgICAgdGhpcy5zZWFyY2hpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5oYW5kbGVyS2V5ZG93bih7IGtleUNvZGU6ICcnLmNoYXJDb2RlQXQoMCksIGlucHV0RXZlbnQ6IGZhbHNlIH0sIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgY29uc3QgZGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGRpdkVsZW1lbnQuc3R5bGUud2lkdGggPSAnbWF4LWNvbnRlbnQnO1xuICAgICAgZGl2RWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICBkaXZFbGVtZW50LmlubmVyVGV4dCA9IHNlYXJjaDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2RWxlbWVudCk7XG4gICAgICBsZXQgaWZyYW1lID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWZyYW1lID0gdGhpcy5tZW50aW9uQ29uZmlnKCk/LmlmcmFtZSA/ICh3aW5kb3cucGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubWVudGlvbkNvbmZpZygpPy5pZnJhbWUgYXMgc3RyaW5nKSBhcyBIVE1MSUZyYW1lRWxlbWVudCkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hMaXN0ID0gdGhpcy5zZWFyY2hMaXN0KCk7XG4gICAgICBpZiAoc2VhcmNoTGlzdCkge1xuICAgICAgICBzZWFyY2hMaXN0LnBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIGlmcmFtZSwgZGl2RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcbiAgICAgIH1cbiAgICAgIGRpdkVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICBuYXRpdmVFbGVtZW50Lm5vcm1hbGl6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wU2VhcmNoKCkge1xuICAgIGNvbnN0IHNlYXJjaExpc3QgPSB0aGlzLnNlYXJjaExpc3QoKTtcbiAgICBpZiAoc2VhcmNoTGlzdCAmJiAhc2VhcmNoTGlzdC5oaWRkZW4oKSkge1xuICAgICAgc2VhcmNoTGlzdC5oaWRkZW4uc2V0KHRydWUpO1xuICAgICAgdGhpcy5vdXRUb2dnbGUuZW1pdChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlQ29uZmlnLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2VhcmNoaW5nLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaExpc3QoKSB7XG4gICAgY29uc3QgbWF0Y2hlczogYW55W10gPSBbXTtcbiAgICBjb25zdCBhY3RpdmVDb25maWcgPSB0aGlzLmFjdGl2ZUNvbmZpZygpO1xuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IHRoaXMuc2VhcmNoU3RyaW5nKCk7XG4gICAgY29uc3Qgc2VhcmNoTGlzdCA9IHRoaXMuc2VhcmNoTGlzdCgpO1xuICAgIC8vIGRpc2FibGluZyB0aGUgc2VhcmNoIHJlbGllcyBvbiB0aGUgYXN5bmMgb3BlcmF0aW9uIHRvIGRvIHRoZSBmaWx0ZXJpbmdcbiAgICBpZiAoYWN0aXZlQ29uZmlnICYmIGFjdGl2ZUNvbmZpZy5pdGVtcyAmJiAhYWN0aXZlQ29uZmlnLmRpc2FibGVTZWFyY2ggJiYgIWlzTmlsKHNlYXJjaFN0cmluZykgJiYgYWN0aXZlQ29uZmlnLmxhYmVsS2V5ICYmIGFjdGl2ZUNvbmZpZy5tZW50aW9uRmlsdGVyKSB7XG4gICAgICBtYXRjaGVzLnB1c2goLi4uYWN0aXZlQ29uZmlnLm1lbnRpb25GaWx0ZXIoc2VhcmNoU3RyaW5nLCBhY3RpdmVDb25maWcuaXRlbXMpIGFzIGFueSk7XG4gICAgfVxuICAgIC8vIHVwZGF0ZSB0aGUgc2VhcmNoIGxpc3RcbiAgICBpZiAoIXNlYXJjaExpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VhcmNoTGlzdC5pdGVtcy5zZXQobWF0Y2hlcyk7XG4gICAgc2VhcmNoTGlzdC5oaWRkZW4uc2V0KCFtYXRjaGVzLmxlbmd0aCk7XG4gICAgc2VhcmNoTGlzdC5hY3RpdmVJbmRleC5zZXQoMCk7XG4gICAgc2VhcmNoTGlzdC5zY3JvbGxDb250ZW50KCk7XG4gICAgdGhpcy5vdXRUb2dnbGUuZW1pdChtYXRjaGVzLmxlbmd0aCA/IHRydWUgOiBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTZWFyY2hMaXN0KG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICBsZXQgaWZyYW1lID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lbnRpb25Db25maWcgPSB0aGlzLm1lbnRpb25Db25maWcoKTtcbiAgICB0cnkge1xuICAgICAgaWZyYW1lID0gbWVudGlvbkNvbmZpZz8uaWZyYW1lID8gd2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChtZW50aW9uQ29uZmlnPy5pZnJhbWUgYXMgc3RyaW5nKSBhcyBIVE1MSUZyYW1lRWxlbWVudCA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH1cbiAgICBpZiAoIW1lbnRpb25Db25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRUb2dnbGUuZW1pdCh0cnVlKTtcbiAgICBsZXQgZmlyc3RUaW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMubGlzdENvbXBvbmVudFJlZigpKSB7XG4gICAgICBmaXJzdFRpbWUgPSB0cnVlO1xuICAgICAgdGhpcy5saXN0Q29tcG9uZW50UmVmLnNldCh0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNJbnB1dHNNZW50aW9uTGlzdENvbXBvbmVudCkpO1xuICAgICAgdGhpcy5zZWFyY2hMaXN0LnNldCh0aGlzLmxpc3RDb21wb25lbnRSZWYoKT8uaW5zdGFuY2UpO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaExpc3QoKT8ubGFiZWxLZXkuc2V0KHRoaXMuYWN0aXZlQ29uZmlnKCk/LmxhYmVsS2V5IHx8ICcnKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8uc3R5bGVPZmYuc2V0KHRoaXMubWVudGlvbkNvbmZpZygpPy5kaXNhYmxlU3R5bGUgfHwgZmFsc2UpO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5hY3RpdmVJbmRleC5zZXQoMCk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/LnpJbmRleC5zZXQodGhpcy5tZW50aW9uQ29uZmlnKCk/LnpJbmRleCB8fCAyNTAwKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8uaXNJZnJhbWUuc2V0KGlmcmFtZSA/IHRydWUgOiBmYWxzZSk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/LnBhcmVudEhhbmRsZXJLZXlEb3duLnNldCh0aGlzLmhhbmRsZXJLZXlkb3duLmJpbmQodGhpcykpO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5wb3NpdGlvbihuYXRpdmVFbGVtZW50LCBpZnJhbWUpO1xuICAgIGlmIChmaXJzdFRpbWUgJiYgdGhpcy5saXN0Q29tcG9uZW50UmVmKCkpIHtcbiAgICAgIHRoaXMuaWZyYW1lSWQuc2V0KHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMubGlzdENvbXBvbmVudFJlZigpLCBpZnJhbWUgPyB0cnVlIDogZmFsc2UpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lMaXN0U2VhcmNoKCkge1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMubGlzdENvbXBvbmVudFJlZiwgdGhpcy5pZnJhbWVJZCgpKTtcbiAgICB0aGlzLmxpc3RDb21wb25lbnRSZWYuc2V0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwZW5kRW1wdHlUb0xhc3ROb2RlKHBvc2l0aW9uOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBuYXRpdmVFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICBjb25zdCBlbXB0eSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUwMEEwJyk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0V2luZG93U2VsZWN0aW9uKHRoaXMuaWZyYW1lKCkpO1xuICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWxlY3Rpb24/LmFuY2hvck5vZGU7XG5cbiAgICBpZiAodGhpcy5pc0VkaXRvcigpKSB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gYW5jaG9yTm9kZT8ucGFyZW50Tm9kZSBhcyBFbGVtZW50O1xuXG4gICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmdldEF0dHJpYnV0ZSAmJiBwYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnaWQnKSkge1xuICAgICAgICBpZiAoIXBhcmVudE5vZGUubmV4dFNpYmxpbmcgfHwgIXBhcmVudE5vZGUubmV4dFNpYmxpbmcudGV4dENvbnRlbnQ/Lmxlbmd0aCkge1xuICAgICAgICAgIHBhcmVudE5vZGU/LnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShlbXB0eSwgcGFyZW50Tm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQocGFyZW50Tm9kZS5uZXh0U2libGluZyBhcyBOb2RlLCAwKTtcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIHNlbD8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbD8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBwcmVOb2RlID0gbnVsbDtcbiAgICBjb25zdCBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24/LmFuY2hvck9mZnNldDtcblxuICAgIGlmICghYW5jaG9yTm9kZSB8fCAhYW5jaG9yT2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFuY2hvck5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJyN0ZXh0Jykge1xuICAgICAgbmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbXB0eSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcblxuICAgICAgaWYgKGFuY2hvck5vZGUubm9kZVR5cGUgPT09IDMgJiYgYW5jaG9yTm9kZSA9PT0gbm9kZSAmJiBwcmVOb2RlICYmIHByZU5vZGUuZ2V0QXR0cmlidXRlICYmIHByZU5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpICYmICghYW5jaG9yTm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IGFuY2hvck5vZGUudGV4dENvbnRlbnQubGVuZ3RoID09PSAxKSAmJiBwb3NpdGlvbiA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIG5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wdHkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByZU5vZGUgPSBub2RlIGFzIEVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZE5vZGVaZXJvV2lkdGhTcGFjZShuYXRpdmVFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICBjb25zdCBlbXB0eSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBiJyk7XG4gICAgbGV0IHByZU5vZGUgPSBudWxsO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRpdmVFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGU6IGFueSA9IG5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcblxuICAgICAgaWYgKHByZU5vZGUgJiYgcHJlTm9kZS5nZXRBdHRyaWJ1dGUgJiYgcHJlTm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgJiYgbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSkge1xuICAgICAgICBuYXRpdmVFbGVtZW50Lmluc2VydEJlZm9yZShlbXB0eSwgcHJlTm9kZS5uZXh0U2libGluZyk7XG4gICAgICB9XG5cbiAgICAgIHByZU5vZGUgPSBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0TWVudGlvbihuYXRpdmVFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCBwb3M6IG51bWJlcikge1xuICAgIGNvbnN0IGFjdGl2ZUNvbmZpZyA9IHRoaXMuYWN0aXZlQ29uZmlnKCk7XG4gICAgaWYgKCFhY3RpdmVDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoTGlzdCA9IHRoaXMuc2VhcmNoTGlzdCgpO1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgY29uc3QgZmVJZCA9IHV1aWQoKTtcbiAgICBjb25zdCBpZCA9IHNlYXJjaExpc3Q/LkFjdGl2ZUl0ZW0uaWQgfHwgdXVpZCgpO1xuICAgIGNvbnN0IGl0ZW1BY3RpdmUgPSBzZWFyY2hMaXN0Py5BY3RpdmVJdGVtO1xuICAgIGNvbnN0IHsgdHJpZ2dlckNoYXIsIG1lbnRpb25FdmVudE5hbWUsIG1lbnRpb25BY3Rpb25CeUV2ZW50IH0gPSBhY3RpdmVDb25maWc7XG5cbiAgICBpZiAoYWN0aXZlQ29uZmlnLm1lbnRpb25TZWxlY3QpIHtcbiAgICAgIHRleHQgPSBhY3RpdmVDb25maWcubWVudGlvblNlbGVjdChzZWFyY2hMaXN0Py5BY3RpdmVJdGVtLCBhY3RpdmVDb25maWcudHJpZ2dlckNoYXIpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFZGl0b3IoKSkge1xuICAgICAgbGV0IHNwYW46IEhUTUxTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RFWFRBUkVBJyk7XG5cbiAgICAgIHNwYW4uaW5uZXJUZXh0ID0gdGV4dDtcbiAgICAgIHRleHQgPSBzcGFuLmlubmVySFRNTDtcbiAgICAgIHNwYW4ucmVtb3ZlKCk7XG4gICAgICB0ZXh0ID0gYnVpbGRUZW1wbGF0ZSh0ZXh0LCBpZCwgZmVJZCk7XG4gICAgICBzcGFuID0gaW5zZXJ0VmFsdWUobmF0aXZlRWxlbWVudCwgdGhpcy5zdGFydFBvcygpIHx8IDAsIHBvcywgdGV4dCwgdGhpcy5pZnJhbWUoKSkgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgY29uc3QgZGF0YTogSU5vZGVJbnNlcnQgPSB7XG4gICAgICAgICAgZWxlbWVudFNwYW46IHNwYW4sXG4gICAgICAgICAgc3Vic2NyaXB0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXRlbTogaXRlbUFjdGl2ZSxcbiAgICAgICAgICB0cmlnZ2VyQ2hhcjogdHJpZ2dlckNoYXIsXG4gICAgICAgICAgbWFudWFsQWRkOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ub2Rlc0luc2VydCgpLmFkZChkYXRhKTtcbiAgICAgICAgaWYgKG1lbnRpb25FdmVudE5hbWUpIHtcbiAgICAgICAgICBkYXRhLnN1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxJRXZlbnQ+KHNwYW4sIG1lbnRpb25FdmVudE5hbWUpLnBpcGUoXG4gICAgICAgICAgICB0YXAoZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAobWVudGlvbkFjdGlvbkJ5RXZlbnQpIHtcbiAgICAgICAgICAgICAgbWVudGlvbkFjdGlvbkJ5RXZlbnQoaXRlbUFjdGl2ZSwgdHJpZ2dlckNoYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vdXRJbnNlcnRNZW50aW9uLmVtaXQoeyBkYXRhOiB7IGlkLCB2YWx1ZTogdGV4dCwgZmVJZCB9LCBsZW5ndGhLZXk6IHBvcyAtICh0aGlzLnN0YXJ0UG9zKCkgfHwgMCkgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95TGlzdFNlYXJjaCgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
|
|
507
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL21lbnRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQStCLFNBQVMsRUFBRSxVQUFVLEVBQTBCLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEosT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9KLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU9uRixNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELG1CQUFtQjtJQUNYLGdCQUFnQixHQUFHLE1B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Z0JBQ1AsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0F2aEJVLHNDQUFzQzs0RkFBdEMsc0NBQXNDOzs0RkFBdEMsc0NBQXNDO2tCQUxsRCxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50UmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgVGVtcGxhdGVSZWYsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUV2ZW50LCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXQsIGlzTmlsLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEtFWV9CQUNLU1BBQ0UsIEtFWV9CVUZGRVJFRCwgS0VZX0RPV04sIEtFWV9FTlRFUiwgS0VZX0VTQ0FQRSwgS0VZX1NISUZULCBLRVlfU1BBQ0UsIEtFWV9UQUIsIEtFWV9VUCB9IGZyb20gJy4vZGVmaW5lcy9rZXlib2FyZC5kZWZpbmUnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUcsIGJ1aWxkVGVtcGxhdGUgfSBmcm9tICcuL2RlZmluZXMvdGVtcGxhdGUuZGVmaW5lJztcbmltcG9ydCB7IGdldENhcmV0UG9zaXRpb24sIGdldFRleHRCZWZvcmVDdXJzb3IsIGdldFZhbHVlLCBnZXRXaW5kb3dTZWxlY3Rpb24sIGluc2VydFRleHRBdENhcmV0LCBpbnNlcnRWYWx1ZSwgc2V0Q2FyZXRQb3NpdGlvbiB9IGZyb20gJy4vZGVmaW5lcy91dGlscy5kZWZpbmUnO1xuaW1wb3J0IHsgSU1lbnRpb25Db25maWcsIElNZW50aW9uRnVuY3Rpb25Db250cm9sRXZlbnQsIElNZW50aW9uSW5zZXJ0LCBJTm9kZUluc2VydCB9IGZyb20gJy4vaW50ZXJmYWNlcy9tZW50aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkxpc3RDb21wb25lbnQgfSBmcm9tICcuL2xpc3QvbGlzdC5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByaXZhdGUgbGlzdENvbXBvbmVudFJlZiA9IHNpZ25hbDxDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25MaXN0Q29tcG9uZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBub2Rlc0luc2VydCA9IHNpZ25hbDxTZXQ8SU5vZGVJbnNlcnQ+PihuZXcgU2V0KCkpO1xuICBwcml2YXRlIGFjdGl2ZUNvbmZpZyA9IHNpZ25hbDxJTWVudGlvbkNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0cmlnZ2VyQ2hhcnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgSU1lbnRpb25Db25maWc+Pih7fSk7XG4gIHByaXZhdGUgc2VhcmNoU3RyaW5nID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXJ0UG9zID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBzdGFydE5vZGUgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHNlYXJjaExpc3QgPSBzaWduYWw8TGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25MaXN0Q29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHNlYXJjaGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgaWZyYW1lID0gc2lnbmFsPGFueT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBsYXN0S2V5Q29kZSA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaXNFZGl0b3IgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlmcmFtZUlkID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgdGltZURlbGF5SW5pdCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigwLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IDAgfSk7XG4gIHJlYWRvbmx5IG1lbnRpb25Db25maWcgPSBpbnB1dDxJTWVudGlvbkNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgbWVudGlvbkxpc3RUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTZWFyY2hUZXJtID0gb3V0cHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgb3V0SXRlbVNlbGVjdGVkID0gb3V0cHV0PHVua25vd24+KCk7XG4gIHJlYWRvbmx5IG91dFRvZ2dsZSA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRJbnNlcnRNZW50aW9uID0gb3V0cHV0PElNZW50aW9uSW5zZXJ0PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2wgPSBvdXRwdXQ8SU1lbnRpb25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5tZW50aW9uQ29uZmlnKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy51cGRhdGVDb25maWcoKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMubWVudGlvbkNvbmZpZygpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKTtcbiAgICAgIHRoaXMuaXNFZGl0b3Iuc2V0KCFpc0NvbnRlbnRFZGl0YWJsZSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gIXRoaXMuaXNFZGl0b3IoKSA/IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnFsLWVkaXRvcltjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJyk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyS2V5ZG93bi5iaW5kKHRoaXMpKGV2ZW50LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVySW5wdXQuYmluZCh0aGlzKShldmVudCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyQmx1ci5iaW5kKHRoaXMpKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyRm9jdXMuYmluZCh0aGlzKShldmVudCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXRGdW5jdGlvbkNvbnRyb2wuZW1pdCh7XG4gICAgICAgIGFkZE1lbnRpb246ICgpID0+IHtcbiAgICAgICAgICBpbnNlcnRUZXh0QXRDYXJldChlbGVtZW50LCBgJHt0aGlzLm1lbnRpb25Db25maWcoKT8udHJpZ2dlckNoYXJ9YCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJLZXlkb3duKHsga2V5OiB0aGlzLm1lbnRpb25Db25maWcoKT8udHJpZ2dlckNoYXIsIGtleUNvZGU6IEtFWV9CQUNLU1BBQ0UsIHNoaWZ0S2V5OiB0cnVlLCBpbnB1dEV2ZW50OiB0cnVlIH0sIGVsZW1lbnQpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnRpbWVEZWxheUluaXQoKSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBtZW50aW9uQ29uZmlnID0gdGhpcy5tZW50aW9uQ29uZmlnKCk7XG4gICAgaWYgKCFtZW50aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckNoYXJzLnNldCh7fSk7XG4gICAgdGhpcy5hZGRDb25maWcobWVudGlvbkNvbmZpZyk7XG4gICAgaWYgKG1lbnRpb25Db25maWcubWVudGlvbikge1xuICAgICAgbWVudGlvbkNvbmZpZy5tZW50aW9uLmZvckVhY2goKGNvbmZpZykgPT4gdGhpcy5hZGRDb25maWcoY29uZmlnKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb25maWcoY29uZmlnOiBJTWVudGlvbkNvbmZpZykge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcpO1xuICAgIGNvbnN0IGxhYmVsS2V5ID0gY29uZmlnLmxhYmVsS2V5IHx8ICdsYWJlbCc7XG4gICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0cywgY29uZmlnKTtcbiAgICBpZiAoY29uZmlnLml0ZW1zICYmIGNvbmZpZy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5pdGVtc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uZmlnLml0ZW1zLmZvckVhY2goKGxhYmVsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+PiA9IHt9O1xuICAgICAgICAgIG9iamVjdFtsYWJlbEtleV0gPSBsYWJlbDtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChsYWJlbEtleSkge1xuICAgICAgICAvLyByZW1vdmUgaXRlbXMgd2l0aG91dCBhbiBsYWJlbEtleSAoYXMgaXQncyByZXF1aXJlZCB0byBmaWx0ZXIgdGhlIGxpc3QpXG4gICAgICAgIGNvbmZpZy5pdGVtcyA9IGNvbmZpZy5pdGVtcy5maWx0ZXIoKGUpID0+IGVbbGFiZWxLZXldKTtcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZVNvcnQpIHtcbiAgICAgICAgICBjb25maWcuaXRlbXMuc29ydCgoYSwgYikgPT4gKGFbbGFiZWxLZXldIHx8ICcnKS5sb2NhbGVDb21wYXJlKGJbbGFiZWxLZXldIHx8ICcnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyQ2hhcnMudXBkYXRlKChpdGVtKSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIFtjb25maWcudHJpZ2dlckNoYXIgfHwgJ0AnXTogY29uZmlnLFxuICAgIH0pKTtcbiAgICBpZiAodGhpcy5hY3RpdmVDb25maWcoKSAmJiB0aGlzLmFjdGl2ZUNvbmZpZygpPy50cmlnZ2VyQ2hhciA9PT0gY29uZmlnLnRyaWdnZXJDaGFyKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQoY29uZmlnKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRJZnJhbWUoaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIHRoaXMuaWZyYW1lLnNldChpZnJhbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRXZlbnQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGdldChldmVudCwgJ3dhc0NsaWNrJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQmx1cihldmVudDogRXZlbnQpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlcklucHV0KGV2ZW50OiBFdmVudCwgbmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgY29uc3QgZGF0YSA9IGdldChldmVudCwgJ2RhdGEnKTtcbiAgICBpZiAodGhpcy5sYXN0S2V5Q29kZSgpID09PSBLRVlfQlVGRkVSRUQgJiYgZGF0YSkge1xuICAgICAgY29uc3Qga2V5Q29kZSA9IGRhdGEuY2hhckNvZGVBdCgwKTtcbiAgICAgIHRoaXMuaGFuZGxlcktleWRvd24oeyBrZXlDb2RlLCBpbnB1dEV2ZW50OiB0cnVlIH0sIG5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyS2V5ZG93bihldmVudDogYW55LCBuYXRpdmVFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpOiBhbnkge1xuICAgIHRoaXMubGFzdEtleUNvZGUuc2V0KGV2ZW50LmtleUNvZGUpO1xuICAgIGlmIChldmVudC5pc0NvbXBvc2luZyB8fCBldmVudC5rZXlDb2RlID09PSBLRVlfQlVGRkVSRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWw6IGFueSA9IGdldFZhbHVlKG5hdGl2ZUVsZW1lbnQpO1xuICAgIGxldCBwb3M6IGFueSA9IGdldENhcmV0UG9zaXRpb24obmF0aXZlRWxlbWVudCwgdGhpcy5pZnJhbWUoKSk7XG4gICAgbGV0IGNoYXJQcmVzc2VkID0gZXZlbnQua2V5O1xuICAgIGlmICghdGhpcy5pc0VkaXRvcigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX0JBQ0tTUEFDRSkge1xuICAgICAgICB0aGlzLmFwcGVuZEVtcHR5VG9MYXN0Tm9kZShwb3MsIHZhbC5sZW5ndGgsIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZE5vZGVaZXJvV2lkdGhTcGFjZShuYXRpdmVFbGVtZW50KSwgMCk7XG4gICAgfVxuICAgIGlmICghY2hhclByZXNzZWQpIHtcbiAgICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZTtcbiAgICAgIGNoYXJQcmVzc2VkID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcbiAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgY2hhckNvZGUgPj0gNjUgJiYgY2hhckNvZGUgPD0gOTApIHtcbiAgICAgICAgY2hhclByZXNzZWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlICsgMzIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX0VOVEVSICYmIGV2ZW50Lndhc0NsaWNrICYmIHBvcyA8ICh0aGlzLnN0YXJ0UG9zKCkgfHwgMCkpIHtcbiAgICAgIHBvcyA9IHRoaXMuc3RhcnROb2RlKCkubGVuZ3RoO1xuICAgICAgc2V0Q2FyZXRQb3NpdGlvbih0aGlzLnN0YXJ0Tm9kZSgpLCBwb3MsIHRoaXMuaWZyYW1lKCkpO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRyaWdnZXJDaGFycygpW2NoYXJQcmVzc2VkXTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQoY29uZmlnKTtcbiAgICAgIHRoaXMuc3RhcnRQb3Muc2V0KGV2ZW50LmlucHV0RXZlbnQgPyBwb3MgLSAxIDogcG9zKTtcbiAgICAgIHRoaXMuc3RhcnROb2RlLnNldChnZXRXaW5kb3dTZWxlY3Rpb24odGhpcy5pZnJhbWUoKSk/LmFuY2hvck5vZGUpO1xuICAgICAgdGhpcy5zZWFyY2hpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcuc2V0KCcnKTtcbiAgICAgIHRoaXMuc2hvd1NlYXJjaExpc3QobmF0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaExpc3QoKTtcbiAgICAgIGlmIChjb25maWcucmV0dXJuVHJpZ2dlcikge1xuICAgICAgICB0aGlzLm91dFNlYXJjaFRlcm0uZW1pdChjb25maWcudHJpZ2dlckNoYXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXRlbVNldCBvZiB0aGlzLm5vZGVzSW5zZXJ0KCkpIHtcbiAgICAgICAgaWYgKCFuYXRpdmVFbGVtZW50LmNvbnRhaW5zKGl0ZW1TZXQuZWxlbWVudFNwYW4pKSB7XG4gICAgICAgICAgaXRlbVNldC5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5ub2Rlc0luc2VydCgpLmRlbGV0ZShpdGVtU2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gdGhpcy5zdGFydFBvcygpO1xuICAgIGlmIChpc05pbChzdGFydFBvcykgfHwgc3RhcnRQb3MgPCAwIHx8ICF0aGlzLnNlYXJjaGluZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaExpc3QgPSB0aGlzLnNlYXJjaExpc3QoKTtcbiAgICBpZiAocG9zIDw9IHN0YXJ0UG9zKSB7XG4gICAgICBpZiAoc2VhcmNoTGlzdCkge1xuICAgICAgICBzZWFyY2hMaXN0LmhpZGRlbi5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLRVlfU0hJRlQgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBwb3MgPD0gc3RhcnRQb3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFjdGl2ZUNvbmZpZygpPy5hbGxvd1NwYWNlICYmIGV2ZW50LmtleUNvZGUgPT09IEtFWV9TUEFDRSkge1xuICAgICAgdGhpcy5zdGFydFBvcy5zZXQoLTEpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX0JBQ0tTUEFDRSAmJiBwb3MgPiAwKSB7XG4gICAgICBwb3MtLTtcbiAgICAgIGlmIChwb3MgPT09IHRoaXMuc3RhcnRQb3MoKSkge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNlYXJjaExpc3Q/LmhpZGRlbigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX1RBQiB8fCBldmVudC5rZXlDb2RlID09PSBLRVlfRU5URVIpIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzZWFyY2hMaXN0Py5oaWRkZW4oKSAmJiB0aGlzLmFjdGl2ZUNvbmZpZygpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX1RBQiB8fCBldmVudC5rZXlDb2RlID09PSBLRVlfRU5URVIpIHtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICAvLyBlbWl0IHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW1cbiAgICAgICAgdGhpcy5vdXRJdGVtU2VsZWN0ZWQuZW1pdChzZWFyY2hMaXN0Py5BY3RpdmVJdGVtKTtcbiAgICAgICAgLy8gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBzZWxlY3RlZCBpdGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHRleHRcbiAgICAgICAgdGhpcy5pbnNlcnRNZW50aW9uKG5hdGl2ZUVsZW1lbnQsIHBvcyk7XG4gICAgICAgIC8vIGZpcmUgaW5wdXQgZXZlbnQgc28gYW5ndWxhciBiaW5kaW5ncyBhcmUgdXBkYXRlZFxuICAgICAgICBpZiAoJ0V2ZW50JyBpbiB3aW5kb3cpIHtcbiAgICAgICAgICAvLyB0aGlzIHNlZW1zIGJhY2t3YXJkcywgYnV0IGZpcmUgdGhlIGV2ZW50IGZyb20gdGhpcyBlbGVtZW50cyBuYXRpdmVFbGVtZW50IChub3QgdGhlXG4gICAgICAgICAgLy8gb25lIHByb3ZpZGVkIHRoYXQgbWF5IGJlIGluIGFuIGlmcmFtZSwgYXMgaXQgd29uJ3QgYmUgcHJvcG9nYXRlKVxuICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgdXNpbmcgdGhlIG1vZGVybiBFdmVudCBjb25zdHJ1Y3RvclxuICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBFdmVudCh0aGlzLmlmcmFtZSgpID8gJ2NoYW5nZScgOiAnaW5wdXQnLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50IG9uIHRoZSBuYXRpdmUgZWxlbWVudFxuICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRQb3Muc2V0KC0xKTtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX0VTQ0FQRSkge1xuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLRVlfRE9XTikge1xuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHNlYXJjaExpc3Q/LmFjdGl2YXRlTmV4dEl0ZW0oKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS0VZX1VQKSB7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgc2VhcmNoTGlzdD8uYWN0aXZhdGVQcmV2aW91c0l0ZW0oKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFyUHJlc3NlZC5sZW5ndGggIT09IDEgJiYgZXZlbnQua2V5Q29kZSAhPT0gS0VZX0JBQ0tTUEFDRSkge1xuICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5zZWFyY2hpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbWVudGlvbiA9IHZhbC5zdWJzdHJpbmcoKHRoaXMuc3RhcnRQb3MoKSB8fCAwKSArIDEsIHBvcyk7XG5cbiAgICBpZiAoZXZlbnQua2V5Q29kZSAhPT0gS0VZX0JBQ0tTUEFDRSAmJiAhZXZlbnQuaW5wdXRFdmVudCkge1xuICAgICAgbWVudGlvbiArPSBjaGFyUHJlc3NlZDtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gbWVudGlvbi5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSwgJyAnKS5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoMCksICcnKTtcbiAgICB0aGlzLnNlYXJjaFN0cmluZy5zZXQoc2VhcmNoU3RyaW5nLnRyaW0oKSk7XG4gICAgY29uc3QgbGltaXRTcGFjZVNlYXJjaFF1ZXJ5ID0gdGhpcy5hY3RpdmVDb25maWcoKT8ubGltaXRTcGFjZVNlYXJjaFF1ZXJ5O1xuICAgIGlmIChsaW1pdFNwYWNlU2VhcmNoUXVlcnkgJiYgc2VhcmNoU3RyaW5nLnNwbGl0KCcgJykubGVuZ3RoIC0gMSA+IGxpbWl0U3BhY2VTZWFyY2hRdWVyeSkge1xuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcuc2V0KCcnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKCk/LnJldHVyblRyaWdnZXIpIHtcbiAgICAgIGNvbnN0IHRyaWdnZXJDaGFyID0gdGhpcy5zZWFyY2hTdHJpbmcoKSB8fCBldmVudC5rZXlDb2RlID09PSBLRVlfQkFDS1NQQUNFID8gdmFsLnN1YnN0cmluZyh0aGlzLnN0YXJ0UG9zKCksICh0aGlzLnN0YXJ0UG9zKCkgfHwgMCkgKyAxKSA6ICcnO1xuXG4gICAgICB0aGlzLm91dFNlYXJjaFRlcm0uZW1pdCh0cmlnZ2VyQ2hhciArIHRoaXMuc2VhcmNoU3RyaW5nKCkpO1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hMaXN0KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWFyY2hUZXJtLmVtaXQodGhpcy5zZWFyY2hTdHJpbmcoKSk7XG4gICAgdGhpcy51cGRhdGVTZWFyY2hMaXN0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzKGU/OiBFdmVudCwgbmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gZ2V0V2luZG93U2VsZWN0aW9uKHRoaXMuaWZyYW1lKCkpPy5hbmNob3JOb2RlO1xuXG4gICAgICBpZiAobm9kZT8ubm9kZVR5cGUgIT09IDMpIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dEJlZm9yZUN1cnNvciA9IGdldFRleHRCZWZvcmVDdXJzb3IoKSB8fCAnJztcblxuICAgICAgY29uc3QgdHJpZ2dlckNoYXJzID0gT2JqZWN0LmtleXModGhpcy50cmlnZ2VyQ2hhcnMoKSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIGNvbmZpZzogdGhpcy50cmlnZ2VyQ2hhcnMoKVtrZXldLFxuICAgICAgICAgIGluZGV4OiB0ZXh0QmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKGtleSkgYXMgbnVtYmVyLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBtYXRjaGluZ0NoYXJhY3RlcnMgPSB0cmlnZ2VyQ2hhcnMucmVkdWNlKChwcmUsIGN1cnJlbnQpID0+IChwcmUgJiYgY3VycmVudCAmJiBjdXJyZW50LmluZGV4ID4gcHJlLmluZGV4ID8gY3VycmVudCA6IHByZSkpO1xuXG4gICAgICBpZiAobWF0Y2hpbmdDaGFyYWN0ZXJzLmluZGV4IDwgMCkge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2ggPSB0ZXh0QmVmb3JlQ3Vyc29yPy5zdWJzdHJpbmcobWF0Y2hpbmdDaGFyYWN0ZXJzLmluZGV4LCB0ZXh0QmVmb3JlQ3Vyc29yLmxlbmd0aCk7XG5cbiAgICAgIGlmICghc2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvcyA9IGdldENhcmV0UG9zaXRpb24obmF0aXZlRWxlbWVudCwgdGhpcy5pZnJhbWUoKSk7XG5cbiAgICAgIHRoaXMuYWN0aXZlQ29uZmlnLnNldChtYXRjaGluZ0NoYXJhY3RlcnMuY29uZmlnKTtcbiAgICAgIHRoaXMuc3RhcnRQb3Muc2V0KHBvcyAtICh0ZXh0QmVmb3JlQ3Vyc29yLmxlbmd0aCAtIG1hdGNoaW5nQ2hhcmFjdGVycy5pbmRleCkpO1xuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcuc2V0KHNlYXJjaC5yZXBsYWNlKG1hdGNoaW5nQ2hhcmFjdGVycy5rZXksICcnKSk7XG4gICAgICB0aGlzLnNlYXJjaGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmhhbmRsZXJLZXlkb3duKHsga2V5Q29kZTogJycuY2hhckNvZGVBdCgwKSwgaW5wdXRFdmVudDogZmFsc2UgfSwgbmF0aXZlRWxlbWVudCk7XG4gICAgICBjb25zdCBkaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGRpdkVsZW1lbnQuc3R5bGUud2lkdGggPSAnbWF4LWNvbnRlbnQnO1xuICAgICAgZGl2RWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICBkaXZFbGVtZW50LmlubmVyVGV4dCA9IHNlYXJjaDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2RWxlbWVudCk7XG4gICAgICBsZXQgaWZyYW1lID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWZyYW1lID0gdGhpcy5tZW50aW9uQ29uZmlnKCk/LmlmcmFtZSA/ICh3aW5kb3cucGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubWVudGlvbkNvbmZpZygpPy5pZnJhbWUgYXMgc3RyaW5nKSBhcyBIVE1MSUZyYW1lRWxlbWVudCkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hMaXN0ID0gdGhpcy5zZWFyY2hMaXN0KCk7XG4gICAgICBpZiAoc2VhcmNoTGlzdCkge1xuICAgICAgICBzZWFyY2hMaXN0LnBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIGlmcmFtZSwgZGl2RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICB9XG4gICAgICBkaXZFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgbmF0aXZlRWxlbWVudC5ub3JtYWxpemUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFNlYXJjaCgpIHtcbiAgICBjb25zdCBzZWFyY2hMaXN0ID0gdGhpcy5zZWFyY2hMaXN0KCk7XG4gICAgaWYgKHNlYXJjaExpc3QgJiYgIXNlYXJjaExpc3QuaGlkZGVuKCkpIHtcbiAgICAgIHNlYXJjaExpc3QuaGlkZGVuLnNldCh0cnVlKTtcbiAgICAgIHRoaXMub3V0VG9nZ2xlLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLnNlYXJjaGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hMaXN0KCkge1xuICAgIGNvbnN0IG1hdGNoZXM6IGFueVtdID0gW107XG4gICAgY29uc3QgYWN0aXZlQ29uZmlnID0gdGhpcy5hY3RpdmVDb25maWcoKTtcbiAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSB0aGlzLnNlYXJjaFN0cmluZygpO1xuICAgIGNvbnN0IHNlYXJjaExpc3QgPSB0aGlzLnNlYXJjaExpc3QoKTtcbiAgICAvLyBkaXNhYmxpbmcgdGhlIHNlYXJjaCByZWxpZXMgb24gdGhlIGFzeW5jIG9wZXJhdGlvbiB0byBkbyB0aGUgZmlsdGVyaW5nXG4gICAgaWYgKGFjdGl2ZUNvbmZpZyAmJiBhY3RpdmVDb25maWcuaXRlbXMgJiYgIWFjdGl2ZUNvbmZpZy5kaXNhYmxlU2VhcmNoICYmICFpc05pbChzZWFyY2hTdHJpbmcpICYmIGFjdGl2ZUNvbmZpZy5sYWJlbEtleSAmJiBhY3RpdmVDb25maWcubWVudGlvbkZpbHRlcikge1xuICAgICAgbWF0Y2hlcy5wdXNoKC4uLihhY3RpdmVDb25maWcubWVudGlvbkZpbHRlcihzZWFyY2hTdHJpbmcsIGFjdGl2ZUNvbmZpZy5pdGVtcykgYXMgYW55KSk7XG4gICAgfVxuICAgIC8vIHVwZGF0ZSB0aGUgc2VhcmNoIGxpc3RcbiAgICBpZiAoIXNlYXJjaExpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VhcmNoTGlzdC5pdGVtcy5zZXQobWF0Y2hlcyk7XG4gICAgc2VhcmNoTGlzdC5oaWRkZW4uc2V0KCFtYXRjaGVzLmxlbmd0aCk7XG4gICAgc2VhcmNoTGlzdC5hY3RpdmVJbmRleC5zZXQoMCk7XG4gICAgc2VhcmNoTGlzdC5zY3JvbGxDb250ZW50KCk7XG4gICAgdGhpcy5vdXRUb2dnbGUuZW1pdChtYXRjaGVzLmxlbmd0aCA/IHRydWUgOiBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTZWFyY2hMaXN0KG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICBsZXQgaWZyYW1lID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lbnRpb25Db25maWcgPSB0aGlzLm1lbnRpb25Db25maWcoKTtcbiAgICB0cnkge1xuICAgICAgaWZyYW1lID0gbWVudGlvbkNvbmZpZz8uaWZyYW1lID8gKHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWVudGlvbkNvbmZpZz8uaWZyYW1lIGFzIHN0cmluZykgYXMgSFRNTElGcmFtZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgfVxuICAgIGlmICghbWVudGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dFRvZ2dsZS5lbWl0KHRydWUpO1xuICAgIGxldCBmaXJzdFRpbWUgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5saXN0Q29tcG9uZW50UmVmKCkpIHtcbiAgICAgIGZpcnN0VGltZSA9IHRydWU7XG4gICAgICB0aGlzLmxpc3RDb21wb25lbnRSZWYuc2V0KHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25MaXN0Q29tcG9uZW50KSk7XG4gICAgICB0aGlzLnNlYXJjaExpc3Quc2V0KHRoaXMubGlzdENvbXBvbmVudFJlZigpPy5pbnN0YW5jZSk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5sYWJlbEtleS5zZXQodGhpcy5hY3RpdmVDb25maWcoKT8ubGFiZWxLZXkgfHwgJycpO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5zdHlsZU9mZi5zZXQodGhpcy5tZW50aW9uQ29uZmlnKCk/LmRpc2FibGVTdHlsZSB8fCBmYWxzZSk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/LmFjdGl2ZUluZGV4LnNldCgwKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8uekluZGV4LnNldCh0aGlzLm1lbnRpb25Db25maWcoKT8uekluZGV4IHx8IDI1MDApO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5pc0lmcmFtZS5zZXQoaWZyYW1lID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8ucGFyZW50SGFuZGxlcktleURvd24uc2V0KHRoaXMuaGFuZGxlcktleWRvd24uYmluZCh0aGlzKSk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/LnBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIGlmcmFtZSk7XG4gICAgaWYgKGZpcnN0VGltZSAmJiB0aGlzLmxpc3RDb21wb25lbnRSZWYoKSkge1xuICAgICAgdGhpcy5pZnJhbWVJZC5zZXQodGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5saXN0Q29tcG9uZW50UmVmKCksIGlmcmFtZSA/IHRydWUgOiBmYWxzZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveUxpc3RTZWFyY2goKSB7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy5saXN0Q29tcG9uZW50UmVmLCB0aGlzLmlmcmFtZUlkKCkpO1xuICAgIHRoaXMubGlzdENvbXBvbmVudFJlZi5zZXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBlbmRFbXB0eVRvTGFzdE5vZGUocG9zaXRpb246IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgIGNvbnN0IGVtcHR5ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTAwQTAnKTtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRXaW5kb3dTZWxlY3Rpb24odGhpcy5pZnJhbWUoKSk7XG4gICAgY29uc3QgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbj8uYW5jaG9yTm9kZTtcblxuICAgIGlmICh0aGlzLmlzRWRpdG9yKCkpIHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBhbmNob3JOb2RlPy5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG5cbiAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZ2V0QXR0cmlidXRlICYmIHBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpKSB7XG4gICAgICAgIGlmICghcGFyZW50Tm9kZS5uZXh0U2libGluZyB8fCAhcGFyZW50Tm9kZS5uZXh0U2libGluZy50ZXh0Q29udGVudD8ubGVuZ3RoKSB7XG4gICAgICAgICAgcGFyZW50Tm9kZT8ucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGVtcHR5LCBwYXJlbnROb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgICAgICByYW5nZS5zZXRTdGFydChwYXJlbnROb2RlLm5leHRTaWJsaW5nIGFzIE5vZGUsIDApO1xuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHByZU5vZGUgPSBudWxsO1xuICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbj8uYW5jaG9yT2Zmc2V0O1xuXG4gICAgaWYgKCFhbmNob3JOb2RlIHx8ICFhbmNob3JPZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYW5jaG9yTm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnI3RleHQnKSB7XG4gICAgICBuYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVtcHR5KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuXG4gICAgICBpZiAoYW5jaG9yTm9kZS5ub2RlVHlwZSA9PT0gMyAmJiBhbmNob3JOb2RlID09PSBub2RlICYmIHByZU5vZGUgJiYgcHJlTm9kZS5nZXRBdHRyaWJ1dGUgJiYgcHJlTm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykgJiYgKCFhbmNob3JOb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgYW5jaG9yTm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT09IDEpICYmIHBvc2l0aW9uID09PSBsZW5ndGgpIHtcbiAgICAgICAgbmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbXB0eSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlTm9kZSA9IG5vZGUgYXMgRWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTm9kZVplcm9XaWR0aFNwYWNlKG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgIGNvbnN0IGVtcHR5ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMGInKTtcbiAgICBsZXQgcHJlTm9kZSA9IG51bGw7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZTogYW55ID0gbmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuXG4gICAgICBpZiAocHJlTm9kZSAmJiBwcmVOb2RlLmdldEF0dHJpYnV0ZSAmJiBwcmVOb2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAmJiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpKSB7XG4gICAgICAgIG5hdGl2ZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVtcHR5LCBwcmVOb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgIH1cblxuICAgICAgcHJlTm9kZSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRNZW50aW9uKG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQsIHBvczogbnVtYmVyKSB7XG4gICAgY29uc3QgYWN0aXZlQ29uZmlnID0gdGhpcy5hY3RpdmVDb25maWcoKTtcbiAgICBpZiAoIWFjdGl2ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hMaXN0ID0gdGhpcy5zZWFyY2hMaXN0KCk7XG4gICAgbGV0IHRleHQgPSAnJztcbiAgICBjb25zdCBmZUlkID0gdXVpZCgpO1xuICAgIGNvbnN0IGlkID0gc2VhcmNoTGlzdD8uQWN0aXZlSXRlbS5pZCB8fCB1dWlkKCk7XG4gICAgY29uc3QgaXRlbUFjdGl2ZSA9IHNlYXJjaExpc3Q/LkFjdGl2ZUl0ZW07XG4gICAgY29uc3QgeyB0cmlnZ2VyQ2hhciwgbWVudGlvbkV2ZW50TmFtZSwgbWVudGlvbkFjdGlvbkJ5RXZlbnQgfSA9IGFjdGl2ZUNvbmZpZztcblxuICAgIGlmIChhY3RpdmVDb25maWcubWVudGlvblNlbGVjdCkge1xuICAgICAgdGV4dCA9IGFjdGl2ZUNvbmZpZy5tZW50aW9uU2VsZWN0KHNlYXJjaExpc3Q/LkFjdGl2ZUl0ZW0sIGFjdGl2ZUNvbmZpZy50cmlnZ2VyQ2hhcik7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0VkaXRvcigpKSB7XG4gICAgICBsZXQgc3BhbjogSFRNTFNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEVYVEFSRUEnKTtcblxuICAgICAgc3Bhbi5pbm5lclRleHQgPSB0ZXh0O1xuICAgICAgdGV4dCA9IHNwYW4uaW5uZXJIVE1MO1xuICAgICAgc3Bhbi5yZW1vdmUoKTtcbiAgICAgIHRleHQgPSBidWlsZFRlbXBsYXRlKHRleHQsIGlkLCBmZUlkKTtcbiAgICAgIHNwYW4gPSBpbnNlcnRWYWx1ZShuYXRpdmVFbGVtZW50LCB0aGlzLnN0YXJ0UG9zKCkgfHwgMCwgcG9zLCB0ZXh0LCB0aGlzLmlmcmFtZSgpKSBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICBpZiAoc3Bhbikge1xuICAgICAgICBjb25zdCBkYXRhOiBJTm9kZUluc2VydCA9IHtcbiAgICAgICAgICBlbGVtZW50U3Bhbjogc3BhbixcbiAgICAgICAgICBzdWJzY3JpcHRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICBpdGVtOiBpdGVtQWN0aXZlLFxuICAgICAgICAgIHRyaWdnZXJDaGFyOiB0cmlnZ2VyQ2hhcixcbiAgICAgICAgICBtYW51YWxBZGQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ub2Rlc0luc2VydCgpLmFkZChkYXRhKTtcbiAgICAgICAgaWYgKG1lbnRpb25FdmVudE5hbWUpIHtcbiAgICAgICAgICBkYXRhLnN1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxJRXZlbnQ+KHNwYW4sIG1lbnRpb25FdmVudE5hbWUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFwKChlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtZW50aW9uQWN0aW9uQnlFdmVudCkge1xuICAgICAgICAgICAgICAgIG1lbnRpb25BY3Rpb25CeUV2ZW50KGl0ZW1BY3RpdmUsIHRyaWdnZXJDaGFyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vdXRJbnNlcnRNZW50aW9uLmVtaXQoeyBkYXRhOiB7IGlkLCB2YWx1ZTogdGV4dCwgZmVJZCB9LCBsZW5ndGhLZXk6IHBvcyAtICh0aGlzLnN0YXJ0UG9zKCkgfHwgMCkgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95TGlzdFNlYXJjaCgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
|