@sbb-esta/lyne-elements-dev 5.0.0-next.1-dev.1777358786 → 5.0.0-next.1-dev.1777393579

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 (70) hide show
  1. package/core/i18n/i18n.js +103 -98
  2. package/core/styles/core.scss +15 -38
  3. package/core.css +57 -31
  4. package/core.js +22 -22
  5. package/custom-elements.json +6013 -2585
  6. package/development/core/i18n/i18n.d.ts +1 -0
  7. package/development/core/i18n/i18n.d.ts.map +1 -1
  8. package/development/core/i18n/i18n.js +8 -2
  9. package/development/core.js +2 -2
  10. package/development/train/train/train.component.d.ts +2 -5
  11. package/development/train/train/train.component.d.ts.map +1 -1
  12. package/development/train/train/train.component.js +1 -1
  13. package/development/train/train-blocked-passage/train-blocked-passage.component.d.ts +4 -3
  14. package/development/train/train-blocked-passage/train-blocked-passage.component.d.ts.map +1 -1
  15. package/development/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  16. package/development/train/train-formation/train-formation.component.d.ts +6 -2
  17. package/development/train/train-formation/train-formation.component.d.ts.map +1 -1
  18. package/development/train/train-formation/train-formation.component.js +1 -1
  19. package/development/train/train-formation-orientation-mixin.d.ts +12 -0
  20. package/development/train/train-formation-orientation-mixin.d.ts.map +1 -0
  21. package/development/train/train-formation-orientation-mixin.js +62 -0
  22. package/development/train/train-wagon/train-wagon.component.d.ts +5 -32
  23. package/development/train/train-wagon/train-wagon.component.d.ts.map +1 -1
  24. package/development/train/train-wagon/train-wagon.component.js +19 -1
  25. package/development/train/train-wagon-button/train-wagon-button.component.d.ts +18 -0
  26. package/development/train/train-wagon-button/train-wagon-button.component.d.ts.map +1 -0
  27. package/development/train/train-wagon-button/train-wagon-button.component.js +18 -0
  28. package/development/train/train-wagon-common.d.ts +15 -0
  29. package/development/train/train-wagon-common.d.ts.map +1 -0
  30. package/development/train/train-wagon-common.js +2 -0
  31. package/development/train/train-wagon-link/train-wagon-link.component.d.ts +18 -0
  32. package/development/train/train-wagon-link/train-wagon-link.component.d.ts.map +1 -0
  33. package/development/train/train-wagon-link/train-wagon-link.component.js +18 -0
  34. package/development/train-blocked-passage.component-BgBnEOfh.js +22 -0
  35. package/development/train-formation.component-CDKR5KCm.js +194 -0
  36. package/development/train-wagon-common-S3OJdguG.js +441 -0
  37. package/development/train.component-CP9QaQk8.js +239 -0
  38. package/development/train.d.ts.map +1 -1
  39. package/development/train.js +13 -7
  40. package/development/train.pure.d.ts +4 -0
  41. package/development/train.pure.d.ts.map +1 -1
  42. package/development/train.pure.js +9 -5
  43. package/index.d.ts +3 -1
  44. package/index.js +3 -1
  45. package/off-brand-theme.css +57 -31
  46. package/package.json +2 -2
  47. package/safety-theme.css +57 -31
  48. package/standard-theme.css +57 -31
  49. package/train/train/train.component.js +1 -1
  50. package/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  51. package/train/train-formation/train-formation.component.js +1 -1
  52. package/train/train-formation-orientation-mixin.js +45 -0
  53. package/train/train-wagon/train-wagon.component.js +13 -2
  54. package/train/train-wagon-button/train-wagon-button.component.js +10 -0
  55. package/train/train-wagon-common.js +2 -0
  56. package/train/train-wagon-link/train-wagon-link.component.js +10 -0
  57. package/train-blocked-passage.component-voZ8fxiB.js +14 -0
  58. package/train-formation.component-6XQVXPue.js +147 -0
  59. package/train-wagon-common-DTN_G78z.js +354 -0
  60. package/train.component-3vmLxVCZ.js +181 -0
  61. package/train.js +10 -6
  62. package/train.pure.js +9 -5
  63. package/development/train-blocked-passage.component-Bh2dR1gn.js +0 -30
  64. package/development/train-formation.component-Dm0t9N_h.js +0 -149
  65. package/development/train-wagon.component-B6V4dPKn.js +0 -334
  66. package/development/train.component-BvbNBkZF.js +0 -229
  67. package/train-blocked-passage.component-DIh8dbU9.js +0 -22
  68. package/train-formation.component-DS4EDwPY.js +0 -117
  69. package/train-wagon.component-LwKwwuta.js +0 -257
  70. package/train.component-DuFi_iBX.js +0 -174
@@ -0,0 +1,18 @@
1
+ import { SbbButtonBaseElement } from '../../core.ts';
2
+ declare const SbbTrainWagonButtonElement_base: import('../../core.ts').AbstractConstructor<import('../train-wagon-common.ts').SbbTrainWagonMixinType> & typeof SbbButtonBaseElement;
3
+ /**
4
+ * It displays a train compartment within a `sbb-train` component and behaves like a button.
5
+ * It can be used to display the train compartment as well as to trigger an action, e.g., to show more details about the train compartment.
6
+ *
7
+ * @slot - Use the unnamed slot to add one or more `sbb-icon` for meta-information of the wagon.
8
+ */
9
+ export declare class SbbTrainWagonButtonElement extends SbbTrainWagonButtonElement_base {
10
+ static readonly elementName: string;
11
+ }
12
+ declare global {
13
+ interface HTMLElementTagNameMap {
14
+ 'sbb-train-wagon-button': SbbTrainWagonButtonElement;
15
+ }
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=train-wagon-button.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train-wagon-button.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/train/train-wagon-button/train-wagon-button.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;;AAGrD;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,+BAAwC;IACtF,gBAAgC,WAAW,EAAE,MAAM,CAA4B;CAChF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,wBAAwB,EAAE,0BAA0B,CAAC;KACtD;CACF"}
@@ -0,0 +1,18 @@
1
+ import { SbbButtonBaseElement } from "../../core.js";
2
+ import { SbbTrainWagonMixin } from "../train-wagon-common.js";
3
+ //#region src/elements/train/train-wagon-button/train-wagon-button.component.ts
4
+ /**
5
+ * It displays a train compartment within a `sbb-train` component and behaves like a button.
6
+ * It can be used to display the train compartment as well as to trigger an action, e.g., to show more details about the train compartment.
7
+ *
8
+ * @slot - Use the unnamed slot to add one or more `sbb-icon` for meta-information of the wagon.
9
+ */
10
+ var SbbTrainWagonButtonElement = class extends SbbTrainWagonMixin(SbbButtonBaseElement) {
11
+ static {
12
+ this.elementName = "sbb-train-wagon-button";
13
+ }
14
+ };
15
+ //#endregion
16
+ export { SbbTrainWagonButtonElement };
17
+
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW4td2Fnb24tYnV0dG9uLmNvbXBvbmVudC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvdHJhaW4vdHJhaW4td2Fnb24tYnV0dG9uL3RyYWluLXdhZ29uLWJ1dHRvbi5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2JiQnV0dG9uQmFzZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlLnRzJztcbmltcG9ydCB7IFNiYlRyYWluV2Fnb25NaXhpbiB9IGZyb20gJy4uL3RyYWluLXdhZ29uLWNvbW1vbi50cyc7XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYSB0cmFpbiBjb21wYXJ0bWVudCB3aXRoaW4gYSBgc2JiLXRyYWluYCBjb21wb25lbnQgYW5kIGJlaGF2ZXMgbGlrZSBhIGJ1dHRvbi5cbiAqIEl0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHRyYWluIGNvbXBhcnRtZW50IGFzIHdlbGwgYXMgdG8gdHJpZ2dlciBhbiBhY3Rpb24sIGUuZy4sIHRvIHNob3cgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSB0cmFpbiBjb21wYXJ0bWVudC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBvbmUgb3IgbW9yZSBgc2JiLWljb25gIGZvciBtZXRhLWluZm9ybWF0aW9uIG9mIHRoZSB3YWdvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYlRyYWluV2Fnb25CdXR0b25FbGVtZW50IGV4dGVuZHMgU2JiVHJhaW5XYWdvbk1peGluKFNiYkJ1dHRvbkJhc2VFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItdHJhaW4td2Fnb24tYnV0dG9uJztcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10cmFpbi13YWdvbi1idXR0b24nOiBTYmJUcmFpbldhZ29uQnV0dG9uRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQSxJQUFhLDZCQUFiLGNBQWdELG1CQUFtQixxQkFBcUIsQ0FBQTs7QUFDdEQsT0FBQSxjQUFzQiJ9
@@ -0,0 +1,15 @@
1
+ import { TemplateResult } from 'lit';
2
+ import { AbstractConstructor } from '../core/mixins/constructor.ts';
3
+ import { SbbElement, SbbOccupancy } from '../core.ts';
4
+ export declare class SbbTrainWagonMixinType extends SbbElement {
5
+ accessor wagonType: 'wagon' | 'wagon-end-left' | 'wagon-end-right' | 'couchette' | 'sleeping' | 'restaurant' | 'locomotive' | 'closed';
6
+ accessor occupancy: SbbOccupancy | null;
7
+ accessor sector: string;
8
+ accessor blockedPassage: 'previous' | 'next' | 'both' | 'none';
9
+ accessor wagonClass: '1' | '2' | '1-2' | '2-1' | null;
10
+ accessor label: string;
11
+ accessor additionalAccessibilityText: string;
12
+ protected renderTemplate(): TemplateResult;
13
+ }
14
+ export declare const SbbTrainWagonMixin: <T extends AbstractConstructor<SbbElement>>(superClass: T) => AbstractConstructor<SbbTrainWagonMixinType> & T;
15
+ //# sourceMappingURL=train-wagon-common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train-wagon-common.d.ts","sourceRoot":"","sources":["../../../../src/elements/train/train-wagon-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,cAAc,EAAa,MAAM,KAAK,CAAC;AAK7F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAiBL,KAAK,UAAU,EAIf,KAAK,YAAY,EAElB,MAAM,YAAY,CAAC;AAqCpB,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,UAAU;IAC5D,SAAgB,SAAS,EACrB,OAAO,GACP,gBAAgB,GAChB,iBAAiB,GACjB,WAAW,GACX,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,QAAQ,CAAC;IACb,SAAgB,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtE,SAAgB,UAAU,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7D,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,2BAA2B,EAAE,MAAM,CAAC;IAEpD,SAAS,CAAC,cAAc,IAAI,cAAc;CAC3C;AAGD,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,mBAAmB,CAAC,UAAU,CAAC,EAC1E,YAAY,CAAC,KACZ,mBAAmB,CAAC,sBAAsB,CAAC,GAAG,CA6RhD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { t as SbbTrainWagonMixin } from "../train-wagon-common-S3OJdguG.js";
2
+ export { SbbTrainWagonMixin };
@@ -0,0 +1,18 @@
1
+ import { SbbLinkBaseElement } from '../../core.ts';
2
+ declare const SbbTrainWagonLinkElement_base: import('../../core.ts').AbstractConstructor<import('../train-wagon-common.ts').SbbTrainWagonMixinType> & typeof SbbLinkBaseElement;
3
+ /**
4
+ * It displays a train compartment within a `sbb-train` component and behaves like a link.
5
+ * It can be used to display the train compartment as well as to trigger an action, e.g., to show more details about the train compartment.
6
+ *
7
+ * @slot - Use the unnamed slot to add one or more `sbb-icon` for meta-information of the wagon.
8
+ */
9
+ export declare class SbbTrainWagonLinkElement extends SbbTrainWagonLinkElement_base {
10
+ static readonly elementName: string;
11
+ }
12
+ declare global {
13
+ interface HTMLElementTagNameMap {
14
+ 'sbb-train-wagon-link': SbbTrainWagonLinkElement;
15
+ }
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=train-wagon-link.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train-wagon-link.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/train/train-wagon-link/train-wagon-link.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;;AAGnD;;;;;GAKG;AACH,qBAAa,wBAAyB,SAAQ,6BAAsC;IAClF,gBAAgC,WAAW,EAAE,MAAM,CAA0B;CAC9E;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,sBAAsB,EAAE,wBAAwB,CAAC;KAClD;CACF"}
@@ -0,0 +1,18 @@
1
+ import { SbbLinkBaseElement } from "../../core.js";
2
+ import { SbbTrainWagonMixin } from "../train-wagon-common.js";
3
+ //#region src/elements/train/train-wagon-link/train-wagon-link.component.ts
4
+ /**
5
+ * It displays a train compartment within a `sbb-train` component and behaves like a link.
6
+ * It can be used to display the train compartment as well as to trigger an action, e.g., to show more details about the train compartment.
7
+ *
8
+ * @slot - Use the unnamed slot to add one or more `sbb-icon` for meta-information of the wagon.
9
+ */
10
+ var SbbTrainWagonLinkElement = class extends SbbTrainWagonMixin(SbbLinkBaseElement) {
11
+ static {
12
+ this.elementName = "sbb-train-wagon-link";
13
+ }
14
+ };
15
+ //#endregion
16
+ export { SbbTrainWagonLinkElement };
17
+
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW4td2Fnb24tbGluay5jb21wb25lbnQuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RyYWluL3RyYWluLXdhZ29uLWxpbmsvdHJhaW4td2Fnb24tbGluay5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2JiTGlua0Jhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5pbXBvcnQgeyBTYmJUcmFpbldhZ29uTWl4aW4gfSBmcm9tICcuLi90cmFpbi13YWdvbi1jb21tb24udHMnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgdHJhaW4gY29tcGFydG1lbnQgd2l0aGluIGEgYHNiYi10cmFpbmAgY29tcG9uZW50IGFuZCBiZWhhdmVzIGxpa2UgYSBsaW5rLlxuICogSXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgdHJhaW4gY29tcGFydG1lbnQgYXMgd2VsbCBhcyB0byB0cmlnZ2VyIGFuIGFjdGlvbiwgZS5nLiwgdG8gc2hvdyBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIHRyYWluIGNvbXBhcnRtZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIG9uZSBvciBtb3JlIGBzYmItaWNvbmAgZm9yIG1ldGEtaW5mb3JtYXRpb24gb2YgdGhlIHdhZ29uLlxuICovXG5leHBvcnQgY2xhc3MgU2JiVHJhaW5XYWdvbkxpbmtFbGVtZW50IGV4dGVuZHMgU2JiVHJhaW5XYWdvbk1peGluKFNiYkxpbmtCYXNlRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLXRyYWluLXdhZ29uLWxpbmsnO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXRyYWluLXdhZ29uLWxpbmsnOiBTYmJUcmFpbldhZ29uTGlua0VsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBU0EsSUFBYSwyQkFBYixjQUE4QyxtQkFBbUIsbUJBQW1CLENBQUE7O0FBQ2xELE9BQUEsY0FBc0IifQ==
@@ -0,0 +1,22 @@
1
+ import { unsafeCSS } from "lit";
2
+ import { SbbElement, boxSizingStyles } from "./core.js";
3
+ import { SbbTrainFormationOrientationMixin } from "./train/train-formation-orientation-mixin.js";
4
+ //#region src/elements/train/train-blocked-passage/train-blocked-passage.scss?inline
5
+ var train_blocked_passage_default = ":host {\n display: grid;\n grid-template-areas: \"icon\";\n align-items: center;\n width: var(--sbb-train-formation-blocked-passage-dimension);\n height: var(--_sbb-train-formation-wagon-height);\n}\n\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) {\n width: var(--_sbb-train-formation-wagon-width);\n height: var(--sbb-train-formation-blocked-passage-dimension);\n}\n\n:host::before,\n:host::after {\n content: \"\";\n grid-area: icon;\n justify-self: center;\n}\n\n:host::before {\n width: var(--sbb-train-formation-blocked-passage-dimension);\n height: var(--sbb-train-formation-blocked-passage-dimension);\n border-radius: 50%;\n background-color: var(--sbb-train-blocked-passage-background-color);\n}\n\n:host::after {\n width: var(--sbb-train-blocked-passage-icon-bar-width);\n height: var(--sbb-train-blocked-passage-icon-bar-height);\n border-radius: var(--sbb-train-blocked-passage-icon-bar-border-radius);\n background-color: var(--sbb-train-blocked-passage-bar-color);\n}";
6
+ //#endregion
7
+ //#region src/elements/train/train-blocked-passage/train-blocked-passage.component.ts
8
+ /**
9
+ * It visually displays a blocked passage between train wagons.
10
+ */
11
+ var SbbTrainBlockedPassageElement = class extends SbbTrainFormationOrientationMixin(SbbElement) {
12
+ static {
13
+ this.elementName = "sbb-train-blocked-passage";
14
+ }
15
+ static {
16
+ this.styles = [boxSizingStyles, unsafeCSS(train_blocked_passage_default)];
17
+ }
18
+ };
19
+ //#endregion
20
+ export { SbbTrainBlockedPassageElement as t };
21
+
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW4tYmxvY2tlZC1wYXNzYWdlLmNvbXBvbmVudC1CZ0JuRU9maC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvdHJhaW4vdHJhaW4tYmxvY2tlZC1wYXNzYWdlL3RyYWluLWJsb2NrZWQtcGFzc2FnZS5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90cmFpbi90cmFpbi1ibG9ja2VkLXBhc3NhZ2UvdHJhaW4tYmxvY2tlZC1wYXNzYWdlLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtYXJlYXM6ICdpY29uJztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tYmxvY2tlZC1wYXNzYWdlLWRpbWVuc2lvbik7XG4gIGhlaWdodDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0KTtcbn1cblxuOmhvc3QoOnN0YXRlKG9yaWVudGF0aW9uLXZlcnRpY2FsKSkge1xuICB3aWR0aDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24td2lkdGgpO1xuICBoZWlnaHQ6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tYmxvY2tlZC1wYXNzYWdlLWRpbWVuc2lvbik7XG59XG5cbjpob3N0OjpiZWZvcmUsXG46aG9zdDo6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgZ3JpZC1hcmVhOiBpY29uO1xuICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbn1cblxuLy8gQ2lyY2xlXG46aG9zdDo6YmVmb3JlIHtcbiAgd2lkdGg6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tYmxvY2tlZC1wYXNzYWdlLWRpbWVuc2lvbik7XG4gIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi1ibG9ja2VkLXBhc3NhZ2UtZGltZW5zaW9uKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItdHJhaW4tYmxvY2tlZC1wYXNzYWdlLWJhY2tncm91bmQtY29sb3IpO1xufVxuXG4vLyBCYXJcbjpob3N0OjphZnRlciB7XG4gIHdpZHRoOiB2YXIoLS1zYmItdHJhaW4tYmxvY2tlZC1wYXNzYWdlLWljb24tYmFyLXdpZHRoKTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItdHJhaW4tYmxvY2tlZC1wYXNzYWdlLWljb24tYmFyLWhlaWdodCk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi10cmFpbi1ibG9ja2VkLXBhc3NhZ2UtaWNvbi1iYXItYm9yZGVyLXJhZGl1cyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi10cmFpbi1ibG9ja2VkLXBhc3NhZ2UtYmFyLWNvbG9yKTtcbn1cbiIsImltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIHVuc2FmZUNTUyB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcywgU2JiRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUudHMnO1xuaW1wb3J0IHsgU2JiVHJhaW5Gb3JtYXRpb25PcmllbnRhdGlvbk1peGluIH0gZnJvbSAnLi4vdHJhaW4tZm9ybWF0aW9uLW9yaWVudGF0aW9uLW1peGluLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vdHJhaW4tYmxvY2tlZC1wYXNzYWdlLnNjc3M/aW5saW5lJztcblxuLyoqXG4gKiBJdCB2aXN1YWxseSBkaXNwbGF5cyBhIGJsb2NrZWQgcGFzc2FnZSBiZXR3ZWVuIHRyYWluIHdhZ29ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYlRyYWluQmxvY2tlZFBhc3NhZ2VFbGVtZW50IGV4dGVuZHMgU2JiVHJhaW5Gb3JtYXRpb25PcmllbnRhdGlvbk1peGluKFNiYkVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi10cmFpbi1ibG9ja2VkLXBhc3NhZ2UnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCB1bnNhZmVDU1Moc3R5bGUpXTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10cmFpbi1ibG9ja2VkLXBhc3NhZ2UnOiBTYmJUcmFpbkJsb2NrZWRQYXNzYWdlRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FDVUEsSUFBYSxnQ0FBYixjQUFtRCxrQ0FBa0MsV0FBVyxDQUFBOztBQUM5RCxPQUFBLGNBQXNCOzs7QUFDL0IsT0FBQSxTQUF5QixDQUFDLGlCQUFpQixVQUFVLDhCQUFNLENBQUMifQ==
@@ -0,0 +1,194 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { html, nothing, unsafeCSS } from "lit";
3
+ import { property, state } from "lit/decorators.js";
4
+ import { SbbElement, SbbLanguageController, SbbNamedSlotListMixin, boxSizingStyles, hostScrollbarStyles, i18nSector, i18nSectorShort, i18nTrains } from "./core.js";
5
+ import { styleMap } from "lit/directives/style-map.js";
6
+ //#region src/elements/train/train-formation/train-formation.scss?inline
7
+ var train_formation_default = ":host {\n --sbb-train-formation-scroll-padding: var(--sbb-train-formation-padding);\n --_sbb-train-formation-wagon-width: var(--sbb-train-formation-wagon-dimension-long);\n --_sbb-train-formation-wagon-height: var(--sbb-train-formation-wagon-dimension-short);\n display: grid;\n grid-template: \"start sectors end\" auto \"start trains end\" auto/auto 1fr auto;\n position: relative;\n overflow: auto visible;\n gap: var(--_sbb-train-formation-sectors-to-train-gap, 0) 0;\n padding-block: var(--sbb-train-formation-padding);\n color: var(--sbb-train-formation-text-color);\n font-size: var(--sbb-text-font-size-xs);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n line-height: var(--sbb-typo-line-height-text);\n}\n:host::before, :host::after {\n content: \"\";\n display: block;\n width: var(--sbb-train-formation-scroll-padding);\n}\n:host::before {\n grid-area: start;\n}\n:host::after {\n grid-area: end;\n}\n\n:host(:focus-visible) {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n}\n\n:host(:is(:state(has-sectors),[state--has-sectors])) {\n --_sbb-train-formation-sectors-to-train-gap: var(--sbb-train-formation-gap);\n}\n\n:host(:is(:state(has-direction-label),[state--has-direction-label])) {\n --_sbb-train-formation-reserve-spacing-display: block;\n}\n\n:host([orientation=vertical]) {\n --_sbb-train-formation-wagon-width: var(--sbb-train-formation-wagon-dimension-short);\n --_sbb-train-formation-wagon-height: var(--sbb-train-formation-wagon-dimension-long);\n --_sbb-train-formation-flex-direction: column;\n --_sbb-train-formation-flex-direction-inverted: row;\n grid-template: \"start start\" auto \"sectors trains\" 1fr \"end end\" auto;\n overflow: visible auto;\n padding-block: unset;\n padding-inline: var(--sbb-train-formation-padding);\n gap: 0 var(--_sbb-train-formation-sectors-to-train-gap, 0);\n width: fit-content;\n}\n:host([orientation=vertical])::before, :host([orientation=vertical])::after {\n width: auto;\n height: var(--sbb-train-formation-scroll-padding);\n}\n\n.sbb-train-formation__sectors {\n display: flex;\n grid-area: sectors;\n gap: var(--sbb-train-formation-wagon-gap);\n flex-direction: var(--_sbb-train-formation-flex-direction);\n}\n\n.sbb-train-formation__sector {\n --_wagon-sum: var(--sbb-train-formation-wagon-count) *\n var(--sbb-train-formation-wagon-dimension-long);\n --_blocked-passage-sum: var(--sbb-train-formation-wagon-blocked-passage-count) *\n var(--sbb-train-formation-blocked-passage-dimension);\n --_total-count: calc(\n var(--sbb-train-formation-wagon-count) + var(--sbb-train-formation-wagon-blocked-passage-count)\n );\n --_gap-sum: calc((var(--_total-count) - 1) * var(--sbb-train-formation-wagon-gap));\n --_sector-width: calc(var(--_wagon-sum) + var(--_blocked-passage-sum) + var(--_gap-sum));\n --_sector-line-length: calc(0.5 * var(--_sector-width));\n flex: 0 0 var(--_sector-width);\n display: flex;\n flex-direction: var(--_sbb-train-formation-flex-direction);\n justify-content: center;\n overflow: clip visible;\n}\n:host([orientation=vertical]) .sbb-train-formation__sector {\n overflow: visible clip;\n}\n\n.sbb-train-formation__sector-sticky-wrapper {\n position: sticky;\n inset: auto 0;\n padding: 0 var(--sbb-train-formation-sector-padding);\n margin: 0 var(--sbb-train-formation-sector-margin);\n white-space: nowrap;\n}\n:host([orientation=vertical]) .sbb-train-formation__sector-sticky-wrapper {\n writing-mode: sideways-lr;\n inset: 0 auto;\n padding: var(--sbb-train-formation-sector-padding) 0;\n margin: var(--sbb-train-formation-sector-margin) 0;\n}\n.sbb-train-formation__sector-sticky-wrapper::before, .sbb-train-formation__sector-sticky-wrapper::after {\n content: \"\";\n position: absolute;\n inset-block: calc(50% - var(--sbb-train-formation-sector-line-width) / 2);\n border-block-end: var(--sbb-train-formation-sector-line-width) solid var(--sbb-train-formation-sector-line-color);\n width: var(--_sector-line-length);\n}\n:host([orientation=vertical]) .sbb-train-formation__sector-sticky-wrapper::before, :host([orientation=vertical]) .sbb-train-formation__sector-sticky-wrapper::after {\n width: auto;\n height: var(--_sector-line-length);\n}\n.sbb-train-formation__sector-sticky-wrapper::before {\n inset-inline-end: 100%;\n}\n.sbb-train-formation__sector-sticky-wrapper::after {\n inset-inline-start: 100%;\n}\n\n.sbb-train-formation__trains {\n grid-area: trains;\n}\n\n.sbb-train-formation__train-list {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n display: flex;\n flex-direction: var(--_sbb-train-formation-flex-direction);\n gap: var(--sbb-train-formation-wagon-gap);\n}\n\n.sbb-train-formation__train-list > :is(li, span) {\n display: inline-flex;\n}";
8
+ //#endregion
9
+ //#region src/elements/train/train-formation/train-formation.component.ts
10
+ /**
11
+ * It displays a train composition, acting as a container for one or more `sbb-train` component.
12
+ *
13
+ * @slot - Use the unnamed slot to add 'sbb-train' elements to the `sbb-train-formation`.
14
+ * @cssprop [--sbb-train-formation-scroll-padding=var(--sbb-spacing-fixed-1x)] - Defines the inline or block padding inside the horizontal or vertical scrolling area.
15
+ */
16
+ var SbbTrainFormationElement = (() => {
17
+ let _classSuper = SbbNamedSlotListMixin(SbbElement);
18
+ let _view_decorators;
19
+ let _view_initializers = [];
20
+ let _view_extraInitializers = [];
21
+ let _orientation_decorators;
22
+ let _orientation_initializers = [];
23
+ let _orientation_extraInitializers = [];
24
+ let __sectors_decorators;
25
+ let __sectors_initializers = [];
26
+ let __sectors_extraInitializers = [];
27
+ return class SbbTrainFormationElement extends _classSuper {
28
+ static {
29
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
30
+ _view_decorators = [property({ reflect: true })];
31
+ _orientation_decorators = [property({ reflect: true })];
32
+ __sectors_decorators = [state()];
33
+ __esDecorate(this, null, _view_decorators, {
34
+ kind: "accessor",
35
+ name: "view",
36
+ static: false,
37
+ private: false,
38
+ access: {
39
+ has: (obj) => "view" in obj,
40
+ get: (obj) => obj.view,
41
+ set: (obj, value) => {
42
+ obj.view = value;
43
+ }
44
+ },
45
+ metadata: _metadata
46
+ }, _view_initializers, _view_extraInitializers);
47
+ __esDecorate(this, null, _orientation_decorators, {
48
+ kind: "accessor",
49
+ name: "orientation",
50
+ static: false,
51
+ private: false,
52
+ access: {
53
+ has: (obj) => "orientation" in obj,
54
+ get: (obj) => obj.orientation,
55
+ set: (obj, value) => {
56
+ obj.orientation = value;
57
+ }
58
+ },
59
+ metadata: _metadata
60
+ }, _orientation_initializers, _orientation_extraInitializers);
61
+ __esDecorate(this, null, __sectors_decorators, {
62
+ kind: "accessor",
63
+ name: "_sectors",
64
+ static: false,
65
+ private: false,
66
+ access: {
67
+ has: (obj) => "_sectors" in obj,
68
+ get: (obj) => obj._sectors,
69
+ set: (obj, value) => {
70
+ obj._sectors = value;
71
+ }
72
+ },
73
+ metadata: _metadata
74
+ }, __sectors_initializers, __sectors_extraInitializers);
75
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: _metadata
80
+ });
81
+ }
82
+ static {
83
+ this.elementName = "sbb-train-formation";
84
+ }
85
+ static {
86
+ this.styles = [
87
+ hostScrollbarStyles,
88
+ boxSizingStyles,
89
+ unsafeCSS(train_formation_default)
90
+ ];
91
+ }
92
+ #view_accessor_storage;
93
+ /** Whether the view of the wagons is from side or top perspective. */
94
+ get view() {
95
+ return this.#view_accessor_storage;
96
+ }
97
+ set view(value) {
98
+ this.#view_accessor_storage = value;
99
+ }
100
+ #orientation_accessor_storage;
101
+ /** Orientation, either horizontal or vertical. */
102
+ get orientation() {
103
+ return this.#orientation_accessor_storage;
104
+ }
105
+ set orientation(value) {
106
+ this.#orientation_accessor_storage = value;
107
+ }
108
+ #_sectors_accessor_storage;
109
+ get _sectors() {
110
+ return this.#_sectors_accessor_storage;
111
+ }
112
+ set _sectors(value) {
113
+ this.#_sectors_accessor_storage = value;
114
+ }
115
+ constructor() {
116
+ super();
117
+ this.listChildLocalNames = ["sbb-train"];
118
+ this.#view_accessor_storage = __runInitializers(this, _view_initializers, "side");
119
+ this.#orientation_accessor_storage = (__runInitializers(this, _view_extraInitializers), __runInitializers(this, _orientation_initializers, "horizontal"));
120
+ this.#_sectors_accessor_storage = (__runInitializers(this, _orientation_extraInitializers), __runInitializers(this, __sectors_initializers, []));
121
+ this._language = (__runInitializers(this, __sectors_extraInitializers), new SbbLanguageController(this));
122
+ this.addEventListener?.("trainslotchange", (e) => {
123
+ this._readSectors(e);
124
+ this._readDirectionLabel(e);
125
+ });
126
+ this.addEventListener?.("sectorchange", (e) => this._readSectors(e));
127
+ this.addEventListener?.("directionlabelchange", (e) => this._readDirectionLabel(e));
128
+ }
129
+ connectedCallback() {
130
+ super.connectedCallback();
131
+ this.classList.add("sbb-scrollbar");
132
+ }
133
+ _readDirectionLabel(event) {
134
+ event?.stopPropagation();
135
+ this.toggleState("has-direction-label", Array.from(this.querySelectorAll?.("sbb-train") ?? []).some((train) => !!train.directionLabel));
136
+ }
137
+ _readSectors(event) {
138
+ event?.stopPropagation();
139
+ this._sectors = Array.from(this.querySelectorAll?.("sbb-train-wagon,sbb-train-wagon-button,sbb-train-wagon-link,sbb-train-blocked-passage") ?? []).reduce((aggregatedSectors, item) => {
140
+ const currentAggregatedSector = aggregatedSectors[aggregatedSectors.length - 1];
141
+ if (item.localName.startsWith("sbb-train-wagon")) {
142
+ const sectorAttribute = item.sector ?? item.getAttribute("sector");
143
+ if (!currentAggregatedSector.label && sectorAttribute) currentAggregatedSector.label = sectorAttribute;
144
+ if (!sectorAttribute || currentAggregatedSector.label === sectorAttribute) currentAggregatedSector.wagonCount++;
145
+ else aggregatedSectors.push({
146
+ label: sectorAttribute,
147
+ wagonCount: 1,
148
+ blockedPassageCount: 0
149
+ });
150
+ } else if (item.localName === "sbb-train-blocked-passage") currentAggregatedSector.blockedPassageCount++;
151
+ return aggregatedSectors;
152
+ }, [{
153
+ wagonCount: 0,
154
+ blockedPassageCount: 0
155
+ }]);
156
+ this.toggleState("has-sectors", this._sectors.some((s) => !!s.label));
157
+ }
158
+ willUpdate(changedProperties) {
159
+ super.willUpdate(changedProperties);
160
+ if (changedProperties.has("listChildren")) {
161
+ this._readSectors();
162
+ this._readDirectionLabel();
163
+ }
164
+ }
165
+ render() {
166
+ return html`
167
+ ${this._sectors.length && this._sectors[0].label !== void 0 ? html`<div class="sbb-train-formation__sectors" aria-hidden="true">
168
+ ${this._sectors.map((aggregatedSector) => html`<span
169
+ class="sbb-train-formation__sector"
170
+ style=${styleMap({
171
+ "--sbb-train-formation-wagon-count": aggregatedSector.wagonCount,
172
+ "--sbb-train-formation-wagon-blocked-passage-count": aggregatedSector.blockedPassageCount
173
+ })}
174
+ >
175
+ <span class="sbb-train-formation__sector-sticky-wrapper">
176
+ ${`${aggregatedSector.wagonCount === 1 && aggregatedSector.label ? i18nSectorShort[this._language.current] : i18nSector[this._language.current]} ${aggregatedSector.label ? aggregatedSector.label : ""}`}
177
+ </span>
178
+ </span>`)}
179
+ </div>` : nothing}
180
+
181
+ <div class="sbb-train-formation__trains">
182
+ ${this.renderList({
183
+ class: "sbb-train-formation__train-list",
184
+ ariaLabel: i18nTrains[this._language.current]
185
+ })}
186
+ </div>
187
+ `;
188
+ }
189
+ };
190
+ })();
191
+ //#endregion
192
+ export { SbbTrainFormationElement as t };
193
+
194
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW4tZm9ybWF0aW9uLmNvbXBvbmVudC1DREtSNUtDbS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvdHJhaW4vdHJhaW4tZm9ybWF0aW9uL3RyYWluLWZvcm1hdGlvbi5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90cmFpbi90cmFpbi1mb3JtYXRpb24vdHJhaW4tZm9ybWF0aW9uLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIC0tc2JiLXRyYWluLWZvcm1hdGlvbi1zY3JvbGwtcGFkZGluZzogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi1wYWRkaW5nKTtcbiAgLS1fc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi13aWR0aDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1kaW1lbnNpb24tbG9uZyk7XG4gIC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0OiB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLWRpbWVuc2lvbi1zaG9ydCk7XG5cbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZTpcbiAgICAnc3RhcnQgc2VjdG9ycyBlbmQnIGF1dG9cbiAgICAnc3RhcnQgdHJhaW5zIGVuZCcgYXV0byAvIGF1dG8gMWZyIGF1dG87XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGF1dG8gdmlzaWJsZTtcbiAgZ2FwOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1zZWN0b3JzLXRvLXRyYWluLWdhcCwgMCkgMDtcbiAgcGFkZGluZy1ibG9jazogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi1wYWRkaW5nKTtcbiAgY29sb3I6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tdGV4dC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2JiLXRleHQtZm9udC1zaXplLXhzKTtcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLXNiYi10eXBvLWxldHRlci1zcGFjaW5nLXRleHQpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCk7XG5cbiAgLy8gRW5hYmxlIGlubGluZSBwYWRkaW5nXG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXNjcm9sbC1wYWRkaW5nKTtcbiAgfVxuXG4gICY6OmJlZm9yZSB7XG4gICAgZ3JpZC1hcmVhOiBzdGFydDtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBncmlkLWFyZWE6IGVuZDtcbiAgfVxufVxuXG4vLyBXaXRoIHNjcm9sbGFibGUgY29udGVudCwgdGhlIHRyYWluIGZvcm1hdGlvbiBjYW4gZ2V0IGZvY3VzLlxuOmhvc3QoOmZvY3VzLXZpc2libGUpIHtcbiAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG59XG5cbjpob3N0KDpzdGF0ZShoYXMtc2VjdG9ycykpIHtcbiAgLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1zZWN0b3JzLXRvLXRyYWluLWdhcDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi1nYXApO1xufVxuXG46aG9zdCg6c3RhdGUoaGFzLWRpcmVjdGlvbi1sYWJlbCkpIHtcbiAgLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1yZXNlcnZlLXNwYWNpbmctZGlzcGxheTogYmxvY2s7XG59XG5cbjpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkge1xuICAtLV9zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLXdpZHRoOiB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLWRpbWVuc2lvbi1zaG9ydCk7XG4gIC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0OiB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLWRpbWVuc2lvbi1sb25nKTtcbiAgLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtLV9zYmItdHJhaW4tZm9ybWF0aW9uLWZsZXgtZGlyZWN0aW9uLWludmVydGVkOiByb3c7XG5cbiAgZ3JpZC10ZW1wbGF0ZTpcbiAgICAnc3RhcnQgc3RhcnQnIGF1dG9cbiAgICAnc2VjdG9ycyB0cmFpbnMnIDFmclxuICAgICdlbmQgZW5kJyBhdXRvO1xuICBvdmVyZmxvdzogdmlzaWJsZSBhdXRvO1xuICBwYWRkaW5nLWJsb2NrOiB1bnNldDtcbiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tcGFkZGluZyk7XG4gIGdhcDogMCB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1zZWN0b3JzLXRvLXRyYWluLWdhcCwgMCk7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcblxuICAmOjpiZWZvcmUsXG4gICY6OmFmdGVyIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tc2Nyb2xsLXBhZGRpbmcpO1xuICB9XG59XG5cbi5zYmItdHJhaW4tZm9ybWF0aW9uX19zZWN0b3JzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ3JpZC1hcmVhOiBzZWN0b3JzO1xuICBnYXA6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24td2Fnb24tZ2FwKTtcbiAgZmxleC1kaXJlY3Rpb246IHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLWZsZXgtZGlyZWN0aW9uKTtcbn1cblxuLnNiYi10cmFpbi1mb3JtYXRpb25fX3NlY3RvciB7XG4gIC0tX3dhZ29uLXN1bTogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1jb3VudCkgKlxuICAgIHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24td2Fnb24tZGltZW5zaW9uLWxvbmcpO1xuICAtLV9ibG9ja2VkLXBhc3NhZ2Utc3VtOiB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLWJsb2NrZWQtcGFzc2FnZS1jb3VudCkgKlxuICAgIHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tYmxvY2tlZC1wYXNzYWdlLWRpbWVuc2lvbik7XG4gIC0tX3RvdGFsLWNvdW50OiBjYWxjKFxuICAgIHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24td2Fnb24tY291bnQpICsgdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1ibG9ja2VkLXBhc3NhZ2UtY291bnQpXG4gICk7XG4gIC0tX2dhcC1zdW06IGNhbGMoKHZhcigtLV90b3RhbC1jb3VudCkgLSAxKSAqIHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24td2Fnb24tZ2FwKSk7XG4gIC0tX3NlY3Rvci13aWR0aDogY2FsYyh2YXIoLS1fd2Fnb24tc3VtKSArIHZhcigtLV9ibG9ja2VkLXBhc3NhZ2Utc3VtKSArIHZhcigtLV9nYXAtc3VtKSk7XG4gIC0tX3NlY3Rvci1saW5lLWxlbmd0aDogY2FsYygwLjUgKiB2YXIoLS1fc2VjdG9yLXdpZHRoKSk7XG5cbiAgZmxleDogMCAwIHZhcigtLV9zZWN0b3Itd2lkdGgpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24tZmxleC1kaXJlY3Rpb24pO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGNsaXAgdmlzaWJsZTtcblxuICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pICYge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlIGNsaXA7XG4gIH1cbn1cblxuLnNiYi10cmFpbi1mb3JtYXRpb25fX3NlY3Rvci1zdGlja3ktd3JhcHBlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGluc2V0OiBhdXRvIDA7XG4gIHBhZGRpbmc6IDAgdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi1zZWN0b3ItcGFkZGluZyk7XG4gIG1hcmdpbjogMCB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXNlY3Rvci1tYXJnaW4pO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgJiB7XG4gICAgd3JpdGluZy1tb2RlOiBzaWRld2F5cy1scjtcbiAgICBpbnNldDogMCBhdXRvO1xuICAgIHBhZGRpbmc6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tc2VjdG9yLXBhZGRpbmcpIDA7XG4gICAgbWFyZ2luOiB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXNlY3Rvci1tYXJnaW4pIDA7XG4gIH1cblxuICAvLyBMaW5lcyBiZXNpZGUgdGhlIHNlY3Rvci1sYWJlbFxuICAmOjpiZWZvcmUsXG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgICAvLyBFeGFjdGx5IGNlbnRlciB0aGUgbGluZSBieSBzdWJ0cmFjdGluZyBoYWxmIG9mIHRoZSBib3JkZXIgd2lkdGhcbiAgICBpbnNldC1ibG9jazogY2FsYyg1MCUgLSB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXNlY3Rvci1saW5lLXdpZHRoKSAvIDIpO1xuICAgIGJvcmRlci1ibG9jay1lbmQ6IHZhcigtLXNiYi10cmFpbi1mb3JtYXRpb24tc2VjdG9yLWxpbmUtd2lkdGgpIHNvbGlkXG4gICAgICB2YXIoLS1zYmItdHJhaW4tZm9ybWF0aW9uLXNlY3Rvci1saW5lLWNvbG9yKTtcbiAgICB3aWR0aDogdmFyKC0tX3NlY3Rvci1saW5lLWxlbmd0aCk7XG5cbiAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pICYge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBoZWlnaHQ6IHZhcigtLV9zZWN0b3ItbGluZS1sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gICY6OmJlZm9yZSB7XG4gICAgaW5zZXQtaW5saW5lLWVuZDogMTAwJTtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IDEwMCU7XG4gIH1cbn1cblxuLnNiYi10cmFpbi1mb3JtYXRpb25fX3RyYWlucyB7XG4gIGdyaWQtYXJlYTogdHJhaW5zO1xufVxuXG4uc2JiLXRyYWluLWZvcm1hdGlvbl9fdHJhaW4tbGlzdCB7XG4gIEBpbmNsdWRlIHNiYi5saXN0LXJlc2V0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1mbGV4LWRpcmVjdGlvbik7XG4gIGdhcDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1nYXApO1xufVxuXG4vLyBVc2luZyAuLi4gbGkgc2VsZWN0b3IsIGJlY2F1c2UgdGhlIGxpIGdlbmVyYXRpb25cbi8vIGlzIGhhbmRsZWQgaW4gdGhlIGNvbXBvbmVudCBiYXNlIGNsYXNzLlxuLnNiYi10cmFpbi1mb3JtYXRpb25fX3RyYWluLWxpc3QgPiA6aXMobGksIHNwYW4pIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG4iLCJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBub3RoaW5nLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxuICB1bnNhZmVDU1MsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5cbmltcG9ydCB7XG4gIGJveFNpemluZ1N0eWxlcyxcbiAgaG9zdFNjcm9sbGJhclN0eWxlcyxcbiAgaTE4blNlY3RvcixcbiAgaTE4blNlY3RvclNob3J0LFxuICBpMThuVHJhaW5zLFxuICBTYmJFbGVtZW50LFxuICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsXG4gIFNiYk5hbWVkU2xvdExpc3RNaXhpbixcbiAgdHlwZSBTYmJPcmllbnRhdGlvbixcbiAgdHlwZSBXaXRoTGlzdENoaWxkcmVuLFxufSBmcm9tICcuLi8uLi9jb3JlLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiVHJhaW5FbGVtZW50IH0gZnJvbSAnLi4vdHJhaW4vdHJhaW4uY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgU2JiVHJhaW5CbG9ja2VkUGFzc2FnZUVsZW1lbnQgfSBmcm9tICcuLi90cmFpbi1ibG9ja2VkLXBhc3NhZ2UvdHJhaW4tYmxvY2tlZC1wYXNzYWdlLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlRyYWluV2Fnb25NaXhpblR5cGUgfSBmcm9tICcuLi90cmFpbi13YWdvbi1jb21tb24udHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi90cmFpbi1mb3JtYXRpb24uc2Nzcz9pbmxpbmUnO1xuXG5pbnRlcmZhY2UgQWdncmVnYXRlZFNlY3RvciB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHdhZ29uQ291bnQ6IG51bWJlcjtcbiAgYmxvY2tlZFBhc3NhZ2VDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgdHJhaW4gY29tcG9zaXRpb24sIGFjdGluZyBhcyBhIGNvbnRhaW5lciBmb3Igb25lIG9yIG1vcmUgYHNiYi10cmFpbmAgY29tcG9uZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkICdzYmItdHJhaW4nIGVsZW1lbnRzIHRvIHRoZSBgc2JiLXRyYWluLWZvcm1hdGlvbmAuXG4gKiBAY3NzcHJvcCBbLS1zYmItdHJhaW4tZm9ybWF0aW9uLXNjcm9sbC1wYWRkaW5nPXZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KV0gLSBEZWZpbmVzIHRoZSBpbmxpbmUgb3IgYmxvY2sgcGFkZGluZyBpbnNpZGUgdGhlIGhvcml6b250YWwgb3IgdmVydGljYWwgc2Nyb2xsaW5nIGFyZWEuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJUcmFpbkZvcm1hdGlvbkVsZW1lbnQgZXh0ZW5kcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW48XG4gIFNiYlRyYWluRWxlbWVudCxcbiAgdHlwZW9mIFNiYkVsZW1lbnRcbj4oU2JiRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLXRyYWluLWZvcm1hdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtcbiAgICBob3N0U2Nyb2xsYmFyU3R5bGVzLFxuICAgIGJveFNpemluZ1N0eWxlcyxcbiAgICB1bnNhZmVDU1Moc3R5bGUpLFxuICBdO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lcyA9IFsnc2JiLXRyYWluJ107XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHZpZXcgb2YgdGhlIHdhZ29ucyBpcyBmcm9tIHNpZGUgb3IgdG9wIHBlcnNwZWN0aXZlLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciB2aWV3OiAnc2lkZScgfCAndG9wJyA9ICdzaWRlJztcblxuICAvKiogT3JpZW50YXRpb24sIGVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBvcmllbnRhdGlvbjogU2JiT3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG5cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfc2VjdG9yczogQWdncmVnYXRlZFNlY3RvcltdID0gW107XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCd0cmFpbnNsb3RjaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgdGhpcy5fcmVhZFNlY3RvcnMoZSk7XG4gICAgICB0aGlzLl9yZWFkRGlyZWN0aW9uTGFiZWwoZSk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3NlY3RvcmNoYW5nZScsIChlKSA9PiB0aGlzLl9yZWFkU2VjdG9ycyhlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2RpcmVjdGlvbmxhYmVsY2hhbmdlJywgKGUpID0+IHRoaXMuX3JlYWREaXJlY3Rpb25MYWJlbChlKSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIC8vIFdoZW4gaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXIgc3R5bGVzIG9uIHRoZSBob3N0LCB0aGVyZSBpcyBubyBob3ZlciBlZmZlY3Qgb2YgdGhlIHNjcm9sbGJhciBwb3NzaWJsZS5cbiAgICAvLyBJbiBtb3N0IGNhc2VzLCB0aGUgY29tcG9uZW50IHdpbGwgYmUgdXNlZCBpbiBMaWdodCBET00uIFRvIGFsc28gc3VwcG9ydCB0aGUgaG92ZXIgZWZmZWN0LFxuICAgIC8vIHdlIGFkZGl0aW9uYWxseSBhZGQgdGhlIGBzYmItc2Nyb2xsYmFyYCBDU1MgY2xhc3MgdG8gdGhlIGhvc3QuXG4gICAgLy8gVGhpcyBpcyBhbiBleGNlcHRpb24gYXMgd2Ugbm9ybWFsbHkgZG9uJ3QgYWx0ZXIgdGhlIGNsYXNzTGlzdCBvZiB0aGUgaG9zdC5cbiAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ3NiYi1zY3JvbGxiYXInKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWREaXJlY3Rpb25MYWJlbChldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgLy8gS2VlcCB0aGUgZXZlbnQgaW50ZXJuYWwuXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy50b2dnbGVTdGF0ZShcbiAgICAgICdoYXMtZGlyZWN0aW9uLWxhYmVsJyxcbiAgICAgIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi10cmFpbicpID8/IFtdKS5zb21lKFxuICAgICAgICAodHJhaW4pID0+ICEhdHJhaW4uZGlyZWN0aW9uTGFiZWwsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9yZWFkU2VjdG9ycyhldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgLy8gS2VlcCB0aGUgZXZlbnQgaW50ZXJuYWwuXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5fc2VjdG9ycyA9IEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJUcmFpbldhZ29uTWl4aW5UeXBlIHwgU2JiVHJhaW5CbG9ja2VkUGFzc2FnZUVsZW1lbnQ+KFxuICAgICAgICAnc2JiLXRyYWluLXdhZ29uLHNiYi10cmFpbi13YWdvbi1idXR0b24sc2JiLXRyYWluLXdhZ29uLWxpbmssc2JiLXRyYWluLWJsb2NrZWQtcGFzc2FnZScsXG4gICAgICApID8/IFtdLFxuICAgICkucmVkdWNlKFxuICAgICAgKFxuICAgICAgICBhZ2dyZWdhdGVkU2VjdG9yczogQWdncmVnYXRlZFNlY3RvcltdLFxuICAgICAgICBpdGVtOiBTYmJUcmFpbldhZ29uTWl4aW5UeXBlIHwgU2JiVHJhaW5CbG9ja2VkUGFzc2FnZUVsZW1lbnQsXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudEFnZ3JlZ2F0ZWRTZWN0b3IgPSBhZ2dyZWdhdGVkU2VjdG9yc1thZ2dyZWdhdGVkU2VjdG9ycy5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAoaXRlbS5sb2NhbE5hbWUuc3RhcnRzV2l0aCgnc2JiLXRyYWluLXdhZ29uJykpIHtcbiAgICAgICAgICBjb25zdCBzZWN0b3JBdHRyaWJ1dGUgPVxuICAgICAgICAgICAgKGl0ZW0gYXMgU2JiVHJhaW5XYWdvbk1peGluVHlwZSkuc2VjdG9yID8/IGl0ZW0uZ2V0QXR0cmlidXRlKCdzZWN0b3InKTtcblxuICAgICAgICAgIGlmICghY3VycmVudEFnZ3JlZ2F0ZWRTZWN0b3IubGFiZWwgJiYgc2VjdG9yQXR0cmlidXRlKSB7XG4gICAgICAgICAgICBjdXJyZW50QWdncmVnYXRlZFNlY3Rvci5sYWJlbCA9IHNlY3RvckF0dHJpYnV0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXNlY3RvckF0dHJpYnV0ZSB8fCBjdXJyZW50QWdncmVnYXRlZFNlY3Rvci5sYWJlbCA9PT0gc2VjdG9yQXR0cmlidXRlKSB7XG4gICAgICAgICAgICBjdXJyZW50QWdncmVnYXRlZFNlY3Rvci53YWdvbkNvdW50Kys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZWRTZWN0b3JzLnB1c2goe1xuICAgICAgICAgICAgICBsYWJlbDogc2VjdG9yQXR0cmlidXRlLFxuICAgICAgICAgICAgICB3YWdvbkNvdW50OiAxLFxuICAgICAgICAgICAgICBibG9ja2VkUGFzc2FnZUNvdW50OiAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubG9jYWxOYW1lID09PSAnc2JiLXRyYWluLWJsb2NrZWQtcGFzc2FnZScpIHtcbiAgICAgICAgICBjdXJyZW50QWdncmVnYXRlZFNlY3Rvci5ibG9ja2VkUGFzc2FnZUNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWdncmVnYXRlZFNlY3RvcnM7XG4gICAgICB9LFxuICAgICAgW3sgd2Fnb25Db3VudDogMCwgYmxvY2tlZFBhc3NhZ2VDb3VudDogMCB9IGFzIEFnZ3JlZ2F0ZWRTZWN0b3JdLFxuICAgICk7XG5cbiAgICB0aGlzLnRvZ2dsZVN0YXRlKFxuICAgICAgJ2hhcy1zZWN0b3JzJyxcbiAgICAgIHRoaXMuX3NlY3RvcnMuc29tZSgocykgPT4gISFzLmxhYmVsKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPFdpdGhMaXN0Q2hpbGRyZW48dGhpcz4+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaXN0Q2hpbGRyZW4nKSkge1xuICAgICAgdGhpcy5fcmVhZFNlY3RvcnMoKTtcbiAgICAgIHRoaXMuX3JlYWREaXJlY3Rpb25MYWJlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgJHt0aGlzLl9zZWN0b3JzLmxlbmd0aCAmJiB0aGlzLl9zZWN0b3JzWzBdLmxhYmVsICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBodG1sYDxkaXYgY2xhc3M9XCJzYmItdHJhaW4tZm9ybWF0aW9uX19zZWN0b3JzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAke3RoaXMuX3NlY3RvcnMubWFwKFxuICAgICAgICAgICAgICAoYWdncmVnYXRlZFNlY3RvcikgPT5cbiAgICAgICAgICAgICAgICBodG1sYDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmFpbi1mb3JtYXRpb25fX3NlY3RvclwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgJy0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1jb3VudCc6IGFnZ3JlZ2F0ZWRTZWN0b3Iud2Fnb25Db3VudCxcbiAgICAgICAgICAgICAgICAgICAgJy0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1ibG9ja2VkLXBhc3NhZ2UtY291bnQnOlxuICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRTZWN0b3IuYmxvY2tlZFBhc3NhZ2VDb3VudCxcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXRyYWluLWZvcm1hdGlvbl9fc2VjdG9yLXN0aWNreS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICR7YCR7XG4gICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlZFNlY3Rvci53YWdvbkNvdW50ID09PSAxICYmIGFnZ3JlZ2F0ZWRTZWN0b3IubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaTE4blNlY3RvclNob3J0W3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGkxOG5TZWN0b3JbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgICAgICAgICAgICAgICAgfSAke2FnZ3JlZ2F0ZWRTZWN0b3IubGFiZWwgPyBhZ2dyZWdhdGVkU2VjdG9yLmxhYmVsIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+YCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgICA6IG5vdGhpbmd9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItdHJhaW4tZm9ybWF0aW9uX190cmFpbnNcIj5cbiAgICAgICAgJHt0aGlzLnJlbmRlckxpc3Qoe1xuICAgICAgICAgIGNsYXNzOiAnc2JiLXRyYWluLWZvcm1hdGlvbl9fdHJhaW4tbGlzdCcsXG4gICAgICAgICAgYXJpYUxhYmVsOiBpMThuVHJhaW5zW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICB9KX1cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10cmFpbi1mb3Jt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