@sbb-esta/lyne-elements-experimental-dev 5.0.0-next.3-dev.1779265358 → 5.0.0-next.3-dev.1779268564

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/core/styles/{theme.scss → _theme.scss} +1 -1
  2. package/core/styles/{core.scss → features/core.scss} +1 -1
  3. package/development/autocomplete-grid-option.component-D9pTXPlu.js +1 -1
  4. package/development/autocomplete-grid-row.component-CBHh50jC.js +1 -1
  5. package/development/journey-summary.component-De1ioDRq.js +1 -1
  6. package/development/pearl-chain-time.component-BxVQ1z-Z.js +1 -1
  7. package/development/pearl-chain-vertical-item.component-DJioJtxP.js +1 -1
  8. package/development/pearl-chain.component-EEAZ7Kol.js +1 -1
  9. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
  10. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  11. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -1
  12. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  13. package/development/seat-reservation-graphic.component-C2r57590.js +1 -1
  14. package/development/seat-reservation-navigation-coach.component-CMm-2Vuc.js +438 -0
  15. package/development/seat-reservation-place-control.component-Dfxv9B6C.js +1 -1
  16. package/development/seat-reservation.component-CR5QYNWZ.js +473 -0
  17. package/development/seat-reservation.js +2 -2
  18. package/development/seat-reservation.pure.js +2 -2
  19. package/development/timetable-duration.component-fBla8Kue.js +1 -1
  20. package/development/timetable-row/timetable-row.component.d.ts.map +1 -1
  21. package/development/timetable-row/timetable-row.component.js +1 -1
  22. package/development/timetable-row.component-CTShHdLn.js +736 -0
  23. package/development/timetable-row.js +1 -1
  24. package/development/timetable-row.pure.js +1 -1
  25. package/package.json +2 -6
  26. package/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  27. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  28. package/seat-reservation-navigation-coach.component-Cwxd9vLy.js +338 -0
  29. package/{seat-reservation.component-VhMc8Rqt.js → seat-reservation.component-TLuTP9Nm.js} +77 -76
  30. package/seat-reservation.js +2 -2
  31. package/seat-reservation.pure.js +2 -2
  32. package/timetable-row/timetable-row.component.js +1 -1
  33. package/{timetable-row.component-Din-TQ9u.js → timetable-row.component-DawXp2ut.js} +112 -108
  34. package/timetable-row.js +1 -1
  35. package/timetable-row.pure.js +1 -1
  36. package/core.css +0 -13
  37. package/development/seat-reservation-navigation-coach.component-9ySnZIKH.js +0 -434
  38. package/development/seat-reservation.component-BGvVv6rJ.js +0 -472
  39. package/development/timetable-row.component-DSTGtQAC.js +0 -732
  40. package/seat-reservation-navigation-coach.component-BkqPWUtu.js +0 -334
@@ -1,434 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { SbbElement, SbbLanguageController, forceType, screenReaderOnlyStyles } from "@sbb-esta/lyne-elements/core.js";
3
- import { html, nothing, unsafeCSS } from "lit";
4
- import { property } from "lit/decorators.js";
5
- import { classMap } from "lit/directives/class-map.js";
6
- import { getI18nSeatReservation } from "./seat-reservation/common/translations.js";
7
- import { SbbSeatReservationNavigationServicesElement } from "./seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js";
8
- //#region src/elements-experimental/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.scss?inline
9
- var seat_reservation_navigation_coach_default = ":host {\n display: inline-block;\n min-height: calc(44 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n --sbb-seat-reservation-navigation-travelclass-spacing: 10;\n --sbb-seat-reservation-navigation-btn-border-width-default: 1;\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-default\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(--sbb-color-granite);\n --sbb-seat-reservation-navigation-btn-border-color: light-dark(\n var(--sbb-color-granite),\n var(--sbb-color-graphite)\n );\n --sbb-seat-reservation-navigation-btn-background-color: var(--sbb-color-white);\n --sbb-seat-reservation-navigation-btn-background-color: light-dark(\n var(--sbb-color-white),\n var(--sbb-color-black)\n );\n --sbb-seat-reservation-navigation-btn-border-width-selected: 2;\n --sbb-seat-reservation-navigation-btn-background-color-selected: var(--sbb-color-milk);\n --sbb-seat-reservation-navigation-btn-background-color-selected: light-dark(\n var(--sbb-color-milk),\n var(--sbb-color-iron)\n );\n --sbb-seat-reservation-navigation-btn-border-color-selected: var(--sbb-color-black);\n --sbb-seat-reservation-navigation-btn-border-color-selected: light-dark(\n var(--sbb-color-black),\n var(--sbb-color-white)\n );\n --sbb-seat-reservation-navigation-btn-outline-width-focused: 1;\n --sbb-seat-reservation-navigation-btn-outline-color-focused: var(--sbb-color-black);\n --sbb-seat-reservation-navigation-btn-outline-color-focused: light-dark(\n var(--sbb-color-black),\n var(--sbb-color-white)\n );\n --sbb-seat-reservation-navigation-btn-outline-offset-focused: 4;\n --sbb-seat-reservation-navigation-btn-background-color-focused: var(--sbb-color-white);\n --sbb-seat-reservation-navigation-btn-background-color-focused: light-dark(\n var(--sbb-color-white),\n var(--sbb-color-black)\n );\n --sbb-seat-reservation-navigation-btn-border-width-focused: var(\n --sbb-seat-reservation-navigation-btn-border-width\n );\n --sbb-seat-reservation-navigation-btn-border-color-focused: var(--sbb-color-black);\n --sbb-seat-reservation-navigation-btn-border-color-focused: light-dark(\n var(--sbb-color-black),\n var(--sbb-color-white)\n );\n --sbb-seat-reservation-navigation-btn-border-width-hovered: 2;\n --sbb-seat-reservation-navigation-btn-background-color-hovered: var(--sbb-color-cloud);\n --sbb-seat-reservation-navigation-btn-background-color-hovered: light-dark(\n var(--sbb-color-cloud),\n var(--sbb-color-midnight)\n );\n --sbb-seat-reservation-navigation-btn-border-color-hovered: var(--sbb-color-black);\n --sbb-seat-reservation-navigation-btn-border-color-hovered: light-dark(\n var(--sbb-color-black),\n var(--sbb-color-white)\n );\n --sbb-seat-reservation-navigation-btn-background-color-disabled: var(--sbb-background-color-2);\n --sbb-seat-reservation-navigation-btn-border-color-disabled: var(--sbb-color-platinum);\n --sbb-seat-reservation-navigation-btn-border-color-disabled: light-dark(\n var(--sbb-color-platinum),\n var(--sbb-color-iron)\n );\n}\n\n.sbb-sr-navigation__item-coach {\n display: flex;\n flex-direction: column;\n gap: calc(8 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n width: calc(80 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n list-style-type: none;\n}\n.sbb-sr-navigation__item-coach.first-coach .sbb-sr-navigation--first-class, .sbb-sr-navigation__item-coach.last-coach .sbb-sr-navigation--first-class {\n width: calc(100% - 18 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}\n.sbb-sr-navigation__item-coach.first-coach .sbb-sr-navigation__ctrl-button:not(.sbb-seat-reservation-navigation-driver-area) {\n border-radius: var(--sbb-border-radius-8x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-8x);\n}\n.sbb-sr-navigation__item-coach.first-coach .sbb-sr-navigation__ctrl-button:not(.sbb-seat-reservation-navigation-driver-area)::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: calc(var(--sbb-seat-reservation-navigation-btn-border-width) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid var(--sbb-seat-reservation-navigation-btn-border-color);\n border-radius: var(--sbb-border-radius-8x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-8x);\n}\n.sbb-sr-navigation__item-coach.first-coach .sbb-sr-navigation--first-class {\n margin-inline-start: calc(var(--sbb-seat-reservation-navigation-travelclass-spacing) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}\n.sbb-sr-navigation__item-coach.last-coach .sbb-sr-navigation__ctrl-button:not(.sbb-sr-navigation-driver-area) {\n border-radius: var(--sbb-border-radius-2x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-2x);\n}\n.sbb-sr-navigation__item-coach.last-coach .sbb-sr-navigation__ctrl-button:not(.sbb-sr-navigation-driver-area)::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: calc(var(--sbb-seat-reservation-navigation-btn-border-width) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid var(--sbb-seat-reservation-navigation-btn-border-color);\n border-radius: var(--sbb-border-radius-2x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-2x);\n}\n.sbb-sr-navigation__item-coach.last-coach .sbb-sr-navigation__additional-information {\n padding-inline-end: calc(var(--sbb-seat-reservation-navigation-travelclass-spacing) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}\n.sbb-sr-navigation__item-coach.last-coach .sbb-sr-navigation--first-class {\n margin-inline-end: calc(var(--sbb-seat-reservation-navigation-travelclass-spacing) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}\n\n.sbb-sr-navigation__ctrl-button {\n appearance: none;\n box-sizing: border-box;\n margin: 0;\n outline: none;\n border: none;\n border-radius: 0;\n padding: 0;\n background: none;\n -webkit-tap-highlight-color: transparent;\n color: inherit;\n display: flex;\n flex-direction: column;\n justify-content: center;\n height: calc(36 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n position: relative;\n background-color: var(--sbb-seat-reservation-navigation-btn-background-color);\n cursor: var(--sbb-cursor-pointer);\n}\n.sbb-sr-navigation__ctrl-button.sbb-sr-navigation-driver-area {\n border-radius: var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x);\n}\n.sbb-sr-navigation__ctrl-button.sbb-sr-navigation-driver-area::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: calc(var(--sbb-seat-reservation-navigation-btn-border-width) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid var(--sbb-seat-reservation-navigation-btn-border-color);\n border-radius: var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x);\n}\n.sbb-sr-navigation__ctrl-button {\n border-radius: var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x);\n}\n.sbb-sr-navigation__ctrl-button::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: calc(var(--sbb-seat-reservation-navigation-btn-border-width) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid var(--sbb-seat-reservation-navigation-btn-border-color);\n border-radius: var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x);\n}\n\n.sbb-sr-navigation__item-coach--focused .sbb-sr-navigation__ctrl-button {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-focused\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-focused\n );\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-focused\n );\n outline: calc(var(--sbb-seat-reservation-navigation-btn-outline-width-focused) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid var(--sbb-seat-reservation-navigation-btn-outline-color-focused);\n outline-offset: calc(var(--sbb-seat-reservation-navigation-btn-outline-offset-focused) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}\n.sbb-sr-navigation__item-coach--focused .sbb-sr-navigation__ctrl-button .sbb-sr-navigation__item-coach-travelclass {\n background-color: var(--sbb-color-metal);\n background-color: light-dark(var(--sbb-color-metal), var(--sbb-color-storm));\n}\n.sbb-sr-navigation__item-coach--focused .sbb-sr-navigation__ctrl-button .sbb-sr-navigation__item-coach-number {\n color: var(--sbb-color-anthracite);\n color: light-dark(var(--sbb-color-anthracite), var(--sbb-color-graphite));\n}\n\n.sbb-sr-navigation__item-coach--selected .sbb-sr-navigation__ctrl-button {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-selected\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-selected\n );\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-selected\n );\n}\n.sbb-sr-navigation__item-coach--selected .sbb-sr-navigation__ctrl-button .sbb-sr-navigation__item-coach-travelclass {\n background-color: var(--sbb-color-black);\n background-color: light-dark(var(--sbb-color-black), var(--sbb-color-white));\n}\n.sbb-sr-navigation__item-coach--selected .sbb-sr-navigation__ctrl-button .sbb-sr-navigation__item-coach-number {\n color: var(--sbb-color-black);\n color: light-dark(var(--sbb-color-black), var(--sbb-color-white));\n}\n\n.sbb-sr-navigation__item-coach--hovered .sbb-sr-navigation__ctrl-button {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-hovered\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-hovered\n );\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-hovered\n );\n}\n\n.sbb-sr-navigation__item-coach--selected.sbb-sr-navigation__item-coach--hovered .sbb-sr-navigation__ctrl-button {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-selected\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-selected\n );\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-selected\n );\n background-color: var(--sbb-seat-reservation-navigation-btn-background-color-hovered) !important;\n}\n\n.sbb-sr-navigation__item-coach--selected .sbb-sr-navigation__ctrl-button:focus-visible:not([disabled], :disabled) {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-selected\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-selected\n );\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-selected\n );\n}\n\n.sbb-sr-navigation__item-coach--hovered .sbb-sr-navigation__ctrl-button {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-hovered\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-hovered\n );\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-hovered\n );\n}\n\n.sbb-sr-navigation__ctrl-button:hover:not([disabled], :disabled) {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-hovered\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-hovered\n );\n --sbb-seat-reservation-navigation-btn-border-width: var(\n --sbb-seat-reservation-navigation-btn-border-width-hovered\n );\n}\n.sbb-sr-navigation__ctrl-button:hover:not([disabled], :disabled) .sbb-sr-navigation__item-coach-travelclass {\n background-color: var(--sbb-color-smoke);\n}\n.sbb-sr-navigation__ctrl-button:hover:not([disabled], :disabled) .sbb-sr-navigation__item-coach-number {\n color: var(--sbb-color-iron);\n color: light-dark(var(--sbb-color-iron), var(--sbb-color-silver));\n}\n\n.sbb-sr-navigation__ctrl-button:is([disabled], :disabled) {\n --sbb-seat-reservation-navigation-btn-background-color: var(\n --sbb-seat-reservation-navigation-btn-background-color-disabled\n );\n --sbb-seat-reservation-navigation-btn-border-color: var(\n --sbb-seat-reservation-navigation-btn-border-color-disabled\n );\n cursor: unset;\n pointer-events: unset;\n}\n.sbb-sr-navigation__ctrl-button:is([disabled], :disabled) .sbb-sr-navigation__item-coach-travelclass {\n background-color: var(--sbb-color-graphite);\n background-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-granite));\n}\n.sbb-sr-navigation__ctrl-button:is([disabled], :disabled) .sbb-sr-navigation__item-coach-number {\n color: var(--sbb-color-graphite);\n color: light-dark(var(--sbb-color-graphite), var(--sbb-color-granite));\n}\n\n.sbb-sr-navigation__additional-information {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex: 1;\n column-gap: calc(8 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n padding-inline: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n font-family: var(--sbb-typo-font-family);\n font-weight: 700;\n color: var(--sbb-color-granite);\n color: light-dark(var(--sbb-color-granite), var(--sbb-color-granite));\n}\n@media (forced-colors: active) {\n .sbb-sr-navigation__additional-information {\n color: var(--sbb-color-milk);\n }\n}\n\n.sbb-sr-navigation__item-coach-number {\n color: var(--sbb-color-granite);\n color: light-dark(var(--sbb-color-granite), var(--sbb-color-graphite));\n}\n@media (forced-colors: active) {\n .sbb-sr-navigation__item-coach-number {\n color: var(--sbb-color-granite);\n color: light-dark(var(--sbb-color-granite), var(--sbb-color-graphite));\n }\n}\n.sbb-sr-navigation__item-coach-number .sbb-sr-navigation__item-coach-travelclass {\n background-color: var(--sbb-background-color-2-inverted);\n}\n\n.sbb-sr-navigation--first-class {\n width: calc(100% - 8 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n position: absolute;\n inset-block-start: calc(3 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n inset-inline-start: calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n border: calc(1 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid transparent;\n border-radius: var(--sbb-border-radius-1x);\n margin: auto;\n background-color: var(--sbb-color-lemon);\n}\n\n.sbb-sr-navigation__item-coach-travelclass {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: calc(20 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n min-width: calc(20 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n border-radius: var(--sbb-border-radius-1x);\n text-align: center;\n background-color: var(--sbb-color-granite);\n background-color: light-dark(var(--sbb-color-granite), var(--sbb-color-graphite));\n color: var(--sbb-color-white);\n color: light-dark(var(--sbb-color-white), var(--sbb-color-black));\n}\n@media (forced-colors: active) {\n .sbb-sr-navigation__item-coach-travelclass {\n border: var(--sbb-border-width-1x) solid;\n }\n}\n\n:host([vertical]) .sbb-sr-navigation__item-coach {\n flex-direction: row;\n}\n:host([vertical]) .sbb-sr-navigation__item-coach .sbb-sr-navigation__ctrl-button {\n flex-direction: row-reverse;\n height: calc(80 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n min-width: calc(36 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}\n:host([vertical]) .sbb-sr-navigation__item-coach .sbb-sr-navigation__additional-information {\n flex-direction: column-reverse;\n padding-block: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n padding-inline-start: unset;\n padding-inline-end: unset;\n}\n:host([vertical]) .sbb-sr-navigation__item-coach .sbb-sr-navigation--first-class {\n height: calc(100% - 8 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n width: initial;\n inset-inline-end: calc(3 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n inset-block-start: calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n inset-inline-start: initial;\n}\n:host([vertical]) .sbb-sr-navigation__item-coach.first-coach .sbb-sr-navigation--first-class, :host([vertical]) .sbb-sr-navigation__item-coach.last-coach .sbb-sr-navigation--first-class {\n height: calc(100% - 18 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}\n:host([vertical]) .sbb-sr-navigation__item-coach.first-coach:not(.last-coach) .sbb-sr-navigation__ctrl-button:not(.sbb-sr-navigation-driver-area) {\n border-radius: var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x);\n}\n:host([vertical]) .sbb-sr-navigation__item-coach.first-coach:not(.last-coach) .sbb-sr-navigation__ctrl-button:not(.sbb-sr-navigation-driver-area)::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: calc(var(--sbb-seat-reservation-navigation-btn-border-width) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid var(--sbb-seat-reservation-navigation-btn-border-color);\n border-radius: var(--sbb-border-radius-8x) var(--sbb-border-radius-8x) var(--sbb-border-radius-2x) var(--sbb-border-radius-2x);\n}\n:host([vertical]) .sbb-sr-navigation__item-coach.first-coach:not(.last-coach) .sbb-sr-navigation--first-class {\n margin-block-start: calc(var(--sbb-seat-reservation-navigation-travelclass-spacing) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n margin-inline-start: initial;\n}\n:host([vertical]) .sbb-sr-navigation__item-coach.last-coach:not(.first-coach) .sbb-sr-navigation__ctrl-button:not(.sbb-sr-navigation-driver-area) {\n border-radius: var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x);\n}\n:host([vertical]) .sbb-sr-navigation__item-coach.last-coach:not(.first-coach) .sbb-sr-navigation__ctrl-button:not(.sbb-sr-navigation-driver-area)::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: calc(var(--sbb-seat-reservation-navigation-btn-border-width) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) solid var(--sbb-seat-reservation-navigation-btn-border-color);\n border-radius: var(--sbb-border-radius-2x) var(--sbb-border-radius-2x) var(--sbb-border-radius-8x) var(--sbb-border-radius-8x);\n}\n:host([vertical]) .sbb-sr-navigation__item-coach.last-coach:not(.first-coach) .sbb-sr-navigation--first-class {\n margin-block-end: calc(var(--sbb-seat-reservation-navigation-travelclass-spacing) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n margin-inline-end: initial;\n}\n:host([vertical]) .sbb-sr-navigation__item-coach .sbb-sr-navigation-driver-area {\n height: calc(80 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n min-width: calc(36 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));\n}";
10
- //#endregion
11
- //#region src/elements-experimental/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.ts
12
- var SbbSelectCoachEvent = class extends Event {
13
- get coachIndex() {
14
- return this._coachIndex;
15
- }
16
- constructor(coachIndex) {
17
- super("selectcoach", {
18
- bubbles: true,
19
- composed: true
20
- });
21
- this._coachIndex = coachIndex;
22
- }
23
- };
24
- /**
25
- * This component will display the navigation coach item for Seat reservation.
26
- */
27
- var SbbSeatReservationNavigationCoachElement = (() => {
28
- let _classSuper = SbbElement;
29
- let _selected_decorators;
30
- let _selected_initializers = [];
31
- let _selected_extraInitializers = [];
32
- let _focused_decorators;
33
- let _focused_initializers = [];
34
- let _focused_extraInitializers = [];
35
- let _hovered_decorators;
36
- let _hovered_initializers = [];
37
- let _hovered_extraInitializers = [];
38
- let _nativeFocusActive_decorators;
39
- let _nativeFocusActive_initializers = [];
40
- let _nativeFocusActive_extraInitializers = [];
41
- let _index_decorators;
42
- let _index_initializers = [];
43
- let _index_extraInitializers = [];
44
- let _coachItemDetails_decorators;
45
- let _coachItemDetails_initializers = [];
46
- let _coachItemDetails_extraInitializers = [];
47
- let _disable_decorators;
48
- let _disable_initializers = [];
49
- let _disable_extraInitializers = [];
50
- let _vertical_decorators;
51
- let _vertical_initializers = [];
52
- let _vertical_extraInitializers = [];
53
- let _showTitleInfo_decorators;
54
- let _showTitleInfo_initializers = [];
55
- let _showTitleInfo_extraInitializers = [];
56
- return class SbbSeatReservationNavigationCoachElement extends _classSuper {
57
- constructor() {
58
- super(...arguments);
59
- this.#selected_accessor_storage = __runInitializers(this, _selected_initializers, false);
60
- this.#focused_accessor_storage = (__runInitializers(this, _selected_extraInitializers), __runInitializers(this, _focused_initializers, false));
61
- this.#hovered_accessor_storage = (__runInitializers(this, _focused_extraInitializers), __runInitializers(this, _hovered_initializers, false));
62
- this.#nativeFocusActive_accessor_storage = (__runInitializers(this, _hovered_extraInitializers), __runInitializers(this, _nativeFocusActive_initializers, true));
63
- this.#index_accessor_storage = (__runInitializers(this, _nativeFocusActive_extraInitializers), __runInitializers(this, _index_initializers, 0));
64
- this.#coachItemDetails_accessor_storage = (__runInitializers(this, _index_extraInitializers), __runInitializers(this, _coachItemDetails_initializers, {}));
65
- this.#disable_accessor_storage = (__runInitializers(this, _coachItemDetails_extraInitializers), __runInitializers(this, _disable_initializers, false));
66
- this.#vertical_accessor_storage = (__runInitializers(this, _disable_extraInitializers), __runInitializers(this, _vertical_initializers, false));
67
- this.#showTitleInfo_accessor_storage = (__runInitializers(this, _vertical_extraInitializers), __runInitializers(this, _showTitleInfo_initializers, false));
68
- this._language = (__runInitializers(this, _showTitleInfo_extraInitializers), new SbbLanguageController(this));
69
- }
70
- static {
71
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
72
- _selected_decorators = [forceType(), property({ type: Boolean })];
73
- _focused_decorators = [forceType(), property({ type: Boolean })];
74
- _hovered_decorators = [forceType(), property({ type: Boolean })];
75
- _nativeFocusActive_decorators = [forceType(), property({ type: Boolean })];
76
- _index_decorators = [forceType(), property({ type: Number })];
77
- _coachItemDetails_decorators = [property({
78
- attribute: "coach-item-details",
79
- type: Object
80
- })];
81
- _disable_decorators = [forceType(), property({
82
- attribute: "disable",
83
- type: Boolean
84
- })];
85
- _vertical_decorators = [forceType(), property({
86
- type: Boolean,
87
- reflect: true,
88
- useDefault: true
89
- })];
90
- _showTitleInfo_decorators = [forceType(), property({ type: Boolean })];
91
- __esDecorate(this, null, _selected_decorators, {
92
- kind: "accessor",
93
- name: "selected",
94
- static: false,
95
- private: false,
96
- access: {
97
- has: (obj) => "selected" in obj,
98
- get: (obj) => obj.selected,
99
- set: (obj, value) => {
100
- obj.selected = value;
101
- }
102
- },
103
- metadata: _metadata
104
- }, _selected_initializers, _selected_extraInitializers);
105
- __esDecorate(this, null, _focused_decorators, {
106
- kind: "accessor",
107
- name: "focused",
108
- static: false,
109
- private: false,
110
- access: {
111
- has: (obj) => "focused" in obj,
112
- get: (obj) => obj.focused,
113
- set: (obj, value) => {
114
- obj.focused = value;
115
- }
116
- },
117
- metadata: _metadata
118
- }, _focused_initializers, _focused_extraInitializers);
119
- __esDecorate(this, null, _hovered_decorators, {
120
- kind: "accessor",
121
- name: "hovered",
122
- static: false,
123
- private: false,
124
- access: {
125
- has: (obj) => "hovered" in obj,
126
- get: (obj) => obj.hovered,
127
- set: (obj, value) => {
128
- obj.hovered = value;
129
- }
130
- },
131
- metadata: _metadata
132
- }, _hovered_initializers, _hovered_extraInitializers);
133
- __esDecorate(this, null, _nativeFocusActive_decorators, {
134
- kind: "accessor",
135
- name: "nativeFocusActive",
136
- static: false,
137
- private: false,
138
- access: {
139
- has: (obj) => "nativeFocusActive" in obj,
140
- get: (obj) => obj.nativeFocusActive,
141
- set: (obj, value) => {
142
- obj.nativeFocusActive = value;
143
- }
144
- },
145
- metadata: _metadata
146
- }, _nativeFocusActive_initializers, _nativeFocusActive_extraInitializers);
147
- __esDecorate(this, null, _index_decorators, {
148
- kind: "accessor",
149
- name: "index",
150
- static: false,
151
- private: false,
152
- access: {
153
- has: (obj) => "index" in obj,
154
- get: (obj) => obj.index,
155
- set: (obj, value) => {
156
- obj.index = value;
157
- }
158
- },
159
- metadata: _metadata
160
- }, _index_initializers, _index_extraInitializers);
161
- __esDecorate(this, null, _coachItemDetails_decorators, {
162
- kind: "accessor",
163
- name: "coachItemDetails",
164
- static: false,
165
- private: false,
166
- access: {
167
- has: (obj) => "coachItemDetails" in obj,
168
- get: (obj) => obj.coachItemDetails,
169
- set: (obj, value) => {
170
- obj.coachItemDetails = value;
171
- }
172
- },
173
- metadata: _metadata
174
- }, _coachItemDetails_initializers, _coachItemDetails_extraInitializers);
175
- __esDecorate(this, null, _disable_decorators, {
176
- kind: "accessor",
177
- name: "disable",
178
- static: false,
179
- private: false,
180
- access: {
181
- has: (obj) => "disable" in obj,
182
- get: (obj) => obj.disable,
183
- set: (obj, value) => {
184
- obj.disable = value;
185
- }
186
- },
187
- metadata: _metadata
188
- }, _disable_initializers, _disable_extraInitializers);
189
- __esDecorate(this, null, _vertical_decorators, {
190
- kind: "accessor",
191
- name: "vertical",
192
- static: false,
193
- private: false,
194
- access: {
195
- has: (obj) => "vertical" in obj,
196
- get: (obj) => obj.vertical,
197
- set: (obj, value) => {
198
- obj.vertical = value;
199
- }
200
- },
201
- metadata: _metadata
202
- }, _vertical_initializers, _vertical_extraInitializers);
203
- __esDecorate(this, null, _showTitleInfo_decorators, {
204
- kind: "accessor",
205
- name: "showTitleInfo",
206
- static: false,
207
- private: false,
208
- access: {
209
- has: (obj) => "showTitleInfo" in obj,
210
- get: (obj) => obj.showTitleInfo,
211
- set: (obj, value) => {
212
- obj.showTitleInfo = value;
213
- }
214
- },
215
- metadata: _metadata
216
- }, _showTitleInfo_initializers, _showTitleInfo_extraInitializers);
217
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
218
- enumerable: true,
219
- configurable: true,
220
- writable: true,
221
- value: _metadata
222
- });
223
- }
224
- static {
225
- this.elementName = "sbb-seat-reservation-navigation-coach";
226
- }
227
- static {
228
- this.elementDependencies = [SbbSeatReservationNavigationServicesElement];
229
- }
230
- static {
231
- this.styles = [screenReaderOnlyStyles, unsafeCSS(seat_reservation_navigation_coach_default)];
232
- }
233
- static {
234
- this.events = {
235
- selectcoach: "selectcoach",
236
- focuscoach: "focuscoach"
237
- };
238
- }
239
- #selected_accessor_storage;
240
- /** Select coach property */
241
- get selected() {
242
- return this.#selected_accessor_storage;
243
- }
244
- set selected(value) {
245
- this.#selected_accessor_storage = value;
246
- }
247
- #focused_accessor_storage;
248
- /** Focus coach property */
249
- get focused() {
250
- return this.#focused_accessor_storage;
251
- }
252
- set focused(value) {
253
- this.#focused_accessor_storage = value;
254
- }
255
- #hovered_accessor_storage;
256
- /** Hover coach property */
257
- get hovered() {
258
- return this.#hovered_accessor_storage;
259
- }
260
- set hovered(value) {
261
- this.#hovered_accessor_storage = value;
262
- }
263
- #nativeFocusActive_accessor_storage;
264
- /** Native focus for this navigation coach is also set when the focused property is changed */
265
- get nativeFocusActive() {
266
- return this.#nativeFocusActive_accessor_storage;
267
- }
268
- set nativeFocusActive(value) {
269
- this.#nativeFocusActive_accessor_storage = value;
270
- }
271
- #index_accessor_storage;
272
- get index() {
273
- return this.#index_accessor_storage;
274
- }
275
- set index(value) {
276
- this.#index_accessor_storage = value;
277
- }
278
- #coachItemDetails_accessor_storage;
279
- get coachItemDetails() {
280
- return this.#coachItemDetails_accessor_storage;
281
- }
282
- set coachItemDetails(value) {
283
- this.#coachItemDetails_accessor_storage = value;
284
- }
285
- #disable_accessor_storage;
286
- /** Disable the coach navigation */
287
- get disable() {
288
- return this.#disable_accessor_storage;
289
- }
290
- set disable(value) {
291
- this.#disable_accessor_storage = value;
292
- }
293
- #vertical_accessor_storage;
294
- /** If the coach navigation should be displayed vertically */
295
- get vertical() {
296
- return this.#vertical_accessor_storage;
297
- }
298
- set vertical(value) {
299
- this.#vertical_accessor_storage = value;
300
- }
301
- #showTitleInfo_accessor_storage;
302
- /** Disable the mouse over title information */
303
- get showTitleInfo() {
304
- return this.#showTitleInfo_accessor_storage;
305
- }
306
- set showTitleInfo(value) {
307
- this.#showTitleInfo_accessor_storage = value;
308
- }
309
- willUpdate(changedProperties) {
310
- super.willUpdate(changedProperties);
311
- if (changedProperties.has("selected")) {
312
- const selectedNavButtonElement = this.shadowRoot?.querySelector(".sbb-sr-navigation__ctrl-button");
313
- if (this.selected && selectedNavButtonElement) {
314
- if (this.nativeFocusActive) selectedNavButtonElement.focus();
315
- /** Emits when a nav coach has the focus */
316
- this.dispatchEvent(new Event("focuscoach", {
317
- bubbles: true,
318
- composed: true
319
- }));
320
- }
321
- }
322
- if (changedProperties.has("focused") && this.focused) {
323
- const focusedNavButtonElement = this.shadowRoot?.querySelector(".sbb-sr-navigation__ctrl-button");
324
- if (focusedNavButtonElement && this.nativeFocusActive) focusedNavButtonElement.focus();
325
- }
326
- }
327
- /**
328
- * Render a list of service icons provided by a caller
329
- *
330
- * @protected
331
- */
332
- render() {
333
- return html`
334
- <div
335
- class="${classMap({
336
- "sbb-sr-navigation__item-coach": true,
337
- "last-coach": this.coachItemDetails.driverAreaSide?.right || false,
338
- "first-coach": this.coachItemDetails.driverAreaSide?.left || false,
339
- "sbb-sr-navigation__item-coach--selected": this.selected,
340
- "sbb-sr-navigation__item-coach--focused": this.focused,
341
- "sbb-sr-navigation__item-coach--hovered": this.hovered
342
- })}"
343
- >
344
- ${this._getNavigationButton()}
345
- ${this.coachItemDetails.propertyIds?.length ? html`<sbb-seat-reservation-navigation-services
346
- ?vertical="${this.vertical}"
347
- .propertyIds="${this.coachItemDetails.propertyIds}"
348
- ?showTitleInfo="${this.showTitleInfo}"
349
- ></sbb-seat-reservation-navigation-services>` : nothing}
350
- </div>
351
- `;
352
- }
353
- _getNavigationButton() {
354
- const currServiceClassNumber = this._getCoachServiceClassNumber();
355
- const titleDescriptionNavCoachButton = this._getTitleDescriptionNavCoachButton(currServiceClassNumber);
356
- const ariaDescriptionCoachServices = this._getAriaDescriptionCoachServices();
357
- return html` <button
358
- @click=${() => this._selectNavCoach(this.index)}
359
- class="${classMap({
360
- "sbb-sr-navigation__ctrl-button": true,
361
- "sbb-sr-navigation-driver-area": this.coachItemDetails.isDriverArea
362
- })}"
363
- ?disabled="${this.disable}"
364
- title="${this.showTitleInfo ? titleDescriptionNavCoachButton : nothing}"
365
- type="button"
366
- aria-describedby="nav-coach-service-descriptions-${this.index}"
367
- >
368
- ${this._getBtnInformation(currServiceClassNumber)}
369
- <span class="sbb-screen-reader-only" id="nav-coach-service-descriptions-${this.index}">
370
- ${!this.showTitleInfo ? html`<div>${titleDescriptionNavCoachButton}</div>` : nothing}
371
- ${ariaDescriptionCoachServices ? html`<div>${ariaDescriptionCoachServices}</div>` : nothing}
372
- </span>
373
- </button>`;
374
- }
375
- _getBtnInformation(serviceClassNumber) {
376
- if (this.coachItemDetails.isDriverArea) return null;
377
- return html`
378
- ${serviceClassNumber === 1 ? html`<span class="sbb-sr-navigation--first-class"></span>` : nothing}
379
- ${this.coachItemDetails.travelClass?.length > 0 || this.coachItemDetails.id ? html`<div class="sbb-sr-navigation__additional-information">
380
- ${this.coachItemDetails.id ? html`<div class="sbb-sr-navigation__item-coach-number" aria-hidden="true">
381
- ${this.coachItemDetails.id}
382
- </div>` : nothing}
383
- <div
384
- ${serviceClassNumber ?? nothing}
385
- class="sbb-sr-navigation__item-coach-travelclass"
386
- aria-hidden="true"
387
- >
388
- ${serviceClassNumber}
389
- </div>
390
- </div>` : nothing}
391
- `;
392
- }
393
- _getTitleDescriptionNavCoachButton(serviceClassNumber) {
394
- if (this.coachItemDetails.isDriverArea && !this.coachItemDetails.isLocomotive) return getI18nSeatReservation("NAVIGATE_COACH_BLOCKED", this._language.current, [this.coachItemDetails.id]);
395
- if (this.coachItemDetails.isLocomotive) return getI18nSeatReservation("COACH_LOCOMOTIVE", this._language.current);
396
- let label = getI18nSeatReservation("NAVIGATE_TO_COACH", this._language.current, [this.coachItemDetails.id]);
397
- if (serviceClassNumber) {
398
- const serviceClassTranslation = getI18nSeatReservation(serviceClassNumber === 1 ? "SERVICE_CLASS_FIRST" : "SERVICE_CLASS_SECOND", this._language.current);
399
- const serviceClassLabel = getI18nSeatReservation("NAVIGATE_TO_COACH_SERVICE_CLASS_SUB", this._language.current, [serviceClassTranslation]);
400
- label = label.concat(serviceClassLabel);
401
- }
402
- const freePlacesTxt = getI18nSeatReservation("COACH_AVAILABLE_NUMBER_OF_PLACES", this._language.current, [this.coachItemDetails.freePlaces?.seats, this.coachItemDetails.freePlaces?.bicycles]);
403
- label = label.concat(". ").concat(freePlacesTxt);
404
- return label;
405
- }
406
- _getAriaDescriptionCoachServices() {
407
- let ariaDescription = null;
408
- if (this.coachItemDetails.propertyIds?.length) {
409
- ariaDescription = getI18nSeatReservation("COACH_AVAILABLE_SERVICES", this._language.current) + ": ";
410
- ariaDescription += this.coachItemDetails.propertyIds.map((propertyId) => getI18nSeatReservation(propertyId, this._language.current)).join() + ".";
411
- }
412
- return ariaDescription;
413
- }
414
- /**
415
- * emits the index of the coach array for the main navigation.
416
- * @param selectcoach
417
- * @private
418
- */
419
- _selectNavCoach(selectcoach) {
420
- /**
421
- * @type {SbbSelectCoachEvent}
422
- * Emits when a coach within the navigation was selected and returns the clicked coach nav index.
423
- */
424
- this.dispatchEvent(new SbbSelectCoachEvent(selectcoach));
425
- }
426
- _getCoachServiceClassNumber() {
427
- return this.coachItemDetails.travelClass?.includes("FIRST") ? 1 : this.coachItemDetails.travelClass?.includes("SECOND") ? 2 : null;
428
- }
429
- };
430
- })();
431
- //#endregion
432
- export { SbbSelectCoachEvent as n, SbbSeatReservationNavigationCoachElement as t };
433
-
434
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWNvYWNoLmNvbXBvbmVudC05eVNuWklLSC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL3NlYXQtcmVzZXJ2YXRpb24vc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWNvYWNoL3NlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1jb2FjaC5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2gvc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWNvYWNoLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL3N0eWxlcycgYXMgc2JiO1xuQHVzZSAnLi4vY29tbW9uL3N0eWxlcy9zZWF0LXJlc2VydmF0aW9uLW1peGlucy5zY3NzJyBhcyBzYmItc3ItbWl4aW5zO1xuQHVzZSAnLi4vY29tbW9uL3N0eWxlcy9zZWF0LXJlc2VydmF0aW9uLWZ1bmN0aW9ucycgYXMgc2JiLXNyLWZ1bmN0aW9ucztcblxuJGRpc2FibGVkOiAnW2Rpc2FibGVkXSwgOmRpc2FibGVkJztcblxuOmhvc3Qge1xuICAvLyBmaXhlcyB0aGUga2V5Ym9hcmQgZm9jdXMgYm9yZGVyIHdoaWNoIHdhcyBjdXQgb2ZmIGR1ZSB0byBtaXNzaW5nIG5hdmlnYXRpb24gc2VydmljZSBpY29uc1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi1oZWlnaHQ6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKFxuICAgIDQ0XG4gICk7IC8vIGRlZmF1bHQgYnV0dG9uIGhlaWdodCAoMzZweCkgKyAyICogNHB4IGZvY3VzIG91dGxpbmUgb2Zmc2V0XG5cbiAgLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLXRyYXZlbGNsYXNzLXNwYWNpbmc6IDEwO1xuICAtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tYnRuLWJvcmRlci13aWR0aC1kZWZhdWx0OiAxO1xuICAtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tYnRuLWJvcmRlci13aWR0aDogdmFyKFxuICAgIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tYm9yZGVyLXdpZHRoLWRlZmF1bHRcbiAgKTtcbiAgLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWJ0bi1ib3JkZXItY29sb3I6IGxpZ2h0LWRhcmsoXG4gICAgdmFyKC0tc2JiLWNvbG9yLWdyYW5pdGUpLFxuICAgIHZhcigtLXNiYi1jb2xvci1ncmFwaGl0ZSlcbiAgKTtcbiAgLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWJ0bi1iYWNrZ3JvdW5kLWNvbG9yOiBsaWdodC1kYXJrKFxuICAgIHZhcigtLXNiYi1jb2xvci13aGl0ZSksXG4gICAgdmFyKC0tc2JiLWNvbG9yLWJsYWNrKVxuICApO1xuXG4gIC8vIHNlbGVjdGVkIHN0YXRlIHZhcmlhYmxlc1xuICAtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tYnRuLWJvcmRlci13aWR0aC1zZWxlY3RlZDogMjtcbiAgLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWJ0bi1iYWNrZ3JvdW5kLWNvbG9yLXNlbGVjdGVkOiBsaWdodC1kYXJrKFxuICAgIHZhcigtLXNiYi1jb2xvci1taWxrKSxcbiAgICB2YXIoLS1zYmItY29sb3ItaXJvbilcbiAgKTtcbiAgLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWJ0bi1ib3JkZXItY29sb3Itc2VsZWN0ZWQ6IGxpZ2h0LWRhcmsoXG4gICAgdmFyKC0tc2JiLWNvbG9yLWJsYWNrKSxcbiAgICB2YXIoLS1zYmItY29sb3Itd2hpdGUpXG4gICk7XG5cbiAgLy8gZm9jdXMgc3RhdGUgdmFyaWFibGVzXG4gIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tb3V0bGluZS13aWR0aC1mb2N1c2VkOiAxO1xuICAtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tYnRuLW91dGxpbmUtY29sb3ItZm9jdXNlZDogbGlnaHQtZGFyayhcbiAgICB2YXIoLS1zYmItY29sb3ItYmxhY2spLFxuICAgIHZhcigtLXNiYi1jb2xvci13aGl0ZSlcbiAgKTtcbiAgLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWJ0bi1vdXRsaW5lLW9mZnNldC1mb2N1c2VkOiA0O1xuICAtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tYnRuLWJhY2tncm91bmQtY29sb3ItZm9jdXNlZDogbGlnaHQtZGFyayhcbiAgICB2YXIoLS1zYmItY29sb3Itd2hpdGUpLFxuICAgIHZhcigtLXNiYi1jb2xvci1ibGFjaylcbiAgKTtcbiAgLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWJ0bi1ib3JkZXItd2lkdGgtZm9jdXNlZDogdmFyKFxuICAgIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tYm9yZGVyLXdpZHRoXG4gICk7XG4gIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tYm9yZGVyLWNvbG9yLWZvY3VzZWQ6IGxpZ2h0LWRhcmsoXG4gICAgdmFyKC0tc2JiLWNvbG9yLWJsYWNrKSxcbiAgICB2YXIoLS1zYmItY29sb3Itd2hpdGUpXG4gICk7XG5cbiAgLy8gaG92ZXIgc3RhdGUgdmFyaWFibGVzXG4gIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tYm9yZGVyLXdpZHRoLWhvdmVyZWQ6IDI7XG4gIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tYmFja2dyb3VuZC1jb2xvci1ob3ZlcmVkOiBsaWdodC1kYXJrKFxuICAgIHZhcigtLXNiYi1jb2xvci1jbG91ZCksXG4gICAgdmFyKC0tc2JiLWNvbG9yLW1pZG5pZ2h0KVxuICApO1xuICAtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tYnRuLWJvcmRlci1jb2xvci1ob3ZlcmVkOiBsaWdodC1kYXJrKFxuICAgIHZhcigtLXNiYi1jb2xvci1ibGFjayksXG4gICAgdmFyKC0tc2JiLWNvbG9yLXdoaXRlKVxuICApO1xuXG4gIC8vIGRpc2FibGUgc3RhdGUgdmFyaWFibGVzXG4gIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tYmFja2dyb3VuZC1jb2xvci1kaXNhYmxlZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMik7XG4gIC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1idG4tYm9yZGVyLWNvbG9yLWRpc2FibGVkOiBsaWdodC1kYXJrKFxuICAgIHZhcigtLXNiYi1jb2xvci1wbGF0aW51bSksXG4gICAgdmFyKC0tc2JiLWNvbG9yLWlyb24pXG4gICk7XG59XG5cbi5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogc2JiLXNyLWZ1bmN0aW9ucy5zci1weC10by1yZW0oOCk7XG4gIHdpZHRoOiBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbSg4MCk7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblxuICAmLmZpcnN0LWNvYWNoLFxuICAmLmxhc3QtY29hY2gge1xuICAgIC5zYmItc3ItbmF2aWdhdGlvbi0tZmlyc3QtY2xhc3Mge1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDE4KSk7XG4gICAgfVxuICB9XG5cbiAgJi5maXJzdC1jb2FjaCB7XG4gICAgLnNiYi1zci1uYXZpZ2F0aW9uX19jdHJsLWJ1dHRvbjpub3QoLnNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tZHJpdmVyLWFyZWEpIHtcbiAgICAgIEBpbmNsdWRlIHNiYi1zci1taXhpbnMudmlzdWFsaXplLWNvYWNoLWJvcmRlcig4LCAyLCAyLCA4KTtcbiAgICB9XG5cbiAgICAuc2JiLXNyLW5hdmlnYXRpb24tLWZpcnN0LWNsYXNzIHtcbiAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKFxuICAgICAgICB2YXIoLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLXRyYXZlbGNsYXNzLXNwYWNpbmcpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICYubGFzdC1jb2FjaCB7XG4gICAgLnNiYi1zci1uYXZpZ2F0aW9uX19jdHJsLWJ1dHRvbjpub3QoLnNiYi1zci1uYXZpZ2F0aW9uLWRyaXZlci1hcmVhKSB7XG4gICAgICBAaW5jbHVkZSBzYmItc3ItbWl4aW5zLnZpc3VhbGl6ZS1jb2FjaC1ib3JkZXIoMiwgOCwgOCwgMik7XG4gICAgfVxuXG4gICAgLnNiYi1zci1uYXZpZ2F0aW9uX19hZGRpdGlvbmFsLWluZm9ybWF0aW9uIHtcbiAgICAgIHBhZGRpbmctaW5saW5lLWVuZDogc2JiLXNyLWZ1bmN0aW9ucy5zci1weC10by1yZW0oXG4gICAgICAgIHZhcigtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tdHJhdmVsY2xhc3Mtc3BhY2luZylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLnNiYi1zci1uYXZpZ2F0aW9uLS1maXJzdC1jbGFzcyB7XG4gICAgICBtYXJnaW4taW5saW5lLWVuZDogc2JiLXNyLWZ1bmN0aW9ucy5zci1weC10by1yZW0oXG4gICAgICAgIHZhcigtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tdHJhdmVsY2xhc3Mtc3BhY2luZylcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8vIHNhbWUgZm9yIGFsbCBzdGF0ZXNcbi5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b24ge1xuICBAaW5jbHVkZSBzYmIuYnV0dG9uLXJlc2V0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBoZWlnaHQ6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDM2KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWJ0bi1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgY3Vyc29yOiB2YXIoLS1zYmItY3Vyc29yLXBvaW50ZXIpO1xuXG4gICYuc2JiLXNyLW5hdmlnYXRpb24tZHJpdmVyLWFyZWEge1xuICAgIEBpbmNsdWRlIHNiYi1zci1taXhpbnMudmlzdWFsaXplLWNvYWNoLWJvcmRlcig4LCA4LCA4LCA4KTtcbiAgfVxuXG4gIEBpbmNsdWRlIHNiYi1zci1taXhpbnMudmlzdWFsaXplLWNvYWNoLWJvcmRlcigyLCAyLCAyLCAyKTtcbn1cblxuLnNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoLS1mb2N1c2VkIC5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b24ge1xuICBAaW5jbHVkZSBzYmItc3ItbWl4aW5zLnN0eWxlLWNvYWNoLWJ5LXN0YXRlKCdmb2N1c2VkJyk7XG5cbiAgLnNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoLXRyYXZlbGNsYXNzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1tZXRhbCksIHZhcigtLXNiYi1jb2xvci1zdG9ybSkpO1xuICB9XG5cbiAgLnNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoLW51bWJlciB7XG4gICAgY29sb3I6IGxpZ2h0LWRhcmsodmFyKC0tc2JiLWNvbG9yLWFudGhyYWNpdGUpLCB2YXIoLS1zYmItY29sb3ItZ3JhcGhpdGUpKTtcbiAgfVxufVxuXG4vLyBzZWxlY3RlZCwgaS5lLiB0aGUgY29hY2ggd2l0aGluIHRoZSB0cmFpbiBpcyBzZWxlY3RlZCAoRklHTUEgU3RhdGU6U2VsZWN0ZWQpXG4uc2JiLXNyLW5hdmlnYXRpb25fX2l0ZW0tY29hY2gtLXNlbGVjdGVkIC5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b24ge1xuICBAaW5jbHVkZSBzYmItc3ItbWl4aW5zLnN0eWxlLWNvYWNoLWJ5LXN0YXRlKCdzZWxlY3RlZCcpO1xuXG4gIC5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC10cmF2ZWxjbGFzcyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItYmxhY2spLCB2YXIoLS1zYmItY29sb3Itd2hpdGUpKTtcbiAgfVxuXG4gIC5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC1udW1iZXIge1xuICAgIGNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ibGFjayksIHZhcigtLXNiYi1jb2xvci13aGl0ZSkpO1xuICB9XG59XG5cbi5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC0taG92ZXJlZCAuc2JiLXNyLW5hdmlnYXRpb25fX2N0cmwtYnV0dG9uIHtcbiAgQGluY2x1ZGUgc2JiLXNyLW1peGlucy5zdHlsZS1jb2FjaC1ieS1zdGF0ZSgnaG92ZXJlZCcpO1xufVxuXG4uc2JiLXNyLW5hdmlnYXRpb25fX2l0ZW0tY29hY2gtLXNlbGVjdGVkLnNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoLS1ob3ZlcmVkXG4gIC5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b24ge1xuICBAaW5jbHVkZSBzYmItc3ItbWl4aW5zLnN0eWxlLWNvYWNoLWJ5LXN0YXRlKCdzZWxlY3RlZCcpO1xuXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tYnRuLWJhY2tncm91bmQtY29sb3ItaG92ZXJlZCkgIWltcG9ydGFudDtcbn1cblxuLy8gc2VsZWN0ZWQgQU5EIGZvY3VzIChGSUdNQSBTdGF0ZTpTZWxlY3RlZCArIEZvY3VzZWQpXG4vLyBiYWNrZ3JvdW5kLWNvbG9yIGZyb20gc2VsZWN0ZWQgU3RhdGUgaGFzIG1vcmUgc3BlY2lmaWNpdHksIHNvIHdlIG5lZWQgdG8gb3ZlcnJpZGUgaXQgaGVyZSAoYWdhaW4pXG4uc2JiLXNyLW5hdmlnYXRpb25fX2l0ZW0tY29hY2gtLXNlbGVjdGVkXG4gIC5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b246Zm9jdXMtdmlzaWJsZTpub3QoI3skZGlzYWJsZWR9KSB7XG4gIEBpbmNsdWRlIHNiYi1zci1taXhpbnMuc3R5bGUtY29hY2gtYnktc3RhdGUoJ3NlbGVjdGVkJyk7XG59XG5cbi5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC0taG92ZXJlZCAuc2JiLXNyLW5hdmlnYXRpb25fX2N0cmwtYnV0dG9uIHtcbiAgQGluY2x1ZGUgc2JiLXNyLW1peGlucy5zdHlsZS1jb2FjaC1ieS1zdGF0ZSgnaG92ZXJlZCcpO1xufVxuXG4vLyBob3ZlciAoRklHTUEgU3RhdGU6aG92ZXIpXG4uc2JiLXNyLW5hdmlnYXRpb25fX2N0cmwtYnV0dG9uOmhvdmVyOm5vdCgjeyRkaXNhYmxlZH0pIHtcbiAgQGluY2x1ZGUgc2JiLXNyLW1peGlucy5zdHlsZS1jb2FjaC1ieS1zdGF0ZSgnaG92ZXJlZCcpO1xuXG4gIC5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC10cmF2ZWxjbGFzcyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLXNtb2tlKTtcbiAgfVxuXG4gIC5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC1udW1iZXIge1xuICAgIGNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1pcm9uKSwgdmFyKC0tc2JiLWNvbG9yLXNpbHZlcikpO1xuICB9XG59XG5cbi8vIGRpc2FibGVkIChGSUdNQSBTdGF0ZTpkaXNhYmxlZClcbi5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b246aXMoI3skZGlzYWJsZWR9KSB7XG4gIEBpbmNsdWRlIHNiYi1zci1taXhpbnMuc3R5bGUtY29hY2gtYnktc3RhdGUoJ2Rpc2FibGVkJyk7XG5cbiAgY3Vyc29yOiB1bnNldDtcbiAgcG9pbnRlci1ldmVudHM6IHVuc2V0O1xuXG4gIC5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC10cmF2ZWxjbGFzcyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3JhcGhpdGUpLCB2YXIoLS1zYmItY29sb3ItZ3Jhbml0ZSkpO1xuICB9XG5cbiAgLnNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoLW51bWJlciB7XG4gICAgY29sb3I6IGxpZ2h0LWRhcmsodmFyKC0tc2JiLWNvbG9yLWdyYXBoaXRlKSwgdmFyKC0tc2JiLWNvbG9yLWdyYW5pdGUpKTtcbiAgfVxufVxuXG4uc2JiLXNyLW5hdmlnYXRpb25fX2FkZGl0aW9uYWwtaW5mb3JtYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXg6IDE7XG4gIGNvbHVtbi1nYXA6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDgpO1xuICBwYWRkaW5nLWlubGluZTogc2JiLXNyLWZ1bmN0aW9ucy5zci1weC10by1yZW0oMTYpO1xuICBmb250LWZhbWlseTogdmFyKC0tc2JiLXR5cG8tZm9udC1mYW1pbHkpO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3Jhbml0ZSksIHZhcigtLXNiYi1jb2xvci1ncmFuaXRlKSk7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGNvbG9yOiB2YXIoLS1zYmItY29sb3ItbWlsayk7XG4gIH1cbn1cblxuLnNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoLW51bWJlciB7XG4gIGNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ncmFuaXRlKSwgdmFyKC0tc2JiLWNvbG9yLWdyYXBoaXRlKSk7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ncmFuaXRlKSwgdmFyKC0tc2JiLWNvbG9yLWdyYXBoaXRlKSk7XG4gIH1cblxuICAuc2JiLXNyLW5hdmlnYXRpb25fX2l0ZW0tY29hY2gtdHJhdmVsY2xhc3Mge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTItaW52ZXJ0ZWQpO1xuICB9XG59XG5cbi8vIGdyYXBoaWNhbCBvcmllbnRhdGlvbiBvZiBGSVJTVCBjbGFzc1xuLnNiYi1zci1uYXZpZ2F0aW9uLS1maXJzdC1jbGFzcyB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbSg4KSk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQtYmxvY2stc3RhcnQ6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDMpO1xuICBpbnNldC1pbmxpbmUtc3RhcnQ6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDQpO1xuXG4gIC8vIHVzZSBib3JkZXIgaW5zdGVhZCBvZiBoZWlnaHQgdG8gc3VwcG9ydCBmb3JjZS1jb2xvciBtb2Rlc1xuICBib3JkZXI6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDEpIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItYm9yZGVyLXJhZGl1cy0xeCk7XG4gIG1hcmdpbjogYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLWxlbW9uKTtcbn1cblxuLy8gdGV4dHVhbCBvcmllbnRhdGlvbiBvZiB0cmF2ZWwgY2xhc3Ncbi5zYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC10cmF2ZWxjbGFzcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtaW4taGVpZ2h0OiBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbSgyMCk7XG4gIG1pbi13aWR0aDogc2JiLXNyLWZ1bmN0aW9ucy5zci1weC10by1yZW0oMjApO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItYm9yZGVyLXJhZGl1cy0xeCk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3Jhbml0ZSksIHZhcigtLXNiYi1jb2xvci1ncmFwaGl0ZSkpO1xuICBjb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3Itd2hpdGUpLCB2YXIoLS1zYmItY29sb3ItYmxhY2spKTtcblxuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgYm9yZGVyOiB2YXIoLS1zYmItYm9yZGVyLXdpZHRoLTF4KSBzb2xpZDtcbiAgfVxufVxuXG4vLyAjIyMjIyMjIyMjIyMjIyMjIFZFUlRJQ0FMIE1PREUgc2V0dGluZ3MgIyMjIyMjIyMjIyMjIyMjI1xuOmhvc3QoW3ZlcnRpY2FsXSkgLnNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoIHtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAuc2JiLXNyLW5hdmlnYXRpb25fX2N0cmwtYnV0dG9uIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgaGVpZ2h0OiBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbSg4MCk7XG4gICAgbWluLXdpZHRoOiBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbSgzNik7XG4gIH1cblxuICAuc2JiLXNyLW5hdmlnYXRpb25fX2FkZGl0aW9uYWwtaW5mb3JtYXRpb24ge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICBwYWRkaW5nLWJsb2NrOiBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbSgxNik7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHVuc2V0O1xuICAgIHBhZGRpbmctaW5saW5lLWVuZDogdW5zZXQ7XG4gIH1cblxuICAuc2JiLXNyLW5hdmlnYXRpb24tLWZpcnN0LWNsYXNzIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDgpKTtcbiAgICB3aWR0aDogaW5pdGlhbDtcbiAgICBpbnNldC1pbmxpbmUtZW5kOiBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbSgzKTtcbiAgICBpbnNldC1ibG9jay1zdGFydDogc2JiLXNyLWZ1bmN0aW9ucy5zci1weC10by1yZW0oNCk7XG4gICAgaW5zZXQtaW5saW5lLXN0YXJ0OiBpbml0aWFsO1xuICB9XG5cbiAgJi5maXJzdC1jb2FjaCxcbiAgJi5sYXN0LWNvYWNoIHtcbiAgICAuc2JiLXNyLW5hdmlnYXRpb24tLWZpcnN0LWNsYXNzIHtcbiAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gc2JiLXNyLWZ1bmN0aW9ucy5zci1weC10by1yZW0oMTgpKTtcbiAgICB9XG4gIH1cblxuICAvLyBoYW5kbGUgYm9yZGVyLXJhZGl1c1xuICAmLmZpcnN0LWNvYWNoOm5vdCgubGFzdC1jb2FjaCkge1xuICAgIC5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b246bm90KC5zYmItc3ItbmF2aWdhdGlvbi1kcml2ZXItYXJlYSkge1xuICAgICAgQGluY2x1ZGUgc2JiLXNyLW1peGlucy52aXN1YWxpemUtY29hY2gtYm9yZGVyKDgsIDgsIDIsIDIpO1xuICAgIH1cblxuICAgIC5zYmItc3ItbmF2aWdhdGlvbi0tZmlyc3QtY2xhc3Mge1xuICAgICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiBzYmItc3ItZnVuY3Rpb25zLnNyLXB4LXRvLXJlbShcbiAgICAgICAgdmFyKC0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi10cmF2ZWxjbGFzcy1zcGFjaW5nKVxuICAgICAgKTtcbiAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IGluaXRpYWw7XG4gICAgfVxuICB9XG5cbiAgJi5sYXN0LWNvYWNoOm5vdCguZmlyc3QtY29hY2gpIHtcbiAgICAuc2JiLXNyLW5hdmlnYXRpb25fX2N0cmwtYnV0dG9uOm5vdCguc2JiLXNyLW5hdmlnYXRpb24tZHJpdmVyLWFyZWEpIHtcbiAgICAgIEBpbmNsdWRlIHNiYi1zci1taXhpbnMudmlzdWFsaXplLWNvYWNoLWJvcmRlcigyLCAyLCA4LCA4KTtcbiAgICB9XG5cbiAgICAuc2JiLXNyLW5hdmlnYXRpb24tLWZpcnN0LWNsYXNzIHtcbiAgICAgIG1hcmdpbi1ibG9jay1lbmQ6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKFxuICAgICAgICB2YXIoLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLXRyYXZlbGNsYXNzLXNwYWNpbmcpXG4gICAgICApO1xuICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IGluaXRpYWw7XG4gICAgfVxuICB9XG5cbiAgLy8gRHJpdmVyIGFyZWFcbiAgLnNiYi1zci1uYXZpZ2F0aW9uLWRyaXZlci1hcmVhIHtcbiAgICBoZWlnaHQ6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDgwKTtcbiAgICBtaW4td2lkdGg6IHNiYi1zci1mdW5jdGlvbnMuc3ItcHgtdG8tcmVtKDM2KTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgZm9yY2VUeXBlLFxuICBTYmJFbGVtZW50LFxuICB0eXBlIFNiYkVsZW1lbnRUeXBlLFxuICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsXG4gIHNjcmVlblJlYWRlck9ubHlTdHlsZXMsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcC5qcyc7XG5cbmltcG9ydCB7IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24gfSBmcm9tICcuLi9jb21tb24vdHJhbnNsYXRpb25zLnRzJztcbmltcG9ydCB0eXBlIHsgQ29hY2hJdGVtRGV0YWlscyB9IGZyb20gJy4uL2NvbW1vbi90eXBlcy50cyc7XG5pbXBvcnQgeyBTYmJTZWF0UmVzZXJ2YXRpb25OYXZpZ2F0aW9uU2VydmljZXNFbGVtZW50IH0gZnJvbSAnLi4vc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLXNlcnZpY2VzL3NlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1zZXJ2aWNlcy5jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2guc2Nzcz9pbmxpbmUnO1xuXG5leHBvcnQgY2xhc3MgU2JiU2VsZWN0Q29hY2hFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29hY2hJbmRleDogbnVtYmVyO1xuXG4gIHB1YmxpYyBnZXQgY29hY2hJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb2FjaEluZGV4O1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvYWNoSW5kZXg6IG51bWJlcikge1xuICAgIHN1cGVyKCdzZWxlY3Rjb2FjaCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSk7XG4gICAgdGhpcy5fY29hY2hJbmRleCA9IGNvYWNoSW5kZXg7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCB3aWxsIGRpc3BsYXkgdGhlIG5hdmlnYXRpb24gY29hY2ggaXRlbSBmb3IgU2VhdCByZXNlcnZhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYlNlYXRSZXNlcnZhdGlvbk5hdmlnYXRpb25Db2FjaEVsZW1lbnQgZXh0ZW5kcyBTYmJFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2gnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIGVsZW1lbnREZXBlbmRlbmNpZXM6IFNiYkVsZW1lbnRUeXBlW10gPSBbXG4gICAgU2JiU2VhdFJlc2VydmF0aW9uTmF2aWdhdGlvblNlcnZpY2VzRWxlbWVudCxcbiAgXTtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW3NjcmVlblJlYWRlck9ubHlTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBzZWxlY3Rjb2FjaDogJ3NlbGVjdGNvYWNoJyxcbiAgICBmb2N1c2NvYWNoOiAnZm9jdXNjb2FjaCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFNlbGVjdCBjb2FjaCBwcm9wZXJ0eSAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRm9jdXMgY29hY2ggcHJvcGVydHkgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogSG92ZXIgY29hY2ggcHJvcGVydHkgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGhvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTmF0aXZlIGZvY3VzIGZvciB0aGlzIG5hdmlnYXRpb24gY29hY2ggaXMgYWxzbyBzZXQgd2hlbiB0aGUgZm9jdXNlZCBwcm9wZXJ0eSBpcyBjaGFuZ2VkICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBuYXRpdmVGb2N1c0FjdGl2ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaW5kZXg6IG51bWJlciA9IDA7XG5cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnY29hY2gtaXRlbS1kZXRhaWxzJywgdHlwZTogT2JqZWN0IH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBjb2FjaEl0ZW1EZXRhaWxzOiBDb2FjaEl0ZW1EZXRhaWxzID0gPENvYWNoSXRlbURldGFpbHM+e307XG5cbiAgLyoqIERpc2FibGUgdGhlIGNvYWNoIG5hdmlnYXRpb24gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Rpc2FibGUnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBkaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIElmIHRoZSBjb2FjaCBuYXZpZ2F0aW9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgdmVydGljYWxseSAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSwgdXNlRGVmYXVsdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgdmVydGljYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRGlzYWJsZSB0aGUgbW91c2Ugb3ZlciB0aXRsZSBpbmZvcm1hdGlvbiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc2hvd1RpdGxlSW5mbzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3NlbGVjdGVkJykpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTmF2QnV0dG9uRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5zYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b24nLFxuICAgICAgKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmIHNlbGVjdGVkTmF2QnV0dG9uRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVGb2N1c0FjdGl2ZSkge1xuICAgICAgICAgIHNlbGVjdGVkTmF2QnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBFbWl0cyB3aGVuIGEgbmF2IGNvYWNoIGhhcyB0aGUgZm9jdXMgKi9cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZm9jdXNjb2FjaCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2ZvY3VzZWQnKSAmJiB0aGlzLmZvY3VzZWQpIHtcbiAgICAgIGNvbnN0IGZvY3VzZWROYXZCdXR0b25FbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnNiYi1zci1uYXZpZ2F0aW9uX19jdHJsLWJ1dHRvbicsXG4gICAgICApIGFzIEhUTUxCdXR0b25FbGVtZW50O1xuXG4gICAgICBpZiAoZm9jdXNlZE5hdkJ1dHRvbkVsZW1lbnQgJiYgdGhpcy5uYXRpdmVGb2N1c0FjdGl2ZSkge1xuICAgICAgICBmb2N1c2VkTmF2QnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBsaXN0IG9mIHNlcnZpY2UgaWNvbnMgcHJvdmlkZWQgYnkgYSBjYWxsZXJcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiJHtjbGFzc01hcCh7XG4gICAgICAgICAgJ3NiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoJzogdHJ1ZSxcbiAgICAgICAgICAnbGFzdC1jb2FjaCc6IHRoaXMuY29hY2hJdGVtRGV0YWlscy5kcml2ZXJBcmVhU2lkZT8ucmlnaHQgfHwgZmFsc2UsXG4gICAgICAgICAgJ2ZpcnN0LWNvYWNoJzogdGhpcy5jb2FjaEl0ZW1EZXRhaWxzLmRyaXZlckFyZWFTaWRlPy5sZWZ0IHx8IGZhbHNlLFxuICAgICAgICAgICdzYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC0tc2VsZWN0ZWQnOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICAgICdzYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC0tZm9jdXNlZCc6IHRoaXMuZm9jdXNlZCxcbiAgICAgICAgICAnc2JiLXNyLW5hdmlnYXRpb25fX2l0ZW0tY29hY2gtLWhvdmVyZWQnOiB0aGlzLmhvdmVyZWQsXG4gICAgICAgIH0pfVwiXG4gICAgICA+XG4gICAgICAgICR7dGhpcy5fZ2V0TmF2aWdhdGlvbkJ1dHRvbigpfVxuICAgICAgICAke3RoaXMuY29hY2hJdGVtRGV0YWlscy5wcm9wZXJ0eUlkcz8ubGVuZ3RoXG4gICAgICAgICAgPyBodG1sYDxzYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLXNlcnZpY2VzXG4gICAgICAgICAgICAgID92ZXJ0aWNhbD1cIiR7dGhpcy52ZXJ0aWNhbH1cIlxuICAgICAgICAgICAgICAucHJvcGVydHlJZHM9XCIke3RoaXMuY29hY2hJdGVtRGV0YWlscy5wcm9wZXJ0eUlkc31cIlxuICAgICAgICAgICAgICA/c2hvd1RpdGxlSW5mbz1cIiR7dGhpcy5zaG93VGl0bGVJbmZvfVwiXG4gICAgICAgICAgICA+PC9zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLXNlcnZpY2VzPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TmF2aWdhdGlvbkJ1dHRvbigpOiBUZW1wbGF0ZVJlc3VsdCB8IG51bGwge1xuICAgIGNvbnN0IGN1cnJTZXJ2aWNlQ2xhc3NOdW1iZXIgPSB0aGlzLl9nZXRDb2FjaFNlcnZpY2VDbGFzc051bWJlcigpO1xuICAgIGNvbnN0IHRpdGxlRGVzY3JpcHRpb25OYXZDb2FjaEJ1dHRvbiA9XG4gICAgICB0aGlzLl9nZXRUaXRsZURlc2NyaXB0aW9uTmF2Q29hY2hCdXR0b24oY3VyclNlcnZpY2VDbGFzc051bWJlcik7XG4gICAgY29uc3QgYXJpYURlc2NyaXB0aW9uQ29hY2hTZXJ2aWNlcyA9IHRoaXMuX2dldEFyaWFEZXNjcmlwdGlvbkNvYWNoU2VydmljZXMoKTtcblxuICAgIHJldHVybiBodG1sYCA8YnV0dG9uXG4gICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9zZWxlY3ROYXZDb2FjaCh0aGlzLmluZGV4KX1cbiAgICAgIGNsYXNzPVwiJHtjbGFzc01hcCh7XG4gICAgICAgICdzYmItc3ItbmF2aWdhdGlvbl9fY3RybC1idXR0b24nOiB0cnVlLFxuICAgICAgICAnc2JiLXNyLW5hdmlnYXRpb24tZHJpdmVyLWFyZWEnOiB0aGlzLmNvYWNoSXRlbURldGFpbHMuaXNEcml2ZXJBcmVhLFxuICAgICAgfSl9XCJcbiAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlfVwiXG4gICAgICB0aXRsZT1cIiR7dGhpcy5zaG93VGl0bGVJbmZvID8gdGl0bGVEZXNjcmlwdGlvbk5hdkNvYWNoQnV0dG9uIDogbm90aGluZ31cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwibmF2LWNvYWNoLXNlcnZpY2UtZGVzY3JpcHRpb25zLSR7dGhpcy5pbmRleH1cIlxuICAgID5cbiAgICAgICR7dGhpcy5fZ2V0QnRuSW5mb3JtYXRpb24oY3VyclNlcnZpY2VDbGFzc051bWJlcil9XG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIiBpZD1cIm5hdi1jb2FjaC1zZXJ2aWNlLWRlc2NyaXB0aW9ucy0ke3RoaXMuaW5kZXh9XCI+XG4gICAgICAgICR7IXRoaXMuc2hvd1RpdGxlSW5mbyA/IGh0bWxgPGRpdj4ke3RpdGxlRGVzY3JpcHRpb25OYXZDb2FjaEJ1dHRvbn08L2Rpdj5gIDogbm90aGluZ31cbiAgICAgICAgJHthcmlhRGVzY3JpcHRpb25Db2FjaFNlcnZpY2VzID8gaHRtbGA8ZGl2PiR7YXJpYURlc2NyaXB0aW9uQ29hY2hTZXJ2aWNlc308L2Rpdj5gIDogbm90aGluZ31cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5gO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QnRuSW5mb3JtYXRpb24oc2VydmljZUNsYXNzTnVtYmVyOiBudW1iZXIgfCBudWxsKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb2FjaEl0ZW1EZXRhaWxzLmlzRHJpdmVyQXJlYSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICAke3NlcnZpY2VDbGFzc051bWJlciA9PT0gMVxuICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItc3ItbmF2aWdhdGlvbi0tZmlyc3QtY2xhc3NcIj48L3NwYW4+YFxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAke3RoaXMuY29hY2hJdGVtRGV0YWlscy50cmF2ZWxDbGFzcz8ubGVuZ3RoID4gMCB8fCB0aGlzLmNvYWNoSXRlbURldGFpbHMuaWRcbiAgICAgICAgPyBodG1sYDxkaXYgY2xhc3M9XCJzYmItc3ItbmF2aWdhdGlvbl9fYWRkaXRpb25hbC1pbmZvcm1hdGlvblwiPlxuICAgICAgICAgICAgJHt0aGlzLmNvYWNoSXRlbURldGFpbHMuaWRcbiAgICAgICAgICAgICAgPyBodG1sYDxkaXYgY2xhc3M9XCJzYmItc3ItbmF2aWdhdGlvbl9faXRlbS1jb2FjaC1udW1iZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5jb2FjaEl0ZW1EZXRhaWxzLmlkfVxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAke3NlcnZpY2VDbGFzc051bWJlciA/PyBub3RoaW5nfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uX19pdGVtLWNvYWNoLXRyYXZlbGNsYXNzXCJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHtzZXJ2aWNlQ2xhc3NOdW1iZXJ9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIDogbm90aGluZ31cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGl0bGVEZXNjcmlwdGlvbk5hdkNvYWNoQnV0dG9uKHNlcnZpY2VDbGFzc051bWJlcjogbnVtYmVyIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY29hY2hJdGVtRGV0YWlscy5pc0RyaXZlckFyZWEgJiYgIXRoaXMuY29hY2hJdGVtRGV0YWlscy5pc0xvY29tb3RpdmUpIHtcbiAgICAgIHJldHVybiBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdOQVZJR0FURV9DT0FDSF9CTE9DS0VEJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCwgW1xuICAgICAgICB0aGlzLmNvYWNoSXRlbURldGFpbHMuaWQsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb2FjaEl0ZW1EZXRhaWxzLmlzTG9jb21vdGl2ZSkge1xuICAgICAgcmV0dXJuIGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oJ0NPQUNIX0xPQ09NT1RJVkUnLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBsZXQgbGFiZWwgPSBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdOQVZJR0FURV9UT19DT0FDSCcsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsIFtcbiAgICAgIHRoaXMuY29hY2hJdGVtRGV0YWlscy5pZCxcbiAgICBdKTtcblxuICAgIC8vSWYgc2VydmljZSBjbGFzcyBleGlzdCwgdGhlbiBleHBhbmQgbGFiZWwgd2l0aCBzZXJ2aWNlIGNsYXNzIHRyYW5zbGF0aW9uXG4gICAgaWYgKHNlcnZpY2VDbGFzc051bWJlcikge1xuICAgICAgY29uc3Qgc2VydmljZUNsYXNzVHJhbnNsYXRpb25LZXkgPVxuICAgICAgICBzZXJ2aWNlQ2xhc3NOdW1iZXIgPT09IDEgPyAnU0VSVklDRV9DTEFTU19GSVJTVCcgOiAnU0VSVklDRV9DTEFTU19TRUNPTkQnO1xuICAgICAgY29uc3Qgc2VydmljZUNsYXNzVHJhbnNsYXRpb24gPSBnZXRJMThuU2VhdFJlc2VydmF0aW9uKFxuICAgICAgICBzZXJ2aWNlQ2xhc3NUcmFuc2xhdGlvbktleSxcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzZXJ2aWNlQ2xhc3NMYWJlbCA9IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICdOQVZJR0FURV9UT19DT0FDSF9TRVJWSUNFX0NMQVNTX1NVQicsXG4gICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgIFtzZXJ2aWNlQ2xhc3NUcmFuc2xhdGlvbl0sXG4gICAgICApO1xuICAgICAgbGFiZWwgPSBsYWJlbC5jb25jYXQoc2VydmljZUNsYXNzTGFiZWwpO1xuICAgIH1cblxuICAgIC8vIEV4cGFuZHMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgc2VhdHMgYW5kIGJpY3ljbGUgc3BhY2VzIGFzIGluZm9cbiAgICBjb25zdCBmcmVlUGxhY2VzVHh0ID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICdDT0FDSF9BVkFJTEFCTEVfTlVNQkVSX09GX1BMQUNFUycsXG4gICAgICB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LFxuICAgICAgW3RoaXMuY29hY2hJdGVtRGV0YWlscy5mcmVlUGxhY2VzPy5zZWF0cywgdGhpcy5jb2FjaEl0ZW1EZXRhaWxzLmZyZWVQbGFjZXM/LmJpY3ljbGVzXSxcbiAgICApO1xuICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KCcuICcpLmNvbmNhdChmcmVlUGxhY2VzVHh0KTtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBwcml2YXRlIF9nZXRBcmlhRGVzY3JpcHRpb25Db2FjaFNlcnZpY2VzKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGxldCBhcmlhRGVzY3JpcHRpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLmNvYWNoSXRlbURldGFpbHMucHJvcGVydHlJZHM/Lmxlbmd0aCkge1xuICAgICAgYXJpYURlc2NyaXB0aW9uID1cbiAgICAgICAgZ2V0STE4blNlYXRSZXNlcnZhdGlvbignQ09BQ0hfQVZBSUxBQkxFX1NFUlZJQ0VTJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCkgKyAnOiAnO1xuICAgICAgYXJpYURlc2NyaXB0aW9uICs9XG4gICAgICAgIHRoaXMuY29hY2hJdGVtRGV0YWlscy5wcm9wZXJ0eUlkc1xuICAgICAgICAgIC5tYXAoKHByb3BlcnR5SWQpID0+IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24ocHJvcGVydHlJZCwgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCkpXG4gICAgICAgICAgLmpvaW4oKSArICcuJztcbiAgICB9XG4gICAgcmV0dXJuIGFyaWFEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbWl0cyB0aGUgaW5kZXggb2YgdGhlIGNvYWNoIGFycmF5IGZvciB0aGUgbWFpbiBuYXZpZ2F0aW9uLlxuICAgKiBAcGFyYW0gc2VsZWN0Y29hY2hcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NlbGVjdE5hdkNvYWNoKHNlbGVjdGNvYWNoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7U2JiU2VsZWN0Q29hY2hFdmVudH1cbiAgICAgKiBFbWl0cyB3aGVuIGEgY29hY2ggd2l0aGluIHRoZSBuYXZpZ2F0aW9uIHdhcyBzZWxlY3RlZCBhbmQgcmV0dXJucyB0aGUgY2xpY2tlZCBjb2FjaCBuYXYgaW5kZXguXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTYmJTZWxlY3RDb2FjaEV2ZW50KHNlbGVjdGNvYWNoKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb2FjaFNlcnZpY2VDbGFzc051bWJlcigpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb2FjaEl0ZW1EZXRhaWxzLnRyYXZlbENsYXNzPy5pbmNsdWRlcygnRklSU1QnKVxuICAgICAgPyAxXG4gICAgICA6IHRoaXMuY29hY2hJdGVtRGV0YWlscy50cmF2ZWxDbGFzcz8uaW5jbHVkZXMoJ1NFQ09ORCcpXG4gICAgICAgID8gMlxuICAgICAgICA6IG51bGw7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2gnOiBTYmJTZWF0UmVzZXJ2YXRpb25OYXZpZ2F0aW9uQ29hY2hFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FDd0JBLElBQWEsc0JBQWIsY0FBeUMsTUFBSztDQUc1QyxJQUFXLGFBQVU7RUFDbkIsT0FBTyxLQUFLO0NBQ2Q7Q0FFQSxZQUFtQixZQUFrQjtFQUNuQyxNQUFNLGVBQWU7R0FBRSxTQUFTO0dBQU0sVUFBVTtFQUFJLENBQUU7RUFDdEQsS0FBSyxjQUFjO0NBQ3JCOzs7OztJQU1XLGtEQUF3QzttQkFBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQUFqRCxpREFBaUQsWUFBVTs7O0dBY3RELEtBQUEsNkJBQUEsa0JBQUEsTUFBQSx3QkFBb0IsS0FBSztHQUt6QixLQUFBLDZCQUFBLGtCQUFBLE1BQUEsMkJBQUEsR0FBQSxrQkFBQSxNQUFBLHVCQUFtQixLQUFLO0dBS3hCLEtBQUEsNkJBQUEsa0JBQUEsTUFBQSwwQkFBQSxHQUFBLGtCQUFBLE1BQUEsdUJBQW1CLEtBQUs7R0FLeEIsS0FBQSx1Q0FBQSxrQkFBQSxNQUFBLDBCQUFBLEdBQUEsa0JBQUEsTUFBQSxpQ0FBNkIsSUFBSTtHQUlqQyxLQUFBLDJCQUFBLGtCQUFBLE1BQUEsb0NBQUEsR0FBQSxrQkFBQSxNQUFBLHFCQUFnQixDQUFDO0dBR2pCLEtBQUEsc0NBQUEsa0JBQUEsTUFBQSx3QkFBQSxHQUFBLGtCQUFBLE1BQUEsZ0NBQXVELENBQUEsQ0FBRTtHQUt6RCxLQUFBLDZCQUFBLGtCQUFBLE1BQUEsbUNBQUEsR0FBQSxrQkFBQSxNQUFBLHVCQUFtQixLQUFLO0dBS3hCLEtBQUEsOEJBQUEsa0JBQUEsTUFBQSwwQkFBQSxHQUFBLGtCQUFBLE1BQUEsd0JBQW9CLEtBQUs7R0FLekIsS0FBQSxtQ0FBQSxrQkFBQSxNQUFBLDJCQUFBLEdBQUEsa0JBQUEsTUFBQSw2QkFBeUIsS0FBSztHQUV0QyxLQUFBLGFBQVMs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