igniteui-angular 18.2.6 → 18.2.8

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 (76) hide show
  1. package/esm2022/lib/carousel/carousel.component.mjs +10 -6
  2. package/esm2022/lib/checkbox/checkbox.component.mjs +30 -20
  3. package/esm2022/lib/core/utils.mjs +8 -2
  4. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +28 -26
  5. package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +4 -4
  6. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
  7. package/esm2022/lib/grids/grid-base.directive.mjs +2 -2
  8. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +3 -3
  9. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
  10. package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
  11. package/esm2022/lib/icon/icon.component.mjs +4 -7
  12. package/esm2022/lib/icon/icon.service.mjs +39 -11
  13. package/esm2022/lib/icon/types.mjs +1 -1
  14. package/esm2022/lib/input-group/input-group.component.mjs +29 -21
  15. package/esm2022/lib/services/excel/worksheet-data-dictionary.mjs +2 -2
  16. package/esm2022/lib/services/exporter-common/export-utilities.mjs +5 -4
  17. package/esm2022/lib/services/public_api.mjs +2 -1
  18. package/esm2022/lib/services/theme/theme.token.mjs +39 -0
  19. package/fesm2022/igniteui-angular.mjs +181 -137
  20. package/fesm2022/igniteui-angular.mjs.map +1 -1
  21. package/lib/carousel/carousel.component.d.ts +2 -1
  22. package/lib/checkbox/checkbox.component.d.ts +4 -5
  23. package/lib/core/styles/components/avatar/_avatar-theme.scss +1 -31
  24. package/lib/core/styles/components/card/_card-theme.scss +1 -1
  25. package/lib/core/styles/components/combo/_combo-theme.scss +22 -8
  26. package/lib/core/styles/components/input/_input-group-theme.scss +5 -2
  27. package/lib/core/styles/themes/presets/igniteui-angular-dark.scss +8 -2
  28. package/lib/core/styles/themes/presets/igniteui-angular.scss +8 -2
  29. package/lib/core/styles/themes/presets/igniteui-bootstrap-dark.scss +8 -2
  30. package/lib/core/styles/themes/presets/igniteui-bootstrap-light.scss +8 -2
  31. package/lib/core/styles/themes/presets/igniteui-dark-green.scss +8 -2
  32. package/lib/core/styles/themes/presets/igniteui-fluent-dark-excel.scss +8 -2
  33. package/lib/core/styles/themes/presets/igniteui-fluent-dark-word.scss +8 -2
  34. package/lib/core/styles/themes/presets/igniteui-fluent-dark.scss +8 -2
  35. package/lib/core/styles/themes/presets/igniteui-fluent-light-excel.scss +8 -2
  36. package/lib/core/styles/themes/presets/igniteui-fluent-light-word.scss +8 -2
  37. package/lib/core/styles/themes/presets/igniteui-fluent-light.scss +8 -2
  38. package/lib/core/styles/themes/presets/igniteui-indigo-dark.scss +8 -2
  39. package/lib/core/styles/themes/presets/igniteui-indigo-light.scss +8 -2
  40. package/lib/core/utils.d.ts +2 -0
  41. package/lib/directives/drag-drop/drag-drop.directive.d.ts +1 -0
  42. package/lib/icon/icon.component.d.ts +1 -3
  43. package/lib/icon/icon.service.d.ts +7 -4
  44. package/lib/icon/types.d.ts +3 -1
  45. package/lib/input-group/input-group.component.d.ts +8 -10
  46. package/lib/services/public_api.d.ts +1 -0
  47. package/lib/services/theme/theme.token.d.ts +24 -0
  48. package/package.json +1 -1
  49. package/styles/igniteui-angular-dark.css +1 -1
  50. package/styles/igniteui-angular.css +1 -1
  51. package/styles/igniteui-bootstrap-dark.css +1 -1
  52. package/styles/igniteui-bootstrap-light.css +1 -1
  53. package/styles/igniteui-dark-green.css +1 -1
  54. package/styles/igniteui-fluent-dark-excel.css +1 -1
  55. package/styles/igniteui-fluent-dark-word.css +1 -1
  56. package/styles/igniteui-fluent-dark.css +1 -1
  57. package/styles/igniteui-fluent-light-excel.css +1 -1
  58. package/styles/igniteui-fluent-light-word.css +1 -1
  59. package/styles/igniteui-fluent-light.css +1 -1
  60. package/styles/igniteui-indigo-dark.css +1 -1
  61. package/styles/igniteui-indigo-light.css +1 -1
  62. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  63. package/styles/maps/igniteui-angular.css.map +1 -1
  64. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  65. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  66. package/styles/maps/igniteui-dark-green.css.map +1 -1
  67. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  68. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  69. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  70. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  71. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  72. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  73. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  74. package/styles/maps/igniteui-indigo-light.css.map +1 -1
  75. package/esm2022/lib/services/theme/theme.service.mjs +0 -48
  76. package/lib/services/theme/theme.service.d.ts +0 -27
@@ -1,12 +1,14 @@
1
- import { Injectable, SecurityContext, Inject, Optional } from "@angular/core";
1
+ import { DestroyRef, Inject, Injectable, Optional, SecurityContext } from "@angular/core";
2
2
  import { DOCUMENT } from "@angular/common";
3
3
  import { Subject } from "rxjs";
4
4
  import { iconReferences } from './icon.references';
5
+ import { THEME_TOKEN } from "../services/theme/theme.token";
5
6
  import { IndigoIcons } from "./icons.indigo";
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@angular/platform-browser";
8
9
  import * as i2 from "@angular/common/http";
9
10
  import * as i3 from "../core/utils";
11
+ import * as i4 from "../services/theme/theme.token";
10
12
  /**
11
13
  * **Ignite UI for Angular Icon Service** -
12
14
  *
@@ -20,10 +22,12 @@ import * as i3 from "../core/utils";
20
22
  * ```
21
23
  */
22
24
  export class IgxIconService {
23
- constructor(_sanitizer, _httpClient, _platformUtil, document) {
25
+ constructor(_sanitizer, _httpClient, _platformUtil, _themeToken, _destroyRef, document) {
24
26
  this._sanitizer = _sanitizer;
25
27
  this._httpClient = _httpClient;
26
28
  this._platformUtil = _platformUtil;
29
+ this._themeToken = _themeToken;
30
+ this._destroyRef = _destroyRef;
27
31
  this.document = document;
28
32
  this._defaultFamily = {
29
33
  name: "material",
@@ -35,6 +39,10 @@ export class IgxIconService {
35
39
  this._iconLoaded = new Subject();
36
40
  this.iconLoaded = this._iconLoaded.asObservable();
37
41
  this.setFamily(this._defaultFamily.name, this._defaultFamily.meta);
42
+ const { unsubscribe } = this._themeToken?.onChange((theme) => {
43
+ this.setRefsByTheme(theme);
44
+ });
45
+ this._destroyRef.onDestroy(() => unsubscribe);
38
46
  if (this._platformUtil?.isBrowser) {
39
47
  this._domParser = new DOMParser();
40
48
  for (const [name, svg] of IndigoIcons) {
@@ -87,12 +95,13 @@ export class IgxIconService {
87
95
  }
88
96
  /** @hidden @internal */
89
97
  setRefsByTheme(theme) {
90
- if (this.theme !== theme) {
91
- this.theme = theme;
92
- for (const { alias, target } of iconReferences) {
93
- const icon = target.get(theme) ?? target.get('default');
94
- this.addIconRef(alias.name, alias.family, icon);
95
- }
98
+ for (const { alias, target } of iconReferences) {
99
+ const external = this._iconRefs.get(alias.family)?.get(alias.name)?.external;
100
+ const _ref = this._iconRefs.get('default')?.get(alias.name) ?? {};
101
+ const _target = target.get(theme) ?? target.get('default');
102
+ const icon = target.get(theme) ?? target.get('default');
103
+ const overwrite = !external && !(JSON.stringify(_ref) === JSON.stringify(_target));
104
+ this._setIconRef(alias.name, alias.family, icon, overwrite);
96
105
  }
97
106
  }
98
107
  /**
@@ -118,6 +127,14 @@ export class IgxIconService {
118
127
  this.setIconRef(name, family, icon);
119
128
  }
120
129
  }
130
+ _setIconRef(name, family, icon, overwrite = false) {
131
+ if (overwrite) {
132
+ this.setIconRef(name, family, {
133
+ ...icon,
134
+ external: false
135
+ });
136
+ }
137
+ }
121
138
  /**
122
139
  * Similar to addIconRef, but always sets the icon reference meta for an icon in a meta family.
123
140
  * ```typescript
@@ -130,8 +147,9 @@ export class IgxIconService {
130
147
  familyRef = new Map();
131
148
  this._iconRefs.set(family, familyRef);
132
149
  }
150
+ const external = icon.external ?? true;
133
151
  const familyType = this.familyType(icon?.family);
134
- familyRef.set(name, { ...icon, type: icon.type ?? familyType });
152
+ familyRef.set(name, { ...icon, type: icon.type ?? familyType, external });
135
153
  this._iconLoaded.next({ name, family });
136
154
  }
137
155
  /**
@@ -270,7 +288,7 @@ export class IgxIconService {
270
288
  }
271
289
  }
272
290
  }
273
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxIconService, deps: [{ token: i1.DomSanitizer, optional: true }, { token: i2.HttpClient, optional: true }, { token: i3.PlatformUtil, optional: true }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
291
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxIconService, deps: [{ token: i1.DomSanitizer, optional: true }, { token: i2.HttpClient, optional: true }, { token: i3.PlatformUtil, optional: true }, { token: THEME_TOKEN, optional: true }, { token: DestroyRef, optional: true }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
274
292
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxIconService, providedIn: "root" }); }
275
293
  }
276
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxIconService, decorators: [{
@@ -284,10 +302,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
284
302
  type: Optional
285
303
  }] }, { type: i3.PlatformUtil, decorators: [{
286
304
  type: Optional
305
+ }] }, { type: i4.ThemeToken, decorators: [{
306
+ type: Optional
307
+ }, {
308
+ type: Inject,
309
+ args: [THEME_TOKEN]
310
+ }] }, { type: i0.DestroyRef, decorators: [{
311
+ type: Optional
312
+ }, {
313
+ type: Inject,
314
+ args: [DestroyRef]
287
315
  }] }, { type: Document, decorators: [{
288
316
  type: Optional
289
317
  }, {
290
318
  type: Inject,
291
319
  args: [DOCUMENT]
292
320
  }] }] });
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2ljb24vaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBSWxELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFlN0M7Ozs7Ozs7Ozs7O0dBV0c7QUFJSCxNQUFNLE9BQU8sY0FBYztJQXVCdkIsWUFDd0IsVUFBd0IsRUFDeEIsV0FBdUIsRUFDdkIsYUFBMkIsRUFDUCxRQUFrQjtRQUh0QyxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQ1AsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWZ0RCxtQkFBYyxHQUFlO1lBQ2pDLElBQUksRUFBRSxVQUFVO1lBQ2hCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1NBQ3RELENBQUM7UUFDTSxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFDckQsY0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFDeEQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQVVwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FB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SSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7OEdBclZRLGNBQWMsb0pBMkJDLFFBQVE7a0hBM0J2QixjQUFjLGNBRlgsTUFBTTs7MkZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQXlCUSxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBTZWN1cml0eUNvbnRleHQsIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSBcIi4uL2NvcmUvdXRpbHNcIjtcbmltcG9ydCB7IGljb25SZWZlcmVuY2VzIH0gZnJvbSAnLi9pY29uLnJlZmVyZW5jZXMnXG5pbXBvcnQgeyBJY29uRmFtaWx5LCBJY29uTWV0YSwgRmFtaWx5TWV0YSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEljb25UeXBlLCBJY29uUmVmZXJlbmNlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBJZ3hUaGVtZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy90aGVtZS90aGVtZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJbmRpZ29JY29ucyB9IGZyb20gXCIuL2ljb25zLmluZGlnb1wiO1xuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIFNWRyBpY29uIGlzIGxvYWRlZCB0aHJvdWdoXG4gKiBhIEhUVFAgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZ3hJY29uTG9hZGVkRXZlbnQge1xuICAgIC8qKiBOYW1lIG9mIHRoZSBpY29uICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgYWN0dWFsIFNWRyB0ZXh0LCBpZiBhbnkgKi9cbiAgICB2YWx1ZT86IHN0cmluZztcbiAgICAvKiogVGhlIGZvbnQtZmFtaWx5IGZvciB0aGUgaWNvbi4gRGVmYXVsdHMgdG8gbWF0ZXJpYWwuICovXG4gICAgZmFtaWx5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgSWNvbiBTZXJ2aWNlKiogLVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgSWNvbiBTZXJ2aWNlIG1ha2VzIGl0IGVhc3kgZm9yIGRldmVsb3BlcnMgdG8gaW5jbHVkZSBjdXN0b20gU1ZHIGltYWdlcyBhbmQgdXNlIHRoZW0gd2l0aCBJZ3hJY29uQ29tcG9uZW50LlxuICogSW4gYWRkaXRpb24gaXQgY291bGQgYmUgdXNlZCB0byBhc3NvY2lhdGUgYSBjdXN0b20gY2xhc3MgdG8gYmUgYXBwbGllZCBvbiBJZ3hJY29uQ29tcG9uZW50IGFjY29yZGluZyB0byBnaXZlbiBmb250LWZhbWlseS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogdGhpcy5pY29uU2VydmljZS5zZXRGYW1pbHkoJ21hdGVyaWFsJywgeyBjbGFzc05hbWU6ICdtYXRlcmlhbC1pY29ucycsIHR5cGU6ICdmb250JyB9KTtcbiAqIHRoaXMuaWNvblNlcnZpY2UuYWRkU3ZnSWNvbignYXJ1YmEnLCAnL2Fzc2V0cy9zdmcvY291bnRyeV9mbGFncy9hcnViYS5zdmcnLCAnc3ZnLWZsYWdzJyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hJY29uU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gYW4gaWNvbiBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkXG4gICAgICogdGhyb3VnaCBhIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc2VydmljZS5pY29uTG9hZGVkLnN1YnNjcmliZSgoZXY6IElneEljb25Mb2FkZWRFdmVudCkgPT4gLi4uKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaWNvbkxvYWRlZDogT2JzZXJ2YWJsZTxJZ3hJY29uTG9hZGVkRXZlbnQ+O1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEZhbWlseTogSWNvbkZhbWlseSA9IHtcbiAgICAgICAgbmFtZTogXCJtYXRlcmlhbFwiLFxuICAgICAgICBtZXRhOiB7IGNsYXNzTmFtZTogXCJtYXRlcmlhbC1pY29uc1wiLCB0eXBlOiBcImxpZ2FcIiB9LFxuICAgIH07XG4gICAgcHJpdmF0ZSBfaWNvblJlZnMgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWNvbk1ldGE+PigpO1xuICAgIHByaXZhdGUgX2ZhbWlsaWVzID0gbmV3IE1hcDxzdHJpbmcsIEZhbWlseU1ldGE+KCk7XG4gICAgcHJpdmF0ZSBfY2FjaGVkSWNvbnMgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgU2FmZUh0bWw+PigpO1xuICAgIHByaXZhdGUgX2ljb25Mb2FkZWQgPSBuZXcgU3ViamVjdDxJZ3hJY29uTG9hZGVkRXZlbnQ+KCk7XG4gICAgcHJpdmF0ZSBfZG9tUGFyc2VyOiBET01QYXJzZXI7XG4gICAgcHJpdmF0ZSB0aGVtZSE6IElneFRoZW1lO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICApIHtcbiAgICAgICAgdGhpcy5pY29uTG9hZGVkID0gdGhpcy5faWNvbkxvYWRlZC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5zZXRGYW1pbHkodGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLCB0aGlzLl9kZWZhdWx0RmFtaWx5Lm1ldGEpO1xuXG4gICAgICAgIGlmICh0aGlzLl9wbGF0Zm9ybVV0aWw/LmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgdGhpcy5fZG9tUGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzdmddIG9mIEluZGlnb0ljb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTdmdJY29uRnJvbVRleHQobmFtZSwgc3ZnLnZhbHVlLCBgaW50ZXJuYWxfJHtzdmcuZm9udFNldH1gLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBkZWZhdWx0IGZvbnQtZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGRlZmF1bHRGYW1pbHkgPSB0aGlzLmljb25TZXJ2aWNlLmRlZmF1bHRGYW1pbHk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZWZhdWx0RmFtaWx5KCk6IEljb25GYW1pbHkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEZhbWlseTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgU2V0cyB0aGUgZGVmYXVsdCBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLmRlZmF1bHRGYW1pbHkgPSAnc3ZnLWZsYWdzJztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGRlZmF1bHRGYW1pbHkoZmFtaWx5OiBJY29uRmFtaWx5KSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRGYW1pbHkgPSBmYW1pbHk7XG4gICAgICAgIHRoaXMuc2V0RmFtaWx5KHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSwgdGhpcy5fZGVmYXVsdEZhbWlseS5tZXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmVnaXN0ZXJzIGEgY3VzdG9tIGNsYXNzIHRvIGJlIGFwcGxpZWQgdG8gSWd4SWNvbkNvbXBvbmVudCBmb3IgYSBnaXZlbiBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyRmFtaWx5QWxpYXMoJ21hdGVyaWFsJywgJ21hdGVyaWFsLWljb25zJyk7XG4gICAgICogYGBgXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxOC4xLjAuIFVzZSBgc2V0RmFtaWx5YCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3RlckZhbWlseUFsaWFzKFxuICAgICAgICBhbGlhczogc3RyaW5nLFxuICAgICAgICBjbGFzc05hbWU6IHN0cmluZyA9IGFsaWFzLFxuICAgICAgICB0eXBlOiBJY29uVHlwZSA9IFwiZm9udFwiLFxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLnNldEZhbWlseShhbGlhcywgeyBjbGFzc05hbWUsIHR5cGUgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBjdXN0b20gY2xhc3MsIGlmIGFueSwgYXNzb2NpYXRlZCB0byBhIGdpdmVuIGZvbnQtZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGZhbWlseUNsYXNzID0gdGhpcy5pY29uU2VydmljZS5mYW1pbHlDbGFzc05hbWUoJ21hdGVyaWFsJyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGZhbWlseUNsYXNzTmFtZShhbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhbWlsaWVzLmdldChhbGlhcyk/LmNsYXNzTmFtZSB8fCBhbGlhcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwcml2YXRlIGZhbWlseVR5cGUoYWxpYXM6IHN0cmluZyk6IEljb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhbWlsaWVzLmdldChhbGlhcyk/LnR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldFJlZnNCeVRoZW1lKHRoZW1lOiBJZ3hUaGVtZSkge1xuICAgICAgICBpZiAodGhpcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICAgICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGFsaWFzLCB0YXJnZXQgfSBvZiBpY29uUmVmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGljb24gPSB0YXJnZXQuZ2V0KHRoZW1lKSA/PyB0YXJnZXQuZ2V0KCdkZWZhdWx0JykhO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSWNvblJlZihhbGlhcy5uYW1lLCBhbGlhcy5mYW1pbHksIGljb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENyZWF0ZXMgYSBmYW1pbHkgdG8gY2xhc3NOYW1lIHJlbGF0aW9uc2hpcCB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIElneEljb25Db21wb25lbnRcbiAgICAgKiAgIHdoZW5ldmVyIHRoYXQgZmFtaWx5IG5hbWUgaXMgdXNlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnNldEZhbWlseSgnbWF0ZXJpYWwnLCB7IGNsYXNzTmFtZTogJ21hdGVyaWFsLWljb25zJywgdHlwZTogJ2xpZ2EnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGYW1pbHkobmFtZTogc3RyaW5nLCBtZXRhOiBGYW1pbHlNZXRhKSB7XG4gICAgICAgIHRoaXMuX2ZhbWlsaWVzLnNldChuYW1lLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQWRkcyBhbiBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgbWV0YSBmYW1pbHkuXG4gICAgICogIEV4ZWN1dGVzIG9ubHkgaWYgbm8gaWNvbiByZWZlcmVuY2UgaXMgZm91bmQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5hZGRJY29uUmVmKCdhcnViYScsICdkZWZhdWx0JywgeyBuYW1lOiAnYXJ1YmEnLCBmYW1pbHk6ICdzdmctZmxhZ3MnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRJY29uUmVmKG5hbWU6IHN0cmluZywgZmFtaWx5OiBzdHJpbmcsIGljb246IEljb25NZXRhKSB7XG4gICAgICAgIGNvbnN0IGljb25SZWYgPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGlmICghaWNvblJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXRJY29uUmVmKG5hbWUsIGZhbWlseSwgaWNvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgU2ltaWxhciB0byBhZGRJY29uUmVmLCBidXQgYWx3YXlzIHNldHMgdGhlIGljb24gcmVmZXJlbmNlIG1ldGEgZm9yIGFuIGljb24gaW4gYSBtZXRhIGZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnNldEljb25SZWYoJ2FydWJhJywgJ2RlZmF1bHQnLCB7IG5hbWU6ICdhcnViYScsIGZhbWlseTogJ3N2Zy1mbGFncycgfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldEljb25SZWYobmFtZTogc3RyaW5nLCBmYW1pbHk6IHN0cmluZywgaWNvbjogSWNvbk1ldGEpIHtcbiAgICAgICAgbGV0IGZhbWlseVJlZiA9IHRoaXMuX2ljb25SZWZzLmdldChmYW1pbHkpO1xuXG4gICAgICAgIGlmICghZmFtaWx5UmVmKSB7XG4gICAgICAgICAgICBmYW1pbHlSZWYgPSBuZXcgTWFwPHN0cmluZywgSWNvbk1ldGE+KCk7XG4gICAgICAgICAgICB0aGlzLl9pY29uUmVmcy5zZXQoZmFtaWx5LCBmYW1pbHlSZWYpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFtaWx5VHlwZSA9IHRoaXMuZmFtaWx5VHlwZShpY29uPy5mYW1pbHkpO1xuICAgICAgICBmYW1pbHlSZWYuc2V0KG5hbWUsIHsgLi4uaWNvbiwgdHlwZTogaWNvbi50eXBlID8/IGZhbWlseVR5cGUgfSk7XG5cbiAgICAgICAgdGhpcy5faWNvbkxvYWRlZC5uZXh0KHsgbmFtZSwgZmFtaWx5IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgZ2l2ZW4gZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGljb25SZWYgPSB0aGlzLmljb25TZXJ2aWNlLmdldEljb25SZWYoJ2FydWJhJywgJ2RlZmF1bHQnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWNvblJlZihuYW1lOiBzdHJpbmcsIGZhbWlseTogc3RyaW5nKTogSWNvblJlZmVyZW5jZSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGljb25GYW1pbHkgPSBpY29uPy5mYW1pbHkgPz8gZmFtaWx5O1xuICAgICAgICBjb25zdCBfbmFtZSA9IGljb24/Lm5hbWUgPz8gbmFtZTtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5mYW1pbHlDbGFzc05hbWUoaWNvbkZhbWlseSk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuX2ZhbWlsaWVzLmdldChpY29uRmFtaWx5KT8ucHJlZml4O1xuXG4gICAgICAgIC8vIEhhbmRsZSBuYW1lIHByZWZpeGVzXG4gICAgICAgIGxldCBpY29uTmFtZSA9IF9uYW1lO1xuXG4gICAgICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXgpIHtcbiAgICAgICAgICAgIGljb25OYW1lID0gX25hbWUuaW5jbHVkZXMocHJlZml4KSA/IF9uYW1lIDogYCR7cHJlZml4fSR7X25hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuaXNTdmdJY29uQ2FjaGVkKGljb25OYW1lLCBpY29uRmFtaWx5KTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNhY2hlZCA/IFwic3ZnXCIgOiBpY29uPy50eXBlID8/IHRoaXMuZmFtaWx5VHlwZShpY29uRmFtaWx5KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5hbWU6IGljb25OYW1lLFxuICAgICAgICAgICAgZmFtaWx5OiBpY29uRmFtaWx5LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVTdmdGYW1pbHkoZmFtaWx5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgICAgdGhpcy5fZmFtaWxpZXMuc2V0KGZhbWlseSwgeyBjbGFzc05hbWU6IGZhbWlseSwgdHlwZTogXCJzdmdcIiB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9mYW1pbGllcy5nZXQoZmFtaWx5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogIEFkZHMgYW4gU1ZHIGltYWdlIHRvIHRoZSBjYWNoZS4gU1ZHIHNvdXJjZSBpcyBhbiB1cmwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5hZGRTdmdJY29uKCdhcnViYScsICcvYXNzZXRzL3N2Zy9jb3VudHJ5X2ZsYWdzL2FydWJhLnN2ZycsICdzdmctZmxhZ3MnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU3ZnSWNvbihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZmFtaWx5ID0gdGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLFxuICAgICAgICBzdHJpcE1ldGEgPSBmYWxzZSxcbiAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XG4gICAgICAgICAgICBjb25zdCBzYWZlVXJsID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuXG4gICAgICAgICAgICBpZiAoIXNhZmVVcmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgVVJMIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQgYXMgdHJ1c3RlZCByZXNvdXJjZSBVUkwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplcjogXCIke3VybH1cIi5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFVybCA9IHRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShcbiAgICAgICAgICAgICAgICBTZWN1cml0eUNvbnRleHQuUkVTT1VSQ0VfVVJMLFxuICAgICAgICAgICAgICAgIHNhZmVVcmwsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIXNhbml0aXplZFVybCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSBVUkwgcHJvdmlkZWQgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMOiBcIiR7dXJsfVwiLmAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3ZnSWNvbkNhY2hlZChuYW1lLCBmYW1pbHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPckNyZWF0ZVN2Z0ZhbWlseShmYW1pbHkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFN2Zyh1cmwpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTdmdJY29uKG5hbWUsIHJlcywgZmFtaWx5LCBzdHJpcE1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm92aWRlIGF0IGxlYXN0IGBuYW1lYCBhbmQgYHVybGAgdG8gcmVnaXN0ZXIgYW4gc3ZnIGljb24uXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEFkZHMgYW4gU1ZHIGltYWdlIHRvIHRoZSBjYWNoZS4gU1ZHIHNvdXJjZSBpcyBpdHMgdGV4dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLmFkZFN2Z0ljb25Gcm9tVGV4dCgnc2ltcGxlJywgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAwIDIwMFwiPlxuICAgICAqICAgPHBhdGggZD1cIk03NCA3NGg1NHY1NEg3NFwiIC8+PC9zdmc+JywgJ3N2Zy1mbGFncycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRTdmdJY29uRnJvbVRleHQoXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgaWNvblRleHQ6IHN0cmluZyxcbiAgICAgICAgZmFtaWx5ID0gdGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLFxuICAgICAgICBzdHJpcE1ldGEgPSBmYWxzZSxcbiAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgaWNvblRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3ZnSWNvbkNhY2hlZChuYW1lLCBmYW1pbHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldE9yQ3JlYXRlU3ZnRmFtaWx5KGZhbWlseSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlU3ZnSWNvbihuYW1lLCBpY29uVGV4dCwgZmFtaWx5LCBzdHJpcE1ldGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm92aWRlIGF0IGxlYXN0IGBuYW1lYCBhbmQgYGljb25UZXh0YCB0byByZWdpc3RlciBhbiBzdmcgaWNvbi5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJucyB3aGV0aGVyIGEgZ2l2ZW4gU1ZHIGltYWdlIGlzIHByZXNlbnQgaW4gdGhlIGNhY2hlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGlzU3ZnQ2FjaGVkID0gdGhpcy5pY29uU2VydmljZS5pc1N2Z0ljb25DYWNoZWQoJ2FydWJhJywgJ3N2Zy1mbGFncycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N2Z0ljb25DYWNoZWQobmFtZTogc3RyaW5nLCBmYW1pbHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVkSWNvbnMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhbWlseVJlZ2lzdHJ5ID0gdGhpcy5fY2FjaGVkSWNvbnMuZ2V0KFxuICAgICAgICAgICAgICAgIGZhbWlseSxcbiAgICAgICAgICAgICkgYXMgTWFwPHN0cmluZywgU2FmZUh0bWw+O1xuXG4gICAgICAgICAgICByZXR1cm4gZmFtaWx5UmVnaXN0cnkuaGFzKG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBjYWNoZWQgU1ZHIGltYWdlIGFzIHN0cmluZy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICBjb25zdCBzdmdJY29uID0gdGhpcy5pY29uU2VydmljZS5nZXRTdmdJY29uKCdhcnViYScsICdzdmctZmxhZ3MnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3ZnSWNvbihuYW1lOiBzdHJpbmcsIGZhbWlseTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRJY29ucy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZldGNoU3ZnKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVxID0gdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCIgfSk7XG4gICAgICAgIHJldHVybiByZXE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgY2FjaGVTdmdJY29uKFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgIGZhbWlseSA9IHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSxcbiAgICAgICAgc3RyaXBNZXRhOiBib29sZWFuLFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5fcGxhdGZvcm1VdGlsPy5pc0Jyb3dzZXIgJiYgbmFtZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5fZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJpbWFnZS9zdmcreG1sXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3ZnID0gZG9jLnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIikgYXMgU1ZHRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRJY29ucy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEljb25zLnNldChmYW1pbHksIG5ldyBNYXA8c3RyaW5nLCBTYWZlSHRtbD4oKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdmcpIHtcbiAgICAgICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwiZml0XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChzdHJpcE1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBzdmcucXVlcnlTZWxlY3RvcihcInRpdGxlXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gc3ZnLnF1ZXJ5U2VsZWN0b3IoXCJkZXNjXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLnJlbW92ZUNoaWxkKHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmcucmVtb3ZlQ2hpbGQoZGVzYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlU3ZnID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgICAgICAgICAgICAgICBzdmcub3V0ZXJIVE1MLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJY29ucy5nZXQoZmFtaWx5KS5zZXQobmFtZSwgc2FmZVN2Zyk7XG4gICAgICAgICAgICAgICAgdGhpcy5faWNvbkxvYWRlZC5uZXh0KHsgbmFtZSwgdmFsdWUsIGZhbWlseSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2ljb24vaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUdsRCxPQUFPLEVBQVksV0FBVyxFQUFjLE1BQU0sK0JBQStCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFlN0M7Ozs7Ozs7Ozs7O0dBV0c7QUFJSCxNQUFNLE9BQU8sY0FBYztJQXNCdkIsWUFDd0IsVUFBd0IsRUFDeEIsV0FBdUIsRUFDdkIsYUFBMkIsRUFDTixXQUF1QixFQUN4QixXQUF1QixFQUN2QixRQUFrQjtRQUx0QyxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQ04sZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWhCdEQsbUJBQWMsR0FBZTtZQUNqQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtTQUN0RCxDQUFDO1FBQ00sY0FBUyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO1FBQ3JELGNBQVMsR0FB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QztnQkFFRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7OEdBL1dRLGNBQWMsb0pBMEJDLFdBQVcsNkJBQ1gsVUFBVSw2QkFDVixRQUFRO2tIQTVCdkIsY0FBYyxjQUZYLE1BQU07OzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkF3QlEsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXOzswQkFDOUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVOzswQkFDN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgU2VjdXJpdHlDb250ZXh0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gXCIuLi9jb3JlL3V0aWxzXCI7XG5pbXBvcnQgeyBpY29uUmVmZXJlbmNlcyB9IGZyb20gJy4vaWNvbi5yZWZlcmVuY2VzJ1xuaW1wb3J0IHsgSWNvbkZhbWlseSwgSWNvbk1ldGEsIEZhbWlseU1ldGEgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJY29uVHlwZSwgSWNvblJlZmVyZW5jZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgSWd4VGhlbWUsIFRIRU1FX1RPS0VOLCBUaGVtZVRva2VuIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3RoZW1lL3RoZW1lLnRva2VuXCI7XG5pbXBvcnQgeyBJbmRpZ29JY29ucyB9IGZyb20gXCIuL2ljb25zLmluZGlnb1wiO1xuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIFNWRyBpY29uIGlzIGxvYWRlZCB0aHJvdWdoXG4gKiBhIEhUVFAgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZ3hJY29uTG9hZGVkRXZlbnQge1xuICAgIC8qKiBOYW1lIG9mIHRoZSBpY29uICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgYWN0dWFsIFNWRyB0ZXh0LCBpZiBhbnkgKi9cbiAgICB2YWx1ZT86IHN0cmluZztcbiAgICAvKiogVGhlIGZvbnQtZmFtaWx5IGZvciB0aGUgaWNvbi4gRGVmYXVsdHMgdG8gbWF0ZXJpYWwuICovXG4gICAgZmFtaWx5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgSWNvbiBTZXJ2aWNlKiogLVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgSWNvbiBTZXJ2aWNlIG1ha2VzIGl0IGVhc3kgZm9yIGRldmVsb3BlcnMgdG8gaW5jbHVkZSBjdXN0b20gU1ZHIGltYWdlcyBhbmQgdXNlIHRoZW0gd2l0aCBJZ3hJY29uQ29tcG9uZW50LlxuICogSW4gYWRkaXRpb24gaXQgY291bGQgYmUgdXNlZCB0byBhc3NvY2lhdGUgYSBjdXN0b20gY2xhc3MgdG8gYmUgYXBwbGllZCBvbiBJZ3hJY29uQ29tcG9uZW50IGFjY29yZGluZyB0byBnaXZlbiBmb250LWZhbWlseS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogdGhpcy5pY29uU2VydmljZS5zZXRGYW1pbHkoJ21hdGVyaWFsJywgeyBjbGFzc05hbWU6ICdtYXRlcmlhbC1pY29ucycsIHR5cGU6ICdmb250JyB9KTtcbiAqIHRoaXMuaWNvblNlcnZpY2UuYWRkU3ZnSWNvbignYXJ1YmEnLCAnL2Fzc2V0cy9zdmcvY291bnRyeV9mbGFncy9hcnViYS5zdmcnLCAnc3ZnLWZsYWdzJyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hJY29uU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gYW4gaWNvbiBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkXG4gICAgICogdGhyb3VnaCBhIEhUVFAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc2VydmljZS5pY29uTG9hZGVkLnN1YnNjcmliZSgoZXY6IElneEljb25Mb2FkZWRFdmVudCkgPT4gLi4uKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaWNvbkxvYWRlZDogT2JzZXJ2YWJsZTxJZ3hJY29uTG9hZGVkRXZlbnQ+O1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEZhbWlseTogSWNvbkZhbWlseSA9IHtcbiAgICAgICAgbmFtZTogXCJtYXRlcmlhbFwiLFxuICAgICAgICBtZXRhOiB7IGNsYXNzTmFtZTogXCJtYXRlcmlhbC1pY29uc1wiLCB0eXBlOiBcImxpZ2FcIiB9LFxuICAgIH07XG4gICAgcHJpdmF0ZSBfaWNvblJlZnMgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWNvbk1ldGE+PigpO1xuICAgIHByaXZhdGUgX2ZhbWlsaWVzID0gbmV3IE1hcDxzdHJpbmcsIEZhbWlseU1ldGE+KCk7XG4gICAgcHJpdmF0ZSBfY2FjaGVkSWNvbnMgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgU2FmZUh0bWw+PigpO1xuICAgIHByaXZhdGUgX2ljb25Mb2FkZWQgPSBuZXcgU3ViamVjdDxJZ3hJY29uTG9hZGVkRXZlbnQ+KCk7XG4gICAgcHJpdmF0ZSBfZG9tUGFyc2VyOiBET01QYXJzZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3BsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRU1FX1RPS0VOKSBwcml2YXRlIF90aGVtZVRva2VuOiBUaGVtZVRva2VuLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERlc3Ryb3lSZWYpIHByaXZhdGUgX2Rlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgKSB7XG5cbiAgICAgICAgdGhpcy5pY29uTG9hZGVkID0gdGhpcy5faWNvbkxvYWRlZC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5zZXRGYW1pbHkodGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLCB0aGlzLl9kZWZhdWx0RmFtaWx5Lm1ldGEpO1xuXG4gICAgICAgIGNvbnN0IHsgdW5zdWJzY3JpYmUgfSA9IHRoaXMuX3RoZW1lVG9rZW4/Lm9uQ2hhbmdlKCh0aGVtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRSZWZzQnlUaGVtZSh0aGVtZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHVuc3Vic2NyaWJlKTtcblxuICAgICAgICBpZiAodGhpcy5fcGxhdGZvcm1VdGlsPy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvbVBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgc3ZnXSBvZiBJbmRpZ29JY29ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkU3ZnSWNvbkZyb21UZXh0KG5hbWUsIHN2Zy52YWx1ZSwgYGludGVybmFsXyR7c3ZnLmZvbnRTZXR9YCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJucyB0aGUgZGVmYXVsdCBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICBjb25zdCBkZWZhdWx0RmFtaWx5ID0gdGhpcy5pY29uU2VydmljZS5kZWZhdWx0RmFtaWx5O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGVmYXVsdEZhbWlseSgpOiBJY29uRmFtaWx5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRGYW1pbHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFNldHMgdGhlIGRlZmF1bHQgZm9udC1mYW1pbHkuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5kZWZhdWx0RmFtaWx5ID0gJ3N2Zy1mbGFncyc7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBkZWZhdWx0RmFtaWx5KGZhbWlseTogSWNvbkZhbWlseSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RmFtaWx5ID0gZmFtaWx5O1xuICAgICAgICB0aGlzLnNldEZhbWlseSh0aGlzLl9kZWZhdWx0RmFtaWx5Lm5hbWUsIHRoaXMuX2RlZmF1bHRGYW1pbHkubWV0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFJlZ2lzdGVycyBhIGN1c3RvbSBjbGFzcyB0byBiZSBhcHBsaWVkIHRvIElneEljb25Db21wb25lbnQgZm9yIGEgZ2l2ZW4gZm9udC1mYW1pbHkuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckZhbWlseUFsaWFzKCdtYXRlcmlhbCcsICdtYXRlcmlhbC1pY29ucycpO1xuICAgICAqIGBgYFxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTguMS4wLiBVc2UgYHNldEZhbWlseWAgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJGYW1pbHlBbGlhcyhcbiAgICAgICAgYWxpYXM6IHN0cmluZyxcbiAgICAgICAgY2xhc3NOYW1lOiBzdHJpbmcgPSBhbGlhcyxcbiAgICAgICAgdHlwZTogSWNvblR5cGUgPSBcImZvbnRcIixcbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5zZXRGYW1pbHkoYWxpYXMsIHsgY2xhc3NOYW1lLCB0eXBlIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJucyB0aGUgY3VzdG9tIGNsYXNzLCBpZiBhbnksIGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICBjb25zdCBmYW1pbHlDbGFzcyA9IHRoaXMuaWNvblNlcnZpY2UuZmFtaWx5Q2xhc3NOYW1lKCdtYXRlcmlhbCcpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBmYW1pbHlDbGFzc05hbWUoYWxpYXM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYW1pbGllcy5nZXQoYWxpYXMpPy5jbGFzc05hbWUgfHwgYWxpYXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHJpdmF0ZSBmYW1pbHlUeXBlKGFsaWFzOiBzdHJpbmcpOiBJY29uVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYW1pbGllcy5nZXQoYWxpYXMpPy50eXBlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXRSZWZzQnlUaGVtZSh0aGVtZTogSWd4VGhlbWUpIHtcbiAgICAgICAgZm9yIChjb25zdCB7IGFsaWFzLCB0YXJnZXQgfSBvZiBpY29uUmVmZXJlbmNlcykge1xuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWwgPSB0aGlzLl9pY29uUmVmcy5nZXQoYWxpYXMuZmFtaWx5KT8uZ2V0KGFsaWFzLm5hbWUpPy5leHRlcm5hbDtcblxuICAgICAgICAgICAgY29uc3QgX3JlZiA9IHRoaXMuX2ljb25SZWZzLmdldCgnZGVmYXVsdCcpPy5nZXQoYWxpYXMubmFtZSkgPz8ge307XG4gICAgICAgICAgICBjb25zdCBfdGFyZ2V0ID0gdGFyZ2V0LmdldCh0aGVtZSkgPz8gdGFyZ2V0LmdldCgnZGVmYXVsdCcpITtcblxuICAgICAgICAgICAgY29uc3QgaWNvbiA9IHRhcmdldC5nZXQodGhlbWUpID8/IHRhcmdldC5nZXQoJ2RlZmF1bHQnKSE7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhZXh0ZXJuYWwgJiYgIShKU09OLnN0cmluZ2lmeShfcmVmKSA9PT0gSlNPTi5zdHJpbmdpZnkoX3RhcmdldCkpO1xuXG4gICAgICAgICAgICB0aGlzLl9zZXRJY29uUmVmKFxuICAgICAgICAgICAgICAgIGFsaWFzLm5hbWUsXG4gICAgICAgICAgICAgICAgYWxpYXMuZmFtaWx5LFxuICAgICAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICAgICAgb3ZlcndyaXRlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENyZWF0ZXMgYSBmYW1pbHkgdG8gY2xhc3NOYW1lIHJlbGF0aW9uc2hpcCB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIElneEljb25Db21wb25lbnRcbiAgICAgKiAgIHdoZW5ldmVyIHRoYXQgZmFtaWx5IG5hbWUgaXMgdXNlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnNldEZhbWlseSgnbWF0ZXJpYWwnLCB7IGNsYXNzTmFtZTogJ21hdGVyaWFsLWljb25zJywgdHlwZTogJ2xpZ2EnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGYW1pbHkobmFtZTogc3RyaW5nLCBtZXRhOiBGYW1pbHlNZXRhKSB7XG4gICAgICAgIHRoaXMuX2ZhbWlsaWVzLnNldChuYW1lLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQWRkcyBhbiBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgbWV0YSBmYW1pbHkuXG4gICAgICogIEV4ZWN1dGVzIG9ubHkgaWYgbm8gaWNvbiByZWZlcmVuY2UgaXMgZm91bmQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5hZGRJY29uUmVmKCdhcnViYScsICdkZWZhdWx0JywgeyBuYW1lOiAnYXJ1YmEnLCBmYW1pbHk6ICdzdmctZmxhZ3MnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRJY29uUmVmKG5hbWU6IHN0cmluZywgZmFtaWx5OiBzdHJpbmcsIGljb246IEljb25NZXRhKSB7XG4gICAgICAgIGNvbnN0IGljb25SZWYgPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGlmICghaWNvblJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXRJY29uUmVmKG5hbWUsIGZhbWlseSwgaWNvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRJY29uUmVmKG5hbWU6IHN0cmluZywgZmFtaWx5OiBzdHJpbmcsIGljb246IEljb25NZXRhLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEljb25SZWYobmFtZSwgZmFtaWx5LCB7XG4gICAgICAgICAgICAgICAgLi4uaWNvbixcbiAgICAgICAgICAgICAgICBleHRlcm5hbDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFNpbWlsYXIgdG8gYWRkSWNvblJlZiwgYnV0IGFsd2F5cyBzZXRzIHRoZSBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgbWV0YSBmYW1pbHkuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5zZXRJY29uUmVmKCdhcnViYScsICdkZWZhdWx0JywgeyBuYW1lOiAnYXJ1YmEnLCBmYW1pbHk6ICdzdmctZmxhZ3MnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRJY29uUmVmKG5hbWU6IHN0cmluZywgZmFtaWx5OiBzdHJpbmcsIGljb246IEljb25NZXRhKSB7XG4gICAgICAgIGxldCBmYW1pbHlSZWYgPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KTtcblxuICAgICAgICBpZiAoIWZhbWlseVJlZikge1xuICAgICAgICAgICAgZmFtaWx5UmVmID0gbmV3IE1hcDxzdHJpbmcsIEljb25NZXRhPigpO1xuICAgICAgICAgICAgdGhpcy5faWNvblJlZnMuc2V0KGZhbWlseSwgZmFtaWx5UmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4dGVybmFsID0gaWNvbi5leHRlcm5hbCA/PyB0cnVlO1xuICAgICAgICBjb25zdCBmYW1pbHlUeXBlID0gdGhpcy5mYW1pbHlUeXBlKGljb24/LmZhbWlseSk7XG4gICAgICAgIGZhbWlseVJlZi5zZXQobmFtZSwgeyAuLi5pY29uLCB0eXBlOiBpY29uLnR5cGUgPz8gZmFtaWx5VHlwZSwgZXh0ZXJuYWwgfSk7XG5cbiAgICAgICAgdGhpcy5faWNvbkxvYWRlZC5uZXh0KHsgbmFtZSwgZmFtaWx5IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgZ2l2ZW4gZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGljb25SZWYgPSB0aGlzLmljb25TZXJ2aWNlLmdldEljb25SZWYoJ2FydWJhJywgJ2RlZmF1bHQnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWNvblJlZihuYW1lOiBzdHJpbmcsIGZhbWlseTogc3RyaW5nKTogSWNvblJlZmVyZW5jZSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGljb25GYW1pbHkgPSBpY29uPy5mYW1pbHkgPz8gZmFtaWx5O1xuICAgICAgICBjb25zdCBfbmFtZSA9IGljb24/Lm5hbWUgPz8gbmFtZTtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5mYW1pbHlDbGFzc05hbWUoaWNvbkZhbWlseSk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuX2ZhbWlsaWVzLmdldChpY29uRmFtaWx5KT8ucHJlZml4O1xuXG4gICAgICAgIC8vIEhhbmRsZSBuYW1lIHByZWZpeGVzXG4gICAgICAgIGxldCBpY29uTmFtZSA9IF9uYW1lO1xuXG4gICAgICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXgpIHtcbiAgICAgICAgICAgIGljb25OYW1lID0gX25hbWUuaW5jbHVkZXMocHJlZml4KSA/IF9uYW1lIDogYCR7cHJlZml4fSR7X25hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuaXNTdmdJY29uQ2FjaGVkKGljb25OYW1lLCBpY29uRmFtaWx5KTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNhY2hlZCA/IFwic3ZnXCIgOiBpY29uPy50eXBlID8/IHRoaXMuZmFtaWx5VHlwZShpY29uRmFtaWx5KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5hbWU6IGljb25OYW1lLFxuICAgICAgICAgICAgZmFtaWx5OiBpY29uRmFtaWx5LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVTdmdGYW1pbHkoZmFtaWx5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgICAgdGhpcy5fZmFtaWxpZXMuc2V0KGZhbWlseSwgeyBjbGFzc05hbWU6IGZhbWlseSwgdHlwZTogXCJzdmdcIiB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9mYW1pbGllcy5nZXQoZmFtaWx5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogIEFkZHMgYW4gU1ZHIGltYWdlIHRvIHRoZSBjYWNoZS4gU1ZHIHNvdXJjZSBpcyBhbiB1cmwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5hZGRTdmdJY29uKCdhcnViYScsICcvYXNzZXRzL3N2Zy9jb3VudHJ5X2ZsYWdzL2FydWJhLnN2ZycsICdzdmctZmxhZ3MnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU3ZnSWNvbihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZmFtaWx5ID0gdGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLFxuICAgICAgICBzdHJpcE1ldGEgPSBmYWxzZSxcbiAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XG4gICAgICAgICAgICBjb25zdCBzYWZlVXJsID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuXG4gICAgICAgICAgICBpZiAoIXNhZmVVcmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgVVJMIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQgYXMgdHJ1c3RlZCByZXNvdXJjZSBVUkwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplcjogXCIke3VybH1cIi5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFVybCA9IHRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShcbiAgICAgICAgICAgICAgICBTZWN1cml0eUNvbnRleHQuUkVTT1VSQ0VfVVJMLFxuICAgICAgICAgICAgICAgIHNhZmVVcmwsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIXNhbml0aXplZFVybCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSBVUkwgcHJvdmlkZWQgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMOiBcIiR7dXJsfVwiLmAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3ZnSWNvbkNhY2hlZChuYW1lLCBmYW1pbHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPckNyZWF0ZVN2Z0ZhbWlseShmYW1pbHkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFN2Zyh1cmwpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTdmdJY29uKG5hbWUsIHJlcywgZmFtaWx5LCBzdHJpcE1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm92aWRlIGF0IGxlYXN0IGBuYW1lYCBhbmQgYHVybGAgdG8gcmVnaXN0ZXIgYW4gc3ZnIGljb24uXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEFkZHMgYW4gU1ZHIGltYWdlIHRvIHRoZSBjYWNoZS4gU1ZHIHNvdXJjZSBpcyBpdHMgdGV4dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLmFkZFN2Z0ljb25Gcm9tVGV4dCgnc2ltcGxlJywgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAwIDIwMFwiPlxuICAgICAqICAgPHBhdGggZD1cIk03NCA3NGg1NHY1NEg3NFwiIC8+PC9zdmc+JywgJ3N2Zy1mbGFncycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRTdmdJY29uRnJvbVRleHQoXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgaWNvblRleHQ6IHN0cmluZyxcbiAgICAgICAgZmFtaWx5ID0gdGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLFxuICAgICAgICBzdHJpcE1ldGEgPSBmYWxzZSxcbiAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgaWNvblRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3ZnSWNvbkNhY2hlZChuYW1lLCBmYW1pbHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldE9yQ3JlYXRlU3ZnRmFtaWx5KGZhbWlseSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlU3ZnSWNvbihuYW1lLCBpY29uVGV4dCwgZmFtaWx5LCBzdHJpcE1ldGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm92aWRlIGF0IGxlYXN0IGBuYW1lYCBhbmQgYGljb25UZXh0YCB0byByZWdpc3RlciBhbiBzdmcgaWNvbi5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJucyB3aGV0aGVyIGEgZ2l2ZW4gU1ZHIGltYWdlIGlzIHByZXNlbnQgaW4gdGhlIGNhY2hlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGlzU3ZnQ2FjaGVkID0gdGhpcy5pY29uU2VydmljZS5pc1N2Z0ljb25DYWNoZWQoJ2FydWJhJywgJ3N2Zy1mbGFncycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N2Z0ljb25DYWNoZWQobmFtZTogc3RyaW5nLCBmYW1pbHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVkSWNvbnMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhbWlseVJlZ2lzdHJ5ID0gdGhpcy5fY2FjaGVkSWNvbnMuZ2V0KFxuICAgICAgICAgICAgICAgIGZhbWlseSxcbiAgICAgICAgICAgICkgYXMgTWFwPHN0cmluZywgU2FmZUh0bWw+O1xuXG4gICAgICAgICAgICByZXR1cm4gZmFtaWx5UmVnaXN0cnkuaGFzKG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBjYWNoZWQgU1ZHIGltYWdlIGFzIHN0cmluZy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICBjb25zdCBzdmdJY29uID0gdGhpcy5pY29uU2VydmljZS5nZXRTdmdJY29uKCdhcnViYScsICdzdmctZmxhZ3MnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3ZnSWNvbihuYW1lOiBzdHJpbmcsIGZhbWlseTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRJY29ucy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZldGNoU3ZnKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVxID0gdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCIgfSk7XG4gICAgICAgIHJldHVybiByZXE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgY2FjaGVTdmdJY29uKFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgIGZhbWlseSA9IHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSxcbiAgICAgICAgc3RyaXBNZXRhOiBib29sZWFuLFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5fcGxhdGZvcm1VdGlsPy5pc0Jyb3dzZXIgJiYgbmFtZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5fZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJpbWFnZS9zdmcreG1sXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3ZnID0gZG9jLnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIikgYXMgU1ZHRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRJY29ucy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEljb25zLnNldChmYW1pbHksIG5ldyBNYXA8c3RyaW5nLCBTYWZlSHRtbD4oKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdmcpIHtcbiAgICAgICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwiZml0XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChzdHJpcE1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBzdmcucXVlcnlTZWxlY3RvcihcInRpdGxlXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gc3ZnLnF1ZXJ5U2VsZWN0b3IoXCJkZXNjXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLnJlbW92ZUNoaWxkKHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmcucmVtb3ZlQ2hpbGQoZGVzYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlU3ZnID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgICAgICAgICAgICAgICBzdmcub3V0ZXJIVE1MLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJY29ucy5nZXQoZmFtaWx5KS5zZXQobmFtZSwgc2FmZVN2Zyk7XG4gICAgICAgICAgICAgICAgdGhpcy5faWNvbkxvYWRlZC5uZXh0KHsgbmFtZSwgdmFsdWUsIGZhbWlseSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvaWNvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1kZWZpbml0aW9ucyAqL1xuaW1wb3J0IHsgSWd4VGhlbWUgfSBmcm9tIFwiLi4vc2VydmljZXMvdGhlbWUvdGhlbWUuc2VydmljZVwiO1xuXG4vLyBFeHBvcnRlZCBpbnRlcm5hbCB0eXBlc1xuZXhwb3J0IHR5cGUgSWNvblRoZW1lS2V5ID0gSWd4VGhlbWUgfCAnZGVmYXVsdCc7XG5cbmV4cG9ydCB0eXBlIEljb25SZWZlcmVuY2VQYWlyID0ge1xuICBhbGlhczogSWNvbk1ldGE7XG4gIHRhcmdldDogSWNvbk1ldGE7XG4gIG92ZXJ3cml0ZTogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBJY29uVHlwZSA9IFwic3ZnXCIgfCBcImZvbnRcIiB8IFwibGlnYVwiO1xuXG5leHBvcnQgdHlwZSBJY29uUmVmZXJlbmNlID0gSWNvbk1ldGEgJiBGYW1pbHlNZXRhO1xuXG5leHBvcnQgdHlwZSBNZXRhUmVmZXJlbmNlID0ge1xuICBhbGlhczogSWNvbk1ldGE7XG4gIHRhcmdldDogTWFwPEljb25UaGVtZUtleSwgSWNvbk1ldGE+O1xufTtcblxuLy8gRXhwb3J0ZWQgcHVibGljIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIEljb25NZXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmFtaWx5OiBzdHJpbmc7XG4gICAgdHlwZT86IEljb25UeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseU1ldGEge1xuICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IEljb25UeXBlO1xuICAgIHByZWZpeD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY29uRmFtaWx5IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWV0YTogRmFtaWx5TWV0YTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvaWNvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1kZWZpbml0aW9ucyAqL1xuaW1wb3J0IHsgSWd4VGhlbWUgfSBmcm9tIFwiLi4vc2VydmljZXMvdGhlbWUvdGhlbWUudG9rZW5cIjtcblxuLy8gRXhwb3J0ZWQgaW50ZXJuYWwgdHlwZXNcbmV4cG9ydCB0eXBlIEljb25UaGVtZUtleSA9IElneFRoZW1lIHwgJ2RlZmF1bHQnO1xuXG5leHBvcnQgdHlwZSBJY29uUmVmZXJlbmNlUGFpciA9IHtcbiAgYWxpYXM6IEljb25NZXRhO1xuICB0YXJnZXQ6IEljb25NZXRhO1xuICBvdmVyd3JpdGU6IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgSWNvblR5cGUgPSBcInN2Z1wiIHwgXCJmb250XCIgfCBcImxpZ2FcIjtcblxuZXhwb3J0IHR5cGUgSWNvblJlZmVyZW5jZSA9IEljb25NZXRhICYgRmFtaWx5TWV0YTtcblxuZXhwb3J0IHR5cGUgTWV0YVJlZmVyZW5jZSA9IHtcbiAgYWxpYXM6IEljb25NZXRhO1xuICB0YXJnZXQ6IE1hcDxJY29uVGhlbWVLZXksIEljb25NZXRhPjtcbn07XG5cbi8vIEV4cG9ydGVkIHB1YmxpYyB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBJY29uTWV0YSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZhbWlseTogc3RyaW5nO1xuICAgIHR5cGU/OiBJY29uVHlwZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBleHRlcm5hbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5TWV0YSB7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogSWNvblR5cGU7XG4gICAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEljb25GYW1pbHkge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtZXRhOiBGYW1pbHlNZXRhO1xufVxuIl19
@@ -1,6 +1,7 @@
1
1
  import { DOCUMENT, NgIf, NgTemplateOutlet, NgClass, NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common';
2
- import { Component, ContentChild, ContentChildren, HostBinding, HostListener, Inject, Input, Optional, booleanAttribute } from '@angular/core';
2
+ import { Component, ContentChild, ContentChildren, DestroyRef, HostBinding, HostListener, Inject, Input, Optional, booleanAttribute, inject } from '@angular/core';
3
3
  import { InputResourceStringsEN } from '../core/i18n/input-resources';
4
+ import { getComponentTheme } from '../core/utils';
4
5
  import { IgxButtonDirective } from '../directives/button/button.directive';
5
6
  import { IgxHintDirective } from '../directives/hint/hint.directive';
6
7
  import { IgxInputDirective, IgxInputState } from '../directives/input/input.directive';
@@ -10,10 +11,10 @@ import { IgxInputGroupBase } from './input-group.common';
10
11
  import { IGX_INPUT_GROUP_TYPE } from './inputGroupType';
11
12
  import { IgxIconComponent } from '../icon/icon.component';
12
13
  import { getCurrentResourceStrings } from '../core/i18n/resources';
13
- import { Subject } from 'rxjs';
14
+ import { THEME_TOKEN } from '../services/theme/theme.token';
14
15
  import * as i0 from "@angular/core";
15
16
  import * as i1 from "../core/utils";
16
- import * as i2 from "../services/theme/theme.service";
17
+ import * as i2 from "../services/theme/theme.token";
17
18
  export class IgxInputGroupComponent {
18
19
  /**
19
20
  * Sets the resource strings.
@@ -94,13 +95,13 @@ export class IgxInputGroupComponent {
94
95
  get theme() {
95
96
  return this._theme;
96
97
  }
97
- constructor(element, _inputGroupType, document, platform, cdr, themeService) {
98
+ constructor(element, _inputGroupType, document, platform, cdr, themeToken) {
98
99
  this.element = element;
99
100
  this._inputGroupType = _inputGroupType;
100
101
  this.document = document;
101
102
  this.platform = platform;
102
103
  this.cdr = cdr;
103
- this.themeService = themeService;
104
+ this.themeToken = themeToken;
104
105
  /**
105
106
  * Property that enables/disables the auto-generated class of the `IgxInputGroupComponent`.
106
107
  * By default applied the class is applied.
@@ -141,15 +142,18 @@ export class IgxInputGroupComponent {
141
142
  this.suppressInputAutofocus = false;
142
143
  /** @hidden */
143
144
  this.hasWarning = false;
145
+ this._destroyRef = inject(DestroyRef);
144
146
  this._type = null;
145
147
  this._filled = false;
146
- this._theme$ = new Subject();
147
148
  this._resourceStrings = getCurrentResourceStrings(InputResourceStringsEN);
148
- this._theme = this.themeService.globalTheme;
149
- this._subscription = this._theme$.asObservable().subscribe(value => {
150
- this._theme = value;
151
- this.cdr.detectChanges();
149
+ this._theme = this.themeToken.theme;
150
+ const { unsubscribe } = this.themeToken.onChange((theme) => {
151
+ if (this._theme !== theme) {
152
+ this._theme = theme;
153
+ this.cdr.detectChanges();
154
+ }
152
155
  });
156
+ this._destroyRef.onDestroy(() => unsubscribe);
153
157
  }
154
158
  /** @hidden */
155
159
  onClick(event) {
@@ -327,19 +331,20 @@ export class IgxInputGroupComponent {
327
331
  set filled(val) {
328
332
  this._filled = val;
329
333
  }
330
- /** @hidden @internal */
331
- ngAfterViewChecked() {
332
- const theme = this.themeService.getComponentTheme(this.element);
333
- if (theme) {
334
- this._theme$.next(theme);
335
- this.cdr.markForCheck();
334
+ setComponentTheme() {
335
+ if (!this.themeToken.preferToken) {
336
+ const theme = getComponentTheme(this.element.nativeElement);
337
+ if (theme && theme !== this._theme) {
338
+ this.theme = theme;
339
+ this.cdr.markForCheck();
340
+ }
336
341
  }
337
342
  }
338
343
  /** @hidden @internal */
339
- ngOnDestroy() {
340
- this._subscription.unsubscribe();
344
+ ngAfterViewInit() {
345
+ this.setComponentTheme();
341
346
  }
342
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxInputGroupComponent, deps: [{ token: i0.ElementRef }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: DOCUMENT }, { token: i1.PlatformUtil }, { token: i0.ChangeDetectorRef }, { token: i2.ThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
347
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxInputGroupComponent, deps: [{ token: i0.ElementRef }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: DOCUMENT }, { token: i1.PlatformUtil }, { token: i0.ChangeDetectorRef }, { token: THEME_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
343
348
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.4", type: IgxInputGroupComponent, isStandalone: true, selector: "igx-input-group", inputs: { resourceStrings: "resourceStrings", suppressInputAutofocus: ["suppressInputAutofocus", "suppressInputAutofocus", booleanAttribute], type: "type", theme: "theme" }, host: { listeners: { "click": "onClick($event)", "pointerdown": "onPointerDown($event)" }, properties: { "class.igx-input-group": "this.defaultClass", "class.igx-input-group--placeholder": "this.hasPlaceholder", "class.igx-input-group--required": "this.isRequired", "class.igx-input-group--focused": "this.isFocused", "class.igx-input-group--disabled": "this.disabled", "class.igx-input-group--warning": "this.hasWarning", "class.igx-input-group--valid": "this.validClass", "class.igx-input-group--invalid": "this.invalidClass", "class.igx-input-group--filled": "this.isFilled", "class.igx-input-group--textarea-group": "this.textAreaClass", "class.igx-input-group--prefixed": "this.hasPrefixes", "class.igx-input-group--suffixed": "this.hasSuffixes", "class.igx-input-group--box": "this.isTypeBox", "class.igx-input-group--file": "this.isFileType", "class.igx-input-group--border": "this.isTypeBorder", "class.igx-input-group--fluent": "this.isTypeFluent", "class.igx-input-group--bootstrap": "this.isTypeBootstrap", "class.igx-input-group--indigo": "this.isTypeIndigo", "class.igx-input-group--search": "this.isTypeSearch" } }, providers: [{ provide: IgxInputGroupBase, useExisting: IgxInputGroupComponent }], queries: [{ propertyName: "input", first: true, predicate: IgxInputDirective, descendants: true, read: IgxInputDirective, static: true }, { propertyName: "hints", predicate: IgxHintDirective, read: IgxHintDirective }, { propertyName: "_prefixes", predicate: IgxPrefixDirective, descendants: true, read: IgxPrefixDirective }, { propertyName: "_suffixes", predicate: IgxSuffixDirective, descendants: true, read: IgxSuffixDirective }], ngImport: i0, template: "<div class=\"igx-input-group__wrapper\" *ngIf=\"isTypeBox; else bundle\">\n <ng-container *ngTemplateOutlet=\"bundle\"></ng-container>\n</div>\n\n<div class=\"igx-input-group__hint\" (click)=\"hintClickHandler($event)\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n</div>\n\n<ng-template #label>\n <ng-content select=\"[igxLabel]\"></ng-content>\n</ng-template>\n\n<ng-template #input>\n <ng-content select=\"[igxInput]\"></ng-content>\n</ng-template>\n\n<ng-template #prefix>\n <ng-content select=\"igx-prefix, [igxPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #uploadButton>\n <igx-prefix *ngIf=\"isFileType\" class=\"igx-input-group__upload-button\">\n <button\n igxButton=\"contained\"\n type=\"button\"\n (click)=\"uploadButtonHandler()\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'igx-input-group__upload-button': isTypeLine }\"\n >\n {{ resourceStrings.igx_input_upload_button }}\n </button>\n </igx-prefix>\n</ng-template>\n\n<ng-template #files>\n <div\n *ngIf=\"isFileType\"\n class=\"igx-input-group__file-input\"\n [title]=\"fileNames\"\n >\n <span>{{ fileNames }}</span>\n </div>\n</ng-template>\n\n<ng-template #clear>\n <igx-suffix\n class=\"igx-input-group__clear-icon\"\n *ngIf=\"isFileType && isFilled\"\n (click)=\"clearValueHandler()\"\n (keydown.Enter)=\"clearValueHandler()\"\n title=\"clear files\"\n tabindex=\"0\"\n >\n <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n </igx-suffix>\n</ng-template>\n\n<ng-template #suffix>\n <ng-content select=\"igx-suffix, [igxSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #materialBundle>\n <div class=\"igx-input-group__bundle\">\n <div class=\"igx-input-group__bundle-start\">\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container>\n <div class=\"igx-input-group__notch\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </div>\n </ng-container>\n\n <div class=\"igx-input-group__bundle-main\">\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n <ng-container *ngTemplateOutlet=\"files\"></ng-container>\n </div>\n\n <div class=\"igx-input-group__filler\"></div>\n\n <div class=\"igx-input-group__bundle-end\">\n <ng-container *ngTemplateOutlet=\"clear\"></ng-container>\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\n </div>\n\n <div class=\"igx-input-group__line\" *ngIf=\"hasBorder\"></div>\n </div>\n</ng-template>\n\n<ng-template #fluentBundle>\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n\n <div class=\"igx-input-group__bundle\">\n <div class=\"igx-input-group__bundle-start\">\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n\n <div class=\"igx-input-group__bundle-main\">\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n <ng-container *ngTemplateOutlet=\"files\"></ng-container>\n </div>\n\n <div class=\"igx-input-group__bundle-end\">\n <ng-container *ngTemplateOutlet=\"clear\"></ng-container>\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\n </div>\n\n <div class=\"igx-input-group__line\" *ngIf=\"hasBorder\"></div>\n </div>\n</ng-template>\n\n<ng-template #bootstrapBundle>\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n\n <div class=\"igx-input-group__bundle\">\n <div class=\"igx-input-group__bundle-start\">\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n <ng-container *ngTemplateOutlet=\"files\"></ng-container>\n\n <div class=\"igx-input-group__bundle-end\">\n <ng-container *ngTemplateOutlet=\"clear\"></ng-container>\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #bundle>\n <ng-container [ngSwitch]=\"theme\">\n <ng-container *ngSwitchCase=\"'bootstrap'\">\n <ng-container *ngTemplateOutlet=\"bootstrapBundle\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'fluent'\">\n <ng-container *ngTemplateOutlet=\"fluentBundle\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'indigo'\">\n <ng-container *ngTemplateOutlet=\"fluentBundle\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngTemplateOutlet=\"materialBundle\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxPrefixDirective, selector: "igx-prefix,[igxPrefix],[igxStart]" }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "name", "active"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }] }); }
344
349
  }
345
350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxInputGroupComponent, decorators: [{
@@ -353,7 +358,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
353
358
  }] }, { type: undefined, decorators: [{
354
359
  type: Inject,
355
360
  args: [DOCUMENT]
356
- }] }, { type: i1.PlatformUtil }, { type: i0.ChangeDetectorRef }, { type: i2.ThemeService }], propDecorators: { resourceStrings: [{
361
+ }] }, { type: i1.PlatformUtil }, { type: i0.ChangeDetectorRef }, { type: i2.ThemeToken, decorators: [{
362
+ type: Inject,
363
+ args: [THEME_TOKEN]
364
+ }] }], propDecorators: { resourceStrings: [{
357
365
  type: Input
358
366
  }], defaultClass: [{
359
367
  type: HostBinding,
@@ -439,4 +447,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
439
447
  type: HostBinding,
440
448
  args: ['class.igx-input-group--search']
441
449
  }] } });
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsV0FBVyxFQUNYLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUUzQixRQUFRLEVBQWEsZ0JBQWdCLEVBQ3hDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBeUIsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQXFCLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFn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RHJCLFdBQVc7dUJBQUMsaUNBQWlDO2dCQVluQyxXQUFXO3NCQURyQixXQUFXO3VCQUFDLGlDQUFpQztnQkFvRG5DLFNBQVM7c0JBRG5CLFdBQVc7dUJBQUMsNEJBQTRCO2dCQWlCOUIsVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBcUIvQixZQUFZO3NCQUR0QixXQUFXO3VCQUFDLCtCQUErQjtnQkFnQmpDLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsK0JBQStCO2dCQWdCakMsZUFBZTtzQkFEekIsV0FBVzt1QkFBQyxrQ0FBa0M7Z0JBZ0JwQyxZQUFZO3NCQUR0QixXQUFXO3VCQUFDLCtCQUErQjtnQkFnQmpDLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLCBRdWVyeUxpc3QsIGJvb2xlYW5BdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSW5wdXRSZXNvdXJjZVN0cmluZ3MsIElucHV0UmVzb3VyY2VTdHJpbmdzRU4gfSBmcm9tICcuLi9jb3JlL2kxOG4vaW5wdXQtcmVzb3VyY2VzJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hIaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9oaW50L2hpbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgSWd4SW5wdXREaXJlY3RpdmUsXG4gICAgSWd4SW5wdXRTdGF0ZVxufSBmcm9tICcuLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQcmVmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3ByZWZpeC9wcmVmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQmFzZSB9IGZyb20gJy4vaW5wdXQtZ3JvdXAuY29tbW9uJztcbmltcG9ydCB7IElneElucHV0R3JvdXBUeXBlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSB9IGZyb20gJy4vaW5wdXRHcm91cFR5cGUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSWd4VGhlbWUsIFRoZW1lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RoZW1lL3RoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWlucHV0LWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2lucHV0LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElneElucHV0R3JvdXBCYXNlLCB1c2VFeGlzdGluZzogSWd4SW5wdXRHcm91cENvbXBvbmVudCB9XSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hQcmVmaXhEaXJlY3RpdmUsIElneEJ1dHRvbkRpcmVjdGl2ZSwgTmdDbGFzcywgSWd4U3VmZml4RGlyZWN0aXZlLCBJZ3hJY29uQ29tcG9uZW50LCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHRdXG59KVxuZXhwb3J0IGNsYXNzIElneElucHV0R3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBJZ3hJbnB1dEdyb3VwQmFzZSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSUlucHV0UmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUlucHV0UmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdGhlIGF1dG8tZ2VuZXJhdGVkIGNsYXNzIG9mIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAuXG4gICAgICogQnkgZGVmYXVsdCBhcHBsaWVkIHRoZSBjbGFzcyBpcyBhcHBsaWVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqICBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiAgbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogIHRoaXMuaW5wdXRHcm91cC5kZWZhdWx0Q2xhc3MgPSBmYWxzZTtcbiAgICAgKiBgYGBcbiAgICAgKiB9XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAnKVxuICAgIHB1YmxpYyBkZWZhdWx0Q2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tcGxhY2Vob2xkZXInKVxuICAgIHB1YmxpYyBoYXNQbGFjZWhvbGRlciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tcmVxdWlyZWQnKVxuICAgIHB1YmxpYyBpc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1mb2N1c2VkJylcbiAgICBwdWJsaWMgaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFdoZW4gdHJ1dGh5LCBkaXNhYmxlcyB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgLlxuICAgICAqIENvbnRyb2xsZWQgYnkgdGhlIHVuZGVybHlpbmcgYElneElucHV0RGlyZWN0aXZlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1pbnB1dC1ncm91cCBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LWlucHV0LWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIHRoZSBpbnB1dCB3aGVuIGNsaWNraW5nIG9uIG90aGVyIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBncm91cCAoZS5nLiBwcmVmaXggb3Igc3VmZml4KS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIEF1dG9tYXRpYyBmb2N1cyBjYXVzZXMgc29mdHdhcmUga2V5Ym9hcmQgdG8gc2hvdyBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaW5wdXQtZ3JvdXAgW3N1cHByZXNzSW5wdXRBdXRvZm9jdXNdPVwidHJ1ZVwiPjwvaWd4LWlucHV0LWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzdXBwcmVzc0lucHV0QXV0b2ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS13YXJuaW5nJylcbiAgICBwdWJsaWMgaGFzV2FybmluZyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneEhpbnREaXJlY3RpdmUsIHsgcmVhZDogSWd4SGludERpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCBoaW50czogUXVlcnlMaXN0PElneEhpbnREaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hQcmVmaXhEaXJlY3RpdmUsIHsgcmVhZDogSWd4UHJlZml4RGlyZWN0aXZlLCBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBfcHJlZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hQcmVmaXhEaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hTdWZmaXhEaXJlY3RpdmUsIHsgcmVhZDogSWd4U3VmZml4RGlyZWN0aXZlLCBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBfc3VmZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hTdWZmaXhEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKElneElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgaW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBfdHlwZTogSWd4SW5wdXRHcm91cFR5cGUgPSBudWxsO1xuICAgIHByaXZhdGUgX2ZpbGxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RoZW1lOiBJZ3hUaGVtZTtcbiAgICBwcml2YXRlIF90aGVtZSQgPSBuZXcgU3ViamVjdDxJZ3hUaGVtZT4oKTtcbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBnZXRDdXJyZW50UmVzb3VyY2VTdHJpbmdzKElucHV0UmVzb3VyY2VTdHJpbmdzRU4pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tdmFsaWQnKVxuICAgIHB1YmxpYyBnZXQgdmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQudmFsaWQgPT09IElneElucHV0U3RhdGUuVkFMSUQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0taW52YWxpZCcpXG4gICAgcHVibGljIGdldCBpbnZhbGlkQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0LnZhbGlkID09PSBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tZmlsbGVkJylcbiAgICBwdWJsaWMgZ2V0IGlzRmlsbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsbGVkIHx8ICh0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXRleHRhcmVhLWdyb3VwJylcbiAgICBwdWJsaWMgZ2V0IHRleHRBcmVhQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0LmlzVGV4dEFyZWE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBob3cgdGhlIGlucHV0IHdpbGwgYmUgc3R5bGVkLlxuICAgICAqIEFsbG93ZWQgdmFsdWVzIG9mIHR5cGUgSWd4SW5wdXRHcm91cFR5cGUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaW5wdXQtZ3JvdXAgW3R5cGVdPVwiJ3NlYXJjaCdcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ3R5cGUnKVxuICAgIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogSWd4SW5wdXRHcm91cFR5cGUpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YC4gSG93IHRoZSBpbnB1dCBpcyBzdHlsZWQuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYGxpbmVgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlucHV0VHlwZSA9IHRoaXMuaW5wdXRHcm91cC50eXBlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlIHx8IHRoaXMuX2lucHV0R3JvdXBUeXBlIHx8ICdsaW5lJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aGVtZSBvZiB0aGUgaW5wdXQuXG4gICAgICogQWxsb3dlZCB2YWx1ZXMgb2YgdHlwZSBJZ3hJbnB1dEdyb3VwVGhlbWUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXBcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogIGxldCBpbnB1dFRoZW1lID0gJ2ZsdWVudCc7XG4gICAgICogfVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0aGVtZSh2YWx1ZTogSWd4VGhlbWUpIHtcbiAgICAgICAgdGhpcy5fdGhlbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0aGVtZSBvZiB0aGUgaW5wdXQuXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIGlzIG9mIHR5cGUgSWd4SW5wdXRHcm91cFR5cGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXBcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogIGxldCBpbnB1dFRoZW1lID0gdGhpcy5pbnB1dEdyb3VwLnRoZW1lO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRoZW1lKCk6IElneFRoZW1lIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW1lO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpXG4gICAgICAgIHByaXZhdGUgX2lucHV0R3JvdXBUeXBlOiBJZ3hJbnB1dEdyb3VwVHlwZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVClcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLnRoZW1lU2VydmljZS5nbG9iYWxUaGVtZTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLl90aGVtZSQuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0gdmFsdWUgYXMgSWd4VGhlbWU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmlzRm9jdXNlZCAmJlxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICF0aGlzLnN1cHByZXNzSW5wdXRBdXRvZm9jdXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Qb2ludGVyRG93bihldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCAmJiBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoaW50Q2xpY2tIYW5kbGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIGhhcyBoaW50cy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpbnB1dEhpbnRzID0gdGhpcy5pbnB1dEdyb3VwLmhhc0hpbnRzO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0hpbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaW50cy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1wcmVmaXhlZCcpXG4gICAgcHVibGljIGdldCBoYXNQcmVmaXhlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZpeGVzLmxlbmd0aCA+IDAgfHwgdGhpcy5pc0ZpbGVUeXBlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXQgcHJlZml4ZXMoaXRlbXM6IFF1ZXJ5TGlzdDxJZ3hQcmVmaXhEaXJlY3RpdmU+KSB7XG4gICAgICAgIHRoaXMuX3ByZWZpeGVzID0gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXN1ZmZpeGVkJylcbiAgICBwdWJsaWMgZ2V0IGhhc1N1ZmZpeGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VmZml4ZXMubGVuZ3RoID4gMCB8fCB0aGlzLmlzRmlsZVR5cGUgJiYgdGhpcy5pc0ZpbGxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IHN1ZmZpeGVzKGl0ZW1zOiBRdWVyeUxpc3Q8SWd4UHJlZml4RGlyZWN0aXZlPikge1xuICAgICAgICB0aGlzLl9zdWZmaXhlcyA9IGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIGhhcyBib3JkZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXBcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaW5wdXRCb3JkZXIgPSB0aGlzLmlucHV0R3JvdXAuaGFzQm9yZGVyO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0JvcmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLnR5cGUgPT09ICdsaW5lJyB8fCB0aGlzLnR5cGUgPT09ICdib3gnKSAmJlxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPT09ICdtYXRlcmlhbCdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0eXBlIGlzIGxpbmUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUxpbmUgPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlTGluZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1R5cGVMaW5lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbGluZScgJiYgdGhpcy5fdGhlbWUgPT09ICdtYXRlcmlhbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdHlwZSBpcyBib3guXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUJveCA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVCb3g7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1ib3gnKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlQm94KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnYm94JyAmJiB0aGlzLl90aGVtZSA9PT0gJ21hdGVyaWFsJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdXBsb2FkQnV0dG9uSGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGNsZWFyVmFsdWVIYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmlucHV0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWZpbGUnKVxuICAgIHB1YmxpYyBnZXQgaXNGaWxlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQudHlwZSA9PT0gJ2ZpbGUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZmlsZU5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5maWxlTmFtZXMgfHwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLmlneF9pbnB1dF9maWxlX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHR5cGUgaXMgYm9yZGVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVCb3JkZXIgPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlQm9yZGVyO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tYm9yZGVyJylcbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUJvcmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2JvcmRlcicgJiYgdGhpcy5fdGhlbWUgPT09ICdtYXRlcmlhbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdGhlbWUgaXMgRmx1ZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVGbHVlbnQgPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlRmx1ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tZmx1ZW50JylcbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUZsdWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW1lID09PSAnZmx1ZW50JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0aGVtZSBpcyBCb290c3RyYXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUJvb3RzdHJhcCA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVCb290c3RyYXA7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1ib290c3RyYXAnKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlQm9vdHN0cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhlbWUgPT09ICdib290c3RyYXAnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHRoZW1lIGlzIEluZGlnby5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlSW5kaWdvID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUluZGlnbztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWluZGlnbycpXG4gICAgcHVibGljIGdldCBpc1R5cGVJbmRpZ28oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aGVtZSA9PT0gJ2luZGlnbyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdHlwZSBpcyBzZWFyY2guXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZVNlYXJjaCA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVTZWFyY2g7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1zZWFyY2gnKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlU2VhcmNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnc2VhcmNoJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgZmlsbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsbGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIHNldCBmaWxsZWQodmFsKSB7XG4gICAgICAgIHRoaXMuX2ZpbGxlZCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBjb25zdCB0aGVtZSA9IHRoaXMudGhlbWVTZXJ2aWNlLmdldENvbXBvbmVudFRoZW1lKHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHRoZW1lKSB7XG4gICAgICAgICAgICB0aGlzLl90aGVtZSQubmV4dCh0aGVtZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fd3JhcHBlclwiICpuZ0lmPVwiaXNUeXBlQm94OyBlbHNlIGJ1bmRsZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19oaW50XCIgKGNsaWNrKT1cImhpbnRDbGlja0hhbmRsZXIoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LCBbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsYWJlbD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4TGFiZWxdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4SW5wdXRdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwcmVmaXg+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeCwgW2lneFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3VwbG9hZEJ1dHRvbj5cbiAgICA8aWd4LXByZWZpeCAqbmdJZj1cImlzRmlsZVR5cGVcIiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fdXBsb2FkLWJ1dHRvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZ3hCdXR0b249XCJjb250YWluZWRcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkQnV0dG9uSGFuZGxlcigpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpZ3gtaW5wdXQtZ3JvdXBfX3VwbG9hZC1idXR0b24nOiBpc1R5cGVMaW5lIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyByZXNvdXJjZVN0cmluZ3MuaWd4X2lucHV0X3VwbG9hZF9idXR0b24gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9pZ3gtcHJlZml4PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaWxlcz5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiaXNGaWxlVHlwZVwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19maWxlLWlucHV0XCJcbiAgICAgICAgW3RpdGxlXT1cImZpbGVOYW1lc1wiXG4gICAgPlxuICAgICAgICA8c3Bhbj57eyBmaWxlTmFtZXMgfX08L3NwYW4+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NsZWFyPlxuICAgIDxpZ3gtc3VmZml4XG4gICAgICAgIGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19jbGVhci1pY29uXCJcbiAgICAgICAgKm5nSWY9XCJpc0ZpbGVUeXBlICYmIGlzRmlsbGVkXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWVIYW5kbGVyKClcIlxuICAgICAgICAoa2V5ZG93bi5FbnRlcik9XCJjbGVhclZhbHVlSGFuZGxlcigpXCJcbiAgICAgICAgdGl0bGU9XCJjbGVhciBmaWxlc1wiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgPlxuICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJpbnB1dF9jbGVhclwiPjwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdWZmaXg+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeCwgW2lneFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdGVyaWFsQnVuZGxlPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtc3RhcnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmVmaXhcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX25vdGNoXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLW1haW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2ZpbGxlclwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1lbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1ZmZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19saW5lXCIgKm5nSWY9XCJoYXNCb3JkZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmx1ZW50QnVuZGxlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbFwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1zdGFydFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZWZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZEJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1tYWluXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtZW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xlYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWZmaXhcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fbGluZVwiICpuZ0lmPVwiaGFzQm9yZGVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Jvb3RzdHJhcEJ1bmRsZT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtc3RhcnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmVmaXhcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlc1wiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1lbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1ZmZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnVuZGxlPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRoZW1lXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidib290c3RyYXAnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9vdHN0cmFwQnVuZGxlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmbHVlbnQnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmx1ZW50QnVuZGxlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbmRpZ28nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmx1ZW50QnVuZGxlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRlcmlhbEJ1bmRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUVWLFdBQVcsRUFDWCxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFDM0IsUUFBUSxFQUFhLGdCQUFnQixFQUNyQyxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdGLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUNILGlCQUFpQixFQUNqQixhQUFhLEVBQ2hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFD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Vzt1QkFBQyxnQ0FBZ0M7Z0JBT2xDLFFBQVE7c0JBRGxCLFdBQVc7dUJBQUMsK0JBQStCO2dCQU9qQyxhQUFhO3NCQUR2QixXQUFXO3VCQUFDLHVDQUF1QztnQkFhekMsSUFBSTtzQkFEZCxLQUFLO3VCQUFDLE1BQU07Z0JBK0JGLEtBQUs7c0JBRGYsS0FBSztnQkE2Q0MsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhMUIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBNEI1QixXQUFXO3NCQURyQixXQUFXO3VCQUFDLGlDQUFpQztnQkFZbkMsV0FBVztzQkFEckIsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBb0RuQyxTQUFTO3NCQURuQixXQUFXO3VCQUFDLDRCQUE0QjtnQkFpQjlCLFVBQVU7c0JBRHBCLFdBQVc7dUJBQUMsNkJBQTZCO2dCQXFCL0IsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBZ0JqQyxZQUFZO3NCQUR0QixXQUFXO3VCQUFDLCtCQUErQjtnQkFnQmpDLGVBQWU7c0JBRHpCLFdBQVc7dUJBQUMsa0NBQWtDO2dCQWdCcEMsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBZ0JqQyxZQUFZO3NCQUR0QixXQUFXO3VCQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsXG4gICAgT3B0aW9uYWwsIFF1ZXJ5TGlzdCwgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSW5wdXRSZXNvdXJjZVN0cmluZ3MsIElucHV0UmVzb3VyY2VTdHJpbmdzRU4gfSBmcm9tICcuLi9jb3JlL2kxOG4vaW5wdXQtcmVzb3VyY2VzJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCwgZ2V0Q29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SGludERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvaGludC9oaW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIElneElucHV0RGlyZWN0aXZlLFxuICAgIElneElucHV0U3RhdGVcbn0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgSWd4SW5wdXRHcm91cEJhc2UgfSBmcm9tICcuL2lucHV0LWdyb3VwLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwVHlwZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUgfSBmcm9tICcuL2lucHV0R3JvdXBUeXBlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElneFRoZW1lLCBUSEVNRV9UT0tFTiwgVGhlbWVUb2tlbiB9IGZyb20gJy4uL3NlcnZpY2VzL3RoZW1lL3RoZW1lLnRva2VuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtaW5wdXQtZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnaW5wdXQtZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4SW5wdXRHcm91cEJhc2UsIHVzZUV4aXN0aW5nOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH1dLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIElneFByZWZpeERpcmVjdGl2ZSwgSWd4QnV0dG9uRGlyZWN0aXZlLCBOZ0NsYXNzLCBJZ3hTdWZmaXhEaXJlY3RpdmUsIElneEljb25Db21wb25lbnQsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4SW5wdXRHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIElneElucHV0R3JvdXBCYXNlLCBBZnRlclZpZXdJbml0IHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSUlucHV0UmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUlucHV0UmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdGhlIGF1dG8tZ2VuZXJhdGVkIGNsYXNzIG9mIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAuXG4gICAgICogQnkgZGVmYXVsdCBhcHBsaWVkIHRoZSBjbGFzcyBpcyBhcHBsaWVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqICBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiAgbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogIHRoaXMuaW5wdXRHcm91cC5kZWZhdWx0Q2xhc3MgPSBmYWxzZTtcbiAgICAgKiBgYGBcbiAgICAgKiB9XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAnKVxuICAgIHB1YmxpYyBkZWZhdWx0Q2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tcGxhY2Vob2xkZXInKVxuICAgIHB1YmxpYyBoYXNQbGFjZWhvbGRlciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tcmVxdWlyZWQnKVxuICAgIHB1YmxpYyBpc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1mb2N1c2VkJylcbiAgICBwdWJsaWMgaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFdoZW4gdHJ1dGh5LCBkaXNhYmxlcyB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgLlxuICAgICAqIENvbnRyb2xsZWQgYnkgdGhlIHVuZGVybHlpbmcgYElneElucHV0RGlyZWN0aXZlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1pbnB1dC1ncm91cCBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LWlucHV0LWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIHRoZSBpbnB1dCB3aGVuIGNsaWNraW5nIG9uIG90aGVyIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBncm91cCAoZS5nLiBwcmVmaXggb3Igc3VmZml4KS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIEF1dG9tYXRpYyBmb2N1cyBjYXVzZXMgc29mdHdhcmUga2V5Ym9hcmQgdG8gc2hvdyBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaW5wdXQtZ3JvdXAgW3N1cHByZXNzSW5wdXRBdXRvZm9jdXNdPVwidHJ1ZVwiPjwvaWd4LWlucHV0LWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzdXBwcmVzc0lucHV0QXV0b2ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS13YXJuaW5nJylcbiAgICBwdWJsaWMgaGFzV2FybmluZyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneEhpbnREaXJlY3RpdmUsIHsgcmVhZDogSWd4SGludERpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCBoaW50czogUXVlcnlMaXN0PElneEhpbnREaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hQcmVmaXhEaXJlY3RpdmUsIHsgcmVhZDogSWd4UHJlZml4RGlyZWN0aXZlLCBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBfcHJlZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hQcmVmaXhEaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hTdWZmaXhEaXJlY3RpdmUsIHsgcmVhZDogSWd4U3VmZml4RGlyZWN0aXZlLCBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBfc3VmZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hTdWZmaXhEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKElneElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgaW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIF90eXBlOiBJZ3hJbnB1dEdyb3VwVHlwZSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZmlsbGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfdGhlbWU6IElneFRoZW1lO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MoSW5wdXRSZXNvdXJjZVN0cmluZ3NFTik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS12YWxpZCcpXG4gICAgcHVibGljIGdldCB2YWxpZENsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC52YWxpZCA9PT0gSWd4SW5wdXRTdGF0ZS5WQUxJRDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1pbnZhbGlkJylcbiAgICBwdWJsaWMgZ2V0IGludmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQudmFsaWQgPT09IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1maWxsZWQnKVxuICAgIHB1YmxpYyBnZXQgaXNGaWxsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsZWQgfHwgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tdGV4dGFyZWEtZ3JvdXAnKVxuICAgIHB1YmxpYyBnZXQgdGV4dEFyZWFDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuaXNUZXh0QXJlYTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGhvdyB0aGUgaW5wdXQgd2lsbCBiZSBzdHlsZWQuXG4gICAgICogQWxsb3dlZCB2YWx1ZXMgb2YgdHlwZSBJZ3hJbnB1dEdyb3VwVHlwZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1pbnB1dC1ncm91cCBbdHlwZV09XCInc2VhcmNoJ1wiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgndHlwZScpXG4gICAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBJZ3hJbnB1dEdyb3VwVHlwZSkge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgLiBIb3cgdGhlIGlucHV0IGlzIHN0eWxlZC5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBgbGluZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXBcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaW5wdXRUeXBlID0gdGhpcy5pbnB1dEdyb3VwLnR5cGU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgfHwgdGhpcy5faW5wdXRHcm91cFR5cGUgfHwgJ2xpbmUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRoZW1lIG9mIHRoZSBpbnB1dC5cbiAgICAgKiBBbGxvd2VkIHZhbHVlcyBvZiB0eXBlIElneElucHV0R3JvdXBUaGVtZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgbGV0IGlucHV0VGhlbWUgPSAnZmx1ZW50JztcbiAgICAgKiB9XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHRoZW1lKHZhbHVlOiBJZ3hUaGVtZSkge1xuICAgICAgICB0aGlzLl90aGVtZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRoZW1lIG9mIHRoZSBpbnB1dC5cbiAgICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgb2YgdHlwZSBJZ3hJbnB1dEdyb3VwVHlwZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgbGV0IGlucHV0VGhlbWUgPSB0aGlzLmlucHV0R3JvdXAudGhlbWU7XG4gICAgICogfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGhlbWUoKTogSWd4VGhlbWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhlbWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSlcbiAgICAgICAgcHJpdmF0ZSBfaW5wdXRHcm91cFR5cGU6IElneElucHV0R3JvdXBUeXBlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKVxuICAgICAgICBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KFRIRU1FX1RPS0VOKVxuICAgICAgICBwcml2YXRlIHRoZW1lVG9rZW46IFRoZW1lVG9rZW5cbiAgICApIHtcbiAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLnRoZW1lVG9rZW4udGhlbWU7XG5cbiAgICAgICAgY29uc3QgeyB1bnN1YnNjcmliZSB9ID0gdGhpcy50aGVtZVRva2VuLm9uQ2hhbmdlKCh0aGVtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RoZW1lICE9PSB0aGVtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RoZW1lID0gdGhlbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB1bnN1YnNjcmliZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaXNGb2N1c2VkICYmXG4gICAgICAgICAgICBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgIXRoaXMuc3VwcHJlc3NJbnB1dEF1dG9mb2N1c1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkICYmIGV2ZW50LnRhcmdldCAhPT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhpbnRDbGlja0hhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgaGFzIGhpbnRzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlucHV0SGludHMgPSB0aGlzLmlucHV0R3JvdXAuaGFzSGludHM7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzSGludHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXByZWZpeGVkJylcbiAgICBwdWJsaWMgZ2V0IGhhc1ByZWZpeGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZml4ZXMubGVuZ3RoID4gMCB8fCB0aGlzLmlzRmlsZVR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCBwcmVmaXhlcyhpdGVtczogUXVlcnlMaXN0PElneFByZWZpeERpcmVjdGl2ZT4pIHtcbiAgICAgICAgdGhpcy5fcHJlZml4ZXMgPSBpdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tc3VmZml4ZWQnKVxuICAgIHB1YmxpYyBnZXQgaGFzU3VmZml4ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWZmaXhlcy5sZW5ndGggPiAwIHx8IHRoaXMuaXNGaWxlVHlwZSAmJiB0aGlzLmlzRmlsbGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXQgc3VmZml4ZXMoaXRlbXM6IFF1ZXJ5TGlzdDxJZ3hQcmVmaXhEaXJlY3RpdmU+KSB7XG4gICAgICAgIHRoaXMuX3N1ZmZpeGVzID0gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgaGFzIGJvcmRlci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cFwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpbnB1dEJvcmRlciA9IHRoaXMuaW5wdXRHcm91cC5oYXNCb3JkZXI7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzQm9yZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMudHlwZSA9PT0gJ2xpbmUnIHx8IHRoaXMudHlwZSA9PT0gJ2JveCcpICYmXG4gICAgICAgICAgICB0aGlzLl90aGVtZSA9PT0gJ21hdGVyaWFsJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHR5cGUgaXMgbGluZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlTGluZSA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVMaW5lO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdsaW5lJyAmJiB0aGlzLl90aGVtZSA9PT0gJ21hdGVyaWFsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0eXBlIGlzIGJveC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlQm94ID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUJveDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWJveCcpXG4gICAgcHVibGljIGdldCBpc1R5cGVCb3goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdib3gnICYmIHRoaXMuX3RoZW1lID09PSAnbWF0ZXJpYWwnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB1cGxvYWRCdXR0b25IYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY2xlYXJWYWx1ZUhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0tZmlsZScpXG4gICAgcHVibGljIGdldCBpc0ZpbGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC50eXBlID09PSAnZmlsZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBmaWxlTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0LmZpbGVOYW1lcyB8fCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MuaWd4X2lucHV0X2ZpbGVfcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdHlwZSBpcyBib3JkZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUJvcmRlciA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVCb3JkZXI7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1ib3JkZXInKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlQm9yZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnYm9yZGVyJyAmJiB0aGlzLl90aGVtZSA9PT0gJ21hdGVyaWFsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0aGVtZSBpcyBGbHVlbnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeUlucHV0R3JvdXAxXCIpXG4gICAgICogcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IGlzVHlwZUZsdWVudCA9IHRoaXMuaW5wdXRHcm91cC5pc1R5cGVGbHVlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWlucHV0LWdyb3VwLS1mbHVlbnQnKVxuICAgIHB1YmxpYyBnZXQgaXNUeXBlRmx1ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhlbWUgPT09ICdmbHVlbnQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYElneElucHV0R3JvdXBDb21wb25lbnRgIHRoZW1lIGlzIEJvb3RzdHJhcC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlQm9vdHN0cmFwID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZUJvb3RzdHJhcDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLWJvb3RzdHJhcCcpXG4gICAgcHVibGljIGdldCBpc1R5cGVCb290c3RyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aGVtZSA9PT0gJ2Jvb3RzdHJhcCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBgSWd4SW5wdXRHcm91cENvbXBvbmVudGAgdGhlbWUgaXMgSW5kaWdvLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlJbnB1dEdyb3VwMVwiKVxuICAgICAqIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBpc1R5cGVJbmRpZ28gPSB0aGlzLmlucHV0R3JvdXAuaXNUeXBlSW5kaWdvO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pbnB1dC1ncm91cC0taW5kaWdvJylcbiAgICBwdWJsaWMgZ2V0IGlzVHlwZUluZGlnbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW1lID09PSAnaW5kaWdvJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50YCB0eXBlIGlzIHNlYXJjaC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15SW5wdXRHcm91cDFcIilcbiAgICAgKiBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgaXNUeXBlU2VhcmNoID0gdGhpcy5pbnB1dEdyb3VwLmlzVHlwZVNlYXJjaDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtaW5wdXQtZ3JvdXAtLXNlYXJjaCcpXG4gICAgcHVibGljIGdldCBpc1R5cGVTZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdzZWFyY2gnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBmaWxsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgc2V0IGZpbGxlZCh2YWwpIHtcbiAgICAgICAgdGhpcy5fZmlsbGVkID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tcG9uZW50VGhlbWUoKSB7XG4gICAgICAgIGlmICghdGhpcy50aGVtZVRva2VuLnByZWZlclRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVtZSA9IGdldENvbXBvbmVudFRoZW1lKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoZW1lICYmIHRoZW1lICE9PSB0aGlzLl90aGVtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0Q29tcG9uZW50VGhlbWUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX193cmFwcGVyXCIgKm5nSWY9XCJpc1R5cGVCb3g7IGVsc2UgYnVuZGxlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1bmRsZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2hpbnRcIiAoY2xpY2spPVwiaGludENsaWNrSGFuZGxlcigkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWhpbnQsIFtpZ3hIaW50XVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xhYmVsPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hJbnB1dF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3ByZWZpeD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4LCBbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXBsb2FkQnV0dG9uPlxuICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiaXNGaWxlVHlwZVwiIGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX191cGxvYWQtYnV0dG9uXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1cGxvYWRCdXR0b25IYW5kbGVyKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC1pbnB1dC1ncm91cF9fdXBsb2FkLWJ1dHRvbic6IGlzVHlwZUxpbmUgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IHJlc291cmNlU3RyaW5ncy5pZ3hfaW5wdXRfdXBsb2FkX2J1dHRvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2lneC1wcmVmaXg+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbGVzPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJpc0ZpbGVUeXBlXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2ZpbGUtaW5wdXRcIlxuICAgICAgICBbdGl0bGVdPVwiZmlsZU5hbWVzXCJcbiAgICA+XG4gICAgICAgIDxzcGFuPnt7IGZpbGVOYW1lcyB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2xlYXI+XG4gICAgPGlneC1zdWZmaXhcbiAgICAgICAgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2NsZWFyLWljb25cIlxuICAgICAgICAqbmdJZj1cImlzRmlsZVR5cGUgJiYgaXNGaWxsZWRcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZUhhbmRsZXIoKVwiXG4gICAgICAgIChrZXlkb3duLkVudGVyKT1cImNsZWFyVmFsdWVIYW5kbGVyKClcIlxuICAgICAgICB0aXRsZT1cImNsZWFyIGZpbGVzXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICA+XG4gICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImlucHV0X2NsZWFyXCI+PC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N1ZmZpeD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LCBbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0ZXJpYWxCdW5kbGU+XG4gICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1zdGFydFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZWZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZEJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fbm90Y2hcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGUtbWFpblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsZXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fZmlsbGVyXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLWVuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2xpbmVcIiAqbmdJZj1cImhhc0JvcmRlclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmbHVlbnRCdW5kbGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19idW5kbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLXN0YXJ0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLW1haW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1lbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1ZmZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWlucHV0LWdyb3VwX19saW5lXCIgKm5nSWY9XCJoYXNCb3JkZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9vdHN0cmFwQnVuZGxlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbFwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtaW5wdXQtZ3JvdXBfX2J1bmRsZS1zdGFydFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZWZpeFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZEJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVzXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1pbnB1dC1ncm91cF9fYnVuZGxlLWVuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidW5kbGU+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidGhlbWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb3RzdHJhcCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib290c3RyYXBCdW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZsdWVudCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmbHVlbnRCdW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZGlnbydcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmbHVlbnRCdW5kbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdGVyaWFsQnVuZGxlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -65,7 +65,7 @@ export class WorksheetDataDictionary {
65
65
  }
66
66
  getContext() {
67
67
  if (!this._context) {
68
- const canvas = document.createElement('canvas');
68
+ const canvas = globalThis.document?.createElement('canvas');
69
69
  this._context = canvas.getContext('2d');
70
70
  this._context.font = WorksheetDataDictionary.DEFAULT_FONT;
71
71
  }
@@ -75,4 +75,4 @@ export class WorksheetDataDictionary {
75
75
  this._keysAreValid = false;
76
76
  }
77
77
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NoZWV0LWRhdGEtZGljdGlvbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leGNlbC93b3Jrc2hlZXQtZGF0YS1kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RSxjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF1QjthQUNqQixpQkFBWSxHQUFHLGNBQWMsQUFBakIsQ0FBa0I7YUFDOUIsaUJBQVksR0FBRyxDQUFDLEFBQUosQ0FBSztJQWlCaEMsWUFBWSxXQUFtQixFQUFFLFdBQW1CLEVBQUUsZ0JBQTBCO1FBZnpFLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBZXpCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBUyxXQUFXLENBQUMsQ0FBQztRQUVwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRU0sU0FBUyxDQUFDLEtB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LE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeHBvcnRVdGlsaXRpZXMgfSBmcm9tICcuLi9leHBvcnRlci1jb21tb24vZXhwb3J0LXV0aWxpdGllcyc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0RGF0YURpY3Rpb25hcnkge1xuICAgIHByaXZhdGUgc3RhdGljIERFRkFVTFRfRk9OVCA9ICcxMXB0IENhbGlicmknO1xuICAgIHByaXZhdGUgc3RhdGljIFRFWFRfUEFERElORyA9IDU7XG5cbiAgICBwdWJsaWMgaGFzTnVtYmVyVmFsdWVzID0gZmFsc2U7XG4gICAgcHVibGljIGhhc0RhdGVWYWx1ZXMgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzdHJpbmdzQ291bnQ6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2RpY3Rpb25hcnk6IGFueTtcbiAgICBwcml2YXRlIF93aWR0aHNEaWN0aW9uYXJ5OiBhbnk7XG5cbiAgICBwcml2YXRlIF9rZXlzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9rZXlzQXJlVmFsaWQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIF9jb3VudGVyOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY29sdW1uV2lkdGhzOiBudW1iZXJbXTtcbiAgICBwcml2YXRlIF9jb250ZXh0OiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW5Db3VudDogbnVtYmVyLCBjb2x1bW5XaWR0aDogbnVtYmVyLCBjb2x1bW5XaWR0aHNMaXN0OiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLl9kaWN0aW9uYXJ5ID0ge307XG4gICAgICAgIHRoaXMuX3dpZHRoc0RpY3Rpb25hcnkgPSB7fTtcbiAgICAgICAgdGhpcy5fY291bnRlciA9IDA7XG4gICAgICAgIHRoaXMuZGlydHlLZXlDb2xsZWN0aW9ucygpO1xuXG4gICAgICAgIHRoaXMuX2NvbHVtbldpZHRocyA9IG5ldyBBcnJheTxudW1iZXI+KGNvbHVtbkNvdW50KTtcblxuICAgICAgICBpZiAoY29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbldpZHRocy5maWxsKGNvbHVtbldpZHRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbldpZHRocyA9IGNvbHVtbldpZHRoc0xpc3Q7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0cmluZ3NDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5XaWR0aHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5XaWR0aHM7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVWYWx1ZSh2YWx1ZTogYW55LCBpc0hlYWRlcjogYm9vbGVhbiwgc2hvdWxkU2FuaXRpemVWYWx1ZSA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgc2FuaXRpemVkVmFsdWUgPSAnJztcbiAgICAgICAgY29uc3QgaXNEYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuICAgICAgICBjb25zdCBpc1NhdmVkQXNTdHJpbmcgPSBpc0hlYWRlciB8fCAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gTnVtYmVyKHZhbHVlKSAmJiAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSAmJiAhaXNEYXRlKTtcblxuICAgICAgICBpZiAoaXNTYXZlZEFzU3RyaW5nKSB7XG4gICAgICAgICAgICBzYW5pdGl6ZWRWYWx1ZSA9IHNob3VsZFNhbml0aXplVmFsdWUgPyBFeHBvcnRVdGlsaXRpZXMuc2FuaXRpemVWYWx1ZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2RpY3Rpb25hcnlbc2FuaXRpemVkVmFsdWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWN0aW9uYXJ5W3Nhbml0aXplZFZhbHVlXSA9IHRoaXMuX2NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5S2V5Q29sbGVjdGlvbnMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdHJpbmdzQ291bnQgKys7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0RhdGVWYWx1ZXMgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNOdW1iZXJWYWx1ZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzU2F2ZWRBc1N0cmluZyA/IHRoaXMuZ2V0U2FuaXRpemVkVmFsdWUoc2FuaXRpemVkVmFsdWUpIDogLTE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTYW5pdGl6ZWRWYWx1ZShFeHBvcnRVdGlsaXRpZXMuc2FuaXRpemVWYWx1ZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTYW5pdGl6ZWRWYWx1ZShzYW5pdGl6ZWRWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlbc2FuaXRpemVkVmFsdWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKCF0aGlzLl9rZXlzQXJlVmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9kaWN0aW9uYXJ5KTtcbiAgICAgICAgICAgIHRoaXMuX2tleXNBcmVWYWxpZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fa2V5cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRleHRXaWR0aCh2YWx1ZTogYW55KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3dpZHRoc0RpY3Rpb25hcnlbdmFsdWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSBjb250ZXh0Lm1lYXN1cmVUZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoc0RpY3Rpb25hcnlbdmFsdWVdID0gbWV0cmljcy53aWR0aCArIFdvcmtzaGVldERhdGFEaWN0aW9uYXJ5LlRFWFRfUEFERElORztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aHNEaWN0aW9uYXJ5W3ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRleHQoKTogYW55IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb250ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQuZm9udCA9IFdvcmtzaGVldERhdGFEaWN0aW9uYXJ5LkRFRkFVTFRfRk9OVDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlydHlLZXlDb2xsZWN0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5c0FyZVZhbGlkID0gZmFsc2U7XG4gICAgfVxufVxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NoZWV0LWRhdGEtZGljdGlvbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leGNlbC93b3Jrc2hlZXQtZGF0YS1kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RSxjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF1QjthQUNqQixpQkFBWSxHQUFHLGNBQWMsQUFBakIsQ0FBa0I7YUFDOUIsaUJBQVksR0FBRyxDQUFDLEFBQUosQ0FBSztJQWlCaEMsWUFBWSxXQUFtQixFQUFFLFdBQW1CLEVBQUUsZ0JBQTBCO1FBZnpFLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBZXpCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBUyxXQUFXLENBQUMsQ0FBQztRQUVwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQVUsRUFBRSxRQUFpQixFQUFFLG1CQUFtQixHQUFHLElBQUk7UUFDdEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxJQUFJLENBQUM7UUFDckMsTUFBTSxlQUFlLEdBQUcsUUFBUSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsQixjQUFjLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUVwRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLGlCQUFpQixDQUFDLGNBQXNCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBVTtRQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUM7UUFDekYsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDO1FBQzlELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXhwb3J0VXRpbGl0aWVzIH0gZnJvbSAnLi4vZXhwb3J0ZXItY29tbW9uL2V4cG9ydC11dGlsaXRpZXMnO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzaGVldERhdGFEaWN0aW9uYXJ5IHtcbiAgICBwcml2YXRlIHN0YXRpYyBERUZBVUxUX0ZPTlQgPSAnMTFwdCBDYWxpYnJpJztcbiAgICBwcml2YXRlIHN0YXRpYyBURVhUX1BBRERJTkcgPSA1O1xuXG4gICAgcHVibGljIGhhc051bWJlclZhbHVlcyA9IGZhbHNlO1xuICAgIHB1YmxpYyBoYXNEYXRlVmFsdWVzID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc3RyaW5nc0NvdW50OiBudW1iZXI7XG5cbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5OiBhbnk7XG4gICAgcHJpdmF0ZSBfd2lkdGhzRGljdGlvbmFyeTogYW55O1xuXG4gICAgcHJpdmF0ZSBfa2V5czogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBfa2V5c0FyZVZhbGlkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfY291bnRlcjogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgcHJpdmF0ZSBfY29udGV4dDogYW55O1xuXG4gICAgY29uc3RydWN0b3IoY29sdW1uQ291bnQ6IG51bWJlciwgY29sdW1uV2lkdGg6IG51bWJlciwgY29sdW1uV2lkdGhzTGlzdDogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5fZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICB0aGlzLl93aWR0aHNEaWN0aW9uYXJ5ID0ge307XG4gICAgICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xuICAgICAgICB0aGlzLmRpcnR5S2V5Q29sbGVjdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjb2x1bW5Db3VudCk7XG5cbiAgICAgICAgaWYgKGNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMuZmlsbChjb2x1bW5XaWR0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSBjb2x1bW5XaWR0aHNMaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJpbmdzQ291bnQgPSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uV2lkdGhzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uV2lkdGhzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlVmFsdWUodmFsdWU6IGFueSwgaXNIZWFkZXI6IGJvb2xlYW4sIHNob3VsZFNhbml0aXplVmFsdWUgPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHNhbml0aXplZFZhbHVlID0gJyc7XG4gICAgICAgIGNvbnN0IGlzRGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcbiAgICAgICAgY29uc3QgaXNTYXZlZEFzU3RyaW5nID0gaXNIZWFkZXIgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgJiYgdmFsdWUgIT09IE51bWJlcih2YWx1ZSkgJiYgIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgJiYgIWlzRGF0ZSk7XG5cbiAgICAgICAgaWYgKGlzU2F2ZWRBc1N0cmluZykge1xuICAgICAgICAgICAgc2FuaXRpemVkVmFsdWUgPSBzaG91bGRTYW5pdGl6ZVZhbHVlID8gRXhwb3J0VXRpbGl0aWVzLnNhbml0aXplVmFsdWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kaWN0aW9uYXJ5W3Nhbml0aXplZFZhbHVlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGljdGlvbmFyeVtzYW5pdGl6ZWRWYWx1ZV0gPSB0aGlzLl9jb3VudGVyKys7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eUtleUNvbGxlY3Rpb25zKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RyaW5nc0NvdW50ICsrO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5oYXNEYXRlVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFzTnVtYmVyVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1NhdmVkQXNTdHJpbmcgPyB0aGlzLmdldFNhbml0aXplZFZhbHVlKHNhbml0aXplZFZhbHVlKSA6IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2FuaXRpemVkVmFsdWUoRXhwb3J0VXRpbGl0aWVzLnNhbml0aXplVmFsdWUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2FuaXRpemVkVmFsdWUoc2FuaXRpemVkVmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5W3Nhbml0aXplZFZhbHVlXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghdGhpcy5fa2V5c0FyZVZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlzID0gT2JqZWN0LmtleXModGhpcy5fZGljdGlvbmFyeSk7XG4gICAgICAgICAgICB0aGlzLl9rZXlzQXJlVmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUZXh0V2lkdGgodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl93aWR0aHNEaWN0aW9uYXJ5W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBtZXRyaWNzID0gY29udGV4dC5tZWFzdXJlVGV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl93aWR0aHNEaWN0aW9uYXJ5W3ZhbHVlXSA9IG1ldHJpY3Mud2lkdGggKyBXb3Jrc2hlZXREYXRhRGljdGlvbmFyeS5URVhUX1BBRERJTkc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGhzRGljdGlvbmFyeVt2YWx1ZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250ZXh0KCk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5fY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZ2xvYmFsVGhpcy5kb2N1bWVudD8uY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LmZvbnQgPSBXb3Jrc2hlZXREYXRhRGljdGlvbmFyeS5ERUZBVUxUX0ZPTlQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpcnR5S2V5Q29sbGVjdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleXNBcmVWYWxpZCA9IGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==