@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,441 @@
|
|
|
1
|
+
import { SbbTrainFormationOrientationMixin } from "./train/train-formation-orientation-mixin.js";
|
|
2
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
3
|
+
import { isServer, nothing, unsafeCSS } from "lit";
|
|
4
|
+
import { property, state } from "lit/decorators.js";
|
|
5
|
+
import { SbbLanguageController, SbbNamedSlotListMixin, SbbPropertyWatcherController, boxSizingStyles, forceType, handleDistinctChange, i18nAdditionalWagonInformationHeading, i18nAnd, i18nBlockedPassage, i18nClass, i18nClosedCompartmentLabel, i18nCouchetteWagonLabel, i18nLocomotiveLabel, i18nRestaurantWagonLabel, i18nSector, i18nSleepingWagonLabel, i18nWagonLabel, i18nWagonLabelNumber, omitEmptyConverter } from "./core.js";
|
|
6
|
+
import { html as html$1 } from "lit/static-html.js";
|
|
7
|
+
import { SbbDividerElement } from "./divider.pure.js";
|
|
8
|
+
import { SbbIconElement } from "./icon.pure.js";
|
|
9
|
+
import { SbbTimetableOccupancyIconElement } from "./timetable-occupancy-icon.pure.js";
|
|
10
|
+
import { when } from "lit/directives/when.js";
|
|
11
|
+
//#region src/elements/train/train-wagon-common.scss?inline
|
|
12
|
+
var train_wagon_common_default = ":host {\n --sbb-train-wagon-transition-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-2x)\n );\n display: block;\n font-size: var(--sbb-train-wagon-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n outline: none !important;\n}\n\n:host([wagon-type=closed]) {\n --sbb-train-wagon-crossed-shape-display: block;\n}\n@media (forced-colors: active) {\n :host([wagon-type=closed]) {\n --sbb-train-wagon-shape-color: GrayText;\n }\n}\n\n:host(:is(:state(view-side),[state--view-side])[wagon-type=wagon-end-left]) {\n --sbb-train-wagon-padding-inline: var(--sbb-spacing-fixed-4x) var(--sbb-spacing-fixed-3x);\n}\n\n:host(:is(:state(view-side),[state--view-side])[wagon-type=wagon-end-right]) {\n --sbb-train-wagon-padding-inline: var(--sbb-spacing-fixed-3x) var(--sbb-spacing-fixed-4x);\n}\n\n:host(:is(:state(view-side),[state--view-side])[wagon-type=locomotive]) {\n --sbb-train-wagon-padding-inline: var(--sbb-spacing-fixed-4x);\n}\n\n:host(:is(:state(view-top),[state--view-top])) {\n --sbb-train-wagon-border-radius: var(--sbb-border-radius-4x);\n}\n\n:host([label]) {\n --_sbb-train-wagon-attributes-max-width: var(--sbb-train-wagon-attributes-max-width);\n}\n\n:host(:not([label])) {\n --_sbb-train-wagon-attributes-justify-content: center;\n}\n\n:host(.sbb-active) {\n --sbb-train-wagon-border-width: var(--sbb-border-width-3x);\n}\n\n:host(:is(:state(action),[state--action])) {\n cursor: var(--sbb-cursor-pointer);\n}\n\n@media (forced-colors: active) {\n :host(:is(:state(link),[state--link])) {\n --sbb-train-wagon-shape-color: LinkText;\n }\n}\n\n.sbb-train-wagon-link {\n outline: none;\n color: inherit;\n text-decoration: none;\n}\n\n.sbb-train-wagon {\n display: flex;\n flex-direction: var(--_sbb-train-formation-flex-direction-inverted);\n align-items: center;\n width: var(--_sbb-train-formation-wagon-width);\n gap: var(--sbb-train-wagon-vertical-gap);\n position: relative;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon {\n width: auto;\n height: var(--_sbb-train-formation-wagon-height);\n}\n.sbb-train-wagon::before {\n content: \"\";\n position: absolute;\n width: var(--_sbb-train-formation-wagon-width);\n height: var(--_sbb-train-formation-wagon-height);\n border-radius: var(--sbb-train-wagon-border-radius);\n}\n:host(:is(:state(button),[state--button]):focus-visible) .sbb-train-wagon::before, .sbb-train-wagon-link:focus-visible .sbb-train-wagon::before {\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.sbb-train-wagon__compartment {\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 justify-content: center;\n padding-inline: var(--sbb-train-wagon-padding-inline);\n mask-image: var(--_sbb-train-wagon-clip-shape-compartment);\n transition: background-color var(--sbb-train-wagon-transition-duration) var(--sbb-animation-easing);\n}\n@media (any-hover: hover) {\n :host(:is(:state(action),[state--action]):hover) .sbb-train-wagon__compartment {\n background-color: var(--sbb-train-wagon-background-color-hover);\n }\n}\n:host(:is(:state(action),[state--action]):is(:active, :is(:state(active),[state--active]))) .sbb-train-wagon__compartment {\n background-color: var(--sbb-train-wagon-background-color-active);\n}\n.sbb-train-wagon__compartment:has(.sbb-train-wagon__occupancy):has(.sbb-train-wagon__class) {\n justify-content: space-between;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__compartment {\n padding-inline: 0;\n padding-block: var(--sbb-train-wagon-padding-inline);\n}\n\n.sbb-train-wagon__compartment,\n.sbb-train-wagon__main-icon {\n width: var(--_sbb-train-formation-wagon-width);\n height: var(--_sbb-train-formation-wagon-height);\n}\n\n.sbb-train-wagon__shape {\n position: absolute;\n inset: 0;\n width: var(--sbb-train-formation-wagon-dimension-long);\n height: var(--sbb-train-formation-wagon-dimension-short);\n transform-origin: 0 0;\n will-change: transform;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__shape {\n rotate: -90deg;\n transform: scale(-1, 1);\n}\n\n.sbb-train-wagon__shape {\n mask-image: var(--_sbb-train-wagon-clip-shape);\n pointer-events: none;\n fill: none;\n stroke: var(--sbb-train-wagon-shape-color);\n stroke-width: calc(var(--sbb-train-wagon-border-width) * 2);\n}\n\n.sbb-train-wagon__main-icon {\n --sbb-icon-svg-height: var(--sbb-train-wagon-main-icon-height);\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.sbb-train-wagon__shape-closed {\n display: var(--sbb-train-wagon-crossed-shape-display, none);\n stroke-width: var(--sbb-border-width-1x);\n}\n\n.sbb-train-wagon__occupancy,\n.sbb-train-wagon__class {\n height: var(--_sbb-train-formation-wagon-height);\n flex-direction: var(--_sbb-train-formation-flex-direction);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__occupancy,\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__class {\n height: auto;\n width: var(--_sbb-train-formation-wagon-width);\n}\n\n.sbb-train-wagon__occupancy {\n --sbb-icon-svg-height: var(--sbb-train-wagon-occupancy-height);\n grid-area: occupancy;\n}\n\n.sbb-train-wagon__class {\n gap: 0.0625rem;\n order: 1;\n}\n\n.sbb-train-wagon__class-entry {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--sbb-train-wagon-class-dimension);\n height: var(--sbb-train-wagon-class-dimension);\n border: var(--sbb-train-wagon-class-border);\n background-color: var(--sbb-train-wagon-class-background-color);\n border-radius: var(--sbb-train-wagon-class-border-radius);\n font-weight: var(--sbb-train-wagon-class-font-weight);\n color: var(--sbb-train-wagon-class-color);\n position: relative;\n line-height: 1;\n}\n.sbb-train-wagon__class-entry.first::before {\n content: \"\";\n position: absolute;\n background-color: var(--sbb-train-wagon-class-first-color);\n border-end-end-radius: var(--sbb-train-wagon-class-first-border-radius);\n}\n:host(:not(:is(:state(orientation-vertical),[state--orientation-vertical]))) .sbb-train-wagon__class-entry.first::before {\n height: var(--sbb-train-wagon-class-first-thickness);\n width: var(--sbb-train-wagon-class-dimension);\n inset: calc(-0.5 * (var(--_sbb-train-formation-wagon-height) - var(--sbb-train-wagon-class-dimension)) + var(--sbb-train-wagon-border-width) - var(--sbb-train-wagon-class-border-width)) 0 auto calc(-1 * var(--sbb-train-wagon-class-border-width));\n border-end-start-radius: var(--sbb-train-wagon-class-first-border-radius);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__class-entry.first::before {\n width: var(--sbb-train-wagon-class-first-thickness);\n height: var(--sbb-train-wagon-class-dimension);\n inset: calc(-1 * var(--sbb-train-wagon-class-border-width)) auto 0 calc(-0.5 * (var(--_sbb-train-formation-wagon-width) - var(--sbb-train-wagon-class-dimension)) + var(--sbb-train-wagon-border-width) - var(--sbb-train-wagon-class-border-width));\n border-start-end-radius: var(--sbb-train-wagon-class-first-border-radius);\n}\n\n.sbb-train-wagon__information-wrapper {\n display: flex;\n align-items: start;\n flex-direction: var(--_sbb-train-formation-flex-direction);\n gap: var(--sbb-train-wagon-information-gap);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__information-wrapper {\n min-width: var(--sbb-train-wagon-information-min-width);\n}\n.sbb-train-wagon__information-wrapper[hidden] {\n display: none;\n}\n\n:is(.sbb-train-wagon__label, .sbb-train-wagon__label-divider) {\n margin-block-start: calc(0.5 * (1em * var(--sbb-typo-line-height-text) - var(--sbb-train-wagon-font-size)));\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) :is(.sbb-train-wagon__label, .sbb-train-wagon__label-divider) {\n margin-block-start: 0;\n}\n\n.sbb-train-wagon__label {\n line-height: 1;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__label {\n max-width: var(--sbb-train-wagon-information-min-width);\n width: 100%;\n text-align: center;\n}\n\n.sbb-train-wagon__label-divider {\n height: var(--sbb-train-wagon-font-size);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__label-divider {\n height: auto;\n width: var(--sbb-train-wagon-font-size);\n margin-inline-start: calc(0.5 * (var(--sbb-train-wagon-information-min-width) - var(--sbb-train-wagon-font-size)));\n}\n\n.sbb-train-wagon__attribute-icon-list {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n --sbb-icon-svg-height: var(--sbb-train-wagon-attribute-icon-height);\n display: flex;\n justify-content: var(--_sbb-train-wagon-attributes-justify-content, start);\n flex-wrap: wrap;\n gap: var(--sbb-train-wagon-attribute-icon-gap);\n color: var(--sbb-train-wagon-attribute-icon-color);\n padding-block-start: calc(0.5 * (1em * var(--sbb-typo-line-height-text) - var(--sbb-train-wagon-attribute-icon-height)));\n max-width: var(--_sbb-train-wagon-attributes-max-width);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__attribute-icon-list {\n max-width: calc(var(--_sbb-train-wagon-attributes-icon-columns) * var(--sbb-train-wagon-attributes-mean-width));\n max-height: calc(var(--_sbb-train-wagon-attributes-icon-rows, 3) * var(--sbb-train-wagon-attribute-icon-height) + (var(--_sbb-train-wagon-attributes-icon-rows, 3) - 1) * var(--sbb-train-wagon-attribute-icon-gap));\n padding-block-start: 0;\n justify-content: center;\n width: 100%;\n}\n\n.sbb-train-wagon__attribute-icon-list > :is(li, span) {\n display: inline-flex;\n}\n\n.sbb-screen-reader-only {\n border: 0;\n clip-path: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}";
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/elements/train/train-wagon-common.ts
|
|
15
|
+
var wagonTypeToIconMap = {
|
|
16
|
+
couchette: "sa-cc",
|
|
17
|
+
sleeping: "sa-wl",
|
|
18
|
+
restaurant: "sa-wr"
|
|
19
|
+
};
|
|
20
|
+
var shapePaths = {
|
|
21
|
+
wagon: {
|
|
22
|
+
side: "M12 0H72A12 12 0 0184 12V24A12 12 0 0172 36H12A12 12 0 010 24V12A12 12 0 0112 0Z",
|
|
23
|
+
top: "M8 0A8 8 0 000 8V28a8 8 0 008 8H76a8 8 0 008-8V8A8 8 0 0076 0H8Z"
|
|
24
|
+
},
|
|
25
|
+
locomotive: {
|
|
26
|
+
side: "M7.7 8.6C10.5 3.6 16 0 22 0H62c6 0 11.5 3.6 14.3 8.6l5.1 9C85.9 25.6 80 36 71 36H13C4 36-1.9 25.6 2.6 17.6l5.1-9Z",
|
|
27
|
+
top: "M66 0H18C8 0 0 8 0 18S8 36 18 36H66c10 0 18-8 18-18S76 0 66 0Z"
|
|
28
|
+
},
|
|
29
|
+
"wagon-end-left": {
|
|
30
|
+
side: "M7.7 8.6A16 16 0 0122 0H72c6 0 12 6 12 12V24c0 6-6 12-12 12H13C3.8 36-2 26.1 2.6 18.1Z",
|
|
31
|
+
top: "M76 0H18C8.25 0 .5 8.25.5 18S8 36 18 36H76c4 0 8-4 8-8V8c0-4-4-8-8-8Z"
|
|
32
|
+
},
|
|
33
|
+
"wagon-end-right": {
|
|
34
|
+
side: "M76.3 8.6A16 16 0 0062 0H12C6 0 0 6 0 13v11c0 6 6 12 12 12h58.4c8.6 0 15-9.9 10.4-17.9z",
|
|
35
|
+
top: "M66 0H8C4 0 0 4 0 8V28c0 4 4 8 8 8H66c9.75 0 17.5-8.25 17.5-18S76 0 66 0Z"
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var SbbTrainWagonMixin = (superClass) => {
|
|
39
|
+
return (() => {
|
|
40
|
+
let _classSuper = SbbTrainFormationOrientationMixin(SbbNamedSlotListMixin(superClass));
|
|
41
|
+
let _wagonType_decorators;
|
|
42
|
+
let _wagonType_initializers = [];
|
|
43
|
+
let _wagonType_extraInitializers = [];
|
|
44
|
+
let _occupancy_decorators;
|
|
45
|
+
let _occupancy_initializers = [];
|
|
46
|
+
let _occupancy_extraInitializers = [];
|
|
47
|
+
let _sector_decorators;
|
|
48
|
+
let _sector_initializers = [];
|
|
49
|
+
let _sector_extraInitializers = [];
|
|
50
|
+
let _blockedPassage_decorators;
|
|
51
|
+
let _blockedPassage_initializers = [];
|
|
52
|
+
let _blockedPassage_extraInitializers = [];
|
|
53
|
+
let _wagonClass_decorators;
|
|
54
|
+
let _wagonClass_initializers = [];
|
|
55
|
+
let _wagonClass_extraInitializers = [];
|
|
56
|
+
let _label_decorators;
|
|
57
|
+
let _label_initializers = [];
|
|
58
|
+
let _label_extraInitializers = [];
|
|
59
|
+
let _additionalAccessibilityText_decorators;
|
|
60
|
+
let _additionalAccessibilityText_initializers = [];
|
|
61
|
+
let _additionalAccessibilityText_extraInitializers = [];
|
|
62
|
+
let __view_decorators;
|
|
63
|
+
let __view_initializers = [];
|
|
64
|
+
let __view_extraInitializers = [];
|
|
65
|
+
return class SbbTrainWagonMixinElement extends _classSuper {
|
|
66
|
+
static {
|
|
67
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
68
|
+
_wagonType_decorators = [property({
|
|
69
|
+
attribute: "wagon-type",
|
|
70
|
+
reflect: true
|
|
71
|
+
})];
|
|
72
|
+
_occupancy_decorators = [property()];
|
|
73
|
+
_sector_decorators = [
|
|
74
|
+
forceType(),
|
|
75
|
+
handleDistinctChange((e) => e._sectorChanged()),
|
|
76
|
+
property({
|
|
77
|
+
reflect: true,
|
|
78
|
+
converter: omitEmptyConverter
|
|
79
|
+
})
|
|
80
|
+
];
|
|
81
|
+
_blockedPassage_decorators = [property({ attribute: "blocked-passage" })];
|
|
82
|
+
_wagonClass_decorators = [property({ attribute: "wagon-class" })];
|
|
83
|
+
_label_decorators = [forceType(), property({
|
|
84
|
+
reflect: true,
|
|
85
|
+
converter: omitEmptyConverter
|
|
86
|
+
})];
|
|
87
|
+
_additionalAccessibilityText_decorators = [forceType(), property({ attribute: "additional-accessibility-text" })];
|
|
88
|
+
__view_decorators = [state()];
|
|
89
|
+
__esDecorate(this, null, _wagonType_decorators, {
|
|
90
|
+
kind: "accessor",
|
|
91
|
+
name: "wagonType",
|
|
92
|
+
static: false,
|
|
93
|
+
private: false,
|
|
94
|
+
access: {
|
|
95
|
+
has: (obj) => "wagonType" in obj,
|
|
96
|
+
get: (obj) => obj.wagonType,
|
|
97
|
+
set: (obj, value) => {
|
|
98
|
+
obj.wagonType = value;
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
metadata: _metadata
|
|
102
|
+
}, _wagonType_initializers, _wagonType_extraInitializers);
|
|
103
|
+
__esDecorate(this, null, _occupancy_decorators, {
|
|
104
|
+
kind: "accessor",
|
|
105
|
+
name: "occupancy",
|
|
106
|
+
static: false,
|
|
107
|
+
private: false,
|
|
108
|
+
access: {
|
|
109
|
+
has: (obj) => "occupancy" in obj,
|
|
110
|
+
get: (obj) => obj.occupancy,
|
|
111
|
+
set: (obj, value) => {
|
|
112
|
+
obj.occupancy = value;
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
metadata: _metadata
|
|
116
|
+
}, _occupancy_initializers, _occupancy_extraInitializers);
|
|
117
|
+
__esDecorate(this, null, _sector_decorators, {
|
|
118
|
+
kind: "accessor",
|
|
119
|
+
name: "sector",
|
|
120
|
+
static: false,
|
|
121
|
+
private: false,
|
|
122
|
+
access: {
|
|
123
|
+
has: (obj) => "sector" in obj,
|
|
124
|
+
get: (obj) => obj.sector,
|
|
125
|
+
set: (obj, value) => {
|
|
126
|
+
obj.sector = value;
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
metadata: _metadata
|
|
130
|
+
}, _sector_initializers, _sector_extraInitializers);
|
|
131
|
+
__esDecorate(this, null, _blockedPassage_decorators, {
|
|
132
|
+
kind: "accessor",
|
|
133
|
+
name: "blockedPassage",
|
|
134
|
+
static: false,
|
|
135
|
+
private: false,
|
|
136
|
+
access: {
|
|
137
|
+
has: (obj) => "blockedPassage" in obj,
|
|
138
|
+
get: (obj) => obj.blockedPassage,
|
|
139
|
+
set: (obj, value) => {
|
|
140
|
+
obj.blockedPassage = value;
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
metadata: _metadata
|
|
144
|
+
}, _blockedPassage_initializers, _blockedPassage_extraInitializers);
|
|
145
|
+
__esDecorate(this, null, _wagonClass_decorators, {
|
|
146
|
+
kind: "accessor",
|
|
147
|
+
name: "wagonClass",
|
|
148
|
+
static: false,
|
|
149
|
+
private: false,
|
|
150
|
+
access: {
|
|
151
|
+
has: (obj) => "wagonClass" in obj,
|
|
152
|
+
get: (obj) => obj.wagonClass,
|
|
153
|
+
set: (obj, value) => {
|
|
154
|
+
obj.wagonClass = value;
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
metadata: _metadata
|
|
158
|
+
}, _wagonClass_initializers, _wagonClass_extraInitializers);
|
|
159
|
+
__esDecorate(this, null, _label_decorators, {
|
|
160
|
+
kind: "accessor",
|
|
161
|
+
name: "label",
|
|
162
|
+
static: false,
|
|
163
|
+
private: false,
|
|
164
|
+
access: {
|
|
165
|
+
has: (obj) => "label" in obj,
|
|
166
|
+
get: (obj) => obj.label,
|
|
167
|
+
set: (obj, value) => {
|
|
168
|
+
obj.label = value;
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
metadata: _metadata
|
|
172
|
+
}, _label_initializers, _label_extraInitializers);
|
|
173
|
+
__esDecorate(this, null, _additionalAccessibilityText_decorators, {
|
|
174
|
+
kind: "accessor",
|
|
175
|
+
name: "additionalAccessibilityText",
|
|
176
|
+
static: false,
|
|
177
|
+
private: false,
|
|
178
|
+
access: {
|
|
179
|
+
has: (obj) => "additionalAccessibilityText" in obj,
|
|
180
|
+
get: (obj) => obj.additionalAccessibilityText,
|
|
181
|
+
set: (obj, value) => {
|
|
182
|
+
obj.additionalAccessibilityText = value;
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
metadata: _metadata
|
|
186
|
+
}, _additionalAccessibilityText_initializers, _additionalAccessibilityText_extraInitializers);
|
|
187
|
+
__esDecorate(this, null, __view_decorators, {
|
|
188
|
+
kind: "accessor",
|
|
189
|
+
name: "_view",
|
|
190
|
+
static: false,
|
|
191
|
+
private: false,
|
|
192
|
+
access: {
|
|
193
|
+
has: (obj) => "_view" in obj,
|
|
194
|
+
get: (obj) => obj._view,
|
|
195
|
+
set: (obj, value) => {
|
|
196
|
+
obj._view = value;
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
metadata: _metadata
|
|
200
|
+
}, __view_initializers, __view_extraInitializers);
|
|
201
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
202
|
+
enumerable: true,
|
|
203
|
+
configurable: true,
|
|
204
|
+
writable: true,
|
|
205
|
+
value: _metadata
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
static {
|
|
209
|
+
this.elementDependencies = [
|
|
210
|
+
SbbIconElement,
|
|
211
|
+
SbbTimetableOccupancyIconElement,
|
|
212
|
+
SbbDividerElement
|
|
213
|
+
];
|
|
214
|
+
}
|
|
215
|
+
static {
|
|
216
|
+
this.styles = [boxSizingStyles, unsafeCSS(train_wagon_common_default)];
|
|
217
|
+
}
|
|
218
|
+
#wagonType_accessor_storage;
|
|
219
|
+
/**
|
|
220
|
+
* Wagon type.
|
|
221
|
+
* For `wagon-end-left` and `wagon-end-right`, please set the corresponding value of the `blockedPassage` property.
|
|
222
|
+
*/
|
|
223
|
+
get wagonType() {
|
|
224
|
+
return this.#wagonType_accessor_storage;
|
|
225
|
+
}
|
|
226
|
+
set wagonType(value) {
|
|
227
|
+
this.#wagonType_accessor_storage = value;
|
|
228
|
+
}
|
|
229
|
+
#occupancy_accessor_storage;
|
|
230
|
+
/** Occupancy of a wagon. */
|
|
231
|
+
get occupancy() {
|
|
232
|
+
return this.#occupancy_accessor_storage;
|
|
233
|
+
}
|
|
234
|
+
set occupancy(value) {
|
|
235
|
+
this.#occupancy_accessor_storage = value;
|
|
236
|
+
}
|
|
237
|
+
#sector_accessor_storage;
|
|
238
|
+
/** Sector in which the wagon stops. */
|
|
239
|
+
get sector() {
|
|
240
|
+
return this.#sector_accessor_storage;
|
|
241
|
+
}
|
|
242
|
+
set sector(value) {
|
|
243
|
+
this.#sector_accessor_storage = value;
|
|
244
|
+
}
|
|
245
|
+
#blockedPassage_accessor_storage;
|
|
246
|
+
/** Accessibility text for blocked passages of the wagon. */
|
|
247
|
+
get blockedPassage() {
|
|
248
|
+
return this.#blockedPassage_accessor_storage;
|
|
249
|
+
}
|
|
250
|
+
set blockedPassage(value) {
|
|
251
|
+
this.#blockedPassage_accessor_storage = value;
|
|
252
|
+
}
|
|
253
|
+
#wagonClass_accessor_storage;
|
|
254
|
+
/** Class label */
|
|
255
|
+
get wagonClass() {
|
|
256
|
+
return this.#wagonClass_accessor_storage;
|
|
257
|
+
}
|
|
258
|
+
set wagonClass(value) {
|
|
259
|
+
this.#wagonClass_accessor_storage = value;
|
|
260
|
+
}
|
|
261
|
+
#label_accessor_storage;
|
|
262
|
+
/** Wagon number */
|
|
263
|
+
get label() {
|
|
264
|
+
return this.#label_accessor_storage;
|
|
265
|
+
}
|
|
266
|
+
set label(value) {
|
|
267
|
+
this.#label_accessor_storage = value;
|
|
268
|
+
}
|
|
269
|
+
#additionalAccessibilityText_accessor_storage;
|
|
270
|
+
/** Additional accessibility text which will be appended to the end. */
|
|
271
|
+
get additionalAccessibilityText() {
|
|
272
|
+
return this.#additionalAccessibilityText_accessor_storage;
|
|
273
|
+
}
|
|
274
|
+
set additionalAccessibilityText(value) {
|
|
275
|
+
this.#additionalAccessibilityText_accessor_storage = value;
|
|
276
|
+
}
|
|
277
|
+
#_view_accessor_storage;
|
|
278
|
+
get _view() {
|
|
279
|
+
return this.#_view_accessor_storage;
|
|
280
|
+
}
|
|
281
|
+
set _view(value) {
|
|
282
|
+
this.#_view_accessor_storage = value;
|
|
283
|
+
}
|
|
284
|
+
constructor(...args) {
|
|
285
|
+
super(...args);
|
|
286
|
+
this.#wagonType_accessor_storage = __runInitializers(this, _wagonType_initializers, "wagon");
|
|
287
|
+
this.listChildLocalNames = (__runInitializers(this, _wagonType_extraInitializers), ["sbb-icon"]);
|
|
288
|
+
this.#occupancy_accessor_storage = __runInitializers(this, _occupancy_initializers, null);
|
|
289
|
+
this.#sector_accessor_storage = (__runInitializers(this, _occupancy_extraInitializers), __runInitializers(this, _sector_initializers, ""));
|
|
290
|
+
this.#blockedPassage_accessor_storage = (__runInitializers(this, _sector_extraInitializers), __runInitializers(this, _blockedPassage_initializers, "none"));
|
|
291
|
+
this.#wagonClass_accessor_storage = (__runInitializers(this, _blockedPassage_extraInitializers), __runInitializers(this, _wagonClass_initializers, null));
|
|
292
|
+
this.#label_accessor_storage = (__runInitializers(this, _wagonClass_extraInitializers), __runInitializers(this, _label_initializers, ""));
|
|
293
|
+
this.#additionalAccessibilityText_accessor_storage = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _additionalAccessibilityText_initializers, ""));
|
|
294
|
+
this.#_view_accessor_storage = (__runInitializers(this, _additionalAccessibilityText_extraInitializers), __runInitializers(this, __view_initializers, null));
|
|
295
|
+
this._language = (__runInitializers(this, __view_extraInitializers), new SbbLanguageController(this));
|
|
296
|
+
this._clipStyleSheet = null;
|
|
297
|
+
this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-train-formation"), { view: (t) => {
|
|
298
|
+
if (this._view) this.internals.states.delete(`view-${this._view}`);
|
|
299
|
+
this._view = t.view;
|
|
300
|
+
if (this._view) this.internals.states.add(`view-${this._view}`);
|
|
301
|
+
} }));
|
|
302
|
+
}
|
|
303
|
+
createRenderRoot() {
|
|
304
|
+
const renderRoot = super.createRenderRoot();
|
|
305
|
+
if (!isServer) {
|
|
306
|
+
this._clipStyleSheet = new CSSStyleSheet();
|
|
307
|
+
renderRoot.adoptedStyleSheets.push(this._clipStyleSheet);
|
|
308
|
+
}
|
|
309
|
+
return renderRoot;
|
|
310
|
+
}
|
|
311
|
+
_sectorChanged() {
|
|
312
|
+
/** @internal */
|
|
313
|
+
this.dispatchEvent(new Event("sectorchange", {
|
|
314
|
+
bubbles: true,
|
|
315
|
+
composed: true
|
|
316
|
+
}));
|
|
317
|
+
}
|
|
318
|
+
_wagonTypeLabel() {
|
|
319
|
+
switch (this.wagonType) {
|
|
320
|
+
case "closed": return i18nClosedCompartmentLabel[this._language.current];
|
|
321
|
+
case "locomotive": return i18nLocomotiveLabel[this._language.current];
|
|
322
|
+
case "couchette": return i18nCouchetteWagonLabel[this._language.current];
|
|
323
|
+
case "sleeping": return i18nSleepingWagonLabel[this._language.current];
|
|
324
|
+
case "restaurant": return i18nRestaurantWagonLabel[this._language.current];
|
|
325
|
+
default: return i18nWagonLabel[this._language.current];
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
_wagonShape() {
|
|
329
|
+
const view = this._view ?? "side";
|
|
330
|
+
if ([
|
|
331
|
+
"wagon",
|
|
332
|
+
"couchette",
|
|
333
|
+
"sleeping",
|
|
334
|
+
"restaurant",
|
|
335
|
+
"closed"
|
|
336
|
+
].includes(this.wagonType)) return shapePaths["wagon"][view];
|
|
337
|
+
return shapePaths[this.wagonType][view] ?? shapePaths["wagon"][view];
|
|
338
|
+
}
|
|
339
|
+
_classLabel() {
|
|
340
|
+
switch (this.wagonClass) {
|
|
341
|
+
case "1": return i18nClass["first"][this._language.current];
|
|
342
|
+
case "2": return i18nClass["second"][this._language.current];
|
|
343
|
+
case "1-2": return `${i18nClass["first"][this._language.current]} ${i18nAnd[this._language.current]} ${i18nClass["second"][this._language.current]}`;
|
|
344
|
+
case "2-1": return `${i18nClass["second"][this._language.current]} ${i18nAnd[this._language.current]} ${i18nClass["first"][this._language.current]}`;
|
|
345
|
+
default: return "";
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
renderTemplate() {
|
|
349
|
+
const blockedPassage = this.wagonType === "wagon-end-left" && this.blockedPassage === "none" ? "previous" : this.wagonType === "wagon-end-right" && this.blockedPassage === "none" ? "next" : this.blockedPassage ?? "none";
|
|
350
|
+
const hasBlockedPassageEntry = blockedPassage !== "none";
|
|
351
|
+
const listEntriesCount = +!!this.sector + +!!this.label + +(!!this.wagonClass && this.wagonType !== "closed") + +(!!this.occupancy && this.wagonType !== "closed") + +hasBlockedPassageEntry;
|
|
352
|
+
const sectorString = `${i18nSector[this._language.current]}, ${this.sector}`;
|
|
353
|
+
const labelString = `${i18nWagonLabelNumber[this._language.current]}, ${this.label}`;
|
|
354
|
+
const wagonClassContent = html$1`<span class="sbb-screen-reader-only">
|
|
355
|
+
${this._classLabel()}
|
|
356
|
+
</span>
|
|
357
|
+
${this.wagonClass?.split("-").map((wagonClass) => html$1`<span
|
|
358
|
+
aria-hidden="true"
|
|
359
|
+
class="sbb-train-wagon__class-entry ${wagonClass === "1" ? "first" : ""}"
|
|
360
|
+
>
|
|
361
|
+
${wagonClass}
|
|
362
|
+
</span>`)} `;
|
|
363
|
+
const path = this._wagonShape();
|
|
364
|
+
const availableIconRows = this.label ? 3 : 4;
|
|
365
|
+
this._clipStyleSheet?.replaceSync(`:host {
|
|
366
|
+
--_sbb-train-wagon-clip-shape: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 84 36' fill='black'%3E%3Cpath d='${path}' /%3E%3C/svg%3E");
|
|
367
|
+
--_sbb-train-wagon-clip-shape-compartment: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${this.orientation === "vertical" ? 36 : 84} ${this.orientation === "vertical" ? 84 : 36}' fill='black'%3E%3Cpath d='${path}'${this.orientation === "vertical" ? ` transform='rotate(-90, 0, 0) scale(-1, 1)'` : ""} /%3E%3C/svg%3E");
|
|
368
|
+
--_sbb-train-wagon-attributes-icon-columns: ${Math.ceil(this.listChildren.length / availableIconRows)};
|
|
369
|
+
--_sbb-train-wagon-attributes-icon-rows: ${availableIconRows};
|
|
370
|
+
}`);
|
|
371
|
+
return html$1`
|
|
372
|
+
<div class="sbb-train-wagon">
|
|
373
|
+
${when(listEntriesCount > 1, () => html$1`<ul aria-label=${this._wagonTypeLabel()} class="sbb-train-wagon__compartment">
|
|
374
|
+
${this.sector ? html$1`<li class="sbb-screen-reader-only">${sectorString}</li>` : nothing}
|
|
375
|
+
${this.label ? html$1`<li class="sbb-screen-reader-only">${labelString}</li>` : nothing}
|
|
376
|
+
${this.wagonClass && this.wagonType !== "closed" ? html$1`<li class="sbb-train-wagon__class">${wagonClassContent}</li>` : nothing}
|
|
377
|
+
${this.occupancy && this.wagonType !== "closed" ? html$1`<sbb-timetable-occupancy-icon
|
|
378
|
+
class="sbb-train-wagon__occupancy"
|
|
379
|
+
role="listitem"
|
|
380
|
+
occupancy=${this.occupancy}
|
|
381
|
+
></sbb-timetable-occupancy-icon>` : nothing}
|
|
382
|
+
${hasBlockedPassageEntry ? html$1`<li class="sbb-screen-reader-only">
|
|
383
|
+
${i18nBlockedPassage[blockedPassage][this._language.current]}
|
|
384
|
+
</li>` : nothing}
|
|
385
|
+
</ul>`, () => html$1`<div class="sbb-train-wagon__compartment">
|
|
386
|
+
<span class="sbb-screen-reader-only">
|
|
387
|
+
${`${this._wagonTypeLabel()}${this.sector ? `, ${sectorString}` : ""}`}
|
|
388
|
+
</span>
|
|
389
|
+
${this.label ? html$1`<span class="sbb-screen-reader-only">${labelString}</span>` : nothing}
|
|
390
|
+
${this.wagonClass && this.wagonType !== "closed" ? html$1`<span class="sbb-train-wagon__class">${wagonClassContent}</span>` : nothing}
|
|
391
|
+
${this.occupancy && this.wagonType !== "closed" ? html$1`<sbb-timetable-occupancy-icon
|
|
392
|
+
class="sbb-train-wagon__occupancy"
|
|
393
|
+
occupancy=${this.occupancy}
|
|
394
|
+
></sbb-timetable-occupancy-icon>` : nothing}
|
|
395
|
+
${hasBlockedPassageEntry ? html$1`<span class="sbb-screen-reader-only">
|
|
396
|
+
${i18nBlockedPassage[blockedPassage][this._language.current]}
|
|
397
|
+
</span>` : nothing}
|
|
398
|
+
</div> `)}
|
|
399
|
+
${wagonTypeToIconMap[this.wagonType] ? html$1`<sbb-icon
|
|
400
|
+
name=${wagonTypeToIconMap[this.wagonType]}
|
|
401
|
+
class="sbb-train-wagon__main-icon"
|
|
402
|
+
></sbb-icon>` : nothing}
|
|
403
|
+
<svg class="sbb-train-wagon__shape" viewBox="0 0 84 36" aria-hidden="true">
|
|
404
|
+
<path d=${path}></path>
|
|
405
|
+
<path
|
|
406
|
+
class="sbb-train-wagon__shape-closed"
|
|
407
|
+
d=${this._view === "top" ? "M81 3L3 34" : "M81 4L4 32"}
|
|
408
|
+
></path>
|
|
409
|
+
<path
|
|
410
|
+
class="sbb-train-wagon__shape-closed"
|
|
411
|
+
d=${this._view === "top" ? "M81 34L3 3" : "M81 32L4 4"}
|
|
412
|
+
></path>
|
|
413
|
+
</svg>
|
|
414
|
+
${this.additionalAccessibilityText ? html$1`<span class="sbb-screen-reader-only"
|
|
415
|
+
>, ${this.additionalAccessibilityText}</span
|
|
416
|
+
>` : nothing}
|
|
417
|
+
<span
|
|
418
|
+
class="sbb-train-wagon__information-wrapper"
|
|
419
|
+
?hidden=${!this.listChildren.length && !this.label}
|
|
420
|
+
>
|
|
421
|
+
${this.label ? html$1`<span aria-hidden="true" class="sbb-train-wagon__label">${this.label}</span>` : nothing}
|
|
422
|
+
${this.label && this.listChildren.length ? html$1`<sbb-divider
|
|
423
|
+
orientation=${this.orientation === "vertical" ? "horizontal" : "vertical"}
|
|
424
|
+
aria-hidden="true"
|
|
425
|
+
class="sbb-train-wagon__label-divider"
|
|
426
|
+
></sbb-divider>` : nothing}
|
|
427
|
+
${this.renderList({
|
|
428
|
+
class: "sbb-train-wagon__attribute-icon-list",
|
|
429
|
+
ariaLabel: i18nAdditionalWagonInformationHeading[this._language.current]
|
|
430
|
+
})}
|
|
431
|
+
</span>
|
|
432
|
+
</div>
|
|
433
|
+
`;
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
})();
|
|
437
|
+
};
|
|
438
|
+
//#endregion
|
|
439
|
+
export { SbbTrainWagonMixin as t };
|
|
440
|
+
|
|
441
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW4td2Fnb24tY29tbW9uLVMzT0pkZ3VHLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90cmFpbi90cmFpbi13YWdvbi1jb21tb24uc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvdHJhaW4vdHJhaW4td2Fnb24tY29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1zYmItdHJhaW4td2Fnb24tdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKFxuICAgIC0tc2JiLWRpc2FibGUtYW5pbWF0aW9uLWR1cmF0aW9uLFxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMngpXG4gICk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWZvbnQtc2l6ZSk7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcblxuICAvLyBVc2UgIWltcG9ydGFudCBoZXJlIHRvIG5vdCBpbnRlcmZlcmUgd2l0aCBGaXJlZm94IGZvY3VzIHJpbmcgZGVmaW5pdGlvblxuICAvLyB3aGljaCBhcHBlYXJzIGluIG5vcm1hbGl6ZSBDU1Mgb2Ygc2V2ZXJhbCBmcmFtZXdvcmtzLlxuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG59XG5cbjpob3N0KFt3YWdvbi10eXBlPSdjbG9zZWQnXSkge1xuICAtLXNiYi10cmFpbi13YWdvbi1jcm9zc2VkLXNoYXBlLWRpc3BsYXk6IGJsb2NrO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi10cmFpbi13YWdvbi1zaGFwZS1jb2xvcjogR3JheVRleHQ7XG4gIH1cbn1cblxuOmhvc3QoOnN0YXRlKHZpZXctc2lkZSlbd2Fnb24tdHlwZT0nd2Fnb24tZW5kLWxlZnQnXSkge1xuICAtLXNiYi10cmFpbi13YWdvbi1wYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNHgpIHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbn1cblxuOmhvc3QoOnN0YXRlKHZpZXctc2lkZSlbd2Fnb24tdHlwZT0nd2Fnb24tZW5kLXJpZ2h0J10pIHtcbiAgLS1zYmItdHJhaW4td2Fnb24tcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KSB2YXIoLS1zYmItc3BhY2luZy1maXhlZC00eCk7XG59XG5cbjpob3N0KDpzdGF0ZSh2aWV3LXNpZGUpW3dhZ29uLXR5cGU9J2xvY29tb3RpdmUnXSkge1xuICAtLXNiYi10cmFpbi13YWdvbi1wYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNHgpO1xufVxuXG46aG9zdCg6c3RhdGUodmlldy10b3ApKSB7XG4gIC0tc2JiLXRyYWluLXdhZ29uLWJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1ib3JkZXItcmFkaXVzLTR4KTtcbn1cblxuOmhvc3QoW2xhYmVsXSkge1xuICAtLV9zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1tYXgtd2lkdGg6IHZhcigtLXNiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLW1heC13aWR0aCk7XG59XG5cbjpob3N0KDpub3QoW2xhYmVsXSkpIHtcbiAgLS1fc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZXMtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbjpob3N0KC5zYmItYWN0aXZlKSB7XG4gIC0tc2JiLXRyYWluLXdhZ29uLWJvcmRlci13aWR0aDogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0zeCk7XG59XG5cbjpob3N0KDpzdGF0ZShhY3Rpb24pKSB7XG4gIGN1cnNvcjogdmFyKC0tc2JiLWN1cnNvci1wb2ludGVyKTtcbn1cblxuOmhvc3QoOnN0YXRlKGxpbmspKSB7XG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi10cmFpbi13YWdvbi1zaGFwZS1jb2xvcjogTGlua1RleHQ7XG4gIH1cbn1cblxuLnNiYi10cmFpbi13YWdvbi1saW5rIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnNiYi10cmFpbi13YWdvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1mbGV4LWRpcmVjdGlvbi1pbnZlcnRlZCk7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi13aWR0aCk7XG4gIGdhcDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLXZlcnRpY2FsLWdhcCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLWhlaWdodCk7XG4gIH1cblxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tYm9yZGVyLXJhZGl1cyk7XG5cbiAgICA6aG9zdCg6c3RhdGUoYnV0dG9uKTpmb2N1cy12aXNpYmxlKSAmLFxuICAgIC5zYmItdHJhaW4td2Fnb24tbGluazpmb2N1cy12aXNpYmxlICYge1xuICAgICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG4gICAgfVxuICB9XG59XG5cbi5zYmItdHJhaW4td2Fnb25fX2NvbXBhcnRtZW50IHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLWZsZXgtZGlyZWN0aW9uKTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tcGFkZGluZy1pbmxpbmUpO1xuICBtYXNrLWltYWdlOiB2YXIoLS1fc2JiLXRyYWluLXdhZ29uLWNsaXAtc2hhcGUtY29tcGFydG1lbnQpO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIHZhcigtLXNiYi10cmFpbi13YWdvbi10cmFuc2l0aW9uLWR1cmF0aW9uKVxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKTtcblxuICA6aG9zdCg6c3RhdGUoYWN0aW9uKTpob3ZlcikgJiB7XG4gICAgQGluY2x1ZGUgc2JiLmhvdmVyLW1xKCRob3ZlcjogdHJ1ZSkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWJhY2tncm91bmQtY29sb3ItaG92ZXIpO1xuICAgIH1cbiAgfVxuXG4gIDpob3N0KDpzdGF0ZShhY3Rpb24pOmlzKDphY3RpdmUsIDpzdGF0ZShhY3RpdmUpKSkgJiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWJhY2tncm91bmQtY29sb3ItYWN0aXZlKTtcbiAgfVxuXG4gICY6aGFzKC5zYmItdHJhaW4td2Fnb25fX29jY3VwYW5jeSk6aGFzKC5zYmItdHJhaW4td2Fnb25fX2NsYXNzKSB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgOmhvc3QoOnN0YXRlKG9yaWVudGF0aW9uLXZlcnRpY2FsKSkgJiB7XG4gICAgcGFkZGluZy1pbmxpbmU6IDA7XG4gICAgcGFkZGluZy1ibG9jazogdmFyKC0tc2JiLXRyYWluLXdhZ29uLXBhZGRpbmctaW5saW5lKTtcbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19jb21wYXJ0bWVudCxcbi5zYmItdHJhaW4td2Fnb25fX21haW4taWNvbiB7XG4gIHdpZHRoOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi13aWR0aCk7XG4gIGhlaWdodDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0KTtcbn1cblxuLnNiYi10cmFpbi13YWdvbl9fc2hhcGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICB3aWR0aDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1kaW1lbnNpb24tbG9uZyk7XG4gIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1kaW1lbnNpb24tc2hvcnQpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG5cbiAgLy8gTmVlZCBpbiBvcmRlciB0byBjb3JyZWN0bHkgcmVuZGVyIGluIFNhZmFyaVxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuXG4gIDpob3N0KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpICYge1xuICAgIHJvdGF0ZTogLTkwZGVnO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICB9XG59XG5cbi5zYmItdHJhaW4td2Fnb25fX3NoYXBlIHtcbiAgLy8gV2UgaGF2ZSB0byBjbGlwIHRoZSBzaGFwZSwgYmVjYXVzZSB0aGUgcGF0aCBjYW4gYmUgbGFyZ2VyIHRoYW4gdGhlIHdhZ29uIHNoYXBlIGFuZCB3b3VsZCBvdmVyZmxvdyBvdGhlcndpc2UuXG4gIG1hc2staW1hZ2U6IHZhcigtLV9zYmItdHJhaW4td2Fnb24tY2xpcC1zaGFwZSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBmaWxsOiBub25lO1xuICBzdHJva2U6IHZhcigtLXNiYi10cmFpbi13YWdvbi1zaGFwZS1jb2xvcik7XG5cbiAgLy8gV2UgaGF2ZSB0byBtdWx0aXBseSBieSBmYWN0b3IgMiBiZWNhdXNlIHRoZSBib3JkZXIgZ3Jvd3MgZnJvbSB0aGUgYm91bmRpbmcgYm94IGxpbmVzXG4gIHN0cm9rZS13aWR0aDogY2FsYyh2YXIoLS1zYmItdHJhaW4td2Fnb24tYm9yZGVyLXdpZHRoKSAqIDIpO1xufVxuXG4uc2JiLXRyYWluLXdhZ29uX19tYWluLWljb24ge1xuICAtLXNiYi1pY29uLXN2Zy1oZWlnaHQ6IHZhcigtLXNiYi10cmFpbi13YWdvbi1tYWluLWljb24taGVpZ2h0KTtcblxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNiYi10cmFpbi13YWdvbl9fc2hhcGUtY2xvc2VkIHtcbiAgZGlzcGxheTogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNyb3NzZWQtc2hhcGUtZGlzcGxheSwgbm9uZSk7XG4gIHN0cm9rZS13aWR0aDogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCk7XG59XG5cbi5zYmItdHJhaW4td2Fnb25fX29jY3VwYW5jeSxcbi5zYmItdHJhaW4td2Fnb25fX2NsYXNzIHtcbiAgaGVpZ2h0OiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1oZWlnaHQpO1xuICBmbGV4LWRpcmVjdGlvbjogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24tZmxleC1kaXJlY3Rpb24pO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgd2lkdGg6IHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLXdpZHRoKTtcbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19vY2N1cGFuY3kge1xuICAtLXNiYi1pY29uLXN2Zy1oZWlnaHQ6IHZhcigtLXNiYi10cmFpbi13YWdvbi1vY2N1cGFuY3ktaGVpZ2h0KTtcblxuICBncmlkLWFyZWE6IG9jY3VwYW5jeTtcbn1cblxuLnNiYi10cmFpbi13YWdvbl9fY2xhc3Mge1xuICBnYXA6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxKX07XG4gIG9yZGVyOiAxO1xufVxuXG4uc2JiLXRyYWluLXdhZ29uX19jbGFzcy1lbnRyeSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWRpbWVuc2lvbik7XG4gIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWRpbWVuc2lvbik7XG4gIGJvcmRlcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci1yYWRpdXMpO1xuICBmb250LXdlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZvbnQtd2VpZ2h0KTtcbiAgY29sb3I6IHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1jb2xvcik7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAvLyBOZWVkZWQgdG8gZml4IFNhZmFyaSB2ZXJ0aWNhbCBjZW50ZXJpbmdcbiAgbGluZS1oZWlnaHQ6IDE7XG5cbiAgJi5maXJzdCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LWNvbG9yKTtcbiAgICAgIGJvcmRlci1lbmQtZW5kLXJhZGl1czogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LWJvcmRlci1yYWRpdXMpO1xuXG4gICAgICA6aG9zdCg6bm90KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpKSAmIHtcbiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zYmItdHJhaW4td2Fnb24tY2xhc3MtZmlyc3QtdGhpY2tuZXNzKTtcbiAgICAgICAgd2lkdGg6IHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1kaW1lbnNpb24pO1xuICAgICAgICBpbnNldDogY2FsYyhcbiAgICAgICAgICAgIC0wLjUgKlxuICAgICAgICAgICAgICAodmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0KSAtIHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1kaW1lbnNpb24pKSArXG4gICAgICAgICAgICAgIHZhcigtLXNiYi10cmFpbi13YWdvbi1ib3JkZXItd2lkdGgpIC0gdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci13aWR0aClcbiAgICAgICAgICApXG4gICAgICAgICAgMCBhdXRvIGNhbGMoLTEgKiB2YXIoLS1zYmItdHJhaW4td2Fnb24tY2xhc3MtYm9yZGVyLXdpZHRoKSk7XG4gICAgICAgIGJvcmRlci1lbmQtc3RhcnQtcmFkaXVzOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tY2xhc3MtZmlyc3QtYm9yZGVyLXJhZGl1cyk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpICYge1xuICAgICAgICB3aWR0aDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LXRoaWNrbmVzcyk7XG4gICAgICAgIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWRpbWVuc2lvbik7XG4gICAgICAgIGluc2V0OiBjYWxjKC0xICogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci13aWR0aCkpIGF1dG8gMFxuICAgICAgICAgIGNhbGMoXG4gICAgICAgICAgICAtMC41ICpcbiAgICAgICAgICAgICAgKHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLXdpZHRoKSAtIHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1kaW1lbnNpb24pKSArXG4gICAgICAgICAgICAgIHZhcigtLXNiYi10cmFpbi13YWdvbi1ib3JkZXItd2lkdGgpIC0gdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci13aWR0aClcbiAgICAgICAgICApO1xuICAgICAgICBib3JkZXItc3RhcnQtZW5kLXJhZGl1czogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LWJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19pbmZvcm1hdGlvbi13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24tZmxleC1kaXJlY3Rpb24pO1xuICBnYXA6IHZhcigtLXNiYi10cmFpbi13YWdvbi1pbmZvcm1hdGlvbi1nYXApO1xuXG4gIDpob3N0KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpICYge1xuICAgIG1pbi13aWR0aDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWluZm9ybWF0aW9uLW1pbi13aWR0aCk7XG4gIH1cblxuICAmW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuOmlzKC5zYmItdHJhaW4td2Fnb25fX2xhYmVsLCAuc2JiLXRyYWluLXdhZ29uX19sYWJlbC1kaXZpZGVyKSB7XG4gIG1hcmdpbi1ibG9jay1zdGFydDogY2FsYyhcbiAgICAwLjUgKiAoMWVtICogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCkgLSB2YXIoLS1zYmItdHJhaW4td2Fnb24tZm9udC1zaXplKSlcbiAgKTtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDA7XG4gIH1cbn1cblxuLnNiYi10cmFpbi13YWdvbl9fbGFiZWwge1xuICBsaW5lLWhlaWdodDogMTtcblxuICAvLyBJbiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiwgdGhlIGxhYmVsIGlzIGhvcml6b250YWxseSBjZW50ZXJlZCBpbiBhIGZpeGVkIHdpZHRoIGJveCBvZiAzMnB4IGJ5IGRlc2lnbi5cbiAgLy8gQXMgdGhlIGJveCBjYW4gZ3JvdyB0byB0aGUgc2lkZSBpZiB0aGVyZSBhcmUgbWFueSBhdHRyaWJ1dGUgaWNvbnMsIHdlIGhhdmUgdG8gcmUtYXBwbHkgdGhpcyB3aWR0aCBhcyBtYXgtd2lkdGggaGVyZS5cbiAgOmhvc3QoOnN0YXRlKG9yaWVudGF0aW9uLXZlcnRpY2FsKSkgJiB7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1zYmItdHJhaW4td2Fnb24taW5mb3JtYXRpb24tbWluLXdpZHRoKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbn1cblxuLnNiYi10cmFpbi13YWdvbl9fbGFiZWwtZGl2aWRlciB7XG4gIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWZvbnQtc2l6ZSk7XG5cbiAgOmhvc3QoOnN0YXRlKG9yaWVudGF0aW9uLXZlcnRpY2FsKSkgJiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHdpZHRoOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tZm9udC1zaXplKTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiBjYWxjKFxuICAgICAgMC41ICogKHZhcigtLXNiYi10cmFpbi13YWdvbi1pbmZvcm1hdGlvbi1taW4td2lkdGgpIC0gdmFyKC0tc2JiLXRyYWluLXdhZ29uLWZvbnQtc2l6ZSkpXG4gICAgKTtcbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19hdHRyaWJ1dGUtaWNvbi1saXN0IHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiB2YXIoLS1zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlLWljb24taGVpZ2h0KTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHZhcigtLV9zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1qdXN0aWZ5LWNvbnRlbnQsIHN0YXJ0KTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IHZhcigtLXNiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGUtaWNvbi1nYXApO1xuICBjb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZS1pY29uLWNvbG9yKTtcbiAgcGFkZGluZy1ibG9jay1zdGFydDogY2FsYyhcbiAgICAwLjUgKiAoMWVtICogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCkgLSB2YXIoLS1zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlLWljb24taGVpZ2h0KSlcbiAgKTtcbiAgbWF4LXdpZHRoOiB2YXIoLS1fc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZXMtbWF4LXdpZHRoKTtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICAvLyBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBpY29ucyBzdGF5IGFzIGxvbmcgYXMgcG9zc2libGUgdG8gdGhlIHNpZGUgb2YgdGhlIHNoYXBlIGFuZCBvbmx5IHRoZW4gdXNlIGEgc2Vjb25kIGNvbHVtbi5cbiAgICAvLyBIb3dldmVyLCB0aGUgb3JkZXIgb2YgdGhlIGljb25zIHNob3VsZCBiZSByb3cgd2lzZS4gVG8gbWl0aWdhdGUgdGhpcyBwcm9ibGVtLCB3ZSBwcm9ncmFtbWF0aWNhbGx5IGdldCB0aGUgYW1vdW50IG9mXG4gICAgLy8gc2xvdHRlZCBpY29ucyBhbmQgY2FuIHRoZXJlZm9yZSBjYWxjdWxhdGUsIGhvdyBtYW55IGNvbHVtbnMgYXBwcm94aW1hdGVseSBhcmUgbmVlZGVkLlxuICAgIC8vIFRvIG1vdmUgdGhlIGljb25zIGFnYWluc3QgdGhlIHNoYXBlLCB3ZSBjb250cm9sIHRoZSBtYXgtd2lkdGguXG4gICAgLy8gVGhlIG1heC1oZWlnaHQgaXMgZ2l2ZW4gYnkgdGhlIGZhY3QsIHRoYXQgMyByb3dzIGZpdCBpbnRvIHRoZSBkZXNpZ24uIEZvciB0aGUgY2FsY3VsYXRpb24sXG4gICAgLy8gYWxzbyB0d28gdGltZXMgdGhlIGdhcCBoYXMgdG8gYmUgaW5jbHVkZWQuXG4gICAgbWF4LXdpZHRoOiBjYWxjKFxuICAgICAgdmFyKC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tY29sdW1ucykgKiB2YXIoLS1zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1tZWFuLXdpZHRoKVxuICAgICk7XG4gICAgbWF4LWhlaWdodDogY2FsYyhcbiAgICAgIHZhcigtLV9zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1pY29uLXJvd3MsIDMpICpcbiAgICAgICAgdmFyKC0tc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZS1pY29uLWhlaWdodCkgK1xuICAgICAgICAodmFyKC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tcm93cywgMykgLSAxKSAqXG4gICAgICAgIHZhcigtLXNiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGUtaWNvbi1nYXApXG4gICAgKTtcbiAgICBwYWRkaW5nLWJsb2NrLXN0YXJ0OiAwO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi8vIFVzaW5nIC4uLiBsaSBzZWxlY3RvciwgYmVjYXVzZSB0aGUgbGkgZ2VuZXJhdGlvblxuLy8gaXMgaGFuZGxlZCBpbiB0aGUgY29tcG9uZW50IGJhc2UgY2xhc3MuXG4uc2JiLXRyYWluLXdhZ29uX19hdHRyaWJ1dGUtaWNvbi1saXN0ID4gOmlzKGxpLCBzcGFuKSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuXG4uc2JiLXNjcmVlbi1yZWFkZXItb25seSB7XG4gIEBpbmNsdWRlIHNiYi5zY3JlZW4tcmVhZGVyLW9ubHk7XG59XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBpc1NlcnZlciwgbm90aGluZywgdHlwZSBUZW1wbGF0ZVJlc3VsdCwgdW5zYWZlQ1NTIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdoZW4gfSBmcm9tICdsaXQvZGlyZWN0aXZlcy93aGVuLmpzJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQvc3RhdGljLWh0bWwuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi9jb3JlL21peGlucy9jb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQge1xuICBib3hTaXppbmdTdHlsZXMsXG4gIGZvcmNlVHlwZSxcbiAgaGFuZGxlRGlzdGluY3RDaGFuZ2UsXG4gIGkxOG5BZGRpdGlvbmFsV2Fnb25JbmZvcm1hdGlvbkhlYWRpbmcsXG4gIGkxOG5BbmQsXG4gIGkxOG5CbG9ja2VkUGFzc2FnZSxcbiAgaTE4bkNsYXNzLFxuICBpMThuQ2xvc2VkQ29tcGFydG1lbnRMYWJlbCxcbiAgaTE4bkNvdWNoZXR0ZVdhZ29uTGFiZWwsXG4gIGkxOG5Mb2NvbW90aXZlTGFiZWwsXG4gIGkxOG5SZXN0YXVyYW50V2Fnb25MYWJlbCxcbiAgaTE4blNlY3RvcixcbiAgaTE4blNsZWVwaW5nV2Fnb25MYWJlbCxcbiAgaTE4bldhZ29uTGFiZWwsXG4gIGkxOG5XYWdvbkxhYmVsTnVtYmVyLFxuICBvbWl0RW1wdHlDb252ZXJ0ZXIsXG4gIHR5cGUgU2JiRWxlbWVudCxcbiAgdHlwZSBTYmJFbGVtZW50VHlwZSxcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxuICBTYmJOYW1lZFNsb3RMaXN0TWl4aW4sXG4gIHR5cGUgU2JiT2NjdXBhbmN5LFxuICBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyLFxufSBmcm9tICcuLi9jb3JlLnRzJztcbmltcG9ydCB7IFNiYkRpdmlkZXJFbGVtZW50IH0gZnJvbSAnLi4vZGl2aWRlci5wdXJlLnRzJztcbmltcG9ydCB7IFNiYkljb25FbGVtZW50IH0gZnJvbSAnLi4vaWNvbi5wdXJlLnRzJztcbmltcG9ydCB7IFNiYlRpbWV0YWJsZU9jY3VwYW5jeUljb25FbGVtZW50IH0gZnJvbSAnLi4vdGltZXRhYmxlLW9jY3VwYW5jeS1pY29uLnB1cmUudHMnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYlRyYWluRm9ybWF0aW9uRWxlbWVudCB9IGZyb20gJy4vdHJhaW4tZm9ybWF0aW9uL3RyYWluLWZvcm1hdGlvbi5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiVHJhaW5Gb3JtYXRpb25PcmllbnRhdGlvbk1peGluIH0gZnJvbSAnLi90cmFpbi1mb3JtYXRpb24tb3JpZW50YXRpb24tbWl4aW4udHMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vdHJhaW4td2Fnb24tY29tbW9uLnNjc3M/aW5saW5lJztcblxuY29uc3Qgd2Fnb25UeXBlVG9JY29uTWFwOiBQYXJ0aWFsPFJlY29yZDxTYmJUcmFpbldhZ29uTWl4aW5UeXBlWyd3YWdvblR5cGUnXSwgc3RyaW5nPj4gPSB7XG4gIGNvdWNoZXR0ZTogJ3NhLWNjJyxcbiAgc2xlZXBpbmc6ICdzYS13bCcsXG4gIHJlc3RhdXJhbnQ6ICdzYS13cicsXG59O1xuXG5jb25zdCBzaGFwZVBhdGhzOiBSZWNvcmQ8XG4gIEV4Y2x1ZGU8U2JiVHJhaW5XYWdvbk1peGluVHlwZVsnd2Fnb25UeXBlJ10sICdjb3VjaGV0dGUnIHwgJ3NsZWVwaW5nJyB8ICdyZXN0YXVyYW50JyB8ICdjbG9zZWQnPixcbiAgeyBzaWRlOiBzdHJpbmc7IHRvcDogc3RyaW5nIH1cbj4gPSB7XG4gIHdhZ29uOiB7XG4gICAgc2lkZTogJ00xMiAwSDcyQTEyIDEyIDAgMDE4NCAxMlYyNEExMiAxMiAwIDAxNzIgMzZIMTJBMTIgMTIgMCAwMTAgMjRWMTJBMTIgMTIgMCAwMTEyIDBaJyxcbiAgICB0b3A6ICdNOCAwQTggOCAwIDAwMCA4VjI4YTggOCAwIDAwOCA4SDc2YTggOCAwIDAwOC04VjhBOCA4IDAgMDA3NiAwSDhaJyxcbiAgfSxcbiAgbG9jb21vdGl2ZToge1xuICAgIHNpZGU6ICdNNy43IDguNkMxMC41IDMuNiAxNiAwIDIyIDBINjJjNiAwIDExLjUgMy42IDE0LjMgOC42bDUuMSA5Qzg1LjkgMjUuNiA4MCAzNiA3MSAzNkgxM0M0IDM2LTEuOSAyNS42IDIuNiAxNy42bDUuMS05WicsXG4gICAgdG9wOiAnTTY2IDBIMThDOCAwIDAgOCAwIDE4UzggMzYgMTggMzZINjZjMTAgMCAxOC04IDE4LTE4Uzc2IDAgNjYgMFonLFxuICB9LFxuICAnd2Fnb24tZW5kLWxlZnQnOiB7XG4gICAgc2lkZTogJ003LjcgOC42QTE2IDE2IDAgMDEyMiAwSDcyYzYgMCAxMiA2IDEyIDEyVjI0YzAgNi02IDEyLTEyIDEySDEzQzMuOCAzNi0yIDI2LjEgMi42IDE4LjFaJyxcbiAgICB0b3A6ICdNNzYgMEgxOEM4LjI1IDAgLjUgOC4yNS41IDE4UzggMzYgMTggMzZINzZjNCAwIDgtNCA4LThWOGMwLTQtNC04LTgtOFonLFxuICB9LFxuICAnd2Fnb24tZW5kLXJpZ2h0Jzoge1xuICAgIHNpZGU6ICdNNzYuMyA4LjZBMTYgMTYgMCAwMDYyIDBIMTJDNiAwIDAgNiAwIDEzdjExYzAgNiA2IDEyIDEyIDEyaDU4LjRjOC42IDAgMTUtOS45IDEwLjQtMTcuOXonLFxuICAgIHRvcDogJ002NiAwSDhDNCAwIDAgNCAwIDhWMjhjMCA0IDQgOCA4IDhINjZjOS43NSAwIDE3LjUtOC4yNSAxNy41LTE4Uzc2IDAgNjYgMFonLFxuICB9LFxufTtcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiVHJhaW5XYWdvbk1peGluVHlwZSBleHRlbmRzIFNiYkVsZW1lbnQge1xuICBwdWJsaWMgYWNjZXNzb3Igd2Fnb25UeXBlOlxuICAgIHwgJ3dhZ29uJ1xuICAgIHwgJ3dhZ29uLWVuZC1sZWZ0J1xuICAgIHwgJ3dhZ29uLWVuZC1yaWdodCdcbiAgICB8ICdjb3VjaGV0dGUnXG4gICAgfCAnc2xlZXBpbmcnXG4gICAgfCAncmVzdGF1cmFudCdcbiAgICB8ICdsb2NvbW90aXZlJ1xuICAgIHwgJ2Nsb3NlZCc7XG4gIHB1YmxpYyBhY2Nlc3NvciBvY2N1cGFuY3k6IFNiYk9jY3VwYW5jeSB8IG51bGw7XG4gIHB1YmxpYyBhY2Nlc3NvciBzZWN0b3I6IHN0cmluZztcbiAgcHVibGljIGFjY2Vzc29yIGJsb2NrZWRQYXNzYWdlOiAncHJldmlvdXMnIHwgJ25leHQnIHwgJ2JvdGgnIHwgJ25vbmUnO1xuICBwdWJsaWMgYWNjZXNzb3Igd2Fnb25DbGFzczogJzEnIHwgJzInIHwgJzEtMicgfCAnMi0xJyB8IG51bGw7XG4gIHB1YmxpYyBhY2Nlc3NvciBsYWJlbDogc3RyaW5nO1xuICBwdWJsaWMgYWNjZXNzb3IgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlUZXh0OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiVHJhaW5XYWdvbk1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiVHJhaW5XYWdvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiVHJhaW5XYWdvbk1peGluRWxlbWVudFxuICAgIGV4dGVuZHMgU2JiVHJhaW5Gb3JtYXRpb25PcmllbnRhdGlvbk1peGluKFNiYk5hbWVkU2xvdExpc3RNaXhpbjxTYmJJY29uRWxlbWVudCwgVD4oc3VwZXJDbGFzcykpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlRyYWluV2Fnb25NaXhpblR5cGU+XG4gIHtcbiAgICBwdWJsaWMgc3RhdGljIGVsZW1lbnREZXBlbmRlbmNpZXM6IFNiYkVsZW1lbnRUeXBlW10gPSBbXG4gICAgICBTYmJJY29uRWxlbWVudCxcbiAgICAgIFNiYlRpbWV0YWJsZU9jY3VwYW5jeUljb25FbGVtZW50LFxuICAgICAgU2JiRGl2aWRlckVsZW1lbnQsXG4gICAgXTtcbiAgICBwdWJsaWMgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCB1bnNhZmVDU1Moc3R5bGUpXTtcblxuICAgIC8qKlxuICAgICAqIFdhZ29uIHR5cGUuXG4gICAgICogRm9yIGB3YWdvbi1lbmQtbGVmdGAgYW5kIGB3YWdvbi1lbmQtcmlnaHRgLCBwbGVhc2Ugc2V0IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mIHRoZSBgYmxvY2tlZFBhc3NhZ2VgIHByb3BlcnR5LlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3dhZ29uLXR5cGUnLCByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciB3YWdvblR5cGU6XG4gICAgICB8ICd3YWdvbidcbiAgICAgIHwgJ3dhZ29uLWVuZC1sZWZ0J1xuICAgICAgfCAnd2Fnb24tZW5kLXJpZ2h0J1xuICAgICAgfCAnY291Y2hldHRlJ1xuICAgICAgfCAnc2xlZXBpbmcnXG4gICAgICB8ICdyZXN0YXVyYW50J1xuICAgICAgfCAnbG9jb21vdGl2ZSdcbiAgICAgIHwgJ2Nsb3NlZCcgPSAnd2Fnb24nO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXMgPSBbJ3NiYi1pY29uJ107XG5cbiAgICAvKiogT2NjdXBhbmN5IG9mIGEgd2Fnb24uICovXG4gICAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIG9jY3VwYW5jeTogU2JiT2NjdXBhbmN5IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogU2VjdG9yIGluIHdoaWNoIHRoZSB3YWdvbiBzdG9wcy4gKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAaGFuZGxlRGlzdGluY3RDaGFuZ2UoKGU6IFNiYlRyYWluV2Fnb25NaXhpbkVsZW1lbnQpID0+IGUuX3NlY3RvckNoYW5nZWQoKSlcbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBzZWN0b3I6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEFjY2Vzc2liaWxpdHkgdGV4dCBmb3IgYmxvY2tlZCBwYXNzYWdlcyBvZiB0aGUgd2Fnb24uICovXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYmxvY2tlZC1wYXNzYWdlJyB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBibG9ja2VkUGFzc2FnZTogJ3ByZXZpb3VzJyB8ICduZXh0JyB8ICdib3RoJyB8ICdub25lJyA9ICdub25lJztcblxuICAgIC8qKiBDbGFzcyBsYWJlbCAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3dhZ29uLWNsYXNzJyB9KSBwdWJsaWMgYWNjZXNzb3Igd2Fnb25DbGFzczpcbiAgICAgIHwgJzEnXG4gICAgICB8ICcyJ1xuICAgICAgfCAnMS0yJ1xuICAgICAgfCAnMi0xJ1xuICAgICAgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBXYWdvbiBudW1iZXIgKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBsYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogQWRkaXRpb25hbCBhY2Nlc3NpYmlsaXR5IHRleHQgd2hpY2ggd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kLiAqL1xuICAgIEBmb3JjZVR5cGUoKVxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FkZGl0aW9uYWwtYWNjZXNzaWJpbGl0eS10ZXh0JyB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eVRleHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfdmlldzogU2JiVHJhaW5Gb3JtYXRpb25FbGVtZW50Wyd2aWV3J10gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgICBwcml2YXRlIF9jbGlwU3R5bGVTaGVldDogQ1NTU3R5bGVTaGVldCB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIHRoaXMuYWRkQ29udHJvbGxlcihcbiAgICAgICAgbmV3IFNiYlByb3BlcnR5V2F0Y2hlckNvbnRyb2xsZXIodGhpcywgKCkgPT4gdGhpcy5jbG9zZXN0KCdzYmItdHJhaW4tZm9ybWF0aW9uJyksIHtcbiAgICAgICAgICB2aWV3OiAodCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZXcpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgdmlldy0ke3RoaXMuX3ZpZXd9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl92aWV3ID0gdC52aWV3O1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZXcpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZChgdmlldy0ke3RoaXMuX3ZpZXd9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVSZW5kZXJSb290KCk6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgICBjb25zdCByZW5kZXJSb290ID0gc3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO1xuXG4gICAgICBpZiAoIWlzU2VydmVyKSB7XG4gICAgICAgIHRoaXMuX2NsaXBTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcbiAgICAgICAgKHJlbmRlclJvb3QgYXMgU2hhZG93Um9vdCkuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2godGhpcy5fY2xpcFN0eWxlU2hlZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVuZGVyUm9vdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWN0b3JDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc2VjdG9yY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd2Fnb25UeXBlTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgIHN3aXRjaCAodGhpcy53YWdvblR5cGUpIHtcbiAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICByZXR1cm4gaTE4bkNsb3NlZENvbXBhcnRtZW50TGFiZWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICAgIGNhc2UgJ2xvY29tb3RpdmUnOlxuICAgICAgICAgIHJldHVybiBpMThuTG9jb21vdGl2ZUxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBjYXNlICdjb3VjaGV0dGUnOlxuICAgICAgICAgIHJldHVybiBpMThuQ291Y2hldHRlV2Fnb25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XTtcbiAgICAgICAgY2FzZSAnc2xlZXBpbmcnOlxuICAgICAgICAgIHJldHVybiBpMThuU2xlZXBpbmdXYWdvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBjYXNlICdyZXN0YXVyYW50JzpcbiAgICAgICAgICByZXR1cm4gaTE4blJlc3RhdXJhbnRXYWdvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBpMThuV2Fnb25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF93YWdvblNoYXBlKCk6IHN0cmluZyB7XG4gICAgICBjb25zdCB2aWV3ID0gdGhpcy5fdmlldyA/PyAnc2lkZSc7XG4gICAgICBpZiAoWyd3YWdvbicsICdjb3VjaGV0dGUnLCAnc2xlZXBpbmcnLCAncmVzdGF1cmFudCcsICdjbG9zZWQnXS5pbmNsdWRlcyh0aGlzLndhZ29uVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHNoYXBlUGF0aHNbJ3dhZ29uJ11bdmlld107XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzaGFwZVBhdGhzW3RoaXMud2Fnb25UeXBlIGFzIGtleW9mIHR5cGVvZiBzaGFwZVBhdGhzXVt2aWV3XSA/PyBzaGFwZVBhdGhzWyd3YWdvbiddW3ZpZXddXG4gICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsYXNzTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgIHN3aXRjaCAodGhpcy53YWdvbkNsYXNzKSB7XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgIHJldHVybiBpMThuQ2xhc3NbJ2ZpcnN0J11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICAgIGNhc2UgJzInOlxuICAgICAgICAgIHJldHVybiBpMThuQ2xhc3NbJ3NlY29uZCddW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBjYXNlICcxLTInOlxuICAgICAgICAgIHJldHVybiBgJHtpMThuQ2xhc3NbJ2ZpcnN0J11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7aTE4bkFuZFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtpMThuQ2xhc3NbJ3NlY29uZCddW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfWA7XG4gICAgICAgIGNhc2UgJzItMSc6XG4gICAgICAgICAgcmV0dXJuIGAke2kxOG5DbGFzc1snc2Vjb25kJ11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7aTE4bkFuZFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtpMThuQ2xhc3NbJ2ZpcnN0J11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIGNvbnN0IGJsb2NrZWRQYXNzYWdlID1cbiAgICAgICAgdGhpcy53YWdvblR5cGUgPT09ICd3YWdvbi1lbmQtbGVmdCcgJiYgdGhpcy5ibG9ja2VkUGFzc2FnZSA9PT0gJ25vbmUnXG4gICAgICAgICAgPyAncHJldmlvdXMnXG4gICAgICAgICAgOiB0aGlzLndhZ29uVHlwZSA9PT0gJ3dhZ29uLWVuZC1yaWdodCcgJiYgdGhpcy5ibG9ja2VkUGFzc2FnZSA9PT0gJ25vbmUnXG4gICAgICAgICAgICA/ICduZXh0J1xuICAgICAgICAgICAgOiAodGhpcy5ibG9ja2VkUGFzc2FnZSA/PyAnbm9uZScpO1xuXG4gICAgICBjb25zdCBoYXNCbG9ja2VkUGFzc2FnZUVudHJ5ID0gYmxvY2tlZFBhc3NhZ2UgIT09ICdub25lJztcblxuICAgICAgLy8gRnJvbSBhY2Nlc3NpYmlsaXR5IHBlcnNwZWN0aXZlIHdlIGNhbm5vdCBjcmVhdGUgYSBsaXN0IHdpdGggb25seSBvbmUgZW50cnkuXG4gICAgICAvLyBXZSBuZWVkIHRvIGtub3cgd2hhdCB3aWxsIGJlIHByZXNlbnRlZCBhbmQgc3dpdGNoIHNlbWFudGljcyBiYXNlZCBvbiBjb3VudC5cbiAgICAgIGNvbnN0IGxpc3RFbnRyaWVzQ291bnQgPVxuICAgICAgICArISF0aGlzLnNlY3RvciArXG4gICAgICAgICshIXRoaXMubGFiZWwgK1xuICAgICAgICArKCEhdGhpcy53YWdvbkNsYXNzICYmIHRoaXMud2Fnb25UeXBlICE9PSAnY2xvc2VkJykgK1xuICAgICAgICArKCEhdGhpcy5vY2N1cGFuY3kgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnKSArXG4gICAgICAgICtoYXNCbG9ja2VkUGFzc2FnZUVudHJ5O1xuXG4gICAgICBjb25zdCBzZWN0b3JTdHJpbmcgPSBgJHtpMThuU2VjdG9yW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSwgJHt0aGlzLnNlY3Rvcn1gO1xuICAgICAgY29uc3QgbGFiZWxTdHJpbmcgPSBgJHtpMThuV2Fnb25MYWJlbE51bWJlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sICR7dGhpcy5sYWJlbH1gO1xuXG4gICAgICBjb25zdCB3YWdvbkNsYXNzQ29udGVudCA9IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgJHt0aGlzLl9jbGFzc0xhYmVsKCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgJHt0aGlzLndhZ29uQ2xhc3NcbiAgICAgICAgICA/LnNwbGl0KCctJylcbiAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgKHdhZ29uQ2xhc3MpID0+XG4gICAgICAgICAgICAgIGh0bWxgPHNwYW5cbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19jbGFzcy1lbnRyeSAke3dhZ29uQ2xhc3MgPT09ICcxJyA/ICdmaXJzdCcgOiAnJ31cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJHt3YWdvbkNsYXNzfVxuICAgICAgICAgICAgICA8L3NwYW4+YCxcbiAgICAgICAgICApfSBgO1xuXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5fd2Fnb25TaGFwZSgpO1xuXG4gICAgICBjb25zdCBhdmFpbGFibGVJY29uUm93cyA9IHRoaXMubGFiZWwgPyAzIDogNDtcbiAgICAgIHRoaXMuX2NsaXBTdHlsZVNoZWV0Py5yZXBsYWNlU3luYyhgOmhvc3Qge1xuICAgICAgICAgICAgLS1fc2JiLXRyYWluLXdhZ29uLWNsaXAtc2hhcGU6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgODQgMzYnIGZpbGw9J2JsYWNrJyUzRSUzQ3BhdGggZD0nJHtwYXRofScgLyUzRSUzQy9zdmclM0VcIik7XG4gICAgICAgICAgICAtLV9zYmItdHJhaW4td2Fnb24tY2xpcC1zaGFwZS1jb21wYXJ0bWVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAke3RoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyAzNiA6IDg0fSAke3RoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyA4NCA6IDM2fScgZmlsbD0nYmxhY2snJTNFJTNDcGF0aCBkPScke3BhdGh9JyR7dGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IGAgdHJhbnNmb3JtPSdyb3RhdGUoLTkwLCAwLCAwKSBzY2FsZSgtMSwgMSknYCA6ICcnfSAvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgICAgICAgICAgIC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tY29sdW1uczogJHtNYXRoLmNlaWwodGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoIC8gYXZhaWxhYmxlSWNvblJvd3MpfTtcbiAgICAgICAgICAgIC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tcm93czogJHthdmFpbGFibGVJY29uUm93c307XG4gICAgICAgICAgfWApO1xuXG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10cmFpbi13YWdvblwiPlxuICAgICAgICAgICR7d2hlbihcbiAgICAgICAgICAgIGxpc3RFbnRyaWVzQ291bnQgPiAxLFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgaHRtbGA8dWwgYXJpYS1sYWJlbD0ke3RoaXMuX3dhZ29uVHlwZUxhYmVsKCl9IGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19jb21wYXJ0bWVudFwiPlxuICAgICAgICAgICAgICAgICR7dGhpcy5zZWN0b3JcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8bGkgY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHtzZWN0b3JTdHJpbmd9PC9saT5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLmxhYmVsXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPGxpIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bGFiZWxTdHJpbmd9PC9saT5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLndhZ29uQ2xhc3MgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPGxpIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19jbGFzc1wiPiR7d2Fnb25DbGFzc0NvbnRlbnR9PC9saT5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLm9jY3VwYW5jeSAmJiB0aGlzLndhZ29uVHlwZSAhPT0gJ2Nsb3NlZCdcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8c2JiLXRpbWV0YWJsZS1vY2N1cGFuY3ktaWNvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19vY2N1cGFuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgb2NjdXBhbmN5PSR7dGhpcy5vY2N1cGFuY3l9XG4gICAgICAgICAgICAgICAgICAgID48L3NiYi10aW1ldGFibGUtb2NjdXBhbmN5LWljb24+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAgICR7aGFzQmxvY2tlZFBhc3NhZ2VFbnRyeVxuICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaSBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2kxOG5CbG9ja2VkUGFzc2FnZVtibG9ja2VkUGFzc2FnZV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICA8L3VsPmAsXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICBodG1sYDxkaXYgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX2NvbXBhcnRtZW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAke2Ake3RoaXMuX3dhZ29uVHlwZUxhYmVsKCl9JHt0aGlzLnNlY3RvciA/IGAsICR7c2VjdG9yU3RyaW5nfWAgOiAnJ31gfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAke3RoaXMubGFiZWxcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke2xhYmVsU3RyaW5nfTwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLndhZ29uQ2xhc3MgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX2NsYXNzXCI+JHt3YWdvbkNsYXNzQ29udGVudH08L3NwYW4+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAgICR7dGhpcy5vY2N1cGFuY3kgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPHNiYi10aW1ldGFibGUtb2NjdXBhbmN5LWljb25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmFpbi13YWdvbl9fb2NjdXBhbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgICBvY2N1cGFuY3k9JHt0aGlzLm9jY3VwYW5jeX1cbiAgICAgICAgICAgICAgICAgICAgPjwvc2JiLXRpbWV0YWJsZS1vY2N1cGFuY3ktaWNvbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHtoYXNCbG9ja2VkUGFzc2FnZUVudHJ5XG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHtpMThuQmxvY2tlZFBhc3NhZ2VbYmxvY2tlZFBhc3NhZ2VdW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICA8L2Rpdj4gYCxcbiAgICAgICAgICApfVxuICAgICAgICAgICR7d2Fnb25UeXBlVG9JY29uTWFwW3RoaXMud2Fnb25UeXBlXVxuICAgICAgICAgICAgPyBodG1sYDxzYmItaWNvblxuICAgICAgICAgICAgICAgIG5hbWU9JHt3YWdvblR5cGVUb0ljb25NYXBbdGhpcy53YWdvblR5cGVdIX1cbiAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmFpbi13YWdvbl9fbWFpbi1pY29uXCJcbiAgICAgICAgICAgICAgPjwvc2JiLWljb24+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX3NoYXBlXCIgdmlld0JveD1cIjAgMCA4NCAzNlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHBhdGggZD0ke3BhdGh9PjwvcGF0aD5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19zaGFwZS1jbG9zZWRcIlxuICAgICAgICAgICAgICBkPSR7dGhpcy5fdmlldyA9PT0gJ3RvcCcgPyAnTTgxIDNMMyAzNCcgOiAnTTgxIDRMNCAzMid9XG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX3NoYXBlLWNsb3NlZFwiXG4gICAgICAgICAgICAgIGQ9JHt0aGlzLl92aWV3ID09PSAndG9wJyA/ICdNODEgMzRMMyAzJyA6ICdNODEgMzJMNCA0J31cbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgJHt0aGlzLmFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5VGV4dFxuICAgICAgICAgICAgPyBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgPiwgJHt0aGlzLmFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5VGV4dH08L3NwYW5cbiAgICAgICAgICAgICAgPmBcbiAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX2luZm9ybWF0aW9uLXdyYXBwZXJcIlxuICAgICAgICAgICAgP2hpZGRlbj0keyF0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMubGFiZWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHt0aGlzLmxhYmVsXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInNiYi10cmFpbi13YWdvbl9fbGFiZWxcIj4ke3RoaXMubGFiZWx9PC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHt0aGlzLmxhYmVsICYmIHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICA/IGh0bWxgPHNiYi1kaXZpZGVyXG4gICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbj0ke3RoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnfVxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19sYWJlbC1kaXZpZGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zYmItZGl2aWRlcj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7dGhpcy5yZW5kZXJMaXN0KHtcbiAgICAgICAgICAgICAgY2xhc3M6ICdzYmItdHJhaW4td2Fnb25fX2F0dHJpYnV0ZS1pY29uLWxpc3QnLFxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IGkxOG5BZGRpdGlvbmFsV2Fnb25JbmZvcm1hdGlvbkhlYWRpbmdbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiVHJhaW5XYWdvbk1peGluRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiVHJhaW5XYWdvbk1peGluVHlwZT4gJiBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUNzQ0EsSUFBTSxxQkFBbUY7Q0FDdkYsV0FBVztDQUNYLFVBQVU7Q0FD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
|