@fundamental-ngx/core 0.44.0-rc.2 → 0.44.0-rc.4

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 (203) hide show
  1. package/avatar/avatar.component.d.ts +0 -1
  2. package/bar/directives/bar-element.directive.d.ts +6 -3
  3. package/breadcrumb/breadcrumb.component.d.ts +4 -4
  4. package/carousel/carousel.component.d.ts +8 -2
  5. package/content-density/providers/content-density-observer-providers.d.ts +1 -1
  6. package/content-density/services/content-density-observer.service.d.ts +3 -3
  7. package/date-picker/date-picker.component.d.ts +30 -9
  8. package/datetime-picker/datetime-picker.component.d.ts +28 -10
  9. package/dialog/dialog-container/dialog-container.component.d.ts +4 -4
  10. package/dialog/dialog-footer-button/dialog-footer-button.component.d.ts +2 -0
  11. package/dialog/directives/dialog-decisive-button.directive.d.ts +2 -0
  12. package/dialog/utils/dialog-config.class.d.ts +1 -1
  13. package/esm2022/action-bar/action-bar.component.mjs +10 -3
  14. package/esm2022/alert/alert-service/alert.service.mjs +12 -3
  15. package/esm2022/alert/alert-utils/alert-config.mjs +11 -3
  16. package/esm2022/alert/alert-utils/alert-container.component.mjs +11 -3
  17. package/esm2022/alert/alert-utils/alert-ref.mjs +11 -3
  18. package/esm2022/alert/alert.component.mjs +17 -3
  19. package/esm2022/alert/alert.module.mjs +11 -3
  20. package/esm2022/avatar/avatar.component.mjs +2 -2
  21. package/esm2022/bar/directives/bar-element.directive.mjs +15 -7
  22. package/esm2022/breadcrumb/breadcrumb.component.mjs +9 -11
  23. package/esm2022/carousel/carousel.component.mjs +34 -5
  24. package/esm2022/combobox/combobox-mobile/combobox-mobile.component.mjs +1 -1
  25. package/esm2022/content-density/providers/content-density-observer-providers.mjs +4 -4
  26. package/esm2022/content-density/services/content-density-observer.service.mjs +13 -13
  27. package/esm2022/date-picker/date-picker.component.mjs +103 -10
  28. package/esm2022/datetime-picker/datetime-picker.component.mjs +78 -8
  29. package/esm2022/dialog/dialog-container/dialog-container.component.mjs +12 -13
  30. package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +8 -3
  31. package/esm2022/dialog/dialog-header/dialog-header.component.mjs +1 -1
  32. package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +6 -2
  33. package/esm2022/dialog/utils/dialog-config.class.mjs +1 -1
  34. package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +23 -1
  35. package/esm2022/form/form-label/form-label.component.mjs +21 -5
  36. package/esm2022/list/list-item/list-item.component.mjs +36 -1
  37. package/esm2022/menu/menu-mobile/menu-mobile.component.mjs +1 -1
  38. package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +6 -2
  39. package/esm2022/message-box/message-box-container/message-box-container.component.mjs +12 -15
  40. package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +8 -3
  41. package/esm2022/message-box/message-box-header/message-box-header.component.mjs +1 -1
  42. package/esm2022/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.mjs +8 -9
  43. package/esm2022/message-strip/auto-dismiss-message-strip.directive.mjs +10 -9
  44. package/esm2022/message-strip/message-strip.component.mjs +12 -1
  45. package/esm2022/multi-combobox/base-multi-combobox.class.mjs +17 -14
  46. package/esm2022/multi-combobox/mobile/mobile-multi-combobox.component.mjs +1 -1
  47. package/esm2022/multi-combobox/multi-combobox.component.mjs +44 -45
  48. package/esm2022/multi-combobox/select-all-toggler/select-all-toggler.component.mjs +8 -10
  49. package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  50. package/esm2022/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +9 -11
  51. package/esm2022/pagination/pagination.component.mjs +140 -2
  52. package/esm2022/popover/base/base-popover.class.mjs +25 -1
  53. package/esm2022/popover/popover.component.mjs +28 -17
  54. package/esm2022/product-switch/product-switch/product-switch.component.mjs +11 -1
  55. package/esm2022/quick-view/quick-view-title/quick-view-title.component.mjs +1 -1
  56. package/esm2022/segmented-button/segmented-button.component.mjs +19 -21
  57. package/esm2022/select/select.component.mjs +17 -10
  58. package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +12 -1
  59. package/esm2022/shellbar/shellbar.component.mjs +12 -11
  60. package/esm2022/side-navigation/side-navigation.component.mjs +12 -3
  61. package/esm2022/slider/slider.component.mjs +83 -13
  62. package/esm2022/split-button/split-button.component.mjs +34 -16
  63. package/esm2022/splitter/splitter-pagination/splitter-pagination.component.mjs +9 -2
  64. package/esm2022/splitter/splitter.component.mjs +16 -5
  65. package/esm2022/step-input/step-input.component.mjs +46 -24
  66. package/esm2022/switch/switch.component.mjs +25 -3
  67. package/esm2022/table/directives/table-cell.directive.mjs +5 -7
  68. package/esm2022/table/directives/table-row.directive.mjs +17 -20
  69. package/esm2022/table/table.component.mjs +10 -9
  70. package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +11 -1
  71. package/esm2022/tabs/tab-list.component.mjs +40 -31
  72. package/esm2022/text/text.component.mjs +23 -1
  73. package/esm2022/time/i18n/time-i18n.mjs +2 -2
  74. package/esm2022/token/token.component.mjs +36 -14
  75. package/esm2022/toolbar/toolbar.component.mjs +33 -26
  76. package/esm2022/tree/components/tree-item/tree-item.component.mjs +21 -21
  77. package/esm2022/tree/tree.component.mjs +23 -22
  78. package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +67 -1
  79. package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +12 -1
  80. package/feed-list-item/components/item/feed-list-item.component.d.ts +8 -2
  81. package/fesm2022/fundamental-ngx-core-action-bar.mjs +9 -2
  82. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-alert.mjs +58 -13
  84. package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-avatar.mjs +1 -1
  86. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-bar.mjs +14 -6
  88. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +9 -10
  90. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-carousel.mjs +32 -3
  92. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  94. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-content-density.mjs +15 -14
  96. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-date-picker.mjs +102 -9
  98. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +77 -7
  100. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-dialog.mjs +23 -13
  102. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +22 -0
  104. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-form.mjs +20 -4
  106. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-list.mjs +35 -0
  108. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-menu.mjs +1 -1
  110. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-message-box.mjs +24 -15
  112. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-message-strip.mjs +27 -14
  114. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +63 -64
  116. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  118. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +9 -10
  120. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-pagination.mjs +139 -1
  122. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-popover.mjs +51 -16
  124. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-product-switch.mjs +10 -0
  126. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-quick-view.mjs +1 -1
  128. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  129. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +17 -19
  130. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  131. package/fesm2022/fundamental-ngx-core-select.mjs +16 -9
  132. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  133. package/fesm2022/fundamental-ngx-core-shellbar.mjs +22 -10
  134. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  135. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +11 -2
  136. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  137. package/fesm2022/fundamental-ngx-core-slider.mjs +82 -12
  138. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  139. package/fesm2022/fundamental-ngx-core-split-button.mjs +32 -13
  140. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-splitter.mjs +23 -5
  142. package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-step-input.mjs +45 -23
  144. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-switch.mjs +24 -2
  146. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  147. package/fesm2022/fundamental-ngx-core-table.mjs +26 -30
  148. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-tabs.mjs +51 -31
  150. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-text.mjs +22 -0
  152. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-time.mjs +1 -1
  154. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-token.mjs +36 -13
  156. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-toolbar.mjs +31 -24
  158. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-tree.mjs +38 -38
  160. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +77 -0
  162. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  163. package/form/form-label/form-label.component.d.ts +8 -2
  164. package/fundamental-ngx-core-v0.44.0-rc.4.tgz +0 -0
  165. package/list/list-item/list-item.component.d.ts +16 -4
  166. package/message-box/directives/message-box-decisive-button.directive.d.ts +2 -0
  167. package/message-box/message-box-container/message-box-container.component.d.ts +4 -6
  168. package/message-box/message-box-footer-button/message-box-footer-button.component.d.ts +2 -0
  169. package/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.d.ts +1 -1
  170. package/message-strip/auto-dismiss-message-strip.directive.d.ts +3 -3
  171. package/message-strip/message-strip.component.d.ts +4 -1
  172. package/multi-combobox/base-multi-combobox.class.d.ts +30 -30
  173. package/multi-combobox/multi-combobox.component.d.ts +17 -18
  174. package/multi-combobox/select-all-toggler/select-all-toggler.component.d.ts +1 -1
  175. package/overflow-layout/directives/overflow-layout-popover-content.directive.d.ts +5 -6
  176. package/package.json +3 -3
  177. package/pagination/pagination.component.d.ts +44 -11
  178. package/popover/base/base-popover.class.d.ts +12 -3
  179. package/popover/popover.component.d.ts +8 -5
  180. package/product-switch/product-switch/product-switch.component.d.ts +4 -1
  181. package/schematics/add-dependencies/index.js +4 -4
  182. package/segmented-button/segmented-button.component.d.ts +6 -7
  183. package/select/select.component.d.ts +9 -6
  184. package/shellbar/shellbar-actions/shellbar-actions.component.d.ts +6 -3
  185. package/shellbar/shellbar.component.d.ts +1 -1
  186. package/slider/slider.component.d.ts +13 -4
  187. package/split-button/split-button.component.d.ts +11 -6
  188. package/splitter/splitter.component.d.ts +5 -2
  189. package/step-input/step-input.component.d.ts +12 -6
  190. package/switch/switch.component.d.ts +10 -4
  191. package/table/directives/table-row.directive.d.ts +2 -4
  192. package/table/table.component.d.ts +3 -4
  193. package/tabs/tab-item-expand/tab-item-expand.component.d.ts +4 -1
  194. package/tabs/tab-list.component.d.ts +10 -8
  195. package/text/text.component.d.ts +8 -2
  196. package/time/i18n/time-i18n.d.ts +2 -2
  197. package/token/token.component.d.ts +13 -7
  198. package/toolbar/toolbar.component.d.ts +10 -7
  199. package/tree/components/tree-item/tree-item.component.d.ts +28 -28
  200. package/tree/tree.component.d.ts +7 -7
  201. package/upload-collection/upload-collection-button-group/upload-collection-button-group.component.d.ts +24 -6
  202. package/upload-collection/upload-collection-form-item/upload-collection-form-item.component.d.ts +6 -3
  203. package/fundamental-ngx-core-v0.44.0-rc.2.tgz +0 -0
@@ -1,11 +1,12 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, forwardRef, Inject, Input, NgZone, Optional, QueryList, SkipSelf, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, DestroyRef, ElementRef, forwardRef, Inject, Input, NgZone, Optional, QueryList, SkipSelf, ViewChild, ViewEncapsulation } from '@angular/core';
3
3
  import { DYNAMIC_PAGE_HEADER_TOKEN } from '@fundamental-ngx/core/shared';
4
- import { applyCssClass, DestroyedService, OVERFLOW_PRIORITY_SCORE, ResizeObserverService } from '@fundamental-ngx/cdk/utils';
5
- import { BehaviorSubject, combineLatest, map, startWith, takeUntil } from 'rxjs';
4
+ import { applyCssClass, OVERFLOW_PRIORITY_SCORE, ResizeObserverService } from '@fundamental-ngx/cdk/utils';
5
+ import { BehaviorSubject, combineLatest, map, startWith } from 'rxjs';
6
6
  import { TitleToken } from '@fundamental-ngx/core/title';
7
7
  import { ContentDensityMode, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
8
8
  import { ToolbarItem } from './abstract-toolbar-item.class';
9
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@fundamental-ngx/core/content-density";
11
12
  import * as i2 from "@fundamental-ngx/cdk/utils";
@@ -28,6 +29,14 @@ export class ToolbarComponent {
28
29
  get shouldOverflow() {
29
30
  return this._shouldOverflow;
30
31
  }
32
+ /** @deprecated */
33
+ set hasTitle(value) {
34
+ console.warn('Property hasTitle is deprecated. ');
35
+ this._hasTitle = value;
36
+ }
37
+ get hasTitle() {
38
+ return this._hasTitle;
39
+ }
31
40
  /** @hidden */
32
41
  set titleComponent(title) {
33
42
  this._titleComponent$.next(title);
@@ -40,10 +49,10 @@ export class ToolbarComponent {
40
49
  return this.toolbar.nativeElement.clientWidth - OVERFLOW_SPACE;
41
50
  }
42
51
  /** @hidden */
43
- constructor(_cd, _contentDensityObserver, _destroy$, resizeObserverService, ngZone, _dynamicPageHeader) {
52
+ constructor(_cd, _contentDensityObserver, _destroyRef, resizeObserverService, ngZone, _dynamicPageHeader) {
44
53
  this._cd = _cd;
45
54
  this._contentDensityObserver = _contentDensityObserver;
46
- this._destroy$ = _destroy$;
55
+ this._destroyRef = _destroyRef;
47
56
  this.resizeObserverService = resizeObserverService;
48
57
  this.ngZone = ngZone;
49
58
  this._dynamicPageHeader = _dynamicPageHeader;
@@ -52,8 +61,6 @@ export class ToolbarComponent {
52
61
  * Default value: 'solid'
53
62
  */
54
63
  this.fdType = 'solid';
55
- /** @deprecated */
56
- this.hasTitle = false;
57
64
  /** Determines if toolbar should has active state (only when fdType == 'info')
58
65
  * Default value: false
59
66
  */
@@ -69,6 +76,8 @@ export class ToolbarComponent {
69
76
  /** @hidden */
70
77
  this.overflownItems = [];
71
78
  /** @hidden */
79
+ this._hasTitle = false;
80
+ /** @hidden */
72
81
  this._titleComponent$ = new BehaviorSubject(null);
73
82
  /** @hidden */
74
83
  this._refreshOverflow$ = new BehaviorSubject(undefined);
@@ -81,6 +90,17 @@ export class ToolbarComponent {
81
90
  _contentDensityObserver.subscribe();
82
91
  }
83
92
  /** @hidden */
93
+ buildComponentCssClass() {
94
+ return [
95
+ 'fd-toolbar',
96
+ `fd-toolbar--${this.fdType}`,
97
+ `${this.active && this.fdType === 'info' ? 'fd-toolbar--active' : ''}`,
98
+ `${this.hasTitle || this.title || this.titleComponent ? 'fd-toolbar--title' : ''}`,
99
+ `${this.clearBorder ? 'fd-toolbar--clear' : ''}`,
100
+ `${this._dynamicPageHeader ? 'fd-dynamic-page__toolbar' : ''}`
101
+ ];
102
+ }
103
+ /** @hidden */
84
104
  ngAfterViewInit() {
85
105
  this.overflowItems$ = combineLatest([
86
106
  this.resizeObserverService.observe(this.toolbar.nativeElement).pipe(map(() => this._toolbarWidth)),
@@ -129,7 +149,7 @@ export class ToolbarComponent {
129
149
  return overflowItems.sort((a, b) => this._sortPriorities(a.priority, b.priority));
130
150
  }
131
151
  return [];
132
- }), takeUntil(this._destroy$));
152
+ }), takeUntilDestroyed(this._destroyRef));
133
153
  this.overflowItems$.subscribe((items) => {
134
154
  this.overflownItems = items;
135
155
  this._cd.detectChanges();
@@ -156,17 +176,6 @@ export class ToolbarComponent {
156
176
  get elementRef() {
157
177
  return this.toolbar;
158
178
  }
159
- /** @hidden */
160
- buildComponentCssClass() {
161
- return [
162
- 'fd-toolbar',
163
- `fd-toolbar--${this.fdType}`,
164
- `${this.active && this.fdType === 'info' ? 'fd-toolbar--active' : ''}`,
165
- `${this.hasTitle || this.title || this.titleComponent ? 'fd-toolbar--title' : ''}`,
166
- `${this.clearBorder ? 'fd-toolbar--clear' : ''}`,
167
- `${this._dynamicPageHeader ? 'fd-dynamic-page__toolbar' : ''}`
168
- ];
169
- }
170
179
  /** Method triggering collapsible toolbar */
171
180
  updateCollapsibleItems() {
172
181
  this._refreshOverflow$.next();
@@ -276,12 +285,11 @@ export class ToolbarComponent {
276
285
  .sort((a, b) => b.maxPriority - a.maxPriority || a.minIndex - b.minIndex)
277
286
  .reduce((arr, i) => arr.concat(i.group), []);
278
287
  }
279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }, { token: i2.DestroyedService }, { token: i2.ResizeObserverService }, { token: i0.NgZone }, { token: DYNAMIC_PAGE_HEADER_TOKEN, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
288
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }, { token: i0.DestroyRef }, { token: i2.ResizeObserverService }, { token: i0.NgZone }, { token: DYNAMIC_PAGE_HEADER_TOKEN, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
280
289
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: ToolbarComponent, selector: "fd-toolbar", inputs: { titleId: "titleId", class: "class", shouldOverflow: "shouldOverflow", fdType: "fdType", hasTitle: "hasTitle", title: "title", active: "active", clearBorder: "clearBorder", forceOverflow: "forceOverflow", tabindex: "tabindex" }, providers: [
281
290
  contentDensityObserverProviders({
282
291
  defaultContentDensity: ContentDensityMode.COMPACT
283
- }),
284
- DestroyedService
292
+ })
285
293
  ], queries: [{ propertyName: "titleComponent", first: true, predicate: TitleToken, descendants: true }, { propertyName: "toolbarItems", predicate: i0.forwardRef(function () { return ToolbarItem; }) }], viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "titleElement", first: true, predicate: ["titleElement"], descendants: true }], ngImport: i0, template: "<div #toolbar [tabindex]=\"tabindex\" [class.fd-toolbar--cozy]=\"_contentDensityObserver.isCozy$ | async\">\n <h4 *ngIf=\"title\" class=\"fd-title fd-title--h4 fd-toolbar__title\" [id]=\"titleId\" #titleElement>{{ title }}</h4>\n\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"overflownItems.length > 0\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fd-popover placement=\"bottom-end\" [noArrow]=\"true\" class=\"fd-popover\">\n <fd-popover-control>\n <button\n fd-button\n title=\"More\"\n aria-label=\"More\"\n aria-haspopup=\"true\"\n fdType=\"transparent\"\n glyph=\"overflow\"\n ></button>\n </fd-popover-control>\n\n <fd-popover-body>\n <div class=\"fd-toolbar__overflow\">\n <ng-container *ngFor=\"let overflowedItem of overflownItems\">\n <fdk-dynamic-portal\n [domElement]=\"overflowedItem.element\"\n [style.display]=\"overflowedItem.priority === 'disappear' ? 'none' : 'flex'\"\n [style.flex-direction]=\"overflowedItem.priority === 'disappear' ? undefined : 'column'\"\n >\n </fdk-dynamic-portal>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-container>\n</div>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:.5rem}.fd-toolbar>*~[dir=rtl]:not(.fd-toolbar__spacer),[dir=rtl] .fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:0;margin-right:.5rem}.fd-toolbar{-webkit-box-sizing:border-box;align-items:center;border:0;border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0 .5rem}.fd-toolbar:after,.fd-toolbar:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>.fd-toolbar__spacer+:not(.fd-toolbar__spacer){margin-left:0;margin-right:0}.fd-toolbar--title{background-color:var(--sapGroup_TitleBackground)!important;height:2.75rem;padding:0 .5rem 0 1rem}.fd-toolbar--clear{border-bottom:none}.fd-toolbar--auto{background-color:var(--fdToolbar_Auto_Background)}.fd-toolbar--solid{background-color:var(--fdToolbar_Solid_Background)}.fd-toolbar--transparent{background-color:var(--sapToolbar_Background)}.fd-toolbar--fade-in{-webkit-transition:visibility 0s linear 0s,opacity 1s;opacity:1;transition:visibility 0s linear 0s,opacity 1s;visibility:visible}.fd-toolbar--fade-out{-webkit-transition:visibility 0s linear 1s,opacity 1ms;opacity:0;transition:visibility 0s linear 1s,opacity 1ms;visibility:hidden}.fd-toolbar--info{background-color:var(--sapInfobar_NonInteractive_Background);color:var(--sapList_TextColor);outline:none;padding-left:.5rem;padding-right:1rem;position:relative}.fd-toolbar--info.fd-toolbar--active{background-color:var(--sapInfobar_Background);color:var(--sapInfobar_TextColor)}.fd-toolbar--info.fd-toolbar--active.is-hover,.fd-toolbar--info.fd-toolbar--active:hover{background-color:var(--sapInfobar_Hover_Background)}.fd-toolbar--info.fd-toolbar--active.is-active,.fd-toolbar--info.fd-toolbar--active:active{background-color:var(--sapInfobar_Active_Background)}.fd-toolbar--info[dir=rtl],[dir=rtl] .fd-toolbar--info{padding-left:1rem;padding-right:.5rem}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--sapContent_FocusColor);border-style:var(--sapContent_FocusStyle);border-width:var(--sapContent_FocusWidth);content:\"\";inset:.0625rem;pointer-events:none;position:absolute}.fd-toolbar--info.is-focus,.fd-toolbar--info:focus{z-index:5}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--fdToolbar_Info_Outline_Color)}.fd-toolbar--info [class*=sap-icon]{color:var(--sapInfobar_TextColor);font-size:1rem;height:1rem;line-height:1rem}.fd-toolbar__spacer{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 auto;border:0;box-sizing:border-box;color:var(--sapTextColor);flex:1 auto;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-toolbar__spacer:after,.fd-toolbar__spacer:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__spacer--fixed{-webkit-box-flex:0;-ms-flex:none;display:inline-block;flex:none}.fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0;width:.0625rem}.fd-toolbar__separator:after,.fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;max-height:50vh;max-width:20rem;overflow:auto;padding:.1875rem .375rem}.fd-toolbar__overflow:after,.fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-button{justify-content:flex-start;margin:.1875rem 0;text-align:left;width:auto}.fd-toolbar__overflow .fd-toolbar__overflow-button[dir=rtl],[dir=rtl] .fd-toolbar__overflow .fd-toolbar__overflow-button{text-align:right}.fd-toolbar__overflow .fd-toolbar__overflow-button--menu{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:flex;justify-content:center;justify-content:space-between;max-width:100%}.fd-toolbar__overflow .fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:.0625rem;line-height:var(--sapContent_LineHeight);margin:.1875rem;padding:0;width:auto}.fd-toolbar__overflow .fd-toolbar__separator:after,.fd-toolbar__overflow .fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label,.fd-toolbar__overflow .fd-toolbar__overflow-label{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-toolbar__overflow .fd-toolbar__overflow-form-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-form-label:before,.fd-toolbar__overflow .fd-toolbar__overflow-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-label:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label--text,.fd-toolbar__overflow .fd-toolbar__overflow-label--text{margin-top:.4375rem}.fd-toolbar__title{color:var(--sapGroup_TitleTextColor);font-size:var(--sapGroup_Title_FontSize)}.fd-toolbar--cozy{height:2.75rem;min-height:2.75rem}.fd-toolbar--cozy.fd-toolbar--info{height:2rem;min-height:2rem}.fd-toolbar--cozy .fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:.25rem .5rem}.fd-toolbar--cozy .fd-toolbar__overflow:after,.fd-toolbar--cozy .fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>*{flex-shrink:0}fdk-dynamic-portal:not(:last-of-type) [fd-toolbar-item]{margin-bottom:.25rem}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i2.DynamicPortalComponent, selector: "fdk-dynamic-portal", inputs: ["domElement", "component", "template"] }, { kind: "directive", type: i6.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i7.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
286
294
  }
287
295
  __decorate([
@@ -295,10 +303,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
295
303
  args: [{ selector: 'fd-toolbar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
296
304
  contentDensityObserverProviders({
297
305
  defaultContentDensity: ContentDensityMode.COMPACT
298
- }),
299
- DestroyedService
306
+ })
300
307
  ], template: "<div #toolbar [tabindex]=\"tabindex\" [class.fd-toolbar--cozy]=\"_contentDensityObserver.isCozy$ | async\">\n <h4 *ngIf=\"title\" class=\"fd-title fd-title--h4 fd-toolbar__title\" [id]=\"titleId\" #titleElement>{{ title }}</h4>\n\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"overflownItems.length > 0\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fd-popover placement=\"bottom-end\" [noArrow]=\"true\" class=\"fd-popover\">\n <fd-popover-control>\n <button\n fd-button\n title=\"More\"\n aria-label=\"More\"\n aria-haspopup=\"true\"\n fdType=\"transparent\"\n glyph=\"overflow\"\n ></button>\n </fd-popover-control>\n\n <fd-popover-body>\n <div class=\"fd-toolbar__overflow\">\n <ng-container *ngFor=\"let overflowedItem of overflownItems\">\n <fdk-dynamic-portal\n [domElement]=\"overflowedItem.element\"\n [style.display]=\"overflowedItem.priority === 'disappear' ? 'none' : 'flex'\"\n [style.flex-direction]=\"overflowedItem.priority === 'disappear' ? undefined : 'column'\"\n >\n </fdk-dynamic-portal>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-container>\n</div>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:.5rem}.fd-toolbar>*~[dir=rtl]:not(.fd-toolbar__spacer),[dir=rtl] .fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:0;margin-right:.5rem}.fd-toolbar{-webkit-box-sizing:border-box;align-items:center;border:0;border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0 .5rem}.fd-toolbar:after,.fd-toolbar:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>.fd-toolbar__spacer+:not(.fd-toolbar__spacer){margin-left:0;margin-right:0}.fd-toolbar--title{background-color:var(--sapGroup_TitleBackground)!important;height:2.75rem;padding:0 .5rem 0 1rem}.fd-toolbar--clear{border-bottom:none}.fd-toolbar--auto{background-color:var(--fdToolbar_Auto_Background)}.fd-toolbar--solid{background-color:var(--fdToolbar_Solid_Background)}.fd-toolbar--transparent{background-color:var(--sapToolbar_Background)}.fd-toolbar--fade-in{-webkit-transition:visibility 0s linear 0s,opacity 1s;opacity:1;transition:visibility 0s linear 0s,opacity 1s;visibility:visible}.fd-toolbar--fade-out{-webkit-transition:visibility 0s linear 1s,opacity 1ms;opacity:0;transition:visibility 0s linear 1s,opacity 1ms;visibility:hidden}.fd-toolbar--info{background-color:var(--sapInfobar_NonInteractive_Background);color:var(--sapList_TextColor);outline:none;padding-left:.5rem;padding-right:1rem;position:relative}.fd-toolbar--info.fd-toolbar--active{background-color:var(--sapInfobar_Background);color:var(--sapInfobar_TextColor)}.fd-toolbar--info.fd-toolbar--active.is-hover,.fd-toolbar--info.fd-toolbar--active:hover{background-color:var(--sapInfobar_Hover_Background)}.fd-toolbar--info.fd-toolbar--active.is-active,.fd-toolbar--info.fd-toolbar--active:active{background-color:var(--sapInfobar_Active_Background)}.fd-toolbar--info[dir=rtl],[dir=rtl] .fd-toolbar--info{padding-left:1rem;padding-right:.5rem}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--sapContent_FocusColor);border-style:var(--sapContent_FocusStyle);border-width:var(--sapContent_FocusWidth);content:\"\";inset:.0625rem;pointer-events:none;position:absolute}.fd-toolbar--info.is-focus,.fd-toolbar--info:focus{z-index:5}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--fdToolbar_Info_Outline_Color)}.fd-toolbar--info [class*=sap-icon]{color:var(--sapInfobar_TextColor);font-size:1rem;height:1rem;line-height:1rem}.fd-toolbar__spacer{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 auto;border:0;box-sizing:border-box;color:var(--sapTextColor);flex:1 auto;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-toolbar__spacer:after,.fd-toolbar__spacer:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__spacer--fixed{-webkit-box-flex:0;-ms-flex:none;display:inline-block;flex:none}.fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0;width:.0625rem}.fd-toolbar__separator:after,.fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;max-height:50vh;max-width:20rem;overflow:auto;padding:.1875rem .375rem}.fd-toolbar__overflow:after,.fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-button{justify-content:flex-start;margin:.1875rem 0;text-align:left;width:auto}.fd-toolbar__overflow .fd-toolbar__overflow-button[dir=rtl],[dir=rtl] .fd-toolbar__overflow .fd-toolbar__overflow-button{text-align:right}.fd-toolbar__overflow .fd-toolbar__overflow-button--menu{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:flex;justify-content:center;justify-content:space-between;max-width:100%}.fd-toolbar__overflow .fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:.0625rem;line-height:var(--sapContent_LineHeight);margin:.1875rem;padding:0;width:auto}.fd-toolbar__overflow .fd-toolbar__separator:after,.fd-toolbar__overflow .fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label,.fd-toolbar__overflow .fd-toolbar__overflow-label{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-toolbar__overflow .fd-toolbar__overflow-form-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-form-label:before,.fd-toolbar__overflow .fd-toolbar__overflow-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-label:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label--text,.fd-toolbar__overflow .fd-toolbar__overflow-label--text{margin-top:.4375rem}.fd-toolbar__title{color:var(--sapGroup_TitleTextColor);font-size:var(--sapGroup_Title_FontSize)}.fd-toolbar--cozy{height:2.75rem;min-height:2.75rem}.fd-toolbar--cozy.fd-toolbar--info{height:2rem;min-height:2rem}.fd-toolbar--cozy .fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:.25rem .5rem}.fd-toolbar--cozy .fd-toolbar__overflow:after,.fd-toolbar--cozy .fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>*{flex-shrink:0}fdk-dynamic-portal:not(:last-of-type) [fd-toolbar-item]{margin-bottom:.25rem}\n"] }]
301
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ContentDensityObserver }, { type: i2.DestroyedService }, { type: i2.ResizeObserverService }, { type: i0.NgZone }, { type: undefined, decorators: [{
308
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ContentDensityObserver }, { type: i0.DestroyRef }, { type: i2.ResizeObserverService }, { type: i0.NgZone }, { type: undefined, decorators: [{
302
309
  type: Optional
303
310
  }, {
304
311
  type: SkipSelf
@@ -338,4 +345,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
338
345
  type: ContentChild,
339
346
  args: [TitleToken]
340
347
  }], buildComponentCssClass: [] } });
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBSUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFxQixNQUFNLDhCQUE4QixDQUFDO0FBRTVGLE9BQU8sRUFDSCxhQUFhLEVBRWIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixxQkFBcUIsRUFDeEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUNILGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsK0JBQStCLEVBQ2xDLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFFNUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sY0FBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxD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RkFoT1EsZ0JBQWdCO2tCQWI1QixTQUFTOytCQUNJLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUCwrQkFBK0IsQ0FBQzs0QkFDNUIscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsT0FBTzt5QkFDcEQsQ0FBQzt3QkFDRixnQkFBZ0I7cUJBQ25COzswQkFvSEksUUFBUTs7MEJBQUksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUI7NENBN0c3RCxPQUFPO3NCQUROLEtBQUs7Z0JBTU4sS0FBSztzQkFESixLQUFLO2dCQU9GLGNBQWM7c0JBRGpCLEtBQUs7Z0JBZU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sU0FBUzt1QkFBQyxTQUFTO2dCQUtwQixZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYztnQkFLekIsWUFBWTtzQkFEWCxlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7Z0JBSzFDLGNBQWM7c0JBRGpCLFlBQVk7dUJBQUMsVUFBVTtnQkErSXhCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERZTkFNSUNfUEFHRV9IRUFERVJfVE9LRU4sIER5bmFtaWNQYWdlSGVhZGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlDc3NDbGFzcyxcbiAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgRGVzdHJveWVkU2VydmljZSxcbiAgICBPVkVSRkxPV19QUklPUklUWV9TQ09SRSxcbiAgICBPdmVyZmxvd1ByaW9yaXR5LFxuICAgIFJlc2l6ZU9ic2VydmVyU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRpdGxlVG9rZW4gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgVG9vbGJhckl0ZW0gfSBmcm9tICcuL2Fic3RyYWN0LXRvb2xiYXItaXRlbS5jbGFzcyc7XG5cbmNvbnN0IEVMRU1FTlRfTUFSR0lOID0gODtcbmNvbnN0IE9WRVJGTE9XX1NQQUNFID0gNTAgKyAyICogRUxFTUVOVF9NQVJHSU47XG5jb25zdCBNQVhfQ09OVEVOVF9TSVpFID0gOTk5OTk5OTk7XG5cbmV4cG9ydCB0eXBlIFRvb2xiYXJUeXBlID0gJ3NvbGlkJyB8ICd0cmFuc3BhcmVudCcgfCAnYXV0bycgfCAnaW5mbyc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIE92ZXJmbG93UHJpb3JpdHlFbnVtIHtcbiAgICBBTFdBWVMgPSAnYWx3YXlzJyxcbiAgICBORVZFUiA9ICduZXZlcicsXG4gICAgTE9XID0gJ2xvdycsXG4gICAgSElHSCA9ICdoaWdoJyxcbiAgICBESVNBUFBFQVIgPSAnZGlzYXBwZWFyJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRvb2xiYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyh7XG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNUXG4gICAgICAgIH0pLFxuICAgICAgICBEZXN0cm95ZWRTZXJ2aWNlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ3NzQ2xhc3NCdWlsZGVyLCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHRvb2xiYXIgdGl0bGVcbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGVJZDogc3RyaW5nO1xuXG4gICAgLyoqIFByb3BlcnR5IGFsbG93cyB1c2VyIHRvIHBhc3MgYWRkaXRpb25hbCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIG92ZXJmbG93IGJ1dHRvbiBzaG91bGQgYmUgdmlzaWJsZVxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2hvdWxkT3ZlcmZsb3codmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZE92ZXJmbG93ID0gdmFsO1xuICAgICAgICB0aGlzLnNob3VsZE92ZXJmbG93JC5uZXh0KHZhbCk7XG4gICAgfVxuXG4gICAgZ2V0IHNob3VsZE92ZXJmbG93KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvdWxkT3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgdGhlIHR5cGUgb2YgdG9vbGJhclxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zOiAnc29saWQnIHwgJ3RyYW5zcGFyZW50JyB8ICdhdXRvJyB8ICdpbmZvJ1xuICAgICAqIERlZmF1bHQgdmFsdWU6ICdzb2xpZCdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZkVHlwZTogVG9vbGJhclR5cGUgPSAnc29saWQnO1xuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzVGl0bGUgPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgdGl0bGUgZm9yIHRoZSB0b29sYmFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGhhcyBhY3RpdmUgc3RhdGUgKG9ubHkgd2hlbiBmZFR5cGUgPT0gJ2luZm8nKVxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmUgPSBmYWxzZTtcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGNsZWFyIGJvcmRlciBib3R0b21cbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xlYXJCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGFsbCBpdGVtcyBzaG91bGQgYmUgaW5zaWRlIG92ZXJmbG93ICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZU92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFiaW5kZXggb2YgdGhlIHRvb2xiYXIgZWxlbWVudCwgdG8gYmUgdXNlZCB3aGVuIGZkVHlwZT1cImluZm9cIiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiaW5kZXggPSAtMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndG9vbGJhcicpXG4gICAgdG9vbGJhcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGl0bGVFbGVtZW50JylcbiAgICB0aXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEhlYWRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IFRvb2xiYXJJdGVtKSlcbiAgICB0b29sYmFySXRlbXM6IFF1ZXJ5TGlzdDxUb29sYmFySXRlbT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGl0bGVUb2tlbilcbiAgICBzZXQgdGl0bGVDb21wb25lbnQodGl0bGU6IFRpdGxlVG9rZW4gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3RpdGxlQ29tcG9uZW50JC5uZXh0KHRpdGxlKTtcbiAgICB9XG5cbiAgICBnZXQgdGl0bGVDb21wb25lbnQoKTogVGl0bGVUb2tlbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVDb21wb25lbnQkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3ZlcmZsb3dJdGVtcyQ6IE9ic2VydmFibGU8VG9vbGJhckl0ZW1bXT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG92ZXJmbG93bkl0ZW1zOiBUb29sYmFySXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RpdGxlQ29tcG9uZW50JDogQmVoYXZpb3JTdWJqZWN0PFRpdGxlVG9rZW4gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGl0bGVUb2tlbiB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoT3ZlcmZsb3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfdG9vbGJhcldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAodGhpcy50b29sYmFyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudFdpZHRoIC0gT1ZFUkZMT1dfU1BBQ0U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG91bGRPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHNob3VsZE92ZXJmbG93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQ6IERlc3Ryb3llZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoRFlOQU1JQ19QQUdFX0hFQURFUl9UT0tFTikgcHJpdmF0ZSBfZHluYW1pY1BhZ2VIZWFkZXI/OiBEeW5hbWljUGFnZUhlYWRlclxuICAgICkge1xuICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlci5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVyZmxvd0l0ZW1zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLnRvb2xiYXIubmF0aXZlRWxlbWVudCkucGlwZShtYXAoKCkgPT4gdGhpcy5fdG9vbGJhcldpZHRoKSksXG4gICAgICAgICAgICB0aGlzLnRvb2xiYXJJdGVtcy5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMudG9vbGJhckl0ZW1zKSxcbiAgICAgICAgICAgICAgICBtYXAoKHRvb2xiYXJJdGVtcykgPT4gdG9vbGJhckl0ZW1zLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLl90aXRsZUNvbXBvbmVudCQucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHRpdGxlQ29tcG9uZW50KTogSFRNTEVsZW1lbnQgfCBudWxsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aXRsZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGl0bGVFbGVtZW50Py5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aXRsZUNvbXBvbmVudC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnNob3VsZE92ZXJmbG93JCxcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hPdmVyZmxvdyRcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW3Rvb2xiYXJXaWR0aCwgdG9vbGJhckl0ZW1zLCB0aXRsZUVsZW1lbnQsIHNob3VsZE92ZXJmbG93XSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRPdmVyZmxvdykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfc29ydGVkQnlQcmlvcml0eUFuZEdyb3VwSXRlbXMgPSB0aGlzLl9nZXRTb3J0ZWRCeVByaW9yaXR5QW5kR3JvdXBJdGVtcyh0b29sYmFySXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdmVyZmxvd0l0ZW1zOiBUb29sYmFySXRlbVtdID0gW107XG4gICAgICAgICAgICAgICAgICAgIF9zb3J0ZWRCeVByaW9yaXR5QW5kR3JvdXBJdGVtcy5yZWR1Y2UoKF9jb250ZW50V2lkdGgsIHRvb2xiYXJJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtV2lkdGggPSB0b29sYmFySXRlbS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Qcmlvcml0eSA9IHRvb2xiYXJJdGVtLnByaW9yaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkSXRlbUJlUmVtb3ZlZEJ5V2lkdGggPSBpdGVtV2lkdGggKyBfY29udGVudFdpZHRoID4gdG9vbGJhcldpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtUHJpb3JpdHkgPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLkFMV0FZUyB8fCB0aGlzLmZvcmNlT3ZlcmZsb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGROZXZlckJlSW5PdmVyZmxvdyA9IGl0ZW1Qcmlvcml0eSA9PT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uTkVWRVI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNob3VsZEl0ZW1CZVJlbW92ZWRCeVdpZHRoICYmICFzaG91bGROZXZlckJlSW5PdmVyZmxvdykgfHwgc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dJdGVtcy5wdXNoKHRvb2xiYXJJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93ID8gX2NvbnRlbnRXaWR0aCA6IE1BWF9DT05URU5UX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGVudFdpZHRoICsgaXRlbVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB0aXRsZUVsZW1lbnQ/LmNsaWVudFdpZHRoIHx8IDApO1xuICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIG9ycGhhbnNcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0b29sYmFySXRlbSBvZiBvdmVyZmxvd0l0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkQ29sbGVjdGlvbiA9IHRoaXMuX2dldEdyb3VwZWRDb2xsZWN0aW9uKHRvb2xiYXJJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkQ29sbGVjdGlvblByaW9yaXRpZXMgPSB0aGlzLl9nZXRHcm91cGVkQ29sbGVjdGlvblByaW9yaXR5KGdyb3VwZWRDb2xsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdG9vbGJhckl0ZW0uZ3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtUHJpb3JpdHkgPSB0b29sYmFySXRlbS5wcmlvcml0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cCAhPT0gMCAmJiBpdGVtUHJpb3JpdHkgIT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLkRJU0FQUEVBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zRnJvbUN1cnJlbnRHcm91cCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldEVsZW1lbnRzRnJvbUN1cnJlbnRHcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkQ29sbGVjdGlvblByaW9yaXRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21DdXJyZW50R3JvdXAuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcmZsb3dJdGVtcy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dJdGVtcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJmbG93SXRlbXMuc29ydCgoYSwgYikgPT4gdGhpcy5fc29ydFByaW9yaXRpZXMoYS5wcmlvcml0eSwgYi5wcmlvcml0eSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vdmVyZmxvd0l0ZW1zJC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm92ZXJmbG93bkl0ZW1zID0gaXRlbXM7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGVDb21wb25lbnQuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmZC10b29sYmFyX190aXRsZScpO1xuICAgICAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2hhbmdlIGRldGVjdGlvbiByZWZlcmVuY2UgKi9cbiAgICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZmQtdG9vbGJhcicsXG4gICAgICAgICAgICBgZmQtdG9vbGJhci0tJHt0aGlzLmZkVHlwZX1gLFxuICAgICAgICAgICAgYCR7dGhpcy5hY3RpdmUgJiYgdGhpcy5mZFR5cGUgPT09ICdpbmZvJyA/ICdmZC10b29sYmFyLS1hY3RpdmUnIDogJyd9YCxcbiAgICAgICAgICAgIGAke3RoaXMuaGFzVGl0bGUgfHwgdGhpcy50aXRsZSB8fCB0aGlzLnRpdGxlQ29tcG9uZW50ID8gJ2ZkLXRvb2xiYXItLXRpdGxlJyA6ICcnfWAsXG4gICAgICAgICAgICBgJHt0aGlzLmNsZWFyQm9yZGVyID8gJ2ZkLXRvb2xiYXItLWNsZWFyJyA6ICcnfWAsXG4gICAgICAgICAgICBgJHt0aGlzLl9keW5hbWljUGFnZUhlYWRlciA/ICdmZC1keW5hbWljLXBhZ2VfX3Rvb2xiYXInIDogJyd9YFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdHJpZ2dlcmluZyBjb2xsYXBzaWJsZSB0b29sYmFyICAqL1xuICAgIHVwZGF0ZUNvbGxhcHNpYmxlSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hPdmVyZmxvdyQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldCBncm91cCBudW1iZXIgd2l0aCB0aGUgbG93ZXN0IHByaW9yaXR5LlxuICAgICAqICBVc2VzIGZvciBkZXRlY3RpbmcgYSBncm91cCBvZiBlbGVtZW50cyB3aGljaCB3b3VsZCBiZSBoaWRkZW4gZnJvbSB0aGUgdG9vbGJhci5cbiAgICAgKiAgKi9cbiAgICBwcml2YXRlIF9nZXRMb3dlc3RQcmlvcml0eUZyb21Hcm91cChcbiAgICAgICAgaXRlbUdyb3VwOiBudW1iZXIsXG4gICAgICAgIGdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHk/OiBSZWNvcmQ8bnVtYmVyLCBPdmVyZmxvd1ByaW9yaXR5PlxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5ID0gZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eTtcbiAgICAgICAgaWYgKCFwcmlvcml0eSB8fCAhT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KHByaW9yaXR5W2l0ZW1Hcm91cF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbUdyb3VwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0LmtleXMocHJpb3JpdHkpO1xuXG4gICAgICAgIHJldHVybiBncm91cHMucmVkdWNlKChsb3dlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb3dlc3RHcm91cFByaW9yaXR5ID0gcHJpb3JpdHlbbG93ZXN0R3JvdXBdO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEdyb3VwUHJpb3JpdHkgPSBwcmlvcml0eVtjdXJyZW50R3JvdXBdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChjdXJyZW50R3JvdXBQcmlvcml0eSkhIDwgT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KGxvd2VzdEdyb3VwUHJpb3JpdHkpIVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICtjdXJyZW50R3JvdXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsb3dlc3RHcm91cDtcbiAgICAgICAgfSwgaXRlbUdyb3VwIGFzIG51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRFbGVtZW50c0Zyb21DdXJyZW50R3JvdXAoXG4gICAgICAgIGl0ZW1Hcm91cDogbnVtYmVyLFxuICAgICAgICBncm91cGVkQ29sbGVjdGlvbj86IFJlY29yZDxudW1iZXIsIFRvb2xiYXJJdGVtW10+LFxuICAgICAgICBncm91cGVkQ29sbGVjdGlvblByaW9yaXR5PzogUmVjb3JkPG51bWJlciwgT3ZlcmZsb3dQcmlvcml0eT5cbiAgICApOiBUb29sYmFySXRlbVtdIHtcbiAgICAgICAgY29uc3QgbG93ZXN0UHJpb3JpdHlGcm9tR3JvdXAgPSB0aGlzLl9nZXRMb3dlc3RQcmlvcml0eUZyb21Hcm91cChpdGVtR3JvdXAsIGdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHkpO1xuICAgICAgICBpZiAoIWdyb3VwZWRDb2xsZWN0aW9uIHx8ICFncm91cGVkQ29sbGVjdGlvblByaW9yaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGl0ZW1zVG9SZW1vdmUgPSBncm91cGVkQ29sbGVjdGlvbltsb3dlc3RQcmlvcml0eUZyb21Hcm91cF07XG5cbiAgICAgICAgZGVsZXRlIGdyb3VwZWRDb2xsZWN0aW9uW2xvd2VzdFByaW9yaXR5RnJvbUdyb3VwXTtcbiAgICAgICAgZGVsZXRlIGdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHlbbG93ZXN0UHJpb3JpdHlGcm9tR3JvdXBdO1xuXG4gICAgICAgIGlmIChsb3dlc3RQcmlvcml0eUZyb21Hcm91cCAhPT0gaXRlbUdyb3VwKSB7XG4gICAgICAgICAgICBpdGVtc1RvUmVtb3ZlID0gWy4uLml0ZW1zVG9SZW1vdmUsIC4uLmdyb3VwZWRDb2xsZWN0aW9uW2l0ZW1Hcm91cF1dO1xuICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRDb2xsZWN0aW9uW2l0ZW1Hcm91cF07XG4gICAgICAgICAgICBkZWxldGUgZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eVtpdGVtR3JvdXBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zVG9SZW1vdmU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gR2V0IHRoZSBvYmplY3Qgd2l0aCBncm91cGVkIGFycmF5cyBvZiBlbGVtZW50cy4gKi9cbiAgICBwcml2YXRlIF9nZXRHcm91cGVkQ29sbGVjdGlvbih0b29sYmFySXRlbXM6IFRvb2xiYXJJdGVtW10pOiBSZWNvcmQ8bnVtYmVyLCBUb29sYmFySXRlbVtdPiB7XG4gICAgICAgIHJldHVybiB0b29sYmFySXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1QcmlvID0gaXRlbS5wcmlvcml0eTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IGl0ZW0uZ3JvdXA7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXRlbVByaW8gPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSIHx8XG4gICAgICAgICAgICAgICAgaXRlbVByaW8gPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLkFMV0FZUyB8fFxuICAgICAgICAgICAgICAgIGl0ZW1Hcm91cCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWNjW2l0ZW1Hcm91cF0pIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbUdyb3VwXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjW2l0ZW1Hcm91cF0ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBHZXQgdGhlIG9iamVjdCB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IGZvciBlYWNoIGdyb3VwIG9mIGVsZW1lbnRzLiAqL1xuICAgIHByaXZhdGUgX2dldEdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHkoXG4gICAgICAgIGdyb3VwZWRDb2xsZWN0aW9uOiBSZWNvcmQ8bnVtYmVyLCBUb29sYmFySXRlbVtdPlxuICAgICk6IFJlY29yZDxudW1iZXIsIE92ZXJmbG93UHJpb3JpdHk+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0LmtleXMoZ3JvdXBlZENvbGxlY3Rpb24pO1xuXG4gICAgICAgIHJldHVybiBncm91cHMucmVkdWNlKChhY2MsIGl0ZW1Hcm91cCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkUHJpb3JpdGllcyA9IGdyb3VwZWRDb2xsZWN0aW9uIVtpdGVtR3JvdXBdXG4gICAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gaS5wcmlvcml0eSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChwcmlvKSA9PiBwcmlvICE9PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5BTFdBWVMgJiYgcHJpbyAhPT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uTkVWRVIpXG4gICAgICAgICAgICAgICAgLnNvcnQodGhpcy5fc29ydFByaW9yaXRpZXMpO1xuXG4gICAgICAgICAgICBhY2NbaXRlbUdyb3VwXSA9IHNvcnRlZFByaW9yaXRpZXNbMF07XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTb3J0IHByaW9yaXRpZXMgb2YgZWxlbWVudHMvZ3JvdXBzLiAqL1xuICAgIHByaXZhdGUgX3NvcnRQcmlvcml0aWVzKGE6IE92ZXJmbG93UHJpb3JpdHksIGI6IE92ZXJmbG93UHJpb3JpdHkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KGIpISAtIE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChhKSE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU29ydCBieSBncm91cCBhbmQgcHJpb3JpdHkgYW5kIGluaXRpYWwgcG9zaXRpb24gKi9cbiAgICBwcml2YXRlIF9nZXRTb3J0ZWRCeVByaW9yaXR5QW5kR3JvdXBJdGVtcyh0b29sYmFySXRlbXM6IFRvb2xiYXJJdGVtW10pOiBUb29sYmFySXRlbVtdIHtcbiAgICAgICAgY29uc3Qgbm90U29ydGVkID0gdG9vbGJhckl0ZW1zLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+ICh7IGVsZW1lbnQsIGluZGV4IH0pKTtcblxuICAgICAgICBjb25zdCBncm91cHMgPSBub3RTb3J0ZWQucmVkdWNlKChnciwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgbGV0IGdyb3VwSWQgPSBpdGVtLmVsZW1lbnQuZ3JvdXA7XG4gICAgICAgICAgICBjb25zdCBpdGVtUHJpbyA9IGl0ZW0uZWxlbWVudC5wcmlvcml0eTtcbiAgICAgICAgICAgIGlmIChpdGVtUHJpbyA9PT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uTkVWRVIgfHwgaXRlbVByaW8gPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLkFMV0FZUykge1xuICAgICAgICAgICAgICAgIGdyb3VwSWQgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWdyW2dyb3VwSWRdKSB7XG4gICAgICAgICAgICAgICAgZ3JbZ3JvdXBJZF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JbZ3JvdXBJZF0ucHVzaChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXBJZHMgPSBPYmplY3Qua2V5cyhncm91cHMpXG4gICAgICAgICAgICAubWFwKChnKSA9PiBwYXJzZUludChnLCAxMCkpXG4gICAgICAgICAgICAuZmlsdGVyKChnKSA9PiBnICE9PSAwKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBJZHNcbiAgICAgICAgICAgIC5tYXAoKGcpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbWluSW5kZXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgICAgICAgICBsZXQgbWF4UHJpb3JpdHkgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cHNbZ10pIHtcbiAgICAgICAgICAgICAgICAgICAgbWluSW5kZXggPSBNYXRoLm1pbihtaW5JbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIG1heFByaW9yaXR5ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhQcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChpdGVtLmVsZW1lbnQucHJpb3JpdHkpID8/IC1JbmZpbml0eVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGdyb3VwOiBncm91cHNbZ10ubWFwKCh7IGVsZW1lbnQgfSkgPT4gZWxlbWVudCksIG1pbkluZGV4LCBtYXhQcmlvcml0eSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgICAgICAgIWdyb3Vwc1swXVxuICAgICAgICAgICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICAgICAgICAgIDogZ3JvdXBzWzBdLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IFtpdGVtLmVsZW1lbnRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQcmlvcml0eTogT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KGl0ZW0uZWxlbWVudC5wcmlvcml0eSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkluZGV4OiBpdGVtLmluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5tYXhQcmlvcml0eSAtIGEubWF4UHJpb3JpdHkgfHwgYS5taW5JbmRleCAtIGIubWluSW5kZXgpXG4gICAgICAgICAgICAucmVkdWNlKChhcnIsIGkpID0+IGFyci5jb25jYXQoaS5ncm91cCksIFtdKTtcbiAgICB9XG59XG4iLCI8ZGl2ICN0b29sYmFyIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiIFtjbGFzcy5mZC10b29sYmFyLS1jb3p5XT1cIl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ296eSQgfCBhc3luY1wiPlxuICAgIDxoNCAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJmZC10aXRsZSBmZC10aXRsZS0taDQgZmQtdG9vbGJhcl9fdGl0bGVcIiBbaWRdPVwidGl0bGVJZFwiICN0aXRsZUVsZW1lbnQ+e3sgdGl0bGUgfX08L2g0PlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm92ZXJmbG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyPjwvZmQtdG9vbGJhci1zcGFjZXI+XG4gICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvcj48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuICAgICAgICA8ZmQtcG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b20tZW5kXCIgW25vQXJyb3ddPVwidHJ1ZVwiIGNsYXNzPVwiZmQtcG9wb3ZlclwiPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk1vcmVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9yZVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cblxuICAgICAgICAgICAgPGZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtdG9vbGJhcl9fb3ZlcmZsb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3ZlcmZsb3dlZEl0ZW0gb2Ygb3ZlcmZsb3duSXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZGstZHluYW1pYy1wb3J0YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG9tRWxlbWVudF09XCJvdmVyZmxvd2VkSXRlbS5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJvdmVyZmxvd2VkSXRlbS5wcmlvcml0eSA9PT0gJ2Rpc2FwcGVhcicgPyAnbm9uZScgOiAnZmxleCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWRpcmVjdGlvbl09XCJvdmVyZmxvd2VkSXRlbS5wcmlvcml0eSA9PT0gJ2Rpc2FwcGVhcicgPyB1bmRlZmluZWQgOiAnY29sdW1uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zkay1keW5hbWljLXBvcnRhbD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgPC9mZC1wb3BvdmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBSUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx5QkFBeUIsRUFBcUIsTUFBTSw4QkFBOEIsQ0FBQztBQUU1RixPQUFPLEVBQ0gsYUFBYSxFQUViLHVCQUF1QixFQUV2QixxQkFBcUIsRUFDeEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQUVoRSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDekIsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxjQUFjLENB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QUFDLENBQUM7SUFDckQsQ0FBQzs4R0FqWVEsZ0JBQWdCLDhLQTZIVyx5QkFBeUI7a0dBN0hwRCxnQkFBZ0IsbVJBTmQ7WUFDUCwrQkFBK0IsQ0FBQztnQkFDNUIscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsT0FBTzthQUNwRCxDQUFDO1NBQ0wsc0VBa0ZhLFVBQVUscUdBSlUsV0FBVyxvT0M5SWpELG9rREFtQ0E7O0FEbUtJO0lBREMsYUFBYTs7Ozs4REFVYjsyRkE3SVEsZ0JBQWdCO2tCQVo1QixTQUFTOytCQUNJLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUCwrQkFBK0IsQ0FBQzs0QkFDNUIscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsT0FBTzt5QkFDcEQsQ0FBQztxQkFDTDs7MEJBK0hJLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMseUJBQXlCOzRDQXhIN0QsT0FBTztzQkFETixLQUFLO2dCQU1OLEtBQUs7c0JBREosS0FBSztnQkFPRixjQUFjO3NCQURqQixLQUFLO2dCQWVOLE1BQU07c0JBREwsS0FBSztnQkFLRixRQUFRO3NCQURYLEtBQUs7Z0JBWU4sS0FBSztzQkFESixLQUFLO2dCQU9OLE1BQU07c0JBREwsS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixPQUFPO3NCQUROLFNBQVM7dUJBQUMsU0FBUztnQkFLcEIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWM7Z0JBS3pCLFlBQVk7c0JBRFgsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUsxQyxjQUFjO3NCQURqQixZQUFZO3VCQUFDLFVBQVU7Z0JBb0R4QixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERZTkFNSUNfUEFHRV9IRUFERVJfVE9LRU4sIER5bmFtaWNQYWdlSGVhZGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlDc3NDbGFzcyxcbiAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUsXG4gICAgT3ZlcmZsb3dQcmlvcml0eSxcbiAgICBSZXNpemVPYnNlcnZlclNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGl0bGVUb2tlbiB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90aXRsZSc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBUb29sYmFySXRlbSB9IGZyb20gJy4vYWJzdHJhY3QtdG9vbGJhci1pdGVtLmNsYXNzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuY29uc3QgRUxFTUVOVF9NQVJHSU4gPSA4O1xuY29uc3QgT1ZFUkZMT1dfU1BBQ0UgPSA1MCArIDIgKiBFTEVNRU5UX01BUkdJTjtcbmNvbnN0IE1BWF9DT05URU5UX1NJWkUgPSA5OTk5OTk5OTtcblxuZXhwb3J0IHR5cGUgVG9vbGJhclR5cGUgPSAnc29saWQnIHwgJ3RyYW5zcGFyZW50JyB8ICdhdXRvJyB8ICdpbmZvJztcblxuZXhwb3J0IGNvbnN0IGVudW0gT3ZlcmZsb3dQcmlvcml0eUVudW0ge1xuICAgIEFMV0FZUyA9ICdhbHdheXMnLFxuICAgIE5FVkVSID0gJ25ldmVyJyxcbiAgICBMT1cgPSAnbG93JyxcbiAgICBISUdIID0gJ2hpZ2gnLFxuICAgIERJU0FQUEVBUiA9ICdkaXNhcHBlYXInXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtdG9vbGJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Rvb2xiYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIGRlZmF1bHRDb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1RcbiAgICAgICAgfSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBDc3NDbGFzc0J1aWxkZXIsIEFmdGVyQ29udGVudEluaXQge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgdG9vbGJhciB0aXRsZVxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZUlkOiBzdHJpbmc7XG5cbiAgICAvKiogUHJvcGVydHkgYWxsb3dzIHVzZXIgdG8gcGFzcyBhZGRpdGlvbmFsIGNsYXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIERldGVybWluZXMgaWYgb3ZlcmZsb3cgYnV0dG9uIHNob3VsZCBiZSB2aXNpYmxlXG4gICAgICogRGVmYXVsdCB2YWx1ZTogZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG91bGRPdmVyZmxvdyh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvdWxkT3ZlcmZsb3cgPSB2YWw7XG4gICAgICAgIHRoaXMuc2hvdWxkT3ZlcmZsb3ckLm5leHQodmFsKTtcbiAgICB9XG5cbiAgICBnZXQgc2hvdWxkT3ZlcmZsb3coKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG91bGRPdmVyZmxvdztcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0b29sYmFyXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnM6ICdzb2xpZCcgfCAndHJhbnNwYXJlbnQnIHwgJ2F1dG8nIHwgJ2luZm8nXG4gICAgICogRGVmYXVsdCB2YWx1ZTogJ3NvbGlkJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmRUeXBlOiBUb29sYmFyVHlwZSA9ICdzb2xpZCc7XG5cbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBoYXNUaXRsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGhhc1RpdGxlIGlzIGRlcHJlY2F0ZWQuICcpO1xuICAgICAgICB0aGlzLl9oYXNUaXRsZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1RpdGxlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdGl0bGUgZm9yIHRoZSB0b29sYmFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGhhcyBhY3RpdmUgc3RhdGUgKG9ubHkgd2hlbiBmZFR5cGUgPT0gJ2luZm8nKVxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmUgPSBmYWxzZTtcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGNsZWFyIGJvcmRlciBib3R0b21cbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xlYXJCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGFsbCBpdGVtcyBzaG91bGQgYmUgaW5zaWRlIG92ZXJmbG93ICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZU92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFiaW5kZXggb2YgdGhlIHRvb2xiYXIgZWxlbWVudCwgdG8gYmUgdXNlZCB3aGVuIGZkVHlwZT1cImluZm9cIiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiaW5kZXggPSAtMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndG9vbGJhcicpXG4gICAgdG9vbGJhcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGl0bGVFbGVtZW50JylcbiAgICB0aXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEhlYWRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IFRvb2xiYXJJdGVtKSlcbiAgICB0b29sYmFySXRlbXM6IFF1ZXJ5TGlzdDxUb29sYmFySXRlbT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGl0bGVUb2tlbilcbiAgICBzZXQgdGl0bGVDb21wb25lbnQodGl0bGU6IFRpdGxlVG9rZW4gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3RpdGxlQ29tcG9uZW50JC5uZXh0KHRpdGxlKTtcbiAgICB9XG5cbiAgICBnZXQgdGl0bGVDb21wb25lbnQoKTogVGl0bGVUb2tlbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVDb21wb25lbnQkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3ZlcmZsb3dJdGVtcyQ6IE9ic2VydmFibGU8VG9vbGJhckl0ZW1bXT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG92ZXJmbG93bkl0ZW1zOiBUb29sYmFySXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhc1RpdGxlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RpdGxlQ29tcG9uZW50JDogQmVoYXZpb3JTdWJqZWN0PFRpdGxlVG9rZW4gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGl0bGVUb2tlbiB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoT3ZlcmZsb3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfdG9vbGJhcldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAodGhpcy50b29sYmFyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudFdpZHRoIC0gT1ZFUkZMT1dfU1BBQ0U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG91bGRPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHNob3VsZE92ZXJmbG93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZjogRGVzdHJveVJlZixcbiAgICAgICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlclNlcnZpY2U6IFJlc2l6ZU9ic2VydmVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEluamVjdChEWU5BTUlDX1BBR0VfSEVBREVSX1RPS0VOKSBwcml2YXRlIF9keW5hbWljUGFnZUhlYWRlcj86IER5bmFtaWNQYWdlSGVhZGVyXG4gICAgKSB7XG4gICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC10b29sYmFyJyxcbiAgICAgICAgICAgIGBmZC10b29sYmFyLS0ke3RoaXMuZmRUeXBlfWAsXG4gICAgICAgICAgICBgJHt0aGlzLmFjdGl2ZSAmJiB0aGlzLmZkVHlwZSA9PT0gJ2luZm8nID8gJ2ZkLXRvb2xiYXItLWFjdGl2ZScgOiAnJ31gLFxuICAgICAgICAgICAgYCR7dGhpcy5oYXNUaXRsZSB8fCB0aGlzLnRpdGxlIHx8IHRoaXMudGl0bGVDb21wb25lbnQgPyAnZmQtdG9vbGJhci0tdGl0bGUnIDogJyd9YCxcbiAgICAgICAgICAgIGAke3RoaXMuY2xlYXJCb3JkZXIgPyAnZmQtdG9vbGJhci0tY2xlYXInIDogJyd9YCxcbiAgICAgICAgICAgIGAke3RoaXMuX2R5bmFtaWNQYWdlSGVhZGVyID8gJ2ZkLWR5bmFtaWMtcGFnZV9fdG9vbGJhcicgOiAnJ31gXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3ZlcmZsb3dJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy50b29sYmFyLm5hdGl2ZUVsZW1lbnQpLnBpcGUobWFwKCgpID0+IHRoaXMuX3Rvb2xiYXJXaWR0aCkpLFxuICAgICAgICAgICAgdGhpcy50b29sYmFySXRlbXMuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLnRvb2xiYXJJdGVtcyksXG4gICAgICAgICAgICAgICAgbWFwKCh0b29sYmFySXRlbXMpID0+IHRvb2xiYXJJdGVtcy50b0FycmF5KCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy5fdGl0bGVDb21wb25lbnQkLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCh0aXRsZUNvbXBvbmVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGl0bGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRpdGxlRWxlbWVudD8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGl0bGVDb21wb25lbnQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy5zaG91bGRPdmVyZmxvdyQsXG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoT3ZlcmZsb3ckXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFt0b29sYmFyV2lkdGgsIHRvb2xiYXJJdGVtcywgdGl0bGVFbGVtZW50LCBzaG91bGRPdmVyZmxvd10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX3NvcnRlZEJ5UHJpb3JpdHlBbmRHcm91cEl0ZW1zID0gdGhpcy5fZ2V0U29ydGVkQnlQcmlvcml0eUFuZEdyb3VwSXRlbXModG9vbGJhckl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3dJdGVtczogVG9vbGJhckl0ZW1bXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBfc29ydGVkQnlQcmlvcml0eUFuZEdyb3VwSXRlbXMucmVkdWNlKChfY29udGVudFdpZHRoLCB0b29sYmFySXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gdG9vbGJhckl0ZW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtUHJpb3JpdHkgPSB0b29sYmFySXRlbS5wcmlvcml0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEl0ZW1CZVJlbW92ZWRCeVdpZHRoID0gaXRlbVdpZHRoICsgX2NvbnRlbnRXaWR0aCA+IHRvb2xiYXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEFsd2F5c0JlSW5PdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVByaW9yaXR5ID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5BTFdBWVMgfHwgdGhpcy5mb3JjZU92ZXJmbG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkTmV2ZXJCZUluT3ZlcmZsb3cgPSBpdGVtUHJpb3JpdHkgPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzaG91bGRJdGVtQmVSZW1vdmVkQnlXaWR0aCAmJiAhc2hvdWxkTmV2ZXJCZUluT3ZlcmZsb3cpIHx8IHNob3VsZEFsd2F5c0JlSW5PdmVyZmxvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93SXRlbXMucHVzaCh0b29sYmFySXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZEFsd2F5c0JlSW5PdmVyZmxvdyA/IF9jb250ZW50V2lkdGggOiBNQVhfQ09OVEVOVF9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRlbnRXaWR0aCArIGl0ZW1XaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgdGl0bGVFbGVtZW50Py5jbGllbnRXaWR0aCB8fCAwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSBvcnBoYW5zXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdG9vbGJhckl0ZW0gb2Ygb3ZlcmZsb3dJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZENvbGxlY3Rpb24gPSB0aGlzLl9nZXRHcm91cGVkQ29sbGVjdGlvbih0b29sYmFySXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0aWVzID0gdGhpcy5fZ2V0R3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eShncm91cGVkQ29sbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRvb2xiYXJJdGVtLmdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVByaW9yaXR5ID0gdG9vbGJhckl0ZW0ucHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT09IDAgJiYgaXRlbVByaW9yaXR5ICE9PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5ESVNBUFBFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtc0Zyb21DdXJyZW50R3JvdXAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRFbGVtZW50c0Zyb21DdXJyZW50R3JvdXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRDb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tQ3VycmVudEdyb3VwLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJmbG93SXRlbXMuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93SXRlbXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdmVyZmxvd0l0ZW1zLnNvcnQoKGEsIGIpID0+IHRoaXMuX3NvcnRQcmlvcml0aWVzKGEucHJpb3JpdHksIGIucHJpb3JpdHkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vdmVyZmxvd0l0ZW1zJC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm92ZXJmbG93bkl0ZW1zID0gaXRlbXM7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGVDb21wb25lbnQuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmZC10b29sYmFyX190aXRsZScpO1xuICAgICAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2hhbmdlIGRldGVjdGlvbiByZWZlcmVuY2UgKi9cbiAgICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRyaWdnZXJpbmcgY29sbGFwc2libGUgdG9vbGJhciAgKi9cbiAgICB1cGRhdGVDb2xsYXBzaWJsZUl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZWZyZXNoT3ZlcmZsb3ckLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBHZXQgZ3JvdXAgbnVtYmVyIHdpdGggdGhlIGxvd2VzdCBwcmlvcml0eS5cbiAgICAgKiAgVXNlcyBmb3IgZGV0ZWN0aW5nIGEgZ3JvdXAgb2YgZWxlbWVudHMgd2hpY2ggd291bGQgYmUgaGlkZGVuIGZyb20gdGhlIHRvb2xiYXIuXG4gICAgICogICovXG4gICAgcHJpdmF0ZSBfZ2V0TG93ZXN0UHJpb3JpdHlGcm9tR3JvdXAoXG4gICAgICAgIGl0ZW1Hcm91cDogbnVtYmVyLFxuICAgICAgICBncm91cGVkQ29sbGVjdGlvblByaW9yaXR5PzogUmVjb3JkPG51bWJlciwgT3ZlcmZsb3dQcmlvcml0eT5cbiAgICApOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwcmlvcml0eSA9IGdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHk7XG4gICAgICAgIGlmICghcHJpb3JpdHkgfHwgIU9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChwcmlvcml0eVtpdGVtR3JvdXBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1Hcm91cDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IE9iamVjdC5rZXlzKHByaW9yaXR5KTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBzLnJlZHVjZSgobG93ZXN0R3JvdXAsIGN1cnJlbnRHcm91cCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG93ZXN0R3JvdXBQcmlvcml0eSA9IHByaW9yaXR5W2xvd2VzdEdyb3VwXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cFByaW9yaXR5ID0gcHJpb3JpdHlbY3VycmVudEdyb3VwXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQoY3VycmVudEdyb3VwUHJpb3JpdHkpISA8IE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChsb3dlc3RHcm91cFByaW9yaXR5KSFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiArY3VycmVudEdyb3VwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbG93ZXN0R3JvdXA7XG4gICAgICAgIH0sIGl0ZW1Hcm91cCBhcyBudW1iZXIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RWxlbWVudHNGcm9tQ3VycmVudEdyb3VwKFxuICAgICAgICBpdGVtR3JvdXA6IG51bWJlcixcbiAgICAgICAgZ3JvdXBlZENvbGxlY3Rpb24/OiBSZWNvcmQ8bnVtYmVyLCBUb29sYmFySXRlbVtdPixcbiAgICAgICAgZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eT86IFJlY29yZDxudW1iZXIsIE92ZXJmbG93UHJpb3JpdHk+XG4gICAgKTogVG9vbGJhckl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGxvd2VzdFByaW9yaXR5RnJvbUdyb3VwID0gdGhpcy5fZ2V0TG93ZXN0UHJpb3JpdHlGcm9tR3JvdXAoaXRlbUdyb3VwLCBncm91cGVkQ29sbGVjdGlvblByaW9yaXR5KTtcbiAgICAgICAgaWYgKCFncm91cGVkQ29sbGVjdGlvbiB8fCAhZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpdGVtc1RvUmVtb3ZlID0gZ3JvdXBlZENvbGxlY3Rpb25bbG93ZXN0UHJpb3JpdHlGcm9tR3JvdXBdO1xuXG4gICAgICAgIGRlbGV0ZSBncm91cGVkQ29sbGVjdGlvbltsb3dlc3RQcmlvcml0eUZyb21Hcm91cF07XG4gICAgICAgIGRlbGV0ZSBncm91cGVkQ29sbGVjdGlvblByaW9yaXR5W2xvd2VzdFByaW9yaXR5RnJvbUdyb3VwXTtcblxuICAgICAgICBpZiAobG93ZXN0UHJpb3JpdHlGcm9tR3JvdXAgIT09IGl0ZW1Hcm91cCkge1xuICAgICAgICAgICAgaXRlbXNUb1JlbW92ZSA9IFsuLi5pdGVtc1RvUmVtb3ZlLCAuLi5ncm91cGVkQ29sbGVjdGlvbltpdGVtR3JvdXBdXTtcbiAgICAgICAgICAgIGRlbGV0ZSBncm91cGVkQ29sbGVjdGlvbltpdGVtR3JvdXBdO1xuICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHlbaXRlbUdyb3VwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtc1RvUmVtb3ZlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldCB0aGUgb2JqZWN0IHdpdGggZ3JvdXBlZCBhcnJheXMgb2YgZWxlbWVudHMuICovXG4gICAgcHJpdmF0ZSBfZ2V0R3JvdXBlZENvbGxlY3Rpb24odG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbVtdKTogUmVjb3JkPG51bWJlciwgVG9vbGJhckl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gdG9vbGJhckl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUHJpbyA9IGl0ZW0ucHJpb3JpdHk7XG4gICAgICAgICAgICBjb25zdCBpdGVtR3JvdXAgPSBpdGVtLmdyb3VwO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGl0ZW1QcmlvID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5ORVZFUiB8fFxuICAgICAgICAgICAgICAgIGl0ZW1QcmlvID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5BTFdBWVMgfHxcbiAgICAgICAgICAgICAgICBpdGVtR3JvdXAgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFjY1tpdGVtR3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1Hcm91cF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjY1tpdGVtR3JvdXBdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gR2V0IHRoZSBvYmplY3Qgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSBmb3IgZWFjaCBncm91cCBvZiBlbGVtZW50cy4gKi9cbiAgICBwcml2YXRlIF9nZXRHcm91cGVkQ29sbGVjdGlvblByaW9yaXR5KFxuICAgICAgICBncm91cGVkQ29sbGVjdGlvbjogUmVjb3JkPG51bWJlciwgVG9vbGJhckl0ZW1bXT5cbiAgICApOiBSZWNvcmQ8bnVtYmVyLCBPdmVyZmxvd1ByaW9yaXR5PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IE9iamVjdC5rZXlzKGdyb3VwZWRDb2xsZWN0aW9uKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBzLnJlZHVjZSgoYWNjLCBpdGVtR3JvdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlZFByaW9yaXRpZXMgPSBncm91cGVkQ29sbGVjdGlvbiFbaXRlbUdyb3VwXVxuICAgICAgICAgICAgICAgIC5tYXAoKGkpID0+IGkucHJpb3JpdHkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocHJpbykgPT4gcHJpbyAhPT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uQUxXQVlTICYmIHByaW8gIT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSKVxuICAgICAgICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRQcmlvcml0aWVzKTtcblxuICAgICAgICAgICAgYWNjW2l0ZW1Hcm91cF0gPSBzb3J0ZWRQcmlvcml0aWVzWzBdO1xuXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU29ydCBwcmlvcml0aWVzIG9mIGVsZW1lbnRzL2dyb3Vwcy4gKi9cbiAgICBwcml2YXRlIF9zb3J0UHJpb3JpdGllcyhhOiBPdmVyZmxvd1ByaW9yaXR5LCBiOiBPdmVyZmxvd1ByaW9yaXR5KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChiKSEgLSBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQoYSkhO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNvcnQgYnkgZ3JvdXAgYW5kIHByaW9yaXR5IGFuZCBpbml0aWFsIHBvc2l0aW9uICovXG4gICAgcHJpdmF0ZSBfZ2V0U29ydGVkQnlQcmlvcml0eUFuZEdyb3VwSXRlbXModG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbVtdKTogVG9vbGJhckl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IG5vdFNvcnRlZCA9IHRvb2xiYXJJdGVtcy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiAoeyBlbGVtZW50LCBpbmRleCB9KSk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXBzID0gbm90U29ydGVkLnJlZHVjZSgoZ3IsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBncm91cElkID0gaXRlbS5lbGVtZW50Lmdyb3VwO1xuICAgICAgICAgICAgY29uc3QgaXRlbVByaW8gPSBpdGVtLmVsZW1lbnQucHJpb3JpdHk7XG4gICAgICAgICAgICBpZiAoaXRlbVByaW8gPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSIHx8IGl0ZW1QcmlvID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5BTFdBWVMpIHtcbiAgICAgICAgICAgICAgICBncm91cElkID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncltncm91cElkXSkge1xuICAgICAgICAgICAgICAgIGdyW2dyb3VwSWRdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyW2dyb3VwSWRdLnB1c2goaXRlbSk7XG5cbiAgICAgICAgICAgIHJldHVybiBncjtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwSWRzID0gT2JqZWN0LmtleXMoZ3JvdXBzKVxuICAgICAgICAgICAgLm1hcCgoZykgPT4gcGFyc2VJbnQoZywgMTApKVxuICAgICAgICAgICAgLmZpbHRlcigoZykgPT4gZyAhPT0gMCk7XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwSWRzXG4gICAgICAgICAgICAubWFwKChnKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1pbkluZGV4ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgICAgICAgICAgbGV0IG1heFByaW9yaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBzW2ddKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gTWF0aC5taW4obWluSW5kZXgsIGl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBtYXhQcmlvcml0eSA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQoaXRlbS5lbGVtZW50LnByaW9yaXR5KSA/PyAtSW5maW5pdHlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geyBncm91cDogZ3JvdXBzW2ddLm1hcCgoeyBlbGVtZW50IH0pID0+IGVsZW1lbnQpLCBtaW5JbmRleCwgbWF4UHJpb3JpdHkgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY29uY2F0KFxuICAgICAgICAgICAgICAgICFncm91cHNbMF1cbiAgICAgICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgICAgICA6IGdyb3Vwc1swXS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiBbaXRlbS5lbGVtZW50XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UHJpb3JpdHk6IE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChpdGVtLmVsZW1lbnQucHJpb3JpdHkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5JbmRleDogaXRlbS5pbmRleFxuICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubWF4UHJpb3JpdHkgLSBhLm1heFByaW9yaXR5IHx8IGEubWluSW5kZXggLSBiLm1pbkluZGV4KVxuICAgICAgICAgICAgLnJlZHVjZSgoYXJyLCBpKSA9PiBhcnIuY29uY2F0KGkuZ3JvdXApLCBbXSk7XG4gICAgfVxufVxuIiwiPGRpdiAjdG9vbGJhciBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbY2xhc3MuZmQtdG9vbGJhci0tY296eV09XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIj5cbiAgICA8aDQgKm5nSWY9XCJ0aXRsZVwiIGNsYXNzPVwiZmQtdGl0bGUgZmQtdGl0bGUtLWg0IGZkLXRvb2xiYXJfX3RpdGxlXCIgW2lkXT1cInRpdGxlSWRcIiAjdGl0bGVFbGVtZW50Pnt7IHRpdGxlIH19PC9oND5cblxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvdmVyZmxvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3I+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tLWVuZFwiIFtub0Fycm93XT1cInRydWVcIiBjbGFzcz1cImZkLXBvcG92ZXJcIj5cbiAgICAgICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJNb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1vcmVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJvdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG5cbiAgICAgICAgICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRvb2xiYXJfX292ZXJmbG93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG92ZXJmbG93ZWRJdGVtIG9mIG92ZXJmbG93bkl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmRrLWR5bmFtaWMtcG9ydGFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RvbUVsZW1lbnRdPVwib3ZlcmZsb3dlZEl0ZW0uZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwib3ZlcmZsb3dlZEl0ZW0ucHJpb3JpdHkgPT09ICdkaXNhcHBlYXInID8gJ25vbmUnIDogJ2ZsZXgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleC1kaXJlY3Rpb25dPVwib3ZlcmZsb3dlZEl0ZW0ucHJpb3JpdHkgPT09ICdkaXNhcHBlYXInID8gdW5kZWZpbmVkIDogJ2NvbHVtbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZGstZHluYW1pYy1wb3J0YWw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
@@ -1,10 +1,11 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, inject, Input, Output, QueryList, ViewChild, ViewEncapsulation } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostBinding, inject, Input, Output, QueryList, ViewChild, ViewEncapsulation } from '@angular/core';
2
2
  import { DataSourceDirective } from '@fundamental-ngx/cdk/data-source';
3
- import { DestroyedService, FDK_SELECTABLE_ITEM_PROVIDER, SelectableItemDirective, SelectableItemToken, uuidv4 } from '@fundamental-ngx/cdk/utils';
4
- import { distinctUntilChanged, filter, startWith, Subject, switchMap, takeUntil } from 'rxjs';
3
+ import { FDK_SELECTABLE_ITEM_PROVIDER, SelectableItemDirective, SelectableItemToken, uuidv4 } from '@fundamental-ngx/cdk/utils';
4
+ import { distinctUntilChanged, filter, startWith, Subject, switchMap } from 'rxjs';
5
5
  import { TreeService } from '../../tree.service';
6
6
  import { BaseTreeItem } from '../../models/base-tree-item.class';
7
7
  import { TreeItemDirective } from '../../directives/tree-item.directive';
8
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@fundamental-ngx/cdk/data-source";
10
11
  import * as i2 from "@angular/common";
@@ -96,13 +97,6 @@ export class TreeItemComponent extends BaseTreeItem {
96
97
  * Whether to wrap content.
97
98
  */
98
99
  this.wrapContent = false;
99
- /** @hidden */
100
- this._expanded = false;
101
- /**
102
- * @hidden
103
- * Whether the tree item should have a navigation indicator.
104
- */
105
- this._navigationIndicator = false;
106
100
  /**
107
101
  * Event emitted when user clicks on tree item.
108
102
  */
@@ -111,6 +105,11 @@ export class TreeItemComponent extends BaseTreeItem {
111
105
  * Event emitted when `expanded` state changes.
112
106
  */
113
107
  this.expandedChange = new EventEmitter();
108
+ /**
109
+ * @hidden
110
+ * Whether the tree item should have a navigation indicator.
111
+ */
112
+ this._navigationIndicator = false;
114
113
  /**
115
114
  * @hidden
116
115
  * Selection state.
@@ -125,14 +124,17 @@ export class TreeItemComponent extends BaseTreeItem {
125
124
  /** @hidden */
126
125
  this._totalChildrenLoaded = false;
127
126
  /** @hidden */
127
+ this.elementRef = inject(ElementRef);
128
+ /** @hidden */
129
+ this._expanded = false;
130
+ /** @hidden */
128
131
  this._dsChildrenNumber = 0;
129
132
  /** @hidden */
130
133
  this._clicked$ = new Subject();
131
134
  /** Clicked behavior implementation. */
135
+ // eslint-disable-next-line @typescript-eslint/member-ordering
132
136
  this.clicked = this._clicked$.asObservable();
133
137
  /** @hidden */
134
- this.elementRef = inject(ElementRef);
135
- /** @hidden */
136
138
  this._treeItemDir = inject(TreeItemDirective, {
137
139
  optional: true
138
140
  });
@@ -143,7 +145,7 @@ export class TreeItemComponent extends BaseTreeItem {
143
145
  /** @hidden */
144
146
  this._cdr = inject(ChangeDetectorRef);
145
147
  /** @hidden */
146
- this._destroy$ = inject(DestroyedService);
148
+ this._destroyRef = inject(DestroyRef);
147
149
  /** @hidden */
148
150
  this._parentTreeItem = inject(TreeItemComponent, {
149
151
  optional: true,
@@ -153,11 +155,11 @@ export class TreeItemComponent extends BaseTreeItem {
153
155
  }
154
156
  /** @hidden */
155
157
  ngOnInit() {
156
- this._treeService.selectionMode.pipe(takeUntil(this._destroy$)).subscribe((model) => {
158
+ this._treeService.selectionMode.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((model) => {
157
159
  this._selectionModel = model;
158
160
  this._cdr.detectChanges();
159
161
  });
160
- this._treeService.navigationIndicator.pipe(takeUntil(this._destroy$)).subscribe((value) => {
162
+ this._treeService.navigationIndicator.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((value) => {
161
163
  this._navigationIndicator = value;
162
164
  this._cdr.detectChanges();
163
165
  });
@@ -165,14 +167,14 @@ export class TreeItemComponent extends BaseTreeItem {
165
167
  this._treeService.addExpandableItem(this.id, this.level, this.expanded);
166
168
  this._dataSourceDirective.dataSourceProvider
167
169
  ?.getTotalItems()
168
- .pipe(takeUntil(this._destroy$))
170
+ .pipe(takeUntilDestroyed(this._destroyRef))
169
171
  .subscribe((totalItems) => {
170
172
  this._dsChildrenNumber = totalItems;
171
173
  this._totalChildrenLoaded = true;
172
174
  this._cdr.detectChanges();
173
175
  });
174
176
  this._dataSourceDirective.dataSourceProvider?.dataReceived
175
- .pipe(filter((received) => received), switchMap(() => this._dataSourceDirective.dataChanged$), takeUntil(this._destroy$))
177
+ .pipe(filter((received) => received), switchMap(() => this._dataSourceDirective.dataChanged$), takeUntilDestroyed(this._destroyRef))
176
178
  .subscribe((data) => {
177
179
  this.children = this._treeService.normalizeTreeItems(data, this.id, this.level + 1);
178
180
  this.childrenLoaded = true;
@@ -185,7 +187,7 @@ export class TreeItemComponent extends BaseTreeItem {
185
187
  /** @hidden */
186
188
  ngAfterViewInit() {
187
189
  this._projectedTreeItems.changes
188
- .pipe(startWith(null), distinctUntilChanged(), takeUntil(this._destroy$))
190
+ .pipe(startWith(null), distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))
189
191
  .subscribe(() => {
190
192
  this._cdr.detectChanges();
191
193
  this._projectedTreeItems.forEach((treeItem, index) => {
@@ -235,7 +237,6 @@ export class TreeItemComponent extends BaseTreeItem {
235
237
  }
236
238
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: TreeItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
237
239
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: TreeItemComponent, selector: "fd-tree-item", inputs: { value: "value", id: "id", ariaLabel: "ariaLabel", parentId: "parentId", navigatable: "navigatable", state: "state", childNodes: "childNodes", wrapContent: "wrapContent", level: "level", expanded: "expanded" }, outputs: { treeItemClick: "treeItemClick", expandedChange: "expandedChange" }, host: { attributes: { "role": "presentation" }, properties: { "attr.aria-label": "this.ariaLabel", "attr.aria-level": "this.level" }, classAttribute: "fd-tree__item" }, providers: [
238
- DestroyedService,
239
240
  {
240
241
  provide: FDK_SELECTABLE_ITEM_PROVIDER,
241
242
  useExisting: TreeItemComponent
@@ -252,7 +253,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
252
253
  class: 'fd-tree__item',
253
254
  role: 'presentation'
254
255
  }, providers: [
255
- DestroyedService,
256
256
  {
257
257
  provide: FDK_SELECTABLE_ITEM_PROVIDER,
258
258
  useExisting: TreeItemComponent
@@ -302,4 +302,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
302
302
  type: ContentChildren,
303
303
  args: [BaseTreeItem]
304
304
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkYsT0FBTyxFQUNILGdCQUFnQixFQUNoQiw0QkFBNEIsRUFFNUIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixNQUFNLEVBQ1QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5RixPQUFPLEVBQUUsV0FBVyxFQUFzQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7QUF3QnpFLE1BQU0sT0FBTyxpQkFDVCxTQUFRLFlBQWtCO0lBcUIxQjs7T0FFRztJQUNILElBQ0ksUUFBUSxDQUFDLEtBQXVCO1FBQ2hD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QUFpQjtnQkFnQjFCLFFBQVE7c0JBRFgsS0FBSztnQkF1Q0csYUFBYTtzQkFEckIsTUFBTTtnQkFPUCxjQUFjO3NCQURiLE1BQU07Z0JBc0NQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtoRCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUtsQyxtQkFBbUI7c0JBRGxCLGVBQWU7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSwgRGF0YVNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcbmltcG9ydCB7XG4gICAgRGVzdHJveWVkU2VydmljZSxcbiAgICBGREtfU0VMRUNUQUJMRV9JVEVNX1BST1ZJREVSLFxuICAgIE51bGxhYmxlLFxuICAgIFNlbGVjdGFibGVJdGVtRGlyZWN0aXZlLFxuICAgIFNlbGVjdGFibGVJdGVtVG9rZW4sXG4gICAgdXVpZHY0XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZkVHJlZUFjY2VwdGFibGVEYXRhU291cmNlLCBGZFRyZWVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YS1zb3VyY2UvdHJlZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBUcmVlSXRlbSwgVHJlZUl0ZW1TdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy90cmVlLWl0ZW0nO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UsIFNlbGVjdGlvbk1vZGVNb2RlbCB9IGZyb20gJy4uLy4uL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVHJlZUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvYmFzZS10cmVlLWl0ZW0uY2xhc3MnO1xuaW1wb3J0IHsgVHJlZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RyZWUtaXRlbS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRyZWUtaXRlbScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0RGlyZWN0aXZlczogW0RhdGFTb3VyY2VEaXJlY3RpdmVdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZC10cmVlX19pdGVtJyxcbiAgICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbidcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGREtfU0VMRUNUQUJMRV9JVEVNX1BST1ZJREVSLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRyZWVJdGVtQ29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEJhc2VUcmVlSXRlbSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUcmVlSXRlbUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlSXRlbUNvbXBvbmVudDxUIGV4dGVuZHMgVHJlZUl0ZW0gPSBUcmVlSXRlbSwgUCA9IGFueT5cbiAgICBleHRlbmRzIEJhc2VUcmVlSXRlbTxULCBQPlxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTZWxlY3RhYmxlSXRlbVRva2VuPEhUTUxFbGVtZW50LCBQPj4sIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWU6IFA7XG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIElELlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSB1dWlkdjQoKTtcblxuICAgIC8qKlxuICAgICAqIFRyZWUgaXRlbSBhcmlhIGxhYmVsLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIHBhcmVudCBJRC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwYXJlbnRJZCh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9wYXJlbnRJZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBwYXJlbnRJZCgpOiBOdWxsYWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudElkIHx8IHRoaXMuX3BhcmVudFRyZWVJdGVtPy5pZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcmVudElkOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdHJlZSBpdGVtIGlzIG5hdmlnYXRhYmxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGFibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRyZWUgaXRlbSBzdGF0ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlOiBOdWxsYWJsZTxUcmVlSXRlbVN0YXRlPjtcblxuICAgIC8qKlxuICAgICAqIFRyZWUgaXRlbSBjaGlsZCBub2RlcyBkYXRhIHNvdXJjZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNoaWxkTm9kZXM6IEZkVHJlZUFjY2VwdGFibGVEYXRhU291cmNlPFQ+ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHdyYXAgY29udGVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHdyYXBDb250ZW50ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gbGV2ZWwuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sZXZlbCcpXG4gICAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xldmVsIHx8ICh0aGlzLl9wYXJlbnRUcmVlSXRlbSAhPT0gbnVsbCA/IHRoaXMuX3BhcmVudFRyZWVJdGVtLmxldmVsICsgMSA6IDEpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGV2ZWw6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRyZWUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2V4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuYWRkRXhwYW5kYWJsZUl0ZW0odGhpcy5pZCwgdGhpcy5sZXZlbCwgdmFsdWUpO1xuICAgICAgICB0aGlzLl9leHBhbmRlZCA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXI/Lm1hdGNoKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5Mb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmRldGVjdENoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciB0aGUgdHJlZSBpdGVtIHNob3VsZCBoYXZlIGEgbmF2aWdhdGlvbiBpbmRpY2F0b3IuXG4gICAgICovXG4gICAgX25hdmlnYXRpb25JbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBvbiB0cmVlIGl0ZW0uXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdHJlZUl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYGV4cGFuZGVkYCBzdGF0ZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGlvbiBzdGF0ZS5cbiAgICAgKi9cbiAgICBfc2VsZWN0aW9uU3RhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hpbGRyZW46IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaGlsZHJlbkxvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uTW9kZWw6IE51bGxhYmxlPFNlbGVjdGlvbk1vZGVNb2RlbD47XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBhbnkgdHlwZSBvZiBjaGlsZCBub2Rlcy4gKi9cbiAgICBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY2hpbGROb2RlcyB8fCB0aGlzLmhhc1Byb2plY3RlZENoaWxkcmVuO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0cmVlIGl0ZW0gaGFzIGNvbnRlbnQtcHJvamVjdGVkIGNoaWxkIG5vZGVzLiAqL1xuICAgIGdldCBoYXNQcm9qZWN0ZWRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcyAmJiB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBkYXRhIHNvdXJjZSBjaGlsZHJlbi4gKi9cbiAgICBnZXQgaGFzRHNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RzQ2hpbGRyZW5OdW1iZXIgPiAwO1xuICAgIH1cblxuICAgIC8qKiBASGlkZGVuICovXG4gICAgX2NvbnRhaW5lclRhYkluZGV4ID0gMDtcblxuICAgIC8qKiBUcmVlIGl0ZW0gZm9jdXNhYmxlIGNvbnRhaW5lci4gKi9cbiAgICBAVmlld0NoaWxkKCdpdGVtQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaXRlbUNvbnRhaW5lcjogTnVsbGFibGU8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gICAgLyoqIFNlbGVjdGFibGUgaXRlbS4gKi9cbiAgICBAVmlld0NoaWxkKFNlbGVjdGFibGVJdGVtRGlyZWN0aXZlKVxuICAgIHNlbGVjdGFibGVMaXN0SXRlbTogU2VsZWN0YWJsZUl0ZW1Ub2tlbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihCYXNlVHJlZUl0ZW0pXG4gICAgX3Byb2plY3RlZFRyZWVJdGVtczogUXVlcnlMaXN0PEJhc2VUcmVlSXRlbT47XG5cbiAgICAvKiogV2hldGhlciB0aGUgaXRlbSBpcyBhY2Nlc3NpYmxlIHZpYSBrZXlib2FyZC4gKi9cbiAgICBnZXQga2V5Ym9hcmRBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHJlZUl0ZW0gPT09IG51bGxcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiB0aGlzLl9wYXJlbnRUcmVlSXRlbS5rZXlib2FyZEFjY2Vzc2libGUgJiYgdGhpcy5fcGFyZW50VHJlZUl0ZW0uZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0U2l6ZTogbnVtYmVyO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2N1cnJlbnRQb3NpdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG90YWxDaGlsZHJlbkxvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc0NoaWxkcmVuTnVtYmVyID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpY2tlZCQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKiBDbGlja2VkIGJlaGF2aW9yIGltcGxlbWVudGF0aW9uLiAqL1xuICAgIGNsaWNrZWQgPSB0aGlzLl9jbGlja2VkJC5hc09ic2VydmFibGUoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVJdGVtRGlyID0gaW5qZWN0PFRyZWVJdGVtRGlyZWN0aXZlPFQsIFA+PihUcmVlSXRlbURpcmVjdGl2ZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmVlU2VydmljZSA9IGluamVjdChUcmVlU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VEaXJlY3RpdmUgPSBpbmplY3Q8RGF0YVNvdXJjZURpcmVjdGl2ZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+Pj4oRGF0YVNvdXJjZURpcmVjdGl2ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3llZFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRUcmVlSXRlbSA9IGluamVjdChUcmVlSXRlbUNvbXBvbmVudCwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgc2tpcFNlbGY6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3RyZWVJdGVtRGlyPy5zZXRUcmVlSXRlbSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5zZWxlY3Rpb25Nb2RlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChtb2RlbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBtb2RlbDtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLm5hdmlnYXRpb25JbmRpY2F0b3IucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2UgPSB0aGlzLmNoaWxkTm9kZXMgYXMgRGF0YVNvdXJjZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+PjtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuYWRkRXhwYW5kYWJsZUl0ZW0odGhpcy5pZCwgdGhpcy5sZXZlbCwgdGhpcy5leHBhbmRlZCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXJcbiAgICAgICAgICAgID8uZ2V0VG90YWxJdGVtcygpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodG90YWxJdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzQ2hpbGRyZW5OdW1iZXIgPSB0b3RhbEl0ZW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvdGFsQ2hpbGRyZW5Mb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8uZGF0YVJlY2VpdmVkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHJlY2VpdmVkKSA9PiByZWNlaXZlZCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YUNoYW5nZWQkKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHRoaXMuX3RyZWVTZXJ2aWNlLm5vcm1hbGl6ZVRyZWVJdGVtcyhkYXRhLCB0aGlzLmlkLCB0aGlzLmxldmVsICsgMSkgYXMgVFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5Mb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmVlU2VydmljZS5kZXRlY3RDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKG51bGwpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMuZm9yRWFjaCgodHJlZUl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLnNldFBvc2l0aW9uKHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcy5sZW5ndGgsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5yZW1vdmVFeHBhbmRhYmxlSXRlbSh0aGlzLmlkLCB0aGlzLmxldmVsISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIHRvdGFsSXRlbXMgVG90YWwgaXRlbXMgYW1vdW50IGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBDdXJyZW50IGl0ZW0gcG9zaXRpb24gaW4gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXRQb3NpdGlvbih0b3RhbEl0ZW1zOiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFNpemUgPSB0b3RhbEl0ZW1zO1xuICAgICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBjdXJyZW50SW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0byBmb2N1cyBvbiB0aGUgdHJlZSBpdGVtLiAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIHRoZSBmb2N1c2FibGUgdGFiaW5kZXguICovXG4gICAgc2V0Q29udGFpbmVyVGFiSW5kZXgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb250YWluZXJUYWJJbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlRXhwYW5kU3RhdGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gRG8gbm90IGJ1YmJsZSB1cCB0byBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50LlxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLl9jbGlja2VkJC5uZXh0KGV2ZW50KTtcbiAgICAgICAgdGhpcy50cmVlSXRlbUNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvblN0YXRlID0gc2VsZWN0ZWQ7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtdHJlZV9faXRlbS1jb250YWluZXJcIlxuICAgIFthdHRyLnRhYmluZGV4XT1cIl9jb250YWluZXJUYWJJbmRleFwiXG4gICAgKGZka0NsaWNrZWQpPVwiX29uQ2xpY2soJGV2ZW50KVwiXG4gICAgZmRrU2VsZWN0YWJsZUl0ZW1cbiAgICAoc2VsZWN0ZWQpPVwiX3NldFNlbGVjdGVkKCRldmVudClcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJjaGlsZHJlbi5sZW5ndGggPiAwIHx8IGhhc1Byb2plY3RlZENoaWxkcmVuXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiX3NldFNpemVcIlxuICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiX2N1cnJlbnRQb3NpdGlvblwiXG4gICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsXCJcbiAgICAjaXRlbUNvbnRhaW5lclxuICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgc3RhdGUgPyAnaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3IgaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3ItLScgKyBzdGF0ZSA6ICcnLFxuICAgICAgICBuYXZpZ2F0YWJsZSA/ICdmZC10cmVlX19pdGVtLWNvbnRhaW5lci0tYWN0aXZlJyA6ICcnLFxuICAgICAgICB3cmFwQ29udGVudCA/ICdmZC10cmVlX19jb250ZW50LS13cmFwJyA6ICcnXG4gICAgXVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ucGxhY2VtZW50ID09PSAnbGVmdCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NoaWxkcmVuXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImhhc0RzQ2hpbGRyZW4gfHwgaGFzUHJvamVjdGVkQ2hpbGRyZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIl90b2dnbGVFeHBhbmRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdHJlZV9fZXhwYW5kZXJcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZXhwYW5kZWQgPyAnY29yZVRyZWUuY29sbGFwc2UnIDogJ2NvcmVUcmVlLmV4cGFuZCcpIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRyZWVfX2ljb25cIlxuICAgICAgICAgICAgICAgIFtnbHlwaF09XCJleHBhbmRlZCA/ICduYXZpZ2F0aW9uLWRvd24tYXJyb3cnIDogJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnXCJcbiAgICAgICAgICAgID48L2ZkLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2V4cGFuZGVyIGZkLXRyZWVfX2V4cGFuZGVyLS1sb2FkaW5nXCIgKm5nSWY9XCIhX3RvdGFsQ2hpbGRyZW5Mb2FkZWRcIj5cbiAgICAgICAgICAgIDxmZC1za2VsZXRvbiB0eXBlPVwicmVjdGFuZ2xlXCIgd2lkdGg9XCIxcmVtXCIgaGVpZ2h0PVwiMXJlbVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdhZnRlckV4cGFuZCdcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdHJlZV9fY29udGVudFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbUljb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbVRleHRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZFRyZWVJdGVtQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdyaWdodCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGZkLWljb25cbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJmZC10cmVlX19pY29uIGZkLXRyZWVfX2ljb24tLW5hdmlnYXRpb25cIlxuICAgICAgICAqbmdJZj1cIm5hdmlnYXRhYmxlICYmIF9uYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICA+PC9mZC1pY29uPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNQcm9qZWN0ZWRDaGlsZHJlbiAmJiBleHBhbmRlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmZC10cmVlXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRyZWUtaXRlbVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdGlvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtZm9ybS1pdGVtXCI+XG4gICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXhWYWx1ZT1cIi0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5tb2RlID09PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgPjwvZmQtY2hlY2tib3g+XG4gICAgICAgIDxmZC1yYWRpby1idXR0b25cbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiX3NlbGVjdGlvblN0YXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4VmFsdWU9XCItMVwiXG4gICAgICAgICAgICAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ubW9kZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICA+PC9mZC1yYWRpby1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25GLE9BQU8sRUFDSCw0QkFBNEIsRUFFNUIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixNQUFNLEVBQ1QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR25GLE9BQU8sRUFBc0IsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQXVCaEUsTUFBTSxPQUFPLGlCQUNULFNBQVEsWUFBa0I7SUFxQjFCOztPQUVH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QUFLOztzQkFDTCxXQUFXO3VCQUFDLGlCQUFpQjtnQkFhMUIsUUFBUTtzQkFEWCxLQUFLO2dCQThCRyxhQUFhO3NCQURyQixNQUFNO2dCQU9QLGNBQWM7c0JBRGIsTUFBTTtnQkFLUCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLaEQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLHVCQUF1QjtnQkFLbEMsbUJBQW1CO3NCQURsQixlQUFlO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSwgRGF0YVNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcbmltcG9ydCB7XG4gICAgRkRLX1NFTEVDVEFCTEVfSVRFTV9QUk9WSURFUixcbiAgICBOdWxsYWJsZSxcbiAgICBTZWxlY3RhYmxlSXRlbURpcmVjdGl2ZSxcbiAgICBTZWxlY3RhYmxlSXRlbVRva2VuLFxuICAgIHV1aWR2NFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmRUcmVlQWNjZXB0YWJsZURhdGFTb3VyY2UsIEZkVHJlZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhLXNvdXJjZS90cmVlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IFRyZWVJdGVtLCBUcmVlSXRlbVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyZWUtaXRlbSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlTW9kZWwsIFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VUcmVlSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9iYXNlLXRyZWUtaXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBUcmVlSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdHJlZS1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtdHJlZS1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbRGF0YVNvdXJjZURpcmVjdGl2ZV0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXRyZWVfX2l0ZW0nLFxuICAgICAgICByb2xlOiAncHJlc2VudGF0aW9uJ1xuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZES19TRUxFQ1RBQkxFX0lURU1fUFJPVklERVIsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVHJlZUl0ZW1Db21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQmFzZVRyZWVJdGVtLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRyZWVJdGVtQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVJdGVtQ29tcG9uZW50PFQgZXh0ZW5kcyBUcmVlSXRlbSA9IFRyZWVJdGVtLCBQID0gYW55PlxuICAgIGV4dGVuZHMgQmFzZVRyZWVJdGVtPFQsIFA+XG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNlbGVjdGFibGVJdGVtVG9rZW48SFRNTEVsZW1lbnQsIFA+PiwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gdmFsdWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZTogUDtcbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gSUQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpZCA9IHV1aWR2NCgpO1xuXG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIGFyaWEgbGFiZWwuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gcGFyZW50IElELlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHBhcmVudElkKHZhbHVlOiBOdWxsYWJsZTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuX3BhcmVudElkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHBhcmVudElkKCk6IE51bGxhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50SWQgfHwgdGhpcy5fcGFyZW50VHJlZUl0ZW0/LmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRyZWUgaXRlbSBpcyBuYXZpZ2F0YWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gc3RhdGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZTogTnVsbGFibGU8VHJlZUl0ZW1TdGF0ZT47XG5cbiAgICAvKipcbiAgICAgKiBUcmVlIGl0ZW0gY2hpbGQgbm9kZXMgZGF0YSBzb3VyY2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjaGlsZE5vZGVzOiBGZFRyZWVBY2NlcHRhYmxlRGF0YVNvdXJjZTxUPiA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB3cmFwIGNvbnRlbnQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB3cmFwQ29udGVudCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJlZSBpdGVtIGxldmVsLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKVxuICAgIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbCB8fCAodGhpcy5fcGFyZW50VHJlZUl0ZW0gIT09IG51bGwgPyB0aGlzLl9wYXJlbnRUcmVlSXRlbS5sZXZlbCArIDEgOiAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0cmVlIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9leHBhbmRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmFkZEV4cGFuZGFibGVJdGVtKHRoaXMuaWQsIHRoaXMubGV2ZWwsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLmRldGVjdENoYW5nZXMubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZVByb3ZpZGVyPy5tYXRjaCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuTG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl90cmVlU2VydmljZS5kZXRlY3RDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIHRyZWUgaXRlbS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0cmVlSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBgZXhwYW5kZWRgIHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogVHJlZSBpdGVtIGZvY3VzYWJsZSBjb250YWluZXIuICovXG4gICAgQFZpZXdDaGlsZCgnaXRlbUNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGl0ZW1Db250YWluZXI6IE51bGxhYmxlPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcblxuICAgIC8qKiBTZWxlY3RhYmxlIGl0ZW0uICovXG4gICAgQFZpZXdDaGlsZChTZWxlY3RhYmxlSXRlbURpcmVjdGl2ZSlcbiAgICBzZWxlY3RhYmxlTGlzdEl0ZW06IFNlbGVjdGFibGVJdGVtVG9rZW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQmFzZVRyZWVJdGVtKVxuICAgIF9wcm9qZWN0ZWRUcmVlSXRlbXM6IFF1ZXJ5TGlzdDxCYXNlVHJlZUl0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgdGhlIHRyZWUgaXRlbSBzaG91bGQgaGF2ZSBhIG5hdmlnYXRpb24gaW5kaWNhdG9yLlxuICAgICAqL1xuICAgIF9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0aW9uIHN0YXRlLlxuICAgICAqL1xuICAgIF9zZWxlY3Rpb25TdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaGlsZHJlbjogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNoaWxkcmVuTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Nb2RlbDogTnVsbGFibGU8U2VsZWN0aW9uTW9kZU1vZGVsPjtcblxuICAgIC8qKiBASGlkZGVuICovXG4gICAgX2NvbnRhaW5lclRhYkluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNpemU6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50UG9zaXRpb246IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RvdGFsQ2hpbGRyZW5Mb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcGFyZW50SWQ6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xldmVsOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBhbnkgdHlwZSBvZiBjaGlsZCBub2Rlcy4gKi9cbiAgICBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY2hpbGROb2RlcyB8fCB0aGlzLmhhc1Byb2plY3RlZENoaWxkcmVuO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0cmVlIGl0ZW0gaGFzIGNvbnRlbnQtcHJvamVjdGVkIGNoaWxkIG5vZGVzLiAqL1xuICAgIGdldCBoYXNQcm9qZWN0ZWRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcyAmJiB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJlZSBpdGVtIGhhcyBkYXRhIHNvdXJjZSBjaGlsZHJlbi4gKi9cbiAgICBnZXQgaGFzRHNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RzQ2hpbGRyZW5OdW1iZXIgPiAwO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpdGVtIGlzIGFjY2Vzc2libGUgdmlhIGtleWJvYXJkLiAqL1xuICAgIGdldCBrZXlib2FyZEFjY2Vzc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRUcmVlSXRlbSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IHRoaXMuX3BhcmVudFRyZWVJdGVtLmtleWJvYXJkQWNjZXNzaWJsZSAmJiB0aGlzLl9wYXJlbnRUcmVlSXRlbS5leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RzQ2hpbGRyZW5OdW1iZXIgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGlja2VkJCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgLyoqIENsaWNrZWQgYmVoYXZpb3IgaW1wbGVtZW50YXRpb24uICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgICBjbGlja2VkID0gdGhpcy5fY2xpY2tlZCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVJdGVtRGlyID0gaW5qZWN0PFRyZWVJdGVtRGlyZWN0aXZlPFQsIFA+PihUcmVlSXRlbURpcmVjdGl2ZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmVlU2VydmljZSA9IGluamVjdChUcmVlU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VEaXJlY3RpdmUgPSBpbmplY3Q8RGF0YVNvdXJjZURpcmVjdGl2ZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+Pj4oRGF0YVNvdXJjZURpcmVjdGl2ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BhcmVudFRyZWVJdGVtID0gaW5qZWN0KFRyZWVJdGVtQ29tcG9uZW50LCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBza2lwU2VsZjogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fdHJlZUl0ZW1EaXI/LnNldFRyZWVJdGVtKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyZWVTZXJ2aWNlLnNlbGVjdGlvbk1vZGUucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgobW9kZWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbW9kZWw7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5uYXZpZ2F0aW9uSW5kaWNhdG9yLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2UgPSB0aGlzLmNoaWxkTm9kZXMgYXMgRGF0YVNvdXJjZTxULCBGZFRyZWVEYXRhU291cmNlPFQ+PjtcbiAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuYWRkRXhwYW5kYWJsZUl0ZW0odGhpcy5pZCwgdGhpcy5sZXZlbCwgdGhpcy5leHBhbmRlZCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXJcbiAgICAgICAgICAgID8uZ2V0VG90YWxJdGVtcygpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh0b3RhbEl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNDaGlsZHJlbk51bWJlciA9IHRvdGFsSXRlbXM7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG90YWxDaGlsZHJlbkxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZVByb3ZpZGVyPy5kYXRhUmVjZWl2ZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigocmVjZWl2ZWQpID0+IHJlY2VpdmVkKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhQ2hhbmdlZCQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSB0aGlzLl90cmVlU2VydmljZS5ub3JtYWxpemVUcmVlSXRlbXMoZGF0YSwgdGhpcy5pZCwgdGhpcy5sZXZlbCArIDEpIGFzIFRbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJlZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJvamVjdGVkVHJlZUl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aChudWxsKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0ZWRUcmVlSXRlbXMuZm9yRWFjaCgodHJlZUl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLnNldFBvc2l0aW9uKHRoaXMuX3Byb2plY3RlZFRyZWVJdGVtcy5sZW5ndGgsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmVlU2VydmljZS5yZW1vdmVFeHBhbmRhYmxlSXRlbSh0aGlzLmlkLCB0aGlzLmxldmVsISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIHRvdGFsSXRlbXMgVG90YWwgaXRlbXMgYW1vdW50IGluIHRoZSBzZXQuXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCBDdXJyZW50IGl0ZW0gcG9zaXRpb24gaW4gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXRQb3NpdGlvbih0b3RhbEl0ZW1zOiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFNpemUgPSB0b3RhbEl0ZW1zO1xuICAgICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBjdXJyZW50SW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0byBmb2N1cyBvbiB0aGUgdHJlZSBpdGVtLiAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIHRoZSBmb2N1c2FibGUgdGFiaW5kZXguICovXG4gICAgc2V0Q29udGFpbmVyVGFiSW5kZXgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb250YWluZXJUYWJJbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlRXhwYW5kU3RhdGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gRG8gbm90IGJ1YmJsZSB1cCB0byBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50LlxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLl9jbGlja2VkJC5uZXh0KGV2ZW50KTtcbiAgICAgICAgdGhpcy50cmVlSXRlbUNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvblN0YXRlID0gc2VsZWN0ZWQ7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtdHJlZV9faXRlbS1jb250YWluZXJcIlxuICAgIFthdHRyLnRhYmluZGV4XT1cIl9jb250YWluZXJUYWJJbmRleFwiXG4gICAgKGZka0NsaWNrZWQpPVwiX29uQ2xpY2soJGV2ZW50KVwiXG4gICAgZmRrU2VsZWN0YWJsZUl0ZW1cbiAgICAoc2VsZWN0ZWQpPVwiX3NldFNlbGVjdGVkKCRldmVudClcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJjaGlsZHJlbi5sZW5ndGggPiAwIHx8IGhhc1Byb2plY3RlZENoaWxkcmVuXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiX3NldFNpemVcIlxuICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiX2N1cnJlbnRQb3NpdGlvblwiXG4gICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsXCJcbiAgICAjaXRlbUNvbnRhaW5lclxuICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgc3RhdGUgPyAnaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3IgaGFzLWhpZ2hsaWdodC1pbmRpY2F0b3ItLScgKyBzdGF0ZSA6ICcnLFxuICAgICAgICBuYXZpZ2F0YWJsZSA/ICdmZC10cmVlX19pdGVtLWNvbnRhaW5lci0tYWN0aXZlJyA6ICcnLFxuICAgICAgICB3cmFwQ29udGVudCA/ICdmZC10cmVlX19jb250ZW50LS13cmFwJyA6ICcnXG4gICAgXVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ucGxhY2VtZW50ID09PSAnbGVmdCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NoaWxkcmVuXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImhhc0RzQ2hpbGRyZW4gfHwgaGFzUHJvamVjdGVkQ2hpbGRyZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIl90b2dnbGVFeHBhbmRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdHJlZV9fZXhwYW5kZXJcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZXhwYW5kZWQgPyAnY29yZVRyZWUuY29sbGFwc2UnIDogJ2NvcmVUcmVlLmV4cGFuZCcpIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRyZWVfX2ljb25cIlxuICAgICAgICAgICAgICAgIFtnbHlwaF09XCJleHBhbmRlZCA/ICduYXZpZ2F0aW9uLWRvd24tYXJyb3cnIDogJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnXCJcbiAgICAgICAgICAgID48L2ZkLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRyZWVfX2V4cGFuZGVyIGZkLXRyZWVfX2V4cGFuZGVyLS1sb2FkaW5nXCIgKm5nSWY9XCIhX3RvdGFsQ2hpbGRyZW5Mb2FkZWRcIj5cbiAgICAgICAgICAgIDxmZC1za2VsZXRvbiB0eXBlPVwicmVjdGFuZ2xlXCIgd2lkdGg9XCIxcmVtXCIgaGVpZ2h0PVwiMXJlbVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdhZnRlckV4cGFuZCdcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdHJlZV9fY29udGVudFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbUljb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRUcmVlSXRlbVRleHRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZFRyZWVJdGVtQnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5wbGFjZW1lbnQgPT09ICdyaWdodCdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGZkLWljb25cbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJmZC10cmVlX19pY29uIGZkLXRyZWVfX2ljb24tLW5hdmlnYXRpb25cIlxuICAgICAgICAqbmdJZj1cIm5hdmlnYXRhYmxlICYmIF9uYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICA+PC9mZC1pY29uPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNQcm9qZWN0ZWRDaGlsZHJlbiAmJiBleHBhbmRlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmZC10cmVlXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRyZWUtaXRlbVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdGlvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtZm9ybS1pdGVtXCI+XG4gICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXhWYWx1ZT1cIi0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiX3NlbGVjdGlvbk1vZGVsPy5tb2RlID09PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgPjwvZmQtY2hlY2tib3g+XG4gICAgICAgIDxmZC1yYWRpby1idXR0b25cbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiX3NlbGVjdGlvblN0YXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJfc2VsZWN0aW9uU3RhdGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4VmFsdWU9XCItMVwiXG4gICAgICAgICAgICAqbmdJZj1cIl9zZWxlY3Rpb25Nb2RlbD8ubW9kZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICA+PC9mZC1yYWRpby1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19