@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.
- package/core/i18n/i18n.js +103 -98
- package/core/styles/core.scss +15 -38
- package/core.css +57 -31
- package/core.js +22 -22
- package/custom-elements.json +6013 -2585
- package/development/core/i18n/i18n.d.ts +1 -0
- package/development/core/i18n/i18n.d.ts.map +1 -1
- package/development/core/i18n/i18n.js +8 -2
- package/development/core.js +2 -2
- package/development/train/train/train.component.d.ts +2 -5
- package/development/train/train/train.component.d.ts.map +1 -1
- package/development/train/train/train.component.js +1 -1
- package/development/train/train-blocked-passage/train-blocked-passage.component.d.ts +4 -3
- package/development/train/train-blocked-passage/train-blocked-passage.component.d.ts.map +1 -1
- package/development/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
- package/development/train/train-formation/train-formation.component.d.ts +6 -2
- package/development/train/train-formation/train-formation.component.d.ts.map +1 -1
- package/development/train/train-formation/train-formation.component.js +1 -1
- package/development/train/train-formation-orientation-mixin.d.ts +12 -0
- package/development/train/train-formation-orientation-mixin.d.ts.map +1 -0
- package/development/train/train-formation-orientation-mixin.js +62 -0
- package/development/train/train-wagon/train-wagon.component.d.ts +5 -32
- package/development/train/train-wagon/train-wagon.component.d.ts.map +1 -1
- package/development/train/train-wagon/train-wagon.component.js +19 -1
- package/development/train/train-wagon-button/train-wagon-button.component.d.ts +18 -0
- package/development/train/train-wagon-button/train-wagon-button.component.d.ts.map +1 -0
- package/development/train/train-wagon-button/train-wagon-button.component.js +18 -0
- package/development/train/train-wagon-common.d.ts +15 -0
- package/development/train/train-wagon-common.d.ts.map +1 -0
- package/development/train/train-wagon-common.js +2 -0
- package/development/train/train-wagon-link/train-wagon-link.component.d.ts +18 -0
- package/development/train/train-wagon-link/train-wagon-link.component.d.ts.map +1 -0
- package/development/train/train-wagon-link/train-wagon-link.component.js +18 -0
- package/development/train-blocked-passage.component-BgBnEOfh.js +22 -0
- package/development/train-formation.component-CDKR5KCm.js +194 -0
- package/development/train-wagon-common-S3OJdguG.js +441 -0
- package/development/train.component-CP9QaQk8.js +239 -0
- package/development/train.d.ts.map +1 -1
- package/development/train.js +13 -7
- package/development/train.pure.d.ts +4 -0
- package/development/train.pure.d.ts.map +1 -1
- package/development/train.pure.js +9 -5
- package/index.d.ts +3 -1
- package/index.js +3 -1
- package/off-brand-theme.css +57 -31
- package/package.json +2 -2
- package/safety-theme.css +57 -31
- package/standard-theme.css +57 -31
- package/train/train/train.component.js +1 -1
- package/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
- package/train/train-formation/train-formation.component.js +1 -1
- package/train/train-formation-orientation-mixin.js +45 -0
- package/train/train-wagon/train-wagon.component.js +13 -2
- package/train/train-wagon-button/train-wagon-button.component.js +10 -0
- package/train/train-wagon-common.js +2 -0
- package/train/train-wagon-link/train-wagon-link.component.js +10 -0
- package/train-blocked-passage.component-voZ8fxiB.js +14 -0
- package/train-formation.component-6XQVXPue.js +147 -0
- package/train-wagon-common-DTN_G78z.js +354 -0
- package/train.component-3vmLxVCZ.js +181 -0
- package/train.js +10 -6
- package/train.pure.js +9 -5
- package/development/train-blocked-passage.component-Bh2dR1gn.js +0 -30
- package/development/train-formation.component-Dm0t9N_h.js +0 -149
- package/development/train-wagon.component-B6V4dPKn.js +0 -334
- package/development/train.component-BvbNBkZF.js +0 -229
- package/train-blocked-passage.component-DIh8dbU9.js +0 -22
- package/train-formation.component-DS4EDwPY.js +0 -117
- package/train-wagon.component-LwKwwuta.js +0 -257
- 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,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+YFxuICAgICAgICA6IG5vdGhpbmd9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItdHJhaW4tZm9ybWF0aW9uX190cmFpbnNcIj5cbiAgICAgICAgJHt0aGlzLnJlbmRlckxpc3Qoe1xuICAgICAgICAgIGNsYXNzOiAnc2JiLXRyYWluLWZvcm1hdGlvbl9fdHJhaW4tbGlzdCcsXG4gICAgICAgICAgYXJpYUxhYmVsOiBpMThuVHJhaW5zW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICB9KX1cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10cmFpbi1mb3JtYXRpb24nOiBTYmJUcmFpbkZvcm1hdGlvbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0lDeUNhLGtDQUF3QjttQkFBUyxzQkFHNUMsV0FBVzs7Ozs7Ozs7OztjQUhBLGlDQUFpQyxZQUdqQzs7O3VCQVVWLFNBQVMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFBOzhCQUczQixTQUFTLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQTsyQkFFM0IsT0FBTyxDQUFBO0FBTHFCLGdCQUFBLE1BQUEsTUFBQSxrQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFVBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBSSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUosT0FBSTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLG9CQUFBLHdCQUFBO0FBR3BCLGdCQUFBLE1BQUEsTUFBQSx5QkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGlCQUFBO0tBQUEsTUFBQSxRQUFBLElBQWdCO0tBQVcsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFYLGNBQVc7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSwyQkFBQSwrQkFBQTtBQUUvQyxnQkFBQSxNQUFBLE1BQUEsc0JBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEsUUFBQTtLQUFBLE1BQUEsUUFBQSxjQUFBO0tBQUEsTUFBQSxRQUFBLElBQWlCO0tBQVEsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFSLFdBQVE7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSx3QkFBQSw0QkFBQTs7Ozs7Ozs7O0FBZEYsUUFBQSxjQUFzQjs7O0FBQy9CLFFBQUEsU0FBeUI7SUFDOUM7SUFDQTtJQUNBLFVBQVUsd0JBQUE7SUFDWDs7RUFJNEI7O0VBQUEsSUFBZ0IsT0FBSTtBQUFBLFVBQUEsTUFBQTs7RUFBcEIsSUFBZ0IsS0FBSSxPQUFBO0FBQUEsU0FBQSx3QkFBQTs7RUFHcEI7O0VBQUEsSUFBZ0IsY0FBVztBQUFBLFVBQUEsTUFBQTs7RUFBM0IsSUFBZ0IsWUFBVyxPQUFBO0FBQUEsU0FBQSwrQkFBQTs7RUFFL0M7RUFBQSxJQUFpQixXQUFRO0FBQUEsVUFBQSxNQUFBOztFQUF6QixJQUFpQixTQUFRLE9BQUE7QUFBQSxTQUFBLDRCQUFBOztFQUlsQyxjQUFBO0FBQ0UsVUFBTztBQWJtQixRQUFBLHNCQUFzQixDQUFDLFlBQVk7QUFHbEIsU0FBQSx3QkFBQSxrQkFBQSxNQUFBLG9CQUF1QixPQUFNO0FBRzdCLFNBQUEsZ0NBQUEsa0JBQUEsTUFBQSx3QkFBQSxFQUFBLGtCQUFBLE1BQUEsMkJBQThCLGFBQVk7QUFFN0QsU0FBQSw2QkFBQSxrQkFBQSxNQUFBLCtCQUFBLEVBQUEsa0JBQUEsTUFBQSx3QkFBK0IsRUFBRSxDQUFBO0FBRW5ELFFBQUEsYUFBUyxrQkFBQSxNQUFBLDRCQUFBLEVBQUcsSUFBSSxzQkFBc0IsS0FBSztBQUlqRCxRQUFLLG1CQUFtQixvQkFBb0IsTUFBSztBQUMvQyxTQUFLLGFBQWEsRUFBRTtBQUNwQixTQUFLLG9CQUFvQixFQUFFO0tBQzNCO0FBQ0YsUUFBSyxtQkFBbUIsaUJBQWlCLE1BQU0sS0FBSyxhQUFhLEVBQUUsQ0FBQztBQUNwRSxRQUFLLG1CQUFtQix5QkFBeUIsTUFBTSxLQUFLLG9CQUFvQixFQUFFLENBQUM7O0VBR3JFLG9CQUFpQjtBQUMvQixTQUFNLG1CQUFtQjtBQU16QixRQUFLLFVBQVUsSUFBSSxnQkFBZ0I7O0VBRzdCLG9CQUFvQixPQUFhO0FBRXZDLFVBQU8saUJBQWlCO0FBRXhCLFFBQUssWUFDSCx1QkFDQSxNQUFNLEtBQUssS0FBSyxtQkFBbUIsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQ3BELFVBQVUsQ0FBQyxDQUFDLE1BQU0sZUFDcEIsQ0FDRjs7RUFHSyxhQUFhLE9BQWE7QUFFaEMsVUFBTyxpQkFBaUI7QUFFeEIsUUFBSyxXQUFXLE1BQU0sS0FDcEIsS0FBSyxtQkFDSCx3RkFDRCxJQUFJLEVBQUUsQ0FDUixDQUFDLFFBRUUsbUJBQ0EsU0FDRTtJQUNGLE1BQU0sMEJBQTBCLGtCQUFrQixrQkFBa0IsU0FBUztBQUU3RSxRQUFJLEtBQUssVUFBVSxXQUFXLGtCQUFrQixFQUFFO0tBQ2hELE1BQU0sa0JBQ0gsS0FBZ0MsVUFBVSxLQUFLLGFBQWEsU0FBUztBQUV4RSxTQUFJLENBQUMsd0JBQXdCLFNBQVMsZ0JBQ3BDLHlCQUF3QixRQUFRO0FBR2xDLFNBQUksQ0FBQyxtQkFBbUIsd0JBQXdCLFVBQVUsZ0JBQ3hELHlCQUF3QjtTQUV4QixtQkFBa0IsS0FBSztNQUNyQixPQUFPO01BQ1AsWUFBWTtNQUNaLHFCQUFxQjtNQUN0QixDQUFDO2VBRUssS0FBSyxjQUFjLDRCQUM1Qix5QkFBd0I7QUFHMUIsV0FBTztNQUVULENBQUM7SUFBRSxZQUFZO0lBQUcscUJBQXFCO0lBQXVCLENBQUMsQ0FDaEU7QUFFRCxRQUFLLFlBQ0gsZUFDQSxLQUFLLFNBQVMsTUFBTSxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FDckM7O0VBR2dCLFdBQVcsbUJBQXlEO0FBQ3JGLFNBQU0sV0FBVyxrQkFBa0I7QUFFbkMsT0FBSSxrQkFBa0IsSUFBSSxlQUFlLEVBQUU7QUFDekMsU0FBSyxjQUFjO0FBQ25CLFNBQUsscUJBQXFCOzs7RUFJWCxTQUFNO0FBQ3ZCLFVBQU8sSUFBSTtRQUNQLEtBQUssU0FBUyxVQUFVLEtBQUssU0FBUyxHQUFHLFVBQVUsS0FBQSxJQUNqRCxJQUFJO2NBQ0EsS0FBSyxTQUFTLEtBQ2IscUJBQ0MsSUFBSTs7MEJBRU0sU0FBUztJQUNmLHFDQUFxQyxpQkFBaUI7SUFDdEQscURBQ0UsaUJBQWlCO0lBQ3BCLENBQUMsQ0FBQTs7O3NCQUdFLEdBQ0EsaUJBQWlCLGVBQWUsS0FBSyxpQkFBaUIsUUFDbEQsZ0JBQWdCLEtBQUssVUFBVSxXQUMvQixXQUFXLEtBQUssVUFBVSxTQUNoQyxHQUFJLGlCQUFpQixRQUFRLGlCQUFpQixRQUFRLEtBQUE7O3lCQUc3RCxDQUFBO29CQUVILFFBQUE7OztVQUdBLEtBQUssV0FBVztJQUNoQixPQUFPO0lBQ1AsV0FBVyxXQUFXLEtBQUssVUFBVTtJQUN0QyxDQUFDLENBQUEifQ==
|