@sbb-esta/lyne-elements 2.0.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/accordion/accordion.d.ts.map +1 -1
  2. package/accordion.js +6 -6
  3. package/alert/alert.js +8 -8
  4. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  5. package/autocomplete-grid/autocomplete-grid-button.js +4 -4
  6. package/autocomplete-grid/autocomplete-grid-optgroup.js +4 -4
  7. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +1 -1
  8. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
  9. package/autocomplete-grid/autocomplete-grid-option.js +10 -10
  10. package/autocomplete-grid/autocomplete-grid-row.js +4 -4
  11. package/autocomplete.js +92 -89
  12. package/breadcrumb/breadcrumb-group.js +4 -4
  13. package/button/accent-button-link.js +9 -9
  14. package/button/accent-button-static.js +6 -6
  15. package/button/accent-button.js +6 -6
  16. package/button/button-link.js +7 -7
  17. package/button/button-static.js +7 -7
  18. package/button/button.js +8 -8
  19. package/button/common.js +1 -1
  20. package/button/mini-button-group.js +8 -8
  21. package/button/secondary-button-link.js +7 -7
  22. package/button/secondary-button-static.js +7 -7
  23. package/button/secondary-button.js +3 -3
  24. package/button/transparent-button-link.js +6 -6
  25. package/button/transparent-button-static.js +5 -5
  26. package/button/transparent-button.js +6 -6
  27. package/card/card-badge.js +9 -9
  28. package/card/card-button.js +5 -5
  29. package/card/card-link.js +7 -7
  30. package/checkbox/checkbox-panel.js +16 -16
  31. package/checkbox/checkbox.js +15 -15
  32. package/checkbox/common.js +3 -3
  33. package/clock.js +8 -8
  34. package/container/container/container.d.ts +1 -1
  35. package/container/container/container.d.ts.map +1 -1
  36. package/container/container.js +21 -21
  37. package/container/sticky-bar/sticky-bar.d.ts +1 -1
  38. package/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  39. package/container/sticky-bar.js +4 -4
  40. package/core/base-elements.js +8 -8
  41. package/core/controllers.js +4 -4
  42. package/core/datetime/date-adapter.d.ts +1 -1
  43. package/core/datetime/date-adapter.d.ts.map +1 -1
  44. package/core/datetime/native-date-adapter.d.ts +1 -1
  45. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  46. package/core/datetime.js +6 -6
  47. package/core/dom/scroll.d.ts +1 -1
  48. package/core/dom/scroll.d.ts.map +1 -1
  49. package/core/dom.js +39 -39
  50. package/core/eventing.js +4 -4
  51. package/core/mixins.js +18 -18
  52. package/core/styles/core.scss +21 -2
  53. package/core/testing.js +14 -14
  54. package/core.css +18 -2
  55. package/custom-elements.json +364 -428
  56. package/datepicker/common/datepicker-association-controllers.d.ts +21 -0
  57. package/datepicker/common/datepicker-association-controllers.d.ts.map +1 -0
  58. package/datepicker/common/datepicker-button.d.ts +17 -9
  59. package/datepicker/common/datepicker-button.d.ts.map +1 -1
  60. package/datepicker/common.d.ts +1 -0
  61. package/datepicker/common.d.ts.map +1 -1
  62. package/datepicker/common.js +130 -92
  63. package/datepicker/datepicker/datepicker.d.ts +19 -4
  64. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  65. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +14 -8
  66. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  67. package/datepicker/datepicker-toggle.js +108 -112
  68. package/datepicker/datepicker.js +95 -80
  69. package/development/accordion/accordion.d.ts.map +1 -1
  70. package/development/accordion.js +1 -1
  71. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  72. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts +1 -1
  73. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
  74. package/development/autocomplete-grid/autocomplete-grid-option.js +3 -3
  75. package/development/autocomplete.js +24 -8
  76. package/development/button/common.js +4 -2
  77. package/development/calendar.js +1 -1
  78. package/development/container/container/container.d.ts +1 -1
  79. package/development/container/container/container.d.ts.map +1 -1
  80. package/development/container/container.js +17 -1
  81. package/development/container/sticky-bar/sticky-bar.d.ts +1 -1
  82. package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -1
  83. package/development/container/sticky-bar.js +9 -1
  84. package/development/core/datetime/date-adapter.d.ts +1 -1
  85. package/development/core/datetime/date-adapter.d.ts.map +1 -1
  86. package/development/core/datetime/native-date-adapter.d.ts +1 -1
  87. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  88. package/development/core/datetime.js +1 -1
  89. package/development/core/dom/scroll.d.ts +1 -1
  90. package/development/core/dom/scroll.d.ts.map +1 -1
  91. package/development/core/dom.js +4 -4
  92. package/development/core/mixins.js +1 -1
  93. package/development/datepicker/common/datepicker-association-controllers.d.ts +21 -0
  94. package/development/datepicker/common/datepicker-association-controllers.d.ts.map +1 -0
  95. package/development/datepicker/common/datepicker-button.d.ts +17 -9
  96. package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
  97. package/development/datepicker/common.d.ts +1 -0
  98. package/development/datepicker/common.d.ts.map +1 -1
  99. package/development/datepicker/common.js +139 -90
  100. package/development/datepicker/datepicker/datepicker.d.ts +19 -4
  101. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  102. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +14 -8
  103. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  104. package/development/datepicker/datepicker-toggle.js +65 -69
  105. package/development/datepicker/datepicker.js +54 -36
  106. package/development/dialog/dialog/dialog.d.ts +2 -0
  107. package/development/dialog/dialog/dialog.d.ts.map +1 -1
  108. package/development/dialog/dialog.js +37 -11
  109. package/development/menu/menu/menu.d.ts.map +1 -1
  110. package/development/menu/menu.js +35 -12
  111. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  112. package/development/navigation/navigation.js +15 -8
  113. package/development/option/option/option-base-element.d.ts +3 -2
  114. package/development/option/option/option-base-element.d.ts.map +1 -1
  115. package/development/option/option.js +15 -8
  116. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  117. package/development/overlay/overlay.d.ts.map +1 -1
  118. package/development/overlay.js +29 -13
  119. package/development/popover/popover/popover.d.ts.map +1 -1
  120. package/development/popover/popover.js +16 -13
  121. package/development/select/select.d.ts +11 -0
  122. package/development/select/select.d.ts.map +1 -1
  123. package/development/select.js +60 -9
  124. package/development/toast/toast.d.ts.map +1 -1
  125. package/development/toast.js +14 -8
  126. package/development/toggle/toggle.js +1 -1
  127. package/development/train/train-wagon.js +1 -1
  128. package/dialog/dialog/dialog.d.ts +2 -0
  129. package/dialog/dialog/dialog.d.ts.map +1 -1
  130. package/dialog/dialog-content.js +3 -3
  131. package/dialog/dialog-title.js +8 -8
  132. package/dialog/dialog.js +59 -49
  133. package/divider.js +12 -12
  134. package/file-selector/file-selector-dropzone.js +5 -5
  135. package/file-selector/file-selector.js +6 -6
  136. package/flip-card/flip-card-details.js +4 -4
  137. package/flip-card/flip-card-summary.js +9 -9
  138. package/header/header-button.js +5 -5
  139. package/header/header-link.js +5 -5
  140. package/icon.js +36 -36
  141. package/link/block-link-button.js +4 -4
  142. package/link/block-link-static.js +9 -9
  143. package/link/block-link.js +4 -4
  144. package/link/common.js +16 -16
  145. package/link/link-button.js +7 -7
  146. package/link/link-static.js +7 -7
  147. package/link/link.js +4 -4
  148. package/link-list/common.js +12 -12
  149. package/loading-indicator-circle.js +11 -11
  150. package/map-container.js +4 -4
  151. package/menu/common.js +7 -7
  152. package/menu/menu/menu.d.ts.map +1 -1
  153. package/menu/menu-button.js +8 -8
  154. package/menu/menu-link.js +6 -6
  155. package/menu/menu.js +64 -42
  156. package/navigation/navigation/navigation.d.ts.map +1 -1
  157. package/navigation/navigation-button.js +4 -4
  158. package/navigation/navigation-link.js +7 -7
  159. package/navigation/navigation-list.js +4 -4
  160. package/navigation/navigation-marker.js +3 -3
  161. package/navigation/navigation.js +21 -20
  162. package/notification.js +17 -17
  163. package/option/optgroup.js +11 -11
  164. package/option/option/option-base-element.d.ts +3 -2
  165. package/option/option/option-base-element.d.ts.map +1 -1
  166. package/option/option.js +113 -101
  167. package/overlay/overlay-base-element.d.ts.map +1 -1
  168. package/overlay/overlay.d.ts.map +1 -1
  169. package/overlay.js +87 -84
  170. package/package.json +1 -1
  171. package/paginator/common.js +6 -6
  172. package/popover/popover/popover.d.ts.map +1 -1
  173. package/popover/popover.js +73 -73
  174. package/radio-button/radio-button-panel.js +5 -5
  175. package/screen-reader-only.js +5 -5
  176. package/select/select.d.ts +11 -0
  177. package/select/select.d.ts.map +1 -1
  178. package/select.js +111 -83
  179. package/slider.js +8 -8
  180. package/standard-theme.css +18 -2
  181. package/status.js +3 -3
  182. package/stepper/step-label.js +4 -4
  183. package/table/table-wrapper.js +4 -4
  184. package/tabs/tab-group.js +24 -24
  185. package/tabs/tab.js +3 -3
  186. package/tag/tag-group.js +7 -7
  187. package/teaser-product/common.js +5 -5
  188. package/teaser-product/teaser-product-static.js +2 -2
  189. package/timetable-occupancy-icon.js +3 -3
  190. package/timetable-occupancy.js +6 -6
  191. package/toast/toast.d.ts.map +1 -1
  192. package/toast.js +58 -54
  193. package/toggle/toggle-option.js +11 -11
  194. package/toggle-check.js +5 -5
  195. package/train/train.js +28 -28
@@ -10,7 +10,7 @@ import { css, nothing } from "lit";
10
10
  import { property, customElement } from "lit/decorators.js";
11
11
  import { html, unsafeStatic } from "lit/static-html.js";
12
12
  import { SbbFocusHandler, setModalityOnNextFocus, getFirstFocusableElement } from "./core/a11y.js";
13
- import { forceType } from "./core/decorators.js";
13
+ import { hostAttributes, forceType } from "./core/decorators.js";
14
14
  import { SbbScrollHandler, isZeroAnimationDuration } from "./core/dom.js";
15
15
  import { EventEmitter, forwardEvent } from "./core/eventing.js";
16
16
  import { i18nDialog, i18nCloseDialog, i18nGoBack } from "./core/i18n.js";
@@ -24,16 +24,22 @@ import "./screen-reader-only.js";
24
24
  const overlayRefs = [];
25
25
  let SbbOverlayBaseElement = (() => {
26
26
  var _accessibilityLabel_accessor_storage, _a;
27
+ let _classDecorators = [hostAttributes({
28
+ popover: "manual"
29
+ })];
30
+ let _classDescriptor;
31
+ let _classExtraInitializers = [];
32
+ let _classThis;
27
33
  let _classSuper = SbbNegativeMixin(SbbOpenCloseBaseElement);
28
34
  let _accessibilityLabel_decorators;
29
35
  let _accessibilityLabel_initializers = [];
30
36
  let _accessibilityLabel_extraInitializers = [];
31
- return _a = class extends _classSuper {
37
+ var SbbOverlayBaseElement2 = (_a = class extends _classSuper {
32
38
  constructor() {
33
39
  super(...arguments);
34
40
  __privateAdd(this, _accessibilityLabel_accessor_storage);
35
41
  __privateSet(this, _accessibilityLabel_accessor_storage, __runInitializers(this, _accessibilityLabel_initializers, ""));
36
- this.didClose = (__runInitializers(this, _accessibilityLabel_extraInitializers), new EventEmitter(this, _a.events.didClose));
42
+ this.didClose = (__runInitializers(this, _accessibilityLabel_extraInitializers), new EventEmitter(this, SbbOverlayBaseElement2.events.didClose));
37
43
  this.focusHandler = new SbbFocusHandler();
38
44
  this.scrollHandler = new SbbScrollHandler();
39
45
  this.ariaLiveRefToggle = false;
@@ -126,14 +132,18 @@ let SbbOverlayBaseElement = (() => {
126
132
  this.ariaLiveRefToggle = !this.ariaLiveRefToggle;
127
133
  this.ariaLiveRef.textContent = `${i18nDialog[this.language.current]}${label ? `, ${label}` : ""}${this.ariaLiveRefToggle ? " " : ""}`;
128
134
  }
129
- }, _accessibilityLabel_accessor_storage = new WeakMap(), (() => {
135
+ }, _accessibilityLabel_accessor_storage = new WeakMap(), _classThis = _a, (() => {
130
136
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
131
137
  _accessibilityLabel_decorators = [forceType(), property({ attribute: "accessibility-label" })];
132
138
  __esDecorate(_a, null, _accessibilityLabel_decorators, { kind: "accessor", name: "accessibilityLabel", static: false, private: false, access: { has: (obj) => "accessibilityLabel" in obj, get: (obj) => obj.accessibilityLabel, set: (obj, value) => {
133
139
  obj.accessibilityLabel = value;
134
140
  } }, metadata: _metadata }, _accessibilityLabel_initializers, _accessibilityLabel_extraInitializers);
135
- if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
136
- })(), _a;
141
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
142
+ SbbOverlayBaseElement2 = _classThis = _classDescriptor.value;
143
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
144
+ __runInitializers(_classThis, _classExtraInitializers);
145
+ })(), _a);
146
+ return SbbOverlayBaseElement2 = _classThis;
137
147
  })();
138
148
  const style = css`*,
139
149
  ::before,
@@ -158,13 +168,17 @@ const style = css`*,
158
168
  );
159
169
  --sbb-overlay-animation-easing: ease;
160
170
  --sbb-overlay-pointer-events: none;
161
- display: block;
171
+ display: none;
162
172
  position: fixed;
163
173
  inset: var(--sbb-overlay-inset);
164
174
  z-index: var(--sbb-overlay-z-index, var(--sbb-overlay-default-z-index));
165
175
  }
166
176
 
167
- :host(:is([data-state=opened], [data-state=opening])) {
177
+ :host([data-state]:not([data-state=closed])) {
178
+ display: block;
179
+ }
180
+
181
+ :host(:is([data-state=opening], [data-state=opened])) {
168
182
  --sbb-overlay-pointer-events: all;
169
183
  }
170
184
 
@@ -393,7 +407,7 @@ let SbbOverlayElement = (() => {
393
407
  }
394
408
  /** Opens the component. */
395
409
  open() {
396
- var _a2;
410
+ var _a2, _b;
397
411
  if (this.state !== "closed") {
398
412
  return;
399
413
  }
@@ -402,6 +416,7 @@ let SbbOverlayElement = (() => {
402
416
  if (!this.willOpen.emit()) {
403
417
  return;
404
418
  }
419
+ (_b = this.showPopover) == null ? void 0 : _b.call(this);
405
420
  this.state = "opening";
406
421
  overlayRefs.push(this);
407
422
  this.scrollHandler.disableScroll();
@@ -422,13 +437,14 @@ let SbbOverlayElement = (() => {
422
437
  this.didOpen.emit();
423
438
  }
424
439
  handleClosing() {
425
- var _a2, _b, _c;
440
+ var _a2, _b, _c, _d;
426
441
  (_a2 = this._overlayContentElement) == null ? void 0 : _a2.scrollTo(0, 0);
427
442
  this.state = "closed";
443
+ (_b = this.hidePopover) == null ? void 0 : _b.call(this);
428
444
  this.inertController.deactivate();
429
445
  setModalityOnNextFocus(this.lastFocusedElement);
430
- (_b = this.lastFocusedElement) == null ? void 0 : _b.focus();
431
- (_c = this.openOverlayController) == null ? void 0 : _c.abort();
446
+ (_c = this.lastFocusedElement) == null ? void 0 : _c.focus();
447
+ (_d = this.openOverlayController) == null ? void 0 : _d.abort();
432
448
  this.focusHandler.disconnect();
433
449
  this.removeInstanceFromGlobalCollection();
434
450
  if (!overlayRefs.length) {
@@ -539,4 +555,4 @@ export {
539
555
  SbbOverlayElement,
540
556
  overlayRefs
541
557
  };
542
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL292ZXJsYXkvb3ZlcmxheS1iYXNlLWVsZW1lbnQudHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvb3ZlcmxheS9vdmVybGF5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkZvY3VzSGFuZGxlciB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyB0eXBlIFNiYkJ1dHRvbkJhc2VFbGVtZW50LCBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJJbmVydENvbnRyb2xsZXIsIFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IFNiYlNjcm9sbEhhbmRsZXIgfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5EaWFsb2cgfSBmcm9tICcuLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPdmVybGF5Q2xvc2VFdmVudERldGFpbHMgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiTmVnYXRpdmVNaXhpbiB9IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQgfSBmcm9tICcuLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuXG4vLyBBIGdsb2JhbCBjb2xsZWN0aW9uIG9mIGV4aXN0aW5nIG92ZXJsYXlzLlxuZXhwb3J0IGNvbnN0IG92ZXJsYXlSZWZzOiBTYmJPdmVybGF5QmFzZUVsZW1lbnRbXSA9IFtdO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2JiT3ZlcmxheUJhc2VFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSByZWxldmFudCBuZXN0ZWQgZWxlbWVudCB0byBkZXNjcmliZSB0aGUgcHVycG9zZSBvZiB0aGUgb3ZlcmxheS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktbGFiZWwnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY2Nlc3NpYmlsaXR5TGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IGlzIGNsb3NlZC4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGRpZENsb3NlOiBFdmVudEVtaXR0ZXI8U2JiT3ZlcmxheUNsb3NlRXZlbnREZXRhaWxzPiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJPdmVybGF5QmFzZUVsZW1lbnQuZXZlbnRzLmRpZENsb3NlLFxuICApO1xuXG4gIC8vIFRoZSBsYXN0IGVsZW1lbnQgd2hpY2ggaGFkIGZvY3VzIGJlZm9yZSB0aGUgY29tcG9uZW50IHdhcyBvcGVuZWQuXG4gIHByb3RlY3RlZCBsYXN0Rm9jdXNlZEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJvdGVjdGVkIG92ZXJsYXlDbG9zZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHByb3RlY3RlZCBvdmVybGF5Q29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIG9wZW5PdmVybGF5Q29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGZvY3VzSGFuZGxlciA9IG5ldyBTYmJGb2N1c0hhbmRsZXIoKTtcbiAgcHJvdGVjdGVkIHNjcm9sbEhhbmRsZXIgPSBuZXcgU2JiU2Nyb2xsSGFuZGxlcigpO1xuICBwcm90ZWN0ZWQgcmV0dXJuVmFsdWU6IGFueTtcbiAgcHJvdGVjdGVkIGFyaWFMaXZlUmVmVG9nZ2xlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBhcmlhTGl2ZVJlZiE6IFNiYlNjcmVlblJlYWRlck9ubHlFbGVtZW50O1xuICBwcm90ZWN0ZWQgbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcm90ZWN0ZWQgaW5lcnRDb250cm9sbGVyID0gbmV3IFNiYkluZXJ0Q29udHJvbGxlcih0aGlzKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2xvc2VBdHRyaWJ1dGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG9uT3ZlcmxheUFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0T3ZlcmxheUZvY3VzKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBoYW5kbGVDbG9zaW5nKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuO1xuXG4gIC8qKiBDbG9zZXMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIGNsb3NlKHJlc3VsdD86IGFueSwgdGFyZ2V0PzogSFRNTEVsZW1lbnQpOiBhbnkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmV0dXJuVmFsdWUgPSByZXN1bHQ7XG4gICAgdGhpcy5vdmVybGF5Q2xvc2VFbGVtZW50ID0gdGFyZ2V0O1xuICAgIGNvbnN0IGV2ZW50RGF0YTogU2JiT3ZlcmxheUNsb3NlRXZlbnREZXRhaWxzID0ge1xuICAgICAgcmV0dXJuVmFsdWU6IHRoaXMucmV0dXJuVmFsdWUsXG4gICAgICBjbG9zZVRhcmdldDogdGhpcy5vdmVybGF5Q2xvc2VFbGVtZW50LFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMud2lsbENsb3NlLmVtaXQoZXZlbnREYXRhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMucmVtb3ZlQXJpYUxpdmVSZWZDb250ZW50KCk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgY2xvc2VkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLmhhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLm92ZXJsYXlDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMub3ZlcmxheUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHRoaXMuYXJpYUxpdmVSZWYgPVxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yPFNiYlNjcmVlblJlYWRlck9ubHlFbGVtZW50Pignc2JiLXNjcmVlbi1yZWFkZXItb25seScpITtcblxuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLm92ZXJsYXlDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuZm9jdXNIYW5kbGVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnJlbW92ZUluc3RhbmNlRnJvbUdsb2JhbENvbGxlY3Rpb24oKTtcbiAgICB0aGlzLnNjcm9sbEhhbmRsZXIuZW5hYmxlU2Nyb2xsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXR0YWNoT3Blbk92ZXJsYXlFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgLy8gUmVtb3ZlIG92ZXJsYXkgbGFiZWwgYXMgc29vbiBhcyBpdCBpcyBub3QgbmVlZGVkIGFueSBtb3JlIHRvIHByZXZlbnQgYWNjZXNzaW5nIGl0IHdpdGggYnJvd3NlIG1vZGUuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAna2V5ZG93bicsXG4gICAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVBcmlhTGl2ZVJlZkNvbnRlbnQoKTtcbiAgICAgICAgdGhpcy5vbktleWRvd25FdmVudChldmVudCk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaWduYWw6IHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLnJlbW92ZUFyaWFMaXZlUmVmQ29udGVudCgpLCB7XG4gICAgICBzaWduYWw6IHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbktleWRvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBvdmVybGF5UmVmc1tvdmVybGF5UmVmcy5sZW5ndGggLSAxXS5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZW1vdmVJbnN0YW5jZUZyb21HbG9iYWxDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIG92ZXJsYXlSZWZzLnNwbGljZShvdmVybGF5UmVmcy5pbmRleE9mKHRoaXMgYXMgU2JiT3ZlcmxheUJhc2VFbGVtZW50KSwgMSk7XG4gIH1cblxuICAvLyBDbG9zZSB0aGUgY29tcG9uZW50IG9uIGNsaWNrIG9mIGFueSBlbGVtZW50IHRoYXQgaGFzIHRoZSBgY2xvc2VBdHRyaWJ1dGVgIGF0dHJpYnV0ZS5cbiAgcHJvdGVjdGVkIGNsb3NlT25TYmJPdmVybGF5Q2xvc2VDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBvdmVybGF5Q2xvc2VFbGVtZW50ID0gZXZlbnRcbiAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgLmZpbHRlcigoZSk6IGUgaXMgSFRNTEVsZW1lbnQgPT4gZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudClcbiAgICAgIC5maW5kKFxuICAgICAgICAodGFyZ2V0KSA9PiB0YXJnZXQuaGFzQXR0cmlidXRlKHRoaXMuY2xvc2VBdHRyaWJ1dGUpICYmICF0YXJnZXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpLFxuICAgICAgKTtcblxuICAgIGlmICghb3ZlcmxheUNsb3NlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgaXMgYSBzdWJtaXNzaW9uIGVsZW1lbnQgd2l0aGluIGEgZm9ybSBhbmQgcmV0dXJuIHRoZSBmb3JtLCBpZiBwcmVzZW50XG4gICAgY29uc3QgY2xvc2VzdEZvcm0gPVxuICAgICAgb3ZlcmxheUNsb3NlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ3N1Ym1pdCdcbiAgICAgICAgPyAoKG92ZXJsYXlDbG9zZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQgfCBTYmJCdXR0b25CYXNlRWxlbWVudCkuZm9ybSA/PyBudWxsKVxuICAgICAgICA6IG51bGw7XG4gICAgb3ZlcmxheVJlZnNbb3ZlcmxheVJlZnMubGVuZ3RoIC0gMV0uY2xvc2UoY2xvc2VzdEZvcm0sIG92ZXJsYXlDbG9zZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUFyaWFMaXZlUmVmQ29udGVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmFyaWFMaXZlUmVmLnRleHRDb250ZW50ID0gJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0QXJpYUxpdmVSZWZDb250ZW50KGxhYmVsPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hcmlhTGl2ZVJlZlRvZ2dsZSA9ICF0aGlzLmFyaWFMaXZlUmVmVG9nZ2xlO1xuXG4gICAgLy8gSWYgdGhlIHRleHQgY29udGVudCByZW1haW5zIHRoZSBzYW1lLCBvbiBWb2ljZU92ZXIgdGhlIGFyaWEtbGl2ZSByZWdpb24gaXMgbm90IGFubm91bmNlZCBhIHNlY29uZCB0aW1lLlxuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhZGluZyBvbiBldmVyeSBvcGVuaW5nLCB3ZSB0b2dnbGUgYW4gaW52aXNpYmxlIHNwYWNlLlxuICAgIHRoaXMuYXJpYUxpdmVSZWYudGV4dENvbnRlbnQgPSBgJHtpMThuRGlhbG9nW3RoaXMubGFuZ3VhZ2UuY3VycmVudF19JHtcbiAgICAgIGxhYmVsID8gYCwgJHtsYWJlbH1gIDogJydcbiAgICB9JHt0aGlzLmFyaWFMaXZlUmVmVG9nZ2xlID8gJ8KgJyA6ICcnfWA7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBodG1sLCB1bnNhZmVTdGF0aWMgfSBmcm9tICdsaXQvc3RhdGljLWh0bWwuanMnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQsIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMgfSBmcm9tICcuLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBmb3J3YXJkRXZlbnQgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5DbG9zZURpYWxvZywgaTE4bkdvQmFjayB9IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5cbmltcG9ydCB7IG92ZXJsYXlSZWZzLCBTYmJPdmVybGF5QmFzZUVsZW1lbnQgfSBmcm9tICcuL292ZXJsYXktYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL292ZXJsYXkuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi9idXR0b24vc2Vjb25kYXJ5LWJ1dHRvbi5qcyc7XG5pbXBvcnQgJy4uL2J1dHRvbi90cmFuc3BhcmVudC1idXR0b24uanMnO1xuaW1wb3J0ICcuLi9jb250YWluZXIuanMnO1xuaW1wb3J0ICcuLi9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGFuIGludGVyYWN0aXZlIG92ZXJsYXkgZWxlbWVudC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIHByb3ZpZGUgYSBjb250ZW50IGZvciB0aGUgb3ZlcmxheS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItb3ZlcmxheWAgc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1vdmVybGF5YCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1vdmVybGF5YCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDxTYmJPdmVybGF5Q2xvc2VFdmVudERldGFpbHM+fSBkaWRDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLW92ZXJsYXlgIGlzIGNsb3NlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHJlcXVlc3RCYWNrQWN0aW9uIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItb3ZlcmxheS16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1vdmVybGF5JylcbmNsYXNzIFNiYk92ZXJsYXlFbGVtZW50IGV4dGVuZHMgU2JiT3ZlcmxheUJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLy8gVE9ETzogZml4IHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgd2lsbE9wZW46ICd3aWxsT3BlbicsXG4gICAgZGlkT3BlbjogJ2RpZE9wZW4nLFxuICAgIHdpbGxDbG9zZTogJ3dpbGxDbG9zZScsXG4gICAgZGlkQ2xvc2U6ICdkaWRDbG9zZScsXG4gICAgYmFja0NsaWNrOiAncmVxdWVzdEJhY2tBY3Rpb24nLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IHRoZSBvdmVybGF5IGNvbnRlbnQgdG8gc3RyZXRjaCB0byBmdWxsIHdpZHRoLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgY29udGVudCBoYXMgdGhlIGFwcHJvcHJpYXRlIHBhZ2Ugc2l6ZS5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBleHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIGEgYmFjayBidXR0b24gaXMgZGlzcGxheWVkIG5leHQgdG8gdGhlIHRpdGxlLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYmFjay1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBiYWNrQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgY2xvc2UgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWNsb3NlLWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIGJhY2sgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWJhY2stbGFiZWwnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY2Nlc3NpYmlsaXR5QmFja0xhYmVsOiBzdHJpbmcgPSAnJztcblxuICBwcm90ZWN0ZWQgY2xvc2VBdHRyaWJ1dGU6IHN0cmluZyA9ICdzYmItb3ZlcmxheS1jbG9zZSc7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICBwcml2YXRlIF9iYWNrQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk92ZXJsYXlFbGVtZW50LmV2ZW50cy5iYWNrQ2xpY2ssXG4gICk7XG4gIHByaXZhdGUgX292ZXJsYXlDb250ZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogT3BlbnMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFzdEZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIHRoaXMuX292ZXJsYXlDb250ZW50RWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2JiLW92ZXJsYXlfX2NvbnRlbnQnLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG5cbiAgICAvLyBBZGQgdGhpcyBvdmVybGF5IHRvIHRoZSBnbG9iYWwgY29sbGVjdGlvblxuICAgIG92ZXJsYXlSZWZzLnB1c2godGhpcyBhcyBTYmJPdmVybGF5RWxlbWVudCk7XG5cbiAgICAvLyBEaXNhYmxlIHNjcm9sbGluZyBmb3IgY29udGVudCBiZWxvdyB0aGUgb3ZlcmxheVxuICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5kaXNhYmxlU2Nyb2xsKCk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1plcm9BbmltYXRpb25EdXJhdGlvbih0aGlzLCAnLS1zYmItb3ZlcmxheS1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuaW5lcnRDb250cm9sbGVyLmFjdGl2YXRlKCk7XG4gICAgdGhpcy5hdHRhY2hPcGVuT3ZlcmxheUV2ZW50cygpO1xuICAgIHRoaXMuc2V0T3ZlcmxheUZvY3VzKCk7XG4gICAgLy8gVXNlIHRpbWVvdXQgdG8gcmVhZCBsYWJlbCBhZnRlciBmb2N1c2VkIGVsZW1lbnRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0QXJpYUxpdmVSZWZDb250ZW50KHRoaXMuYWNjZXNzaWJpbGl0eUxhYmVsKSk7XG4gICAgdGhpcy5mb2N1c0hhbmRsZXIudHJhcCh0aGlzKTtcbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGhhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fb3ZlcmxheUNvbnRlbnRFbGVtZW50Py5zY3JvbGxUbygwLCAwKTtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5pbmVydENvbnRyb2xsZXIuZGVhY3RpdmF0ZSgpO1xuICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXModGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQpO1xuICAgIC8vIE1hbnVhbGx5IGZvY3VzIGxhc3QgZm9jdXNlZCBlbGVtZW50XG4gICAgdGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMucmVtb3ZlSW5zdGFuY2VGcm9tR2xvYmFsQ29sbGVjdGlvbigpO1xuICAgIC8vIEVuYWJsZSBzY3JvbGxpbmcgZm9yIGNvbnRlbnQgYmVsb3cgdGhlIG92ZXJsYXkgaWYgbm8gb3ZlcmxheSBpcyBvcGVuXG4gICAgaWYgKCFvdmVybGF5UmVmcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgICB9XG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KHtcbiAgICAgIHJldHVyblZhbHVlOiB0aGlzLnJldHVyblZhbHVlLFxuICAgICAgY2xvc2VUYXJnZXQ6IHRoaXMub3ZlcmxheUNsb3NlRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdhaXQgZm9yIG92ZXJsYXkgdHJhbnNpdGlvbiB0byBjb21wbGV0ZS5cbiAgLy8gSW4gcmFyZSBjYXNlcywgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJvdGVjdGVkIG9uT3ZlcmxheUFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBmb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQuXG4gIHByb3RlY3RlZCBzZXRPdmVybGF5Rm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdCEuY2hpbGRyZW4pLmZpbHRlcihcbiAgICAgICAgKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+IGUgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQsXG4gICAgICApLFxuICAgICk7XG4gICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhmaXJzdEZvY3VzYWJsZSk7XG4gICAgZmlyc3RGb2N1c2FibGU/LmZvY3VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBUQUdfTkFNRSA9IHRoaXMubmVnYXRpdmUgPyAnc2JiLXRyYW5zcGFyZW50LWJ1dHRvbicgOiAnc2JiLXNlY29uZGFyeS1idXR0b24nO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbGl0L2JpbmRpbmctcG9zaXRpb25zICovXG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBodG1sYFxuICAgICAgPCR7dW5zYWZlU3RhdGljKFRBR19OQU1FKX1cbiAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fY2xvc2VcIlxuICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbCB8fCBpMThuQ2xvc2VEaWFsb2dbdGhpcy5sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgP25lZ2F0aXZlPSR7dGhpcy5uZWdhdGl2ZX1cbiAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWNvbi1uYW1lPVwiY3Jvc3Mtc21hbGxcIlxuICAgICAgICBzYmItb3ZlcmxheS1jbG9zZVxuICAgICAgPjwvJHt1bnNhZmVTdGF0aWMoVEFHX05BTUUpfT5cbiAgICBgO1xuXG4gICAgY29uc3QgYmFja0J1dHRvbiA9IGh0bWxgXG4gICAgICA8JHt1bnNhZmVTdGF0aWMoVEFHX05BTUUpfVxuICAgICAgICBjbGFzcz1cInNiYi1vdmVybGF5X19iYWNrXCJcbiAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUJhY2tMYWJlbCB8fCBpMThuR29CYWNrW3RoaXMubGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgID9uZWdhdGl2ZT0ke3RoaXMubmVnYXRpdmV9XG4gICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGljb24tbmFtZT1cImNoZXZyb24tc21hbGwtbGVmdC1zbWFsbFwiXG4gICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX2JhY2tDbGljay5lbWl0KCl9XG4gICAgICA+PC8ke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRSl9PlxuICAgIGA7XG4gICAgLyogZXNsaW50LWVuYWJsZSBsaXQvYmluZGluZy1wb3NpdGlvbnMgKi9cblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5X19jb250YWluZXJcIiBAYW5pbWF0aW9uZW5kPSR7dGhpcy5vbk92ZXJsYXlBbmltYXRpb25FbmR9PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLW92ZXJsYXlcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLmNsb3NlT25TYmJPdmVybGF5Q2xvc2VDbGljayhldmVudCl9XG4gICAgICAgICAgICBjbGFzcz1cInNiYi1vdmVybGF5X193cmFwcGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLW92ZXJsYXlfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAke3RoaXMuYmFja0J1dHRvbiA/IGJhY2tCdXR0b24gOiBub3RoaW5nfSAke2Nsb3NlQnV0dG9ufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLW92ZXJsYXlfX2NvbnRlbnRcIiBAc2Nyb2xsPSR7KGU6IEV2ZW50KSA9PiBmb3J3YXJkRXZlbnQoZSwgZG9jdW1lbnQpfT5cbiAgICAgICAgICAgICAgPHNiYi1jb250YWluZXJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1vdmVybGF5X19jb250ZW50LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgP2V4cGFuZGVkPSR7dGhpcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgICBjb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgICAgPC9zYmItY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seSBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLW92ZXJsYXknOiBTYmJPdmVybGF5RWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNiYk92ZXJsYXlCYXNlRWxlbWVudCIsIl9hIiwiU2JiT3ZlcmxheUVsZW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZU8sTUFBTSxjQUF1QyxDQUFBO0lBRTlCLHlCQUFxQixNQUFBOztvQkFBUyxpQkFBaUIsdUJBQXVCOzs7O0FBQXRFLFNBQUEsbUJBQThCLFlBQXlDO0FBQUE7O0FBSTNGO0FBQWdCLHlCQUFBLHNDQUFBLGtCQUFBLE1BQUEsa0NBQTZCLEVBQUU7QUFHNUIsV0FBQSxZQUFzRCxrQkFBQSxNQUFBLHFDQUFBLEdBQUEsSUFBSSxhQUMzRSxNQUNBQSxHQUFzQixPQUFPLFFBQVE7QUFTN0IsV0FBQSxlQUFlLElBQUksZ0JBQWU7QUFDbEMsV0FBQSxnQkFBZ0IsSUFBSSxpQkFBZ0I7QUFFcEMsV0FBaUIsb0JBQUc7QUFFcEIsV0FBQSxXQUFXLElBQUksc0JBQXNCLElBQUk7QUFDekMsV0FBQSxrQkFBa0IsSUFBSSxtQkFBbUIsSUFBSTtBQUFBLElBQUE7QUFBQTtBQUFB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
558
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL292ZXJsYXkvb3ZlcmxheS1iYXNlLWVsZW1lbnQudHMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvb3ZlcmxheS9vdmVybGF5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgUHJvcGVydHlWYWx1ZXMgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkZvY3VzSGFuZGxlciB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyB0eXBlIFNiYkJ1dHRvbkJhc2VFbGVtZW50LCBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJJbmVydENvbnRyb2xsZXIsIFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBob3N0QXR0cmlidXRlcyB9IGZyb20gJy4uL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBTYmJTY3JvbGxIYW5kbGVyIH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuRGlhbG9nIH0gZnJvbSAnLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3ZlcmxheUNsb3NlRXZlbnREZXRhaWxzIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IFNiYk5lZ2F0aXZlTWl4aW4gfSBmcm9tICcuLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYlNjcmVlblJlYWRlck9ubHlFbGVtZW50IH0gZnJvbSAnLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuLy8gQSBnbG9iYWwgY29sbGVjdGlvbiBvZiBleGlzdGluZyBvdmVybGF5cy5cbmV4cG9ydCBjb25zdCBvdmVybGF5UmVmczogU2JiT3ZlcmxheUJhc2VFbGVtZW50W10gPSBbXTtcblxuZXhwb3J0XG5AaG9zdEF0dHJpYnV0ZXMoe1xuICBwb3BvdmVyOiAnbWFudWFsJyxcbn0pXG5hYnN0cmFjdCBjbGFzcyBTYmJPdmVybGF5QmFzZUVsZW1lbnQgZXh0ZW5kcyBTYmJOZWdhdGl2ZU1peGluKFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50KSB7XG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIGFzIGFyaWEtbGFiZWwgdG8gdGhlIHJlbGV2YW50IG5lc3RlZCBlbGVtZW50IHRvIGRlc2NyaWJlIHRoZSBwdXJwb3NlIG9mIHRoZSBvdmVybGF5LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlMYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgaXMgY2xvc2VkLiAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGlkQ2xvc2U6IEV2ZW50RW1pdHRlcjxTYmJPdmVybGF5Q2xvc2VFdmVudERldGFpbHM+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYk92ZXJsYXlCYXNlRWxlbWVudC5ldmVudHMuZGlkQ2xvc2UsXG4gICk7XG5cbiAgLy8gVGhlIGxhc3QgZWxlbWVudCB3aGljaCBoYWQgZm9jdXMgYmVmb3JlIHRoZSBjb21wb25lbnQgd2FzIG9wZW5lZC5cbiAgcHJvdGVjdGVkIGxhc3RGb2N1c2VkRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICBwcm90ZWN0ZWQgb3ZlcmxheUNsb3NlRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgcHJvdGVjdGVkIG92ZXJsYXlDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgb3Blbk92ZXJsYXlDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgZm9jdXNIYW5kbGVyID0gbmV3IFNiYkZvY3VzSGFuZGxlcigpO1xuICBwcm90ZWN0ZWQgc2Nyb2xsSGFuZGxlciA9IG5ldyBTYmJTY3JvbGxIYW5kbGVyKCk7XG4gIHByb3RlY3RlZCByZXR1cm5WYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgYXJpYUxpdmVSZWZUb2dnbGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFyaWFMaXZlUmVmITogU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQ7XG4gIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByb3RlY3RlZCBpbmVydENvbnRyb2xsZXIgPSBuZXcgU2JiSW5lcnRDb250cm9sbGVyKHRoaXMpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjbG9zZUF0dHJpYnV0ZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25PdmVybGF5QW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRPdmVybGF5Rm9jdXMoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGhhbmRsZUNsb3NpbmcoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCk6IGJvb2xlYW47XG5cbiAgLyoqIENsb3NlcyB0aGUgY29tcG9uZW50LiAqL1xuICBwdWJsaWMgY2xvc2UocmVzdWx0PzogYW55LCB0YXJnZXQ/OiBIVE1MRWxlbWVudCk6IGFueSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXR1cm5WYWx1ZSA9IHJlc3VsdDtcbiAgICB0aGlzLm92ZXJsYXlDbG9zZUVsZW1lbnQgPSB0YXJnZXQ7XG4gICAgY29uc3QgZXZlbnREYXRhOiBTYmJPdmVybGF5Q2xvc2VFdmVudERldGFpbHMgPSB7XG4gICAgICByZXR1cm5WYWx1ZTogdGhpcy5yZXR1cm5WYWx1ZSxcbiAgICAgIGNsb3NlVGFyZ2V0OiB0aGlzLm92ZXJsYXlDbG9zZUVsZW1lbnQsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy53aWxsQ2xvc2UuZW1pdChldmVudERhdGEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5yZW1vdmVBcmlhTGl2ZVJlZkNvbnRlbnQoKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLmlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMub3ZlcmxheUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5vdmVybGF5Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgdGhpcy5hcmlhTGl2ZVJlZiA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3I8U2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQ+KCdzYmItc2NyZWVuLXJlYWRlci1vbmx5JykhO1xuXG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMub3ZlcmxheUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMucmVtb3ZlSW5zdGFuY2VGcm9tR2xvYmFsQ29sbGVjdGlvbigpO1xuICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5lbmFibGVTY3JvbGwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdHRhY2hPcGVuT3ZlcmxheUV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5PdmVybGF5Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAvLyBSZW1vdmUgb3ZlcmxheSBsYWJlbCBhcyBzb29uIGFzIGl0IGlzIG5vdCBuZWVkZWQgYW55IG1vcmUgdG8gcHJldmVudCBhY2Nlc3NpbmcgaXQgd2l0aCBicm93c2UgbW9kZS5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUFyaWFMaXZlUmVmQ29udGVudCgpO1xuICAgICAgICB0aGlzLm9uS2V5ZG93bkV2ZW50KGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSxcbiAgICApO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMucmVtb3ZlQXJpYUxpdmVSZWZDb250ZW50KCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5vcGVuT3ZlcmxheUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uS2V5ZG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIG92ZXJsYXlSZWZzW292ZXJsYXlSZWZzLmxlbmd0aCAtIDFdLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUluc3RhbmNlRnJvbUdsb2JhbENvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgb3ZlcmxheVJlZnMuc3BsaWNlKG92ZXJsYXlSZWZzLmluZGV4T2YodGhpcyBhcyBTYmJPdmVybGF5QmFzZUVsZW1lbnQpLCAxKTtcbiAgfVxuXG4gIC8vIENsb3NlIHRoZSBjb21wb25lbnQgb24gY2xpY2sgb2YgYW55IGVsZW1lbnQgdGhhdCBoYXMgdGhlIGBjbG9zZUF0dHJpYnV0ZWAgYXR0cmlidXRlLlxuICBwcm90ZWN0ZWQgY2xvc2VPblNiYk92ZXJsYXlDbG9zZUNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG92ZXJsYXlDbG9zZUVsZW1lbnQgPSBldmVudFxuICAgICAgLmNvbXBvc2VkUGF0aCgpXG4gICAgICAuZmlsdGVyKChlKTogZSBpcyBIVE1MRWxlbWVudCA9PiBlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KVxuICAgICAgLmZpbmQoXG4gICAgICAgICh0YXJnZXQpID0+IHRhcmdldC5oYXNBdHRyaWJ1dGUodGhpcy5jbG9zZUF0dHJpYnV0ZSkgJiYgIXRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJyksXG4gICAgICApO1xuXG4gICAgaWYgKCFvdmVybGF5Q2xvc2VFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhIHN1Ym1pc3Npb24gZWxlbWVudCB3aXRoaW4gYSBmb3JtIGFuZCByZXR1cm4gdGhlIGZvcm0sIGlmIHByZXNlbnRcbiAgICBjb25zdCBjbG9zZXN0Rm9ybSA9XG4gICAgICBvdmVybGF5Q2xvc2VFbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnc3VibWl0J1xuICAgICAgICA/ICgob3ZlcmxheUNsb3NlRWxlbWVudCBhcyBIVE1MQnV0dG9uRWxlbWVudCB8IFNiYkJ1dHRvbkJhc2VFbGVtZW50KS5mb3JtID8/IG51bGwpXG4gICAgICAgIDogbnVsbDtcbiAgICBvdmVybGF5UmVmc1tvdmVybGF5UmVmcy5sZW5ndGggLSAxXS5jbG9zZShjbG9zZXN0Rm9ybSwgb3ZlcmxheUNsb3NlRWxlbWVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlQXJpYUxpdmVSZWZDb250ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuYXJpYUxpdmVSZWYudGV4dENvbnRlbnQgPSAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRBcmlhTGl2ZVJlZkNvbnRlbnQobGFiZWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFyaWFMaXZlUmVmVG9nZ2xlID0gIXRoaXMuYXJpYUxpdmVSZWZUb2dnbGU7XG5cbiAgICAvLyBJZiB0aGUgdGV4dCBjb250ZW50IHJlbWFpbnMgdGhlIHNhbWUsIG9uIFZvaWNlT3ZlciB0aGUgYXJpYS1saXZlIHJlZ2lvbiBpcyBub3QgYW5ub3VuY2VkIGEgc2Vjb25kIHRpbWUuXG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFkaW5nIG9uIGV2ZXJ5IG9wZW5pbmcsIHdlIHRvZ2dsZSBhbiBpbnZpc2libGUgc3BhY2UuXG4gICAgdGhpcy5hcmlhTGl2ZVJlZi50ZXh0Q29udGVudCA9IGAke2kxOG5EaWFsb2dbdGhpcy5sYW5ndWFnZS5jdXJyZW50XX0ke1xuICAgICAgbGFiZWwgPyBgLCAke2xhYmVsfWAgOiAnJ1xuICAgIH0ke3RoaXMuYXJpYUxpdmVSZWZUb2dnbGUgPyAnwqAnIDogJyd9YDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIHVuc2FmZVN0YXRpYyB9IGZyb20gJ2xpdC9zdGF0aWMtaHRtbC5qcyc7XG5cbmltcG9ydCB7IGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCwgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyB9IGZyb20gJy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24gfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIGZvcndhcmRFdmVudCB9IGZyb20gJy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHsgaTE4bkNsb3NlRGlhbG9nLCBpMThuR29CYWNrIH0gZnJvbSAnLi4vY29yZS9pMThuLmpzJztcblxuaW1wb3J0IHsgb3ZlcmxheVJlZnMsIFNiYk92ZXJsYXlCYXNlRWxlbWVudCB9IGZyb20gJy4vb3ZlcmxheS1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vb3ZlcmxheS5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJy4uL2J1dHRvbi9zZWNvbmRhcnktYnV0dG9uLmpzJztcbmltcG9ydCAnLi4vYnV0dG9uL3RyYW5zcGFyZW50LWJ1dHRvbi5qcyc7XG5pbXBvcnQgJy4uL2NvbnRhaW5lci5qcyc7XG5pbXBvcnQgJy4uL3NjcmVlbi1yZWFkZXItb25seS5qcyc7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaW50ZXJhY3RpdmUgb3ZlcmxheSBlbGVtZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gcHJvdmlkZSBhIGNvbnRlbnQgZm9yIHRoZSBvdmVybGF5LlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1vdmVybGF5YCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLW92ZXJsYXlgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLW92ZXJsYXlgIGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiBDYW4gYmUgY2FuY2VsZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYk92ZXJsYXlDbG9zZUV2ZW50RGV0YWlscz59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItb3ZlcmxheWAgaXMgY2xvc2VkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gcmVxdWVzdEJhY2tBY3Rpb24gLSBFbWl0cyB3aGVuZXZlciB0aGUgYmFjayBidXR0b24gaXMgY2xpY2tlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1vdmVybGF5LXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLW92ZXJsYXknKVxuY2xhc3MgU2JiT3ZlcmxheUVsZW1lbnQgZXh0ZW5kcyBTYmJPdmVybGF5QmFzZUVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvLyBUT0RPOiBmaXggdXNpbmcgLi4uc3VwZXIuZXZlbnRzIHJlcXVpcmVzOiBodHRwczovL2dpdGh1Yi5jb20vc2JiLWRlc2lnbi1zeXN0ZW1zL2x5bmUtY29tcG9uZW50cy9pc3N1ZXMvMjYwMFxuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICB3aWxsT3BlbjogJ3dpbGxPcGVuJyxcbiAgICBkaWRPcGVuOiAnZGlkT3BlbicsXG4gICAgd2lsbENsb3NlOiAnd2lsbENsb3NlJyxcbiAgICBkaWRDbG9zZTogJ2RpZENsb3NlJyxcbiAgICBiYWNrQ2xpY2s6ICdyZXF1ZXN0QmFja0FjdGlvbicsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgdGhlIG92ZXJsYXkgY29udGVudCB0byBzdHJldGNoIHRvIGZ1bGwgd2lkdGguXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBjb250ZW50IGhhcyB0aGUgYXBwcm9wcmlhdGUgcGFnZSBzaXplLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgYSBiYWNrIGJ1dHRvbiBpcyBkaXNwbGF5ZWQgbmV4dCB0byB0aGUgdGl0bGUuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdiYWNrLWJ1dHRvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGJhY2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSBjbG9zZSBidXR0b24gZWxlbWVudC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktY2xvc2UtbGFiZWwnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgYmFjayBidXR0b24gZWxlbWVudC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktYmFjay1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlCYWNrTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIHByb3RlY3RlZCBjbG9zZUF0dHJpYnV0ZTogc3RyaW5nID0gJ3NiYi1vdmVybGF5LWNsb3NlJztcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gIHByaXZhdGUgX2JhY2tDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiT3ZlcmxheUVsZW1lbnQuZXZlbnRzLmJhY2tDbGljayxcbiAgKTtcbiAgcHJpdmF0ZSBfb3ZlcmxheUNvbnRlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPcGVucyB0aGUgY29tcG9uZW50LiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYXN0Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgdGhpcy5fb3ZlcmxheUNvbnRlbnRFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5zYmItb3ZlcmxheV9fY29udGVudCcsXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICghdGhpcy53aWxsT3Blbi5lbWl0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuXG4gICAgLy8gQWRkIHRoaXMgb3ZlcmxheSB0byB0aGUgZ2xvYmFsIGNvbGxlY3Rpb25cbiAgICBvdmVybGF5UmVmcy5wdXNoKHRoaXMgYXMgU2JiT3ZlcmxheUVsZW1lbnQpO1xuXG4gICAgLy8gRGlzYWJsZSBzY3JvbGxpbmcgZm9yIGNvbnRlbnQgYmVsb3cgdGhlIG92ZXJsYXlcbiAgICB0aGlzLnNjcm9sbEhhbmRsZXIuZGlzYWJsZVNjcm9sbCgpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLW92ZXJsYXktYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLmluZXJ0Q29udHJvbGxlci5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuYXR0YWNoT3Blbk92ZXJsYXlFdmVudHMoKTtcbiAgICB0aGlzLnNldE92ZXJsYXlGb2N1cygpO1xuICAgIC8vIFVzZSB0aW1lb3V0IHRvIHJlYWQgbGFiZWwgYWZ0ZXIgZm9jdXNlZCBlbGVtZW50XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEFyaWFMaXZlUmVmQ29udGVudCh0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbCkpO1xuICAgIHRoaXMuZm9jdXNIYW5kbGVyLnRyYXAodGhpcyk7XG4gICAgdGhpcy5kaWRPcGVuLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBoYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX292ZXJsYXlDb250ZW50RWxlbWVudD8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuaGlkZVBvcG92ZXI/LigpO1xuICAgIHRoaXMuaW5lcnRDb250cm9sbGVyLmRlYWN0aXZhdGUoKTtcbiAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMubGFzdEZvY3VzZWRFbGVtZW50KTtcbiAgICAvLyBNYW51YWxseSBmb2N1cyBsYXN0IGZvY3VzZWQgZWxlbWVudFxuICAgIHRoaXMubGFzdEZvY3VzZWRFbGVtZW50Py5mb2N1cygpO1xuICAgIHRoaXMub3Blbk92ZXJsYXlDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuZm9jdXNIYW5kbGVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnJlbW92ZUluc3RhbmNlRnJvbUdsb2JhbENvbGxlY3Rpb24oKTtcbiAgICAvLyBFbmFibGUgc2Nyb2xsaW5nIGZvciBjb250ZW50IGJlbG93IHRoZSBvdmVybGF5IGlmIG5vIG92ZXJsYXkgaXMgb3BlblxuICAgIGlmICghb3ZlcmxheVJlZnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNjcm9sbEhhbmRsZXIuZW5hYmxlU2Nyb2xsKCk7XG4gICAgfVxuICAgIHRoaXMuZGlkQ2xvc2UuZW1pdCh7XG4gICAgICByZXR1cm5WYWx1ZTogdGhpcy5yZXR1cm5WYWx1ZSxcbiAgICAgIGNsb3NlVGFyZ2V0OiB0aGlzLm92ZXJsYXlDbG9zZUVsZW1lbnQsXG4gICAgfSk7XG4gIH1cblxuICAvLyBXYWl0IGZvciBvdmVybGF5IHRyYW5zaXRpb24gdG8gY29tcGxldGUuXG4gIC8vIEluIHJhcmUgY2FzZXMsIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByb3RlY3RlZCBvbk92ZXJsYXlBbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLmhhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgZm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50LlxuICBwcm90ZWN0ZWQgc2V0T3ZlcmxheUZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QhLmNoaWxkcmVuKS5maWx0ZXIoXG4gICAgICAgIChlKTogZSBpcyBIVE1MRWxlbWVudCA9PiBlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50LFxuICAgICAgKSxcbiAgICApO1xuICAgIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMoZmlyc3RGb2N1c2FibGUpO1xuICAgIGZpcnN0Rm9jdXNhYmxlPy5mb2N1cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgVEFHX05BTUUgPSB0aGlzLm5lZ2F0aXZlID8gJ3NiYi10cmFuc3BhcmVudC1idXR0b24nIDogJ3NiYi1zZWNvbmRhcnktYnV0dG9uJztcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGxpdC9iaW5kaW5nLXBvc2l0aW9ucyAqL1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gaHRtbGBcbiAgICAgIDwke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRSl9XG4gICAgICAgIGNsYXNzPVwic2JiLW92ZXJsYXlfX2Nsb3NlXCJcbiAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWwgfHwgaTE4bkNsb3NlRGlhbG9nW3RoaXMubGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgID9uZWdhdGl2ZT0ke3RoaXMubmVnYXRpdmV9XG4gICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGljb24tbmFtZT1cImNyb3NzLXNtYWxsXCJcbiAgICAgICAgc2JiLW92ZXJsYXktY2xvc2VcbiAgICAgID48LyR7dW5zYWZlU3RhdGljKFRBR19OQU1FKX0+XG4gICAgYDtcblxuICAgIGNvbnN0IGJhY2tCdXR0b24gPSBodG1sYFxuICAgICAgPCR7dW5zYWZlU3RhdGljKFRBR19OQU1FKX1cbiAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fYmFja1wiXG4gICAgICAgIGFyaWEtbGFiZWw9JHt0aGlzLmFjY2Vzc2liaWxpdHlCYWNrTGFiZWwgfHwgaTE4bkdvQmFja1t0aGlzLmxhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICA/bmVnYXRpdmU9JHt0aGlzLm5lZ2F0aXZlfVxuICAgICAgICBzaXplPVwibVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpY29uLW5hbWU9XCJjaGV2cm9uLXNtYWxsLWxlZnQtc21hbGxcIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9iYWNrQ2xpY2suZW1pdCgpfVxuICAgICAgPjwvJHt1bnNhZmVTdGF0aWMoVEFHX05BTUUpfT5cbiAgICBgO1xuICAgIC8qIGVzbGludC1lbmFibGUgbGl0L2JpbmRpbmctcG9zaXRpb25zICovXG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItb3ZlcmxheV9fY29udGFpbmVyXCIgQGFuaW1hdGlvbmVuZD0ke3RoaXMub25PdmVybGF5QW5pbWF0aW9uRW5kfT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5jbG9zZU9uU2JiT3ZlcmxheUNsb3NlQ2xpY2soZXZlbnQpfVxuICAgICAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fd3JhcHBlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5X19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLmJhY2tCdXR0b24gPyBiYWNrQnV0dG9uIDogbm90aGluZ30gJHtjbG9zZUJ1dHRvbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1vdmVybGF5X19jb250ZW50XCIgQHNjcm9sbD0keyhlOiBFdmVudCkgPT4gZm9yd2FyZEV2ZW50KGUsIGRvY3VtZW50KX0+XG4gICAgICAgICAgICAgIDxzYmItY29udGFpbmVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItb3ZlcmxheV9fY29udGVudC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgID9leHBhbmRlZD0ke3RoaXMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgY29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgIDwvc2JiLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgYXJpYS1saXZlPVwicG9saXRlXCI+PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1vdmVybGF5JzogU2JiT3ZlcmxheUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTYmJPdmVybGF5QmFzZUVsZW1lbnQiLCJfYSIsIlNiYk92ZXJsYXlFbGVtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWVPLE1BQU0sY0FBdUMsQ0FBQTtJQU1yQyx5QkFBcUIsTUFBQTs7QUFIbkMsTUFBQSxtQkFBQSxDQUFBLGVBQWU7QUFBQSxJQUNkLFNBQVM7QUFBQSxFQUFBLENBQ1YsQ0FBQzs7OztvQkFDMkMsaUJBQWlCLHVCQUF1Qjs7OztBQUFoREEsTUFBQUEsMEJBQUEsbUJBQVEsWUFBeUM7QUFBQTs7QUFJcEY7QUFBZ0IseUJBQUEsc0NBQUEsa0JBQUEsTUFBQSxrQ0FBNkIsRUFBRTtBQUc1QixXQUFBLFlBQXNELGtCQUFBLE1BQUEscUNBQUEsR0FBQSxJQUFJ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
@@ -1 +1 @@
1
- {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../../../src/elements/popover/popover/popover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAW1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAItE,OAAO,EAA4B,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAahF,OAAO,kCAAkC,CAAC;;AAU1C;;;;;;;;;;;;GAYG;AACH,qBAEM,iBAAkB,SAAQ,sBAA0C;IACxE,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD;;;OAGG;IACH,SAA4B,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAQ;IAExE,iDAAiD;IACjD,SAEgB,eAAe,EAAE,OAAO,CAAS;IAEjD,wDAAwD;IACxD,SAEgB,YAAY,EAAE,OAAO,CAAS;IAE9C,8CAA8C;IAC9C,SAEgB,SAAS,EAAE,MAAM,CAAK;IAEtC,+CAA+C;IAC/C,SAEgB,UAAU,EAAE,MAAM,CAAK;IAEvC,wEAAwE;IACxE,SAEgB,uBAAuB,EAAE,MAAM,CAAM;IAErD,sEAAsE;IACtE,UAAmB,SAAS,EAAE,YAAY,CAAC;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC,CAIvE;IAEF,kDAAkD;IAClD,UAAmB,QAAQ,EAAE,YAAY,CAAC;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC,CAItE;IAEF,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,eAAe,CAAC,CAAqB;IAE7C,OAAO,CAAC,mBAAmB,CAAC,CAAc;IAC1C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAC,CAAc;IAC3C,OAAO,CAAC,4BAA4B,CAAC,CAAU;IAC/C,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,OAAO,CAAC,oBAAoB,CAAmB;IAC/C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAgC;IACrD,OAAO,CAAC,aAAa,CAAC,CAAgC;IACtD,OAAO,CAAC,SAAS,CAAmC;IAEpD,0CAA0C;IACnC,IAAI,IAAI,IAAI;IA+BnB,0BAA0B;IACnB,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;IAqBxC,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,eAAe;IAWP,iBAAiB,IAAI,IAAI;cAYtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAczD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAS9D,oBAAoB,IAAI,IAAI;IAS5C,OAAO,CAAC,UAAU;IAuDlB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,oBAAoB,CAE1B;IAGF,OAAO,CAAC,qBAAqB,CAS3B;IAEF,OAAO,CAAC,oBAAoB,CAM1B;IAEF,OAAO,CAAC,oBAAoB,CAM1B;IAEF,OAAO,CAAC,oBAAoB,CAI1B;IAEF,OAAO,CAAC,oBAAoB,CAI1B;IAMF,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,mBAAmB;cA6BR,MAAM,IAAI,cAAc;CAkC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,aAAa,EAAE,iBAAiB,CAAC;KAClC;CACF"}
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../../../src/elements/popover/popover/popover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAW1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAItE,OAAO,EAA4B,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAahF,OAAO,kCAAkC,CAAC;;AAU1C;;;;;;;;;;;;GAYG;AACH,qBAGM,iBAAkB,SAAQ,sBAA0C;IACxE,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD;;;OAGG;IACH,SAA4B,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAQ;IAExE,iDAAiD;IACjD,SAEgB,eAAe,EAAE,OAAO,CAAS;IAEjD,wDAAwD;IACxD,SAEgB,YAAY,EAAE,OAAO,CAAS;IAE9C,8CAA8C;IAC9C,SAEgB,SAAS,EAAE,MAAM,CAAK;IAEtC,+CAA+C;IAC/C,SAEgB,UAAU,EAAE,MAAM,CAAK;IAEvC,wEAAwE;IACxE,SAEgB,uBAAuB,EAAE,MAAM,CAAM;IAErD,sEAAsE;IACtE,UAAmB,SAAS,EAAE,YAAY,CAAC;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC,CAIvE;IAEF,kDAAkD;IAClD,UAAmB,QAAQ,EAAE,YAAY,CAAC;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC,CAItE;IAEF,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,eAAe,CAAC,CAAqB;IAE7C,OAAO,CAAC,mBAAmB,CAAC,CAAc;IAC1C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAC,CAAc;IAC3C,OAAO,CAAC,4BAA4B,CAAC,CAAU;IAC/C,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,OAAO,CAAC,oBAAoB,CAAmB;IAC/C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAgC;IACrD,OAAO,CAAC,aAAa,CAAC,CAAgC;IACtD,OAAO,CAAC,SAAS,CAAmC;IAEpD,0CAA0C;IACnC,IAAI,IAAI,IAAI;IAgCnB,0BAA0B;IACnB,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;IAqBxC,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,eAAe;IAWP,iBAAiB,IAAI,IAAI;cAYtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAczD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAS9D,oBAAoB,IAAI,IAAI;IAS5C,OAAO,CAAC,UAAU;IAuDlB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,oBAAoB,CAE1B;IAGF,OAAO,CAAC,qBAAqB,CAS3B;IAEF,OAAO,CAAC,oBAAoB,CAM1B;IAEF,OAAO,CAAC,oBAAoB,CAM1B;IAEF,OAAO,CAAC,oBAAoB,CAI1B;IAEF,OAAO,CAAC,oBAAoB,CAI1B;IAMF,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,mBAAmB;cA6BR,MAAM,IAAI,cAAc;CAkC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,aAAa,EAAE,iBAAiB,CAAC;KAClC;CACF"}
@@ -12,7 +12,7 @@ import { ref } from "lit/directives/ref.js";
12
12
  import { SbbFocusHandler, IS_FOCUSABLE_QUERY, setModalityOnNextFocus, getFirstFocusableElement } from "../core/a11y.js";
13
13
  import { SbbOpenCloseBaseElement } from "../core/base-elements.js";
14
14
  import { SbbMediaQueryPointerCoarse, SbbLanguageController } from "../core/controllers.js";
15
- import { forceType } from "../core/decorators.js";
15
+ import { hostAttributes, forceType } from "../core/decorators.js";
16
16
  import { isZeroAnimationDuration, findReferencedElement } from "../core/dom.js";
17
17
  import { EventEmitter, composedPathHasAttribute } from "../core/eventing.js";
18
18
  import { i18nClosePopover } from "../core/i18n.js";
@@ -44,17 +44,18 @@ const style = css`*,
44
44
  --sbb-popover-animation-easing: ease-out;
45
45
  --sbb-popover-transform: translateY(var(--sbb-spacing-fixed-2x));
46
46
  --sbb-focus-outline-color: var(--sbb-focus-outline-color-default);
47
+ display: none;
48
+ }
49
+
50
+ :host([data-state]:not([data-state=closed])) {
47
51
  display: block;
52
+ --sbb-popover-inset: 0;
48
53
  }
49
54
 
50
55
  :host([data-position=above]) {
51
56
  --sbb-popover-transform: translateY(calc(var(--sbb-spacing-fixed-2x) * -1));
52
57
  }
53
58
 
54
- :host(:not([data-state=closed])) {
55
- --sbb-popover-inset: 0;
56
- }
57
-
58
59
  .sbb-popover::after,
59
60
  .sbb-popover__content::before {
60
61
  content: "";
@@ -183,7 +184,7 @@ const popoversRef = /* @__PURE__ */ new Set();
183
184
  const pointerCoarse = isServer ? false : matchMedia(SbbMediaQueryPointerCoarse).matches;
184
185
  let SbbPopoverElement = (() => {
185
186
  var _trigger_accessor_storage, _hideCloseButton_accessor_storage, _hoverTrigger_accessor_storage, _openDelay_accessor_storage, _closeDelay_accessor_storage, _accessibilityCloseLabel_accessor_storage, _a;
186
- let _classDecorators = [customElement("sbb-popover")];
187
+ let _classDecorators = [customElement("sbb-popover"), hostAttributes({ popover: "manual" })];
187
188
  let _classDescriptor;
188
189
  let _classExtraInitializers = [];
189
190
  let _classThis;
@@ -309,7 +310,7 @@ let SbbPopoverElement = (() => {
309
310
  }
310
311
  /** Opens the popover on trigger click. */
311
312
  open() {
312
- var _a2;
313
+ var _a2, _b;
313
314
  if (this.state !== "closed" && this.state !== "closing" || !this._overlay) {
314
315
  return;
315
316
  }
@@ -322,10 +323,11 @@ let SbbPopoverElement = (() => {
322
323
  popover.close();
323
324
  }
324
325
  }
326
+ (_a2 = this.showPopover) == null ? void 0 : _a2.call(this);
325
327
  this.state = "opening";
326
328
  this.inert = true;
327
329
  this._setPopoverPosition();
328
- (_a2 = this._triggerElement) == null ? void 0 : _a2.setAttribute("aria-expanded", "true");
330
+ (_b = this._triggerElement) == null ? void 0 : _b.setAttribute("aria-expanded", "true");
329
331
  this._nextFocusedElement = void 0;
330
332
  this._skipCloseFocus = false;
331
333
  if (this._isZeroAnimationDuration()) {
@@ -353,17 +355,18 @@ let SbbPopoverElement = (() => {
353
355
  return isZeroAnimationDuration(this, "--sbb-popover-animation-duration");
354
356
  }
355
357
  _handleClosing() {
356
- var _a2, _b, _c, _d;
358
+ var _a2, _b, _c, _d, _e;
357
359
  this.state = "closed";
358
- (_b = (_a2 = this._overlay) == null ? void 0 : _a2.firstElementChild) == null ? void 0 : _b.scrollTo(0, 0);
359
- (_c = this._overlay) == null ? void 0 : _c.removeAttribute("tabindex");
360
+ (_a2 = this.hidePopover) == null ? void 0 : _a2.call(this);
361
+ (_c = (_b = this._overlay) == null ? void 0 : _b.firstElementChild) == null ? void 0 : _c.scrollTo(0, 0);
362
+ (_d = this._overlay) == null ? void 0 : _d.removeAttribute("tabindex");
360
363
  if (!this._skipCloseFocus) {
361
364
  const elementToFocus = this._nextFocusedElement || this._triggerElement;
362
365
  setModalityOnNextFocus(elementToFocus);
363
366
  elementToFocus == null ? void 0 : elementToFocus.focus();
364
367
  }
365
368
  this.didClose.emit({ closeTarget: this._popoverCloseElement });
366
- (_d = this._openStateController) == null ? void 0 : _d.abort();
369
+ (_e = this._openStateController) == null ? void 0 : _e.abort();
367
370
  this._focusHandler.disconnect();
368
371
  }
369
372
  _handleOpening() {
@@ -611,4 +614,4 @@ let SbbPopoverElement = (() => {
611
614
  export {
612
615
  SbbPopoverElement
613
616
  };
614
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBpc1NlcnZlciwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7XG4gIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCxcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBTYmJGb2N1c0hhbmRsZXIsXG4gIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMsXG59IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsIFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgZmluZFJlZmVyZW5jZWRFbGVtZW50LCBpc1plcm9BbmltYXRpb25EdXJhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLmpzJztcbmltcG9ydCB7IGNvbXBvc2VkUGF0aEhhc0F0dHJpYnV0ZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQgeyBpMThuQ2xvc2VQb3BvdmVyIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiT3BlbmVkQ2xvc2VkU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHsgU2JiSHlkcmF0aW9uTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50UG9zaXRpb24sXG4gIGlzRXZlbnRPbkVsZW1lbnQsXG4gIHJlbW92ZUFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlckF0dHJpYnV0ZXMsXG59IGZyb20gJy4uLy4uL2NvcmUvb3ZlcmxheS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BvcG92ZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9idXR0b24vc2Vjb25kYXJ5LWJ1dHRvbi5qcyc7XG5cbmNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDE2O1xuY29uc3QgSE9SSVpPTlRBTF9PRkZTRVQgPSAzMjtcblxubGV0IG5leHRJZCA9IDA7XG5cbmNvbnN0IHBvcG92ZXJzUmVmID0gbmV3IFNldDxTYmJQb3BvdmVyRWxlbWVudD4oKTtcbmNvbnN0IHBvaW50ZXJDb2Fyc2UgPSBpc1NlcnZlciA/IGZhbHNlIDogbWF0Y2hNZWRpYShTYmJNZWRpYVF1ZXJ5UG9pbnRlckNvYXJzZSkubWF0Y2hlcztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHdpdGhpbiBhIHBvcG92ZXIuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCBpbnRvIHRoZSBwb3BvdmVyLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gd2lsbE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBzdGFydHMgdGhlIG9wZW5pbmcgdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx2b2lkPn0gZGlkT3BlbiAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGlzIG9wZW5lZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8eyBjbG9zZVRhcmdldDogSFRNTEVsZW1lbnQgfT59IHdpbGxDbG9zZSAtIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGJlZ2lucyB0aGUgY2xvc2luZ1xuICogdHJhbnNpdGlvbi4gQ2FuIGJlIGNhbmNlbGVkLlxuICogQGV2ZW50IHtDdXN0b21FdmVudDx7IGNsb3NlVGFyZ2V0OiBIVE1MRWxlbWVudCB9Pn0gZGlkQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBpcyBjbG9zZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItcG9wb3Zlci16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1wb3BvdmVyJylcbmNsYXNzIFNiYlBvcG92ZXJFbGVtZW50IGV4dGVuZHMgU2JiSHlkcmF0aW9uTWl4aW4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBwb3BvdmVyIG92ZXJsYXkuXG4gICAqIEFjY2VwdHMgYm90aCBhIHN0cmluZyAoaWQgb2YgYW4gZWxlbWVudCkgb3IgYW4gSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNsb3NlIGJ1dHRvbiBzaG91bGQgYmUgaGlkZGVuLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGlkZS1jbG9zZS1idXR0b24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBoaWRlQ2xvc2VCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgdHJpZ2dlcmVkIG9uIGhvdmVyLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaG92ZXItdHJpZ2dlcicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGhvdmVyVHJpZ2dlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBPcGVuIHRoZSBwb3BvdmVyIGFmdGVyIGEgY2VydGFpbiBkZWxheS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ29wZW4tZGVsYXknLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIG9wZW5EZWxheTogbnVtYmVyID0gMDtcblxuICAvKiogQ2xvc2UgdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnY2xvc2UtZGVsYXknLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIGNsb3NlRGVsYXk6IG51bWJlciA9IDA7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgY2xvc2UgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWNsb3NlLWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUNsb3NlTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBiZWdpbnMgdGhlIGNsb3NpbmcgdHJhbnNpdGlvbi4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxDbG9zZTogRXZlbnRFbWl0dGVyPHsgY2xvc2VUYXJnZXQ/OiBIVE1MRWxlbWVudCB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJQb3BvdmVyRWxlbWVudC5ldmVudHMud2lsbENsb3NlLFxuICAgIHsgY2FuY2VsYWJsZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBpcyBjbG9zZWQuICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBkaWRDbG9zZTogRXZlbnRFbWl0dGVyPHsgY2xvc2VUYXJnZXQ/OiBIVE1MRWxlbWVudCB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgdGhpcyxcbiAgICBTYmJQb3BvdmVyRWxlbWVudC5ldmVudHMuZGlkQ2xvc2UsXG4gICAgeyBjYW5jZWxhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheSE6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIF90cmlnZ2VyRWxlbWVudD86IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgLy8gVGhlIGVsZW1lbnQgd2hpY2ggc2hvdWxkIHJlY2VpdmUgZm9jdXMgYWZ0ZXIgY2xvc2luZyBiYXNlZCBvbiB3aGVyZSBpbiB0aGUgYmFja2Ryb3AgdGhlIHVzZXIgY2xpY2tzLlxuICBwcml2YXRlIF9uZXh0Rm9jdXNlZEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfc2tpcENsb3NlRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcG9wb3ZlckNsb3NlRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9pc1BvaW50ZXJEb3duRXZlbnRPblBvcG92ZXI/OiBib29sZWFuO1xuICBwcml2YXRlIF9wb3BvdmVyQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfb3BlblN0YXRlQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfZm9jdXNIYW5kbGVyID0gbmV3IFNiYkZvY3VzSGFuZGxlcigpO1xuICBwcml2YXRlIF9ob3ZlclRyaWdnZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlblRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfY2xvc2VUaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAvKiogT3BlbnMgdGhlIHBvcG92ZXIgb24gdHJpZ2dlciBjbGljay4gKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLnN0YXRlICE9PSAnY2xvc2VkJyAmJiB0aGlzLnN0YXRlICE9PSAnY2xvc2luZycpIHx8ICF0aGlzLl9vdmVybGF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLndpbGxPcGVuLmVtaXQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBvdGhlciBwb3BvdmVyc1xuICAgIGZvciAoY29uc3QgcG9wb3ZlciBvZiBBcnJheS5mcm9tKHBvcG92ZXJzUmVmKSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBwb3BvdmVyLmdldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScpIGFzIFNiYk9wZW5lZENsb3NlZFN0YXRlO1xuICAgICAgaWYgKHN0YXRlICYmIChzdGF0ZSA9PT0gJ29wZW5lZCcgfHwgc3RhdGUgPT09ICdvcGVuaW5nJykpIHtcbiAgICAgICAgcG9wb3Zlci5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fc2V0UG9wb3ZlclBvc2l0aW9uKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgdGhpcy5fbmV4dEZvY3VzZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3NraXBDbG9zZUZvY3VzID0gZmFsc2U7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIHBvcG92ZXIuICovXG4gIHB1YmxpYyBjbG9zZSh0YXJnZXQ/OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmVkJyAmJiB0aGlzLnN0YXRlICE9PSAnb3BlbmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VFbGVtZW50ID0gdGFyZ2V0O1xuICAgIGlmICghdGhpcy53aWxsQ2xvc2UuZW1pdCh7IGNsb3NlVGFyZ2V0OiB0YXJnZXQgfSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuaW5lcnQgPSB0cnVlO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1wb3BvdmVyLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5fb3ZlcmxheT8uZmlyc3RFbGVtZW50Q2hpbGQ/LnNjcm9sbFRvKDAsIDApO1xuICAgIHRoaXMuX292ZXJsYXk/LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcblxuICAgIGlmICghdGhpcy5fc2tpcENsb3NlRm9jdXMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5fbmV4dEZvY3VzZWRFbGVtZW50IHx8IHRoaXMuX3RyaWdnZXJFbGVtZW50O1xuXG4gICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKGVsZW1lbnRUb0ZvY3VzKTtcbiAgICAgIC8vIFRvIGVuYWJsZSBmb2N1c2luZyBvdGhlciBlbGVtZW50IHRoYW4gdGhlIHRyaWdnZXIsIHdlIG5lZWQgdG8gY2FsbCBmb2N1cygpIGEgc2Vjb25kIHRpbWUuXG4gICAgICBlbGVtZW50VG9Gb2N1cz8uZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpZENsb3NlLmVtaXQoeyBjbG9zZVRhcmdldDogdGhpcy5fcG9wb3ZlckNsb3NlRWxlbWVudCB9KTtcbiAgICB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLmluZXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5fYXR0YWNoV2luZG93RXZlbnRzKCk7XG4gICAgdGhpcy5fc2V0UG9wb3ZlckZvY3VzKCk7XG4gICAgdGhpcy5fZm9jdXNIYW5kbGVyLnRyYXAodGhpcywge1xuICAgICAgcG9zdEZpbHRlcjogKGVsKSA9PiBlbCAhPT0gdGhpcy5fb3ZlcmxheSxcbiAgICB9KTtcbiAgICB0aGlzLmRpZE9wZW4uZW1pdCgpO1xuICB9XG5cbiAgLy8gQ2xvc2VzIHRoZSBwb3BvdmVyIG9uIFwiRXNjXCIga2V5IHByZXNzZWQgYW5kIHRyYXBzIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3Zlci5cbiAgcHJpdmF0ZSBfb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGlmICghdGhpcy5pZCkge1xuICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgfHwgYHNiYi1wb3BvdmVyLSR7KytuZXh0SWR9YDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0cmlnZ2VyIGVsZW1lbnQgYW5kIGF0dGFjaCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9jb25maWd1cmUoKTtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgcG9wb3ZlcnNSZWYuYWRkKHRoaXMgYXMgU2JiUG9wb3ZlckVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd0cmlnZ2VyJykgJiYgdGhpcy50cmlnZ2VyICE9PSBjaGFuZ2VkUHJvcGVydGllcy5nZXQoJ3RyaWdnZXInKSkge1xuICAgICAgdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnaG92ZXJUcmlnZ2VyJykpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICh0aGlzLl9ob3ZlclRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHRoaXMuX29uT3ZlcmxheU1vdXNlRW50ZXIoKSk7XG4gICAgICB0aGlzLl9vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB0aGlzLl9vbk92ZXJsYXlNb3VzZUxlYXZlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3BvcG92ZXJDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fZm9jdXNIYW5kbGVyLmRpc2Nvbm5lY3QoKTtcbiAgICBwb3BvdmVyc1JlZi5kZWxldGUodGhpcyBhcyBTYmJQb3BvdmVyRWxlbWVudCk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgdHJpZ2dlciBpcyB2YWxpZCBhbmQgYXR0YWNoIGNsaWNrIGV2ZW50IGxpc3RlbmVycy5cbiAgcHJpdmF0ZSBfY29uZmlndXJlKCk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oeWRyYXRpb25SZXF1aXJlZCkge1xuICAgICAgdGhpcy5oeWRyYXRpb25Db21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX2NvbmZpZ3VyZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcblxuICAgIGlmICghdGhpcy50cmlnZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSBmaW5kUmVmZXJlbmNlZEVsZW1lbnQodGhpcy50cmlnZ2VyKTtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnZGlhbG9nJywgdGhpcy5pZCwgdGhpcy5zdGF0ZSk7XG5cbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSB0cmlnZ2VyIGNhbiBiZSBob3ZlcmVkLiBTb21lIGRldmljZXMgbWlnaHQgaW50ZXJwcmV0IHRoZSBtZWRpYSBxdWVyeSAoaG92ZXI6IGhvdmVyKSBkaWZmZXJlbnRseSxcbiAgICAvLyBhbmQgbm90IHJlc3BlY3QgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBvbiB0aGUgY2xpY2suIFRoZXJlZm9yZSwgdGhlIGZvbGxvd2luZyBpcyBwcmVmZXJyZWQgdG8gaWRlbnRpZnlcbiAgICAvLyBhbGwgbm9uLXRvdWNoc2NyZWVuIGRldmljZXMuXG4gICAgdGhpcy5faG92ZXJUcmlnZ2VyID0gdGhpcy5ob3ZlclRyaWdnZXIgJiYgIXBvaW50ZXJDb2Fyc2U7XG5cbiAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICBjb25zdCB7IHNpZ25hbCB9ID0gKHRoaXMuX3BvcG92ZXJDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpKTtcbiAgICBpZiAodGhpcy5faG92ZXJUcmlnZ2VyKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5fb25UcmlnZ2VyTW91c2VFbnRlciwgeyBzaWduYWwgfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fb25UcmlnZ2VyTW91c2VMZWF2ZSwgeyBzaWduYWwgfSk7XG5cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdrZXlkb3duJyxcbiAgICAgICAgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldnQuY29kZSA9PT0gJ1NwYWNlJyB8fCBldnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHNpZ25hbCB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHNpZ25hbCB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hXaW5kb3dFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9zZXRQb3BvdmVyUG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAvLyBXaXRob3V0IGNhcHR1cmUsIG90aGVyIHNjcm9sbCBjb250ZXh0cyB3b3VsZCBub3QgYnViYmxlIHRvIHRoaXMgZXZlbnQgbGlzdGVuZXIuXG4gICAgICAvLyBDYXB0dXJlIGFsbG93cyB1cyB0byByZWFjdCB0byBhbGwgc2Nyb2xsIGNvbnRleHRzIGluIHRoaXMgRE9NLlxuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0UG9wb3ZlclBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9vbktleWRvd25FdmVudChldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBwb3BvdmVyIG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2ssIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbG9zZSB0aGUgcG9wb3ZlciBvbiBjbGljayBvZiBhbnkgZWxlbWVudCB0aGF0IGhhcyB0aGUgJ3NiYi1wb3BvdmVyLWNsb3NlJyBhdHRyaWJ1dGUuXG4gIHByaXZhdGUgX2Nsb3NlT25TYmJQb3BvdmVyQ2xvc2VDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZUVsZW1lbnQgPSBjb21wb3NlZFBhdGhIYXNBdHRyaWJ1dGUoZXZlbnQsICdzYmItcG9wb3Zlci1jbG9zZScsIHRoaXMpO1xuXG4gICAgaWYgKGNsb3NlRWxlbWVudCAmJiAhY2xvc2VFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgICB0aGlzLmNsb3NlKGNsb3NlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBvaW50ZXJkb3duIGV2ZW50IHRhcmdldCBpcyB0cmlnZ2VyZWQgb24gdGhlIHBvcG92ZXIuXG4gIHByaXZhdGUgX3BvaW50ZXJEb3duTGlzdGVuZXIgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uUG9wb3ZlciA9IGlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpO1xuICB9O1xuXG4gIC8vIENsb3NlIHBvcG92ZXIgb24gYmFja2Ryb3AgY2xpY2suXG4gIHByaXZhdGUgX2Nsb3NlT25CYWNrZHJvcENsaWNrID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uUG9wb3ZlciAmJiAhaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCkpIHtcbiAgICAgIHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCA9IGV2ZW50XG4gICAgICAgIC5jb21wb3NlZFBhdGgoKVxuICAgICAgICAuZmlsdGVyKChlbCkgPT4gZWwgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpXG4gICAgICAgIC5maW5kKChlbCkgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5tYXRjaGVzKElTX0ZPQ1VTQUJMRV9RVUVSWSkpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Nsb3NlVGltZW91dCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgX29uVHJpZ2dlck1vdXNlRW50ZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5fb3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbigpLCB0aGlzLm9wZW5EZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vblRyaWdnZXJNb3VzZUxlYXZlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2Nsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fb3BlblRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vbk92ZXJsYXlNb3VzZUVudGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmluZycpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vbk92ZXJsYXlNb3VzZUxlYXZlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2Nsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlRGVsYXkpO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgcG9wb3ZlciBwb3NpdGlvbiAoeCwgeSkgdG8gJzAnIG9uY2UgdGhlIHBvcG92ZXIgaXMgY2xvc2VkIGFuZCB0aGUgdHJhbnNpdGlvbiBlbmRlZCB0byBwcmV2ZW50IHRoZVxuICAvLyB2aWV3cG9ydCBmcm9tIG92ZXJmbG93aW5nLiBBbmQgc2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgb25jZSB0aGUgcG9wb3ZlciBpcyBvcGVuLlxuICAvLyBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAvLyBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gIHByaXZhdGUgX29uUG9wb3ZlckFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgZm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50LlxuICBwcml2YXRlIF9zZXRQb3BvdmVyRm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPVxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignW3NiYi1wb3BvdmVyLWNsb3NlXScpIHx8XG4gICAgICBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoXG4gICAgICAgIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikuZmlsdGVyKChlKTogZSBpcyBIVE1MRWxlbWVudCA9PiBlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSxcbiAgICAgICk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKGZpcnN0Rm9jdXNhYmxlKTtcbiAgICAgIGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX292ZXJsYXkuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICBzZXRNb2RhbGl0eU9uTmV4dEZvY3VzKHRoaXMuX292ZXJsYXkpO1xuICAgICAgdGhpcy5fb3ZlcmxheS5mb2N1cygpO1xuXG4gICAgICAvLyBXaGVuIGEgYmx1ciBvY2N1cnMsIHdlIGtub3cgdGhhdCB0aGUgcG9wb3ZlciBoYXMgdG8gYmUgY2xvc2VkLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW50ZXJhY3RpdmUgZWxlbWVudHMgaW5zaWRlIHRoZSBwb3BvdmVyLlxuICAgICAgLy8gV2hlbiBhIHdpbmRvdy90YWIgY2hhbmdlIG9jY3VycywgYSBibHVyIGV2ZW50IGlzIGFsc28gZmlyZWQuIEhvd2V2ZXIsIHdoZW4gdGhlIGN1cnJlbnQgd2luZG93L3RhYlxuICAgICAgLy8gYmVjb21lcyBhY3RpdmUgYWdhaW4sIGl0IGZvY3VzZXMgb25jZSBhZ2FpbiB0aGUgcG9wb3Zlci5cbiAgICAgIC8vIFRoZXJlZm9yZSwgd2UgY2Fubm90IGxpc3RlbiB0byB0aGUgYmx1ciBldmVudCBvbmx5IG9uY2UuXG4gICAgICAvLyBUbyBwcmV2ZW50IGFjY2lkZW50YWxseSBjbG9zaW5nIHRoZSBwb3BvdmVyLCB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgd2luZG93L3RhYiBzdGF0ZS5cbiAgICAgIC8vIFdlIGNhbiBhY2hpZXZlIHRoaXMgYnkgdXNpbmcgdmlzaWJpbGl0eVN0YXRlLCB3aGljaCBvbmx5IHdvcmtzIHdpdGggc2V0VGltZW91dCgpLlxuICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnYmx1cicsXG4gICAgICAgICgpOiB2b2lkID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgIHRoaXMuX292ZXJsYXk/LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDbG9zZUZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRQb3BvdmVyUG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5IHx8ICF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcG92ZXJQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCxcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1wb3BvdmVyX19jb250YWluZXInKSEsXG4gICAgICB7XG4gICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBWRVJUSUNBTF9PRkZTRVQsXG4gICAgICAgIGhvcml6b250YWxPZmZzZXQ6IEhPUklaT05UQUxfT0ZGU0VULFxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2l2ZUhlaWdodDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1wb3NpdGlvbicsIHBvcG92ZXJQb3NpdGlvbi5hbGlnbm1lbnQudmVydGljYWwpO1xuXG4gICAgY29uc3QgYXJyb3dYUG9zaXRpb24gPVxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG4gICAgICBwb3BvdmVyUG9zaXRpb24ubGVmdCArXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5jbGllbnRXaWR0aCAvIDIgLVxuICAgICAgODsgLy8gaGFsZiB0aGUgc2l6ZSBvZiB0aGUgcG9wb3ZlciBhcnJvd1xuXG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItcG9wb3Zlci1wb3NpdGlvbi14JywgYCR7cG9wb3ZlclBvc2l0aW9uLmxlZnR9cHhgKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1wb3BvdmVyLXBvc2l0aW9uLXknLCBgJHtwb3BvdmVyUG9zaXRpb24udG9wfXB4YCk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItcG9wb3Zlci1hcnJvdy1wb3NpdGlvbi14JywgYCR7YXJyb3dYUG9zaXRpb259cHhgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXBvcG92ZXJfX2Nsb3NlXCI+XG4gICAgICAgIDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9JHt0aGlzLmFjY2Vzc2liaWxpdHlDbG9zZUxhYmVsIHx8IGkxOG5DbG9zZVBvcG92ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGljb24tbmFtZT1cImNyb3NzLXNtYWxsXCJcbiAgICAgICAgICBzYmItcG9wb3Zlci1jbG9zZVxuICAgICAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICBgO1xuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXBvcG92ZXJfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uUG9wb3ZlckFuaW1hdGlvbkVuZH1cbiAgICAgICAgICBjbGFzcz1cInNiYi1wb3BvdmVyXCJcbiAgICAgICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCkgPT4gKHRoaXMuX292ZXJsYXkgPSBlbCBhcyBIVE1MRGl2RWxlbWVudCkpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50OiBFdmVudCkgPT4gdGhpcy5fY2xvc2VPblNiYlBvcG92ZXJDbG9zZUNsaWNrKGV2ZW50KX1cbiAgICAgICAgICAgIGNsYXNzPVwic2JiLXBvcG92ZXJfX2NvbnRlbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7IXRoaXMuaGlkZUNsb3NlQnV0dG9uICYmICF0aGlzLl9ob3ZlclRyaWdnZXIgPyBjbG9zZUJ1dHRvbiA6IG5vdGhpbmd9XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPHNsb3Q+Tm8gY29udGVudDwvc2xvdD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItcG9wb3Zlcic6IFNiYlBvcG92ZXJFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiU2JiUG9wb3ZlckVsZW1lbnQiLCJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
617
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBpc1NlcnZlciwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50LCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5cbmltcG9ydCB7XG4gIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCxcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBTYmJGb2N1c0hhbmRsZXIsXG4gIHNldE1vZGFsaXR5T25OZXh0Rm9jdXMsXG59IGZyb20gJy4uLy4uL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsIFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGZpbmRSZWZlcmVuY2VkRWxlbWVudCwgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBjb21wb3NlZFBhdGhIYXNBdHRyaWJ1dGUsIEV2ZW50RW1pdHRlciB9IGZyb20gJy4uLy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHsgaTE4bkNsb3NlUG9wb3ZlciB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wZW5lZENsb3NlZFN0YXRlIH0gZnJvbSAnLi4vLi4vY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudFBvc2l0aW9uLFxuICBpc0V2ZW50T25FbGVtZW50LFxuICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxuICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJBdHRyaWJ1dGVzLFxufSBmcm9tICcuLi8uLi9jb3JlL292ZXJsYXkuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9wb3BvdmVyLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24uanMnO1xuXG5jb25zdCBWRVJUSUNBTF9PRkZTRVQgPSAxNjtcbmNvbnN0IEhPUklaT05UQUxfT0ZGU0VUID0gMzI7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5jb25zdCBwb3BvdmVyc1JlZiA9IG5ldyBTZXQ8U2JiUG9wb3ZlckVsZW1lbnQ+KCk7XG5jb25zdCBwb2ludGVyQ29hcnNlID0gaXNTZXJ2ZXIgPyBmYWxzZSA6IG1hdGNoTWVkaWEoU2JiTWVkaWFRdWVyeVBvaW50ZXJDb2Fyc2UpLm1hdGNoZXM7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB3aXRoaW4gYSBwb3BvdmVyLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGNvbnRlbnQgaW50byB0aGUgcG9wb3Zlci5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IHdpbGxPcGVuIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgc3RhcnRzIHRoZSBvcGVuaW5nIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGRpZE9wZW4gLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBpcyBvcGVuZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHsgY2xvc2VUYXJnZXQ6IEhUTUxFbGVtZW50IH0+fSB3aWxsQ2xvc2UgLSBFbWl0cyB3aGVuZXZlciB0aGUgYHNiYi1wb3BvdmVyYCBiZWdpbnMgdGhlIGNsb3NpbmdcbiAqIHRyYW5zaXRpb24uIENhbiBiZSBjYW5jZWxlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8eyBjbG9zZVRhcmdldDogSFRNTEVsZW1lbnQgfT59IGRpZENsb3NlIC0gRW1pdHMgd2hlbmV2ZXIgdGhlIGBzYmItcG9wb3ZlcmAgaXMgY2xvc2VkLlxuICogQGNzc3Byb3AgWy0tc2JiLXBvcG92ZXItei1pbmRleD12YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpXSAtIFRvIHNwZWNpZnkgYSBjdXN0b20gc3RhY2sgb3JkZXIsXG4gKiB0aGUgYHotaW5kZXhgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoaXMgQ1NTIHZhcmlhYmxlLiBUaGUgZGVmYXVsdCBgei1pbmRleGAgb2YgdGhlXG4gKiBjb21wb25lbnQgaXMgc2V0IHRvIGB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpYCB3aXRoIGEgdmFsdWUgb2YgYDEwMDBgLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItcG9wb3ZlcicpXG5AaG9zdEF0dHJpYnV0ZXMoeyBwb3BvdmVyOiAnbWFudWFsJyB9KVxuY2xhc3MgU2JiUG9wb3ZlckVsZW1lbnQgZXh0ZW5kcyBTYmJIeWRyYXRpb25NaXhpbihTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIHBvcG92ZXIgb3ZlcmxheS5cbiAgICogQWNjZXB0cyBib3RoIGEgc3RyaW5nIChpZCBvZiBhbiBlbGVtZW50KSBvciBhbiBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgdHJpZ2dlcjogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2xvc2UgYnV0dG9uIHNob3VsZCBiZSBoaWRkZW4uICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRlLWNsb3NlLWJ1dHRvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGhpZGVDbG9zZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBwb3BvdmVyIHNob3VsZCBiZSB0cmlnZ2VyZWQgb24gaG92ZXIuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Zlci10cmlnZ2VyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaG92ZXJUcmlnZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE9wZW4gdGhlIHBvcG92ZXIgYWZ0ZXIgYSBjZXJ0YWluIGRlbGF5LiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnb3Blbi1kZWxheScsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3Igb3BlbkRlbGF5OiBudW1iZXIgPSAwO1xuXG4gIC8qKiBDbG9zZSB0aGUgcG9wb3ZlciBhZnRlciBhIGNlcnRhaW4gZGVsYXkuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjbG9zZS1kZWxheScsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgY2xvc2VEZWxheTogbnVtYmVyID0gMDtcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSBjbG9zZSBidXR0b24gZWxlbWVudC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktY2xvc2UtbGFiZWwnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGJlZ2lucyB0aGUgY2xvc2luZyB0cmFuc2l0aW9uLiAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbENsb3NlOiBFdmVudEVtaXR0ZXI8eyBjbG9zZVRhcmdldD86IEhUTUxFbGVtZW50IH0+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYlBvcG92ZXJFbGVtZW50LmV2ZW50cy53aWxsQ2xvc2UsXG4gICAgeyBjYW5jZWxhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBgc2JiLXBvcG92ZXJgIGlzIGNsb3NlZC4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGRpZENsb3NlOiBFdmVudEVtaXR0ZXI8eyBjbG9zZVRhcmdldD86IEhUTUxFbGVtZW50IH0+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYlBvcG92ZXJFbGVtZW50LmV2ZW50cy5kaWRDbG9zZSxcbiAgICB7IGNhbmNlbGFibGU6IHRydWUgfSxcbiAgKTtcblxuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50PzogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAvLyBUaGUgZWxlbWVudCB3aGljaCBzaG91bGQgcmVjZWl2ZSBmb2N1cyBhZnRlciBjbG9zaW5nIGJhc2VkIG9uIHdoZXJlIGluIHRoZSBiYWNrZHJvcCB0aGUgdXNlciBjbGlja3MuXG4gIHByaXZhdGUgX25leHRGb2N1c2VkRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9za2lwQ2xvc2VGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9wb3BvdmVyQ2xvc2VFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uUG9wb3Zlcj86IGJvb2xlYW47XG4gIHByaXZhdGUgX3BvcG92ZXJDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9vcGVuU3RhdGVDb250cm9sbGVyITogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9mb2N1c0hhbmRsZXIgPSBuZXcgU2JiRm9jdXNIYW5kbGVyKCk7XG4gIHByaXZhdGUgX2hvdmVyVHJpZ2dlciA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVuVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9jbG9zZVRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIC8qKiBPcGVucyB0aGUgcG9wb3ZlciBvbiB0cmlnZ2VyIGNsaWNrLiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAoKHRoaXMuc3RhdGUgIT09ICdjbG9zZWQnICYmIHRoaXMuc3RhdGUgIT09ICdjbG9zaW5nJykgfHwgIXRoaXMuX292ZXJsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2lsbE9wZW4uZW1pdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIG90aGVyIHBvcG92ZXJzXG4gICAgZm9yIChjb25zdCBwb3BvdmVyIG9mIEFycmF5LmZyb20ocG9wb3ZlcnNSZWYpKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHBvcG92ZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXN0YXRlJykgYXMgU2JiT3BlbmVkQ2xvc2VkU3RhdGU7XG4gICAgICBpZiAoc3RhdGUgJiYgKHN0YXRlID09PSAnb3BlbmVkJyB8fCBzdGF0ZSA9PT0gJ29wZW5pbmcnKSkge1xuICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zaG93UG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLmluZXJ0ID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRQb3BvdmVyUG9zaXRpb24oKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICB0aGlzLl9uZXh0Rm9jdXNlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc2tpcENsb3NlRm9jdXMgPSBmYWxzZTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cbiAgcHVibGljIGNsb3NlKHRhcmdldD86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnICYmIHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BvcG92ZXJDbG9zZUVsZW1lbnQgPSB0YXJnZXQ7XG4gICAgaWYgKCF0aGlzLndpbGxDbG9zZS5lbWl0KHsgY2xvc2VUYXJnZXQ6IHRhcmdldCB9KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYGNsb3NlZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLXBvcG92ZXItYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICB0aGlzLmhpZGVQb3BvdmVyPy4oKTtcblxuICAgIHRoaXMuX292ZXJsYXk/LmZpcnN0RWxlbWVudENoaWxkPy5zY3JvbGxUbygwLCAwKTtcbiAgICB0aGlzLl9vdmVybGF5Py5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG5cbiAgICBpZiAoIXRoaXMuX3NraXBDbG9zZUZvY3VzKSB7XG4gICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuX25leHRGb2N1c2VkRWxlbWVudCB8fCB0aGlzLl90cmlnZ2VyRWxlbWVudDtcblxuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAvLyBUbyBlbmFibGUgZm9jdXNpbmcgb3RoZXIgZWxlbWVudCB0aGFuIHRoZSB0cmlnZ2VyLCB3ZSBuZWVkIHRvIGNhbGwgZm9jdXMoKSBhIHNlY29uZCB0aW1lLlxuICAgICAgZWxlbWVudFRvRm9jdXM/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaWRDbG9zZS5lbWl0KHsgY2xvc2VUYXJnZXQ6IHRoaXMuX3BvcG92ZXJDbG9zZUVsZW1lbnQgfSk7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9mb2N1c0hhbmRsZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgdGhpcy5pbmVydCA9IGZhbHNlO1xuICAgIHRoaXMuX2F0dGFjaFdpbmRvd0V2ZW50cygpO1xuICAgIHRoaXMuX3NldFBvcG92ZXJGb2N1cygpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci50cmFwKHRoaXMsIHtcbiAgICAgIHBvc3RGaWx0ZXI6IChlbCkgPT4gZWwgIT09IHRoaXMuX292ZXJsYXksXG4gICAgfSk7XG4gICAgdGhpcy5kaWRPcGVuLmVtaXQoKTtcbiAgfVxuXG4gIC8vIENsb3NlcyB0aGUgcG9wb3ZlciBvbiBcIkVzY1wiIGtleSBwcmVzc2VkIGFuZCB0cmFwcyBmb2N1cyB3aXRoaW4gdGhlIHBvcG92ZXIuXG4gIHByaXZhdGUgX29uS2V5ZG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLmlkIHx8IGBzYmItcG9wb3Zlci0keysrbmV4dElkfWA7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdHJpZ2dlciBlbGVtZW50IGFuZCBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5fY29uZmlndXJlKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHBvcG92ZXJzUmVmLmFkZCh0aGlzIGFzIFNiYlBvcG92ZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygndHJpZ2dlcicpICYmIHRoaXMudHJpZ2dlciAhPT0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCd0cmlnZ2VyJykpIHtcbiAgICAgIHRoaXMuX3BvcG92ZXJDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2hvdmVyVHJpZ2dlcicpKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAodGhpcy5faG92ZXJUcmlnZ2VyKSB7XG4gICAgICB0aGlzLl9vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB0aGlzLl9vbk92ZXJsYXlNb3VzZUVudGVyKCkpO1xuICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4gdGhpcy5fb25PdmVybGF5TW91c2VMZWF2ZSgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9wb3BvdmVyQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX2ZvY3VzSGFuZGxlci5kaXNjb25uZWN0KCk7XG4gICAgcG9wb3ZlcnNSZWYuZGVsZXRlKHRoaXMgYXMgU2JiUG9wb3ZlckVsZW1lbnQpO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHRyaWdnZXIgaXMgdmFsaWQgYW5kIGF0dGFjaCBjbGljayBldmVudCBsaXN0ZW5lcnMuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZSgpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLl9jb25maWd1cmUoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVtb3ZlQXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCk7XG5cbiAgICBpZiAoIXRoaXMudHJpZ2dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gZmluZFJlZmVyZW5jZWRFbGVtZW50KHRoaXMudHJpZ2dlcik7XG5cbiAgICBpZiAoIXRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0QXJpYU92ZXJsYXlUcmlnZ2VyQXR0cmlidXRlcyh0aGlzLl90cmlnZ2VyRWxlbWVudCwgJ2RpYWxvZycsIHRoaXMuaWQsIHRoaXMuc3RhdGUpO1xuXG4gICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgdHJpZ2dlciBjYW4gYmUgaG92ZXJlZC4gU29tZSBkZXZpY2VzIG1pZ2h0IGludGVycHJldCB0aGUgbWVkaWEgcXVlcnkgKGhvdmVyOiBob3ZlcikgZGlmZmVyZW50bHksXG4gICAgLy8gYW5kIG5vdCByZXNwZWN0IHRoZSBmYWxsYmFjayBtZWNoYW5pc20gb24gdGhlIGNsaWNrLiBUaGVyZWZvcmUsIHRoZSBmb2xsb3dpbmcgaXMgcHJlZmVycmVkIHRvIGlkZW50aWZ5XG4gICAgLy8gYWxsIG5vbi10b3VjaHNjcmVlbiBkZXZpY2VzLlxuICAgIHRoaXMuX2hvdmVyVHJpZ2dlciA9IHRoaXMuaG92ZXJUcmlnZ2VyICYmICFwb2ludGVyQ29hcnNlO1xuXG4gICAgdGhpcy5fcG9wb3ZlckNvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgY29uc3QgeyBzaWduYWwgfSA9ICh0aGlzLl9wb3BvdmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKSk7XG4gICAgaWYgKHRoaXMuX2hvdmVyVHJpZ2dlcikge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuX29uVHJpZ2dlck1vdXNlRW50ZXIsIHsgc2lnbmFsIH0pO1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuX29uVHJpZ2dlck1vdXNlTGVhdmUsIHsgc2lnbmFsIH0pO1xuXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAna2V5ZG93bicsXG4gICAgICAgIChldnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZ0LmNvZGUgPT09ICdTcGFjZScgfHwgZXZ0LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBzaWduYWwgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdjbGljaycsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBzaWduYWwgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoV2luZG93RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0UG9wb3ZlclBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgLy8gV2l0aG91dCBjYXB0dXJlLCBvdGhlciBzY3JvbGwgY29udGV4dHMgd291bGQgbm90IGJ1YmJsZSB0byB0aGlzIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgLy8gQ2FwdHVyZSBhbGxvd3MgdXMgdG8gcmVhY3QgdG8gYWxsIHNjcm9sbCBjb250ZXh0cyBpbiB0aGlzIERPTS5cbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldFBvcG92ZXJQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fb25LZXlkb3duRXZlbnQoZXZlbnQpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvc2UgcG9wb3ZlciBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5TdGF0ZUNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2xvc2UgdGhlIHBvcG92ZXIgb24gY2xpY2sgb2YgYW55IGVsZW1lbnQgdGhhdCBoYXMgdGhlICdzYmItcG9wb3Zlci1jbG9zZScgYXR0cmlidXRlLlxuICBwcml2YXRlIF9jbG9zZU9uU2JiUG9wb3ZlckNsb3NlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2xvc2VFbGVtZW50ID0gY29tcG9zZWRQYXRoSGFzQXR0cmlidXRlKGV2ZW50LCAnc2JiLXBvcG92ZXItY2xvc2UnLCB0aGlzKTtcblxuICAgIGlmIChjbG9zZUVsZW1lbnQgJiYgIWNsb3NlRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgICAgdGhpcy5jbG9zZShjbG9zZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBwb3BvdmVyLlxuICBwcml2YXRlIF9wb2ludGVyRG93bkxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPblBvcG92ZXIgPSBpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KTtcbiAgfTtcblxuICAvLyBDbG9zZSBwb3BvdmVyIG9uIGJhY2tkcm9wIGNsaWNrLlxuICBwcml2YXRlIF9jbG9zZU9uQmFja2Ryb3BDbGljayA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPblBvcG92ZXIgJiYgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpKSB7XG4gICAgICB0aGlzLl9uZXh0Rm9jdXNlZEVsZW1lbnQgPSBldmVudFxuICAgICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgICAgLmZpbHRlcigoZWwpID0+IGVsIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KVxuICAgICAgICAuZmluZCgoZWwpID0+IChlbCBhcyBIVE1MRWxlbWVudCkubWF0Y2hlcyhJU19GT0NVU0FCTEVfUVVFUlkpKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVvdXQpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9vblRyaWdnZXJNb3VzZUVudGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2VkJyB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX29wZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLm9wZW4oKSwgdGhpcy5vcGVuRGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfb25UcmlnZ2VyTW91c2VMZWF2ZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5jbG9zZURlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX29wZW5UaW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfb25PdmVybGF5TW91c2VFbnRlciA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5pbmcnKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfb25PdmVybGF5TW91c2VMZWF2ZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5jbG9zZURlbGF5KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gU2V0IHBvcG92ZXIgcG9zaXRpb24gKHgsIHkpIHRvICcwJyBvbmNlIHRoZSBwb3BvdmVyIGlzIGNsb3NlZCBhbmQgdGhlIHRyYW5zaXRpb24gZW5kZWQgdG8gcHJldmVudCB0aGVcbiAgLy8gdmlld3BvcnQgZnJvbSBvdmVyZmxvd2luZy4gQW5kIHNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IG9uY2UgdGhlIHBvcG92ZXIgaXMgb3Blbi5cbiAgLy8gSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgLy8gVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICBwcml2YXRlIF9vblBvcG92ZXJBbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudC5cbiAgcHJpdmF0ZSBfc2V0UG9wb3ZlckZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID1cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ1tzYmItcG9wb3Zlci1jbG9zZV0nKSB8fFxuICAgICAgZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KFxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbHRlcigoZSk6IGUgaXMgSFRNTEVsZW1lbnQgPT4gZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCksXG4gICAgICApO1xuICAgIGlmIChmaXJzdEZvY3VzYWJsZSkge1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyhmaXJzdEZvY3VzYWJsZSk7XG4gICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vdmVybGF5LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgc2V0TW9kYWxpdHlPbk5leHRGb2N1cyh0aGlzLl9vdmVybGF5KTtcbiAgICAgIHRoaXMuX292ZXJsYXkuZm9jdXMoKTtcblxuICAgICAgLy8gV2hlbiBhIGJsdXIgb2NjdXJzLCB3ZSBrbm93IHRoYXQgdGhlIHBvcG92ZXIgaGFzIHRvIGJlIGNsb3NlZCxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGludGVyYWN0aXZlIGVsZW1lbnRzIGluc2lkZSB0aGUgcG9wb3Zlci5cbiAgICAgIC8vIFdoZW4gYSB3aW5kb3cvdGFiIGNoYW5nZSBvY2N1cnMsIGEgYmx1ciBldmVudCBpcyBhbHNvIGZpcmVkLiBIb3dldmVyLCB3aGVuIHRoZSBjdXJyZW50IHdpbmRvdy90YWJcbiAgICAgIC8vIGJlY29tZXMgYWN0aXZlIGFnYWluLCBpdCBmb2N1c2VzIG9uY2UgYWdhaW4gdGhlIHBvcG92ZXIuXG4gICAgICAvLyBUaGVyZWZvcmUsIHdlIGNhbm5vdCBsaXN0ZW4gdG8gdGhlIGJsdXIgZXZlbnQgb25seSBvbmNlLlxuICAgICAgLy8gVG8gcHJldmVudCBhY2NpZGVudGFsbHkgY2xvc2luZyB0aGUgcG9wb3Zlciwgd2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIHdpbmRvdy90YWIgc3RhdGUuXG4gICAgICAvLyBXZSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IHVzaW5nIHZpc2liaWxpdHlTdGF0ZSwgd2hpY2ggb25seSB3b3JrcyB3aXRoIHNldFRpbWVvdXQoKS5cbiAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2JsdXInLFxuICAgICAgICAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5Py5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ2xvc2VGb2N1cyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuU3RhdGVDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0UG9wb3ZlclBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3ZlcmxheSB8fCAhdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3BvdmVyUG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItcG9wb3Zlcl9fY29udGFpbmVyJykhLFxuICAgICAge1xuICAgICAgICB2ZXJ0aWNhbE9mZnNldDogVkVSVElDQUxfT0ZGU0VULFxuICAgICAgICBob3Jpem9udGFsT2Zmc2V0OiBIT1JJWk9OVEFMX09GRlNFVCxcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgIHJlc3BvbnNpdmVIZWlnaHQ6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9zaXRpb24nLCBwb3BvdmVyUG9zaXRpb24uYWxpZ25tZW50LnZlcnRpY2FsKTtcblxuICAgIGNvbnN0IGFycm93WFBvc2l0aW9uID1cbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuICAgICAgcG9wb3ZlclBvc2l0aW9uLmxlZnQgK1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC1cbiAgICAgIDg7IC8vIGhhbGYgdGhlIHNpemUgb2YgdGhlIHBvcG92ZXIgYXJyb3dcblxuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItcG9zaXRpb24teCcsIGAke3BvcG92ZXJQb3NpdGlvbi5sZWZ0fXB4YCk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItcG9wb3Zlci1wb3NpdGlvbi15JywgYCR7cG9wb3ZlclBvc2l0aW9uLnRvcH1weGApO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2JiLXBvcG92ZXItYXJyb3ctcG9zaXRpb24teCcsIGAke2Fycm93WFBvc2l0aW9ufXB4YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi1wb3BvdmVyX19jbG9zZVwiPlxuICAgICAgICA8c2JiLXNlY29uZGFyeS1idXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5Q2xvc2VMYWJlbCB8fCBpMThuQ2xvc2VQb3BvdmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpY29uLW5hbWU9XCJjcm9zcy1zbWFsbFwiXG4gICAgICAgICAgc2JiLXBvcG92ZXItY2xvc2VcbiAgICAgICAgPjwvc2JiLXNlY29uZGFyeS1idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgYDtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1wb3BvdmVyX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vblBvcG92ZXJBbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItcG9wb3ZlclwiXG4gICAgICAgICAgcm9sZT1cInRvb2x0aXBcIlxuICAgICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpID0+ICh0aGlzLl9vdmVybGF5ID0gZWwgYXMgSFRNTERpdkVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIEBjbGljaz0keyhldmVudDogRXZlbnQpID0+IHRoaXMuX2Nsb3NlT25TYmJQb3BvdmVyQ2xvc2VDbGljayhldmVudCl9XG4gICAgICAgICAgICBjbGFzcz1cInNiYi1wb3BvdmVyX19jb250ZW50XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAkeyF0aGlzLmhpZGVDbG9zZUJ1dHRvbiAmJiAhdGhpcy5faG92ZXJUcmlnZ2VyID8gY2xvc2VCdXR0b24gOiBub3RoaW5nfVxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIDxzbG90Pk5vIGNvbnRlbnQ8L3Nsb3Q+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXBvcG92ZXInOiBTYmJQb3BvdmVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNiYlBvcG92ZXJFbGVtZW50IiwiX2EiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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
@@ -36,6 +36,7 @@ export declare class SbbSelectElement extends SbbSelectElement_base {
36
36
  accessor placeholder: string;
37
37
  /** Whether the select allows for multiple selection. */
38
38
  accessor multiple: boolean;
39
+ accessor disabled: boolean;
39
40
  /** Whether the select is readonly. */
40
41
  accessor readonly: boolean;
41
42
  /**
@@ -84,6 +85,16 @@ export declare class SbbSelectElement extends SbbSelectElement_base {
84
85
  /** Listens to option changes. */
85
86
  private _onOptionLabelChanged;
86
87
  private _updateDisplayValue;
88
+ /**
89
+ * The `value` property should be adapted when the `multiple` property changes:
90
+ * - if it changes to true, the 'value' is set to an array;
91
+ * - if it changes to false, the first available option is set as 'value' otherwise it's set to null.
92
+ */
93
+ private _onMultipleChanged;
94
+ /**
95
+ * If the `disabled` or the `readonly` properties are set, and the panel is open, close it.
96
+ */
97
+ private _closeOnDisabledReadonlyChanged;
87
98
  /** Sets the _displayValue by checking the internal sbb-options and setting the correct `selected` value on them. */
88
99
  private _onValueChanged;
89
100
  protected firstUpdated(changedProperties: PropertyValues<this>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/elements/select/select.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/elements/select/select.ts"],"names":[],"mappings":"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"}