@cqa-lib/cqa-ui 1.1.461 → 1.1.463
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/dynamic-select/dynamic-select-field.component.mjs +8 -3
- package/esm2020/lib/radio-card-group/radio-card-group.component.mjs +75 -0
- package/esm2020/lib/radio-card-group/radio-card-option.model.mjs +2 -0
- package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +3 -3
- package/esm2020/lib/test-case-details/test-case-details.models.mjs +2 -2
- package/esm2020/lib/ui-kit.module.mjs +6 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +97 -19
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +84 -6
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/radio-card-group/radio-card-group.component.d.ts +26 -0
- package/lib/radio-card-group/radio-card-option.model.d.ts +6 -0
- package/lib/ui-kit.module.d.ts +162 -161
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/styles.css +1 -1
|
@@ -705,9 +705,14 @@ export class DynamicSelectFieldComponent {
|
|
|
705
705
|
if (this.hostEl?.nativeElement && this.hostEl.nativeElement.contains(target)) {
|
|
706
706
|
return;
|
|
707
707
|
}
|
|
708
|
-
//
|
|
708
|
+
// Use composedPath() to capture the event dispatch path at the time of the click,
|
|
709
|
+
// before any DOM mutations triggered by selection-change handlers (e.g. options list
|
|
710
|
+
// rebuild). Without this, when an option is un-checked the consumer may reassign
|
|
711
|
+
// config (new reference) which causes Angular to re-render and detach the original
|
|
712
|
+
// click-target node, making el.contains(target) return false even for in-panel clicks.
|
|
713
|
+
const eventPath = (event.composedPath ? event.composedPath() : []);
|
|
709
714
|
const panelEls = Array.from(document.querySelectorAll('.mat-select-panel'));
|
|
710
|
-
const clickInsidePanel = panelEls.some((el) => el.contains(target));
|
|
715
|
+
const clickInsidePanel = panelEls.some((el) => el.contains(target) || eventPath.includes(el));
|
|
711
716
|
if (clickInsidePanel) {
|
|
712
717
|
return;
|
|
713
718
|
}
|
|
@@ -908,4 +913,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
908
913
|
type: HostListener,
|
|
909
914
|
args: ['document:click', ['$event']]
|
|
910
915
|
}] } });
|
|
911
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBbUV2SyxNQUFNLE9BQU8sMkJBQTJCO0lBTHhDO1FBTVcscUJBQWdCLEdBQVcsZ0JBQWdCLENBQUM7UUFDNUMsNEJBQXVCLEdBQVcsaUJBQWlCLENBQUM7UUFHbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBdUQsQ0FBQztRQUMxRixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDakQscUVBQXFFO1FBQzNELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFDNUUsd0VBQXdFO1FBQzlELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBa0MsQ0FBQztRQUN4RSxzSkFBc0o7UUFDNUksbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBa0MsQ0FBQztRQUs5RSxnRkFBZ0Y7UUFDaEYsb0JBQWUsR0FBMkIsRUFBRSxDQUFDO1FBR3JDLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUM5QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUdwQjs7O1dBR0c7UUFDSyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDckM7Ozs7V0FJRztRQUNLLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNoQyxrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUMz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QUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEMsSUFBSTtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FBRTtRQUFDLE1BQU0sR0FBRTtJQUMzRCxDQUFDOzt3SEExMkJVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLHVmQWVJLFVBQVUsa0RDbEZ0RCx1cVpBb01NOzJGRGpJTywyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU07OEJBS3RDLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVvQyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ2UsTUFBTTtzQkFBN0QsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBaXFCdEQsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNlbGVjdCwgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcblxuLy8gTG9jYWwgb3B0aW9uIG1vZGVsIChwcmV2aW91c2x5IGltcG9ydGVkIGZyb20gcmVtb3ZlZCBjcWEtc2VsZWN0IGNvbXBvbmVudClcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgaWQ/OiBhbnk7XG4gIHZhbHVlPzogYW55O1xuICBuYW1lPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgc3RhdHVzQ29sb3I/OiBzdHJpbmc7XG4gIGR1cmF0aW9uRm9ybWF0dGVkPzogc3RyaW5nO1xuICBydW5OdW1iZXJMYWJlbD86IHN0cmluZztcbiAgaGFzSG91clJ1bj86IGJvb2xlYW47XG4gIGhhc01pbnV0ZVJ1bj86IGJvb2xlYW47XG4gIHJ1bkRhdGVMYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNwbGF5TGFiZWxBc0lubmVySHRtbD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgLyoqIENvbnRyb2xzIGhvdyBzZWxlY3Rpb24gaW5kaWNhdG9yIGlzIHNob3duIGZvciBtdWx0aS1zZWxlY3Qgb3B0aW9ucy4gKi9cbiAgb3B0aW9uU3R5bGU/OiAnY2hlY2ttYXJrJyB8ICdjaGVja2JveCc7XG4gIC8qKiBTaG93IGEgJ1NlbGVjdCBBbGwnIG9wdGlvbiBhdCB0aGUgdG9wIChtdWx0aS1zZWxlY3Qgb25seSkuICovXG4gIHNob3dTZWxlY3RBbGw/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIGxhYmVsIGZvciB0aGUgJ1NlbGVjdCBBbGwnIG9wdGlvbi4gRGVmYXVsdHMgdG8gJ0FsbCcuICovXG4gIHNlbGVjdEFsbExhYmVsPzogc3RyaW5nO1xuICAvKiogSWYgdHJ1ZSwgY2xvc2UgdGhlIHBhbmVsIHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkICh1c2VmdWwgZm9yIG11bHRpLXNlbGVjdCBpbiBoZWFkZXJzKS4gKi9cbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW47XG4gIC8qKiBQcm92aWRlIGEgZGVmYXVsdCBzZWxlY3RlZCB2YWx1ZSAob3IgYXJyYXkgZm9yIG11bHRpLXNlbGVjdCkgaWYgdGhlIGNvbnRyb2wgaGFzIG5vIHZhbHVlIHlldC4gKi9cbiAgc2VsZWN0ZWRWYWx1ZT86IGFueSB8IGFueVtdO1xuICAvKiogT3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuICovXG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBhbnksIGV2ZW50PzogTWF0U2VsZWN0Q2hhbmdlKSA9PiB2b2lkO1xuICAvKiogRW5hYmxlIHNlcnZlci1zaWRlIHNlYXJjaCBtb2RlOyBjb21wb25lbnQgd2lsbCBlbWl0IHNlYXJjaCBpbnN0ZWFkIG9mIGxvY2FsIGZpbHRlcmluZy4gKi9cbiAgc2VydmVyU2VhcmNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdHJpZ2dlcnMgYW4gaW5pdGlhbCBzZWFyY2ggZW1pdCBvbiBwYW5lbCBvcGVuIChzZXJ2ZXJTZWFyY2ggbW9kZSBvbmx5KS5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2Ugc28gb3BlbmluZyB0aGUgZHJvcGRvd24gZG9lcyBOT1QgY2FsbCB0aGUgQVBJLlxuICAgKi9cbiAgaW5pdGlhbEZldGNoT25PcGVuPzogYm9vbGVhbjtcbiAgLyoqIEluZGljYXRlcyBtb3JlIHJlc3VsdHMgYXJlIGF2YWlsYWJsZSBmb3IgaW5maW5pdGUgc2Nyb2xsLiAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIGxvYWRpbmcgZmxhZyBjb250cm9sbGVkIGJ5IGNvbnN1bWVyIHRvIHNob3cgbG9hZGluZyBzdGF0ZS4gKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2ggd2hlbiBxdWVyeSBjaGFuZ2VzLiAqL1xuICBvblNlYXJjaD86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogT3B0aW9uYWwgY2FsbGJhY2sgd2hlbiBtb3JlIGRhdGEgaXMgcmVxdWVzdGVkIChpbmZpbml0ZSBzY3JvbGwpLiAqL1xuICBvbkxvYWRNb3JlPzogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogT3B0aW9uYWwgcmVnZXggcGF0dGVybiBvciBmdW5jdGlvbiB0byBoaWdobGlnaHQgcGFydHMgb2Ygb3B0aW9uIHRleHQuICovXG4gIGhpZ2hsaWdodFBhdHRlcm4/OiBSZWdFeHAgfCBzdHJpbmcgfCAoKHRleHQ6IHN0cmluZykgPT4gc3RyaW5nKTtcbiAgLyoqIFdoZW4gdHJ1ZSAoYW5kIHNlYXJjaGFibGUpLCBhbGxvd3MgYWRkaW5nIHRoZSBjdXJyZW50IHNlYXJjaCB0ZXh0IGFzIGEgbmV3IG9wdGlvbiB2aWEgYW4gXCJBZGQgJzx2YWx1ZT4nXCIgY2hvaWNlLiAqL1xuICBhbGxvd0N1c3RvbVZhbHVlPzogYm9vbGVhbjtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uW107XG4gIGlzQ29tcGFyZVJ1bnM/OiBib29sZWFuO1xuICB2YWx1ZUJ5Pzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZHluYW1pYy1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljU2VsZWN0RmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHJlYWRvbmx5IFNFTEVDVF9BTExfVkFMVUU6IHN0cmluZyA9ICdfX3NlbGVjdF9hbGxfXyc7XG4gIHJlYWRvbmx5IEFERF9DVVNUT01fVkFMVUVfUFJFRklYOiBzdHJpbmcgPSAnX19hZGRfY3VzdG9tX186JztcbiAgQElucHV0KCkgZm9ybSE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgY29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogYW55OyBldmVudDogTWF0U2VsZWN0Q2hhbmdlIH0+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdXNlciB0eXBlcyBpbiBzZWFyY2ggYm94ICh1c2VmdWwgZm9yIHNlcnZlciBzZWFyY2gpICovXG4gIEBPdXRwdXQoKSBzZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyBtb3JlIGRhdGEgZm9yIHRoZSBjdXJyZW50IHF1ZXJ5ICovXG4gIEBPdXRwdXQoKSBsb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuICAvKiogRW1pdHMgd2hlbiB0aGUgdXNlciBjaG9vc2VzIHRvIGFkZCBhIGN1c3RvbSB2YWx1ZSAoYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZSkuIENvbnN1bWVyIHNob3VsZCBhZGQgdGhlIHZhbHVlIHRvIG9wdGlvbnMgYW5kIHNldCB0aGUgY29udHJvbCB2YWx1ZS4gKi9cbiAgQE91dHB1dCgpIGFkZEN1c3RvbVZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0UmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlbGVjdFJlZj86IE1hdFNlbGVjdDtcbiAgQFZpZXdDaGlsZCgnaG9zdCcsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KSBob3N0RWw/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvLyBNdXN0IGJlIHB1YmxpYyBmb3IgdGVtcGxhdGUgYWNjZXNzIGluIEFuZ3VsYXIncyBzdHJpY3QgdGVtcGxhdGUgY2hlY2tpbmcgbW9kZVxuICBzZWFyY2hUZXh0QnlLZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSBvdXRzaWRlQ2xlYW51cD86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgbG9hZE1vcmVPYnNlcnZlcj86IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIGxhc3RPcHRpb25zTGVuZ3RoID0gMDtcbiAgbG9hZGluZ01vcmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBwYW5lbFNjcm9sbEVsPzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgZG9jdW1lbnRLZXlkb3duTGlzdGVuZXI/OiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBHdWFyZCB0byBlbnN1cmUgbG9hZC1tb3JlIGlzIG9ubHkgdHJpZ2dlcmVkIGFmdGVyIHRoZSB1c2VyIGhhcyBzY3JvbGxlZFxuICAgKiBhdCBsZWFzdCBvbmNlIHNpbmNlIG9wZW5pbmcgdGhlIHBhbmVsLiBQcmV2ZW50cyBhdXRvLWxvYWQgb24gb3Blbi5cbiAgICovXG4gIHByaXZhdGUgaGFzU2Nyb2xsZWRTaW5jZU9wZW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRydWUgd2hlbiB0aGUgbG9hZC1tb3JlIHNlbnRpbmVsIGlzIGN1cnJlbnRseSBpbiB2aWV3LiBVc2VkIHRvIHRyaWdnZXIgb25seSB3aGVuXG4gICAqIHRoZSBzZW50aW5lbCB0cmFuc2l0aW9ucyBmcm9tIG91dC1vZi12aWV3IHRvIGluLXZpZXcgKHVzZXIgc2Nyb2xsZWQgdG8gYm90dG9tIGFnYWluKSxcbiAgICogbm90IHdoZW4gaXQgc3RheXMgaW4gdmlldyBhZnRlciBuZXcgZGF0YSBhcnJpdmVzICh3aGljaCB3b3VsZCBjYXVzZSByZXBlYXRlZCBBUEkgY2FsbHMpLlxuICAgKi9cbiAgcHJpdmF0ZSBzZW50aW5lbEN1cnJlbnRseUluVmlldyA9IGZhbHNlO1xuICBwcml2YXRlIG9uUGFuZWxTY3JvbGwgPSAoKSA9PiB7XG4gICAgdGhpcy5oYXNTY3JvbGxlZFNpbmNlT3BlbiA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uaGFzTW9yZSB8fCB0aGlzLmxvYWRpbmdNb3JlKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSB0aGlzLnBhbmVsU2Nyb2xsRWw7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGNvbnN0IG5lYXJCb3R0b20gPSBlbC5zY3JvbGxUb3AgKyBlbC5jbGllbnRIZWlnaHQgPj0gZWwuc2Nyb2xsSGVpZ2h0IC0gNDg7IC8vIH4zIG9wdGlvbiByb3dzXG4gICAgaWYgKG5lYXJCb3R0b20gJiYgIXRoaXMuc2VudGluZWxDdXJyZW50bHlJblZpZXcpIHtcbiAgICAgIHRoaXMuc2VudGluZWxDdXJyZW50bHlJblZpZXcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IHRydWU7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5IHx8ICcnO1xuICAgICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2tleV0gfHwgJyc7XG4gICAgICB0aGlzLmxvYWRNb3JlLmVtaXQoeyBrZXksIHF1ZXJ5OiBxIH0pO1xuICAgICAgdHJ5IHsgdGhpcy5jb25maWcub25Mb2FkTW9yZT8uKHEpOyB9IGNhdGNoIHt9XG4gICAgfSBlbHNlIGlmICghbmVhckJvdHRvbSkge1xuICAgICAgdGhpcy5zZW50aW5lbEN1cnJlbnRseUluVmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnIHx8ICF0aGlzLmNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3FhLWR5bmFtaWMtc2VsZWN0OiBpbnB1dCBcImNvbmZpZy5rZXlcIiBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpO1xuICAgIHRoaXMuc3luY0Rpc2FibGVkU3RhdGUoKTtcbiAgICB0aGlzLmxhc3RPcHRpb25zTGVuZ3RoID0gKHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgZGlzcGxheVBsYWNlaG9sZGVyKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm4gdGhpcy5jb25maWc/LnBsYWNlaG9sZGVyO1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuZm9ybS5nZXQoa2V5KT8udmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuaGFzRXhpc3RpbmdWYWx1ZShjb250cm9sVmFsdWUpID8gdW5kZWZpbmVkIDogdGhpcy5jb25maWc/LnBsYWNlaG9sZGVyO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgnY29uZmlnJyBpbiBjaGFuZ2VzIHx8ICdmb3JtJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnN5bmNEaXNhYmxlZFN0YXRlKCk7XG4gICAgfVxuICAgIGlmICgnY29uZmlnJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAvLyBXaGVuIGNvbmZpZyBjaGFuZ2VzIChpbmNsdWRpbmcgdG9nZ2xpbmcgbXVsdGlwbGUpLCBlbnN1cmUgY29udHJvbCB2YWx1ZSBzaGFwZSBtYXRjaGVzXG4gICAgICB0aGlzLnN5bmNDb250cm9sVmFsdWVGb3JNdWx0aXBsZU1vZGUoKTtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZFZhbHVlSWZOZWVkZWQoKTtcbiAgICAgIC8vIFN5bmMgbG9hZGluZ01vcmUgd2l0aCBjb25maWcuaXNMb2FkaW5nIHdoZW4gcHJvdmlkZWQgYnkgcGFyZW50XG4gICAgICAvLyBUaGlzIGFsbG93cyBwYXJlbnQgdG8gY29udHJvbCBsb2FkaW5nIHN0YXRlIChlLmcuLCBkdXJpbmcgbG9hZCBtb3JlIG9wZXJhdGlvbnMpXG4gICAgICBpZiAodGhpcy5jb25maWc/LmlzTG9hZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vcmUgPSB0aGlzLmNvbmZpZy5pc0xvYWRpbmc7XG4gICAgICB9XG4gICAgICAvLyBSZXNldCBsb2FkaW5nTW9yZSB3aGVuIG5ldyBvcHRpb25zIGFycml2ZSAob3B0aW9ucyBsZW5ndGggaW5jcmVhc2VkKVxuICAgICAgY29uc3QgbGVuID0gKHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdKS5sZW5ndGg7XG4gICAgICBpZiAobGVuID4gdGhpcy5sYXN0T3B0aW9uc0xlbmd0aCkge1xuICAgICAgICAvLyBSZXNldCBsb2FkaW5nIHN0YXRlIHdoZW4gbmV3IGRhdGEgYXJyaXZlcywgdW5sZXNzIHBhcmVudCBleHBsaWNpdGx5IHNheXMgc3RpbGwgbG9hZGluZ1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmlzTG9hZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNb3JlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWc/LmlzTG9hZGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gT25seSBhdXRvLXJlc2V0IGlmIHBhcmVudCBkb2Vzbid0IGNvbnRyb2wgbG9hZGluZyBzdGF0ZVxuICAgICAgICAgIHRoaXMubG9hZGluZ01vcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5sYXN0T3B0aW9uc0xlbmd0aCA9IGxlbjtcbiAgICAgIC8vIElmIGNvbnN1bWVyIGluZGljYXRlcyBubyBtb3JlIHJlc3VsdHMsIGNsZWFyIGxvYWRpbmcgc3RhdGUgYW5kIGFueSBvYnNlcnZlcnNcbiAgICAgIGlmICghdGhpcy5jb25maWc/Lmhhc01vcmUpIHtcbiAgICAgICAgLy8gQ2xlYXIgbG9hZGluZyBzdGF0ZSB3aGVuIG5vIG1vcmUgcmVzdWx0cywgdW5sZXNzIHBhcmVudCBleHBsaWNpdGx5IHNheXMgc3RpbGwgbG9hZGluZ1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmlzTG9hZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNb3JlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWc/LmlzTG9hZGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIpIHtcbiAgICAgICAgICB0cnkgeyB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOyB9IGNhdGNoIHt9XG4gICAgICAgICAgdGhpcy5sb2FkTW9yZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBJZiBwYW5lbCBpcyBvcGVuIGFuZCBoYXNNb3JlIGlzIHRydWUsIGVuc3VyZSB0aGUgc2VudGluZWwgaXMgYmVpbmcgb2JzZXJ2ZWQuXG4gICAgICBpZiAodGhpcy5zZWxlY3RSZWY/LnBhbmVsT3BlbiAmJiB0aGlzLmNvbmZpZz8uaGFzTW9yZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0dXBMb2FkTW9yZU9ic2VydmVyKCksIDApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ2Zvcm0nIGluIGNoYW5nZXMgJiYgIWNoYW5nZXNbJ2Zvcm0nXS5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYW5lbENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjdGMtc2VsZWN0LXBhbmVsICR7dGhpcy5pc011bHRpcGxlID8gJ211bHRpcGxlJyA6ICcnfSAke3RoaXMuY29uZmlnPy5pc0NvbXBhcmVSdW5zID8gJ2NvbXBhcmUtcnVucy1zZWxlY3QtcGFuZWwnIDogJyd9YC50cmltKCk7XG4gIH1cblxuICBnZXQgaXNNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b0Jvb2xlYW4odGhpcy5jb25maWc/Lm11bHRpcGxlKTtcbiAgfVxuXG4gIGdldCBzaW5nbGVTZWxlY3RlZERpc3BsYXlMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSB8fCB0aGlzLmlzTXVsdGlwbGUpIHJldHVybiAnJztcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLmZvcm0uZ2V0KGtleSk/LnZhbHVlO1xuICAgIGlmIChjb250cm9sVmFsdWUgPT09IG51bGwgfHwgY29udHJvbFZhbHVlID09PSB1bmRlZmluZWQgfHwgY29udHJvbFZhbHVlID09PSAnJykgcmV0dXJuICcnO1xuICAgIGNvbnN0IG1hdGNoZWRPcHRpb24gPSAodGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW10pLmZpbmQoXG4gICAgICAob3B0KSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG9wdCkgPT09IGNvbnRyb2xWYWx1ZSB8fCBTdHJpbmcodGhpcy5nZXRPcHRpb25WYWx1ZShvcHQpKSA9PT0gU3RyaW5nKGNvbnRyb2xWYWx1ZSlcbiAgICApO1xuICAgIGlmIChtYXRjaGVkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKG1hdGNoZWRPcHRpb24ubmFtZSA/PyBtYXRjaGVkT3B0aW9uLmxhYmVsID8/IG1hdGNoZWRPcHRpb24udmFsdWUgPz8gbWF0Y2hlZE9wdGlvbi5pZCA/PyAnJyk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoY29udHJvbFZhbHVlKTtcbiAgfVxuXG4gIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvQm9vbGVhbih0aGlzLmNvbmZpZz8uZGlzYWJsZWQpO1xuICB9XG4gIFxuICBnZXQgdXNlQ2hlY2tib3hTdHlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc011bHRpcGxlICYmICh0aGlzLmNvbmZpZz8ub3B0aW9uU3R5bGUgPT09ICdjaGVja2JveCcpO1xuICB9XG4gIFxuICBnZXQgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY29udHJvbC52YWx1ZSBhcyBhbnlbXTtcbiAgICBjb25zdCBhbGxJZHMgPSB0aGlzLmdldEFsbE9wdGlvbklkcygpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWFsbElkcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gYWxsSWRzLmV2ZXJ5KGlkID0+IHNlbGVjdGVkLmluY2x1ZGVzKGlkKSk7XG4gIH1cblxuICBwcml2YXRlIHRvQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2ID0gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodiA9PT0gJ2ZhbHNlJyB8fCB2ID09PSAnMCcgfHwgdiA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBhbnkgb3RoZXIgbm9uLWVtcHR5IHN0cmluZyB0cmVhdGVkIGFzIHRydXRoeVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSAwO1xuICAgIH1cbiAgICByZXR1cm4gISF2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIGZvciBhbiBvcHRpb24gYmFzZWQgb24gdGhlIHZhbHVlQnkgcHJvcGVydHkuXG4gICAqIElmIHZhbHVlQnkgaXMgcHJvdmlkZWQsIHVzZSB0aGF0IHByb3BlcnR5IGZyb20gdGhlIG9wdGlvbi5cbiAgICogT3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG8gaWQgPz8gdmFsdWUgKGRlZmF1bHQgYmVoYXZpb3IpLlxuICAgKiBNdXN0IGJlIHB1YmxpYyBmb3IgdGVtcGxhdGUgYWNjZXNzLlxuICAgKi9cbiAgZ2V0T3B0aW9uVmFsdWUob3B0OiBTZWxlY3RPcHRpb24pOiBhbnkge1xuICAgIGlmICh0aGlzLmNvbmZpZz8udmFsdWVCeSkge1xuICAgICAgLy8gVXNlIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgdmFsdWVCeVxuICAgICAgcmV0dXJuIChvcHQgYXMgYW55KVt0aGlzLmNvbmZpZy52YWx1ZUJ5XTtcbiAgICB9XG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvcjogdXNlIGlkID8/IHZhbHVlXG4gICAgcmV0dXJuIG9wdC5pZCA/PyBvcHQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU3luYyB0aGUgZm9ybSBjb250cm9sJ3MgZGlzYWJsZWQgc3RhdGUgZnJvbSBjb25maWcuXG4gICAqIFVzZSB0aGUgRm9ybUNvbnRyb2wgQVBJIGluc3RlYWQgb2YgW2Rpc2FibGVkXSBpbiB0aGUgdGVtcGxhdGUgdG8gYXZvaWQgQW5ndWxhcidzXG4gICAqIFwiY2hhbmdlZCBhZnRlciBjaGVja2VkXCIgLyByZWFjdGl2ZSBmb3JtcyBkaXNhYmxlZC1hdHRyaWJ1dGUgd2FybmluZy5cbiAgICovXG4gIHByaXZhdGUgc3luY0Rpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm47XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgICBjb25zdCBzaG91bGREaXNhYmxlID0gdGhpcy50b0Jvb2xlYW4odGhpcy5jb25maWc/LmRpc2FibGVkKTtcbiAgICBpZiAoc2hvdWxkRGlzYWJsZSkge1xuICAgICAgY29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3luY0NvbnRyb2xWYWx1ZUZvck11bHRpcGxlTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBudWxsKSByZXR1cm47XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKFtjdXJyZW50VmFsdWVdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKGN1cnJlbnRWYWx1ZS5sZW5ndGggPyBjdXJyZW50VmFsdWVbMF0gOiBudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLmNvbmZpZz8uc2VsZWN0ZWRWYWx1ZTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIFxuICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdmFsdWUsIGRvbid0IG92ZXJyaWRlIGl0XG4gICAgaWYgKHRoaXMuaGFzRXhpc3RpbmdWYWx1ZShjdXJyZW50VmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBtdWx0aS1zZWxlY3Q6IGlmIGN1cnJlbnRWYWx1ZSBpcyBhbiBlbXB0eSBhcnJheSBbXSwgdGhpcyBpcyBhbiBleHBsaWNpdCB1c2VyIGNob2ljZSB0byBjbGVhclxuICAgIC8vIERvbid0IHJlc3RvcmUgZnJvbSBzZWxlY3RlZFZhbHVlIC0gcmVzcGVjdCB0aGUgdXNlcidzIGRlY2lzaW9uIHRvIGRlc2VsZWN0IGFsbFxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmIGN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IChBcnJheS5pc0FycmF5KHNlbGVjdGVkVmFsdWUpID8gc2VsZWN0ZWRWYWx1ZSA6IFtzZWxlY3RlZFZhbHVlXSkuZmlsdGVyKFxuICAgICAgICAodmFsKSA9PiB2YWwgIT09IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgICBpZiAoIW5vcm1hbGl6ZWQubGVuZ3RoKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRWYWx1ZSlcbiAgICAgICAgPyAoc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPyBzZWxlY3RlZFZhbHVlWzBdIDogdW5kZWZpbmVkKVxuICAgICAgICA6IHNlbGVjdGVkVmFsdWU7XG4gICAgICBpZiAobm9ybWFsaXplZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc0V4aXN0aW5nVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnNvbWUoKHZhbCkgPT4gdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gJycpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzT3B0aW9uU2VsZWN0ZWQob3B0OiBTZWxlY3RPcHRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG9wdCk7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyb2xWYWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBjb250cm9sVmFsdWUuaW5jbHVkZXMob3B0aW9uVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbFZhbHVlID09PSBvcHRpb25WYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsT3B0aW9uSWRzKCk6IGFueVtdIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW107XG4gICAgcmV0dXJuIG9wdGlvbnMubWFwKG8gPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShvKSkuZmlsdGVyKHYgPT4gdiAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9uVG9nZ2xlU2VsZWN0QWxsKHNlbGVjdDogTWF0U2VsZWN0KTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm47XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgICBjb25zdCBhbGxJZHMgPSB0aGlzLmdldEFsbE9wdGlvbklkcygpO1xuICAgIGlmICghYWxsSWRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKFtdLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShhbGxJZHMsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIH1cbiAgICAvLyBLZWVwIHBhbmVsIG9wZW4gZm9yIGNvbnRpbnVlZCBzZWxlY3Rpb25zIGluIG11bHRpLXNlbGVjdFxuICAgIHRyeSB7IHNlbGVjdC5vcGVuKCk7IH0gY2F0Y2gge31cbiAgfVxuXG4gIG9uU2VsZWN0T3BlbmVkQ2hhbmdlKG9wZW5lZDogYm9vbGVhbiwgX3NlbGVjdDogTWF0U2VsZWN0KTogdm9pZCB7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgLy8gRW1pdCBjbGljayBldmVudCB3aGVuIHNlbGVjdCBpcyBvcGVuZWQgKGNsaWNrZWQpXG4gICAgICB0aGlzLnNlbGVjdENsaWNrLmVtaXQoKTtcbiAgICAgIC8vIFJlc2V0IGxvYWRpbmdNb3JlIHdoZW4gb3BlbmluZyBpZiBvcHRpb25zIGFscmVhZHkgZXhpc3QgKGRvbid0IHNob3cgbG9hZGVyIG9uIGluaXRpYWwgb3BlbilcbiAgICAgIGlmICgodGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIHdlIG9ubHkgdHJpZ2dlciBsb2FkLW1vcmUgYWZ0ZXIgYSByZWFsIHVzZXIgc2Nyb2xsXG4gICAgICB0aGlzLmhhc1Njcm9sbGVkU2luY2VPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAvLyBSZXNldCBzZWFyY2ggdGV4dCBvbiBjbG9zZSBzbyB0aGUgbmV4dCBvcGVuIHNob3dzIGZ1bGwgbGlzdFxuICAgICAgaWYgKHRoaXMuY29uZmlnPy5rZXkpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0QnlLZXlbdGhpcy5jb25maWcua2V5XSA9ICcnO1xuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIGFueSBwcmV2aW91cyBjdXN0b20gbGlzdGVuZXJzIGFyZSBjbGVhcmVkIChsZWdhY3kgY29tcGF0aWJpbGl0eSlcbiAgICAgIGlmICh0aGlzLm91dHNpZGVDbGVhbnVwKSB7XG4gICAgICAgIHRoaXMub3V0c2lkZUNsZWFudXAoKTtcbiAgICAgICAgdGhpcy5vdXRzaWRlQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBkb2N1bWVudCBrZXlib2FyZCBsaXN0ZW5lclxuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLmRvY3VtZW50S2V5ZG93bkxpc3RlbmVyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgLy8gRGlzY29ubmVjdCBsb2FkLW1vcmUgb2JzZXJ2ZXIgaWYgYW55XG4gICAgICBpZiAodGhpcy5sb2FkTW9yZU9ic2VydmVyKSB7XG4gICAgICAgIHRyeSB7IHRoaXMubG9hZE1vcmVPYnNlcnZlci5kaXNjb25uZWN0KCk7IH0gY2F0Y2gge31cbiAgICAgICAgdGhpcy5sb2FkTW9yZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIHNjcm9sbCBsaXN0ZW5lciBpZiBhdHRhY2hlZFxuICAgICAgaWYgKHRoaXMucGFuZWxTY3JvbGxFbCkge1xuICAgICAgICB0cnkgeyB0aGlzLnBhbmVsU2Nyb2xsRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblBhbmVsU2Nyb2xsKTsgfSBjYXRjaCB7fVxuICAgICAgICB0aGlzLnBhbmVsU2Nyb2xsRWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICAvLyBSZXNldCBsb2FkLW1vcmUgc3RhdGUgd2hlbiBjbG9zaW5nXG4gICAgICB0aGlzLmxvYWRpbmdNb3JlID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9jdXMgdGhlIHNlYXJjaCBib3ggaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoYWJsZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PignLnRzLXNlbGVjdC1zZWFyY2gtaW5wdXQnKTtcbiAgICAgICAgaW5wdXQ/LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2ZXItc2VhcmNoOiByZXNldCBzZWFyY2ggYW5kIHJlZmV0Y2ggZnVsbCBsaXN0IHdoZW4gcGFuZWwgb3BlbnMgc28gdXNlciBhbHdheXMgc2VlcyBhIGZyZXNoIGxpc3QuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5zZXJ2ZXJTZWFyY2gpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmtleTtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2tleV0gPSAnJztcbiAgICAgIHRyeSB7IHRoaXMuY29uZmlnLm9uU2VhcmNoPy4oJycpOyB9IGNhdGNoIHt9XG4gICAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHsga2V5LCBxdWVyeTogJycgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRvQm9vbGVhbih0aGlzLmNvbmZpZz8uaW5pdGlhbEZldGNoT25PcGVuKSkge1xuICAgICAgLy8gTm9uLXNlcnZlci1zZWFyY2g6IG9wdGlvbmFsIGluaXRpYWwgZmV0Y2ggb24gb3BlbiB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLlxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcua2V5O1xuICAgICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2tleV0gfHwgJyc7XG4gICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vblNlYXJjaD8uKHEpOyB9IGNhdGNoIHt9XG4gICAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3ID0gZmFsc2U7XG4gICAgdGhpcy5oYXNTY3JvbGxlZFNpbmNlT3BlbiA9IGZhbHNlO1xuICAgIC8vIFNldHVwIGluZmluaXRlIHNjcm9sbCBvYnNlcnZlciBvbiBzZW50aW5lbFxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXR1cExvYWRNb3JlT2JzZXJ2ZXIoKSwgMCk7XG4gICAgLy8gQWxzbyBhdHRhY2ggYSBzY3JvbGwgbGlzdGVuZXIgZmFsbGJhY2sgZm9yIHJlbGlhYmxlIGxvYWQtbW9yZSB0cmlnZ2Vyc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFuZWxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWF0LXNlbGVjdC1wYW5lbCcpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgICB0aGlzLnBhbmVsU2Nyb2xsRWwgPSBwYW5lbHMubGVuZ3RoID8gcGFuZWxzW3BhbmVscy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMucGFuZWxTY3JvbGxFbCkge1xuICAgICAgICAgIHRoaXMucGFuZWxTY3JvbGxFbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uUGFuZWxTY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7fVxuICAgIH0sIDApO1xuICAgIFxuICAgIC8vIFNldHVwIGRvY3VtZW50LWxldmVsIGtleWJvYXJkIGxpc3RlbmVyIGZvciBhcnJvdyBrZXkgbmF2aWdhdGlvbiB3aGVuIHNlYXJjaCBpbnB1dCBpcyBub3QgZm9jdXNlZFxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoYWJsZSkge1xuICAgICAgdGhpcy5zZXR1cERvY3VtZW50S2V5ZG93bkxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldID0gdmFsdWUgPz8gJyc7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5zZXJ2ZXJTZWFyY2gpIHtcbiAgICAgIC8vIEZvciBzZXJ2ZXItc2lkZSBzZWFyY2gsIGVtaXQgaW5zdGVhZCBvZiBsb2NhbCBmaWx0ZXJpbmdcbiAgICAgIHRyeSB7IHRoaXMuY29uZmlnLm9uU2VhcmNoPy4odmFsdWUgPz8gJycpOyB9IGNhdGNoIHt9XG4gICAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHsga2V5LCBxdWVyeTogdmFsdWUgPz8gJycgfSk7XG4gICAgICAvLyBSZXNldCBpbnRlcm5hbCBwYWdpbmcgc3RhdGVcbiAgICAgIHRoaXMubG9hZGluZ01vcmUgPSBmYWxzZTtcbiAgICAgIHRoaXMubGFzdE9wdGlvbnNMZW5ndGggPSAodGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW10pLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgb24gdGhlIHNlYXJjaCBpbnB1dCB0byBlbmFibGUgbmF2aWdhdGlvbiB3aXRoIGFycm93IGtleXNcbiAgICogYW5kIHNlbGVjdGlvbiB3aXRoIEVudGVyIGtleSwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgdHlwaW5nIGluIHRoZSBzZWFyY2ggYm94LlxuICAgKi9cbiAgb25TZWFyY2hJbnB1dEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgXG4gICAgLy8gSGFuZGxlIG5hdmlnYXRpb24gYW5kIHNlbGVjdGlvbiBrZXlzXG4gICAgaWYgKGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIFN0b3AgdGhlIGV2ZW50IGNvbXBsZXRlbHkgYmVmb3JlIGRvaW5nIGFueXRoaW5nXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIFxuICAgICAgLy8gTmF2aWdhdGUgaW1tZWRpYXRlbHkgKHN5bmNocm9ub3VzbHkpIHRvIHByZXZlbnQgQW5ndWxhciBNYXRlcmlhbCBmcm9tIHByb2Nlc3NpbmdcbiAgICAgIHRoaXMubmF2aWdhdGVPcHRpb25zKGtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xuICAgICAgXG4gICAgICAvLyBCbHVyIHRoZSBzZWFyY2ggaW5wdXQgYWZ0ZXIgbmF2aWdhdGlvbiB0byBhbGxvdyBzdWJzZXF1ZW50IGFycm93IGtleXMgdG8gd29yayBuYXR1cmFsbHlcbiAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgLy8gVXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBibHVyIGFmdGVyIG91ciBuYXZpZ2F0aW9uIGNvbXBsZXRlc1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlucHV0LmJsdXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmIChrZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBCbHVyIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQuYmx1cigpO1xuICAgICAgfVxuICAgICAgLy8gRmluZCBhbmQgc2VsZWN0IHRoZSBhY3RpdmUgb3B0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXNlbGVjdC1wYW5lbCcpO1xuICAgICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb24gPSBwYW5lbC5xdWVyeVNlbGVjdG9yKCcubWF0LW9wdGlvbi5tYXQtYWN0aXZlOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCknKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xpY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm8gYWN0aXZlIG9wdGlvbiwgdHJ5IHRvIHNlbGVjdCB0aGUgZmlyc3QgZW5hYmxlZCBvcHRpb25cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gcGFuZWwucXVlcnlTZWxlY3RvcignLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKTpub3QoLnRzLXNlbGVjdC1zZWFyY2gpJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RPcHRpb24pIHtcbiAgICAgICAgICAgICAgZmlyc3RPcHRpb24uY2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDEwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIEVzY2FwZSwgYWxsb3cgaXQgdG8gcHJvcGFnYXRlIChtYXQtc2VsZWN0IHdpbGwgY2xvc2UgdGhlIHBhbmVsKVxuICAgIGlmIChrZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBhbGwgb3RoZXIga2V5cyAodHlwaW5nKSwgc3RvcCBwcm9wYWdhdGlvbiB0byBhbGxvdyBzZWFyY2ggaW5wdXQgdG8gd29yayBub3JtYWxseVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IG5hdmlnYXRlcyB0aHJvdWdoIG9wdGlvbnMgd2hlbiBhcnJvdyBrZXlzIGFyZSBwcmVzc2VkIGZyb20gc2VhcmNoIGlucHV0LlxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIDEgZm9yIGRvd24sIC0xIGZvciB1cFxuICAgKi9cbiAgcHJpdmF0ZSBuYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uOiAxIHwgLTEpOiB2b2lkIHtcbiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXQtc2VsZWN0LXBhbmVsJyk7XG4gICAgaWYgKCFwYW5lbCkgcmV0dXJuO1xuXG4gICAgLy8gR2V0IGFsbCBlbmFibGVkLCBub24tZGlzYWJsZWQgb3B0aW9ucyAoZXhjbHVkaW5nIHNlYXJjaCBpbnB1dClcbiAgICBjb25zdCBhbGxPcHRpb25zID0gQXJyYXkuZnJvbShcbiAgICAgIHBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCk6bm90KC50cy1zZWxlY3Qtc2VhcmNoKScpXG4gICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gICAgaWYgKGFsbE9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBGaW5kIGN1cnJlbnRseSBhY3RpdmUgb3B0aW9uXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGFsbE9wdGlvbnMuZmluZEluZGV4KG9wdCA9PiBvcHQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtYWN0aXZlJykpO1xuXG4gICAgLy8gSWYgbm8gYWN0aXZlIG9wdGlvbiwgc3RhcnQgYXQgdGhlIGZpcnN0IG9uZSAoZm9yIGRvd24pIG9yIGxhc3Qgb25lIChmb3IgdXApXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgIGN1cnJlbnRJbmRleCA9IGRpcmVjdGlvbiA9PT0gMSA/IC0xIDogYWxsT3B0aW9ucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIG5leHQgaW5kZXhcbiAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyBkaXJlY3Rpb247XG5cbiAgICAvLyBCb3VuZHMgY2hlY2tcbiAgICBpZiAobmV4dEluZGV4IDwgMCB8fCBuZXh0SW5kZXggPj0gYWxsT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYWN0aXZlIGNsYXNzIGZyb20gYWxsIG9wdGlvbnNcbiAgICBhbGxPcHRpb25zLmZvckVhY2gob3B0ID0+IG9wdC5jbGFzc0xpc3QucmVtb3ZlKCdtYXQtYWN0aXZlJykpO1xuXG4gICAgLy8gQWRkIGFjdGl2ZSBjbGFzcyB0byB0aGUgdGFyZ2V0IG9wdGlvblxuICAgIGNvbnN0IHRhcmdldE9wdGlvbiA9IGFsbE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICB0YXJnZXRPcHRpb24uY2xhc3NMaXN0LmFkZCgnbWF0LWFjdGl2ZScpO1xuICAgIFxuICAgIC8vIFNjcm9sbCB0aGUgb3B0aW9uIGludG8gdmlldyBpZiBuZWVkZWRcbiAgICB0YXJnZXRPcHRpb24uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgXG4gICAgLy8gRm9jdXMgdGhlIG9wdGlvbiBzbyBBbmd1bGFyIE1hdGVyaWFsJ3Mga2V5Ym9hcmQgbWFuYWdlciBjYW4gaGFuZGxlIHN1YnNlcXVlbnQgYXJyb3cga2V5c1xuICAgIC8vIEZvY3VzaW5nIGFuIG9wdGlvbiBkb2Vzbid0IHRyaWdnZXIgc2VsZWN0aW9uIGluIEFuZ3VsYXIgTWF0ZXJpYWwgLSBvbmx5IGNsaWNrL0VudGVyIGRvZXNcbiAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgdGhlIERPTSBpcyB1cGRhdGVkIGZpcnN0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0YXJnZXRPcHRpb24uZm9jdXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uIGlkcyBmb3IgdGhlIGNvbmZpZ3VyZWQgY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJZHNGb3JLZXkoa2V5OiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKCFjb250cm9sKSByZXR1cm4gW107XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsID8gW3ZhbHVlXSA6IFtdO1xuICB9XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgY2xvc2UgdGhlIHNlbGVjdCBwYW5lbCBpZiBvcGVuICovXG4gIHB1YmxpYyBjbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbGVjdFJlZj8uY2xvc2UoKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBmaWx0ZXJlZE9wdGlvbnMoYzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnKTogU2VsZWN0T3B0aW9uW10ge1xuICAgIGNvbnN0IHQgPSAodGhpcy5zZWFyY2hUZXh0QnlLZXlbYy5rZXldIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAvLyBJbiBzZXJ2ZXItc2lkZSBtb2RlLCByZXR1cm4gb3B0aW9ucyBhcy1pcyAocGFyZW50IHByb3ZpZGVzIGxpc3QpXG4gICAgaWYgKGMuc2VydmVyU2VhcmNoKSByZXR1cm4gYy5vcHRpb25zIHx8IFtdO1xuICAgIC8vIFdoZW4gbm90IHNlYXJjaGluZywgcmV0dXJuIGZ1bGwgbGlzdCB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBvcmRlcmluZ1xuICAgIGlmICghdCkgcmV0dXJuIGMub3B0aW9ucyB8fCBbXTtcblxuICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBjLm9wdGlvbnMgfHwgW107XG4gICAgY29uc3QgYmFzZUZpbHRlcmVkID0gYWxsT3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IFN0cmluZyhvcHQubmFtZSA/PyBvcHQubGFiZWwgPz8gb3B0LnZhbHVlID8/ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHRleHQuaW5jbHVkZXModCk7XG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbihzKSBhcmUgYWx3YXlzIHZpc2libGUgd2hpbGUgc2VhcmNoaW5nXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzRm9yS2V5KGMua2V5KTtcbiAgICBpZiAoIXNlbGVjdGVkSWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhc2VGaWx0ZXJlZDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZU9mID0gKG86IFNlbGVjdE9wdGlvbikgPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShvKTtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcihvID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKHZhbHVlT2YobykpKTtcblxuICAgIC8vIE1lcmdlIHNlbGVjdGVkIG9wdGlvbnMgKGtlZXBpbmcgdGhlaXIgb3JpZ2luYWwgb3JkZXIpIHdpdGggZmlsdGVyZWQgb25lcywgZGUtZHVwbGljYXRlZFxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBjb25zdCBtZXJnZWQ6IFNlbGVjdE9wdGlvbltdID0gW107XG4gICAgZm9yIChjb25zdCBvIG9mIHNlbGVjdGVkT3B0aW9ucykge1xuICAgICAgY29uc3QgdmFsID0gdmFsdWVPZihvKTtcbiAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICBpZiAoIXNlZW4uaGFzKHZhbCkpIHtcbiAgICAgICAgc2Vlbi5hZGQodmFsKTtcbiAgICAgICAgbWVyZ2VkLnB1c2gobyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgbyBvZiBiYXNlRmlsdGVyZWQpIHtcbiAgICAgIGNvbnN0IHZhbCA9IHZhbHVlT2Yobyk7XG4gICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFzZWVuLmhhcyh2YWwpKSB7XG4gICAgICAgIHNlZW4uYWRkKHZhbCk7XG4gICAgICAgIG1lcmdlZC5wdXNoKG8pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgLyoqIFdoZW4gYWxsb3dDdXN0b21WYWx1ZSBpcyB0cnVlIGFuZCB0aGUgdXNlciBoYXMgdHlwZWQgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbiBvcHRpb25zLCByZXR1cm5zIHRoYXQgdmFsdWUgZm9yIHRoZSBcIkFkZFwiIG9wdGlvbi4gKi9cbiAgZ2V0IGN1c3RvbVZhbHVlVG9BZGQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgYyA9IHRoaXMuY29uZmlnO1xuICAgIGlmICghYz8ua2V5IHx8ICF0aGlzLnRvQm9vbGVhbihjLnNlYXJjaGFibGUpIHx8ICF0aGlzLnRvQm9vbGVhbihjLmFsbG93Q3VzdG9tVmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0ID0gKHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2Mua2V5XSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgb3B0cyA9IGMub3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBsb3dlciA9IHQudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gb3B0cy5zb21lKChvKSA9PiB7XG4gICAgICBjb25zdCB2ID0gU3RyaW5nKG8ubmFtZSA/PyBvLmxhYmVsID8/IG8udmFsdWUgPz8gby5pZCA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiB2ID09PSBsb3dlcjtcbiAgICB9KTtcbiAgICByZXR1cm4gYWxyZWFkeUV4aXN0cyA/IG51bGwgOiB0O1xuICB9XG5cbiAgZ2V0IHNob3dBZGRDdXN0b21PcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVUb0FkZCAhPT0gbnVsbDtcbiAgfVxuXG4gIGdldCBhZGRDdXN0b21TZW50aW5lbFZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdiA9IHRoaXMuY3VzdG9tVmFsdWVUb0FkZDtcbiAgICByZXR1cm4gdiAhPSBudWxsID8gYCR7dGhpcy5BRERfQ1VTVE9NX1ZBTFVFX1BSRUZJWH0ke3Z9YCA6ICcnO1xuICB9XG5cbiAgLy8gQ2xvc2Ugd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgaWYgcmVxdWVzdGVkLiBBbHdheXMgY2xvc2UgZm9yIHNpbmdsZS1zZWxlY3QuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UsIHNlbGVjdDogTWF0U2VsZWN0KTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGFkZC1jdXN0b20tdmFsdWUgc2VudGluZWwgKGFsbG93Q3VzdG9tVmFsdWUpXG4gICAgY29uc3QgcmF3ID0gZXZlbnQudmFsdWU7XG4gICAgY29uc3Qgc2VudGluZWxJbkFycmF5ID0gQXJyYXkuaXNBcnJheShyYXcpXG4gICAgICA/IHJhdy5maW5kKCh2OiBhbnkpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LnN0YXJ0c1dpdGgodGhpcy5BRERfQ1VTVE9NX1ZBTFVFX1BSRUZJWCkpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgaXNBZGRDdXN0b20gPVxuICAgICAgKHR5cGVvZiByYXcgPT09ICdzdHJpbmcnICYmIHJhdy5zdGFydHNXaXRoKHRoaXMuQUREX0NVU1RPTV9WQUxVRV9QUkVGSVgpKSB8fCBzZW50aW5lbEluQXJyYXkgIT0gbnVsbDtcblxuICAgIGlmIChpc0FkZEN1c3RvbSkge1xuICAgICAgY29uc3Qgc2VudGluZWxTdHIgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IHJhdyA6IHNlbnRpbmVsSW5BcnJheTtcbiAgICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKHNlbnRpbmVsU3RyKS5zbGljZSh0aGlzLkFERF9DVVNUT01fVkFMVUVfUFJFRklYLmxlbmd0aCk7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgICAgaWYgKGtleSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlICYmIEFycmF5LmlzQXJyYXkoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gKGNvbnRyb2wudmFsdWUgYXMgYW55W10pLmZpbHRlcihcbiAgICAgICAgICAgICAgKHY6IGFueSkgPT4gdHlwZW9mIHYgIT09ICdzdHJpbmcnIHx8ICF2LnN0YXJ0c1dpdGgodGhpcy5BRERfQ1VTVE9NX1ZBTFVFX1BSRUZJWClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKGZpbHRlcmVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5hZGRDdXN0b21WYWx1ZS5lbWl0KHsga2V5OiBrZXkgPz8gJycsIHZhbHVlIH0pO1xuICAgICAgaWYgKHRoaXMuY29uZmlnPy5zZWFyY2hhYmxlICYmIHRoaXMuY29uZmlnPy5rZXkpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0QnlLZXlbdGhpcy5jb25maWcua2V5XSA9ICcnO1xuICAgICAgfVxuICAgICAgdHJ5IHsgc2VsZWN0LmNsb3NlKCk7IH0gY2F0Y2gge31cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSGFuZGxlIHNlbGVjdC1hbGwgc2VudGluZWwgaW4gbXVsdGktc2VsZWN0XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KGV2ZW50LnZhbHVlKSAmJiBldmVudC52YWx1ZS5pbmNsdWRlcyh0aGlzLlNFTEVDVF9BTExfVkFMVUUpKSB7XG4gICAgICAvLyBSZW1vdmUgc2VudGluZWwgYW5kIHRvZ2dsZSBhbGxcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgICBpZiAoa2V5ICYmIHRoaXMuZm9ybSkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgICAgICAvLyBUb2dnbGUgYmFzZWQgb24gY3VycmVudCBzdGF0ZVxuICAgICAgICB0aGlzLm9uVG9nZ2xlU2VsZWN0QWxsKHNlbGVjdCk7XG4gICAgICAgIC8vIEVuc3VyZSBzZW50aW5lbCBpcyBub3QgcHJlc2VudFxuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gKGNvbnRyb2wudmFsdWUgYXMgYW55W10pLmZpbHRlcih2ID0+IHYgIT09IHRoaXMuU0VMRUNUX0FMTF9WQUxVRSk7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmaWx0ZXJlZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBEbyBub3QgcHJvY2VlZCB3aXRoIG5vcm1hbCBjbG9zZSBsb2dpYyBmb3Igc2VsZWN0LWFsbFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBMZXQgQW5ndWxhciBNYXRlcmlhbCBhdXRvLWNsb3NlIGZvciBzaW5nbGUtc2VsZWN0LlxuICAgIC8vIEZvciBtdWx0aS1zZWxlY3QsIGNsb3NlIG9ubHkgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQuXG4gICAgY29uc3Qgc2hvdWxkQ2xvc2UgPSB0aGlzLmlzTXVsdGlwbGUgPyAhIXRoaXMuY29uZmlnPy5jbG9zZU9uU2VsZWN0IDogZmFsc2U7XG4gICAgaWYgKHNob3VsZENsb3NlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3QuY2xvc2UoKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gICAgLy8gSWYgc2VhcmNoYWJsZSwgY2xlYXIgdGhlIHNlYXJjaCBhZnRlciBzZWxlY3Rpb24gc28gcmVvcGVuaW5nIHdvcmtzIHByZWRpY3RhYmx5XG4gICAgaWYgKHRoaXMuY29uZmlnPy5zZWFyY2hhYmxlICYmIHRoaXMuY29uZmlnPy5rZXkpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJ5S2V5W3RoaXMuY29uZmlnLmtleV0gPSAnJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnPy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jb25maWcub25DaGFuZ2UoZXZlbnQudmFsdWUsIGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2NxYS1keW5hbWljLXNlbGVjdCBvbkNoYW5nZSBoYW5kbGVyIGVycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgIGtleTogdGhpcy5jb25maWc/LmtleSxcbiAgICAgIHZhbHVlOiBldmVudC52YWx1ZSxcbiAgICAgIGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBoYW5kbGVEb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2xvc2Ugd2hlbiBjbGlja2luZyBvdXRzaWRlIG9mIHRoZSB0cmlnZ2VyIGFuZCBvdXRzaWRlIG9mIHRoZSBvcGVuIHBhbmVsXG4gICAgaWYgKCF0aGlzLnNlbGVjdFJlZj8ucGFuZWxPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICAvLyBJZiBjbGljayBpcyBpbnNpZGUgdGhlIGNvbXBvbmVudCBob3N0LCBpZ25vcmVcbiAgICBpZiAodGhpcy5ob3N0RWw/Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIElmIGNsaWNrIGlzIGluc2lkZSBhbnkgb3BlbiBtYXQtc2VsZWN0IHBhbmVsLCBpZ25vcmVcbiAgICBjb25zdCBwYW5lbEVscyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1zZWxlY3QtcGFuZWwnKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBjb25zdCBjbGlja0luc2lkZVBhbmVsID0gcGFuZWxFbHMuc29tZSgoZWwpID0+IGVsLmNvbnRhaW5zKHRhcmdldCkpO1xuICAgIGlmIChjbGlja0luc2lkZVBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbGVjdFJlZi5jbG9zZSgpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRleHQgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgaGlnaGxpZ2h0UGF0dGVybi5cbiAgICogUmV0dXJucyBIVE1MIHN0cmluZyB3aXRoIGhpZ2hsaWdodGVkIHBvcnRpb25zIHdyYXBwZWQgaW4gPHNwYW4gY2xhc3M9XCJoaWdobGlnaHRcIj4uXG4gICAqL1xuICBoaWdobGlnaHRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0IHx8ICF0aGlzLmNvbmZpZz8uaGlnaGxpZ2h0UGF0dGVybikge1xuICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5jb25maWcuaGlnaGxpZ2h0UGF0dGVybjtcblxuICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbiwgdXNlIGl0IGRpcmVjdGx5XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcGF0dGVybih0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHN0cmluZyBwYXR0ZXJuIHRvIFJlZ0V4cCBpZiBuZWVkZWRcbiAgICBsZXQgcmVnZXg6IFJlZ0V4cDtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2dpJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBoaWdobGlnaHQgcGF0dGVybjonLCBwYXR0ZXJuKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVnZXggPSBwYXR0ZXJuO1xuICAgIH1cblxuICAgIC8vIEVzY2FwZSBIVE1MIGZpcnN0LCB0aGVuIGFwcGx5IGhpZ2hsaWdodGluZ1xuICAgIGNvbnN0IGVzY2FwZWQgPSB0aGlzLmVzY2FwZUh0bWwodGV4dCk7XG4gICAgcmV0dXJuIGVzY2FwZWQucmVwbGFjZShyZWdleCwgKG1hdGNoKSA9PiBgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1wcmltYXJ5XCI+JHttYXRjaH08L3NwYW4+YCk7XG4gIH1cblxuICAvKipcbiAgICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyB0byBwcmV2ZW50IFhTUy5cbiAgICovXG4gIHByaXZhdGUgZXNjYXBlSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGhpZ2hsaWdodGluZyBpcyBlbmFibGVkIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGdldCBoYXNIaWdobGlnaHRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb25maWc/LmhpZ2hsaWdodFBhdHRlcm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBhIGRvY3VtZW50LWxldmVsIGtleWJvYXJkIGxpc3RlbmVyIHRvIGhhbmRsZSBhcnJvdyBrZXkgbmF2aWdhdGlvblxuICAgKiB3aGVuIHRoZSBwYW5lbCBpcyBvcGVuIGFuZCB0aGUgc2VhcmNoIGlucHV0IGlzIG5vdCBmb2N1c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cERvY3VtZW50S2V5ZG93bkxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRvY3VtZW50S2V5ZG93bkxpc3RlbmVyKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5kb2N1bWVudEtleWRvd25MaXN0ZW5lcik7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIC8vIE9ubHkgaGFuZGxlIGlmIHBhbmVsIGlzIG9wZW5cbiAgICAgIGlmICghdGhpcy5zZWxlY3RSZWY/LnBhbmVsT3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE9ubHkgaGFuZGxlIGFycm93IGtleXMgYW5kIEVudGVyXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnQXJyb3dVcCcgJiYgZXZlbnQua2V5ICE9PSAnQXJyb3dEb3duJyAmJiBldmVudC5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBEb24ndCBoYW5kbGUgaWYgdGhlIHNlYXJjaCBpbnB1dCBpcyBmb2N1c2VkIChpdCBoYXMgaXRzIG93biBoYW5kbGVyKVxuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndHMtc2VsZWN0LXNlYXJjaC1pbnB1dCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRG9uJ3QgaGFuZGxlIGlmIHVzZXIgaXMgdHlwaW5nIGluIGFub3RoZXIgaW5wdXRcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIChhY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBldmVudCBpcyByZWxhdGVkIHRvIG91ciBzZWxlY3QgcGFuZWxcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwnKTtcbiAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBPbmx5IGhhbmRsZSBpZiB0aGUgZXZlbnQgdGFyZ2V0IGlzIHdpdGhpbiBvdXIgY29tcG9uZW50IG9yIHRoZSBwYW5lbFxuICAgICAgY29uc3QgaXNJbk91ckNvbXBvbmVudCA9IHRoaXMuaG9zdEVsPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyh0YXJnZXQpIHx8IHBhbmVsLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgICBpZiAoIWlzSW5PdXJDb21wb25lbnQgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5ICYmIHRhcmdldCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIGFycm93IGtleXMgZm9yIG5hdmlnYXRpb25cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGFuIG9wdGlvbiBpcyBjdXJyZW50bHkgZm9jdXNlZCAtIGlmIHNvLCBsZXQgQW5ndWxhciBNYXRlcmlhbCBoYW5kbGUgaXRcbiAgICAgICAgY29uc3QgZm9jdXNlZE9wdGlvbiA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJy5tYXQtb3B0aW9uOmZvY3VzJyk7XG4gICAgICAgIGlmIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgICAgLy8gTGV0IEFuZ3VsYXIgTWF0ZXJpYWwgaGFuZGxlIGl0IG5hdHVyYWxseSB3aGVuIGFuIG9wdGlvbiBpcyBmb2N1c2VkXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBPbmx5IGludGVyY2VwdCB3aGVuIG5vIG9wdGlvbiBpcyBmb2N1c2VkIChlLmcuLCBhZnRlciBibHVycmluZyBzZWFyY2ggaW5wdXQpXG4gICAgICAgIC8vIFN0b3AgdGhlIGV2ZW50IGNvbXBsZXRlbHkgdG8gcHJldmVudCBBbmd1bGFyIE1hdGVyaWFsIGZyb20gYWxzbyBwcm9jZXNzaW5nIGl0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZU9wdGlvbnMoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIEVudGVyIGZvciBzZWxlY3Rpb25cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb24gPSBwYW5lbC5xdWVyeVNlbGVjdG9yKCcubWF0LW9wdGlvbi5tYXQtYWN0aXZlOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCknKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cExvYWRNb3JlT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gT25seSBpZiBjb25zdW1lciBpbmRpY2F0ZXMgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZVxuICAgIGlmICghdGhpcy5jb25maWc/Lmhhc01vcmUpIHJldHVybjtcbiAgICAvLyBGaW5kIHNlbnRpbmVsIG9wdGlvbiByZW5kZXJlZCBpbiB0aGUgb3BlbiBwYW5lbFxuICAgIGNvbnN0IHNlbnRpbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubG9hZC1tb3JlLXNlbnRpbmVsJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghc2VudGluZWwpIHJldHVybjtcbiAgICBpZiAodGhpcy5sb2FkTW9yZU9ic2VydmVyKSB7XG4gICAgICB0cnkgeyB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOyB9IGNhdGNoIHt9XG4gICAgICB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgc2VudGluZWwncyBjbG9zZXN0IHBhbmVsIGFzIHRoZSByb290IHRvIGF2b2lkIHBpY2tpbmcgYSB3cm9uZyBwYW5lbFxuICAgIGNvbnN0IHBhbmVsUm9vdCA9IHNlbnRpbmVsLmNsb3Nlc3QoJy5tYXQtc2VsZWN0LXBhbmVsJykgYXMgRWxlbWVudCB8IG51bGw7XG4gICAgdGhpcy5sb2FkTW9yZU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgLy8gT25seSB0cmlnZ2VyIHdoZW4gc2VudGluZWwganVzdCBjYW1lIGludG8gdmlldyAodXNlciBzY3JvbGxlZCB0byBib3R0b20pLlxuICAgICAgICAgIC8vIElmIGl0IHdhcyBhbHJlYWR5IGluIHZpZXcgKGUuZy4gYWZ0ZXIgbmV3IGRhdGEgYXBwZW5kZWQpLCBkbyBub3QgdHJpZ2dlciBhZ2Fpbi5cbiAgICAgICAgICBjb25zdCB3YXNPdXRPZlZpZXcgPSAhdGhpcy5zZW50aW5lbEN1cnJlbnRseUluVmlldztcbiAgICAgICAgICB0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3ID0gdHJ1ZTtcbiAgICAgICAgICBpZiAod2FzT3V0T2ZWaWV3ICYmIHRoaXMuaGFzU2Nyb2xsZWRTaW5jZU9wZW4gJiYgIXRoaXMubG9hZGluZ01vcmUgJiYgdGhpcy5jb25maWc/Lmhhc01vcmUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ01vcmUgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldIHx8ICcnO1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgICAgICAgIHRyeSB7IHRoaXMuY29uZmlnLm9uTG9hZE1vcmU/LihxKTsgfSBjYXRjaCB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZW50aW5lbCBsZWZ0IHZpZXcgKHVzZXIgc2Nyb2xsZWQgdXApIOKAkyBhbGxvdyBuZXh0IGxvYWQgbW9yZSB3aGVuIHRoZXkgc2Nyb2xsIGRvd24gYWdhaW5cbiAgICAgICAgICB0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7IHJvb3Q6IHBhbmVsUm9vdCwgdGhyZXNob2xkOiAwLjEgfSk7XG4gICAgdHJ5IHsgdGhpcy5sb2FkTW9yZU9ic2VydmVyLm9ic2VydmUoc2VudGluZWwpOyB9IGNhdGNoIHt9XG4gIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3RcIj5cbiAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8bGFiZWwgKm5nSWY9XCJjb25maWcubGFiZWxcIlxuICAgICAgY2xhc3M9XCJmb3JtLWxhYmVsIGNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1ibG9jayBjcWEtbGVhZGluZy1bMS40XSBjcWEtbWItMlwiPnt7XG4gICAgICBjb25maWcubGFiZWwgfX08L2xhYmVsPlxuICAgIDxtYXQtZm9ybS1maWVsZCAjaG9zdCBjbGFzcz1cIm1hdC1zZWxlY3QtY3VzdG9tIGNxYS13LWZ1bGxcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgPG1hdC1zZWxlY3QgI3NlbGVjdFJlZj1cIm1hdFNlbGVjdFwiIFtwbGFjZWhvbGRlcl09XCJkaXNwbGF5UGxhY2Vob2xkZXJcIiBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiXG4gICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmcgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29uZmlnLmtleVwiXG4gICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib25TZWxlY3RPcGVuZWRDaGFuZ2UoJGV2ZW50LCBzZWxlY3RSZWYpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQsIHNlbGVjdFJlZilcIj5cbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cIiFpc011bHRpcGxlICYmIHNpbmdsZVNlbGVjdGVkRGlzcGxheUxhYmVsXCI+XG4gICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJzaW5nbGVTZWxlY3RlZERpc3BsYXlMYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJjb25maWcuc2VhcmNoYWJsZVwiIGNsYXNzPVwidHMtc2VsZWN0LXNlYXJjaFwiIGRpc2FibGVkPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRzLXNlbGVjdC1zZWFyY2gtaW5wdXQgY3FhLXRleHQtYmxhY2stMTAwXCIgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwic2VhcmNoVGV4dEJ5S2V5W2NvbmZpZy5rZXldIHx8ICcnXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblNlYXJjaElucHV0S2V5ZG93bigkZXZlbnQpXCIgKGlucHV0KT1cIm9uU2VhcmNoKGNvbmZpZy5rZXksICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgLz5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICBcbiAgICAgICAgPG1hdC1vcHRpb24gW25nQ2xhc3NdPVwieydjaGVja21hcmsnOiBjb25maWcub3B0aW9uU3R5bGUgPT09ICdjaGVja21hcmsnLCdjaGVja2JveCc6IGNvbmZpZy5vcHRpb25TdHlsZSAhPT0gJ2NoZWNrbWFyaycsJ21hdC1zZWxlY3RlZCc6IGFsbFNlbGVjdGVkfVwiIFtjbGFzc109XCJjb25maWcub3B0aW9uU3R5bGUgPT0gJ2NoZWNrbWFyaycgPyAnY2hlY2ttYXJrJyA6ICdjaGVja2JveCdcIiAqbmdJZj1cImlzTXVsdGlwbGUgJiYgY29uZmlnLnNob3dTZWxlY3RBbGxcIiBbdmFsdWVdPVwiU0VMRUNUX0FMTF9WQUxVRVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIHNlbGVjdEFsbERlZmF1bHRUcGxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS13LTQgY3FhLWgtNCBjcWEtZmxleC1zaHJpbmstMCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNEMUQ1REJdIGNxYS1tci0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImFsbFNlbGVjdGVkID8geydiYWNrZ3JvdW5kLWNvbG9yJzonIzRGNDZFNScsJ2JvcmRlci1jb2xvcic6JyM0RjQ2RTUnfSA6IHt9XCI+XG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFsbFNlbGVjdGVkXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbWluLXctMFwiPnt7IGNvbmZpZy5zZWxlY3RBbGxMYWJlbCB8fCAnQWxsJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdEFsbERlZmF1bHRUcGw+XG4gICAgICAgICAgICB7eyBjb25maWcuc2VsZWN0QWxsTGFiZWwgfHwgJ0FsbCcgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJzaG93QWRkQ3VzdG9tT3B0aW9uXCIgW3ZhbHVlXT1cImFkZEN1c3RvbVNlbnRpbmVsVmFsdWVcIiBjbGFzcz1cImNxYS10ZXh0LXByaW1hcnlcIj5cbiAgICAgICAgICBOZXdcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgIDxtYXQtb3B0aW9uIFtjbGFzc109XCJjb25maWcub3B0aW9uU3R5bGUgPT0gJ2NoZWNrbWFyaycgPyAnY2hlY2ttYXJrJyA6ICdjaGVja2JveCdcIiAqbmdGb3I9XCJsZXQgb3B0IG9mIGZpbHRlcmVkT3B0aW9ucyhjb25maWcpXCIgW3ZhbHVlXT1cImdldE9wdGlvblZhbHVlKG9wdClcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmlzQ29tcGFyZVJ1bnNcIj4gICBcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIGNvbXBhcmVSdW5zRGVmYXVsdE9wdGlvblRwbFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtdy1mdWxsIGNxYS1jb21wYXJlLXJ1bnMtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdy00IGNxYS1oLTQgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXJvdW5kZWQtWzRweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRDFENURCXSBjcWEtbXItMiBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtYm9yZGVyLXNvbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiaXNPcHRpb25TZWxlY3RlZChvcHQpID8geydiYWNrZ3JvdW5kLWNvbG9yJzonIzRGNDZFNScsJ2JvcmRlci1jb2xvcic6JyM0RjQ2RTUnfSA6IHt9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc09wdGlvblNlbGVjdGVkKG9wdClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtbWluLXctMCBjcWEtY29tcGFyZS1ydW5zXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNIaWdobGlnaHRpbmdcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhpZ2hsaWdodFRleHQob3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSlcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0hpZ2hsaWdodGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLWNvbXBhcmUtcnVuc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHQucnVuTnVtYmVyTGFiZWwgJiYgb3B0LnJ1bkRhdGVMYWJlbDsgZWxzZSBjaGVja2JveERlZmF1bHRMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJvcHQuc3RhdHVzQ29sb3IgfHwgbnVsbFwiPnt7IG9wdC5ydW5OdW1iZXJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXVwiPiB7eyBvcHQucnVuRGF0ZUxhYmVsIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hEZWZhdWx0TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLWNvbXBhcmUtcnVuc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0LmR1cmF0aW9uRm9ybWF0dGVkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1zdGFydCBjcWEtZ2FwLTEgY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtZmxleC1zaHJpbmstMCBjcWEtd2hpdGVzcGFjZS1ub3dyYXAgY3FhLW1heC13LVs4MHB4XVwiIFxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnY3FhLW1pbi13LVs4MnB4XSc6IG9wdD8uaGFzSG91clJ1bixcbiAgICAgICAgICAgICAgICAgICAgJ2NxYS1taW4tdy1bNjZweF0nOiAhb3B0Py5oYXNIb3VyUnVuICYmIG9wdD8uaGFzTWludXRlUnVuLFxuICAgICAgICAgICAgICAgICAgICAnY3FhLW1pbi13LVs0MHB4XSc6ICFvcHQ/Lmhhc0hvdXJSdW4gJiYgIW9wdD8uaGFzTWludXRlUnVuXG4gICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLW1pbi13LVsxMnB4XSBjcWEtbWF4LXctWzEycHhdXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiNlwiIHI9XCI0LjVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMVwiLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDMuNVY2TDcuNSA3XCIgc3Ryb2tlPVwiIzRCNTU2M1wiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdC5kdXJhdGlvbkZvcm1hdHRlZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb21wYXJlUnVuc0RlZmF1bHRPcHRpb25UcGw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWNvbXBhcmUtcnVucy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLWNvbXBhcmUtcnVuc1wiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0hpZ2hsaWdodGluZ1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzSGlnaGxpZ2h0aW5nXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS1jb21wYXJlLXJ1bnNcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdC5ydW5OdW1iZXJMYWJlbCAmJiBvcHQucnVuRGF0ZUxhYmVsOyBlbHNlIGRlZmF1bHRMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIj57eyBvcHQucnVuTnVtYmVyTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdXCI+IHt7IG9wdC5ydW5EYXRlTGFiZWwgfX0mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS1jb21wYXJlLXJ1bnNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJvcHQuc3RhdHVzQ29sb3IgfHwgbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHQuZHVyYXRpb25Gb3JtYXR0ZWRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1nYXAtMSBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2QjcyODBdIGNxYS1mbGV4LXNocmluay0wIGNxYS13aGl0ZXNwYWNlLW5vd3JhcCBjcWEtbWF4LXctWzgwcHhdXCIgXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdjcWEtbWluLXctWzgycHhdJzogb3B0Py5oYXNIb3VyUnVuLFxuICAgICAgICAgICAgICAgICAgICAnY3FhLW1pbi13LVs2NnB4XSc6ICFvcHQ/Lmhhc0hvdXJSdW4gJiYgb3B0Py5oYXNNaW51dGVSdW4sXG4gICAgICAgICAgICAgICAgICAgICdjcWEtbWluLXctWzQwcHhdJzogIW9wdD8uaGFzSG91clJ1biAmJiAhb3B0Py5oYXNNaW51dGVSdW5cbiAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtbWluLXctWzEycHhdIGNxYS1tYXgtdy1bMTJweF1cIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCI2XCIgcj1cIjQuNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIxXCIvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMy41VjZMNy41IDdcIiBzdHJva2U9XCIjNEI1NTYzXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgb3B0LmR1cmF0aW9uRm9ybWF0dGVkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbmZpZy5pc0NvbXBhcmVSdW5zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlQ2hlY2tib3hTdHlsZTsgZWxzZSBkZWZhdWx0T3B0aW9uVHBsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXctNCBjcWEtaC00IGNxYS1mbGV4LXNocmluay0wIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0QxRDVEQl0gY3FhLW1yLTIgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWJvcmRlci1zb2xpZFwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJpc09wdGlvblNlbGVjdGVkKG9wdCkgPyB7J2JhY2tncm91bmQtY29sb3InOicjNEY0NkU1JywnYm9yZGVyLWNvbG9yJzonIzRGNDZFNSd9IDoge31cIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc09wdGlvblNlbGVjdGVkKG9wdClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgM0w0LjUgOC41TDIgNlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gV2hlbiBkaXNwbGF5TGFiZWxBc0lubmVySHRtbCBpcyB0cnVlLCByZW5kZXIgbGFiZWwgYXMgcmF3IEhUTUwgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbWluLXctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWc/LmRpc3BsYXlMYWJlbEFzSW5uZXJIdG1sXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm9wdC5sYWJlbCA/PyBvcHQubmFtZSA/PyBvcHQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLSBPdGhlcndpc2UgdXNlIG5vcm1hbC9oaWdobGlnaHRlZCB0ZXh0IHJlbmRlcmluZyAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1taW4tdy0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb25maWc/LmRpc3BsYXlMYWJlbEFzSW5uZXJIdG1sICYmIGhhc0hpZ2hsaWdodGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW1pbi13LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbmZpZz8uZGlzcGxheUxhYmVsQXNJbm5lckh0bWwgJiYgIWhhc0hpZ2hsaWdodGluZ1wiPlxuICAgICAgICAgICAgICAgICAge3sgb3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcHRpb25UcGw+XG4gICAgICAgICAgICAgIDwhLS0gV2hlbiBkaXNwbGF5TGFiZWxBc0lubmVySHRtbCBpcyB0cnVlLCByZW5kZXIgbGFiZWwgYXMgcmF3IEhUTUwgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnPy5kaXNwbGF5TGFiZWxBc0lubmVySHRtbFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwib3B0LmxhYmVsID8/IG9wdC5uYW1lID8/IG9wdC52YWx1ZVwiPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwhLS0gT3RoZXJ3aXNlIHVzZSBub3JtYWwvaGlnaGxpZ2h0ZWQgdGV4dCByZW5kZXJpbmcgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbmZpZz8uZGlzcGxheUxhYmVsQXNJbm5lckh0bWwgJiYgaGFzSGlnaGxpZ2h0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUpXCI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29uZmlnPy5kaXNwbGF5TGFiZWxBc0lubmVySHRtbCAmJiAhaGFzSGlnaGxpZ2h0aW5nXCI+XG4gICAgICAgICAgICAgICAge3sgb3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIFxuICAgICAgICA8IS0tIE5vIHJlc3VsdHMgc3RhdGUgKG9ubHkgd2hlbiBub3QgbG9hZGluZyBhbmQgbm8gb3B0aW9ucykgLS0+XG4gICAgICAgIDxtYXQtb3B0aW9uIGRpc2FibGVkICpuZ0lmPVwiIShjb25maWc/Lm9wdGlvbnM/Lmxlbmd0aCB8fCAwKSAmJiAhKGNvbmZpZz8uaXNMb2FkaW5nIHx8IGxvYWRpbmdNb3JlKVwiPlxuICAgICAgICAgIE5vIHJlc3VsdHNcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8IS0tIEluZmluaXRlIHNjcm9sbCBzZW50aW5lbCAoc2VydmVyU2VhcmNoIG9yIGV4cGxpY2l0IGhhc01vcmUpIC0tPlxuICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZCBjbGFzcz1cImxvYWQtbW9yZS1zZW50aW5lbFwiICpuZ0lmPVwiY29uZmlnPy5oYXNNb3JlXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nTW9yZSB8fCBjb25maWc/LmlzTG9hZGluZ1wiPkxvYWRpbmcuLi48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ01vcmUgJiYgIWNvbmZpZz8uaXNMb2FkaW5nXCI+U2Nyb2xsIHRvIGxvYWQgbW9yZeKApjwvc3Bhbj5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgIDwhLS0gSW5saW5lIHNwaW5uZXIgc2hvd24gd2hlbiBsb2FkaW5nIG1vcmUgKGluZmluaXRlIHNjcm9sbCkgb3Igd2hlbiBjb25maWcuaXNMb2FkaW5nIGlzIHRydWUgLS0+XG4gICAgICAgIDxzdmcgKm5nSWY9XCJsb2FkaW5nTW9yZSB8fCBjb25maWc/LmlzTG9hZGluZ1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIiBhcmlhLWxhYmVsPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBzdHJva2U9XCIjRTVFN0VCXCIgc3Ryb2tlLXdpZHRoPVwiNlwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNDUgMjVhMjAgMjAgMCAwIDAtMjAtMjBcIiBzdHJva2U9XCIjNEY0NkU1XCIgc3Ryb2tlLXdpZHRoPVwiNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPlxuICAgICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT1cInRyYW5zZm9ybVwiIHR5cGU9XCJyb3RhdGVcIiBmcm9tPVwiMCAyNSAyNVwiIHRvPVwiMzYwIDI1IDI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cj1cIjAuOHNcIiByZXBlYXRDb3VudD1cImluZGVmaW5pdGVcIi8+XG4gICAgICAgICAgPC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzBBMEEwQVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==
|
|
916
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBbUV2SyxNQUFNLE9BQU8sMkJBQTJCO0lBTHhDO1FBTVcscUJBQWdCLEdBQVcsZ0JBQWdCLENBQUM7UUFDNUMsNEJBQXVCLEdBQVcsaUJBQWlCLENBQUM7UUFHbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBdUQsQ0FBQztRQUMxRixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDakQscUVBQXFFO1FBQzNELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFDNUUsd0VBQXdFO1FBQzlELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBa0MsQ0FBQztRQUN4RSxzSkFBc0o7UUFDNUksbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBa0MsQ0FBQztRQUs5RSxnRkFBZ0Y7UUFDaEYsb0JBQWUsR0FBMkIsRUFBRSxDQUFDO1FBR3JDLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUM5QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUdwQjs7O1dBR0c7UUFDSyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDckM7Ozs7V0FJRztRQUNLLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNoQyxrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUMz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QUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQUU7d0JBQUMsTUFBTSxHQUFFO3FCQUM5QztpQkFDRjtxQkFBTTtvQkFDTCwyRkFBMkY7b0JBQzNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7aUJBQ3RDO2FBQ0Y7UUFDSCxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUk7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQUU7UUFBQyxNQUFNLEdBQUU7SUFDM0QsQ0FBQzs7d0hBajNCVSwyQkFBMkI7NEdBQTNCLDJCQUEyQix1ZkFlSSxVQUFVLGtEQ2xGdEQsdXFaQW9NTTsyRkRqSU8sMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLG9CQUFvQixtQkFFYix1QkFBdUIsQ0FBQyxNQUFNOzhCQUt0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUcsY0FBYztzQkFBdkIsTUFBTTtnQkFFb0MsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNlLE1BQU07c0JBQTdELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQWlxQnRELG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTZWxlY3QsIE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbi8vIExvY2FsIG9wdGlvbiBtb2RlbCAocHJldmlvdXNseSBpbXBvcnRlZCBmcm9tIHJlbW92ZWQgY3FhLXNlbGVjdCBjb21wb25lbnQpXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdE9wdGlvbiB7XG4gIGlkPzogYW55O1xuICB2YWx1ZT86IGFueTtcbiAgbmFtZT86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHN0YXR1c0NvbG9yPzogc3RyaW5nO1xuICBkdXJhdGlvbkZvcm1hdHRlZD86IHN0cmluZztcbiAgcnVuTnVtYmVyTGFiZWw/OiBzdHJpbmc7XG4gIGhhc0hvdXJSdW4/OiBib29sZWFuO1xuICBoYXNNaW51dGVSdW4/OiBib29sZWFuO1xuICBydW5EYXRlTGFiZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAga2V5OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzcGxheUxhYmVsQXNJbm5lckh0bWw/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIC8qKiBDb250cm9scyBob3cgc2VsZWN0aW9uIGluZGljYXRvciBpcyBzaG93biBmb3IgbXVsdGktc2VsZWN0IG9wdGlvbnMuICovXG4gIG9wdGlvblN0eWxlPzogJ2NoZWNrbWFyaycgfCAnY2hlY2tib3gnO1xuICAvKiogU2hvdyBhICdTZWxlY3QgQWxsJyBvcHRpb24gYXQgdGhlIHRvcCAobXVsdGktc2VsZWN0IG9ubHkpLiAqL1xuICBzaG93U2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgLyoqIEN1c3RvbSBsYWJlbCBmb3IgdGhlICdTZWxlY3QgQWxsJyBvcHRpb24uIERlZmF1bHRzIHRvICdBbGwnLiAqL1xuICBzZWxlY3RBbGxMYWJlbD86IHN0cmluZztcbiAgLyoqIElmIHRydWUsIGNsb3NlIHRoZSBwYW5lbCB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCAodXNlZnVsIGZvciBtdWx0aS1zZWxlY3QgaW4gaGVhZGVycykuICovXG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuO1xuICAvKiogUHJvdmlkZSBhIGRlZmF1bHQgc2VsZWN0ZWQgdmFsdWUgKG9yIGFycmF5IGZvciBtdWx0aS1zZWxlY3QpIGlmIHRoZSBjb250cm9sIGhhcyBubyB2YWx1ZSB5ZXQuICovXG4gIHNlbGVjdGVkVmFsdWU/OiBhbnkgfCBhbnlbXTtcbiAgLyoqIE9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkNoYW5nZT86ICh2YWx1ZTogYW55LCBldmVudD86IE1hdFNlbGVjdENoYW5nZSkgPT4gdm9pZDtcbiAgLyoqIEVuYWJsZSBzZXJ2ZXItc2lkZSBzZWFyY2ggbW9kZTsgY29tcG9uZW50IHdpbGwgZW1pdCBzZWFyY2ggaW5zdGVhZCBvZiBsb2NhbCBmaWx0ZXJpbmcuICovXG4gIHNlcnZlclNlYXJjaD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRyaWdnZXJzIGFuIGluaXRpYWwgc2VhcmNoIGVtaXQgb24gcGFuZWwgb3BlbiAoc2VydmVyU2VhcmNoIG1vZGUgb25seSkuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlIHNvIG9wZW5pbmcgdGhlIGRyb3Bkb3duIGRvZXMgTk9UIGNhbGwgdGhlIEFQSS5cbiAgICovXG4gIGluaXRpYWxGZXRjaE9uT3Blbj86IGJvb2xlYW47XG4gIC8qKiBJbmRpY2F0ZXMgbW9yZSByZXN1bHRzIGFyZSBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbC4gKi9cbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBsb2FkaW5nIGZsYWcgY29udHJvbGxlZCBieSBjb25zdW1lciB0byBzaG93IGxvYWRpbmcgc3RhdGUuICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBjYWxsYmFjayBmb3Igc2VydmVyLXNpZGUgc2VhcmNoIHdoZW4gcXVlcnkgY2hhbmdlcy4gKi9cbiAgb25TZWFyY2g/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIE9wdGlvbmFsIGNhbGxiYWNrIHdoZW4gbW9yZSBkYXRhIGlzIHJlcXVlc3RlZCAoaW5maW5pdGUgc2Nyb2xsKS4gKi9cbiAgb25Mb2FkTW9yZT86IChxdWVyeT86IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIE9wdGlvbmFsIHJlZ2V4IHBhdHRlcm4gb3IgZnVuY3Rpb24gdG8gaGlnaGxpZ2h0IHBhcnRzIG9mIG9wdGlvbiB0ZXh0LiAqL1xuICBoaWdobGlnaHRQYXR0ZXJuPzogUmVnRXhwIHwgc3RyaW5nIHwgKCh0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyk7XG4gIC8qKiBXaGVuIHRydWUgKGFuZCBzZWFyY2hhYmxlKSwgYWxsb3dzIGFkZGluZyB0aGUgY3VycmVudCBzZWFyY2ggdGV4dCBhcyBhIG5ldyBvcHRpb24gdmlhIGFuIFwiQWRkICc8dmFsdWU+J1wiIGNob2ljZS4gKi9cbiAgYWxsb3dDdXN0b21WYWx1ZT86IGJvb2xlYW47XG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdO1xuICBpc0NvbXBhcmVSdW5zPzogYm9vbGVhbjtcbiAgdmFsdWVCeT86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWR5bmFtaWMtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY1NlbGVjdEZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICByZWFkb25seSBTRUxFQ1RfQUxMX1ZBTFVFOiBzdHJpbmcgPSAnX19zZWxlY3RfYWxsX18nO1xuICByZWFkb25seSBBRERfQ1VTVE9NX1ZBTFVFX1BSRUZJWDogc3RyaW5nID0gJ19fYWRkX2N1c3RvbV9fOic7XG4gIEBJbnB1dCgpIGZvcm0hOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGNvbmZpZyE6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgdmFsdWU6IGFueTsgZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0cyB3aGVuIHVzZXIgdHlwZXMgaW4gc2VhcmNoIGJveCAodXNlZnVsIGZvciBzZXJ2ZXIgc2VhcmNoKSAqL1xuICBAT3V0cHV0KCkgc2VhcmNoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0+KCk7XG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgbW9yZSBkYXRhIGZvciB0aGUgY3VycmVudCBxdWVyeSAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyB0byBhZGQgYSBjdXN0b20gdmFsdWUgKGFsbG93Q3VzdG9tVmFsdWU6IHRydWUpLiBDb25zdW1lciBzaG91bGQgYWRkIHRoZSB2YWx1ZSB0byBvcHRpb25zIGFuZCBzZXQgdGhlIGNvbnRyb2wgdmFsdWUuICovXG4gIEBPdXRwdXQoKSBhZGRDdXN0b21WYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdFJlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWxlY3RSZWY/OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ2hvc3QnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgaG9zdEVsPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLy8gTXVzdCBiZSBwdWJsaWMgZm9yIHRlbXBsYXRlIGFjY2VzcyBpbiBBbmd1bGFyJ3Mgc3RyaWN0IHRlbXBsYXRlIGNoZWNraW5nIG1vZGVcbiAgc2VhcmNoVGV4dEJ5S2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgb3V0c2lkZUNsZWFudXA/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGxvYWRNb3JlT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBsYXN0T3B0aW9uc0xlbmd0aCA9IDA7XG4gIGxvYWRpbmdNb3JlID0gZmFsc2U7XG4gIHByaXZhdGUgcGFuZWxTY3JvbGxFbD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIGRvY3VtZW50S2V5ZG93bkxpc3RlbmVyPzogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogR3VhcmQgdG8gZW5zdXJlIGxvYWQtbW9yZSBpcyBvbmx5IHRyaWdnZXJlZCBhZnRlciB0aGUgdXNlciBoYXMgc2Nyb2xsZWRcbiAgICogYXQgbGVhc3Qgb25jZSBzaW5jZSBvcGVuaW5nIHRoZSBwYW5lbC4gUHJldmVudHMgYXV0by1sb2FkIG9uIG9wZW4uXG4gICAqL1xuICBwcml2YXRlIGhhc1Njcm9sbGVkU2luY2VPcGVuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUcnVlIHdoZW4gdGhlIGxvYWQtbW9yZSBzZW50aW5lbCBpcyBjdXJyZW50bHkgaW4gdmlldy4gVXNlZCB0byB0cmlnZ2VyIG9ubHkgd2hlblxuICAgKiB0aGUgc2VudGluZWwgdHJhbnNpdGlvbnMgZnJvbSBvdXQtb2YtdmlldyB0byBpbi12aWV3ICh1c2VyIHNjcm9sbGVkIHRvIGJvdHRvbSBhZ2FpbiksXG4gICAqIG5vdCB3aGVuIGl0IHN0YXlzIGluIHZpZXcgYWZ0ZXIgbmV3IGRhdGEgYXJyaXZlcyAod2hpY2ggd291bGQgY2F1c2UgcmVwZWF0ZWQgQVBJIGNhbGxzKS5cbiAgICovXG4gIHByaXZhdGUgc2VudGluZWxDdXJyZW50bHlJblZpZXcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvblBhbmVsU2Nyb2xsID0gKCkgPT4ge1xuICAgIHRoaXMuaGFzU2Nyb2xsZWRTaW5jZU9wZW4gPSB0cnVlO1xuICAgIGlmICghdGhpcy5jb25maWc/Lmhhc01vcmUgfHwgdGhpcy5sb2FkaW5nTW9yZSkgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5wYW5lbFNjcm9sbEVsO1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCBuZWFyQm90dG9tID0gZWwuc2Nyb2xsVG9wICsgZWwuY2xpZW50SGVpZ2h0ID49IGVsLnNjcm9sbEhlaWdodCAtIDQ4OyAvLyB+MyBvcHRpb24gcm93c1xuICAgIGlmIChuZWFyQm90dG9tICYmICF0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3KSB7XG4gICAgICB0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3ID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZGluZ01vcmUgPSB0cnVlO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleSB8fCAnJztcbiAgICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldIHx8ICcnO1xuICAgICAgdGhpcy5sb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgIHRyeSB7IHRoaXMuY29uZmlnLm9uTG9hZE1vcmU/LihxKTsgfSBjYXRjaCB7fVxuICAgIH0gZWxzZSBpZiAoIW5lYXJCb3R0b20pIHtcbiAgICAgIHRoaXMuc2VudGluZWxDdXJyZW50bHlJblZpZXcgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZyB8fCAhdGhpcy5jb25maWcua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NxYS1keW5hbWljLXNlbGVjdDogaW5wdXQgXCJjb25maWcua2V5XCIgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZFZhbHVlSWZOZWVkZWQoKTtcbiAgICB0aGlzLnN5bmNEaXNhYmxlZFN0YXRlKCk7XG4gICAgdGhpcy5sYXN0T3B0aW9uc0xlbmd0aCA9ICh0aGlzLmNvbmZpZz8ub3B0aW9ucyB8fCBbXSkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlQbGFjZWhvbGRlcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuIHRoaXMuY29uZmlnPy5wbGFjZWhvbGRlcjtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLmZvcm0uZ2V0KGtleSk/LnZhbHVlO1xuICAgIHJldHVybiB0aGlzLmhhc0V4aXN0aW5nVmFsdWUoY29udHJvbFZhbHVlKSA/IHVuZGVmaW5lZCA6IHRoaXMuY29uZmlnPy5wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoJ2NvbmZpZycgaW4gY2hhbmdlcyB8fCAnZm9ybScgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5zeW5jRGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoJ2NvbmZpZycgaW4gY2hhbmdlcykge1xuICAgICAgLy8gV2hlbiBjb25maWcgY2hhbmdlcyAoaW5jbHVkaW5nIHRvZ2dsaW5nIG11bHRpcGxlKSwgZW5zdXJlIGNvbnRyb2wgdmFsdWUgc2hhcGUgbWF0Y2hlc1xuICAgICAgdGhpcy5zeW5jQ29udHJvbFZhbHVlRm9yTXVsdGlwbGVNb2RlKCk7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWRWYWx1ZUlmTmVlZGVkKCk7XG4gICAgICAvLyBTeW5jIGxvYWRpbmdNb3JlIHdpdGggY29uZmlnLmlzTG9hZGluZyB3aGVuIHByb3ZpZGVkIGJ5IHBhcmVudFxuICAgICAgLy8gVGhpcyBhbGxvd3MgcGFyZW50IHRvIGNvbnRyb2wgbG9hZGluZyBzdGF0ZSAoZS5nLiwgZHVyaW5nIGxvYWQgbW9yZSBvcGVyYXRpb25zKVxuICAgICAgaWYgKHRoaXMuY29uZmlnPy5pc0xvYWRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmxvYWRpbmdNb3JlID0gdGhpcy5jb25maWcuaXNMb2FkaW5nO1xuICAgICAgfVxuICAgICAgLy8gUmVzZXQgbG9hZGluZ01vcmUgd2hlbiBuZXcgb3B0aW9ucyBhcnJpdmUgKG9wdGlvbnMgbGVuZ3RoIGluY3JlYXNlZClcbiAgICAgIGNvbnN0IGxlbiA9ICh0aGlzLmNvbmZpZz8ub3B0aW9ucyB8fCBbXSkubGVuZ3RoO1xuICAgICAgaWYgKGxlbiA+IHRoaXMubGFzdE9wdGlvbnNMZW5ndGgpIHtcbiAgICAgICAgLy8gUmVzZXQgbG9hZGluZyBzdGF0ZSB3aGVuIG5ldyBkYXRhIGFycml2ZXMsIHVubGVzcyBwYXJlbnQgZXhwbGljaXRseSBzYXlzIHN0aWxsIGxvYWRpbmdcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5pc0xvYWRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnPy5pc0xvYWRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE9ubHkgYXV0by1yZXNldCBpZiBwYXJlbnQgZG9lc24ndCBjb250cm9sIGxvYWRpbmcgc3RhdGVcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNb3JlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdE9wdGlvbnNMZW5ndGggPSBsZW47XG4gICAgICAvLyBJZiBjb25zdW1lciBpbmRpY2F0ZXMgbm8gbW9yZSByZXN1bHRzLCBjbGVhciBsb2FkaW5nIHN0YXRlIGFuZCBhbnkgb2JzZXJ2ZXJzXG4gICAgICBpZiAoIXRoaXMuY29uZmlnPy5oYXNNb3JlKSB7XG4gICAgICAgIC8vIENsZWFyIGxvYWRpbmcgc3RhdGUgd2hlbiBubyBtb3JlIHJlc3VsdHMsIHVubGVzcyBwYXJlbnQgZXhwbGljaXRseSBzYXlzIHN0aWxsIGxvYWRpbmdcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5pc0xvYWRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnPy5pc0xvYWRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMubG9hZGluZ01vcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sb2FkTW9yZU9ic2VydmVyKSB7XG4gICAgICAgICAgdHJ5IHsgdGhpcy5sb2FkTW9yZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsgfSBjYXRjaCB7fVxuICAgICAgICAgIHRoaXMubG9hZE1vcmVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gSWYgcGFuZWwgaXMgb3BlbiBhbmQgaGFzTW9yZSBpcyB0cnVlLCBlbnN1cmUgdGhlIHNlbnRpbmVsIGlzIGJlaW5nIG9ic2VydmVkLlxuICAgICAgaWYgKHRoaXMuc2VsZWN0UmVmPy5wYW5lbE9wZW4gJiYgdGhpcy5jb25maWc/Lmhhc01vcmUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldHVwTG9hZE1vcmVPYnNlcnZlcigpLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCdmb3JtJyBpbiBjaGFuZ2VzICYmICFjaGFuZ2VzWydmb3JtJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZFZhbHVlSWZOZWVkZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFuZWxDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgY3RjLXNlbGVjdC1wYW5lbCAke3RoaXMuaXNNdWx0aXBsZSA/ICdtdWx0aXBsZScgOiAnJ30gJHt0aGlzLmNvbmZpZz8uaXNDb21wYXJlUnVucyA/ICdjb21wYXJlLXJ1bnMtc2VsZWN0LXBhbmVsJyA6ICcnfWAudHJpbSgpO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9Cb29sZWFuKHRoaXMuY29uZmlnPy5tdWx0aXBsZSk7XG4gIH1cblxuICBnZXQgc2luZ2xlU2VsZWN0ZWREaXNwbGF5TGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0gfHwgdGhpcy5pc011bHRpcGxlKSByZXR1cm4gJyc7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5mb3JtLmdldChrZXkpPy52YWx1ZTtcbiAgICBpZiAoY29udHJvbFZhbHVlID09PSBudWxsIHx8IGNvbnRyb2xWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2xWYWx1ZSA9PT0gJycpIHJldHVybiAnJztcbiAgICBjb25zdCBtYXRjaGVkT3B0aW9uID0gKHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdKS5maW5kKFxuICAgICAgKG9wdCkgPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShvcHQpID09PSBjb250cm9sVmFsdWUgfHwgU3RyaW5nKHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0KSkgPT09IFN0cmluZyhjb250cm9sVmFsdWUpXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZE9wdGlvbikge1xuICAgICAgcmV0dXJuIFN0cmluZyhtYXRjaGVkT3B0aW9uLm5hbWUgPz8gbWF0Y2hlZE9wdGlvbi5sYWJlbCA/PyBtYXRjaGVkT3B0aW9uLnZhbHVlID8/IG1hdGNoZWRPcHRpb24uaWQgPz8gJycpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGNvbnRyb2xWYWx1ZSk7XG4gIH1cblxuICBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b0Jvb2xlYW4odGhpcy5jb25maWc/LmRpc2FibGVkKTtcbiAgfVxuICBcbiAgZ2V0IHVzZUNoZWNrYm94U3R5bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNNdWx0aXBsZSAmJiAodGhpcy5jb25maWc/Lm9wdGlvblN0eWxlID09PSAnY2hlY2tib3gnKTtcbiAgfVxuICBcbiAgZ2V0IGFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc011bHRpcGxlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGNvbnRyb2wudmFsdWUgYXMgYW55W107XG4gICAgY29uc3QgYWxsSWRzID0gdGhpcy5nZXRBbGxPcHRpb25JZHMoKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFhbGxJZHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGFsbElkcy5ldmVyeShpZCA9PiBzZWxlY3RlZC5pbmNsdWRlcyhpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0Jvb2xlYW4odmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdiA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHYgPT09ICd0cnVlJyB8fCB2ID09PSAnMScpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHYgPT09ICdmYWxzZScgfHwgdiA9PT0gJzAnIHx8IHYgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gYW55IG90aGVyIG5vbi1lbXB0eSBzdHJpbmcgdHJlYXRlZCBhcyB0cnV0aHlcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gMDtcbiAgICB9XG4gICAgcmV0dXJuICEhdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBmb3IgYW4gb3B0aW9uIGJhc2VkIG9uIHRoZSB2YWx1ZUJ5IHByb3BlcnR5LlxuICAgKiBJZiB2YWx1ZUJ5IGlzIHByb3ZpZGVkLCB1c2UgdGhhdCBwcm9wZXJ0eSBmcm9tIHRoZSBvcHRpb24uXG4gICAqIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIGlkID8/IHZhbHVlIChkZWZhdWx0IGJlaGF2aW9yKS5cbiAgICogTXVzdCBiZSBwdWJsaWMgZm9yIHRlbXBsYXRlIGFjY2Vzcy5cbiAgICovXG4gIGdldE9wdGlvblZhbHVlKG9wdDogU2VsZWN0T3B0aW9uKTogYW55IHtcbiAgICBpZiAodGhpcy5jb25maWc/LnZhbHVlQnkpIHtcbiAgICAgIC8vIFVzZSB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IHZhbHVlQnlcbiAgICAgIHJldHVybiAob3B0IGFzIGFueSlbdGhpcy5jb25maWcudmFsdWVCeV07XG4gICAgfVxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IHVzZSBpZCA/PyB2YWx1ZVxuICAgIHJldHVybiBvcHQuaWQgPz8gb3B0LnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgdGhlIGZvcm0gY29udHJvbCdzIGRpc2FibGVkIHN0YXRlIGZyb20gY29uZmlnLlxuICAgKiBVc2UgdGhlIEZvcm1Db250cm9sIEFQSSBpbnN0ZWFkIG9mIFtkaXNhYmxlZF0gaW4gdGhlIHRlbXBsYXRlIHRvIGF2b2lkIEFuZ3VsYXInc1xuICAgKiBcImNoYW5nZWQgYWZ0ZXIgY2hlY2tlZFwiIC8gcmVhY3RpdmUgZm9ybXMgZGlzYWJsZWQtYXR0cmlidXRlIHdhcm5pbmcuXG4gICAqL1xuICBwcml2YXRlIHN5bmNEaXNhYmxlZFN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKCFjb250cm9sKSByZXR1cm47XG4gICAgY29uc3Qgc2hvdWxkRGlzYWJsZSA9IHRoaXMudG9Cb29sZWFuKHRoaXMuY29uZmlnPy5kaXNhYmxlZCk7XG4gICAgaWYgKHNob3VsZERpc2FibGUpIHtcbiAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN5bmNDb250cm9sVmFsdWVGb3JNdWx0aXBsZU1vZGUoKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm47XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkgcmV0dXJuO1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShbY3VycmVudFZhbHVlXSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkgcmV0dXJuO1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShjdXJyZW50VmFsdWUubGVuZ3RoID8gY3VycmVudFZhbHVlWzBdIDogbnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZFZhbHVlSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm47XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5jb25maWc/LnNlbGVjdGVkVmFsdWU7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBcbiAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHZhbHVlLCBkb24ndCBvdmVycmlkZSBpdFxuICAgIGlmICh0aGlzLmhhc0V4aXN0aW5nVmFsdWUoY3VycmVudFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0OiBpZiBjdXJyZW50VmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgW10sIHRoaXMgaXMgYW4gZXhwbGljaXQgdXNlciBjaG9pY2UgdG8gY2xlYXJcbiAgICAvLyBEb24ndCByZXN0b3JlIGZyb20gc2VsZWN0ZWRWYWx1ZSAtIHJlc3BlY3QgdGhlIHVzZXIncyBkZWNpc2lvbiB0byBkZXNlbGVjdCBhbGxcbiAgICBpZiAodGhpcy5pc011bHRpcGxlICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiBjdXJyZW50VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmIChzZWxlY3RlZFZhbHVlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheShzZWxlY3RlZFZhbHVlKSA/IHNlbGVjdGVkVmFsdWUgOiBbc2VsZWN0ZWRWYWx1ZV0pLmZpbHRlcihcbiAgICAgICAgKHZhbCkgPT4gdmFsICE9PSB1bmRlZmluZWQsXG4gICAgICApO1xuICAgICAgaWYgKCFub3JtYWxpemVkLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShub3JtYWxpemVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkVmFsdWUpXG4gICAgICAgID8gKHNlbGVjdGVkVmFsdWUubGVuZ3RoID8gc2VsZWN0ZWRWYWx1ZVswXSA6IHVuZGVmaW5lZClcbiAgICAgICAgOiBzZWxlY3RlZFZhbHVlO1xuICAgICAgaWYgKG5vcm1hbGl6ZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShub3JtYWxpemVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNFeGlzdGluZ1ZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5zb21lKCh2YWwpID0+IHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09ICcnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc09wdGlvblNlbGVjdGVkKG9wdDogU2VsZWN0T3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZShvcHQpO1xuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb250cm9sVmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gY29udHJvbFZhbHVlLmluY2x1ZGVzKG9wdGlvblZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2xWYWx1ZSA9PT0gb3B0aW9uVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbE9wdGlvbklkcygpOiBhbnlbXSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdO1xuICAgIHJldHVybiBvcHRpb25zLm1hcChvID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobykpLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICBvblRvZ2dsZVNlbGVjdEFsbChzZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKCFjb250cm9sKSByZXR1cm47XG4gICAgY29uc3QgYWxsSWRzID0gdGhpcy5nZXRBbGxPcHRpb25JZHMoKTtcbiAgICBpZiAoIWFsbElkcy5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoYWxsSWRzLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gS2VlcCBwYW5lbCBvcGVuIGZvciBjb250aW51ZWQgc2VsZWN0aW9ucyBpbiBtdWx0aS1zZWxlY3RcbiAgICB0cnkgeyBzZWxlY3Qub3BlbigpOyB9IGNhdGNoIHt9XG4gIH1cblxuICBvblNlbGVjdE9wZW5lZENoYW5nZShvcGVuZWQ6IGJvb2xlYW4sIF9zZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIC8vIEVtaXQgY2xpY2sgZXZlbnQgd2hlbiBzZWxlY3QgaXMgb3BlbmVkIChjbGlja2VkKVxuICAgICAgdGhpcy5zZWxlY3RDbGljay5lbWl0KCk7XG4gICAgICAvLyBSZXNldCBsb2FkaW5nTW9yZSB3aGVuIG9wZW5pbmcgaWYgb3B0aW9ucyBhbHJlYWR5IGV4aXN0IChkb24ndCBzaG93IGxvYWRlciBvbiBpbml0aWFsIG9wZW4pXG4gICAgICBpZiAoKHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vcmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEVuc3VyZSB3ZSBvbmx5IHRyaWdnZXIgbG9hZC1tb3JlIGFmdGVyIGEgcmVhbCB1c2VyIHNjcm9sbFxuICAgICAgdGhpcy5oYXNTY3JvbGxlZFNpbmNlT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgLy8gUmVzZXQgc2VhcmNoIHRleHQgb24gY2xvc2Ugc28gdGhlIG5leHQgb3BlbiBzaG93cyBmdWxsIGxpc3RcbiAgICAgIGlmICh0aGlzLmNvbmZpZz8ua2V5KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dEJ5S2V5W3RoaXMuY29uZmlnLmtleV0gPSAnJztcbiAgICAgIH1cbiAgICAgIC8vIEVuc3VyZSBhbnkgcHJldmlvdXMgY3VzdG9tIGxpc3RlbmVycyBhcmUgY2xlYXJlZCAobGVnYWN5IGNvbXBhdGliaWxpdHkpXG4gICAgICBpZiAodGhpcy5vdXRzaWRlQ2xlYW51cCkge1xuICAgICAgICB0aGlzLm91dHNpZGVDbGVhbnVwKCk7XG4gICAgICAgIHRoaXMub3V0c2lkZUNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgZG9jdW1lbnQga2V5Ym9hcmQgbGlzdGVuZXJcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50S2V5ZG93bkxpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmRvY3VtZW50S2V5ZG93bkxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEtleWRvd25MaXN0ZW5lciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIERpc2Nvbm5lY3QgbG9hZC1tb3JlIG9ic2VydmVyIGlmIGFueVxuICAgICAgaWYgKHRoaXMubG9hZE1vcmVPYnNlcnZlcikge1xuICAgICAgICB0cnkgeyB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOyB9IGNhdGNoIHt9XG4gICAgICAgIHRoaXMubG9hZE1vcmVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBzY3JvbGwgbGlzdGVuZXIgaWYgYXR0YWNoZWRcbiAgICAgIGlmICh0aGlzLnBhbmVsU2Nyb2xsRWwpIHtcbiAgICAgICAgdHJ5IHsgdGhpcy5wYW5lbFNjcm9sbEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25QYW5lbFNjcm9sbCk7IH0gY2F0Y2gge31cbiAgICAgICAgdGhpcy5wYW5lbFNjcm9sbEVsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgLy8gUmVzZXQgbG9hZC1tb3JlIHN0YXRlIHdoZW4gY2xvc2luZ1xuICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZW50aW5lbEN1cnJlbnRseUluVmlldyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvY3VzIHRoZSBzZWFyY2ggYm94IGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5jb25maWc/LnNlYXJjaGFibGUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oJy50cy1zZWxlY3Qtc2VhcmNoLWlucHV0Jyk7XG4gICAgICAgIGlucHV0Py5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgLy8gU2VydmVyLXNlYXJjaDogcmVzZXQgc2VhcmNoIGFuZCByZWZldGNoIGZ1bGwgbGlzdCB3aGVuIHBhbmVsIG9wZW5zIHNvIHVzZXIgYWx3YXlzIHNlZXMgYSBmcmVzaCBsaXN0LlxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VydmVyU2VhcmNoKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5rZXk7XG4gICAgICB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldID0gJyc7XG4gICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vblNlYXJjaD8uKCcnKTsgfSBjYXRjaCB7fVxuICAgICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCh7IGtleSwgcXVlcnk6ICcnIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b0Jvb2xlYW4odGhpcy5jb25maWc/LmluaXRpYWxGZXRjaE9uT3BlbikpIHtcbiAgICAgIC8vIE5vbi1zZXJ2ZXItc2VhcmNoOiBvcHRpb25hbCBpbml0aWFsIGZldGNoIG9uIG9wZW4gd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC5cbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmtleTtcbiAgICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldIHx8ICcnO1xuICAgICAgdHJ5IHsgdGhpcy5jb25maWcub25TZWFyY2g/LihxKTsgfSBjYXRjaCB7fVxuICAgICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCh7IGtleSwgcXVlcnk6IHEgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZW50aW5lbEN1cnJlbnRseUluVmlldyA9IGZhbHNlO1xuICAgIHRoaXMuaGFzU2Nyb2xsZWRTaW5jZU9wZW4gPSBmYWxzZTtcbiAgICAvLyBTZXR1cCBpbmZpbml0ZSBzY3JvbGwgb2JzZXJ2ZXIgb24gc2VudGluZWxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0dXBMb2FkTW9yZU9ic2VydmVyKCksIDApO1xuICAgIC8vIEFsc28gYXR0YWNoIGEgc2Nyb2xsIGxpc3RlbmVyIGZhbGxiYWNrIGZvciByZWxpYWJsZSBsb2FkLW1vcmUgdHJpZ2dlcnNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhbmVscyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1zZWxlY3QtcGFuZWwnKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdGhpcy5wYW5lbFNjcm9sbEVsID0gcGFuZWxzLmxlbmd0aCA/IHBhbmVsc1twYW5lbHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnBhbmVsU2Nyb2xsRWwpIHtcbiAgICAgICAgICB0aGlzLnBhbmVsU2Nyb2xsRWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblBhbmVsU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICB9LCAwKTtcbiAgICBcbiAgICAvLyBTZXR1cCBkb2N1bWVudC1sZXZlbCBrZXlib2FyZCBsaXN0ZW5lciBmb3IgYXJyb3cga2V5IG5hdmlnYXRpb24gd2hlbiBzZWFyY2ggaW5wdXQgaXMgbm90IGZvY3VzZWRcbiAgICBpZiAodGhpcy5jb25maWc/LnNlYXJjaGFibGUpIHtcbiAgICAgIHRoaXMuc2V0dXBEb2N1bWVudEtleWRvd25MaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0QnlLZXlba2V5XSA9IHZhbHVlID8/ICcnO1xuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VydmVyU2VhcmNoKSB7XG4gICAgICAvLyBGb3Igc2VydmVyLXNpZGUgc2VhcmNoLCBlbWl0IGluc3RlYWQgb2YgbG9jYWwgZmlsdGVyaW5nXG4gICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vblNlYXJjaD8uKHZhbHVlID8/ICcnKTsgfSBjYXRjaCB7fVxuICAgICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCh7IGtleSwgcXVlcnk6IHZhbHVlID8/ICcnIH0pO1xuICAgICAgLy8gUmVzZXQgaW50ZXJuYWwgcGFnaW5nIHN0YXRlXG4gICAgICB0aGlzLmxvYWRpbmdNb3JlID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RPcHRpb25zTGVuZ3RoID0gKHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdKS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBzZWFyY2ggaW5wdXQgdG8gZW5hYmxlIG5hdmlnYXRpb24gd2l0aCBhcnJvdyBrZXlzXG4gICAqIGFuZCBzZWxlY3Rpb24gd2l0aCBFbnRlciBrZXksIHdoaWxlIHN0aWxsIGFsbG93aW5nIHR5cGluZyBpbiB0aGUgc2VhcmNoIGJveC5cbiAgICovXG4gIG9uU2VhcmNoSW5wdXRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIFxuICAgIC8vIEhhbmRsZSBuYXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24ga2V5c1xuICAgIGlmIChrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAvLyBTdG9wIHRoZSBldmVudCBjb21wbGV0ZWx5IGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBcbiAgICAgIC8vIE5hdmlnYXRlIGltbWVkaWF0ZWx5IChzeW5jaHJvbm91c2x5KSB0byBwcmV2ZW50IEFuZ3VsYXIgTWF0ZXJpYWwgZnJvbSBwcm9jZXNzaW5nXG4gICAgICB0aGlzLm5hdmlnYXRlT3B0aW9ucyhrZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcbiAgICAgIFxuICAgICAgLy8gQmx1ciB0aGUgc2VhcmNoIGlucHV0IGFmdGVyIG5hdmlnYXRpb24gdG8gYWxsb3cgc3Vic2VxdWVudCBhcnJvdyBrZXlzIHRvIHdvcmsgbmF0dXJhbGx5XG4gICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIC8vIFVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gYmx1ciBhZnRlciBvdXIgbmF2aWdhdGlvbiBjb21wbGV0ZXNcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBpbnB1dC5ibHVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAoa2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gQmx1ciB0aGUgc2VhcmNoIGlucHV0XG4gICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmJsdXIoKTtcbiAgICAgIH1cbiAgICAgIC8vIEZpbmQgYW5kIHNlbGVjdCB0aGUgYWN0aXZlIG9wdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwnKTtcbiAgICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9uID0gcGFuZWwucXVlcnlTZWxlY3RvcignLm1hdC1vcHRpb24ubWF0LWFjdGl2ZTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbikge1xuICAgICAgICAgICAgYWN0aXZlT3B0aW9uLmNsaWNrKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIG5vIGFjdGl2ZSBvcHRpb24sIHRyeSB0byBzZWxlY3QgdGhlIGZpcnN0IGVuYWJsZWQgb3B0aW9uXG4gICAgICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJy5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCk6bm90KC50cy1zZWxlY3Qtc2VhcmNoKScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGZpcnN0T3B0aW9uKSB7XG4gICAgICAgICAgICAgIGZpcnN0T3B0aW9uLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAxMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBFc2NhcGUsIGFsbG93IGl0IHRvIHByb3BhZ2F0ZSAobWF0LXNlbGVjdCB3aWxsIGNsb3NlIHRoZSBwYW5lbClcbiAgICBpZiAoa2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBGb3IgYWxsIG90aGVyIGtleXMgKHR5cGluZyksIHN0b3AgcHJvcGFnYXRpb24gdG8gYWxsb3cgc2VhcmNoIGlucHV0IHRvIHdvcmsgbm9ybWFsbHlcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBuYXZpZ2F0ZXMgdGhyb3VnaCBvcHRpb25zIHdoZW4gYXJyb3cga2V5cyBhcmUgcHJlc3NlZCBmcm9tIHNlYXJjaCBpbnB1dC5cbiAgICogQHBhcmFtIGRpcmVjdGlvbiAxIGZvciBkb3duLCAtMSBmb3IgdXBcbiAgICovXG4gIHByaXZhdGUgbmF2aWdhdGVPcHRpb25zKGRpcmVjdGlvbjogMSB8IC0xKTogdm9pZCB7XG4gICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXNlbGVjdC1wYW5lbCcpO1xuICAgIGlmICghcGFuZWwpIHJldHVybjtcblxuICAgIC8vIEdldCBhbGwgZW5hYmxlZCwgbm9uLWRpc2FibGVkIG9wdGlvbnMgKGV4Y2x1ZGluZyBzZWFyY2ggaW5wdXQpXG4gICAgY29uc3QgYWxsT3B0aW9ucyA9IEFycmF5LmZyb20oXG4gICAgICBwYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpOm5vdCgudHMtc2VsZWN0LXNlYXJjaCknKVxuICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgIGlmIChhbGxPcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gRmluZCBjdXJyZW50bHkgYWN0aXZlIG9wdGlvblxuICAgIGxldCBjdXJyZW50SW5kZXggPSBhbGxPcHRpb25zLmZpbmRJbmRleChvcHQgPT4gb3B0LmNsYXNzTGlzdC5jb250YWlucygnbWF0LWFjdGl2ZScpKTtcblxuICAgIC8vIElmIG5vIGFjdGl2ZSBvcHRpb24sIHN0YXJ0IGF0IHRoZSBmaXJzdCBvbmUgKGZvciBkb3duKSBvciBsYXN0IG9uZSAoZm9yIHVwKVxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICBjdXJyZW50SW5kZXggPSBkaXJlY3Rpb24gPT09IDEgPyAtMSA6IGFsbE9wdGlvbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBuZXh0IGluZGV4XG4gICAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgZGlyZWN0aW9uO1xuXG4gICAgLy8gQm91bmRzIGNoZWNrXG4gICAgaWYgKG5leHRJbmRleCA8IDAgfHwgbmV4dEluZGV4ID49IGFsbE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFjdGl2ZSBjbGFzcyBmcm9tIGFsbCBvcHRpb25zXG4gICAgYWxsT3B0aW9ucy5mb3JFYWNoKG9wdCA9PiBvcHQuY2xhc3NMaXN0LnJlbW92ZSgnbWF0LWFjdGl2ZScpKTtcblxuICAgIC8vIEFkZCBhY3RpdmUgY2xhc3MgdG8gdGhlIHRhcmdldCBvcHRpb25cbiAgICBjb25zdCB0YXJnZXRPcHRpb24gPSBhbGxPcHRpb25zW25leHRJbmRleF07XG4gICAgdGFyZ2V0T3B0aW9uLmNsYXNzTGlzdC5hZGQoJ21hdC1hY3RpdmUnKTtcbiAgICBcbiAgICAvLyBTY3JvbGwgdGhlIG9wdGlvbiBpbnRvIHZpZXcgaWYgbmVlZGVkXG4gICAgdGFyZ2V0T3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JywgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIFxuICAgIC8vIEZvY3VzIHRoZSBvcHRpb24gc28gQW5ndWxhciBNYXRlcmlhbCdzIGtleWJvYXJkIG1hbmFnZXIgY2FuIGhhbmRsZSBzdWJzZXF1ZW50IGFycm93IGtleXNcbiAgICAvLyBGb2N1c2luZyBhbiBvcHRpb24gZG9lc24ndCB0cmlnZ2VyIHNlbGVjdGlvbiBpbiBBbmd1bGFyIE1hdGVyaWFsIC0gb25seSBjbGljay9FbnRlciBkb2VzXG4gICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIHRoZSBET00gaXMgdXBkYXRlZCBmaXJzdFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGFyZ2V0T3B0aW9uLmZvY3VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbiBpZHMgZm9yIHRoZSBjb25maWd1cmVkIGNvbnRyb2wuXG4gICAqL1xuICBwcml2YXRlIGdldFNlbGVjdGVkSWRzRm9yS2V5KGtleTogc3RyaW5nKTogYW55W10ge1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybiBbXTtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCA/IFt2YWx1ZV0gOiBbXTtcbiAgfVxuXG4gIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGNsb3NlIHRoZSBzZWxlY3QgcGFuZWwgaWYgb3BlbiAqL1xuICBwdWJsaWMgY2xvc2VQYW5lbCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3RSZWY/LmNsb3NlKCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgZmlsdGVyZWRPcHRpb25zKGM6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyk6IFNlbGVjdE9wdGlvbltdIHtcbiAgICBjb25zdCB0ID0gKHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2Mua2V5XSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgLy8gSW4gc2VydmVyLXNpZGUgbW9kZSwgcmV0dXJuIG9wdGlvbnMgYXMtaXMgKHBhcmVudCBwcm92aWRlcyBsaXN0KVxuICAgIGlmIChjLnNlcnZlclNlYXJjaCkgcmV0dXJuIGMub3B0aW9ucyB8fCBbXTtcbiAgICAvLyBXaGVuIG5vdCBzZWFyY2hpbmcsIHJldHVybiBmdWxsIGxpc3QgdG8gcHJlc2VydmUgb3JpZ2luYWwgb3JkZXJpbmdcbiAgICBpZiAoIXQpIHJldHVybiBjLm9wdGlvbnMgfHwgW107XG5cbiAgICBjb25zdCBhbGxPcHRpb25zID0gYy5vcHRpb25zIHx8IFtdO1xuICAgIGNvbnN0IGJhc2VGaWx0ZXJlZCA9IGFsbE9wdGlvbnMuZmlsdGVyKChvcHQpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBTdHJpbmcob3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiB0ZXh0LmluY2x1ZGVzKHQpO1xuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24ocykgYXJlIGFsd2F5cyB2aXNpYmxlIHdoaWxlIHNlYXJjaGluZ1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5nZXRTZWxlY3RlZElkc0ZvcktleShjLmtleSk7XG4gICAgaWYgKCFzZWxlY3RlZElkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYXNlRmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVPZiA9IChvOiBTZWxlY3RPcHRpb24pID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gYWxsT3B0aW9ucy5maWx0ZXIobyA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyh2YWx1ZU9mKG8pKSk7XG5cbiAgICAvLyBNZXJnZSBzZWxlY3RlZCBvcHRpb25zIChrZWVwaW5nIHRoZWlyIG9yaWdpbmFsIG9yZGVyKSB3aXRoIGZpbHRlcmVkIG9uZXMsIGRlLWR1cGxpY2F0ZWRcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxhbnk+KCk7XG4gICAgY29uc3QgbWVyZ2VkOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbyBvZiBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHZhbCA9IHZhbHVlT2Yobyk7XG4gICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFzZWVuLmhhcyh2YWwpKSB7XG4gICAgICAgIHNlZW4uYWRkKHZhbCk7XG4gICAgICAgIG1lcmdlZC5wdXNoKG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IG8gb2YgYmFzZUZpbHRlcmVkKSB7XG4gICAgICBjb25zdCB2YWwgPSB2YWx1ZU9mKG8pO1xuICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGlmICghc2Vlbi5oYXModmFsKSkge1xuICAgICAgICBzZWVuLmFkZCh2YWwpO1xuICAgICAgICBtZXJnZWQucHVzaChvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIC8qKiBXaGVuIGFsbG93Q3VzdG9tVmFsdWUgaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgaGFzIHR5cGVkIGEgdmFsdWUgdGhhdCBpcyBub3QgaW4gb3B0aW9ucywgcmV0dXJucyB0aGF0IHZhbHVlIGZvciB0aGUgXCJBZGRcIiBvcHRpb24uICovXG4gIGdldCBjdXN0b21WYWx1ZVRvQWRkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGMgPSB0aGlzLmNvbmZpZztcbiAgICBpZiAoIWM/LmtleSB8fCAhdGhpcy50b0Jvb2xlYW4oYy5zZWFyY2hhYmxlKSB8fCAhdGhpcy50b0Jvb2xlYW4oYy5hbGxvd0N1c3RvbVZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdCA9ICh0aGlzLnNlYXJjaFRleHRCeUtleVtjLmtleV0gfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9wdHMgPSBjLm9wdGlvbnMgfHwgW107XG4gICAgY29uc3QgbG93ZXIgPSB0LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IG9wdHMuc29tZSgobykgPT4ge1xuICAgICAgY29uc3QgdiA9IFN0cmluZyhvLm5hbWUgPz8gby5sYWJlbCA/PyBvLnZhbHVlID8/IG8uaWQgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gdiA9PT0gbG93ZXI7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFscmVhZHlFeGlzdHMgPyBudWxsIDogdDtcbiAgfVxuXG4gIGdldCBzaG93QWRkQ3VzdG9tT3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVZhbHVlVG9BZGQgIT09IG51bGw7XG4gIH1cblxuICBnZXQgYWRkQ3VzdG9tU2VudGluZWxWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHYgPSB0aGlzLmN1c3RvbVZhbHVlVG9BZGQ7XG4gICAgcmV0dXJuIHYgIT0gbnVsbCA/IGAke3RoaXMuQUREX0NVU1RPTV9WQUxVRV9QUkVGSVh9JHt2fWAgOiAnJztcbiAgfVxuXG4gIC8vIENsb3NlIHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkIGlmIHJlcXVlc3RlZC4gQWx3YXlzIGNsb3NlIGZvciBzaW5nbGUtc2VsZWN0LlxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogTWF0U2VsZWN0Q2hhbmdlLCBzZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBhZGQtY3VzdG9tLXZhbHVlIHNlbnRpbmVsIChhbGxvd0N1c3RvbVZhbHVlKVxuICAgIGNvbnN0IHJhdyA9IGV2ZW50LnZhbHVlO1xuICAgIGNvbnN0IHNlbnRpbmVsSW5BcnJheSA9IEFycmF5LmlzQXJyYXkocmF3KVxuICAgICAgPyByYXcuZmluZCgodjogYW55KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5zdGFydHNXaXRoKHRoaXMuQUREX0NVU1RPTV9WQUxVRV9QUkVGSVgpKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGlzQWRkQ3VzdG9tID1cbiAgICAgICh0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyAmJiByYXcuc3RhcnRzV2l0aCh0aGlzLkFERF9DVVNUT01fVkFMVUVfUFJFRklYKSkgfHwgc2VudGluZWxJbkFycmF5ICE9IG51bGw7XG5cbiAgICBpZiAoaXNBZGRDdXN0b20pIHtcbiAgICAgIGNvbnN0IHNlbnRpbmVsU3RyID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyByYXcgOiBzZW50aW5lbEluQXJyYXk7XG4gICAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhzZW50aW5lbFN0cikuc2xpY2UodGhpcy5BRERfQ1VTVE9NX1ZBTFVFX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleTtcbiAgICAgIGlmIChrZXkgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IChjb250cm9sLnZhbHVlIGFzIGFueVtdKS5maWx0ZXIoXG4gICAgICAgICAgICAgICh2OiBhbnkpID0+IHR5cGVvZiB2ICE9PSAnc3RyaW5nJyB8fCAhdi5zdGFydHNXaXRoKHRoaXMuQUREX0NVU1RPTV9WQUxVRV9QUkVGSVgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmaWx0ZXJlZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkQ3VzdG9tVmFsdWUuZW1pdCh7IGtleToga2V5ID8/ICcnLCB2YWx1ZSB9KTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoYWJsZSAmJiB0aGlzLmNvbmZpZz8ua2V5KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dEJ5S2V5W3RoaXMuY29uZmlnLmtleV0gPSAnJztcbiAgICAgIH1cbiAgICAgIHRyeSB7IHNlbGVjdC5jbG9zZSgpOyB9IGNhdGNoIHt9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEhhbmRsZSBzZWxlY3QtYWxsIHNlbnRpbmVsIGluIG11bHRpLXNlbGVjdFxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheShldmVudC52YWx1ZSkgJiYgZXZlbnQudmFsdWUuaW5jbHVkZXModGhpcy5TRUxFQ1RfQUxMX1ZBTFVFKSkge1xuICAgICAgLy8gUmVtb3ZlIHNlbnRpbmVsIGFuZCB0b2dnbGUgYWxsXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgICAgaWYgKGtleSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICAgICAgLy8gVG9nZ2xlIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgdGhpcy5vblRvZ2dsZVNlbGVjdEFsbChzZWxlY3QpO1xuICAgICAgICAvLyBFbnN1cmUgc2VudGluZWwgaXMgbm90IHByZXNlbnRcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IChjb250cm9sLnZhbHVlIGFzIGFueVtdKS5maWx0ZXIodiA9PiB2ICE9PSB0aGlzLlNFTEVDVF9BTExfVkFMVUUpO1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRG8gbm90IHByb2NlZWQgd2l0aCBub3JtYWwgY2xvc2UgbG9naWMgZm9yIHNlbGVjdC1hbGxcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTGV0IEFuZ3VsYXIgTWF0ZXJpYWwgYXV0by1jbG9zZSBmb3Igc2luZ2xlLXNlbGVjdC5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCBjbG9zZSBvbmx5IGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLlxuICAgIGNvbnN0IHNob3VsZENsb3NlID0gdGhpcy5pc011bHRpcGxlID8gISF0aGlzLmNvbmZpZz8uY2xvc2VPblNlbGVjdCA6IGZhbHNlO1xuICAgIGlmIChzaG91bGRDbG9zZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0LmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIC8vIElmIHNlYXJjaGFibGUsIGNsZWFyIHRoZSBzZWFyY2ggYWZ0ZXIgc2VsZWN0aW9uIHNvIHJlb3BlbmluZyB3b3JrcyBwcmVkaWN0YWJseVxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoYWJsZSAmJiB0aGlzLmNvbmZpZz8ua2V5KSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHRCeUtleVt0aGlzLmNvbmZpZy5rZXldID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZz8ub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uQ2hhbmdlKGV2ZW50LnZhbHVlLCBldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdjcWEtZHluYW1pYy1zZWxlY3Qgb25DaGFuZ2UgaGFuZGxlciBlcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBrZXk6IHRoaXMuY29uZmlnPy5rZXksXG4gICAgICB2YWx1ZTogZXZlbnQudmFsdWUsXG4gICAgICBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsb3NlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGUgdHJpZ2dlciBhbmQgb3V0c2lkZSBvZiB0aGUgb3BlbiBwYW5lbFxuICAgIGlmICghdGhpcy5zZWxlY3RSZWY/LnBhbmVsT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgLy8gSWYgY2xpY2sgaXMgaW5zaWRlIHRoZSBjb21wb25lbnQgaG9zdCwgaWdub3JlXG4gICAgaWYgKHRoaXMuaG9zdEVsPy5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBVc2UgY29tcG9zZWRQYXRoKCkgdG8gY2FwdHVyZSB0aGUgZXZlbnQgZGlzcGF0Y2ggcGF0aCBhdCB0aGUgdGltZSBvZiB0aGUgY2xpY2ssXG4gICAgLy8gYmVmb3JlIGFueSBET00gbXV0YXRpb25zIHRyaWdnZXJlZCBieSBzZWxlY3Rpb24tY2hhbmdlIGhhbmRsZXJzIChlLmcuIG9wdGlvbnMgbGlzdFxuICAgIC8vIHJlYnVpbGQpLiBXaXRob3V0IHRoaXMsIHdoZW4gYW4gb3B0aW9uIGlzIHVuLWNoZWNrZWQgdGhlIGNvbnN1bWVyIG1heSByZWFzc2lnblxuICAgIC8vIGNvbmZpZyAobmV3IHJlZmVyZW5jZSkgd2hpY2ggY2F1c2VzIEFuZ3VsYXIgdG8gcmUtcmVuZGVyIGFuZCBkZXRhY2ggdGhlIG9yaWdpbmFsXG4gICAgLy8gY2xpY2stdGFyZ2V0IG5vZGUsIG1ha2luZyBlbC5jb250YWlucyh0YXJnZXQpIHJldHVybiBmYWxzZSBldmVuIGZvciBpbi1wYW5lbCBjbGlja3MuXG4gICAgY29uc3QgZXZlbnRQYXRoOiBFdmVudFRhcmdldFtdID0gKGV2ZW50LmNvbXBvc2VkUGF0aCA/IGV2ZW50LmNvbXBvc2VkUGF0aCgpIDogW10pO1xuICAgIGNvbnN0IHBhbmVsRWxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWF0LXNlbGVjdC1wYW5lbCcpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGNvbnN0IGNsaWNrSW5zaWRlUGFuZWwgPSBwYW5lbEVscy5zb21lKFxuICAgICAgKGVsKSA9PiBlbC5jb250YWlucyh0YXJnZXQpIHx8IGV2ZW50UGF0aC5pbmNsdWRlcyhlbCBhcyBFdmVudFRhcmdldClcbiAgICApO1xuICAgIGlmIChjbGlja0luc2lkZVBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbGVjdFJlZi5jbG9zZSgpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRleHQgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgaGlnaGxpZ2h0UGF0dGVybi5cbiAgICogUmV0dXJucyBIVE1MIHN0cmluZyB3aXRoIGhpZ2hsaWdodGVkIHBvcnRpb25zIHdyYXBwZWQgaW4gPHNwYW4gY2xhc3M9XCJoaWdobGlnaHRcIj4uXG4gICAqL1xuICBoaWdobGlnaHRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0IHx8ICF0aGlzLmNvbmZpZz8uaGlnaGxpZ2h0UGF0dGVybikge1xuICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5jb25maWcuaGlnaGxpZ2h0UGF0dGVybjtcblxuICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbiwgdXNlIGl0IGRpcmVjdGx5XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcGF0dGVybih0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHN0cmluZyBwYXR0ZXJuIHRvIFJlZ0V4cCBpZiBuZWVkZWRcbiAgICBsZXQgcmVnZXg6IFJlZ0V4cDtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2dpJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBoaWdobGlnaHQgcGF0dGVybjonLCBwYXR0ZXJuKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVnZXggPSBwYXR0ZXJuO1xuICAgIH1cblxuICAgIC8vIEVzY2FwZSBIVE1MIGZpcnN0LCB0aGVuIGFwcGx5IGhpZ2hsaWdodGluZ1xuICAgIGNvbnN0IGVzY2FwZWQgPSB0aGlzLmVzY2FwZUh0bWwodGV4dCk7XG4gICAgcmV0dXJuIGVzY2FwZWQucmVwbGFjZShyZWdleCwgKG1hdGNoKSA9PiBgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1wcmltYXJ5XCI+JHttYXRjaH08L3NwYW4+YCk7XG4gIH1cblxuICAvKipcbiAgICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyB0byBwcmV2ZW50IFhTUy5cbiAgICovXG4gIHByaXZhdGUgZXNjYXBlSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGhpZ2hsaWdodGluZyBpcyBlbmFibGVkIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGdldCBoYXNIaWdobGlnaHRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb25maWc/LmhpZ2hsaWdodFBhdHRlcm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBhIGRvY3VtZW50LWxldmVsIGtleWJvYXJkIGxpc3RlbmVyIHRvIGhhbmRsZSBhcnJvdyBrZXkgbmF2aWdhdGlvblxuICAgKiB3aGVuIHRoZSBwYW5lbCBpcyBvcGVuIGFuZCB0aGUgc2VhcmNoIGlucHV0IGlzIG5vdCBmb2N1c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cERvY3VtZW50S2V5ZG93bkxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRvY3VtZW50S2V5ZG93bkxpc3RlbmVyKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5kb2N1bWVudEtleWRvd25MaXN0ZW5lcik7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIC8vIE9ubHkgaGFuZGxlIGlmIHBhbmVsIGlzIG9wZW5cbiAgICAgIGlmICghdGhpcy5zZWxlY3RSZWY/LnBhbmVsT3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE9ubHkgaGFuZGxlIGFycm93IGtleXMgYW5kIEVudGVyXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnQXJyb3dVcCcgJiYgZXZlbnQua2V5ICE9PSAnQXJyb3dEb3duJyAmJiBldmVudC5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBEb24ndCBoYW5kbGUgaWYgdGhlIHNlYXJjaCBpbnB1dCBpcyBmb2N1c2VkIChpdCBoYXMgaXRzIG93biBoYW5kbGVyKVxuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndHMtc2VsZWN0LXNlYXJjaC1pbnB1dCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRG9uJ3QgaGFuZGxlIGlmIHVzZXIgaXMgdHlwaW5nIGluIGFub3RoZXIgaW5wdXRcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIChhY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBldmVudCBpcyByZWxhdGVkIHRvIG91ciBzZWxlY3QgcGFuZWxcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwnKTtcbiAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBPbmx5IGhhbmRsZSBpZiB0aGUgZXZlbnQgdGFyZ2V0IGlzIHdpdGhpbiBvdXIgY29tcG9uZW50IG9yIHRoZSBwYW5lbFxuICAgICAgY29uc3QgaXNJbk91ckNvbXBvbmVudCA9IHRoaXMuaG9zdEVsPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyh0YXJnZXQpIHx8IHBhbmVsLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgICBpZiAoIWlzSW5PdXJDb21wb25lbnQgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5ICYmIHRhcmdldCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIGFycm93IGtleXMgZm9yIG5hdmlnYXRpb25cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGFuIG9wdGlvbiBpcyBjdXJyZW50bHkgZm9jdXNlZCAtIGlmIHNvLCBsZXQgQW5ndWxhciBNYXRlcmlhbCBoYW5kbGUgaXRcbiAgICAgICAgY29uc3QgZm9jdXNlZE9wdGlvbiA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJy5tYXQtb3B0aW9uOmZvY3VzJyk7XG4gICAgICAgIGlmIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgICAgLy8gTGV0IEFuZ3VsYXIgTWF0ZXJpYWwgaGFuZGxlIGl0IG5hdHVyYWxseSB3aGVuIGFuIG9wdGlvbiBpcyBmb2N1c2VkXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBPbmx5IGludGVyY2VwdCB3aGVuIG5vIG9wdGlvbiBpcyBmb2N1c2VkIChlLmcuLCBhZnRlciBibHVycmluZyBzZWFyY2ggaW5wdXQpXG4gICAgICAgIC8vIFN0b3AgdGhlIGV2ZW50IGNvbXBsZXRlbHkgdG8gcHJldmVudCBBbmd1bGFyIE1hdGVyaWFsIGZyb20gYWxzbyBwcm9jZXNzaW5nIGl0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZU9wdGlvbnMoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIEVudGVyIGZvciBzZWxlY3Rpb25cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb24gPSBwYW5lbC5xdWVyeVNlbGVjdG9yKCcubWF0LW9wdGlvbi5tYXQtYWN0aXZlOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCknKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cExvYWRNb3JlT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gT25seSBpZiBjb25zdW1lciBpbmRpY2F0ZXMgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZVxuICAgIGlmICghdGhpcy5jb25maWc/Lmhhc01vcmUpIHJldHVybjtcbiAgICAvLyBGaW5kIHNlbnRpbmVsIG9wdGlvbiByZW5kZXJlZCBpbiB0aGUgb3BlbiBwYW5lbFxuICAgIGNvbnN0IHNlbnRpbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubG9hZC1tb3JlLXNlbnRpbmVsJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghc2VudGluZWwpIHJldHVybjtcbiAgICBpZiAodGhpcy5sb2FkTW9yZU9ic2VydmVyKSB7XG4gICAgICB0cnkgeyB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOyB9IGNhdGNoIHt9XG4gICAgICB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgc2VudGluZWwncyBjbG9zZXN0IHBhbmVsIGFzIHRoZSByb290IHRvIGF2b2lkIHBpY2tpbmcgYSB3cm9uZyBwYW5lbFxuICAgIGNvbnN0IHBhbmVsUm9vdCA9IHNlbnRpbmVsLmNsb3Nlc3QoJy5tYXQtc2VsZWN0LXBhbmVsJykgYXMgRWxlbWVudCB8IG51bGw7XG4gICAgdGhpcy5sb2FkTW9yZU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgLy8gT25seSB0cmlnZ2VyIHdoZW4gc2VudGluZWwganVzdCBjYW1lIGludG8gdmlldyAodXNlciBzY3JvbGxlZCB0byBib3R0b20pLlxuICAgICAgICAgIC8vIElmIGl0IHdhcyBhbHJlYWR5IGluIHZpZXcgKGUuZy4gYWZ0ZXIgbmV3IGRhdGEgYXBwZW5kZWQpLCBkbyBub3QgdHJpZ2dlciBhZ2Fpbi5cbiAgICAgICAgICBjb25zdCB3YXNPdXRPZlZpZXcgPSAhdGhpcy5zZW50aW5lbEN1cnJlbnRseUluVmlldztcbiAgICAgICAgICB0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3ID0gdHJ1ZTtcbiAgICAgICAgICBpZiAod2FzT3V0T2ZWaWV3ICYmIHRoaXMuaGFzU2Nyb2xsZWRTaW5jZU9wZW4gJiYgIXRoaXMubG9hZGluZ01vcmUgJiYgdGhpcy5jb25maWc/Lmhhc01vcmUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ01vcmUgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldIHx8ICcnO1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgICAgICAgIHRyeSB7IHRoaXMuY29uZmlnLm9uTG9hZE1vcmU/LihxKTsgfSBjYXRjaCB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZW50aW5lbCBsZWZ0IHZpZXcgKHVzZXIgc2Nyb2xsZWQgdXApIOKAkyBhbGxvdyBuZXh0IGxvYWQgbW9yZSB3aGVuIHRoZXkgc2Nyb2xsIGRvd24gYWdhaW5cbiAgICAgICAgICB0aGlzLnNlbnRpbmVsQ3VycmVudGx5SW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7IHJvb3Q6IHBhbmVsUm9vdCwgdGhyZXNob2xkOiAwLjEgfSk7XG4gICAgdHJ5IHsgdGhpcy5sb2FkTW9yZU9ic2VydmVyLm9ic2VydmUoc2VudGluZWwpOyB9IGNhdGNoIHt9XG4gIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3RcIj5cbiAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8bGFiZWwgKm5nSWY9XCJjb25maWcubGFiZWxcIlxuICAgICAgY2xhc3M9XCJmb3JtLWxhYmVsIGNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1ibG9jayBjcWEtbGVhZGluZy1bMS40XSBjcWEtbWItMlwiPnt7XG4gICAgICBjb25maWcubGFiZWwgfX08L2xhYmVsPlxuICAgIDxtYXQtZm9ybS1maWVsZCAjaG9zdCBjbGFzcz1cIm1hdC1zZWxlY3QtY3VzdG9tIGNxYS13LWZ1bGxcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgPG1hdC1zZWxlY3QgI3NlbGVjdFJlZj1cIm1hdFNlbGVjdFwiIFtwbGFjZWhvbGRlcl09XCJkaXNwbGF5UGxhY2Vob2xkZXJcIiBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiXG4gICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmcgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29uZmlnLmtleVwiXG4gICAgICAgIChvcGVuZWRDaGFuZ2UpPVwib25TZWxlY3RPcGVuZWRDaGFuZ2UoJGV2ZW50LCBzZWxlY3RSZWYpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQsIHNlbGVjdFJlZilcIj5cbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cIiFpc011bHRpcGxlICYmIHNpbmdsZVNlbGVjdGVkRGlzcGxheUxhYmVsXCI+XG4gICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJzaW5nbGVTZWxlY3RlZERpc3BsYXlMYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJjb25maWcuc2VhcmNoYWJsZVwiIGNsYXNzPVwidHMtc2VsZWN0LXNlYXJjaFwiIGRpc2FibGVkPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRzLXNlbGVjdC1zZWFyY2gtaW5wdXQgY3FhLXRleHQtYmxhY2stMTAwXCIgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwic2VhcmNoVGV4dEJ5S2V5W2NvbmZpZy5rZXldIHx8ICcnXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblNlYXJjaElucHV0S2V5ZG93bigkZXZlbnQpXCIgKGlucHV0KT1cIm9uU2VhcmNoKGNvbmZpZy5rZXksICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgLz5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICBcbiAgICAgICAgPG1hdC1vcHRpb24gW25nQ2xhc3NdPVwieydjaGVja21hcmsnOiBjb25maWcub3B0aW9uU3R5bGUgPT09ICdjaGVja21hcmsnLCdjaGVja2JveCc6IGNvbmZpZy5vcHRpb25TdHlsZSAhPT0gJ2NoZWNrbWFyaycsJ21hdC1zZWxlY3RlZCc6IGFsbFNlbGVjdGVkfVwiIFtjbGFzc109XCJjb25maWcub3B0aW9uU3R5bGUgPT0gJ2NoZWNrbWFyaycgPyAnY2hlY2ttYXJrJyA6ICdjaGVja2JveCdcIiAqbmdJZj1cImlzTXVsdGlwbGUgJiYgY29uZmlnLnNob3dTZWxlY3RBbGxcIiBbdmFsdWVdPVwiU0VMRUNUX0FMTF9WQUxVRVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIHNlbGVjdEFsbERlZmF1bHRUcGxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS13LTQgY3FhLWgtNCBjcWEtZmxleC1zaHJpbmstMCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNEMUQ1REJdIGNxYS1tci0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImFsbFNlbGVjdGVkID8geydiYWNrZ3JvdW5kLWNvbG9yJzonIzRGNDZFNScsJ2JvcmRlci1jb2xvcic6JyM0RjQ2RTUnfSA6IHt9XCI+XG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFsbFNlbGVjdGVkXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbWluLXctMFwiPnt7IGNvbmZpZy5zZWxlY3RBbGxMYWJlbCB8fCAnQWxsJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdEFsbERlZmF1bHRUcGw+XG4gICAgICAgICAgICB7eyBjb25maWcuc2VsZWN0QWxsTGFiZWwgfHwgJ0FsbCcgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJzaG93QWRkQ3VzdG9tT3B0aW9uXCIgW3ZhbHVlXT1cImFkZEN1c3RvbVNlbnRpbmVsVmFsdWVcIiBjbGFzcz1cImNxYS10ZXh0LXByaW1hcnlcIj5cbiAgICAgICAgICBOZXdcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgIDxtYXQtb3B0aW9uIFtjbGFzc109XCJjb25maWcub3B0aW9uU3R5bGUgPT0gJ2NoZWNrbWFyaycgPyAnY2hlY2ttYXJrJyA6ICdjaGVja2JveCdcIiAqbmdGb3I9XCJsZXQgb3B0IG9mIGZpbHRlcmVkT3B0aW9ucyhjb25maWcpXCIgW3ZhbHVlXT1cImdldE9wdGlvblZhbHVlKG9wdClcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmlzQ29tcGFyZVJ1bnNcIj4gICBcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIGNvbXBhcmVSdW5zRGVmYXVsdE9wdGlvblRwbFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtdy1mdWxsIGNxYS1jb21wYXJlLXJ1bnMtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdy00IGNxYS1oLTQgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXJvdW5kZWQtWzRweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRDFENURCXSBjcWEtbXItMiBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtYm9yZGVyLXNvbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiaXNPcHRpb25TZWxlY3RlZChvcHQpID8geydiYWNrZ3JvdW5kLWNvbG9yJzonIzRGNDZFNScsJ2JvcmRlci1jb2xvcic6JyM0RjQ2RTUnfSA6IHt9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc09wdGlvblNlbGVjdGVkKG9wdClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtbWluLXctMCBjcWEtY29tcGFyZS1ydW5zXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNIaWdobGlnaHRpbmdcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhpZ2hsaWdodFRleHQob3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSlcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0hpZ2hsaWdodGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLWNvbXBhcmUtcnVuc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHQucnVuTnVtYmVyTGFiZWwgJiYgb3B0LnJ1bkRhdGVMYWJlbDsgZWxzZSBjaGVja2JveERlZmF1bHRMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJvcHQuc3RhdHVzQ29sb3IgfHwgbnVsbFwiPnt7IG9wdC5ydW5OdW1iZXJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXVwiPiB7eyBvcHQucnVuRGF0ZUxhYmVsIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hEZWZhdWx0TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLWNvbXBhcmUtcnVuc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0LmR1cmF0aW9uRm9ybWF0dGVkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1zdGFydCBjcWEtZ2FwLTEgY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtZmxleC1zaHJpbmstMCBjcWEtd2hpdGVzcGFjZS1ub3dyYXAgY3FhLW1heC13LVs4MHB4XVwiIFxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnY3FhLW1pbi13LVs4MnB4XSc6IG9wdD8uaGFzSG91clJ1bixcbiAgICAgICAgICAgICAgICAgICAgJ2NxYS1taW4tdy1bNjZweF0nOiAhb3B0Py5oYXNIb3VyUnVuICYmIG9wdD8uaGFzTWludXRlUnVuLFxuICAgICAgICAgICAgICAgICAgICAnY3FhLW1pbi13LVs0MHB4XSc6ICFvcHQ/Lmhhc0hvdXJSdW4gJiYgIW9wdD8uaGFzTWludXRlUnVuXG4gICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLW1pbi13LVsxMnB4XSBjcWEtbWF4LXctWzEycHhdXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiNlwiIHI9XCI0LjVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMVwiLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDMuNVY2TDcuNSA3XCIgc3Ryb2tlPVwiIzRCNTU2M1wiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdC5kdXJhdGlvbkZvcm1hdHRlZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb21wYXJlUnVuc0RlZmF1bHRPcHRpb25UcGw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWNvbXBhcmUtcnVucy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLWNvbXBhcmUtcnVuc1wiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0hpZ2hsaWdodGluZ1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzSGlnaGxpZ2h0aW5nXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS1jb21wYXJlLXJ1bnNcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdC5ydW5OdW1iZXJMYWJlbCAmJiBvcHQucnVuRGF0ZUxhYmVsOyBlbHNlIGRlZmF1bHRMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwib3B0LnN0YXR1c0NvbG9yIHx8IG51bGxcIj57eyBvcHQucnVuTnVtYmVyTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdXCI+IHt7IG9wdC5ydW5EYXRlTGFiZWwgfX0mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS1jb21wYXJlLXJ1bnNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJvcHQuc3RhdHVzQ29sb3IgfHwgbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHQuZHVyYXRpb25Gb3JtYXR0ZWRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1nYXAtMSBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2QjcyODBdIGNxYS1mbGV4LXNocmluay0wIGNxYS13aGl0ZXNwYWNlLW5vd3JhcCBjcWEtbWF4LXctWzgwcHhdXCIgXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdjcWEtbWluLXctWzgycHhdJzogb3B0Py5oYXNIb3VyUnVuLFxuICAgICAgICAgICAgICAgICAgICAnY3FhLW1pbi13LVs2NnB4XSc6ICFvcHQ/Lmhhc0hvdXJSdW4gJiYgb3B0Py5oYXNNaW51dGVSdW4sXG4gICAgICAgICAgICAgICAgICAgICdjcWEtbWluLXctWzQwcHhdJzogIW9wdD8uaGFzSG91clJ1biAmJiAhb3B0Py5oYXNNaW51dGVSdW5cbiAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtbWluLXctWzEycHhdIGNxYS1tYXgtdy1bMTJweF1cIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCI2XCIgcj1cIjQuNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIxXCIvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMy41VjZMNy41IDdcIiBzdHJva2U9XCIjNEI1NTYzXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgb3B0LmR1cmF0aW9uRm9ybWF0dGVkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbmZpZy5pc0NvbXBhcmVSdW5zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlQ2hlY2tib3hTdHlsZTsgZWxzZSBkZWZhdWx0T3B0aW9uVHBsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXctNCBjcWEtaC00IGNxYS1mbGV4LXNocmluay0wIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0QxRDVEQl0gY3FhLW1yLTIgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWJvcmRlci1zb2xpZFwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJpc09wdGlvblNlbGVjdGVkKG9wdCkgPyB7J2JhY2tncm91bmQtY29sb3InOicjNEY0NkU1JywnYm9yZGVyLWNvbG9yJzonIzRGNDZFNSd9IDoge31cIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc09wdGlvblNlbGVjdGVkKG9wdClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgM0w0LjUgOC41TDIgNlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gV2hlbiBkaXNwbGF5TGFiZWxBc0lubmVySHRtbCBpcyB0cnVlLCByZW5kZXIgbGFiZWwgYXMgcmF3IEhUTUwgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbWluLXctMFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWc/LmRpc3BsYXlMYWJlbEFzSW5uZXJIdG1sXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm9wdC5sYWJlbCA/PyBvcHQubmFtZSA/PyBvcHQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLSBPdGhlcndpc2UgdXNlIG5vcm1hbC9oaWdobGlnaHRlZCB0ZXh0IHJlbmRlcmluZyAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1taW4tdy0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb25maWc/LmRpc3BsYXlMYWJlbEFzSW5uZXJIdG1sICYmIGhhc0hpZ2hsaWdodGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW1pbi13LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbmZpZz8uZGlzcGxheUxhYmVsQXNJbm5lckh0bWwgJiYgIWhhc0hpZ2hsaWdodGluZ1wiPlxuICAgICAgICAgICAgICAgICAge3sgb3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcHRpb25UcGw+XG4gICAgICAgICAgICAgIDwhLS0gV2hlbiBkaXNwbGF5TGFiZWxBc0lubmVySHRtbCBpcyB0cnVlLCByZW5kZXIgbGFiZWwgYXMgcmF3IEhUTUwgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnPy5kaXNwbGF5TGFiZWxBc0lubmVySHRtbFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwib3B0LmxhYmVsID8/IG9wdC5uYW1lID8/IG9wdC52YWx1ZVwiPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwhLS0gT3RoZXJ3aXNlIHVzZSBub3JtYWwvaGlnaGxpZ2h0ZWQgdGV4dCByZW5kZXJpbmcgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbmZpZz8uZGlzcGxheUxhYmVsQXNJbm5lckh0bWwgJiYgaGFzSGlnaGxpZ2h0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUpXCI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29uZmlnPy5kaXNwbGF5TGFiZWxBc0lubmVySHRtbCAmJiAhaGFzSGlnaGxpZ2h0aW5nXCI+XG4gICAgICAgICAgICAgICAge3sgb3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIFxuICAgICAgICA8IS0tIE5vIHJlc3VsdHMgc3RhdGUgKG9ubHkgd2hlbiBub3QgbG9hZGluZyBhbmQgbm8gb3B0aW9ucykgLS0+XG4gICAgICAgIDxtYXQtb3B0aW9uIGRpc2FibGVkICpuZ0lmPVwiIShjb25maWc/Lm9wdGlvbnM/Lmxlbmd0aCB8fCAwKSAmJiAhKGNvbmZpZz8uaXNMb2FkaW5nIHx8IGxvYWRpbmdNb3JlKVwiPlxuICAgICAgICAgIE5vIHJlc3VsdHNcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8IS0tIEluZmluaXRlIHNjcm9sbCBzZW50aW5lbCAoc2VydmVyU2VhcmNoIG9yIGV4cGxpY2l0IGhhc01vcmUpIC0tPlxuICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZCBjbGFzcz1cImxvYWQtbW9yZS1zZW50aW5lbFwiICpuZ0lmPVwiY29uZmlnPy5oYXNNb3JlXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nTW9yZSB8fCBjb25maWc/LmlzTG9hZGluZ1wiPkxvYWRpbmcuLi48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ01vcmUgJiYgIWNvbmZpZz8uaXNMb2FkaW5nXCI+U2Nyb2xsIHRvIGxvYWQgbW9yZeKApjwvc3Bhbj5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgIDwhLS0gSW5saW5lIHNwaW5uZXIgc2hvd24gd2hlbiBsb2FkaW5nIG1vcmUgKGluZmluaXRlIHNjcm9sbCkgb3Igd2hlbiBjb25maWcuaXNMb2FkaW5nIGlzIHRydWUgLS0+XG4gICAgICAgIDxzdmcgKm5nSWY9XCJsb2FkaW5nTW9yZSB8fCBjb25maWc/LmlzTG9hZGluZ1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIiBhcmlhLWxhYmVsPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBzdHJva2U9XCIjRTVFN0VCXCIgc3Ryb2tlLXdpZHRoPVwiNlwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNDUgMjVhMjAgMjAgMCAwIDAtMjAtMjBcIiBzdHJva2U9XCIjNEY0NkU1XCIgc3Ryb2tlLXdpZHRoPVwiNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPlxuICAgICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT1cInRyYW5zZm9ybVwiIHR5cGU9XCJyb3RhdGVcIiBmcm9tPVwiMCAyNSAyNVwiIHRvPVwiMzYwIDI1IDI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cj1cIjAuOHNcIiByZXBlYXRDb3VudD1cImluZGVmaW5pdGVcIi8+XG4gICAgICAgICAgPC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzBBMEEwQVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/radio";
|
|
5
|
+
import * as i2 from "@angular/material/icon";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
export class RadioCardGroupComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
/** Choices to render (order preserved). */
|
|
10
|
+
this.options = [];
|
|
11
|
+
/** When true, cards wrap to the next line (e.g. many platform targets). */
|
|
12
|
+
this.wrap = false;
|
|
13
|
+
this.disabled = false;
|
|
14
|
+
/** Emits the same event as `mat-radio-group` for compatibility with existing handlers. */
|
|
15
|
+
this.selectionChange = new EventEmitter();
|
|
16
|
+
this.value = null;
|
|
17
|
+
this.onChange = () => { };
|
|
18
|
+
this.onTouched = () => { };
|
|
19
|
+
}
|
|
20
|
+
writeValue(obj) {
|
|
21
|
+
this.value = obj == null ? null : String(obj);
|
|
22
|
+
}
|
|
23
|
+
registerOnChange(fn) {
|
|
24
|
+
this.onChange = fn;
|
|
25
|
+
}
|
|
26
|
+
registerOnTouched(fn) {
|
|
27
|
+
this.onTouched = fn;
|
|
28
|
+
}
|
|
29
|
+
setDisabledState(isDisabled) {
|
|
30
|
+
this.disabled = isDisabled;
|
|
31
|
+
}
|
|
32
|
+
trackByValue(_index, opt) {
|
|
33
|
+
return opt.value;
|
|
34
|
+
}
|
|
35
|
+
get hasAnyIcon() {
|
|
36
|
+
return (this.options || []).some((o) => !!o.icon);
|
|
37
|
+
}
|
|
38
|
+
onRadioChange(event) {
|
|
39
|
+
if (this.disabled) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const next = event.value != null ? String(event.value) : null;
|
|
43
|
+
this.value = next;
|
|
44
|
+
this.onChange(next);
|
|
45
|
+
this.onTouched();
|
|
46
|
+
this.selectionChange.emit(event);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
RadioCardGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RadioCardGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
+
RadioCardGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: RadioCardGroupComponent, selector: "cqa-radio-card-group", inputs: { options: "options", wrap: "wrap", disabled: "disabled" }, outputs: { selectionChange: "selectionChange" }, host: { classAttribute: "cqa-ui-root cqa-block" }, providers: [
|
|
51
|
+
{
|
|
52
|
+
provide: NG_VALUE_ACCESSOR,
|
|
53
|
+
useExisting: forwardRef(() => RadioCardGroupComponent),
|
|
54
|
+
multi: true
|
|
55
|
+
}
|
|
56
|
+
], ngImport: i0, template: "<mat-radio-group\n class=\"cqa-flex cqa-items-stretch cqa-radio-group\"\n [ngClass]=\"wrap ? 'cqa-flex-wrap cqa-gap-2' : 'cqa-gap-3'\"\n [value]=\"value\"\n (change)=\"onRadioChange($event)\"\n [disabled]=\"disabled\"\n>\n <label\n *ngFor=\"let opt of options; trackBy: trackByValue\"\n class=\"cqa-radio-card-option qqa-m-0 cqa-flex cqa-cursor-pointer cqa-items-center cqa-gap-1.5 cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-[#e5e7eb] cqa-py-2 cqa-text-[13px] cqa-text-[#374151] hover:cqa-border-[#6366f1]\"\n [ngClass]=\"hasAnyIcon ? 'cqa-px-3' : 'cqa-px-4'\"\n >\n <mat-radio-button [value]=\"opt.value\" class=\"!cqa-pr-0\"></mat-radio-button>\n <mat-icon *ngIf=\"opt.icon\" class=\"cqa-h-[18px] cqa-w-[18px] cqa-text-[18px] cqa-text-[#6366f1]\">{{ opt.icon }}</mat-icon>\n <span class=\"cqa-whitespace-nowrap\">{{ opt.label }}</span>\n </label>\n</mat-radio-group>\n", components: [{ type: i1.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RadioCardGroupComponent, decorators: [{
|
|
58
|
+
type: Component,
|
|
59
|
+
args: [{ selector: 'cqa-radio-card-group', host: { class: 'cqa-ui-root cqa-block' }, providers: [
|
|
60
|
+
{
|
|
61
|
+
provide: NG_VALUE_ACCESSOR,
|
|
62
|
+
useExisting: forwardRef(() => RadioCardGroupComponent),
|
|
63
|
+
multi: true
|
|
64
|
+
}
|
|
65
|
+
], template: "<mat-radio-group\n class=\"cqa-flex cqa-items-stretch cqa-radio-group\"\n [ngClass]=\"wrap ? 'cqa-flex-wrap cqa-gap-2' : 'cqa-gap-3'\"\n [value]=\"value\"\n (change)=\"onRadioChange($event)\"\n [disabled]=\"disabled\"\n>\n <label\n *ngFor=\"let opt of options; trackBy: trackByValue\"\n class=\"cqa-radio-card-option qqa-m-0 cqa-flex cqa-cursor-pointer cqa-items-center cqa-gap-1.5 cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-[#e5e7eb] cqa-py-2 cqa-text-[13px] cqa-text-[#374151] hover:cqa-border-[#6366f1]\"\n [ngClass]=\"hasAnyIcon ? 'cqa-px-3' : 'cqa-px-4'\"\n >\n <mat-radio-button [value]=\"opt.value\" class=\"!cqa-pr-0\"></mat-radio-button>\n <mat-icon *ngIf=\"opt.icon\" class=\"cqa-h-[18px] cqa-w-[18px] cqa-text-[18px] cqa-text-[#6366f1]\">{{ opt.icon }}</mat-icon>\n <span class=\"cqa-whitespace-nowrap\">{{ opt.label }}</span>\n </label>\n</mat-radio-group>\n", styles: [] }]
|
|
66
|
+
}], propDecorators: { options: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}], wrap: [{
|
|
69
|
+
type: Input
|
|
70
|
+
}], disabled: [{
|
|
71
|
+
type: Input
|
|
72
|
+
}], selectionChange: [{
|
|
73
|
+
type: Output
|
|
74
|
+
}] } });
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tY2FyZC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3JhZGlvLWNhcmQtZ3JvdXAvcmFkaW8tY2FyZC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3JhZGlvLWNhcmQtZ3JvdXAvcmFkaW8tY2FyZC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBaUJ6RSxNQUFNLE9BQU8sdUJBQXVCO0lBYnBDO1FBY0UsMkNBQTJDO1FBQ2xDLFlBQU8sR0FBc0IsRUFBRSxDQUFDO1FBRXpDLDJFQUEyRTtRQUNsRSxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQiwwRkFBMEY7UUFDaEYsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUUvRCxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUVwQixhQUFRLEdBQStCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNoRCxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0tBb0MxQztJQWxDQyxVQUFVLENBQUMsR0FBOEI7UUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBOEI7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYyxFQUFFLEdBQW9CO1FBQy9DLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBcUI7UUFDakMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7b0hBbERVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHVOQVJ2QjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO1lBQ3RELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwQkNoQkgsZzVCQWlCQTsyRkRDYSx1QkFBdUI7a0JBYm5DLFNBQVM7K0JBQ0Usc0JBQXNCLFFBRzFCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLGFBQzdCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFJUSxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0ksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRSYWRpb0NoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7IFJhZGlvQ2FyZE9wdGlvbiB9IGZyb20gJy4vcmFkaW8tY2FyZC1vcHRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtcmFkaW8tY2FyZC1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1jYXJkLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290IGNxYS1ibG9jaycgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYWRpb0NhcmRHcm91cENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0NhcmRHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqIENob2ljZXMgdG8gcmVuZGVyIChvcmRlciBwcmVzZXJ2ZWQpLiAqL1xuICBASW5wdXQoKSBvcHRpb25zOiBSYWRpb0NhcmRPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBXaGVuIHRydWUsIGNhcmRzIHdyYXAgdG8gdGhlIG5leHQgbGluZSAoZS5nLiBtYW55IHBsYXRmb3JtIHRhcmdldHMpLiAqL1xuICBASW5wdXQoKSB3cmFwID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiogRW1pdHMgdGhlIHNhbWUgZXZlbnQgYXMgYG1hdC1yYWRpby1ncm91cGAgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBoYW5kbGVycy4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWF0UmFkaW9DaGFuZ2U+KCk7XG5cbiAgdmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2OiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZShvYmo6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gb2JqID09IG51bGwgPyBudWxsIDogU3RyaW5nKG9iaik7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodjogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgdHJhY2tCeVZhbHVlKF9pbmRleDogbnVtYmVyLCBvcHQ6IFJhZGlvQ2FyZE9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNBbnlJY29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5vcHRpb25zIHx8IFtdKS5zb21lKChvKSA9PiAhIW8uaWNvbik7XG4gIH1cblxuICBvblJhZGlvQ2hhbmdlKGV2ZW50OiBNYXRSYWRpb0NoYW5nZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSBldmVudC52YWx1ZSAhPSBudWxsID8gU3RyaW5nKGV2ZW50LnZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy52YWx1ZSA9IG5leHQ7XG4gICAgdGhpcy5vbkNoYW5nZShuZXh0KTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8bWF0LXJhZGlvLWdyb3VwXG4gIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0cmV0Y2ggY3FhLXJhZGlvLWdyb3VwXCJcbiAgW25nQ2xhc3NdPVwid3JhcCA/ICdjcWEtZmxleC13cmFwIGNxYS1nYXAtMicgOiAnY3FhLWdhcC0zJ1wiXG4gIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gIChjaGFuZ2UpPVwib25SYWRpb0NoYW5nZSgkZXZlbnQpXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbj5cbiAgPGxhYmVsXG4gICAgKm5nRm9yPVwibGV0IG9wdCBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5VmFsdWVcIlxuICAgIGNsYXNzPVwiY3FhLXJhZGlvLWNhcmQtb3B0aW9uIHFxYS1tLTAgY3FhLWZsZXggY3FhLWN1cnNvci1wb2ludGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLXJvdW5kZWQtWzhweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNlNWU3ZWJdIGNxYS1weS0yIGNxYS10ZXh0LVsxM3B4XSBjcWEtdGV4dC1bIzM3NDE1MV0gaG92ZXI6Y3FhLWJvcmRlci1bIzYzNjZmMV1cIlxuICAgIFtuZ0NsYXNzXT1cImhhc0FueUljb24gPyAnY3FhLXB4LTMnIDogJ2NxYS1weC00J1wiXG4gID5cbiAgICA8bWF0LXJhZGlvLWJ1dHRvbiBbdmFsdWVdPVwib3B0LnZhbHVlXCIgY2xhc3M9XCIhY3FhLXByLTBcIj48L21hdC1yYWRpby1idXR0b24+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwib3B0Lmljb25cIiBjbGFzcz1cImNxYS1oLVsxOHB4XSBjcWEtdy1bMThweF0gY3FhLXRleHQtWzE4cHhdIGNxYS10ZXh0LVsjNjM2NmYxXVwiPnt7IG9wdC5pY29uIH19PC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS13aGl0ZXNwYWNlLW5vd3JhcFwiPnt7IG9wdC5sYWJlbCB9fTwvc3Bhbj5cbiAgPC9sYWJlbD5cbjwvbWF0LXJhZGlvLWdyb3VwPlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tY2FyZC1vcHRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3JhZGlvLWNhcmQtZ3JvdXAvcmFkaW8tY2FyZC1vcHRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUmFkaW9DYXJkT3B0aW9uIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIE1hdGVyaWFsIGljb24gbGlnYXR1cmU7IG9taXQgZm9yIHRleHQtb25seSBjYXJkcy4gKi9cbiAgaWNvbj86IHN0cmluZztcbn1cbiJdfQ==
|