@arsedizioni/ars-utils 18.3.60 → 18.3.61

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.
Files changed (92) hide show
  1. package/esm2022/clipper.common/common/common.module.mjs +4 -4
  2. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +3 -3
  3. package/esm2022/clipper.common/common/services/clipper.service.mjs +16 -13
  4. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +3 -3
  5. package/esm2022/clipper.ui/ui/document/document.component.mjs +3 -3
  6. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +3 -3
  7. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +3 -3
  8. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +3 -3
  9. package/esm2022/clipper.ui/ui/references/references.component.mjs +3 -3
  10. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +3 -3
  11. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +3 -3
  12. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +3 -3
  13. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +3 -3
  14. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +3 -3
  15. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +3 -3
  16. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +3 -3
  17. package/esm2022/core/core.module.mjs +8 -8
  18. package/esm2022/core/dateFnsAdapter.mjs +3 -3
  19. package/esm2022/core/directives/autoFocusDirective.mjs +3 -3
  20. package/esm2022/core/directives/changeDateIntervalDirective.mjs +3 -3
  21. package/esm2022/core/directives/copyClipboardDirective.mjs +4 -4
  22. package/esm2022/core/directives/validators.mjs +33 -33
  23. package/esm2022/core/pipes/format.pipe.mjs +4 -4
  24. package/esm2022/core/pipes/replace.pipe.mjs +4 -4
  25. package/esm2022/core/pipes/safe-html.pipe.mjs +4 -4
  26. package/esm2022/core/pipes/safe-url.pipe.mjs +4 -4
  27. package/esm2022/core/pipes/search-callback.pipe.mjs +3 -3
  28. package/esm2022/core/pipes/search-filter.pipe.mjs +4 -4
  29. package/esm2022/core/services/broadcast.service.mjs +3 -3
  30. package/esm2022/core/services/environment.service.mjs +3 -3
  31. package/esm2022/core/services/screen.service.mjs +3 -3
  32. package/esm2022/core/services/theme.service.mjs +3 -3
  33. package/esm2022/evolution.common/common/common.module.mjs +4 -4
  34. package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +3 -3
  35. package/esm2022/evolution.common/common/services/evolution.service.mjs +14 -11
  36. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +6 -6
  37. package/esm2022/help/help.module.mjs +4 -4
  38. package/esm2022/help/services/help.service.mjs +3 -3
  39. package/esm2022/support.common/common/common.module.mjs +4 -4
  40. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +3 -3
  41. package/esm2022/support.common/common/services/support.service.mjs +10 -8
  42. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
  43. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +3 -3
  44. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +3 -3
  45. package/esm2022/tinymce/tinymce.module.mjs +4 -4
  46. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
  47. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
  48. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
  49. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
  50. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
  51. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
  52. package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +3 -3
  53. package/esm2022/ui/ui/paginatorIntl.mjs +3 -3
  54. package/esm2022/ui/ui/services/dialog.service.mjs +3 -3
  55. package/esm2022/ui/ui/services/ui.service.mjs +3 -3
  56. package/esm2022/ui/ui/ui.module.mjs +4 -4
  57. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +3 -3
  58. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +3 -3
  59. package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +3 -3
  60. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +3 -3
  61. package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +3 -3
  62. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +3 -3
  63. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
  64. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
  65. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
  66. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
  67. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
  68. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
  69. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
  70. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +6 -6
  71. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
  72. package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +3 -3
  73. package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +3 -3
  74. package/esm2022/ui.application/ui/ui.module.mjs +4 -4
  75. package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +3 -3
  76. package/esm2022/ui.oauth/ui/ui.module.mjs +4 -4
  77. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +22 -19
  78. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  79. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +39 -39
  80. package/fesm2022/arsedizioni-ars-utils-core.mjs +89 -89
  81. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +20 -17
  82. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  83. package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
  84. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +16 -14
  85. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  86. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
  87. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
  88. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
  89. package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
  90. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
  91. package/package.json +7 -7
  92. package/ui.application/ui/components/chips-selector/chips-selector.component.d.ts +1 -1
@@ -1,11 +1,11 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class ArsClipperCommonModule {
4
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ArsClipperCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: ArsClipperCommonModule }); }
6
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ArsClipperCommonModule }); }
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ArsClipperCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: ArsClipperCommonModule }); }
6
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ArsClipperCommonModule }); }
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ArsClipperCommonModule, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ArsClipperCommonModule, decorators: [{
9
9
  type: NgModule
10
10
  }] });
11
11
  // Other exports
@@ -79,10 +79,10 @@ export class ClipperAuthInterceptor {
79
79
  }
80
80
  return request;
81
81
  }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClipperAuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
83
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClipperAuthInterceptor }); }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperAuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
83
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperAuthInterceptor }); }
84
84
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClipperAuthInterceptor, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperAuthInterceptor, decorators: [{
86
86
  type: Injectable
87
87
  }] });
88
88
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbi9jb21tb24vaW50ZXJjZXB0b3JzL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUF3RCxNQUFNLHNCQUFzQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQWMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUc3RCxNQUFNLE9BQU8sc0JBQXNCO0lBRG5DO1FBRVUsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsa0JBQWEsR0FBVyxDQUFDLENBQUMsQ0FBQztLQXdGcEM7SUF0RkMsU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sR0FBRyxP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QixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGlCQUFpQixDQUN2QixPQUF5QixFQUN6QixRQUF1QixJQUFJO1FBRTNCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxLQUFLO2dCQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25ELElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUNuQixVQUFVLEVBQUU7d0JBQ1YsYUFBYSxFQUFFLFNBQVMsR0FBRyxLQUFLO3dCQUNoQyxhQUFhLEVBQUUsYUFBYTtxQkFDN0I7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzhHQTFGVSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQnJvYWRjYXN0U2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VydmljZUZsYWdzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyTWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XHJcbmltcG9ydCB7IENsaXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2xpcHBlci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJBdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIHByaXZhdGUgY2xpcHBlclNlcnZpY2UgPSBpbmplY3QoQ2xpcHBlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBsYXN0RXJyb3JUaW1lOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgaW50ZXJjZXB0KFxyXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgaWYgKHJlcXVlc3QudXJsLnN0YXJ0c1dpdGgodGhpcy5jbGlwcGVyU2VydmljZS5zZXJ2aWNlVXJpKSkge1xyXG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KTtcclxuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMuYWRkVG9rZW5Ub1JlcXVlc3QocmVxdWVzdCkpXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCkpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci51cmwuc3RhcnRzV2l0aCh0aGlzLmNsaXBwZXJTZXJ2aWNlLnNlcnZpY2VVcmkpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlcXVlc3QudXJsLmluY2x1ZGVzKFwiL2xvZ2luXCIpICYmXHJcbiAgICAgICAgICAgICAgICBlcnJvci5zdGF0dXMgPT09IDQwMVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlNDAxRXJyb3IocmVxdWVzdCwgbmV4dCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yU3RhdHVzID0gcGFyc2VJbnQoZXJyb3Iuc3RhdHVzID8/IFwiMFwiKTtcclxuICAgICAgICAgICAgICBpZiAoKGVycm9yU3RhdHVzID4gMCAmJiBlcnJvclN0YXR1cyA8IDUwMCkgfHwgKHRoaXMuY2xpcHBlclNlcnZpY2UuZmxhZ3MgJiBDbGlwcGVyU2VydmljZUZsYWdzLk5vdGlmeVN5c3RlbUVycm9ycykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvclRpbWUgLSB0aGlzLmxhc3RFcnJvclRpbWUgPiA1MDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yVGltZSA9IGVycm9yVGltZTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFNlc3Npb24gPSBlcnJvclN0YXR1cyA9PT0gNDAzO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8cD5cIiArIChlcnJvci5lcnJvcj8ubWVzc2FnZSA/PyBlcnJvci5tZXNzYWdlID8/IFwiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCdvcGVyYXppb25lIHJpY2hpZXN0YS5cIikucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIjwvcD48cD5cIikgKyBcIjwvcD5cIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRXJyb3JlIGluIENsaXBwZXJcIixcclxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRTZXNzaW9uID8gNTAwMCA6IDE1MDAwKS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaW52YWxpZFNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5MT0dPVVQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgNDAxIGVycm9yXHJcbiAgICogQHBhcmFtIHJlcXVlc3QgOiB0aGUgcmVxdWVzdFxyXG4gICAqIEBwYXJhbSBuZXh0IDogdGhlIGh0dHAgaGFuZGxlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlNDAxRXJyb3IocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcclxuICAgIGlmICh0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2xpcHBlclNlcnZpY2UucmVmcmVzaCgpLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLmFkZFRva2VuVG9SZXF1ZXN0KHJlcXVlc3QpKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRva2VuIHRvIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gcmVxdWVzdCA6IHRoZSByZXF1ZXN0XHJcbiAgICogQHBhcmFtIHRva2VuOiB0aGUgdG9rZW4gb3IgbnVsbCB0byB1c2UgY3VycmUzbnRcclxuICAgKi9cclxuICBwcml2YXRlIGFkZFRva2VuVG9SZXF1ZXN0KFxyXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PixcclxuICAgIHRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbFxyXG4gICk6IEh0dHBSZXF1ZXN0PGFueT4ge1xyXG4gICAgaWYgKHJlcXVlc3QudXJsLnN0YXJ0c1dpdGgodGhpcy5jbGlwcGVyU2VydmljZS5zZXJ2aWNlVXJpKSkge1xyXG4gICAgICBpZiAoIXRva2VuKSB0b2tlbiA9IHRoaXMuY2xpcHBlclNlcnZpY2UuZ2V0VG9rZW4oKTtcclxuICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoe1xyXG4gICAgICAgICAgc2V0SGVhZGVyczoge1xyXG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyB0b2tlbixcclxuICAgICAgICAgICAgJ25nc3ctYnlwYXNzJzogJ25nc3ctYnlwYXNzJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -77,16 +77,19 @@ export class ClipperService {
77
77
  this.broadcastServiceSubscription = this.broadcastService.getMessage().subscribe((message) => {
78
78
  if (message.id === ClipperMessages.LOGIN_CHANGED) {
79
79
  setTimeout(() => {
80
- this.login(message.data.email, message.data.password, true, message.data.oauth, message.data.oauthAccessToken).subscribe((r) => {
81
- if (!r.success)
82
- this.dialogService.error(r.message, null, "Errore di Clipper");
83
- else {
84
- if ((this.flags & ClipperServiceFlags.DisplayConnectionStateMessages) > 0) {
85
- this.dialogService.toast('Connesso a Clipper', 1500, 'power');
80
+ this.login(message.data.email, message.data.password, true, message.data.oauth, message.data.oauthAccessToken).subscribe({
81
+ next: r => {
82
+ if (!r.success)
83
+ this.dialogService.error(r.message, null, "Errore di Clipper");
84
+ else {
85
+ if ((this.flags & ClipperServiceFlags.DisplayConnectionStateMessages) > 0) {
86
+ this.dialogService.toast('Connesso a Clipper', 1500, 'power');
87
+ }
88
+ // Load bag
89
+ this.loadBag();
86
90
  }
87
- // Load bag
88
- this.loadBag();
89
- }
91
+ },
92
+ error: () => { console.log("Clipper non disponibile."); } // Avoid unwanted errors on client
90
93
  });
91
94
  }, 500);
92
95
  }
@@ -945,13 +948,13 @@ export class ClipperService {
945
948
  downloadArchiveFile(id, otp = null) {
946
949
  return this.httpClient.get(this._serviceUri + '/archive/files/download/?id=' + id + '&otp=' + otp, { responseType: 'blob' });
947
950
  }
948
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClipperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
949
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClipperService, providedIn: 'root' }); }
951
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
952
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperService, providedIn: 'root' }); }
950
953
  }
951
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClipperService, decorators: [{
954
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperService, decorators: [{
952
955
  type: Injectable,
953
956
  args: [{
954
957
  providedIn: 'root',
955
958
  }]
956
959
  }] });
957
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUM0QixnQkFBZ0IsRUFHbEMsV0FBVyxFQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQXFGLE1BQU0sMkJBQTJCLENBQUM7QUFFN0ksT0FBTyxFQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUEwUSwwQkFBMEIsRUFBZ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDenBDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTTlDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUk1QixXQUFNLEdBQXdCLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUl2RCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQVluQyxhQUFRLEdBQUcs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UixFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FDekIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxFQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxFQUFVLEVBQUUsTUFBYyxJQUFJO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsOEJBQThCLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLEVBQ3RFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUN6QixDQUFDO0lBQ0osQ0FBQzs4R0Evc0NVLGNBQWM7a0hBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQXBpUmVzdWx0LCBCcm9hZGNhc3RNZXNzYWdlSW5mbywgQnJvYWRjYXN0U2VydmljZSxcclxuICBGb2xkZXIsXHJcbiAgRm9sZGVyVHJlZSxcclxuICBOYW1lVmFsdWVJdGVtLCBTeXN0ZW1VdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIFJlY292ZXJQYXNzd29yZERpYWxvZ0RhdGEsIFJlY292ZXJQYXNzd29yZERpYWxvZ1Jlc3VsdCwgUmVzZXRQYXNzd29yZERpYWxvZ1Jlc3VsdCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWknO1xyXG5pbXBvcnQgeyBMb2dpbk9BdXRoVHlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkub2F1dGgnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlcnZpY2VGbGFncywgQ2xpcHBlckRhc2hib2FyZCwgQ2xpcHBlckRhc2hib2FyZFJlc3VsdCwgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlckRvY3VtZW50U3RydWN0dXJlLCBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcywgQ2xpcHBlckV4cG9ydERvY3VtZW50c1BhcmFtcywgQ2xpcHBlckxvZ2luSW5mbywgQ2xpcHBlckxvZ2luUmVzdWx0LCBDbGlwcGVyTW9kdWxlLCBDbGlwcGVyT1RQSW5mbywgQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1BhcmFtcywgQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1Jlc3VsdCwgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0LCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoUmVzdWx0LCBDbGlwcGVyU2VuZERvY3VtZW50c0J5RW1haWxQYXJhbXMsIENsaXBwZXJUYXhvbm9teVBhcmFtcywgQ2xpcHBlclVzZXJMaW5rLCBDbGlwcGVyVXNlclNlYXJjaCwgQ2xpcHBlclVzZXJUcmlhbEluZm8sIENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50LCBDbGlwcGVyVGVhbU1lbWJlckluZm8sIENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcywgQ2xpcHBlclRlYW1zU2VhcmNoUmVzdWx0LCBDbGlwcGVyVGVhbUluZm8sIENsaXBwZXJUZWFtTWVtYmVyc1NlYXJjaFJlc3VsdCwgQ2xpcHBlckNhbGVuZGFyU2VhcmNoUGFyYW1zLCBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hSZXN1bHQsIENsaXBwZXJTZWFyY2hDYWxlbmRhclNuYXBzaG90UmVzdWx0LCBDbGlwcGVyQ2FsZW5kYXJDb3B5RGVhZGxpbmVzUGFyYW1zLCBDbGlwcGVyRGVhZGxpbmVJbmZvLCBDbGlwcGVyQ2FsZW5kYXJTYXZlRGVhZGxpbmVQYXJhbXMsIENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFBhcmFtcywgQ2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0LCBDbGlwcGVyQXJjaGl2ZUZpbGVJbmZvLCBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNJbXBvcnRQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hSZXN1bHQsIENsaXBwZXJBcmNoaXZlRmlsZXNEZWxldGVQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNDb3B5UGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZpbGVzU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyTWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbiB8IG51bGw7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZVVyaTogc3RyaW5nICA9IG51bGw7XHJcbiAgZ2V0IHNlcnZpY2VVcmkoKTogc3RyaW5nICB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVVyaTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZmxhZ3M6IENsaXBwZXJTZXJ2aWNlRmxhZ3MgPSBDbGlwcGVyU2VydmljZUZsYWdzLk5vbmU7XHJcbiAgZ2V0IGZsYWdzKCk6IENsaXBwZXJTZXJ2aWNlRmxhZ3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZsYWdzO1xyXG4gIH1cclxuICBwcml2YXRlIF9sb2dpbkluZm86IENsaXBwZXJMb2dpbkluZm8gfCBudWxsID0gbnVsbDtcclxuICBnZXQgbG9naW5JbmZvKCk6IENsaXBwZXJMb2dpbkluZm8gfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5fbG9naW5JbmZvKSB7XHJcbiAgICAgIGNvbnN0IGxvZ2luSW5mbyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2xvZ2luJyk7XHJcbiAgICAgIGlmIChsb2dpbkluZm8pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gSlNPTi5wYXJzZShsb2dpbkluZm8pIGFzIENsaXBwZXJMb2dpbkluZm87XHJcbiAgICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2xvZ2luSW5mbztcclxuICB9XHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEluID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2luZ0luID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3QgPSBzaWduYWw8Q2xpcHBlclNlYXJjaFJlc3VsdD4obnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzUlMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSByZWZlcmVuY2VzU25hcHNob3QgPSBzaWduYWw8Q2xpcHBlclNlYXJjaFJlc3VsdD4obnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRhc2hib2FyZDogQ2xpcHBlckRhc2hib2FyZCA9IG5ldyBDbGlwcGVyRGFzaGJvYXJkKCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGJhZyA9IHNpZ25hbDxDbGlwcGVyRG9jdW1lbnRJbmZvW10+KFtdKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYmFnVG90YWw6IFNpZ25hbDxudW1iZXI+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFnKCkubGVuZ3RoO1xyXG4gIH0pO1xyXG4gIHB1YmxpYyByZWFkb25seSB2aXNpYmxlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIF90ZWFtczogTmFtZVZhbHVlSXRlbTxzdHJpbmc+W10gPSBbXTtcclxuICBnZXQgdGVhbXMoKTogTmFtZVZhbHVlSXRlbTxzdHJpbmc+W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RlYW1zO1xyXG4gIH1cclxuICBwdWJsaWMgY3VycmVudFRlYW1JZCA9IHNpZ25hbDxzdHJpbmc+KFN5c3RlbVV0aWxzLmVtcHR5VVVJRCgpKTtcclxuICBwdWJsaWMgY3VycmVudFRlYW1OYW1lID0gc2lnbmFsPHN0cmluZz4oXCJQRVJTT05BTEVcIik7XHJcbiAgcHVibGljIGN1cnJlbnRUZWFtSXNQcml2YXRlOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVhbUlkKCkgIT09IFN5c3RlbVV0aWxzLmVtcHR5VVVJRCgpO1xyXG4gIH0pO1xyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gc2VydmljZVVyaSA6IHRoZSBzZXJ2aWNlIHVyaVxyXG4gICAqIEBwYXJhbSBmbGFnczogdGhlIHNlcnZpY2UgZmxhZ3MuIERlZmF1bHQgaXMgbm9uZS5cclxuICAgKi9cclxuICBpbml0aWFsaXplKFxyXG4gICAgc2VydmljZVVyaTogc3RyaW5nLFxyXG4gICAgZmxhZ3M6IENsaXBwZXJTZXJ2aWNlRmxhZ3MgPSBDbGlwcGVyU2VydmljZUZsYWdzLk5vbmUpIHtcclxuXHJcbiAgICAvLyBDcmVhdGUgdW5pcXVlIGNsaWVudCBpZFxyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2xpcHBlcl9jbGllbnRfaWQnKSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9jbGllbnRfaWQnLCBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZVxyXG4gICAgdGhpcy5fc2VydmljZVVyaSA9IHNlcnZpY2VVcmk7XHJcbiAgICB0aGlzLl9mbGFncyA9IGZsYWdzO1xyXG5cclxuICAgIC8vIFJlYWN0IHRvIG1lc3NhZ2UgYnJvYWRjYXN0aW5nXHJcbiAgICBpZiAoIXRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuZ2V0TWVzc2FnZSgpLnN1YnNjcmliZSgobWVzc2FnZTogQnJvYWRjYXN0TWVzc2FnZUluZm8pID0+IHtcclxuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NIQU5HRUQpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2luKFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5lbWFpbCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEucGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGgsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLm9hdXRoQWNjZXNzVG9rZW4pLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghci5zdWNjZXNzKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5mbGFncyAmIENsaXBwZXJTZXJ2aWNlRmxhZ3MuRGlzcGxheUNvbm5lY3Rpb25TdGF0ZU1lc3NhZ2VzKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Nvbm5lc3NvIGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcicpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIExvYWQgYmFnXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEJhZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5MT0dPVVQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxvZ2dlZEluKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihcIjxwPlwiICsgci5tZXNzYWdlICsgXCI8L3A+PGJyPjxicj48aHI+PHAgY2xhc3M9J3NtYWxsJz48aT5QZXIgZWxpbWluYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIENsaXBwZXIgYWNjZWRlcmUgYTo8YnI+PGI+bWVudSA+IHBlcnNvbmFsaXp6YSA+IGNvbGxlZ2FtZW50aTwvYj48L2k+PC9wPlwiLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZmxhZ3MgJiBDbGlwcGVyU2VydmljZUZsYWdzLkRpc3BsYXlDb25uZWN0aW9uU3RhdGVNZXNzYWdlcykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnRGlzY29ubmVzc28gZGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcl9vZmYnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEVtcHR5IGJhZ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWcuc2V0KFtdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXZlbHVhdGUgY3VycmVudCBzZXNzaW9uIHN0b3JhZ2UgaW4gY2FzZSBvZiBwYWdlIHJlZnJlc2ggKEY1KVxyXG4gICAgaWYgKCF0aGlzLmxvZ2dlZEluKCkgJiYgdGhpcy5nZXRUb2tlbigpKSB7XHJcbiAgICAgIC8vIEF1dG8gbG9naW5cclxuICAgICAgdGhpcy5sb2dnZWRJbi5zZXQodHJ1ZSk7XHJcbiAgICAgIC8vIE5vdGlmeVxyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NPTVBMRVRFRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2V0IEpXVCB0b2tlbnNcclxuICogQHBhcmFtIHZhbHVlIDogdGhlIGxvZ2luIHJlc3VsdFxyXG4gKi9cclxuICBwcml2YXRlIHNldFRva2VuKHZhbHVlOiBDbGlwcGVyTG9naW5SZXN1bHQpIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NsaXBwZXJfand0JywgdmFsdWUudG9rZW4pO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9qd3RfcmVmcmVzaCcsIHZhbHVlLnJlZnJlc2hUb2tlbiA/PyAnJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gY3VycmVudCBKV1QgdG9rZW5cclxuICAgKiBAcGFyYW0gcmVmcmVzaDogdHJ1ZSB0byBnZXQgdGhlIHJlZnJlc2ggdG9rZW4uIERlZmF1bHQgaXMgZmFsc2UuXHJcbiAgICovXHJcbiAgZ2V0VG9rZW4ocmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGxldCB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocmVmcmVzaCA/ICdjbGlwcGVyX2p3dF9yZWZyZXNoJyA6ICdjbGlwcGVyX2p3dCcpO1xyXG4gICAgaWYgKHRva2VuICYmIHRva2VuWzBdID09PSAnXCInKSB7XHJcbiAgICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4gPz8gJyc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgbG9naW4gaW5mb1xyXG4gICAqL1xyXG4gIHN0b3JlTG9naW4oKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9sb2dpbicsIEpTT04uc3RyaW5naWZ5KHRoaXMuX2xvZ2luSW5mbykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFBlcmZvcm0gYXV0byBsb2dpbiB1c2luZyBjdXJyZW50IGxpbmsgZGF0YVxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvbmFsIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICogQHBhcmFtIG9uU3VjY2VzOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHNlY2Nlc3NcclxuICovXHJcbiAgYXV0b0xvZ2luKFxyXG4gICAgZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcGFzc3dvcmQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcmVtZW1iZXI6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gZmFsc2UsXHJcbiAgICBvYXV0aDogTG9naW5PQXV0aFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIG9hdXRoQWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb25TdWNjZXM6IEZ1bmN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHRoaXMubG9naW4oZW1haWwsIHBhc3N3b3JkLCByZW1lbWJlciwgb2F1dGgsIG9hdXRoQWNjZXNzVG9rZW4pXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGluIENsaXBwZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnQ29ubmVzc28gYSBDbGlwcGVyJywgMTUwMCwgJ3Bvd2VyJyk7XHJcbiAgICAgICAgICBpZiAob25TdWNjZXMpIHtcclxuICAgICAgICAgICAgb25TdWNjZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGF1dG8gbG9nb3V0XHJcbiAgICogQHBhcmFtIG9uU3VjY2VzOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHNlY2Nlc3NcclxuICAgKi9cclxuICBhdXRvTG9nb3V0KFxyXG4gICAgb25TdWNjZXM6IEZ1bmN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICB0aGlzLmxvZ291dCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHIgPT4ge1xyXG4gICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlLCBudWxsLCBcIkVycm9yZSBpbiBDbGlwcGVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Rpc2Nvbm5lc3NvIGRhIENsaXBwZXInLCAxNTAwLCAncG93ZXJfb2ZmJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmIChvblN1Y2Nlcykge1xyXG4gICAgICAgICAgb25TdWNjZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dpbiAgIFxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvYW5sIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICAgKiBAcmV0dXJuczogdGhlIGxvZ2luIHJlc3VsdFxyXG4gICAqL1xyXG4gIGxvZ2luKGVtYWlsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHBhc3N3b3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHJlbWVtYmVyOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGZhbHNlLFxyXG4gICAgb2F1dGg6IExvZ2luT0F1dGhUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvYXV0aEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgdGhpcy5sb2dnaW5nSW4uc2V0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvbG9naW4yJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1c2VyOiBvYXV0aCA/IG51bGwgOiBlbWFpbCxcclxuICAgICAgICAgIHBhc3N3b3JkOiBvYXV0aCA/IG51bGwgOiBwYXNzd29yZCxcclxuICAgICAgICAgIGNsaWVudElkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImNsaXBwZXJfY2xpZW50X2lkXCIpLFxyXG4gICAgICAgICAgT0FVVEg6IG9hdXRoXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOlxyXG4gICAgICAgICAgICAhb2F1dGhcclxuICAgICAgICAgICAgICA/IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgOiBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAgICAgICAgICAgLnNldChcIkF1dGhvcml6YXRpb25cIiwgb2F1dGhBY2Nlc3NUb2tlbilcclxuICAgICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdJbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfbG9naW4nKTtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgbWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nSW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgLy8gU3RvcmUgYWNjZXNzIHRva2VuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VG9rZW4oci52YWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvZ2luSW5mbzogQ2xpcHBlckxvZ2luSW5mbyA9IHtcclxuICAgICAgICAgICAgICBjb250ZXh0OiByLnZhbHVlLmNvbnRleHQsXHJcbiAgICAgICAgICAgICAgdXNlclNldHRpbmdzOiByLnZhbHVlLnNldHRpbmdzLFxyXG4gICAgICAgICAgICAgIE9BVVRIOiBvYXV0aFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb2F1dGgpIHtcclxuICAgICAgICAgICAgICBsb2dpbkluZm8udXNlckNyZWRlbnRpYWxzID1cclxuICAgICAgICAgICAgICAgIFN5c3RlbVV0aWxzLmNpcGhlcihcclxuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiBlbWFpbCxcclxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtZW1iZXI6IHJlbWVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICB9KSwgbG9naW5JbmZvLmNvbnRleHQudXNlcklkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBpbmZvICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2luSW5mbyA9IGxvZ2luSW5mbztcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxvZ2luKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VkSW4uc2V0KHRydWUpO1xyXG4gICAgICAgICAgICAvLyBOb3RpZnlcclxuICAgICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5MT0dJTl9DT01QTEVURUQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gbG9nb3V0XHJcbiAgICovXHJcbiAgbG9nb3V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5fc2VydmljZVVyaSArICcvbG9nb3V0Jywge30pLnBpcGUoXHJcbiAgICAgIG1hcChyID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIHJcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKF9lKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXNldCBsb2dpbiByZWZyZXNoIHRpbWVyIGFuZCBsb2dpbiBzdGF0ZVxyXG4gKi9cclxuICByZXNldCgpIHtcclxuICAgIC8vIENsZWFyIGxvZ2luIGluZm9cclxuICAgIHRoaXMuX2xvZ2luSW5mbyA9IG51bGw7XHJcbiAgICAvLyBMb2dnZWQgb3V0XHJcbiAgICB0aGlzLmxvZ2dlZEluLnNldChmYWxzZSk7XHJcbiAgICAvLyBOb3RpZnlcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HT1VUX0NPTVBMRVRFRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBsb2dpbiBkYXRhXHJcbiAgICovXHJcbiAgY2xlYXIoKSB7XHJcbiAgICAvLyBDbGVhciBsb2NhbCBzdG9yYWdlXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2p3dCcpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9qd3RfcmVmcmVzaCcpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9vYXV0aCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfbG9naW4nKTtcclxuXHJcbiAgICAvLyBSZXNldCBsb2dpblxyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBQZXJmb3JtIHRva2VuIHJlZnJlc2hcclxuICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvcmVmcmVzaDIvP3Rva2VuPScgKyB0aGlzLmdldFRva2VuKHRydWUpXHJcbiAgICApLnBpcGUobWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAvLyBVcGRhdGUgdG9rZW5cclxuICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogR2V0IGEgbmV3IG9uZSB0aW1lIHBhc3N3b3JkXHJcbiAgKiBAcGFyYW0gaWQ6IHRoZSBvcHRpb25hbCByZXBvc2l0b3J5IGlkIFxyXG4gICovXHJcbiAgbmV3T1RQKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyT1RQSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9vdHAvbmV3Lz9pZD0nICsgaWQsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBBcnMgZXZlbnRzIGNhbGVuZGFyXHJcbiAgICovXHJcbiAgZXZlbnRzKHBhcmFtczogQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2Fycy9ldmVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUXVlcnkgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgcXVlcnkocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBxdWVyeVxyXG4gICAqL1xyXG4gIHF1ZXJ5RmFjZXRzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9mYWNldHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgKiBVcGRhdGUgZG9jdW1lbnQgc3RhdGVcclxuICAqL1xyXG4gIHVwZGF0ZVN0YXRlKHBhcmFtczogQ2xpcHBlckRvY3VtZW50VXBkYXRlU3RhdGVQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdGF0ZS91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgYSBkb2N1bWVudCBpbiBwZGYgZm9ybWF0XHJcbiAgICovXHJcbiAgZXhwb3J0UGRmKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvZXhwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICogRXhwb3J0IGRvY3VtZW50IGxpc3QgKHF1ZXJ5IG9yIHNlbGVjdGVkIGl0ZW1zKSBvciBleHBvcnQgZGVhZGxpbmVzIGFzIGljc1xyXG4gKi9cclxuICBleHBvcnQocGFyYW1zOiBDbGlwcGVyRXhwb3J0RG9jdW1lbnRzUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQnLFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgZG9jdW1lbnRzIGxpbmsgYnkgZW1haWxcclxuICAgKi9cclxuICBzZW5kVG8ocGFyYW1zOiBDbGlwcGVyU2VuZERvY3VtZW50c0J5RW1haWxQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZW5kJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIHBhZ2UgdGhlIGZ1bGwgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICovXHJcbiAgcmVwb3J0KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGNvbW1lbnRcclxuICAgKi9cclxuICBjb21tZW50KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NvbW1lbnQvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGluZm9cclxuICAgKi9cclxuICBpbmZvKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9pbmZvLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkb2N1bWVudCBzdHJ1Y3R1cmVcclxuICAgKi9cclxuICBpbmRleChpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRvY3VtZW50U3RydWN0dXJlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdHJ1Y3R1cmUvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGxhc3QgdXBkYXRlXHJcbiAgICovXHJcbiAgbGFzdFVwZGF0ZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8c3RyaW5nPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9sYXN0LXVwZGF0ZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlcyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlO1xyXG4gICAgaWYgKCFtb2RlKSBtb2RlID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luOlxyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgcGFyYW1zLm1vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3JlZmVyZW5jZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmYWNldHMgZm9yIGEgZG9jdW1lbnQgcmVmZXJlbmNlc1xyXG4gICAqL1xyXG4gIHJlZmVyZW5jZXNGYWNldHMocGFyYW1zOiBDbGlwcGVyUmVmZXJlbmNlc1NlYXJjaFBhcmFtcykge1xyXG4gICAgbGV0IG1vZGUgPSBwYXJhbXMubW9kZSA/PyBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcy9mYWNldHMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkp1cmlzOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2p1cmlzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdyYXAgZG9jdW1lbnQgcmVuZGVyaW5nIHRvIGFsbG93IHRva2VuIHJlZnJlc2hcclxuICAgKi9cclxuICBwcmVSZW5kZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9wcmUtcmVuZGVyJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQganVyaXMgYXJ0aWNsZXNcclxuICAgKi9cclxuICBqdXJpc0FydGljbGVzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9qdXJpcy9hcnRpY2xlcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogR2V0IGRlYWRsaW5lcyBzbmFwc2hvdCBiYXNlZCBvbiB0aGUgZGVhZGxpbmVzXHJcbiAgKi9cclxuICBkZWFkbGluZXNTbmFwc2hvdChwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvY2FsZW5kYXIvc25hcHNob3QnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGhlIHRheG9ub215XHJcbiAgICovXHJcbiAgZ2V0VGF4b25vbXkocGFyYW1zOiBDbGlwcGVyVGF4b25vbXlQYXJhbXMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxGb2xkZXJUcmVlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RheG9ub215JyxcclxuICAgICAgcGFyYW1zID8/IHsgbW9kZWw6IDAsIGNvdW50SXRlbXM6IGZhbHNlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0b3BpY3NcclxuICAgKi9cclxuICBnZXRUb3BpY3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdG9waWNzJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXRyaWV2ZSB0b3BpY3MgYXMgdHJlZVxyXG4gKi9cclxuICBnZXRUb3BpY3NBc1RyZWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Rm9sZGVyVHJlZT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90b3BpY3MyJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRhZ3NcclxuICAgKi9cclxuICBnZXRUYWdzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RhZ3MnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vL1xyXG4gIC8vIERBU0hCT0FSRFxyXG4gIC8vL1xyXG4gIC8qKlxyXG4gICogUmV0cmlldmUgY3VycmVudCBkYXNoYm9hcmRcclxuICAqL1xyXG4gIGxvYWREYXNoYm9hcmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGFzaGJvYXJkUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9kYXNoYm9hcmQnLFxyXG4gICAgICAgIHsgcmVmcmVzaGluZzogdHJ1ZSB9XHJcbiAgICAgICkuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4pID0+IHtcclxuICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5kb2N1bWVudFVwZGF0ZXMgPSByLnZhbHVlLmRvY3VtZW50VXBkYXRlcztcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmV4cGlyZWREZWFkbGluZXMgPSByLnZhbHVlLmV4cGlyZWREZWFkbGluZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5leHBpcmluZ0RlYWRsaW5lcyA9IHIudmFsdWUuZXhwaXJpbmdEZWFkbGluZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5pc1RyaWFsID0gci52YWx1ZS5pc1RyaWFsO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuaXRlbXMuc2V0KHIudmFsdWUuaXRlbXMpO1xyXG4gICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0RBU0hCT0FSRF9VUERBVEVEKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBVcGRhdGUgdW5yZWFkIGl0ZW1zXHJcbiAgKiBAcGFyYW0gbW9kdWxlIDogdGhlIG1vZHVsZVxyXG4gICogQHBhcmFtIGluY3JlbWVudCA6IHRoZSBpbmNyZW1lbnQgKGNhbiBiZSBuZWdhdGl2ZSlcclxuICAqL1xyXG4gIHVwZGF0ZVVucmVhZEl0ZW1zKG1vZHVsZTogQ2xpcHBlck1vZHVsZSwgaW5jcmVtZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVVucmVhZEl0ZW1zKG1vZHVsZSwgaW5jcmVtZW50KTtcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9EQVNIQk9BUkRfVVBEQVRFRCk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBMSU5LU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAqIFNhdmUgYSB1c2VyIGxpbmtcclxuICAqIEBwYXJhbSBpdGVtOiB0aGUgdXNlciBsaW5rXHJcbiAgKi9cclxuICBzYXZlTGluayhpdGVtOiBDbGlwcGVyVXNlckxpbmspIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L2xpbmtzL3NhdmUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgdXNlciBsaW5rXHJcbiAgICogQHBhcmFtIGl0ZW06IHRoZSB1c2VyIGxpbmtcclxuICAgKi9cclxuICBkZWxldGVMaW5rKGl0ZW06IENsaXBwZXJVc2VyTGluaykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvbGlua3MvZGVsZXRlJyxcclxuICAgICAgaXRlbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvLy9cclxuICAvLyBCQUcgLSBXT1JLSU5HIERPQ1VNRU5UU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgbG9hZEJhZygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcnXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChuLmRvY3VtZW50RGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEluZm8gPSBKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IGRvY3VtZW50SW5mby5Eb2N1bWVudElkIHx8IGRvY3VtZW50SW5mby5JZDtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMSA9IGRvY3VtZW50SW5mby5UaXRsZTEgPz8gZG9jdW1lbnRJbmZvLlRpdGxlMjtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50RGVzY3JpcHRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5iYWcuc2V0KGl0ZW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG9uZSBvciBtb3JlIHdvcmtpbmcgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZHMgOiB0aGUgZG9jdW1lbnQgaWRzIHRvIGFkZFxyXG4gICAqL1xyXG4gIGFkZFRvQmFnKGRvY3VtZW50SWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvYWRkJyxcclxuICAgICAgICB7IGRvY3VtZW50SWRzOiBkb2N1bWVudElkcyB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdID0gW107XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICBpZiAobi5kb2N1bWVudERlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50SW5mbyA9IEpTT04ucGFyc2Uobi5kb2N1bWVudERlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50SWQgPSBkb2N1bWVudEluZm8uRG9jdW1lbnRJZCB8fCBkb2N1bWVudEluZm8uSWQ7XHJcbiAgICAgICAgICAgICAgICAgIG4udGl0bGUxID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/PyBkb2N1bWVudEluZm8uVGl0bGUyO1xyXG4gICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG4uZG9jdW1lbnREZXNjcmlwdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIG5ld0l0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmJhZy51cGRhdGUoKHZhbHVlczogYW55KSA9PiBbLi4udmFsdWVzLCAuLi5uZXdJdGVtc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIG9uZSB3b3JraW5nIGRvY3VtZW50XHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICByZW1vdmVGcm9tQmFnKGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZy9kZWxldGUnLFxyXG4gICAgICAgIHsgZG9jdW1lbnRJZHM6IFtkb2N1bWVudElkXSB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PG51bWJlcj4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmJhZygpLmZpbmRJbmRleCgobjogYW55KSA9PiBuLmRvY3VtZW50SWQgPT09IGRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgaWYgKHAgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFnLnVwZGF0ZSgodmFsdWVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKHAsIDEpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWVzXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgY2xlYXJCYWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2RlbGV0ZScsXHJcbiAgICAgICAgeyBkZWxldGVBbGw6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxudW1iZXI+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJhZy5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBXT1JLSU5HIFNFQVJDSEVTXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgd29ya2luZyBzZWFyY2hlc1xyXG4gICAqIEBwYXJhbTogbW9kdWxlOiB0aGUgbW9kdWxlIHRvIGxvYWQgc2VhcmNoZXMgZm9yXHJcbiAgICovXHJcbiAgbG9hZFNlYXJjaGVzKG1vZHVsZTogQ2xpcHBlck1vZHVsZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlclNlYXJjaFtdPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvc2VhcmNoZXMvP21vZHVsZT0nICsgbW9kdWxlXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYSB3b3JraW5nIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgY2xpcHBlciB1c2VyIHNlYXJjaFxyXG4gICAqL1xyXG4gIHNhdmVTZWFyY2gocGFyYW1zOiBDbGlwcGVyVXNlclNlYXJjaCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJTZWFyY2g+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZWFyY2hlcy9zYXZlJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBvbmUgd29ya2luZyBzZWFyY2hcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgZGVsZXRlU2VhcmNoKGlkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlYXJjaGVzL2RlbGV0ZScsXHJcbiAgICAgICAgeyBpZDogaWQgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVVNFUiBTRVRUSU5HUyBBTkQgVFJJQUxcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiogUmVzZXQgYSB1c2VyIHBhc3N3b3JkXHJcbiogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiovXHJcbiAgcmVzZXRQYXNzd29yZChwYXJhbXM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZXNldFBhc3N3b3JkRGlhbG9nUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvcGFzc3dvcmQvcmVzZXQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWNvdmVyIHBhc3N3b3JkXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcmVjb3ZlclBhc3N3b3JkKHBhcmFtczogUmVjb3ZlclBhc3N3b3JkRGlhbG9nRGF0YSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZWNvdmVyUGFzc3dvcmREaWFsb2dSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9wYXNzd29yZC9yZWNvdmVyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzZXR0aW5ncyBcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHVwZGF0ZVNldHRpbmdzKHBhcmFtczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9zZXR0aW5ncy91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY2hhbm5lbCBzdGF0ZVxyXG4gICAqIEBwYXJhbSBpZDogdGhlIGNoYW5uZWwgaWQgKDEsIDIsIDMsIDQpXHJcbiAgICovXHJcbiAgdXBkYXRlQ2hhbm5lbFN0YXRlKGlkOiBudW1iZXIsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3NldHRpbmdzL2NoYW5uZWxzL3VwZGF0ZScsXHJcbiAgICAgIHtcclxuICAgICAgICBjaGFubmVsSWQ6IGlkLFxyXG4gICAgICAgIGlzRW5hYmxlZDogZW5hYmxlZCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0cmlhbCBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUcmlhbEluZm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJUcmlhbEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90cmlhbCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdHJpYWwgaW5mb1xyXG4gICAqL1xyXG4gIHVwZGF0ZVRyaWFsSW5mbygpIHtcclxuICAgIGlmICghdGhpcy5fbG9naW5JbmZvIHx8IHRoaXMuX2xvZ2luSW5mbz8uY29udGV4dC5oYXNUcmlhbCA9PT0gZmFsc2UpXHJcbiAgICAgIHJldHVybjsgLy8gTm90IHN1cHBvcnRlZFxyXG4gICAgdGhpcy5nZXRUcmlhbEluZm8oKS5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVXNlclRyaWFsSW5mbz4pID0+IHtcclxuICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC5oYXNUcmlhbCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC50cmlhbEluZm8gPSByLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC5oYXNUcmlhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQudHJpYWxJbmZvID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVEVBTVNcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgKiBSZW5hbWUgYSB0ZWFtXHJcbiAgKiBAcGFyYW0gbmV3TmFtZSA6IHRoZSBuZXcgbmFtZVxyXG4gICovXHJcbiAgcmVuYW1lVGVhbShuZXdOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclRlYW1JbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvdXBkYXRlJyxcclxuICAgICAgeyB0aXRsZTogbmV3TmFtZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGVhbXNcclxuICAgKi9cclxuICBnZXRUZWFtcyhwYXJhbXM6IENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgdGhpcy5fdGVhbXMgPSByLnZhbHVlLml0ZW1zO1xyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRlYW0gbWVtYmVyc1xyXG4gICAqL1xyXG4gIGdldFRlYW1NZW1iZXJzKHBhcmFtczogQ2xpcHBlclRlYW1zU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVyc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgbWVtYmVyc1xyXG4gICAqIEBwYXJhbSBpZHM6IHRoZSBpZCBsaXN0IHRvIGRlbGV0ZVxyXG4gICAqL1xyXG4gIGRlbGV0ZVRlYW1NZW1iZXJzKGlkczogbnVtYmVyW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvbWVtYmVycy9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIG1lbWJlclxyXG4gICAqIEBwYXJhbSBpdGVtOiB0aGUgaXRlbSB0byBzYXZlXHJcbiAgICovXHJcbiAgc2F2ZVRlYW1NZW1iZXIoaXRlbTogQ2xpcHBlclRlYW1NZW1iZXJJbmZvKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVySW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMvc2F2ZScsXHJcbiAgICAgIGl0ZW1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vXHJcbiAgLy8gQ0FMRU5EQVJcclxuICAvLy9cclxuICAvKipcclxuICAgKiBRdWVyeSBjYWxlbmRhclxyXG4gICAqL1xyXG4gIHF1ZXJ5Q2FsZW5kYXIocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckNhbGVuZGFyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocjogQXBpUmVzdWx0PENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdD4pID0+IHtcclxuICAgICAgICAgIC8vIFN0b3JlIHRlYW1zXHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RlYW1zID0gci52YWx1ZS50ZWFtcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGNhbGVuZGFyIHNuYXBzaG90XHJcbiAgICovXHJcbiAgY2FsZW5kYXJTbmFwc2hvdChwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zbmFwc2hvdCcsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBvbmUgb3IgbW9yZSBpdGVtc1xyXG4gICAqIEBwYXJhbSBpZHM6IGlkcyB0byBkZWxldGVcclxuICAgKi9cclxuICBkZWxldGVDYWxlbmRhckRlYWRsaW5lcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3B5IG9uZSBvciBtb3JlIGl0ZW1zXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgY29weUNhbGVuZGFyRGVhZGxpbmVzKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyQ29weURlYWRsaW5lc1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGEgZGVhZGxpbmVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gY2xvc2VcclxuICAgKi9cclxuICBjbG9zZUNhbGVuZGFyRGVhZGxpbmUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGVhZGxpbmVJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyL2Nsb3NlJyxcclxuICAgICAgeyBpZDogaWQgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYW4gaXRlbVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVDYWxlbmRhckRlYWRsaW5lKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyU2F2ZURlYWRsaW5lUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJEZWFkbGluZUluZm9bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zYXZlJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cml2ZSBhIG4gaXRlbVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpdGVtIGlkXHJcbiAgICovXHJcbiAgZ2V0Q2FsZW5kYXJEZWFkbGluZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRlYWRsaW5lSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgdG8gaUNhbGVuZGFyIGZvcm1hdFxyXG4gICAqIEBwYXJhbSBpZHMgOiBkZWFkbGluZXMgdG8gZXhwb3J0XHJcbiAgICovXHJcbiAgZXhwb3J0Q2FsZW5kYXJEZWFkbGluZXMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9leHBvcnQnLFxyXG4gICAgICB7IGlkczogaWRzIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gQVJDSElWRVxyXG4gIC8vL1xyXG4gIC8qKlxyXG4gICogUmV0cmlldmUgYWxsIGZvbGRlcnNcclxuICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgKi9cclxuICBnZXRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9mb2xkZXJzJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZWFtcyA9IHIudmFsdWUudGVhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuXHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBmb2xkZXJcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVBcmNoaXZlRm9sZGVyKHBhcmFtczogRm9sZGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PEZvbGRlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZvbGRlcnMvc2F2ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIGlkOiB0aGUgZm9sZGVyIGlkIG9yIG51bGwgdG8gZXhwb3J0IGFsbCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHRlYW1JZDogdGhlIG9wdGlvbmFsIHRlYW0gaWQuIERlZmF1bHQgbnVsbCAocGVyc29uYWwpXHJcbiAgICovXHJcbiAgZXhwb3J0QXJjaGl2ZUZvbGRlcnMoaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLCB0ZWFtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9leHBvcnQvPyc7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdXJsICs9ICdpZD0nICsgaWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGVhbUlkKSB7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIHVybCArPSAnJic7XHJcbiAgICAgIH1cclxuICAgICAgdXJsICs9ICd0ZWFtPScgKyB0ZWFtSWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuICAgICAgdXJsLFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyYW0nXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBpbXBvcnRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc0ltcG9ydFBhcmFtcykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLm5hbWUsIHBhcmFtcy5maWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnc291cmNlRmlsZU5hbWUnLCBwYXJhbXMuZmlsZS5uYW1lKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnb3ZlcndyaXRlJywgcGFyYW1zLm92ZXJ3cml0ZSA9PT0gdHJ1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiKTtcclxuICAgIGlmIChwYXJhbXMuZGVzdEZvbGRlcklkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzdEZvbGRlcklkJywgcGFyYW1zLmRlc3RGb2xkZXJJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRlYW1JZCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RlYW1JZCcsIHBhcmFtcy50ZWFtSWQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIHJlcXVlc3RcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChcclxuICAgICAgbmV3IEh0dHBSZXF1ZXN0KFxyXG4gICAgICAgICdQT1NUJyxcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ltcG9ydC8nLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHsgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZpbGVzIGFuZCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBxdWVyeUFyY2hpdmVJdGVtcyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGaWxlc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGZpbGUgYW5kIGZvbGRlcnNcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBkZWxldGVBcmNoaXZlSXRlbXMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZpbGVzRGVsZXRlUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2RlbGV0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvcHkgIGZpbGUgYW5kIGZvbGRlcnMgdG8gYW5vdGhlciBmb2xkZXIgb3IgdGhlIHNhbWVcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBjb3B5QXJjaGl2ZUl0ZW1zKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlc0NvcHlQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgZmlsZVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgc2F2ZUFyY2hpdmVGaWxlKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlSW5mbykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGlmIChwYXJhbXMuZmlsZSkgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLmZpbGUubmFtZSwgcGFyYW1zLmZpbGUuZmlsZSk7XHJcbiAgICBpZiAocGFyYW1zLmlkKSBmb3JtRGF0YS5hcHBlbmQoJ2lkJywgcGFyYW1zLmlkKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZm9sZGVySWQnLCBwYXJhbXMuZm9sZGVySWQpO1xyXG4gICAgaWYgKHBhcmFtcy50b3BpY0lkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndG9waWNJZCcsIHBhcmFtcy50b3BpY0lkKTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCd0b3BpY1BhdGgnLCBwYXJhbXMudG9waWNQYXRoKTtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbXMudGl0bGUxKSBmb3JtRGF0YS5hcHBlbmQoJ3RpdGxlMScsIHBhcmFtcy50aXRsZTEpO1xyXG4gICAgaWYgKHBhcmFtcy50aXRsZTIpIGZvcm1EYXRhLmFwcGVuZCgndGl0bGUyJywgcGFyYW1zLnRpdGxlMik7XHJcbiAgICBpZiAocGFyYW1zLm9yaWdpbikgZm9ybURhdGEuYXBwZW5kKCdvcmlnaW4nLCBwYXJhbXMub3JpZ2luKTtcclxuICAgIGlmIChwYXJhbXMub3JpZ2luRGVzY3JpcHRpb24pIHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdvcmlnaW5EZXNjcmlwdGlvbicsIHBhcmFtcy5vcmlnaW5EZXNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLmRvY3VtZW50SWQpIGZvcm1EYXRhLmFwcGVuZCgnZG9jdW1lbnRJZCcsIHBhcmFtcy5kb2N1bWVudElkKTtcclxuICAgIGlmIChwYXJhbXMuZG9jdW1lbnRJZHMpIGZvcm1EYXRhLmFwcGVuZCgnZG9jdW1lbnRJZHMnLCBwYXJhbXMuZG9jdW1lbnRJZHMpO1xyXG4gICAgaWYgKHBhcmFtcy5iaW5hcnlJZCkgZm9ybURhdGEuYXBwZW5kKCdiaW5hcnlJZCcsIHBhcmFtcy5iaW5hcnlJZD8udG9TdHJpbmcoKSk7XHJcbiAgICBpZiAocGFyYW1zLnRhZ3MpIGZvcm1EYXRhLmFwcGVuZCgndGFncycsIHBhcmFtcy50YWdzKTtcclxuICAgIGlmIChwYXJhbXMubm90ZXMpIGZvcm1EYXRhLmFwcGVuZCgnbm90ZXMnLCBwYXJhbXMubm90ZXMpO1xyXG4gICAgaWYgKHBhcmFtcy5maWxlTmFtZSkgZm9ybURhdGEuYXBwZW5kKCdmaWxlTmFtZScsIHBhcmFtcy5maWxlTmFtZSk7XHJcbiAgICBpZiAocGFyYW1zLmZpbGVUeXBlKSBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGVUeXBlJywgKHBhcmFtcy5maWxlVHlwZSBhcyBudW1iZXIpLnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHBhcmFtcy5zdG9yYWdlVHlwZSkgZm9ybURhdGEuYXBwZW5kKCdzdG9yYWdlVHlwZScsIChwYXJhbXMuc3RvcmFnZVR5cGUgYXMgbnVtYmVyKS50b1N0cmluZygpKTtcclxuICAgIGlmIChwYXJhbXMubW9kZWwpIGZvcm1EYXRhLmFwcGVuZCgnbW9kZWwnLCAocGFyYW1zLm1vZGVsIGFzIG51bWJlcikudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHJlcXVlc3RcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChcclxuICAgICAgbmV3IEh0dHBSZXF1ZXN0KFxyXG4gICAgICAgICdQT1NUJyxcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL3NhdmUnLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHsgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZpbGUgZGF0YVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpdGVtIGlkXHJcbiAgICovXHJcbiAgZ2V0QXJjaGl2ZUZpbGUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJBcmNoaXZlRmlsZUluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy8nICsgaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgZmlsZVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBiaW5hcnkgaWQgdG8gZG93bmxvYWRcclxuICAgKiBAcGFyYW0gb3RwIDogdGhlIG9wdGlvbmFsIG9uZSB0aW1lIHBhc3N3b3JkXHJcbiAgICovXHJcbiAgZG93bmxvYWRBcmNoaXZlRmlsZShpZDogbnVtYmVyLCBvdHA6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2Rvd25sb2FkLz9pZD0nICsgaWQgKyAnJm90cD0nICsgb3RwLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
960
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUM0QixnQkFBZ0IsRUFHbEMsV0FBVyxFQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQXFGLE1BQU0sMkJBQTJCLENBQUM7QUFFN0ksT0FBTyxFQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUEwUSwwQkFBMEIsRUFBZ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDenBDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTTlDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxnQkFBVyxHQUFXLElBQUksQ0FBQztRQUkzQixXQUFNLEdBQXdCLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUl2RCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQVluQyxhQUFRLEdBQUcs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QUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUM1QixJQUFJLFdBQVcsQ0FDYixNQUFNLEVBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsRUFDeEMsUUFBUSxFQUNSLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUN6QixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLEVBQVUsRUFBRSxNQUFjLElBQUk7UUFDaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyw4QkFBOEIsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEdBQUcsRUFDdEUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQ3pCLENBQUM7SUFDSixDQUFDOzhHQWx0Q1UsY0FBYztrSEFBZCxjQUFjLGNBRmIsTUFBTTs7MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBcGlSZXN1bHQsIEJyb2FkY2FzdE1lc3NhZ2VJbmZvLCBCcm9hZGNhc3RTZXJ2aWNlLFxyXG4gIEZvbGRlcixcclxuICBGb2xkZXJUcmVlLFxyXG4gIE5hbWVWYWx1ZUl0ZW0sIFN5c3RlbVV0aWxzXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgUmVjb3ZlclBhc3N3b3JkRGlhbG9nRGF0YSwgUmVjb3ZlclBhc3N3b3JkRGlhbG9nUmVzdWx0LCBSZXNldFBhc3N3b3JkRGlhbG9nUmVzdWx0IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aSc7XHJcbmltcG9ydCB7IExvZ2luT0F1dGhUeXBlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5vYXV0aCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VydmljZUZsYWdzLCBDbGlwcGVyRGFzaGJvYXJkLCBDbGlwcGVyRGFzaGJvYXJkUmVzdWx0LCBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyRG9jdW1lbnRTdHJ1Y3R1cmUsIENsaXBwZXJEb2N1bWVudFVwZGF0ZVN0YXRlUGFyYW1zLCBDbGlwcGVyRXhwb3J0RG9jdW1lbnRzUGFyYW1zLCBDbGlwcGVyTG9naW5JbmZvLCBDbGlwcGVyTG9naW5SZXN1bHQsIENsaXBwZXJNb2R1bGUsIENsaXBwZXJPVFBJbmZvLCBDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUGFyYW1zLCBDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUmVzdWx0LCBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSwgQ2xpcHBlclJlZmVyZW5jZXNTZWFyY2hQYXJhbXMsIENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZWFyY2hSZXN1bHQsIENsaXBwZXJTZW5kRG9jdW1lbnRzQnlFbWFpbFBhcmFtcywgQ2xpcHBlclRheG9ub215UGFyYW1zLCBDbGlwcGVyVXNlckxpbmssIENsaXBwZXJVc2VyU2VhcmNoLCBDbGlwcGVyVXNlclRyaWFsSW5mbywgQ2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnQsIENsaXBwZXJUZWFtTWVtYmVySW5mbywgQ2xpcHBlclRlYW1zU2VhcmNoUGFyYW1zLCBDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQsIENsaXBwZXJUZWFtSW5mbywgQ2xpcHBlclRlYW1NZW1iZXJzU2VhcmNoUmVzdWx0LCBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMsIENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdCwgQ2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQsIENsaXBwZXJDYWxlbmRhckNvcHlEZWFkbGluZXNQYXJhbXMsIENsaXBwZXJEZWFkbGluZUluZm8sIENsaXBwZXJDYWxlbmRhclNhdmVEZWFkbGluZVBhcmFtcywgQ2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hSZXN1bHQsIENsaXBwZXJBcmNoaXZlRmlsZUluZm8sIENsaXBwZXJBcmNoaXZlRm9sZGVyc0ltcG9ydFBhcmFtcywgQ2xpcHBlckFyY2hpdmVGaWxlc1NlYXJjaFJlc3VsdCwgQ2xpcHBlckFyY2hpdmVGaWxlc0RlbGV0ZVBhcmFtcywgQ2xpcHBlckFyY2hpdmVGaWxlc0NvcHlQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hQYXJhbXMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XHJcbmltcG9ydCB7IENsaXBwZXJNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIGh0dHBDbGllbnQgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uIHwgbnVsbDtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2UgPSBpbmplY3QoQnJvYWRjYXN0U2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIF9zZXJ2aWNlVXJpOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBzZXJ2aWNlVXJpKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVVyaTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZmxhZ3M6IENsaXBwZXJTZXJ2aWNlRmxhZ3MgPSBDbGlwcGVyU2VydmljZUZsYWdzLk5vbmU7XHJcbiAgZ2V0IGZsYWdzKCk6IENsaXBwZXJTZXJ2aWNlRmxhZ3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZsYWdzO1xyXG4gIH1cclxuICBwcml2YXRlIF9sb2dpbkluZm86IENsaXBwZXJMb2dpbkluZm8gfCBudWxsID0gbnVsbDtcclxuICBnZXQgbG9naW5JbmZvKCk6IENsaXBwZXJMb2dpbkluZm8gfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5fbG9naW5JbmZvKSB7XHJcbiAgICAgIGNvbnN0IGxvZ2luSW5mbyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2xvZ2luJyk7XHJcbiAgICAgIGlmIChsb2dpbkluZm8pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gSlNPTi5wYXJzZShsb2dpbkluZm8pIGFzIENsaXBwZXJMb2dpbkluZm87XHJcbiAgICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2xvZ2luSW5mbztcclxuICB9XHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEluID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2luZ0luID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3QgPSBzaWduYWw8Q2xpcHBlclNlYXJjaFJlc3VsdD4obnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzUlMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSByZWZlcmVuY2VzU25hcHNob3QgPSBzaWduYWw8Q2xpcHBlclNlYXJjaFJlc3VsdD4obnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRhc2hib2FyZDogQ2xpcHBlckRhc2hib2FyZCA9IG5ldyBDbGlwcGVyRGFzaGJvYXJkKCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGJhZyA9IHNpZ25hbDxDbGlwcGVyRG9jdW1lbnRJbmZvW10+KFtdKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYmFnVG90YWw6IFNpZ25hbDxudW1iZXI+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFnKCkubGVuZ3RoO1xyXG4gIH0pO1xyXG4gIHB1YmxpYyByZWFkb25seSB2aXNpYmxlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIF90ZWFtczogTmFtZVZhbHVlSXRlbTxzdHJpbmc+W10gPSBbXTtcclxuICBnZXQgdGVhbXMoKTogTmFtZVZhbHVlSXRlbTxzdHJpbmc+W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RlYW1zO1xyXG4gIH1cclxuICBwdWJsaWMgY3VycmVudFRlYW1JZCA9IHNpZ25hbDxzdHJpbmc+KFN5c3RlbVV0aWxzLmVtcHR5VVVJRCgpKTtcclxuICBwdWJsaWMgY3VycmVudFRlYW1OYW1lID0gc2lnbmFsPHN0cmluZz4oXCJQRVJTT05BTEVcIik7XHJcbiAgcHVibGljIGN1cnJlbnRUZWFtSXNQcml2YXRlOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVhbUlkKCkgIT09IFN5c3RlbVV0aWxzLmVtcHR5VVVJRCgpO1xyXG4gIH0pO1xyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gc2VydmljZVVyaSA6IHRoZSBzZXJ2aWNlIHVyaVxyXG4gICAqIEBwYXJhbSBmbGFnczogdGhlIHNlcnZpY2UgZmxhZ3MuIERlZmF1bHQgaXMgbm9uZS5cclxuICAgKi9cclxuICBpbml0aWFsaXplKFxyXG4gICAgc2VydmljZVVyaTogc3RyaW5nLFxyXG4gICAgZmxhZ3M6IENsaXBwZXJTZXJ2aWNlRmxhZ3MgPSBDbGlwcGVyU2VydmljZUZsYWdzLk5vbmUpIHtcclxuXHJcbiAgICAvLyBDcmVhdGUgdW5pcXVlIGNsaWVudCBpZFxyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2xpcHBlcl9jbGllbnRfaWQnKSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9jbGllbnRfaWQnLCBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZVxyXG4gICAgdGhpcy5fc2VydmljZVVyaSA9IHNlcnZpY2VVcmk7XHJcbiAgICB0aGlzLl9mbGFncyA9IGZsYWdzO1xyXG5cclxuICAgIC8vIFJlYWN0IHRvIG1lc3NhZ2UgYnJvYWRjYXN0aW5nXHJcbiAgICBpZiAoIXRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuZ2V0TWVzc2FnZSgpLnN1YnNjcmliZSgobWVzc2FnZTogQnJvYWRjYXN0TWVzc2FnZUluZm8pID0+IHtcclxuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NIQU5HRUQpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2luKFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5lbWFpbCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEucGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGgsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLm9hdXRoQWNjZXNzVG9rZW4pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSwgbnVsbCwgXCJFcnJvcmUgZGkgQ2xpcHBlclwiKTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmZsYWdzICYgQ2xpcHBlclNlcnZpY2VGbGFncy5EaXNwbGF5Q29ubmVjdGlvblN0YXRlTWVzc2FnZXMpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdDb25uZXNzbyBhIENsaXBwZXInLCAxNTAwLCAncG93ZXInKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBiYWdcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRCYWcoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7IGNvbnNvbGUubG9nKFwiQ2xpcHBlciBub24gZGlzcG9uaWJpbGUuXCIpIH0gLy8gQXZvaWQgdW53YW50ZWQgZXJyb3JzIG9uIGNsaWVudFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5MT0dPVVQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxvZ2dlZEluKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihcIjxwPlwiICsgci5tZXNzYWdlICsgXCI8L3A+PGJyPjxicj48aHI+PHAgY2xhc3M9J3NtYWxsJz48aT5QZXIgZWxpbWluYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIENsaXBwZXIgYWNjZWRlcmUgYTo8YnI+PGI+bWVudSA+IHBlcnNvbmFsaXp6YSA+IGNvbGxlZ2FtZW50aTwvYj48L2k+PC9wPlwiLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZmxhZ3MgJiBDbGlwcGVyU2VydmljZUZsYWdzLkRpc3BsYXlDb25uZWN0aW9uU3RhdGVNZXNzYWdlcykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnRGlzY29ubmVzc28gZGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcl9vZmYnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEVtcHR5IGJhZ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWcuc2V0KFtdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXZlbHVhdGUgY3VycmVudCBzZXNzaW9uIHN0b3JhZ2UgaW4gY2FzZSBvZiBwYWdlIHJlZnJlc2ggKEY1KVxyXG4gICAgaWYgKCF0aGlzLmxvZ2dlZEluKCkgJiYgdGhpcy5nZXRUb2tlbigpKSB7XHJcbiAgICAgIC8vIEF1dG8gbG9naW5cclxuICAgICAgdGhpcy5sb2dnZWRJbi5zZXQodHJ1ZSk7XHJcbiAgICAgIC8vIE5vdGlmeVxyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NPTVBMRVRFRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2V0IEpXVCB0b2tlbnNcclxuICogQHBhcmFtIHZhbHVlIDogdGhlIGxvZ2luIHJlc3VsdFxyXG4gKi9cclxuICBwcml2YXRlIHNldFRva2VuKHZhbHVlOiBDbGlwcGVyTG9naW5SZXN1bHQpIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NsaXBwZXJfand0JywgdmFsdWUudG9rZW4pO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9qd3RfcmVmcmVzaCcsIHZhbHVlLnJlZnJlc2hUb2tlbiA/PyAnJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gY3VycmVudCBKV1QgdG9rZW5cclxuICAgKiBAcGFyYW0gcmVmcmVzaDogdHJ1ZSB0byBnZXQgdGhlIHJlZnJlc2ggdG9rZW4uIERlZmF1bHQgaXMgZmFsc2UuXHJcbiAgICovXHJcbiAgZ2V0VG9rZW4ocmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGxldCB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocmVmcmVzaCA/ICdjbGlwcGVyX2p3dF9yZWZyZXNoJyA6ICdjbGlwcGVyX2p3dCcpO1xyXG4gICAgaWYgKHRva2VuICYmIHRva2VuWzBdID09PSAnXCInKSB7XHJcbiAgICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4gPz8gJyc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgbG9naW4gaW5mb1xyXG4gICAqL1xyXG4gIHN0b3JlTG9naW4oKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9sb2dpbicsIEpTT04uc3RyaW5naWZ5KHRoaXMuX2xvZ2luSW5mbykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFBlcmZvcm0gYXV0byBsb2dpbiB1c2luZyBjdXJyZW50IGxpbmsgZGF0YVxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvbmFsIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICogQHBhcmFtIG9uU3VjY2VzOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHNlY2Nlc3NcclxuICovXHJcbiAgYXV0b0xvZ2luKFxyXG4gICAgZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcGFzc3dvcmQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcmVtZW1iZXI6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gZmFsc2UsXHJcbiAgICBvYXV0aDogTG9naW5PQXV0aFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIG9hdXRoQWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb25TdWNjZXM6IEZ1bmN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHRoaXMubG9naW4oZW1haWwsIHBhc3N3b3JkLCByZW1lbWJlciwgb2F1dGgsIG9hdXRoQWNjZXNzVG9rZW4pXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGluIENsaXBwZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnQ29ubmVzc28gYSBDbGlwcGVyJywgMTUwMCwgJ3Bvd2VyJyk7XHJcbiAgICAgICAgICBpZiAob25TdWNjZXMpIHtcclxuICAgICAgICAgICAgb25TdWNjZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGF1dG8gbG9nb3V0XHJcbiAgICogQHBhcmFtIG9uU3VjY2VzOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHNlY2Nlc3NcclxuICAgKi9cclxuICBhdXRvTG9nb3V0KFxyXG4gICAgb25TdWNjZXM6IEZ1bmN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICB0aGlzLmxvZ291dCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHIgPT4ge1xyXG4gICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlLCBudWxsLCBcIkVycm9yZSBpbiBDbGlwcGVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Rpc2Nvbm5lc3NvIGRhIENsaXBwZXInLCAxNTAwLCAncG93ZXJfb2ZmJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmIChvblN1Y2Nlcykge1xyXG4gICAgICAgICAgb25TdWNjZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dpbiAgIFxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvYW5sIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICAgKiBAcmV0dXJuczogdGhlIGxvZ2luIHJlc3VsdFxyXG4gICAqL1xyXG4gIGxvZ2luKGVtYWlsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHBhc3N3b3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHJlbWVtYmVyOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGZhbHNlLFxyXG4gICAgb2F1dGg6IExvZ2luT0F1dGhUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvYXV0aEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgdGhpcy5sb2dnaW5nSW4uc2V0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvbG9naW4yJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1c2VyOiBvYXV0aCA/IG51bGwgOiBlbWFpbCxcclxuICAgICAgICAgIHBhc3N3b3JkOiBvYXV0aCA/IG51bGwgOiBwYXNzd29yZCxcclxuICAgICAgICAgIGNsaWVudElkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImNsaXBwZXJfY2xpZW50X2lkXCIpLFxyXG4gICAgICAgICAgT0FVVEg6IG9hdXRoXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOlxyXG4gICAgICAgICAgICAhb2F1dGhcclxuICAgICAgICAgICAgICA/IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgOiBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAgICAgICAgICAgLnNldChcIkF1dGhvcml6YXRpb25cIiwgb2F1dGhBY2Nlc3NUb2tlbilcclxuICAgICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdJbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfbG9naW4nKTtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgbWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nSW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgLy8gU3RvcmUgYWNjZXNzIHRva2VuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VG9rZW4oci52YWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvZ2luSW5mbzogQ2xpcHBlckxvZ2luSW5mbyA9IHtcclxuICAgICAgICAgICAgICBjb250ZXh0OiByLnZhbHVlLmNvbnRleHQsXHJcbiAgICAgICAgICAgICAgdXNlclNldHRpbmdzOiByLnZhbHVlLnNldHRpbmdzLFxyXG4gICAgICAgICAgICAgIE9BVVRIOiBvYXV0aFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb2F1dGgpIHtcclxuICAgICAgICAgICAgICBsb2dpbkluZm8udXNlckNyZWRlbnRpYWxzID1cclxuICAgICAgICAgICAgICAgIFN5c3RlbVV0aWxzLmNpcGhlcihcclxuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiBlbWFpbCxcclxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtZW1iZXI6IHJlbWVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICB9KSwgbG9naW5JbmZvLmNvbnRleHQudXNlcklkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBpbmZvICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2luSW5mbyA9IGxvZ2luSW5mbztcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxvZ2luKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VkSW4uc2V0KHRydWUpO1xyXG4gICAgICAgICAgICAvLyBOb3RpZnlcclxuICAgICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5MT0dJTl9DT01QTEVURUQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gbG9nb3V0XHJcbiAgICovXHJcbiAgbG9nb3V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5fc2VydmljZVVyaSArICcvbG9nb3V0Jywge30pLnBpcGUoXHJcbiAgICAgIG1hcChyID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIHJcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKF9lKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXNldCBsb2dpbiByZWZyZXNoIHRpbWVyIGFuZCBsb2dpbiBzdGF0ZVxyXG4gKi9cclxuICByZXNldCgpIHtcclxuICAgIC8vIENsZWFyIGxvZ2luIGluZm9cclxuICAgIHRoaXMuX2xvZ2luSW5mbyA9IG51bGw7XHJcbiAgICAvLyBMb2dnZWQgb3V0XHJcbiAgICB0aGlzLmxvZ2dlZEluLnNldChmYWxzZSk7XHJcbiAgICAvLyBOb3RpZnlcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HT1VUX0NPTVBMRVRFRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBsb2dpbiBkYXRhXHJcbiAgICovXHJcbiAgY2xlYXIoKSB7XHJcbiAgICAvLyBDbGVhciBsb2NhbCBzdG9yYWdlXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2p3dCcpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9qd3RfcmVmcmVzaCcpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9vYXV0aCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfbG9naW4nKTtcclxuXHJcbiAgICAvLyBSZXNldCBsb2dpblxyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBQZXJmb3JtIHRva2VuIHJlZnJlc2hcclxuICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvcmVmcmVzaDIvP3Rva2VuPScgKyB0aGlzLmdldFRva2VuKHRydWUpXHJcbiAgICApLnBpcGUobWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAvLyBVcGRhdGUgdG9rZW5cclxuICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogR2V0IGEgbmV3IG9uZSB0aW1lIHBhc3N3b3JkXHJcbiAgKiBAcGFyYW0gaWQ6IHRoZSBvcHRpb25hbCByZXBvc2l0b3J5IGlkIFxyXG4gICovXHJcbiAgbmV3T1RQKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyT1RQSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9vdHAvbmV3Lz9pZD0nICsgaWQsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBBcnMgZXZlbnRzIGNhbGVuZGFyXHJcbiAgICovXHJcbiAgZXZlbnRzKHBhcmFtczogQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2Fycy9ldmVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUXVlcnkgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgcXVlcnkocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBxdWVyeVxyXG4gICAqL1xyXG4gIHF1ZXJ5RmFjZXRzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9mYWNldHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgKiBVcGRhdGUgZG9jdW1lbnQgc3RhdGVcclxuICAqL1xyXG4gIHVwZGF0ZVN0YXRlKHBhcmFtczogQ2xpcHBlckRvY3VtZW50VXBkYXRlU3RhdGVQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdGF0ZS91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgYSBkb2N1bWVudCBpbiBwZGYgZm9ybWF0XHJcbiAgICovXHJcbiAgZXhwb3J0UGRmKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvZXhwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICogRXhwb3J0IGRvY3VtZW50IGxpc3QgKHF1ZXJ5IG9yIHNlbGVjdGVkIGl0ZW1zKSBvciBleHBvcnQgZGVhZGxpbmVzIGFzIGljc1xyXG4gKi9cclxuICBleHBvcnQocGFyYW1zOiBDbGlwcGVyRXhwb3J0RG9jdW1lbnRzUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQnLFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgZG9jdW1lbnRzIGxpbmsgYnkgZW1haWxcclxuICAgKi9cclxuICBzZW5kVG8ocGFyYW1zOiBDbGlwcGVyU2VuZERvY3VtZW50c0J5RW1haWxQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZW5kJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIHBhZ2UgdGhlIGZ1bGwgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICovXHJcbiAgcmVwb3J0KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGNvbW1lbnRcclxuICAgKi9cclxuICBjb21tZW50KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NvbW1lbnQvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGluZm9cclxuICAgKi9cclxuICBpbmZvKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9pbmZvLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkb2N1bWVudCBzdHJ1Y3R1cmVcclxuICAgKi9cclxuICBpbmRleChpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRvY3VtZW50U3RydWN0dXJlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdHJ1Y3R1cmUvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGxhc3QgdXBkYXRlXHJcbiAgICovXHJcbiAgbGFzdFVwZGF0ZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8c3RyaW5nPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9sYXN0LXVwZGF0ZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlcyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlO1xyXG4gICAgaWYgKCFtb2RlKSBtb2RlID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luOlxyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgcGFyYW1zLm1vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3JlZmVyZW5jZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmYWNldHMgZm9yIGEgZG9jdW1lbnQgcmVmZXJlbmNlc1xyXG4gICAqL1xyXG4gIHJlZmVyZW5jZXNGYWNldHMocGFyYW1zOiBDbGlwcGVyUmVmZXJlbmNlc1NlYXJjaFBhcmFtcykge1xyXG4gICAgbGV0IG1vZGUgPSBwYXJhbXMubW9kZSA/PyBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcy9mYWNldHMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkp1cmlzOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2p1cmlzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdyYXAgZG9jdW1lbnQgcmVuZGVyaW5nIHRvIGFsbG93IHRva2VuIHJlZnJlc2hcclxuICAgKi9cclxuICBwcmVSZW5kZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9wcmUtcmVuZGVyJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQganVyaXMgYXJ0aWNsZXNcclxuICAgKi9cclxuICBqdXJpc0FydGljbGVzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9qdXJpcy9hcnRpY2xlcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogR2V0IGRlYWRsaW5lcyBzbmFwc2hvdCBiYXNlZCBvbiB0aGUgZGVhZGxpbmVzXHJcbiAgKi9cclxuICBkZWFkbGluZXNTbmFwc2hvdChwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvY2FsZW5kYXIvc25hcHNob3QnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGhlIHRheG9ub215XHJcbiAgICovXHJcbiAgZ2V0VGF4b25vbXkocGFyYW1zOiBDbGlwcGVyVGF4b25vbXlQYXJhbXMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxGb2xkZXJUcmVlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RheG9ub215JyxcclxuICAgICAgcGFyYW1zID8/IHsgbW9kZWw6IDAsIGNvdW50SXRlbXM6IGZhbHNlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0b3BpY3NcclxuICAgKi9cclxuICBnZXRUb3BpY3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdG9waWNzJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXRyaWV2ZSB0b3BpY3MgYXMgdHJlZVxyXG4gKi9cclxuICBnZXRUb3BpY3NBc1RyZWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Rm9sZGVyVHJlZT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90b3BpY3MyJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRhZ3NcclxuICAgKi9cclxuICBnZXRUYWdzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RhZ3MnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vL1xyXG4gIC8vIERBU0hCT0FSRFxyXG4gIC8vL1xyXG4gIC8qKlxyXG4gICogUmV0cmlldmUgY3VycmVudCBkYXNoYm9hcmRcclxuICAqL1xyXG4gIGxvYWREYXNoYm9hcmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGFzaGJvYXJkUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9kYXNoYm9hcmQnLFxyXG4gICAgICAgIHsgcmVmcmVzaGluZzogdHJ1ZSB9XHJcbiAgICAgICkuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4pID0+IHtcclxuICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5kb2N1bWVudFVwZGF0ZXMgPSByLnZhbHVlLmRvY3VtZW50VXBkYXRlcztcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmV4cGlyZWREZWFkbGluZXMgPSByLnZhbHVlLmV4cGlyZWREZWFkbGluZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5leHBpcmluZ0RlYWRsaW5lcyA9IHIudmFsdWUuZXhwaXJpbmdEZWFkbGluZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5pc1RyaWFsID0gci52YWx1ZS5pc1RyaWFsO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuaXRlbXMuc2V0KHIudmFsdWUuaXRlbXMpO1xyXG4gICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0RBU0hCT0FSRF9VUERBVEVEKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBVcGRhdGUgdW5yZWFkIGl0ZW1zXHJcbiAgKiBAcGFyYW0gbW9kdWxlIDogdGhlIG1vZHVsZVxyXG4gICogQHBhcmFtIGluY3JlbWVudCA6IHRoZSBpbmNyZW1lbnQgKGNhbiBiZSBuZWdhdGl2ZSlcclxuICAqL1xyXG4gIHVwZGF0ZVVucmVhZEl0ZW1zKG1vZHVsZTogQ2xpcHBlck1vZHVsZSwgaW5jcmVtZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVVucmVhZEl0ZW1zKG1vZHVsZSwgaW5jcmVtZW50KTtcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9EQVNIQk9BUkRfVVBEQVRFRCk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBMSU5LU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAqIFNhdmUgYSB1c2VyIGxpbmtcclxuICAqIEBwYXJhbSBpdGVtOiB0aGUgdXNlciBsaW5rXHJcbiAgKi9cclxuICBzYXZlTGluayhpdGVtOiBDbGlwcGVyVXNlckxpbmspIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L2xpbmtzL3NhdmUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgdXNlciBsaW5rXHJcbiAgICogQHBhcmFtIGl0ZW06IHRoZSB1c2VyIGxpbmtcclxuICAgKi9cclxuICBkZWxldGVMaW5rKGl0ZW06IENsaXBwZXJVc2VyTGluaykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvbGlua3MvZGVsZXRlJyxcclxuICAgICAgaXRlbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvLy9cclxuICAvLyBCQUcgLSBXT1JLSU5HIERPQ1VNRU5UU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgbG9hZEJhZygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcnXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChuLmRvY3VtZW50RGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEluZm8gPSBKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IGRvY3VtZW50SW5mby5Eb2N1bWVudElkIHx8IGRvY3VtZW50SW5mby5JZDtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMSA9IGRvY3VtZW50SW5mby5UaXRsZTEgPz8gZG9jdW1lbnRJbmZvLlRpdGxlMjtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50RGVzY3JpcHRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5iYWcuc2V0KGl0ZW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG9uZSBvciBtb3JlIHdvcmtpbmcgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZHMgOiB0aGUgZG9jdW1lbnQgaWRzIHRvIGFkZFxyXG4gICAqL1xyXG4gIGFkZFRvQmFnKGRvY3VtZW50SWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvYWRkJyxcclxuICAgICAgICB7IGRvY3VtZW50SWRzOiBkb2N1bWVudElkcyB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdID0gW107XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICBpZiAobi5kb2N1bWVudERlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50SW5mbyA9IEpTT04ucGFyc2Uobi5kb2N1bWVudERlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50SWQgPSBkb2N1bWVudEluZm8uRG9jdW1lbnRJZCB8fCBkb2N1bWVudEluZm8uSWQ7XHJcbiAgICAgICAgICAgICAgICAgIG4udGl0bGUxID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/PyBkb2N1bWVudEluZm8uVGl0bGUyO1xyXG4gICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG4uZG9jdW1lbnREZXNjcmlwdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIG5ld0l0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmJhZy51cGRhdGUoKHZhbHVlczogYW55KSA9PiBbLi4udmFsdWVzLCAuLi5uZXdJdGVtc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIG9uZSB3b3JraW5nIGRvY3VtZW50XHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICByZW1vdmVGcm9tQmFnKGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZy9kZWxldGUnLFxyXG4gICAgICAgIHsgZG9jdW1lbnRJZHM6IFtkb2N1bWVudElkXSB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PG51bWJlcj4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmJhZygpLmZpbmRJbmRleCgobjogYW55KSA9PiBuLmRvY3VtZW50SWQgPT09IGRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgaWYgKHAgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFnLnVwZGF0ZSgodmFsdWVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKHAsIDEpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWVzXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgY2xlYXJCYWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2RlbGV0ZScsXHJcbiAgICAgICAgeyBkZWxldGVBbGw6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxudW1iZXI+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJhZy5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBXT1JLSU5HIFNFQVJDSEVTXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgd29ya2luZyBzZWFyY2hlc1xyXG4gICAqIEBwYXJhbTogbW9kdWxlOiB0aGUgbW9kdWxlIHRvIGxvYWQgc2VhcmNoZXMgZm9yXHJcbiAgICovXHJcbiAgbG9hZFNlYXJjaGVzKG1vZHVsZTogQ2xpcHBlck1vZHVsZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlclNlYXJjaFtdPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvc2VhcmNoZXMvP21vZHVsZT0nICsgbW9kdWxlXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYSB3b3JraW5nIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgY2xpcHBlciB1c2VyIHNlYXJjaFxyXG4gICAqL1xyXG4gIHNhdmVTZWFyY2gocGFyYW1zOiBDbGlwcGVyVXNlclNlYXJjaCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJTZWFyY2g+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZWFyY2hlcy9zYXZlJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBvbmUgd29ya2luZyBzZWFyY2hcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgZGVsZXRlU2VhcmNoKGlkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlYXJjaGVzL2RlbGV0ZScsXHJcbiAgICAgICAgeyBpZDogaWQgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVVNFUiBTRVRUSU5HUyBBTkQgVFJJQUxcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiogUmVzZXQgYSB1c2VyIHBhc3N3b3JkXHJcbiogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiovXHJcbiAgcmVzZXRQYXNzd29yZChwYXJhbXM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZXNldFBhc3N3b3JkRGlhbG9nUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvcGFzc3dvcmQvcmVzZXQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWNvdmVyIHBhc3N3b3JkXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcmVjb3ZlclBhc3N3b3JkKHBhcmFtczogUmVjb3ZlclBhc3N3b3JkRGlhbG9nRGF0YSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZWNvdmVyUGFzc3dvcmREaWFsb2dSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9wYXNzd29yZC9yZWNvdmVyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzZXR0aW5ncyBcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHVwZGF0ZVNldHRpbmdzKHBhcmFtczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9zZXR0aW5ncy91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY2hhbm5lbCBzdGF0ZVxyXG4gICAqIEBwYXJhbSBpZDogdGhlIGNoYW5uZWwgaWQgKDEsIDIsIDMsIDQpXHJcbiAgICovXHJcbiAgdXBkYXRlQ2hhbm5lbFN0YXRlKGlkOiBudW1iZXIsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3NldHRpbmdzL2NoYW5uZWxzL3VwZGF0ZScsXHJcbiAgICAgIHtcclxuICAgICAgICBjaGFubmVsSWQ6IGlkLFxyXG4gICAgICAgIGlzRW5hYmxlZDogZW5hYmxlZCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0cmlhbCBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUcmlhbEluZm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJUcmlhbEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90cmlhbCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdHJpYWwgaW5mb1xyXG4gICAqL1xyXG4gIHVwZGF0ZVRyaWFsSW5mbygpIHtcclxuICAgIGlmICghdGhpcy5fbG9naW5JbmZvIHx8IHRoaXMuX2xvZ2luSW5mbz8uY29udGV4dC5oYXNUcmlhbCA9PT0gZmFsc2UpXHJcbiAgICAgIHJldHVybjsgLy8gTm90IHN1cHBvcnRlZFxyXG4gICAgdGhpcy5nZXRUcmlhbEluZm8oKS5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVXNlclRyaWFsSW5mbz4pID0+IHtcclxuICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC5oYXNUcmlhbCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC50cmlhbEluZm8gPSByLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC5oYXNUcmlhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQudHJpYWxJbmZvID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVEVBTVNcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgKiBSZW5hbWUgYSB0ZWFtXHJcbiAgKiBAcGFyYW0gbmV3TmFtZSA6IHRoZSBuZXcgbmFtZVxyXG4gICovXHJcbiAgcmVuYW1lVGVhbShuZXdOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclRlYW1JbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvdXBkYXRlJyxcclxuICAgICAgeyB0aXRsZTogbmV3TmFtZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGVhbXNcclxuICAgKi9cclxuICBnZXRUZWFtcyhwYXJhbXM6IENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgdGhpcy5fdGVhbXMgPSByLnZhbHVlLml0ZW1zO1xyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRlYW0gbWVtYmVyc1xyXG4gICAqL1xyXG4gIGdldFRlYW1NZW1iZXJzKHBhcmFtczogQ2xpcHBlclRlYW1zU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVyc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgbWVtYmVyc1xyXG4gICAqIEBwYXJhbSBpZHM6IHRoZSBpZCBsaXN0IHRvIGRlbGV0ZVxyXG4gICAqL1xyXG4gIGRlbGV0ZVRlYW1NZW1iZXJzKGlkczogbnVtYmVyW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvbWVtYmVycy9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIG1lbWJlclxyXG4gICAqIEBwYXJhbSBpdGVtOiB0aGUgaXRlbSB0byBzYXZlXHJcbiAgICovXHJcbiAgc2F2ZVRlYW1NZW1iZXIoaXRlbTogQ2xpcHBlclRlYW1NZW1iZXJJbmZvKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVySW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMvc2F2ZScsXHJcbiAgICAgIGl0ZW1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vXHJcbiAgLy8gQ0FMRU5EQVJcclxuICAvLy9cclxuICAvKipcclxuICAgKiBRdWVyeSBjYWxlbmRhclxyXG4gICAqL1xyXG4gIHF1ZXJ5Q2FsZW5kYXIocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckNhbGVuZGFyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocjogQXBpUmVzdWx0PENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdD4pID0+IHtcclxuICAgICAgICAgIC8vIFN0b3JlIHRlYW1zXHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RlYW1zID0gci52YWx1ZS50ZWFtcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGNhbGVuZGFyIHNuYXBzaG90XHJcbiAgICovXHJcbiAgY2FsZW5kYXJTbmFwc2hvdChwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zbmFwc2hvdCcsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBvbmUgb3IgbW9yZSBpdGVtc1xyXG4gICAqIEBwYXJhbSBpZHM6IGlkcyB0byBkZWxldGVcclxuICAgKi9cclxuICBkZWxldGVDYWxlbmRhckRlYWRsaW5lcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3B5IG9uZSBvciBtb3JlIGl0ZW1zXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgY29weUNhbGVuZGFyRGVhZGxpbmVzKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyQ29weURlYWRsaW5lc1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGEgZGVhZGxpbmVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gY2xvc2VcclxuICAgKi9cclxuICBjbG9zZUNhbGVuZGFyRGVhZGxpbmUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGVhZGxpbmVJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyL2Nsb3NlJyxcclxuICAgICAgeyBpZDogaWQgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYW4gaXRlbVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVDYWxlbmRhckRlYWRsaW5lKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyU2F2ZURlYWRsaW5lUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJEZWFkbGluZUluZm9bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zYXZlJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cml2ZSBhIG4gaXRlbVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpdGVtIGlkXHJcbiAgICovXHJcbiAgZ2V0Q2FsZW5kYXJEZWFkbGluZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRlYWRsaW5lSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgdG8gaUNhbGVuZGFyIGZvcm1hdFxyXG4gICAqIEBwYXJhbSBpZHMgOiBkZWFkbGluZXMgdG8gZXhwb3J0XHJcbiAgICovXHJcbiAgZXhwb3J0Q2FsZW5kYXJEZWFkbGluZXMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9leHBvcnQnLFxyXG4gICAgICB7IGlkczogaWRzIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gQVJDSElWRVxyXG4gIC8vL1xyXG4gIC8qKlxyXG4gICogUmV0cmlldmUgYWxsIGZvbGRlcnNcclxuICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgKi9cclxuICBnZXRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9mb2xkZXJzJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZWFtcyA9IHIudmFsdWUudGVhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuXHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBmb2xkZXJcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVBcmNoaXZlRm9sZGVyKHBhcmFtczogRm9sZGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PEZvbGRlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZvbGRlcnMvc2F2ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIGlkOiB0aGUgZm9sZGVyIGlkIG9yIG51bGwgdG8gZXhwb3J0IGFsbCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHRlYW1JZDogdGhlIG9wdGlvbmFsIHRlYW0gaWQuIERlZmF1bHQgbnVsbCAocGVyc29uYWwpXHJcbiAgICovXHJcbiAgZXhwb3J0QXJjaGl2ZUZvbGRlcnMoaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLCB0ZWFtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9leHBvcnQvPyc7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdXJsICs9ICdpZD0nICsgaWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGVhbUlkKSB7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIHVybCArPSAnJic7XHJcbiAgICAgIH1cclxuICAgICAgdXJsICs9ICd0ZWFtPScgKyB0ZWFtSWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuICAgICAgdXJsLFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyYW0nXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBpbXBvcnRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc0ltcG9ydFBhcmFtcykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLm5hbWUsIHBhcmFtcy5maWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnc291cmNlRmlsZU5hbWUnLCBwYXJhbXMuZmlsZS5uYW1lKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnb3ZlcndyaXRlJywgcGFyYW1zLm92ZXJ3cml0ZSA9PT0gdHJ1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiKTtcclxuICAgIGlmIChwYXJhbXMuZGVzdEZvbGRlcklkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzdEZvbGRlcklkJywgcGFyYW1zLmRlc3RGb2xkZXJJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRlYW1JZCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RlYW1JZCcsIHBhcmFtcy50ZWFtSWQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIHJlcXVlc3RcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChcclxuICAgICAgbmV3IEh0dHBSZXF1ZXN0KFxyXG4gICAgICAgICdQT1NUJyxcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ltcG9ydC8nLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHsgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZpbGVzIGFuZCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBxdWVyeUFyY2hpdmVJdGVtcyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGaWxlc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGZpbGUgYW5kIGZvbGRlcnNcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBkZWxldGVBcmNoaXZlSXRlbXMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZpbGVzRGVsZXRlUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2RlbGV0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvcHkgIGZpbGUgYW5kIGZvbGRlcnMgdG8gYW5vdGhlciBmb2xkZXIgb3IgdGhlIHNhbWVcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBjb3B5QXJjaGl2ZUl0ZW1zKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlc0NvcHlQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgZmlsZVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgc2F2ZUFyY2hpdmVGaWxlKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlSW5mbykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGlmIChwYXJhbXMuZmlsZSkgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLmZpbGUubmFtZSwgcGFyYW1zLmZpbGUuZmlsZSk7XHJcbiAgICBpZiAocGFyYW1zLmlkKSBmb3JtRGF0YS5hcHBlbmQoJ2lkJywgcGFyYW1zLmlkKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZm9sZGVySWQnLCBwYXJhbXMuZm9sZGVySWQpO1xyXG4gICAgaWYgKHBhcmFtcy50b3BpY0lkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndG9waWNJZCcsIHBhcmFtcy50b3BpY0lkKTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCd0b3BpY1BhdGgnLCBwYXJhbXMudG9waWNQYXRoKTtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbXMudGl0bGUxKSBmb3JtRGF0YS5hcHBlbmQoJ3RpdGxlMScsIHBhcmFtcy50aXRsZTEpO1xyXG4gICAgaWYgKHBhcmFtcy50aXRsZTIpIGZvcm1EYXRhLmFwcGVuZCgndGl0bGUyJywgcGFyYW1zLnRpdGxlMik7XHJcbiAgICBpZiAocGFyYW1zLm9yaWdpbikgZm9ybURhdGEuYXBwZW5kKCdvcmlnaW4nLCBwYXJhbXMub3JpZ2luKTtcclxuICAgIGlmIChwYXJhbXMub3JpZ2luRGVzY3JpcHRpb24pIHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdvcmlnaW5EZXNjcmlwdGlvbicsIHBhcmFtcy5vcmlnaW5EZXNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLmRvY3VtZW50SWQpIGZvcm1EYXRhLmFwcGVuZCgnZG9jdW1lbnRJZCcsIHBhcmFtcy5kb2N1bWVudElkKTtcclxuICAgIGlmIChwYXJhbXMuZG9jdW1lbnRJZHMpIGZvcm1EYXRhLmFwcGVuZCgnZG9jdW1lbnRJZHMnLCBwYXJhbXMuZG9jdW1lbnRJZHMpO1xyXG4gICAgaWYgKHBhcmFtcy5iaW5hcnlJZCkgZm9ybURhdGEuYXBwZW5kKCdiaW5hcnlJZCcsIHBhcmFtcy5iaW5hcnlJZD8udG9TdHJpbmcoKSk7XHJcbiAgICBpZiAocGFyYW1zLnRhZ3MpIGZvcm1EYXRhLmFwcGVuZCgndGFncycsIHBhcmFtcy50YWdzKTtcclxuICAgIGlmIChwYXJhbXMubm90ZXMpIGZvcm1EYXRhLmFwcGVuZCgnbm90ZXMnLCBwYXJhbXMubm90ZXMpO1xyXG4gICAgaWYgKHBhcmFtcy5maWxlTmFtZSkgZm9ybURhdGEuYXBwZW5kKCdmaWxlTmFtZScsIHBhcmFtcy5maWxlTmFtZSk7XHJcbiAgICBpZiAocGFyYW1zLmZpbGVUeXBlKSBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGVUeXBlJywgKHBhcmFtcy5maWxlVHlwZSBhcyBudW1iZXIpLnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHBhcmFtcy5zdG9yYWdlVHlwZSkgZm9ybURhdGEuYXBwZW5kKCdzdG9yYWdlVHlwZScsIChwYXJhbXMuc3RvcmFnZVR5cGUgYXMgbnVtYmVyKS50b1N0cmluZygpKTtcclxuICAgIGlmIChwYXJhbXMubW9kZWwpIGZvcm1EYXRhLmFwcGVuZCgnbW9kZWwnLCAocGFyYW1zLm1vZGVsIGFzIG51bWJlcikudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHJlcXVlc3RcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChcclxuICAgICAgbmV3IEh0dHBSZXF1ZXN0KFxyXG4gICAgICAgICdQT1NUJyxcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL3NhdmUnLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHsgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZpbGUgZGF0YVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpdGVtIGlkXHJcbiAgICovXHJcbiAgZ2V0QXJjaGl2ZUZpbGUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJBcmNoaXZlRmlsZUluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy8nICsgaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgZmlsZVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBiaW5hcnkgaWQgdG8gZG93bmxvYWRcclxuICAgKiBAcGFyYW0gb3RwIDogdGhlIG9wdGlvbmFsIG9uZSB0aW1lIHBhc3N3b3JkXHJcbiAgICovXHJcbiAgZG93bmxvYWRBcmNoaXZlRmlsZShpZDogbnVtYmVyLCBvdHA6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2Rvd25sb2FkLz9pZD0nICsgaWQgKyAnJm90cD0nICsgb3RwLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19