@sbb-esta/lyne-elements-dev 4.9.0-dev.1774601733 → 4.9.0-dev.1774848187

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 (29) hide show
  1. package/core/styles/core.scss +13 -65
  2. package/core.css +37 -34
  3. package/development/sidebar/sidebar/sidebar.component.js +1 -1
  4. package/development/sidebar/sidebar-content/sidebar-content.component.js +1 -1
  5. package/development/sidebar/sidebar-content.js +1 -1
  6. package/development/sidebar/sidebar-title/sidebar-title.component.js +1 -1
  7. package/development/sidebar/sidebar-title.js +1 -1
  8. package/development/sidebar/sidebar.js +1 -1
  9. package/development/{sidebar-content.component-rgVbuDj-.js → sidebar-content.component-6oadojLp.js} +4 -4
  10. package/development/{sidebar-title.component-BFkOaVcL.js → sidebar-title.component-DU-ZLEU0.js} +3 -3
  11. package/development/sidebar.component-BmLRuuec.js +506 -0
  12. package/development/sidebar.js +3 -3
  13. package/development/sidebar.pure.js +3 -3
  14. package/off-brand-theme.css +37 -34
  15. package/package.json +2 -2
  16. package/safety-theme.css +37 -34
  17. package/sidebar/sidebar/sidebar.component.js +1 -1
  18. package/sidebar/sidebar-content/sidebar-content.component.js +1 -1
  19. package/sidebar/sidebar-content.js +1 -1
  20. package/sidebar/sidebar-title/sidebar-title.component.js +1 -1
  21. package/sidebar/sidebar-title.js +1 -1
  22. package/sidebar/sidebar.js +1 -1
  23. package/{sidebar-content.component-da7RYWO6.js → sidebar-content.component-BYmmHoc5.js} +1 -1
  24. package/{sidebar-title.component-CjWUiisH.js → sidebar-title.component-lEdsEEMO.js} +1 -1
  25. package/{sidebar.component-Cde1EWDT.js → sidebar.component-BkTSnoNM.js} +2 -2
  26. package/sidebar.js +3 -3
  27. package/sidebar.pure.js +3 -3
  28. package/standard-theme.css +37 -34
  29. package/development/sidebar.component-hkvDm_fC.js +0 -506
@@ -1,506 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { css, html, isServer } from "lit";
3
- import { eventOptions, property } from "lit/decorators.js";
4
- import { SbbOpenCloseBaseElement } from "./core/base-elements.js";
5
- import { forceType, handleDistinctChange } from "./core/decorators.js";
6
- import { isZeroAnimationDuration } from "./core/dom.js";
7
- import { SbbAnimationCompleteMixin } from "./core/mixins.js";
8
- import { boxSizingStyles } from "./core/styles.js";
9
- import { SbbEscapableOverlayController } from "./core/controllers.js";
10
- import { ResizeController } from "@lit-labs/observers/resize-controller.js";
11
- import { SbbFocusTrapController } from "./core/a11y.js";
12
- //#region src/elements/sidebar/sidebar/sidebar.scss?lit&inline
13
- var sidebar_default = css`:host {
14
- display: block;
15
- width: 20rem;
16
- --sbb-link-text-decoration-line: none;
17
- --sbb-sidebar-background-color: var(--sbb-background-color-1);
18
- --sbb-sidebar-title-padding-block: var(--sbb-spacing-fixed-3x);
19
- --sbb-sidebar-padding: var(--sbb-spacing-responsive-xs);
20
- --sbb-sidebar-scrollbar-placeholder-width: var(--sbb-spacing-fixed-3x);
21
- --sbb-sidebar-border-radius: var(--sbb-border-radius-8x);
22
- --sbb-sidebar-margin: var(--sbb-spacing-fixed-3x);
23
- --sbb-sidebar-title-gap: var(--sbb-spacing-fixed-2x);
24
- --sbb-sidebar__margin: 0;
25
- --sbb-sidebar__margin-block-start: var(--sbb-sidebar-margin);
26
- --sbb-sidebar__translate-x: -100%;
27
- --sbb-sidebar__z-index: 2;
28
- --sbb-sidebar__padding-inline-end: var(--sbb-sidebar-padding);
29
- --sbb-sidebar__padding-block-start: var(--sbb-sidebar-padding);
30
- --sbb-sidebar__border-radius-start: var(--sbb-sidebar-border-radius);
31
- --sbb-sidebar__border-radius-end: 0;
32
- --sbb-sidebar__close-button-size: var(--sbb-size-element-xs);
33
- }
34
- @supports (scrollbar-gutter: stable) and (not (-webkit-touch-callout: none)) {
35
- :host {
36
- --sbb-sidebar__padding-inline-end: calc(
37
- var(--sbb-sidebar-padding) - var(--sbb-sidebar-scrollbar-placeholder-width)
38
- );
39
- }
40
- }
41
-
42
- :host([color=milk]) {
43
- --sbb-sidebar-background-color: var(--sbb-background-color-3);
44
- }
45
-
46
- :host(:is([mode=over], :is(:state(mode-over-forced),[state--mode-over-forced]):not(:is(:state(mode-over-forced-closing),[state--mode-over-forced-closing])))) {
47
- --sbb-sidebar__margin: var(--sbb-sidebar-margin);
48
- --sbb-sidebar__border-radius-end: var(--sbb-sidebar-border-radius);
49
- --sbb-sidebar__z-index: 3;
50
- }
51
-
52
- :host(:is(:dir(rtl), [position=end])) {
53
- --sbb-sidebar__translate-x: 100%;
54
- }
55
-
56
- :host(:dir(rtl)[position=end]) {
57
- --sbb-sidebar__translate-x: -100%;
58
- }
59
-
60
- .sbb-sidebar {
61
- width: inherit;
62
- max-width: calc(100% - 2 * var(--sbb-sidebar__margin));
63
- background-color: var(--sbb-sidebar-background-color);
64
- display: flex;
65
- flex-direction: column;
66
- position: absolute;
67
- overflow: hidden;
68
- inset-block: 0;
69
- z-index: var(--sbb-sidebar__z-index);
70
- border-start-start-radius: var(--sbb-sidebar__border-radius-start);
71
- border-start-end-radius: var(--sbb-sidebar__border-radius-start);
72
- border-end-start-radius: var(--sbb-sidebar__border-radius-end);
73
- border-end-end-radius: var(--sbb-sidebar__border-radius-end);
74
- margin: var(--sbb-sidebar__margin);
75
- margin-block-start: var(--sbb-sidebar__margin-block-start);
76
- transition-duration: var(--sbb-sidebar-container-animation-duration);
77
- transition-timing-function: var(--sbb-sidebar-container-animation-easing);
78
- transition-property: width, translate;
79
- translate: none;
80
- }
81
- :host([position=end]) .sbb-sidebar {
82
- inset-inline-end: 0;
83
- }
84
- :host(:is(:state(state-closed),[state--state-closed])) .sbb-sidebar {
85
- visibility: hidden;
86
- }
87
- :host(:is(:is(:state(state-closing),[state--state-closing]), :is(:state(state-closed),[state--state-closed]))) .sbb-sidebar {
88
- translate: var(--sbb-sidebar__translate-x) 0;
89
- }
90
-
91
- .sbb-sidebar-title-section {
92
- display: flex;
93
- width: 100%;
94
- gap: var(--sbb-sidebar-title-gap);
95
- background-color: var(--sbb-sidebar-background-color);
96
- padding-inline: var(--sbb-sidebar-padding);
97
- transition: box-shadow var(--sbb-animation-easing) var(--sbb-sidebar-container-animation-duration);
98
- box-shadow: none;
99
- }
100
- :host(:is(:state(scrolled),[state--scrolled])) .sbb-sidebar-title-section {
101
- box-shadow: var(--sbb-box-shadow-level-5-soft);
102
- }
103
-
104
- .sbb-sidebar-content-section {
105
- --sbb-scrollbar-thumb-width: 0.125rem;
106
- --sbb-scrollbar-thumb-width-hover: 0.25rem;
107
- --sbb-scrollbar-width-firefox: thin;
108
- --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
109
- --sbb-scrollbar-color: light-dark(
110
- color-mix(in srgb, var(--sbb-color-black) 30%, transparent),
111
- color-mix(in srgb, var(--sbb-color-white) 30%, transparent)
112
- );
113
- --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);
114
- --sbb-scrollbar-color-hover: light-dark(
115
- color-mix(in srgb, var(--sbb-color-black) 60%, transparent),
116
- color-mix(in srgb, var(--sbb-color-white) 60%, transparent)
117
- );
118
- --sbb-scrollbar-track-color: transparent;
119
- --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
120
- }
121
- .sbb-sidebar-content-section::-webkit-scrollbar {
122
- width: var(--sbb-scrollbar-width);
123
- height: var(--sbb-scrollbar-width);
124
- background-color: var(--sbb-scrollbar-track-color, transparent);
125
- }
126
- .sbb-sidebar-content-section::-webkit-scrollbar-corner {
127
- background-color: var(--sbb-scrollbar-track-color, transparent);
128
- }
129
- .sbb-sidebar-content-section::-webkit-scrollbar-thumb {
130
- background-color: var(--sbb-scrollbar-color, currentcolor);
131
- border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;
132
- border-radius: var(--sbb-border-radius-4x);
133
- background-clip: padding-box;
134
- }
135
- .sbb-sidebar-content-section::-webkit-scrollbar-thumb:hover {
136
- background-color: var(--sbb-scrollbar-color-hover, currentcolor);
137
- border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));
138
- }
139
- .sbb-sidebar-content-section::-webkit-scrollbar-button, .sbb-sidebar-content-section::-webkit-scrollbar-corner {
140
- display: none;
141
- }
142
- @supports not selector(::-webkit-scrollbar) {
143
- .sbb-sidebar-content-section {
144
- scrollbar-width: var(--sbb-scrollbar-width-firefox);
145
- scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);
146
- }
147
- }
148
- .sbb-sidebar-content-section {
149
- padding-block-start: var(--sbb-sidebar__padding-block-start);
150
- padding-inline: var(--sbb-sidebar-padding) var(--sbb-sidebar__padding-inline-end);
151
- overflow-y: auto;
152
- flex-grow: 1;
153
- outline-color: var(--sbb-focus-outline-color);
154
- }
155
- @supports (scrollbar-gutter: stable) {
156
- .sbb-sidebar-content-section {
157
- scrollbar-gutter: stable;
158
- }
159
- }
160
-
161
- ::slotted(sbb-sidebar-title) {
162
- flex-grow: 1;
163
- margin-block: var(--sbb-sidebar-title-padding-block);
164
- }
165
-
166
- ::slotted(sbb-sidebar-close-button) {
167
- order: 1;
168
- margin-inline-end: calc(-1 * (var(--sbb-sidebar-padding) - var(--sbb-sidebar-title-padding-block)));
169
- margin-block: var(--sbb-sidebar-title-padding-block);
170
- inset-inline-end: var(--sbb-sidebar-padding);
171
- }`;
172
- //#endregion
173
- //#region src/elements/sidebar/sidebar/sidebar.component.ts
174
- /**
175
- * This component corresponds to a sidebar that can be opened on the sidebar container.
176
- *
177
- * @slot - Use the unnamed slot to slot any content into the sidebar.
178
- * @slot title - Use the title slot to add an <sbb-title>.
179
- */
180
- var SbbSidebarElement = (() => {
181
- let _classSuper = SbbAnimationCompleteMixin(SbbOpenCloseBaseElement);
182
- let _instanceExtraInitializers = [];
183
- let _color_decorators;
184
- let _color_initializers = [];
185
- let _color_extraInitializers = [];
186
- let _mode_decorators;
187
- let _mode_initializers = [];
188
- let _mode_extraInitializers = [];
189
- let _position_decorators;
190
- let _position_initializers = [];
191
- let _position_extraInitializers = [];
192
- let _opened_decorators;
193
- let _opened_initializers = [];
194
- let _opened_extraInitializers = [];
195
- let _focusOnOpen_decorators;
196
- let _focusOnOpen_initializers = [];
197
- let _focusOnOpen_extraInitializers = [];
198
- let __detectScrolledState_decorators;
199
- return class SbbSidebarElement extends _classSuper {
200
- static {
201
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
202
- _color_decorators = [property({ reflect: true })];
203
- _mode_decorators = [forceType((v) => v === "over" ? "over" : "side"), property({ reflect: true })];
204
- _position_decorators = [
205
- forceType((v) => v === "end" ? "end" : "start"),
206
- handleDistinctChange((instance, _newValue, oldValue) => instance._updateSidebarWidth(oldValue)),
207
- property({ reflect: true })
208
- ];
209
- _opened_decorators = [forceType(), property({
210
- type: Boolean,
211
- reflect: true
212
- })];
213
- _focusOnOpen_decorators = [forceType(), property({
214
- type: Boolean,
215
- attribute: "focus-on-open"
216
- })];
217
- __detectScrolledState_decorators = [eventOptions({ passive: true })];
218
- __esDecorate(this, null, _color_decorators, {
219
- kind: "accessor",
220
- name: "color",
221
- static: false,
222
- private: false,
223
- access: {
224
- has: (obj) => "color" in obj,
225
- get: (obj) => obj.color,
226
- set: (obj, value) => {
227
- obj.color = value;
228
- }
229
- },
230
- metadata: _metadata
231
- }, _color_initializers, _color_extraInitializers);
232
- __esDecorate(this, null, _mode_decorators, {
233
- kind: "accessor",
234
- name: "mode",
235
- static: false,
236
- private: false,
237
- access: {
238
- has: (obj) => "mode" in obj,
239
- get: (obj) => obj.mode,
240
- set: (obj, value) => {
241
- obj.mode = value;
242
- }
243
- },
244
- metadata: _metadata
245
- }, _mode_initializers, _mode_extraInitializers);
246
- __esDecorate(this, null, _position_decorators, {
247
- kind: "accessor",
248
- name: "position",
249
- static: false,
250
- private: false,
251
- access: {
252
- has: (obj) => "position" in obj,
253
- get: (obj) => obj.position,
254
- set: (obj, value) => {
255
- obj.position = value;
256
- }
257
- },
258
- metadata: _metadata
259
- }, _position_initializers, _position_extraInitializers);
260
- __esDecorate(this, null, _opened_decorators, {
261
- kind: "accessor",
262
- name: "opened",
263
- static: false,
264
- private: false,
265
- access: {
266
- has: (obj) => "opened" in obj,
267
- get: (obj) => obj.opened,
268
- set: (obj, value) => {
269
- obj.opened = value;
270
- }
271
- },
272
- metadata: _metadata
273
- }, _opened_initializers, _opened_extraInitializers);
274
- __esDecorate(this, null, _focusOnOpen_decorators, {
275
- kind: "accessor",
276
- name: "focusOnOpen",
277
- static: false,
278
- private: false,
279
- access: {
280
- has: (obj) => "focusOnOpen" in obj,
281
- get: (obj) => obj.focusOnOpen,
282
- set: (obj, value) => {
283
- obj.focusOnOpen = value;
284
- }
285
- },
286
- metadata: _metadata
287
- }, _focusOnOpen_initializers, _focusOnOpen_extraInitializers);
288
- __esDecorate(this, null, __detectScrolledState_decorators, {
289
- kind: "method",
290
- name: "_detectScrolledState",
291
- static: false,
292
- private: false,
293
- access: {
294
- has: (obj) => "_detectScrolledState" in obj,
295
- get: (obj) => obj._detectScrolledState
296
- },
297
- metadata: _metadata
298
- }, null, _instanceExtraInitializers);
299
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
300
- enumerable: true,
301
- configurable: true,
302
- writable: true,
303
- value: _metadata
304
- });
305
- }
306
- static {
307
- this.elementName = "sbb-sidebar";
308
- }
309
- static {
310
- this.styles = [boxSizingStyles, sidebar_default];
311
- }
312
- #color_accessor_storage;
313
- /** Background color of the sidebar. Either `white` or `milk`. */
314
- get color() {
315
- return this.#color_accessor_storage;
316
- }
317
- set color(value) {
318
- this.#color_accessor_storage = value;
319
- }
320
- #mode_accessor_storage;
321
- /** Mode of the sidebar; one of 'side' or 'over'. */
322
- get mode() {
323
- return this.#mode_accessor_storage;
324
- }
325
- set mode(value) {
326
- this.#mode_accessor_storage = value;
327
- }
328
- #position_accessor_storage;
329
- /** The side that the sidebar is attached to. */
330
- get position() {
331
- return this.#position_accessor_storage;
332
- }
333
- set position(value) {
334
- this.#position_accessor_storage = value;
335
- }
336
- #opened_accessor_storage;
337
- /**
338
- * Whether the sidebar is opened or closed.
339
- * Can be used to initially set the opened state, where
340
- * the animation will be skipped.
341
- */
342
- get opened() {
343
- return this.#opened_accessor_storage;
344
- }
345
- set opened(value) {
346
- this.#opened_accessor_storage = value;
347
- }
348
- #focusOnOpen_accessor_storage;
349
- /**
350
- * Whether the sidebar should focus the first focusable element automatically when opened.
351
- * Defaults to false in when mode is set to `side`, otherwise defaults to true.
352
- * If explicitly enabled, focus will be moved into the sidebar in `side` mode as well.
353
- */
354
- get focusOnOpen() {
355
- return this.#focusOnOpen_accessor_storage;
356
- }
357
- set focusOnOpen(value) {
358
- this.#focusOnOpen_accessor_storage = value;
359
- }
360
- /** Returns the SbbSidebarContainerElement where this sidebar is contained. */
361
- get container() {
362
- return this._container;
363
- }
364
- constructor() {
365
- super();
366
- this.#color_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _color_initializers, "white"));
367
- this.#mode_accessor_storage = (__runInitializers(this, _color_extraInitializers), __runInitializers(this, _mode_initializers, "side"));
368
- this.#position_accessor_storage = (__runInitializers(this, _mode_extraInitializers), __runInitializers(this, _position_initializers, "start"));
369
- this.#opened_accessor_storage = (__runInitializers(this, _position_extraInitializers), __runInitializers(this, _opened_initializers, false));
370
- this.#focusOnOpen_accessor_storage = (__runInitializers(this, _opened_extraInitializers), __runInitializers(this, _focusOnOpen_initializers, false));
371
- this._container = (__runInitializers(this, _focusOnOpen_extraInitializers), null);
372
- this._lastFocusedElement = null;
373
- this._focusTrapController = new SbbFocusTrapController(this);
374
- this._escapableOverlayController = new SbbEscapableOverlayController(this);
375
- this.addController(new ResizeController(this, {
376
- skipInitial: true,
377
- callback: () => this._updateSidebarWidth()
378
- }));
379
- this.addEventListener?.("click", (e) => {
380
- if (e.target?.localName === "sbb-sidebar-close-button") this.close();
381
- });
382
- }
383
- connectedCallback() {
384
- super.connectedCallback();
385
- this._container = this.closest?.("sbb-sidebar-container");
386
- this._updateSidebarWidth();
387
- if (this.isOpen && this._isModeOver()) this._takeFocus();
388
- }
389
- disconnectedCallback() {
390
- super.disconnectedCallback();
391
- this.container?.style.removeProperty(this._buildCssWidthVar());
392
- this._container = null;
393
- }
394
- willUpdate(changedProperties) {
395
- super.willUpdate(changedProperties);
396
- if (changedProperties.has("opened")) {
397
- if (this.opened) this.open();
398
- else if (!this.opened) this.close();
399
- }
400
- if (changedProperties.has("mode")) if (this.mode === "over" && this.isOpen) this._takeFocus();
401
- else this.cedeFocus();
402
- }
403
- firstUpdated(changedProperties) {
404
- super.firstUpdated(changedProperties);
405
- this._updateSidebarWidth();
406
- }
407
- /** Toggles the sidebar visibility. */
408
- toggle() {
409
- if (this.state === "opening" || this.state === "opened") this.close();
410
- else this.open();
411
- }
412
- /** Opens the sidebar. */
413
- open() {
414
- if (this.state === "opening" || this.state === "opened" || !this.dispatchBeforeOpenEvent()) return;
415
- this.startAnimation();
416
- if (!isServer && document.activeElement?.localName !== "body") this._lastFocusedElement = document.activeElement;
417
- this.opened = true;
418
- this.state = "opening";
419
- const isZeroAnimationDuration = this._isZeroAnimationDuration() || !this.isConnected;
420
- const isDuringInitialization = !this.hasUpdated;
421
- if (!(isDuringInitialization || isZeroAnimationDuration)) return;
422
- this.internals.states.add("skip-animation");
423
- if (isDuringInitialization) this.updateComplete.then(() => this._handleOpening());
424
- else this._handleOpening();
425
- }
426
- _isZeroAnimationDuration() {
427
- return isZeroAnimationDuration(this, "--sbb-sidebar-container-animation-duration");
428
- }
429
- _handleOpening() {
430
- this.state = "opened";
431
- setTimeout(() => this.internals.states.delete("skip-animation"));
432
- this._takeFocus();
433
- this.stopAnimation();
434
- this.dispatchOpenEvent();
435
- }
436
- /** Closes the sidebar. */
437
- close() {
438
- if (this.state === "closing" || this.state === "closed" || !this.dispatchBeforeCloseEvent()) return;
439
- this.startAnimation();
440
- const isZeroAnimationDuration = this._isZeroAnimationDuration();
441
- if (!this.hasUpdated || isZeroAnimationDuration) this.internals.states.add("skip-animation");
442
- else this.state = "closing";
443
- this.opened = false;
444
- if (!this.hasUpdated || isZeroAnimationDuration) this._handleClosing();
445
- }
446
- _handleClosing() {
447
- this.state = "closed";
448
- setTimeout(() => this.internals.states.delete("skip-animation"));
449
- this.cedeFocus();
450
- if (!isServer && (this.contains(document.activeElement) || this._isModeOver())) if (this._lastFocusedElement) this._lastFocusedElement?.focus();
451
- else document.activeElement.blur();
452
- this._lastFocusedElement = null;
453
- this.stopAnimation();
454
- this.dispatchCloseEvent();
455
- }
456
- _takeFocus() {
457
- if (!this.isConnected) return;
458
- const isModeOver = this._isModeOver();
459
- if (isModeOver || this.focusOnOpen) this._focusTrapController.focusInitialElement();
460
- if (isModeOver) {
461
- this._escapableOverlayController.connect();
462
- this._focusTrapController.enabled = true;
463
- }
464
- }
465
- cedeFocus() {
466
- this._focusTrapController.enabled = false;
467
- this._escapableOverlayController.disconnect();
468
- }
469
- _updateSidebarWidth(oldPosition) {
470
- const container = this.container;
471
- if (!container) return;
472
- if (oldPosition) container.style.removeProperty(this._buildCssWidthVar(oldPosition));
473
- const width = this.offsetWidth;
474
- if (!width) return;
475
- const newValue = `${width}px`;
476
- if (container.style.getPropertyValue(this._buildCssWidthVar()) === newValue) return;
477
- container.style.setProperty(this._buildCssWidthVar(), newValue);
478
- }
479
- _buildCssWidthVar(position = this.position) {
480
- return `--sbb-sidebar-container__${position}-width`;
481
- }
482
- _isModeOver() {
483
- return this.mode === "over" || this.matches(":is(:state(mode-over-forced),[state--mode-over-forced])");
484
- }
485
- _onTransitionEnd(event) {
486
- if (event.propertyName !== "translate" || event.target !== event.currentTarget) return;
487
- if (this.state === "opening") this._handleOpening();
488
- else if (this.state === "closing") this._handleClosing();
489
- }
490
- _detectScrolledState() {
491
- this.toggleState("scrolled", (this.shadowRoot?.querySelector(".sbb-sidebar-content-section")?.scrollTop ?? 0) > 0);
492
- }
493
- render() {
494
- return html`<div class="sbb-sidebar" @transitionend=${this._onTransitionEnd}>
495
- <div class="sbb-sidebar-title-section"><slot name="title-section"></slot></div>
496
- <div class="sbb-sidebar-content-section" @scroll=${() => this._detectScrolledState()}>
497
- <slot></slot>
498
- </div>
499
- </div>`;
500
- }
501
- };
502
- })();
503
- //#endregion
504
- export { SbbSidebarElement as t };
505
-
506
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQtaGt2RG1fZkMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NpZGViYXIvc2lkZWJhci9zaWRlYmFyLnNjc3M/bGl0JmlubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9zaWRlYmFyL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzMjApfTtcblxuICAtLXNiYi1saW5rLXRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lO1xuICAtLXNiYi1zaWRlYmFyLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTEpO1xuICAtLXNiYi1zaWRlYmFyLXRpdGxlLXBhZGRpbmctYmxvY2s6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbiAgLS1zYmItc2lkZWJhci1wYWRkaW5nOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXhzKTtcbiAgLS1zYmItc2lkZWJhci1zY3JvbGxiYXItcGxhY2Vob2xkZXItd2lkdGg6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbiAgLS1zYmItc2lkZWJhci1ib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItYm9yZGVyLXJhZGl1cy04eCk7XG4gIC0tc2JiLXNpZGViYXItbWFyZ2luOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0zeCk7XG4gIC0tc2JiLXNpZGViYXItdGl0bGUtZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0yeCk7XG4gIC0tc2JiLXNpZGViYXJfX21hcmdpbjogMDtcbiAgLS1zYmItc2lkZWJhcl9fbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zYmItc2lkZWJhci1tYXJnaW4pO1xuICAtLXNiYi1zaWRlYmFyX190cmFuc2xhdGUteDogLTEwMCU7XG4gIC0tc2JiLXNpZGViYXJfX3otaW5kZXg6IDI7XG4gIC0tc2JiLXNpZGViYXJfX3BhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc2JiLXNpZGViYXItcGFkZGluZyk7XG4gIC0tc2JiLXNpZGViYXJfX3BhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLXNiYi1zaWRlYmFyLXBhZGRpbmcpO1xuICAtLXNiYi1zaWRlYmFyX19ib3JkZXItcmFkaXVzLXN0YXJ0OiB2YXIoLS1zYmItc2lkZWJhci1ib3JkZXItcmFkaXVzKTtcbiAgLS1zYmItc2lkZWJhcl9fYm9yZGVyLXJhZGl1cy1lbmQ6IDA7XG4gIC0tc2JiLXNpZGViYXJfX2Nsb3NlLWJ1dHRvbi1zaXplOiB2YXIoLS1zYmItc2l6ZS1lbGVtZW50LXhzKTtcblxuICAvLyBTdWJ0cmFjdCB0aGUgd2lkdGggb2YgdGhlIHNjcm9sbGJhciBmcm9tIHRoZSBwYWRkaW5nIChFeGNsdWRlIGlPUyBicm93c2VycyBiZWNhdXNlIHRoZXkgdXNlIG92ZXJsYXkgc2Nyb2xsYmFycylcbiAgQHN1cHBvcnRzIChzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUpIGFuZCAobm90ICgtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmUpKSB7XG4gICAgLS1zYmItc2lkZWJhcl9fcGFkZGluZy1pbmxpbmUtZW5kOiBjYWxjKFxuICAgICAgdmFyKC0tc2JiLXNpZGViYXItcGFkZGluZykgLSB2YXIoLS1zYmItc2lkZWJhci1zY3JvbGxiYXItcGxhY2Vob2xkZXItd2lkdGgpXG4gICAgKTtcbiAgfVxufVxuXG46aG9zdChbY29sb3I9J21pbGsnXSkge1xuICAtLXNiYi1zaWRlYmFyLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTMpO1xufVxuXG46aG9zdCg6aXMoW21vZGU9J292ZXInXSwgOnN0YXRlKG1vZGUtb3Zlci1mb3JjZWQpOm5vdCg6c3RhdGUobW9kZS1vdmVyLWZvcmNlZC1jbG9zaW5nKSkpKSB7XG4gIC0tc2JiLXNpZGViYXJfX21hcmdpbjogdmFyKC0tc2JiLXNpZGViYXItbWFyZ2luKTtcbiAgLS1zYmItc2lkZWJhcl9fYm9yZGVyLXJhZGl1cy1lbmQ6IHZhcigtLXNiYi1zaWRlYmFyLWJvcmRlci1yYWRpdXMpO1xuICAtLXNiYi1zaWRlYmFyX196LWluZGV4OiAzO1xufVxuXG46aG9zdCg6aXMoOmRpcihydGwpLCBbcG9zaXRpb249J2VuZCddKSkge1xuICAtLXNiYi1zaWRlYmFyX190cmFuc2xhdGUteDogMTAwJTtcbn1cblxuOmhvc3QoOmRpcihydGwpW3Bvc2l0aW9uPSdlbmQnXSkge1xuICAtLXNiYi1zaWRlYmFyX190cmFuc2xhdGUteDogLTEwMCU7XG59XG5cbi5zYmItc2lkZWJhciB7XG4gIHdpZHRoOiBpbmhlcml0O1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiB2YXIoLS1zYmItc2lkZWJhcl9fbWFyZ2luKSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1zaWRlYmFyLWJhY2tncm91bmQtY29sb3IpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGluc2V0LWJsb2NrOiAwO1xuICB6LWluZGV4OiB2YXIoLS1zYmItc2lkZWJhcl9fei1pbmRleCk7XG4gIGJvcmRlci1zdGFydC1zdGFydC1yYWRpdXM6IHZhcigtLXNiYi1zaWRlYmFyX19ib3JkZXItcmFkaXVzLXN0YXJ0KTtcbiAgYm9yZGVyLXN0YXJ0LWVuZC1yYWRpdXM6IHZhcigtLXNiYi1zaWRlYmFyX19ib3JkZXItcmFkaXVzLXN0YXJ0KTtcbiAgYm9yZGVyLWVuZC1zdGFydC1yYWRpdXM6IHZhcigtLXNiYi1zaWRlYmFyX19ib3JkZXItcmFkaXVzLWVuZCk7XG4gIGJvcmRlci1lbmQtZW5kLXJhZGl1czogdmFyKC0tc2JiLXNpZGViYXJfX2JvcmRlci1yYWRpdXMtZW5kKTtcbiAgbWFyZ2luOiB2YXIoLS1zYmItc2lkZWJhcl9fbWFyZ2luKTtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zYmItc2lkZWJhcl9fbWFyZ2luLWJsb2NrLXN0YXJ0KTtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tc2JiLXNpZGViYXItY29udGFpbmVyLWFuaW1hdGlvbi1kdXJhdGlvbik7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItc2lkZWJhci1jb250YWluZXItYW5pbWF0aW9uLWVhc2luZyk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHdpZHRoLCB0cmFuc2xhdGU7XG4gIHRyYW5zbGF0ZTogbm9uZTtcblxuICA6aG9zdChbcG9zaXRpb249J2VuZCddKSAmIHtcbiAgICBpbnNldC1pbmxpbmUtZW5kOiAwO1xuICB9XG5cbiAgOmhvc3QoOnN0YXRlKHN0YXRlLWNsb3NlZCkpICYge1xuICAgIC8vIFN0b3BzIHRoZSBzaWRlbmF2IGZyb20gcG9raW5nIG91dCAoZS5nLiB3aXRoIHRoZSBib3ggc2hhZG93KSB3aGlsZSBpdCdzIG9mZi1zY3JlZW4uXG4gICAgLy8gV2UgY2FuJ3QgdXNlIGBkaXNwbGF5YCBiZWNhdXNlIGl0IGludGVycnVwdHMgdGhlIHRyYW5zaXRpb24gYW5kIGB0cmFuc2l0aW9uLWJlaGF2aW9yYFxuICAgIC8vIGlzbid0IGF2YWlsYWJsZSBpbiBhbGwgYnJvd3NlcnMuXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB9XG5cbiAgOmhvc3QoOmlzKDpzdGF0ZShzdGF0ZS1jbG9zaW5nKSwgOnN0YXRlKHN0YXRlLWNsb3NlZCkpKSAmIHtcbiAgICB0cmFuc2xhdGU6IHZhcigtLXNiYi1zaWRlYmFyX190cmFuc2xhdGUteCkgMDtcbiAgfVxufVxuXG4uc2JiLXNpZGViYXItdGl0bGUtc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xuICBnYXA6IHZhcigtLXNiYi1zaWRlYmFyLXRpdGxlLWdhcCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1zaWRlYmFyLWJhY2tncm91bmQtY29sb3IpO1xuICBwYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNpZGViYXItcGFkZGluZyk7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgdmFyKC0tc2JiLWFuaW1hdGlvbi1lYXNpbmcpIHZhcigtLXNiYi1zaWRlYmFyLWNvbnRhaW5lci1hbmltYXRpb24tZHVyYXRpb24pO1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIDpob3N0KDpzdGF0ZShzY3JvbGxlZCkpICYge1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNiYi1ib3gtc2hhZG93LWxldmVsLTUtc29mdCk7XG4gIH1cbn1cblxuLnNiYi1zaWRlYmFyLWNvbnRlbnQtc2VjdGlvbiB7XG4gIEBpbmNsdWRlIHNiYi5zY3JvbGxiYXI7XG5cbiAgcGFkZGluZy1ibG9jay1zdGFydDogdmFyKC0tc2JiLXNpZGViYXJfX3BhZGRpbmctYmxvY2stc3RhcnQpO1xuICBwYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNpZGViYXItcGFkZGluZykgdmFyKC0tc2JiLXNpZGViYXJfX3BhZGRpbmctaW5saW5lLWVuZCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGZsZXgtZ3JvdzogMTtcblxuICAvLyBJZiB0aGUgZWxlbWVudCBpcyBzY3JvbGxhYmxlIGFuZCBoYXMgbm8gZm9jdXNhYmxlIGNvbnRlbnQsIGl0IGdldHMgZm9jdXNlZC5cbiAgLy8gVG8gYWRhcHQgdG8gbHluZSBzdHlsZXMgd2UgY29sb3JpemUgaXRcbiAgb3V0bGluZS1jb2xvcjogdmFyKC0tc2JiLWZvY3VzLW91dGxpbmUtY29sb3IpO1xuXG4gIEBzdXBwb3J0cyAoc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlKSB7XG4gICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICB9XG59XG5cbjo6c2xvdHRlZChzYmItc2lkZWJhci10aXRsZSkge1xuICBmbGV4LWdyb3c6IDE7XG4gIG1hcmdpbi1ibG9jazogdmFyKC0tc2JiLXNpZGViYXItdGl0bGUtcGFkZGluZy1ibG9jayk7XG59XG5cbjo6c2xvdHRlZChzYmItc2lkZWJhci1jbG9zZS1idXR0b24pIHtcbiAgb3JkZXI6IDE7XG5cbiAgLy8gRHVlIHRvIGRlc2lnbiBuZWVkcywgd2UgaGF2ZSB0byB0cmFuc2xhdGUgdGhlIGNsb3NlIGJ1dHRvbiB0byB0aGUgcmlnaHRcbiAgbWFyZ2luLWlubGluZS1lbmQ6IGNhbGMoXG4gICAgLTEgKiAodmFyKC0tc2JiLXNpZGViYXItcGFkZGluZykgLSB2YXIoLS1zYmItc2lkZWJhci10aXRsZS1wYWRkaW5nLWJsb2NrKSlcbiAgKTtcbiAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zYmItc2lkZWJhci10aXRsZS1wYWRkaW5nLWJsb2NrKTtcbiAgaW5zZXQtaW5saW5lLWVuZDogdmFyKC0tc2JiLXNpZGViYXItcGFkZGluZyk7XG59XG4iLCJpbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBodG1sLCBpc1NlcnZlciwgdHlwZSBQcm9wZXJ0eVZhbHVlcywgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBldmVudE9wdGlvbnMsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJGb2N1c1RyYXBDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7IFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGhhbmRsZURpc3RpbmN0Q2hhbmdlIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLnRzJztcbmltcG9ydCB7IGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9kb20udHMnO1xuaW1wb3J0IHsgU2JiQW5pbWF0aW9uQ29tcGxldGVNaXhpbiB9IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiU2lkZWJhckNvbnRhaW5lckVsZW1lbnQgfSBmcm9tICcuLi9zaWRlYmFyLWNvbnRhaW5lci9zaWRlYmFyLWNvbnRhaW5lci5jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zaWRlYmFyLnNjc3M/bGl0JmlubGluZSc7XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgY29ycmVzcG9uZHMgdG8gYSBzaWRlYmFyIHRoYXQgY2FuIGJlIG9wZW5lZCBvbiB0aGUgc2lkZWJhciBjb250YWluZXIuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBzbG90IGFueSBjb250ZW50IGludG8gdGhlIHNpZGViYXIuXG4gKiBAc2xvdCB0aXRsZSAtIFVzZSB0aGUgdGl0bGUgc2xvdCB0byBhZGQgYW4gPHNiYi10aXRsZT4uXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJTaWRlYmFyRWxlbWVudCBleHRlbmRzIFNiYkFuaW1hdGlvbkNvbXBsZXRlTWl4aW4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1zaWRlYmFyJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgc3R5bGVdO1xuXG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBzaWRlYmFyLiBFaXRoZXIgYHdoaXRlYCBvciBgbWlsa2AuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIGNvbG9yOiAnd2hpdGUnIHwgJ21pbGsnID0gJ3doaXRlJztcblxuICAvKiogTW9kZSBvZiB0aGUgc2lkZWJhcjsgb25lIG9mICdzaWRlJyBvciAnb3ZlcicuICovXG4gIEBmb3JjZVR5cGUoKHYpID0+ICh2ID09PSAnb3ZlcicgPyAnb3ZlcicgOiAnc2lkZScpKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBtb2RlOiAnc2lkZScgfCAnb3ZlcicgPSAnc2lkZSc7XG5cbiAgLyoqIFRoZSBzaWRlIHRoYXQgdGhlIHNpZGViYXIgaXMgYXR0YWNoZWQgdG8uICovXG4gIEBmb3JjZVR5cGUoKHYpID0+ICh2ID09PSAnZW5kJyA/ICdlbmQnIDogJ3N0YXJ0JykpXG4gIEBoYW5kbGVEaXN0aW5jdENoYW5nZSgoaW5zdGFuY2UsIF9uZXdWYWx1ZSwgb2xkVmFsdWUpID0+IGluc3RhbmNlLl91cGRhdGVTaWRlYmFyV2lkdGgob2xkVmFsdWUpKVxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0JztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2lkZWJhciBpcyBvcGVuZWQgb3IgY2xvc2VkLlxuICAgKiBDYW4gYmUgdXNlZCB0byBpbml0aWFsbHkgc2V0IHRoZSBvcGVuZWQgc3RhdGUsIHdoZXJlXG4gICAqIHRoZSBhbmltYXRpb24gd2lsbCBiZSBza2lwcGVkLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzaWRlYmFyIHNob3VsZCBmb2N1cyB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgYXV0b21hdGljYWxseSB3aGVuIG9wZW5lZC5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UgaW4gd2hlbiBtb2RlIGlzIHNldCB0byBgc2lkZWAsIG90aGVyd2lzZSBkZWZhdWx0cyB0byB0cnVlLlxuICAgKiBJZiBleHBsaWNpdGx5IGVuYWJsZWQsIGZvY3VzIHdpbGwgYmUgbW92ZWQgaW50byB0aGUgc2lkZWJhciBpbiBgc2lkZWAgbW9kZSBhcyB3ZWxsLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2ZvY3VzLW9uLW9wZW4nIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBmb2N1c09uT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBTYmJTaWRlYmFyQ29udGFpbmVyRWxlbWVudCB3aGVyZSB0aGlzIHNpZGViYXIgaXMgY29udGFpbmVkLiAqL1xuICBwdWJsaWMgZ2V0IGNvbnRhaW5lcigpOiBTYmJTaWRlYmFyQ29udGFpbmVyRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gIH1cbiAgcHJpdmF0ZSBfY29udGFpbmVyOiBTYmJTaWRlYmFyQ29udGFpbmVyRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2xhc3RGb2N1c2VkRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZm9jdXNUcmFwQ29udHJvbGxlciA9IG5ldyBTYmJGb2N1c1RyYXBDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciA9IG5ldyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcih0aGlzKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgUmVzaXplQ29udHJvbGxlcih0aGlzLCB7XG4gICAgICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fdXBkYXRlU2lkZWJhcldpZHRoKCksXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgIGlmICgoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQpPy5sb2NhbE5hbWUgPT09ICdzYmItc2lkZWJhci1jbG9zZS1idXR0b24nKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgdGhpcy5fY29udGFpbmVyID0gdGhpcy5jbG9zZXN0Py4oJ3NiYi1zaWRlYmFyLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuX3VwZGF0ZVNpZGViYXJXaWR0aCgpO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMuX2lzTW9kZU92ZXIoKSkge1xuICAgICAgdGhpcy5fdGFrZUZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5jb250YWluZXI/LnN0eWxlLnJlbW92ZVByb3BlcnR5KHRoaXMuX2J1aWxkQ3NzV2lkdGhWYXIoKSk7XG4gICAgdGhpcy5fY29udGFpbmVyID0gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnb3BlbmVkJykpIHtcbiAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3BlbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdtb2RlJykpIHtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdvdmVyJyAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgICB0aGlzLl90YWtlRm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2VkZUZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgdGhpcy5fdXBkYXRlU2lkZWJhcldpZHRoKCk7XG4gIH1cblxuICAvKiogVG9nZ2xlcyB0aGUgc2lkZWJhciB2aXNpYmlsaXR5LiAqL1xuICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmluZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE9wZW5zIHRoZSBzaWRlYmFyLiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnIHx8ICF0aGlzLmRpc3BhdGNoQmVmb3JlT3BlbkV2ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG5cbiAgICBpZiAoIWlzU2VydmVyICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmxvY2FsTmFtZSAhPT0gJ2JvZHknKSB7XG4gICAgICB0aGlzLl9sYXN0Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuXG4gICAgY29uc3QgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24gPSB0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpIHx8ICF0aGlzLmlzQ29ubmVjdGVkO1xuICAgIGNvbnN0IGlzRHVyaW5nSW5pdGlhbGl6YXRpb24gPSAhdGhpcy5oYXNVcGRhdGVkO1xuXG4gICAgaWYgKCEoaXNEdXJpbmdJbml0aWFsaXphdGlvbiB8fCBpc1plcm9BbmltYXRpb25EdXJhdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnc2tpcC1hbmltYXRpb24nKTtcblxuICAgIC8vIFdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IHVwZGF0ZSB0byBiZSBjb21wbGV0ZWRcbiAgICAvLyBpbiBvcmRlciB0byBoYXZlIHRoZSBzaXplIG9mIHRoZSBzaWRlYmFyIHJlYWR5IGZvciB0aGUgYW5pbWF0aW9uLlxuICAgIGlmIChpc0R1cmluZ0luaXRpYWxpemF0aW9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5faGFuZGxlT3BlbmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLXNpZGViYXItY29udGFpbmVyLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG5cbiAgICAvLyBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBhbmltYXRpb24gc2tpcCBpbnN0cnVjdGlvbiBpcyBkb25lIGEgdGljayBsYXRlci5cbiAgICAvLyBPdGhlcndpc2UsIGl0J3MgcmVtb3ZlZCB0b28gZWFybHkgYW5kIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LlxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnc2tpcC1hbmltYXRpb24nKSk7XG5cbiAgICB0aGlzLl90YWtlRm9jdXMoKTtcbiAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICB0aGlzLmRpc3BhdGNoT3BlbkV2ZW50KCk7XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBzaWRlYmFyLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2VkJyB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcblxuICAgIGNvbnN0IGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uID0gdGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5oYXNVcGRhdGVkIHx8IGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdza2lwLWFuaW1hdGlvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIH1cblxuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCB8fCBpc1plcm9BbmltYXRpb25EdXJhdGlvbikge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIC8vIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIGFuaW1hdGlvbiBza2lwIGluc3RydWN0aW9uIGlzIGRvbmUgYSB0aWNrIGxhdGVyLlxuICAgIC8vIE90aGVyd2lzZSwgaXQncyByZW1vdmVkIHRvbyBlYXJseSBhbmQgaXQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3QuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdza2lwLWFuaW1hdGlvbicpKTtcbiAgICB0aGlzLmNlZGVGb2N1cygpO1xuXG4gICAgaWYgKCFpc1NlcnZlciAmJiAodGhpcy5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB8fCB0aGlzLl9pc01vZGVPdmVyKCkpKSB7XG4gICAgICBpZiAodGhpcy5fbGFzdEZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX2xhc3RGb2N1c2VkRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hlcmUgdG8gc2V0IHRoZSBmb2N1cywgYnV0IGhhdmUgdG8gcmVtb3ZlIGl0LCBzbyB3ZSBjYWxsIGJsdXJcbiAgICAgICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fbGFzdEZvY3VzZWRFbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIF90YWtlRm9jdXMoKTogdm9pZCB7XG4gICAgLy8gV2UgcHJldmVudCBjYWxsaW5nIHRoZSBmb2N1cyBzdHVmZiB3aGVuIG5vdCBuZWVkZWRcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNNb2RlT3ZlciA9IHRoaXMuX2lzTW9kZU92ZXIoKTtcblxuICAgIGlmIChpc01vZGVPdmVyIHx8IHRoaXMuZm9jdXNPbk9wZW4pIHtcbiAgICAgIHRoaXMuX2ZvY3VzVHJhcENvbnRyb2xsZXIuZm9jdXNJbml0aWFsRWxlbWVudCgpO1xuICAgIH1cblxuICAgIGlmIChpc01vZGVPdmVyKSB7XG4gICAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5jb25uZWN0KCk7XG4gICAgICB0aGlzLl9mb2N1c1RyYXBDb250cm9sbGVyLmVuYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEludGVybmFsIG1ldGhvZCB0aGF0IHdlIHVzZSBleHRlcm5hbGx5LiBgcHJvdGVjdGVkYCBwcmVzZXJ2ZXMgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdHlwZSBzYWZlIGFjY2Vzcy5cbiAgcHJvdGVjdGVkIGNlZGVGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9mb2N1c1RyYXBDb250cm9sbGVyLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTaWRlYmFyV2lkdGgob2xkUG9zaXRpb24/OiB0aGlzWydwb3NpdGlvbiddKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXI7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob2xkUG9zaXRpb24pIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0aGlzLl9idWlsZENzc1dpZHRoVmFyKG9sZFBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLm9mZnNldFdpZHRoO1xuICAgIGlmICghd2lkdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdWYWx1ZSA9IGAke3dpZHRofXB4YDtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGNvbnRhaW5lci5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRoaXMuX2J1aWxkQ3NzV2lkdGhWYXIoKSk7XG5cbiAgICBpZiAoYWN0dWFsVmFsdWUgPT09IG5ld1ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KHRoaXMuX2J1aWxkQ3NzV2lkdGhWYXIoKSwgbmV3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYnVpbGRDc3NXaWR0aFZhcihwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBgLS1zYmItc2lkZWJhci1jb250YWluZXJfXyR7cG9zaXRpb259LXdpZHRoYDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzTW9kZU92ZXIoKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgdGhlIG1pbmltdW0gc3BhY2UgYXR0cmlidXRlIGlzIHNldCwgdGhlIHNpZGViYXIgc2hvdWxkIGJlaGF2ZSBsaWtlIGluIG1vZGUgb3Zlci5cbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnb3ZlcicgfHwgdGhpcy5tYXRjaGVzKCc6c3RhdGUobW9kZS1vdmVyLWZvcmNlZCknKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uVHJhbnNpdGlvbkVuZChldmVudDogVHJhbnNpdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgLy8gV2UgZW5zdXJlIHRoYXQgd2UgcmVhY3QgdG8gdGhlIGZhZGUgaW4gdHJhbnNpdGlvbiBvbiB0aGUgc2JiLXNpZGViYXIgZGl2XG4gICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3RyYW5zbGF0ZScgfHwgZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgQGV2ZW50T3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSlcbiAgcHJpdmF0ZSBfZGV0ZWN0U2Nyb2xsZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKFxuICAgICAgJ3Njcm9sbGVkJyxcbiAgICAgICh0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoJy5zYmItc2lkZWJhci1jb250ZW50LXNlY3Rpb24nKT8uc2Nyb2xsVG9wID8/IDApID4gMCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1zaWRlYmFyXCIgQHRyYW5zaXRpb25lbmQ9JHt0aGlzLl9vblRyYW5zaXRpb25FbmR9PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zaWRlYmFyLXRpdGxlLXNlY3Rpb25cIj48c2xvdCBuYW1lPVwidGl0bGUtc2VjdGlvblwiPjwvc2xvdD48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2lkZWJhci1jb250ZW50LXNlY3Rpb25cIiBAc2Nyb2xsPSR7KCkgPT4gdGhpcy5fZGV0ZWN0U2Nyb2xsZWRTdGF0ZSgpfT5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNpZGViYXInOiBTYmJTaWRlYmFyRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3FCYSwyQkFBaUI7bUJBQVMsMEJBQTBCLHdCQUF3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBQTVFLDBCQUEwQixZQUFrRDs7O3dCQUt0RixTQUFTLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQTt1QkFJM0IsV0FBVyxNQUFPLE1BQU0sU0FBUyxTQUFTLE9BQVEsRUFDbEQsU0FBUyxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUE7O0lBSTNCLFdBQVcsTUFBTyxNQUFNLFFBQVEsUUFBUSxRQUFTO0lBQ2pELHNCQUFzQixVQUFVLFdBQVcs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