/**
 * ----------------------
 * Un.titled
 * Main - Global
 * ----------------------
 */
/**
 * Dependencies
  */
/**
 * Config
 */
/**
* ----------------------
* Un.titled
* Config - Vars
* ----------------------
*/
:root {
  --c-primary: #000;
  --c-red: #F8362A;
  --c-black: #000;
  --c-dark: #1d1d1b;
  --c-dark-light: #1d1d1bde;
  --c-white: #fff;
  --bumpUnit: 4px;
  --bump: calc(var(--bumpUnit) * 8);
}

/**
 * Breakpoints
 */
/**
 * Helpers

@import 'helpers/focus-visible';
@import 'helpers/font-smoothing';
@import 'helpers/table';
 */
.header .headerLeft li {
  margin-right: 13px;
}
@media screen and (max-width: 995px) {
  .header .headerLeft li {
    margin-right: 4px;
  }
}
.header .headerRight {
  bottom: 2px;
}
@media screen and (max-width: 1171px) {
  .header .headerRight {
    bottom: -2px;
  }
}
@media screen and (max-width: 990px) {
  .header .headerRight {
    bottom: -3px;
  }
}
.header .headerRight .icon-account {
  position: relative;
  display: inline-block;
  width: 28px;
  height: 24px;
  margin-left: 8px;
}
.header .headerRight .icon-account:hover {
  opacity: 0.6;
  border: 0;
}
.header .headerRight .icon-account:after {
  content: "";
  position: absolute;
  left: 0;
  width: 28px;
  height: 24px;
  background-image: url("../images/icons/icon-account.png");
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
}
@media screen and (max-width: 73.125em) {
  .header .headerRight .icon-account {
    width: 16px;
    height: 15px;
  }
  .header .headerRight .icon-account:after {
    width: 18px;
    height: 15px;
  }
}
@media screen and (max-width: 775px) {
  .header .headerRight .icon-account {
    margin-left: 6px;
  }
}
.header .headerRight .menu li {
  margin-left: 8px;
}
@media screen and (max-width: 775px) {
  .header .headerRight .menu li {
    margin-left: 4px;
  }
}
.header .headerRight .menu.basket.activeBasket.activeMobileBasket li {
  z-index: 1;
  width: auto;
}
.header .headerRight .menu.basket ul li a {
  color: #000;
  font-weight: 500;
}
.header .headerRight .menu.basket ul li a span {
  font-weight: 600;
}
@media screen and (max-width: 775px) {
  .header .headerRight .icon-search {
    margin-right: 2px;
  }
}
.header .headerRight .basket ul:before {
  height: 50px;
}
.header .mobileNavShortcuts .mobileBasket ul li.dottedBorder {
  width: auto;
}
.header .mobileNavShortcuts ul li a {
  color: #000;
  font-weight: 500;
}
.header .mobileNavShortcuts ul li a span {
  font-weight: 600;
}

.spektrix-signup__heading {
  letter-spacing: normal;
  font-family: "ff-din-web", sans-serif;
  margin: 0 0 1rem;
  font-style: normal;
  font-weight: 700;
  margin-bottom: 2.5rem;
  margin-top: 0;
  position: relative;
  color: #1d1d1b;
}
.spektrix-signup__container {
  width: 100%;
  max-width: 670px;
  margin: 40px 0;
}
.spektrix-signup__container > form > label {
  display: block;
  margin-bottom: 10px;
  font-size: 18px;
  font-style: normal;
  font-weight: 700;
  line-height: 24px;
}
.spektrix-signup__container input:not(.ItemEditButton):not(.ItemDeleteButton):not([type=submit]):not([type=button]):not([type=radio]):not([type=checkbox]),
.spektrix-signup__container input[type=email],
.spektrix-signup__container input[type=password],
.spektrix-signup__container input[type=text],
.spektrix-signup__container select,
.spektrix-signup__container textarea {
  background-color: #fff;
  border: 1px solid #979797;
  border-radius: 0;
  color: #1d1d1b;
  font-size: 1em;
  outline: 0;
  padding: 10px 12px;
  line-height: 1.6rem;
  resize: none;
  transition: all 0.1s cubic-bezier(0.3, 0.65, 0.72, 0.63);
  width: 100%;
  margin: 0 0 10px;
}
@media (max-width: 767px) {
  .spektrix-signup__container input:not(.ItemEditButton):not(.ItemDeleteButton):not([type=submit]):not([type=button]):not([type=radio]):not([type=checkbox]),
  .spektrix-signup__container input[type=email],
  .spektrix-signup__container input[type=password],
  .spektrix-signup__container input[type=text],
  .spektrix-signup__container select,
  .spektrix-signup__container textarea {
    max-width: none;
  }
}
.spektrix-signup__container input[type=submit] {
  font-family: "ff-din-web", sans-serif;
  font-weight: 600;
  cursor: pointer;
  display: inline-flex;
  justify-content: center;
  align-items: center;
  padding: 4px 24px;
  font-size: 16.172px;
  font-style: normal;
  line-height: 24px;
  min-width: 125px;
  min-height: 50px;
  background-color: var(--c-dark);
  color: var(--c-white);
  text-decoration: none;
  border: 0;
  text-align: center;
  -moz-text-align-last: center;
  text-align-last: center;
  transition: 0.2s cubic-bezier(0.3, 0.65, 0.72, 0.63);
  margin: 30px 0;
}

.BookingModal {
  display: none;
}

.fluid-width-video-wrapper.cookie-denied-message {
  padding: 0 !important;
}

/**
 * Base

@import 'base/defaults';
@import 'base/typography';
@import 'base/main';
 */
/**
* Atoms

@import 'atoms/nav-toggle';
@import 'atoms/image-credit';
@import 'atoms/pager';
*/
/**
 * ----------------------
 * Un.titled
 * Atoms - Buttons
 * ----------------------
 */
/**
 * Config
 **/
/**
 * Styles
 **/
.a-btn {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  font-size: 20px;
  font-style: normal;
  font-weight: 500;
  line-height: 30px;
  padding: calc(var(--bumpUnit) * 3) calc(var(--bumpUnit) * 4);
  text-decoration: none;
  text-align: center;
  background: var(--c-primary);
  color: var(--c-white);
  border: 1px solid var(--c-primary);
  text-align: left;
}
.a-btn:hover, .a-btn:focus {
  background: var(--c-white);
  color: var(--c-primary);
  border: 1px solid var(--c-primary);
}

.a-btn--alt {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  font-size: 20px;
  font-style: normal;
  font-weight: 500;
  line-height: 30px;
  padding: calc(var(--bumpUnit) * 3) calc(var(--bumpUnit) * 4);
  text-decoration: none;
  text-align: center;
  background: var(--c-primary);
  color: var(--c-white);
  border: 1px solid var(--c-primary);
  text-align: left;
  background: var(--c-white);
  color: var(--c-black);
  border: 1px solid var(--c-black);
}
.a-btn--alt:hover, .a-btn--alt:focus {
  background: var(--c-white);
  color: var(--c-primary);
  border: 1px solid var(--c-primary);
  background: var(--c-black);
  color: var(--c-white);
  border: 1px solid var(--c-black);
}

/**
 * Molecules

@import 'molecules/emmsg';
@import 'molecules/blocks';
@import 'molecules/forms';
@import 'molecules/nav';
@import 'molecules/banner';
@import 'molecules/teaser';
 */
/**
 * Organisims

@import 'organisms/header';
@import 'organisms/footer';
@import 'organisms/search-results';
@import 'organisms/sidebar';
@import 'organisms/teaser-section';
 */
.ReactModalPortal {
  font-family: "ff-din-web";
  position: relative;
  z-index: 100000;
}
.ReactModalPortal .ReactModal__Overlay {
  position: fixed;
  inset: 0;
  background-color: rgba(255, 255, 255, 0.75);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow-y: auto;
}
.ReactModalPortal .ReactModal__Content {
  position: absolute;
  inset: auto !important;
  top: 10% !important;
  width: 67.32%;
  border: 1px solid #ccc;
  background: #fff;
  overflow: auto;
  border-radius: 4px;
  outline: none;
  padding: 20px;
}
@media (max-width: 767px) {
  .ReactModalPortal .ReactModal__Content {
    width: 85%;
  }
}
.ReactModal__Body--open {
  overflow: hidden;
}

.react-calendar__navigation {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}
.react-calendar__navigation__arrow {
  display: flex;
  padding: 16px;
  align-items: flex-start;
  gap: 10px;
  line-height: 0;
  background-color: transparent;
  border: 0;
  color: transparent;
  cursor: pointer;
}
.react-calendar__navigation__prev-button, .react-calendar__navigation__next-button {
  background-image: url(../svg/icon-left-chevron.svg);
  background-size: 14px;
  background-repeat: no-repeat;
  background-position: center;
}
.react-calendar__navigation__prev-button[disabled] {
  background-image: url(../svg/icon-right-chevron-disabled.svg);
  transform: rotate(180DEG);
  cursor: none;
  pointer-events: none;
}
.react-calendar__navigation__next-button {
  transform: rotate(180DEG);
}
.react-calendar__navigation__next-button[disabled] {
  background-image: url(../svg/icon-right-chevron-disabled.svg);
  transform: none;
  cursor: none;
  pointer-events: none;
}
.react-calendar__navigation__prev2-button, .react-calendar__navigation__next2-button {
  display: none;
}
.react-calendar__navigation__label {
  flex-grow: unset !important;
  background: transparent;
  border: 0;
  pointer-events: none;
  cursor: none;
  font-size: 20px;
  font-weight: 600;
  color: var(--c-black);
}
.react-calendar__month-view__weekdays {
  display: flex;
  flex-wrap: nowrap;
}
.react-calendar__month-view__weekdays__weekday {
  flex: 0 0 14.2857%;
  overflow: hidden;
  text-align: center;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 20px 0;
}
.react-calendar__month-view__weekdays__weekday abbr {
  font-size: 14px;
  font-style: normal;
  font-weight: 400;
  text-decoration: none;
}
.react-calendar__month-view__days {
  display: flex;
  flex-wrap: wrap;
}
.react-calendar__month-view__days__day {
  position: relative;
  flex: 0 0 14.2857%;
  overflow: hidden;
  text-align: center;
  padding: 20px 0;
  cursor: pointer;
  background-color: transparent;
  border: 0;
  border: 1px solid var(--Stroke, #D5D4DF);
}
.react-calendar__month-view__days__day:disabled {
  cursor: unset;
  border: 1px solid var(--Stroke, #D5D4DF);
  background: var(--Inactive, #F2F3F7);
}
.react-calendar__month-view__days__day[disabled] abbr:after {
  display: none;
}
.react-calendar__month-view__days__day abbr {
  font-size: 14px;
  font-style: normal;
  font-weight: 400;
  text-decoration: none;
}
.react-calendar__month-view__days__day abbr:after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 25%;
  transform: translateX(-50%);
  background: #000;
  height: 4px;
  width: 4px;
  border-radius: 70%;
}
.react-calendar__tile--active {
  border: 1px solid var(--Stroke, #000000);
}

.o-calendar-modal__super-title {
  color: #808080;
  font-size: 20px;
  font-style: normal;
  font-weight: 700;
  line-height: 30px; /* 150% */
  letter-spacing: -1.2px;
  text-transform: capitalize;
}
.o-calendar-modal__title {
  font-size: 27.539px;
  font-style: normal;
  font-weight: 700;
  line-height: 30px;
  letter-spacing: -1.2px;
  color: #000;
  margin: 0 0 calc(var(--bump) / 2) !important;
}
.o-calendar-modal__available-times {
  margin-top: 20px;
  text-align: center;
}
.o-calendar-modal__available-times h3 {
  margin: 80px 0 18px;
}
.o-calendar-modal__available-times p {
  margin: 0 0 48px;
}
.o-calendar-modal__available-times__booking-buttons {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
}
.o-calendar-modal__available-times__booking-buttons a.button {
  padding: 20px;
  background-color: rgba(0, 164, 171, 0.08);
  box-shadow: none;
  border: 1px solid var(--Stroke, #D5D4DF);
  color: #000;
  text-align: center;
  text-decoration: none;
  font-size: 14px;
}
.o-calendar-modal__available-times__booking-buttons a.button:hover {
  border: 1px solid #000;
}
.o-calendar-modal__available-times__booking-buttons a.button:active {
  border: 1px solid #000;
}
@media (max-width: 767px) {
  .o-calendar-modal__available-times__booking-buttons a.button > span {
    display: none;
  }
}
.o-calendar-modal__available-times__booking-buttons a.button[data-label=limited-availability] {
  border: 1px #000;
  background: rgba(254, 243, 146, 0.4);
}
.o-calendar-modal__available-times__booking-buttons a.button[data-label=last-few] {
  border: 1px solid var(--Stroke, #D5D4DF);
  background: rgba(248, 54, 42, 0.25);
}
.o-calendar-modal__available-times__booking-buttons a.button[data-label=selling-fast] {
  border: 1px solid var(--Stroke, #D5D4DF);
  background: rgba(253, 126, 20, 0.25);
}
.o-calendar-modal__available-times__booking-buttons a.button[data-label=fully-booked] {
  border: 1px solid var(--Stroke, #D5D4DF);
  background: rgba(248, 54, 42, 0.25);
}
.o-calendar-modal__event-date, .o-calendar-modal__event-location {
  position: relative;
  display: inline-flex;
  font-size: 18px;
  font-style: normal;
  font-weight: 400;
  line-height: 25.2px;
  letter-spacing: -0.4px;
}
.o-calendar-modal__event-date:before, .o-calendar-modal__event-location:before {
  content: "";
  position: relative;
  display: inline-flex;
  margin: 0 calc(var(--bumpUnit) * 2) 0 0;
  height: calc(var(--bumpUnit) * 6);
  width: calc(var(--bumpUnit) * 6);
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  background-color: transparent;
  border: 0;
}
@media (max-width: 767px) {
  .o-calendar-modal__event-date, .o-calendar-modal__event-location {
    display: flex;
  }
}
.o-calendar-modal__event-location {
  margin: 0 0 0 var(--bump);
}
.o-calendar-modal__event-location:before {
  background-image: url("../svg/icon-location.svg");
}
@media (max-width: 767px) {
  .o-calendar-modal__event-location {
    margin: 0 0 var(--bump) 0;
  }
}
.o-calendar-modal__event-date:before {
  background-image: url("../svg/icon-calendar.svg");
}
.o-calendar-modal__close {
  position: absolute;
  right: 20px;
  text-align: left;
  text-indent: -9999px;
  height: 16px;
  width: 16px;
  background-image: url("../svg/icon-cross.svg");
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  background-color: transparent;
  border: 0;
  cursor: pointer;
}

/**
 * Templates
 */
/**
  * Core
*/
.mediaBlock .page-template-templates-firstthursdays .twitterFeed {
  display: none !important;
}
.mediaBlock .category_name {
  height: 45px !important;
  display: block !important;
}
.mediaBlock .category_name--new {
  font-family: "ff-din-web";
  font-weight: 900;
  margin: 0;
}
.mediaBlock .category_button a {
  color: white !important;
  background-color: #F47F53 !important;
  padding: 6px 13px 5px 13px !important;
  text-align: center !important;
  width: 175px !important;
  margin: 0 auto 0 0 !important;
  display: block !important;
  cursor: pointer !important;
}
.mediaBlock .category_date {
  margin-bottom: 10px;
}
.mediaBlock .category_meta_title {
  font-size: 1em;
  margin-bottom: 10px;
  min-height: 60px !important;
  height: 100% !important;
}

.oneThirdMedia {
  display: grid;
  grid-gap: 15px;
}
.oneThirdMedia > * {
  margin-bottom: 0 !important;
}

/**
  * Spektrix
*/
/*  tailwind  */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}
.static {
  position: static;
}
.block {
  display: block;
}
.flex {
  display: flex;
}
.table {
  display: table;
}
.hidden {
  display: none;
}
.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.resize {
  resize: both;
}
.items-center {
  align-items: center;
}
.justify-between {
  justify-content: space-between;
}
.border {
  border-width: 1px;
}
.p-3 {
  padding: 0.75rem;
}
.font-semibold {
  font-weight: 600;
}
.capitalize {
  text-transform: capitalize;
}
.underline {
  text-decoration-line: underline;
}
.shadow {
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
#SpektrixIFrame {
  margin: 50px 0 0;
}
@media (min-width: 768px) {
  .md\:p-9 {
    padding: 2.25rem;
  }
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzL2dsb2JhbC5jc3MiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0VBQUE7QUFPQTs7R0FBQTtBQVNDOztFQUFBO0FDaEJEOzs7OztDQUFBO0FBTUE7RUFDSTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0FEWUo7O0FDSEE7O0VBQUE7QURGQzs7Ozs7O0VBQUE7QUVyQk87RUFDSTtBRnVDWjtBRXJDWTtFQUhKO0lBSVE7RUZ3Q2Q7QUFDRjtBRXBDSTtFQUdJO0FGb0NSO0FFbENRO0VBTEo7SUFNUTtFRnFDVjtBQUNGO0FFbkNRO0VBVEo7SUFVUTtFRnNDVjtBQUNGO0FFcENRO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBRnNDWjtBRXBDWTtFQUNJO0VBQ0E7QUZzQ2hCO0FFbkNZO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FGcUNoQjtBRWxDWTtFQXhCSjtJQXlCUTtJQUNBO0VGcUNkO0VFbkNjO0lBQ0k7SUFDQTtFRnFDbEI7QUFDRjtBRWxDWTtFQWxDSjtJQW1DUTtFRnFDZDtBQUNGO0FFakNZO0VBQ0k7QUZtQ2hCO0FFakNnQjtFQUhKO0lBSVE7RUZvQ2xCO0FBQ0Y7QUU5QndCO0VBQ0k7RUFDQTtBRmdDNUI7QUV6QndCO0VBQ0k7RUFDQTtBRjJCNUI7QUV6QjRCO0VBQ0k7QUYyQmhDO0FFaEJZO0VBREo7SUFFUTtFRm1CZDtBQUNGO0FFZlk7RUFDSTtBRmlCaEI7QUVQb0I7RUFDSTtBRlN4QjtBRUFnQjtFQUNJO0VBQ0E7QUZFcEI7QUVBb0I7RUFDSTtBRkV4Qjs7QUVPSTtFQUVJO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBRkpSO0FFT0k7RUFDSTtFQUNBO0VBQ0E7QUZMUjtBRVFZO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FGTmhCO0FFVVE7Ozs7OztFQU1JO0VBQ0E7RUFFQTtFQUNBO0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBRlRaO0FFWVE7RUFDSTs7Ozs7O0lBTUk7RUZWZDtBQUNGO0FFYVE7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUZYWjs7QUVnQkE7RUFDSTtBRmJKOztBRWtCSTtFQUNJO0FGZlI7O0FBN0xDOzs7Ozs7RUFBQTtBQVFBOzs7Ozs7Q0FBQTtBR3pDRDs7Ozs7RUFBQTtBQU9BOztHQUFBO0FBbURFOztHQUFBO0FBSUE7RUE1Q0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FIME9KO0FHeE9JO0VBdEJBO0VBQ0E7RUFDQTtBSGlRSjs7QUc3TUU7RUFoREU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBZ0JBO0VBQ0E7RUFDQTtBSGtQSjtBR2xRSTtFQXRCQTtFQUNBO0VBQ0E7RUEyQkE7RUFDQTtFQUNBO0FIOFBKOztBQXZQQzs7Ozs7Ozs7O0VBQUE7QUFXQTs7Ozs7Ozs7RUFBQTtBSTNERDtFQUNJO0VBQ0E7RUFDQTtBSmtVSjtBSS9USTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FKaVVOO0FJeFRJO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUowVE47QUtpTkk7RURyaEJBO0lBYUk7RUoyVE47QUFDRjtBSWxUQTtFQUNJO0FKb1RKOztBSTlTSTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0FKaVRSO0FJOVNRO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FKZ1RaO0FJN1NRO0VBRUk7RUFDQTtFQUNBO0VBQ0E7QUo4U1o7QUkxU1k7RUFDSTtFQUNBO0VBQ0E7RUFDQTtBSjRTaEI7QUl4U1E7RUFDSTtBSjBTWjtBSXpTWTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0FKMlNoQjtBSXZTUTtFQUVJO0FKd1NaO0FJcFNRO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBSnNTWjtBSTlRUTtFQUNJO0VBQ0E7QUpnUlo7QUk3UVk7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FKK1FoQjtBSW5RZ0I7RUFDSTtFQUNBO0VBQ0E7RUFDQTtBSnFRcEI7QUkvUFE7RUFDSTtFQUNBO0FKaVFaO0FJOVBZO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FKZ1FoQjtBSTlQZ0I7RUFDSTtFQUNBO0VBQ0E7QUpnUXBCO0FJM1B3QjtFQUNJO0FKNlA1QjtBSXhQZ0I7RUFDSTtFQUNBO0VBQ0E7RUFDQTtBSjBQcEI7QUl4UG9CO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FKMFB4QjtBSW5PUTtFQUNJO0FKcU9aOztBSTlOSTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FKaU9SO0FJOU5JO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUpnT1I7QUk3Tkk7RUFDSTtFQUNBO0FKK05SO0FJN05RO0VBQ0E7QUorTlI7QUk1TlE7RUFDSTtBSjhOWjtBSTFOUTtFQUNJO0VBQ0E7RUFFQTtBSjJOWjtBSXpOWTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUoyTmhCO0FJek5nQjtFQUNJO0FKMk5wQjtBSXhOZ0I7RUFDSTtBSjBOcEI7QUtvQ0k7RUQzUFk7SUFFUTtFSnlOdEI7QUFDRjtBSXROZ0I7RUFDSTtFQUNBO0FKd05wQjtBSXJOZ0I7RUFDSTtFQUNBO0FKdU5wQjtBSXBOZ0I7RUFDSTtFQUNBO0FKc05wQjtBSW5OZ0I7RUFDSTtFQUNBO0FKcU5wQjtBSS9NSTtFQUVJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FKZ05SO0FJOU1RO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBSmdOWjtBS1BJO0VEOU5BO0lBeUJRO0VKZ05WO0FBQ0Y7QUk3TUk7RUFDSTtBSitNUjtBSTdNUTtFQUNJO0FKK01aO0FLbEJJO0VEak1BO0lBUVE7RUorTVY7QUFDRjtBSTNNUTtFQUNJO0FKNk1aO0FJek1JO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUoyTVI7O0FBOWdCQzs7RUFBQTtBQUtEOztDQUFBO0FNNUVJO0VBQ0k7QU44bEJSO0FNNWxCSTtFQUNJO0VBQ0E7QU44bEJSO0FNN2xCUTtFQUNJO0VBQ0E7RUFDQTtBTitsQlo7QU01bEJJO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBTjhsQlI7QU01bEJJO0VBQ0k7QU44bEJSO0FNNWxCSTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0FOOGxCUjs7QU0xbEJBO0VBQ0k7RUFDQTtBTjZsQko7QU01bEJJO0VBQ0k7QU44bEJSOztBQWxqQkE7O0NBQUE7QUFPQztBQUdBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBR0Q7RUFDSTtBQTZpQko7QUE3b0JBO0VBQUE7SUFBQTtFQTZvQkM7QUFBQSxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGlwcGlwLXRoZW1lLy4vd3AtY29udGVudC90aGVtZXMvd2hpdGVjaGFwZWwvYXNzZXRzL3Njc3MvZ2xvYmFsLnNjc3MiLCJ3ZWJwYWNrOi8vcGlwcGlwLXRoZW1lLy4vd3AtY29udGVudC90aGVtZXMvd2hpdGVjaGFwZWwvYXNzZXRzL3Njc3MvY29uZmlnL192YXJzLnNjc3MiLCJ3ZWJwYWNrOi8vcGlwcGlwLXRoZW1lLy4vd3AtY29udGVudC90aGVtZXMvd2hpdGVjaGFwZWwvYXNzZXRzL3Njc3MvaGVscGVycy9oZWxwZXJzLnNjc3MiLCJ3ZWJwYWNrOi8vcGlwcGlwLXRoZW1lLy4vd3AtY29udGVudC90aGVtZXMvd2hpdGVjaGFwZWwvYXNzZXRzL3Njc3MvYXRvbXMvYnV0dG9ucy5zY3NzIiwid2VicGFjazovL3BpcHBpcC10aGVtZS8uL3dwLWNvbnRlbnQvdGhlbWVzL3doaXRlY2hhcGVsL2Fzc2V0cy9zY3NzL29yZ2FuaXNtcy9jYWxlbmRhci5zY3NzIiwid2VicGFjazovL3BpcHBpcC10aGVtZS8uL25vZGVfbW9kdWxlcy9pbmNsdWRlLW1lZGlhL2Rpc3QvX2luY2x1ZGUtbWVkaWEuc2NzcyIsIndlYnBhY2s6Ly9waXBwaXAtdGhlbWUvLi93cC1jb250ZW50L3RoZW1lcy93aGl0ZWNoYXBlbC9hc3NldHMvc2Nzcy9jb3JlL19jdXN0b21pc2VyLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBVbi50aXRsZWRcbiAqIE1haW4gLSBHbG9iYWxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIERlcGVuZGVuY2llc1xuICAqL1xuLy8gIEBpbXBvcnQgJ35iYWd1ZXR0ZWJveC5qcy9zcmMvYmFndWV0dGVCb3gnO1xuIEBpbXBvcnQgJ35pbmNsdWRlLW1lZGlhL2Rpc3QvX2luY2x1ZGUtbWVkaWEnO1xuLy8gIEBpbXBvcnQgJ35ub3JtYWxpemUuc2Nzcy9ub3JtYWxpemUuc2Nzcyc7XG4vLyAgQGltcG9ydCAnfnJlZmxleC1ncmlkL3Njc3MvcmVmbGV4LnNjc3MnO1xuIC8vIEBpbXBvcnQgJ35jaG9pY2VzLmpzL3B1YmxpYy9hc3NldHMvc3R5bGVzL2Nob2ljZXMubWluLmNzcyc7XG5cbiAvKipcbiAgKiBDb25maWdcbiAgKi9cblxuLy8gIEBpbXBvcnQgJ2NvbmZpZy9mb250cyc7XG4gQGltcG9ydCAnY29uZmlnL3ZhcnMnO1xuIFxuIC8qKlxuICAqIEhlbHBlcnNcblxuIEBpbXBvcnQgJ2hlbHBlcnMvZm9jdXMtdmlzaWJsZSc7XG4gQGltcG9ydCAnaGVscGVycy9mb250LXNtb290aGluZyc7XG4gQGltcG9ydCAnaGVscGVycy90YWJsZSc7XG4gICovXG5AaW1wb3J0ICdoZWxwZXJzL2hlbHBlcnMnO1xuQGltcG9ydCAnaGVscGVycy9taXhpbnMnO1xuIFxuIC8qKlxuICAqIEJhc2VcblxuIEBpbXBvcnQgJ2Jhc2UvZGVmYXVsdHMnO1xuIEBpbXBvcnQgJ2Jhc2UvdHlwb2dyYXBoeSc7XG4gQGltcG9ydCAnYmFzZS9tYWluJztcbiAgKi9cbiBcbiAvKipcbiAqIEF0b21zXG5cbiBAaW1wb3J0ICdhdG9tcy9uYXYtdG9nZ2xlJztcbiBAaW1wb3J0ICdhdG9tcy9pbWFnZS1jcmVkaXQnO1xuIEBpbXBvcnQgJ2F0b21zL3BhZ2VyJztcbiAqL1xuICBAaW1wb3J0ICdhdG9tcy9idXR0b25zJztcblxuIC8qKlxuICAqIE1vbGVjdWxlc1xuXG4gQGltcG9ydCAnbW9sZWN1bGVzL2VtbXNnJztcbiBAaW1wb3J0ICdtb2xlY3VsZXMvYmxvY2tzJztcbiBAaW1wb3J0ICdtb2xlY3VsZXMvZm9ybXMnO1xuIEBpbXBvcnQgJ21vbGVjdWxlcy9uYXYnO1xuIEBpbXBvcnQgJ21vbGVjdWxlcy9iYW5uZXInO1xuIEBpbXBvcnQgJ21vbGVjdWxlcy90ZWFzZXInO1xuICAqL1xuIFxuIC8qKlxuICAqIE9yZ2FuaXNpbXNcblxuIEBpbXBvcnQgJ29yZ2FuaXNtcy9oZWFkZXInO1xuIEBpbXBvcnQgJ29yZ2FuaXNtcy9mb290ZXInO1xuIEBpbXBvcnQgJ29yZ2FuaXNtcy9zZWFyY2gtcmVzdWx0cyc7XG4gQGltcG9ydCAnb3JnYW5pc21zL3NpZGViYXInO1xuIEBpbXBvcnQgJ29yZ2FuaXNtcy90ZWFzZXItc2VjdGlvbic7XG4gICovIFxuQGltcG9ydCAnb3JnYW5pc21zL2NhbGVuZGFyJztcblxuIC8qKlxuICAqIFRlbXBsYXRlc1xuICAqL1xuIFxuXG4vKipcbiAgKiBDb3JlXG4qL1xuQGltcG9ydCBcImNvcmUvY3VzdG9taXNlclwiO1xuXG4vKipcbiAgKiBTcGVrdHJpeFxuKi9cbkBpbXBvcnQgXCJzcGVrdHJpeC9jYWxlbmRhclwiO1xuXG4gXG5cbiAvKiAgdGFpbHdpbmQgICovXG4vLyAgQHRhaWx3aW5kIGJhc2U7XG4vLyAgQHRhaWx3aW5kIGNvbXBvbmVudHM7XG4gQHRhaWx3aW5kIHV0aWxpdGllcztcblxuXG4jU3Bla3RyaXhJRnJhbWUge1xuICAgIG1hcmdpbjogNTBweCAwIDA7XG4gIH0iLCIvKipcbiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBVbi50aXRsZWRcbiogQ29uZmlnIC0gVmFyc1xuKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4qL1xuOnJvb3Qge1xuICAgIC0tYy1wcmltYXJ5OiAjMDAwO1xuICAgIC0tYy13aGl0ZTogI2ZmZjtcbiAgICAtLWMtcmVkOiAjRjgzNjJBO1xuICAgIC0tYy1ibGFjazogIzAwMDtcbiAgICAtLWMtZGFyazogIzFkMWQxYjtcbiAgICAtLWMtZGFyay1saWdodDogIzFkMWQxYmRlO1xuICAgIC0tYy13aGl0ZTogI2ZmZjtcblxuICAgIC0tYnVtcFVuaXQ6IDRweDtcbiAgICAtLWJ1bXA6IGNhbGModmFyKC0tYnVtcFVuaXQpICogOCk7XG4gIH1cblxuICAvLyBnZW5lcmFsIHB1cnBvc2UgdmFyaWFibGUsIHNob3VsZCByZWFsbHkgYmUgcmVuYW1lZCBidXQgSSBkb24ndCBrbm93IHd0ZiB0byBjYWxsIGl0XG4gICRidW1wVW5pdDogNHB4O1xuICAkYnVtcDogY2FsYyh2YXIoLS1idW1wVW5pdCkgKiA4KTtcbiAgXG4gICRlYXNpbmc6IGN1YmljLWJlemllcigwLjMsIDAuNjUsIDAuNzIsIDAuNjMpO1xuICBcbi8qKlxuICogQnJlYWtwb2ludHNcbiAqL1xuJGJyZWFrcG9pbnRzOiAoXG4gIHhzOiA1NzZweCxcbiAgc206IDc2OHB4LFxuICBtZDogOTkycHgsXG4gIHRhYjogMTAyNXB4LFxuICBsZzogMTIwMHB4LFxuICB4bGc6IDE2MDBweCxcbik7XG4iLCIuaGVhZGVyIHtcbiAgICAuaGVhZGVyTGVmdCB7IFxuICAgICAgICBsaSB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEzcHg7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk5NXB4KSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuaGVhZGVyUmlnaHQge1xuICAgICAgICAvLyBmbG9hdDogbm9uZTtcbiAgICAgICAgLy8gbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgYm90dG9tOiAycHg7XG5cbiAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTE3MXB4KSB7XG4gICAgICAgICAgICBib3R0b206IC0ycHg7XG4gICAgICAgIH1cblxuICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5OTBweCkge1xuICAgICAgICAgICAgYm90dG9tOiAtM3B4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmljb24tYWNjb3VudCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB3aWR0aDogMjhweDtcbiAgICAgICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG5cbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltYWdlcy9pY29ucy9pY29uLWFjY291bnQucG5nXCIpO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDczLjEyNWVtKSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxNXB4O1xuXG4gICAgICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzc1cHgpIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1lbnUge1xuICAgICAgICAgICAgbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzc1cHgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYuYmFza2V0IHtcbiAgICAgICAgICAgICAgICAmLmFjdGl2ZUJhc2tldCB7XG4gICAgICAgICAgICAgICAgICAgICYuYWN0aXZlTW9iaWxlQmFza2V0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdWwge1xuICAgICAgICAgICAgICAgICAgICBsaSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIC5pY29uLXNlYXJjaCB7XG4gICAgICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NzVweCkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJhc2tldCB7XG4gICAgICAgICAgICB1bDpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5tb2JpbGVOYXZTaG9ydGN1dHMge1xuICAgICAgICAubW9iaWxlQmFza2V0IHtcblxuICAgICAgICAgICAgdWwge1xuICAgICAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICAgICAgJi5kb3R0ZWRCb3JkZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGF1dG87XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHVsIHtcbiAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG5cbiAgICAgICAgICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4uc3Bla3RyaXgtc2lnbnVwIHtcbiAgICAmX19oZWFkaW5nIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiZmYtZGluLXdlYlwiLCBzYW5zLXNlcmlmO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBtYXJnaW46IDAgMCAxcmVtO1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIuNXJlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBjb2xvcjogIzFkMWQxYjtcbiAgICB9XG5cbiAgICAmX19jb250YWluZXIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzBweDtcbiAgICAgICAgbWFyZ2luOiA0MHB4IDA7XG5cbiAgICAgICAgJiA+IGZvcm0ge1xuICAgICAgICAgICAgJiA+IGxhYmVsIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0Om5vdCguSXRlbUVkaXRCdXR0b24pOm5vdCguSXRlbURlbGV0ZUJ1dHRvbik6bm90KFt0eXBlPVwic3VibWl0XCJdKTpub3QoW3R5cGU9XCJidXR0b25cIl0pOm5vdChbdHlwZT1cInJhZGlvXCJdKTpub3QoW3R5cGU9XCJjaGVja2JveFwiXSksXG4gICAgICAgIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbiAgICAgICAgaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLFxuICAgICAgICBpbnB1dFt0eXBlPVwidGV4dFwiXSxcbiAgICAgICAgc2VsZWN0LFxuICAgICAgICB0ZXh0YXJlYSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzk3OTc5NztcbiAgICAgICAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICBjb2xvcjogIzFkMWQxYjtcbiAgICAgICAgICAgIC8vIEBpbmNsdWRlIGZvbnQtYm9keTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZyZW07XG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBjdWJpYy1iZXppZXIoMC4zLCAwLjY1LCAwLjcyLCAwLjYzKTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMTBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAgICAgaW5wdXQ6bm90KC5JdGVtRWRpdEJ1dHRvbik6bm90KC5JdGVtRGVsZXRlQnV0dG9uKTpub3QoW3R5cGU9XCJzdWJtaXRcIl0pOm5vdChbdHlwZT1cImJ1dHRvblwiXSk6bm90KFt0eXBlPVwicmFkaW9cIl0pOm5vdChbdHlwZT1cImNoZWNrYm94XCJdKSxcbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuICAgICAgICAgICAgc2VsZWN0LFxuICAgICAgICAgICAgdGV4dGFyZWEge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiZmYtZGluLXdlYlwiLCBzYW5zLXNlcmlmO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgcGFkZGluZzogNHB4IDI0cHg7XG4gICAgICAgICAgICBmb250LXNpemU6IDE2LjE3MnB4O1xuICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEyNXB4O1xuICAgICAgICAgICAgbWluLWhlaWdodDogNTBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWMtZGFyayk7XG4gICAgICAgICAgICBjb2xvcjogdmFyKC0tYy13aGl0ZSk7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAtbW96LXRleHQtYWxpZ24tbGFzdDogY2VudGVyO1xuICAgICAgICAgICAgdGV4dC1hbGlnbi1sYXN0OiBjZW50ZXI7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAwLjJzIGN1YmljLWJlemllcigwLjMsIDAuNjUsIDAuNzIsIDAuNjMpO1xuICAgICAgICAgICAgbWFyZ2luOiAzMHB4IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5Cb29raW5nTW9kYWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cblxuLmZsdWlkLXdpZHRoLXZpZGVvLXdyYXBwZXIge1xuICAgICYuY29va2llLWRlbmllZC1tZXNzYWdlIHtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgIH1cbn0iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFVuLnRpdGxlZFxuICogQXRvbXMgLSBCdXR0b25zXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiBDb25maWdcbiAqKi9cblxuIEBtaXhpbiBidG4taG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWMtd2hpdGUpO1xuICAgIGNvbG9yOiB2YXIoLS1jLXByaW1hcnkpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWMtcHJpbWFyeSk7XG4gIH1cbiAgXG4gIEBtaXhpbiBidG4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWJ1bXBVbml0KSogMykgIGNhbGModmFyKC0tYnVtcFVuaXQpKiA0KTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWMtcHJpbWFyeSk7XG4gICAgY29sb3I6IHZhcigtLWMtd2hpdGUpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWMtcHJpbWFyeSk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIEBpbmNsdWRlIGJ0bi1ob3ZlcjtcbiAgICB9XG4gIH1cbiAgXG4gIEBtaXhpbiBidG4tYWx0LWhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jLWJsYWNrKTtcbiAgICBjb2xvcjogdmFyKC0tYy13aGl0ZSk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYy1ibGFjayk7XG4gIH1cbiAgXG4gIEBtaXhpbiBidG4tYWx0IHtcbiAgICBAaW5jbHVkZSBidG47XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYy13aGl0ZSk7XG4gICAgY29sb3I6IHZhcigtLWMtYmxhY2spO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWMtYmxhY2spO1xuICBcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgQGluY2x1ZGUgYnRuLWFsdC1ob3ZlcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTdHlsZXNcbiAgICoqL1xuICBcbiAgLmEtYnRuIHtcbiAgICBAaW5jbHVkZSBidG47XG4gIH1cbiAgXG4gIC5hLWJ0bi0tYWx0IHtcbiAgICBAaW5jbHVkZSBidG4tYWx0O1xuICB9XG4gICIsIi8vIEJhc2Ugc3RydWN0dXJlIGZvciBSZWFjdCBNb2RhbCBhbmQgQ2FsZW5kYXIgZWxlbWVudHMgdXNpbmcgQkVNIG1ldGhvZG9sb2d5XG5cbi5SZWFjdE1vZGFsUG9ydGFsIHtcbiAgICBmb250LWZhbWlseTogXCJmZi1kaW4td2ViXCI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDEwMDAwMDtcblxuICAgIC8vIFN0eWxpbmcgZm9yIHRoZSBtb2RhbCBvdmVybGF5XG4gICAgLlJlYWN0TW9kYWxfX092ZXJsYXkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIFxuICAgICAgLy8gTW9kaWZpZXIgZm9yIHdoZW4gdGhlIG92ZXJsYXkgaXMgYWN0aXZlXG4gICAgICAmLS1hZnRlci1vcGVuIHtcbiAgICAgICAgLy8gUGxhY2Vob2xkZXIgZm9yIGFueSBzcGVjaWZpYyBzdHlsZXMgd2hlbiBtb2RhbCBpcyBvcGVuXG4gICAgICB9XG4gICAgfVxuICBcbiAgICAvLyBTdHlsaW5nIGZvciB0aGUgbW9kYWwgY29udGVudFxuICAgIC5SZWFjdE1vZGFsX19Db250ZW50IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGluc2V0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICB0b3A6IDEwJSAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IDY3LjMyJTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgQGluY2x1ZGUgbWVkaWEoJzxzbScpIHtcbiAgICAgICAgd2lkdGg6IDg1JTtcbiAgICB9XG4gIFxuICAgICAgLy8gTW9kaWZpZXIgZm9yIHdoZW4gdGhlIGNvbnRlbnQgaXMgYWN0aXZlXG4gICAgICAmLS1hZnRlci1vcGVuIHtcbiAgICAgICAgLy8gUGxhY2Vob2xkZXIgZm9yIGFueSBzcGVjaWZpYyBzdHlsZXMgd2hlbiBtb2RhbCBjb250ZW50IGlzIG9wZW5cbiAgICAgIH1cbiAgICB9XG59XG5cbi5SZWFjdE1vZGFsX19Cb2R5LS1vcGVuIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyBCYXNlIHN0cnVjdHVyZSBmb3IgdGhlIGNhbGVuZGFyIGNvbXBvbmVudFxuLnJlYWN0LWNhbGVuZGFyIHtcbi8vIFN0eWxpbmcgZm9yIHRoZSBjYWxlbmRhciBuYXZpZ2F0aW9uIHNlY3Rpb25cbiAgICAmX19uYXZpZ2F0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAvLyBTdHlsaW5nIGZvciBuYXZpZ2F0aW9uIGFycm93c1xuICAgICAgICAmX19hcnJvdyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgICZfX3ByZXYtYnV0dG9uLFxuICAgICAgICAmX19uZXh0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vc3ZnL2ljb24tbGVmdC1jaGV2cm9uLnN2Zyk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE0cHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJl9fcHJldi1idXR0b24ge1xuICAgICAgICAgICAgJltkaXNhYmxlZF0ge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9zdmcvaWNvbi1yaWdodC1jaGV2cm9uLWRpc2FibGVkLnN2Zyk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwREVHKTtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG5vbmU7XG4gICAgICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmX19uZXh0LWJ1dHRvbiB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBERUcpO1xuICAgICAgICAgICAgJltkaXNhYmxlZF0ge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9zdmcvaWNvbi1yaWdodC1jaGV2cm9uLWRpc2FibGVkLnN2Zyk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogbm9uZTtcbiAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICZfX3ByZXYyLWJ1dHRvbixcbiAgICAgICAgJl9fbmV4dDItYnV0dG9uIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdHlsaW5nIGZvciB0aGUgbGFiZWwgYnV0dG9uIGluIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgICZfX2xhYmVsIHtcbiAgICAgICAgICAgIGZsZXgtZ3JvdzogdW5zZXQgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICBjdXJzb3I6IG5vbmU7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgY29sb3I6IHZhcigtLWMtYmxhY2spO1xuXG4gICAgICAgICAgICAvLyBTdHlsaW5nIGZvciB0aGUgbGFiZWwgdGV4dFxuICAgICAgICAgICAgJl9fbGFiZWxUZXh0IHtcbiAgICAgICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3IgbGFiZWwgdGV4dCBzdHlsZXNcblxuICAgICAgICAgICAgICAgIC8vIE1vZGlmaWVyIGZvciBzcGVjaWZpYyBzdGF0ZXMgb2YgbGFiZWwgdGV4dFxuICAgICAgICAgICAgICAgICYtLWZyb20ge1xuICAgICAgICAgICAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciBzcGVjaWZpYyBsYWJlbCB0ZXh0IHN0eWxlcyAoZS5nLiwgYm9sZCwgY29sb3IpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3R5bGluZyBmb3IgdGhlIGNhbGVuZGFyIHZpZXcgY29udGFpbmVyXG4gICAgJl9fdmlld0NvbnRhaW5lciB7XG4gICAgICAgIC8vIEJhc2Ugc3R5bGVzIGZvciB0aGUgdmlldyBjb250YWluZXIgKGZsZXgsIHBvc2l0aW9uaW5nKVxuICAgIH1cblxuICAgIC8vIFN0eWxpbmcgZm9yIG1vbnRoIHZpZXdcbiAgICAmX19tb250aC12aWV3IHtcbiAgICAgICAgLy8gRmxleGJveCBsYXlvdXQgZm9yIHRoZSBtb250aCB2aWV3ICh3ZWVrcyBhbmQgZGF5cylcblxuICAgICAgICAvLyBTdHlsaW5nIGZvciB0aGUgd2Vla2RheXMgaGVhZGVyXG4gICAgICAgICZfX3dlZWtkYXlzIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcblxuICAgICAgICAgICAgLy8gU3R5bGluZyBmb3IgZWFjaCB3ZWVrZGF5IGNlbGxcbiAgICAgICAgICAgICZfX3dlZWtkYXkge1xuICAgICAgICAgICAgICAgIGZsZXg6IDAgMCAxNC4yODU3JTtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDA7XG5cbiAgICAgICAgICAgICAgICAvLyBNb2RpZmllciBmb3IgY3VycmVudCBkYXlcbiAgICAgICAgICAgICAgICAmLS1jdXJyZW50IHtcbiAgICAgICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3IgY3VycmVudCBkYXkgc3R5bGVzIChlLmcuLCBib2xkLCBoaWdobGlnaHQgY29sb3IpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gTW9kaWZpZXIgZm9yIHdlZWtlbmQgZGF5c1xuICAgICAgICAgICAgICAgICYtLXdlZWtlbmQge1xuICAgICAgICAgICAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciB3ZWVrZW5kIHN0eWxlcyAoZS5nLiwgZGlmZmVyZW50IGNvbG9yKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFiYnIge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0eWxpbmcgZm9yIHRoZSBkYXlzIGluIHRoZSBtb250aCB2aWV3XG4gICAgICAgICZfX2RheXMge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgICAgICAgICAgLy8gU3R5bGluZyBmb3IgaW5kaXZpZHVhbCBkYXkgdGlsZXNcbiAgICAgICAgICAgICZfX2RheSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIGZsZXg6IDAgMCAxNC4yODU3JTtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1TdHJva2UsICNENUQ0REYpO1xuXG4gICAgICAgICAgICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLVN0cm9rZSwgI0Q1RDRERik7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLUluYWN0aXZlLCAjRjJGM0Y3KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgIGFiYnIge1xuICAgICAgICAgICAgICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFiYnIge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAgICAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMjUlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDcwJTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE1vZGlmaWVyIGZvciBkYXlzIGluIGEgbmVpZ2hib3JpbmcgbW9udGhcbiAgICAgICAgICAgICAgICAmLS1uZWlnaGJvcmluZ01vbnRoIHtcbiAgICAgICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3Igc3R5bGVzIG9mIG5laWdoYm9yaW5nIG1vbnRoIGRheXMgKGUuZy4sIGRpc2FibGVkKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE1vZGlmaWVyIGZvciBjdXJyZW50IGRheSAodG9kYXkpXG4gICAgICAgICAgICAgICAgJi0tbm93IHtcbiAgICAgICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3IgdG9kYXkgc3R5bGVzIChlLmcuLCBib3JkZXIsIGJhY2tncm91bmQgY29sb3IpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gTW9kaWZpZXIgZm9yIHdlZWtlbmQgZGF5c1xuICAgICAgICAgICAgICAgICYtLXdlZWtlbmQge1xuICAgICAgICAgICAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciB3ZWVrZW5kIGRheSBzdHlsZXMgKGUuZy4sIGhpZ2hsaWdodCwgY29sb3IpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGlsZSB7XG4gICAgICAgICYtLWFjdGl2ZSB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1TdHJva2UsICMwMDAwMDApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBCYXNlIHN0cnVjdHVyZSBmb3IgY3VzdG9tIG1vZGFsIGNvbXBvbmVudHMgKGUuZy4sIGF2YWlsYWJsZSB0aW1lcyBzZWN0aW9uKVxuLm8tY2FsZW5kYXItbW9kYWwge1xuICAgICZfX3N1cGVyLXRpdGxlIHtcbiAgICAgICAgY29sb3I6ICM4MDgwODA7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMzBweDsgLyogMTUwJSAqL1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTEuMnB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICB9XG5cbiAgICAmX190aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjcuNTM5cHg7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMS4ycHg7XG4gICAgICAgIGNvbG9yOiAjMDAwO1xuICAgICAgICBtYXJnaW46IDAgMCBjYWxjKHZhcigtLWJ1bXApIC8gMikgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAmX19hdmFpbGFibGUtdGltZXMge1xuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgICAgaDMge1xuICAgICAgICBtYXJnaW46IDgwcHggMCAxOHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCA0OHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3R5bGluZyBmb3IgYm9va2luZyBidXR0b25zXG4gICAgICAgICZfX2Jvb2tpbmctYnV0dG9ucyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgICAgICAgICAgIC8vIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgNDkuMjUlKTtcbiAgICAgICAgICAgIGdhcDogMTBweDtcblxuICAgICAgICAgICAgYS5idXR0b24ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxNjQsIDE3MSwgMC4wOCk7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1TdHJva2UsICNENUQ0REYpO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYgPiBzcGFuIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEoJzxzbScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmW2RhdGEtbGFiZWw9XCJsaW1pdGVkLWF2YWlsYWJpbGl0eVwiXSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4ICMwMDA7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU0LCAyNDMsIDE0NiwgMC40MCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJltkYXRhLWxhYmVsPVwibGFzdC1mZXdcIl0ge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1TdHJva2UsICNENUQ0REYpO1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0OCwgNTQsIDQyLCAwLjI1KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmW2RhdGEtbGFiZWw9XCJzZWxsaW5nLWZhc3RcIl0ge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1TdHJva2UsICNENUQ0REYpO1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MywgMTI2LCAyMCwgMC4yNSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJltkYXRhLWxhYmVsPVwiZnVsbHktYm9va2VkXCJdIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tU3Ryb2tlLCAjRDVENERGKTtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDgsIDU0LCA0MiwgMC4yNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJl9fZXZlbnQtZGF0ZSxcbiAgICAmX19ldmVudC1sb2NhdGlvbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMjUuMnB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuNHB4O1xuXG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBjYWxjKHZhcigtLWJ1bXBVbml0KSogMikgMCAwO1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWJ1bXBVbml0KSogNik7XG4gICAgICAgICAgICB3aWR0aDogY2FsYyh2YXIoLS1idW1wVW5pdCkqIDYpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhKCc8c20nKSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJl9fZXZlbnQtbG9jYXRpb24ge1xuICAgICAgICBtYXJnaW46IDAgMCAwIHZhcigtLWJ1bXApO1xuXG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL3N2Zy9pY29uLWxvY2F0aW9uLnN2Z1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhKCc8c20nKSB7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCB2YXIoLS1idW1wKSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJl9fZXZlbnQtZGF0ZSB7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL3N2Zy9pY29uLWNhbGVuZGFyLnN2Z1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICZfX2Nsb3NlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL3N2Zy9pY29uLWNyb3NzLnN2Z1wiKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuXG4vLyAgICAgXyAgICAgICAgICAgIF8gICAgICAgICAgIF8gICAgICAgICAgICAgICAgICAgICAgICAgICBfIF9cbi8vICAgIChfKSAgICAgICAgICB8IHwgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoXylcbi8vICAgICBfIF8gX18gICBfX198IHxfICAgXyAgX198IHwgX19fICAgXyBfXyBfX18gICBfX18gIF9ffCB8XyAgX18gX1xuLy8gICAgfCB8ICdfIFxcIC8gX198IHwgfCB8IHwvIF9gIHwvIF8gXFwgfCAnXyBgIF8gXFwgLyBfIFxcLyBfYCB8IHwvIF9gIHxcbi8vICAgIHwgfCB8IHwgfCAoX198IHwgfF98IHwgKF98IHwgIF9fLyB8IHwgfCB8IHwgfCAgX18vIChffCB8IHwgKF98IHxcbi8vICAgIHxffF98IHxffFxcX19ffF98XFxfXyxffFxcX18sX3xcXF9fX3wgfF98IHxffCB8X3xcXF9fX3xcXF9fLF98X3xcXF9fLF98XG4vL1xuLy8gICAgICBTaW1wbGUsIGVsZWdhbnQgYW5kIG1haW50YWluYWJsZSBtZWRpYSBxdWVyaWVzIGluIFNhc3Ncbi8vICAgICAgICAgICAgICAgICAgICAgICAgdjEuNC45XG4vL1xuLy8gICAgICAgIGh0dHBzOi8vZWR1YXJkb2JvdWNhcy5naXRodWIuaW8vaW5jbHVkZS1tZWRpYVxuLy9cbi8vICAgICAgICAgQXV0aG9yczogRWR1YXJkbyBCb3VjYXMgKEBlZHVhcmRvYm91Y2FzKVxuLy8gICAgICAgICAgICAgICAgICBLaXR0eSBHaXJhdWRlbCAoQGtpdHR5Z2lyYXVkZWwpXG4vL1xuLy8gICAgICBUaGlzIHByb2plY3QgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgbGljZW5zZVxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgbGlicmFyeSBwdWJsaWMgY29uZmlndXJhdGlvblxuLy8vIEBhdXRob3IgRWR1YXJkbyBCb3VjYXNcbi8vLyBAYWNjZXNzIHB1YmxpY1xuLy8vL1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIGdsb2JhbCBicmVha3BvaW50c1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgYnJlYWtwb2ludCB3aXRoIHRoZSBsYWJlbCBgcGhvbmVgXG4vLy8gICRicmVha3BvaW50czogKCdwaG9uZSc6IDMyMHB4KTtcbi8vL1xuJGJyZWFrcG9pbnRzOiAoXG4gICdwaG9uZSc6IDMyMHB4LFxuICAndGFibGV0JzogNzY4cHgsXG4gICdkZXNrdG9wJzogMTAyNHB4XG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIHN0YXRpYyBleHByZXNzaW9ucyBvciBtZWRpYSB0eXBlc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgbWVkaWEgdHlwZSAoc2NyZWVuKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJzogJ3NjcmVlbicpO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzdGF0aWMgZXhwcmVzc2lvbiB3aXRoIGxvZ2ljYWwgZGlzanVuY3Rpb24gKE9SIG9wZXJhdG9yKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6IChcbi8vLyAgICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSdcbi8vLyAgKTtcbi8vL1xuJG1lZGlhLWV4cHJlc3Npb25zOiAoXG4gICdzY3JlZW4nOiAnc2NyZWVuJyxcbiAgJ3ByaW50JzogJ3ByaW50JyxcbiAgJ2hhbmRoZWxkJzogJ2hhbmRoZWxkJyxcbiAgJ2xhbmRzY2FwZSc6ICcob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICAncG9ydHJhaXQnOiAnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknLFxuICAncmV0aW5hM3gnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMyksIChtaW4tcmVzb2x1dGlvbjogMzUwZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAzZHBweCknXG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIERlZmluZXMgYSBudW1iZXIgdG8gYmUgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIGVhY2ggdW5pdCB3aGVuIGRlY2xhcmluZyBicmVha3BvaW50cyB3aXRoIGV4Y2x1c2l2ZSBpbnRlcnZhbHNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcGl4ZWxzIGlzIGRlZmluZWQgYXMgYDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4xMjhweCcpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMTI5cHgpIHt9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIGVtcyBpcyBkZWZpbmVkIGFzIGAwLjAxYCBieSBkZWZhdWx0XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+MjBlbScpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMjAuMDFlbSkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcmVtcyBpcyBkZWZpbmVkIGFzIGAwLjFgIGJ5IGRlZmF1bHQsIHRvIGJlIHVzZWQgd2l0aCBgZm9udC1zaXplOiA2Mi41JTtgXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+Mi4wcmVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyLjFyZW0pIHt9XG4vLy9cbiR1bml0LWludGVydmFsczogKFxuICAncHgnOiAxLFxuICAnZW0nOiAwLjAxLFxuICAncmVtJzogMC4xLFxuICAnJzogMFxuKSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gRGVmaW5lcyB3aGV0aGVyIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgYXZhaWxhYmxlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIHNlcGFyYXRlIHN0eWxlc2hlZXRzXG4vLy8gZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtZWRpYSBxdWVyaWVzLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIERpc2FibGVzIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4kaW0tbWVkaWEtc3VwcG9ydDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBicmVha3BvaW50IHRvIGVtdWxhdGUgd2hlbiBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzIGlzIGRpc2FibGVkLiBNZWRpYSBxdWVyaWVzIHRoYXQgc3RhcnQgYXQgb3Jcbi8vLyBpbnRlcmNlcHQgdGhlIGJyZWFrcG9pbnQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFueSBvdGhlcnMgd2lsbCBiZSBpZ25vcmVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGRvZXMgbm90IGludGVyY2VwdCB0aGUgZGVza3RvcCBicmVha3BvaW50XG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICd0YWJsZXQnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj1kZXNrdG9wJykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBObyBvdXRwdXQgKi9cbi8vL1xuJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJyAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBtZWRpYSBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiBhbiBleHByZXNzaW9uIGZvciBpdCB0byBiZSB1c2VkIHdoZW4gbWVkaWEgcXVlcmllc1xuLy8vIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnQgYW5kIGNvbnRhaW5zIG9ubHkgYWNjZXB0ZWQgbWVkaWEgZXhwcmVzc2lvbnNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdzY3JlZW4nKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgTk9UIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBidXQgY29udGFpbnMgYSBtZWRpYSBleHByZXNzaW9uIHRoYXQgaXMgbm90IGFjY2VwdGVkXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicpO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnLCAncmV0aW5hMngnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJywgJ3BvcnRyYWl0JywgJ2xhbmRzY2FwZScpICFkZWZhdWx0O1xuXG4vLy8vXG4vLy8gQ3Jvc3MtZW5naW5lIGxvZ2dpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBLaXR0eSBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIExvZyBhIG1lc3NhZ2UgZWl0aGVyIHdpdGggYEBlcnJvcmAgaWYgc3VwcG9ydGVkXG4vLy8gZWxzZSB3aXRoIGBAd2FybmAsIHVzaW5nIGBmZWF0dXJlLWV4aXN0cygnYXQtZXJyb3InKWBcbi8vLyB0byBkZXRlY3Qgc3VwcG9ydC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbG9nXG4vLy9cbkBmdW5jdGlvbiBpbS1sb2coJG1lc3NhZ2UpIHtcbiAgQGlmIGZlYXR1cmUtZXhpc3RzKCdhdC1lcnJvcicpIHtcbiAgICBAZXJyb3IgJG1lc3NhZ2U7XG4gIH0gQGVsc2Uge1xuICAgIEB3YXJuICRtZXNzYWdlO1xuICAgICRfOiBub29wKCk7XG4gIH1cblxuICBAcmV0dXJuICRtZXNzYWdlO1xufVxuXG5cbi8vL1xuLy8vIFdyYXBwZXIgbWl4aW4gZm9yIHRoZSBsb2cgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHVzZWQgd2l0aCBhIG1vcmUgZnJpZW5kbHlcbi8vLyBBUEkgdGhhbiBgQGlmIGltLWxvZygnLi4nKSB7fWAgb3IgYCRfOiBpbS1sb2coJy4uJylgLiBCYXNpY2FsbHksIHVzZSB0aGUgZnVuY3Rpb25cbi8vLyB3aXRoaW4gZnVuY3Rpb25zIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbiBhIGZ1bmN0aW9uXG4vLy8gYW5kIHVzZSB0aGUgbWl4aW4gZXZlcnl3aGVyZSBlbHNlIGJlY2F1c2UgaXQncyBtdWNoIG1vcmUgZWxlZ2FudC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbG9nXG4vLy9cbkBtaXhpbiBsb2coJG1lc3NhZ2UpIHtcbiAgQGlmIGltLWxvZygkbWVzc2FnZSkge31cbn1cblxuXG4vLy9cbi8vLyBGdW5jdGlvbiB3aXRoIG5vIGBAcmV0dXJuYCBjYWxsZWQgbmV4dCB0byBgQHdhcm5gIGluIFNhc3MgMy4zXG4vLy8gdG8gdHJpZ2dlciBhIGNvbXBpbGluZyBlcnJvciBhbmQgc3RvcCB0aGUgcHJvY2Vzcy5cbi8vL1xuQGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vLy9cbi8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgYSBsaXN0IG9mIGNvbmRpdGlvbnMgaXMgaW50ZXJjZXB0ZWQgYnkgdGhlIHN0YXRpYyBicmVha3BvaW50LlxuLy8vXG4vLy8gQHBhcmFtIHtBcmdsaXN0fSAgICRjb25kaXRpb25zICAtIE1lZGlhIHF1ZXJ5IGNvbmRpdGlvbnNcbi8vL1xuLy8vIEByZXR1cm4ge0Jvb2xlYW59IC0gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25kaXRpb25zIGFyZSBpbnRlcmNlcHRlZCBieSB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vL1xuQGZ1bmN0aW9uIGltLWludGVyY2VwdHMtc3RhdGljLWJyZWFrcG9pbnQoJGNvbmRpdGlvbnMuLi4pIHtcbiAgJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludCk7XG5cbiAgQGlmIG5vdCAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZSB7XG4gICAgQGlmIGltLWxvZygnYCN7JGltLW5vLW1lZGlhLWJyZWFrcG9pbnR9YCBpcyBub3QgYSB2YWxpZCBicmVha3BvaW50LicpIHt9XG4gIH1cblxuICBAZWFjaCAkY29uZGl0aW9uIGluICRjb25kaXRpb25zIHtcbiAgICBAaWYgbm90IG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuICAgICAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkY29uZGl0aW9uKTtcbiAgICAgICRwcmVmaXg6IGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpO1xuICAgICAgJHZhbHVlOiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkY29uZGl0aW9uLCAkb3BlcmF0b3IpO1xuXG4gICAgICBAaWYgKCRwcmVmaXggPT0gJ21heCcgYW5kICR2YWx1ZSA8PSAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZSkgb3JcbiAgICAgICAgICAoJHByZWZpeCA9PSAnbWluJyBhbmQgJHZhbHVlID4gJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUpIHtcbiAgICAgICAgQHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIGlmIG5vdCBpbmRleCgkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcbiAgICAgIEByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiB0cnVlO1xufVxuXG4vLy8vXG4vLy8gUGFyc2luZyBlbmdpbmVcbi8vLyBAYXV0aG9yIEtpdHR5IEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gR2V0IG9wZXJhdG9yIG9mIGFuIGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBvcGVyYXRvciBmcm9tXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gQW55IG9mIGA+PWAsIGA+YCwgYDw9YCwgYDxgLCBg4omlYCwgYOKJpGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKSB7XG4gIEBlYWNoICRvcGVyYXRvciBpbiAoJz49JywgJz4nLCAnPD0nLCAnPCcsICfiiaUnLCAn4omkJykge1xuICAgIEBpZiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAgICAgQHJldHVybiAkb3BlcmF0b3I7XG4gICAgfVxuICB9XG5cbiAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuICAvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgLy8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcbiAgLy8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuICAkXzogaW0tbG9nKCdObyBvcGVyYXRvciBmb3VuZCBpbiBgI3skZXhwcmVzc2lvbn1gLicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IGRpbWVuc2lvbiBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGB3aWR0aGAgb3IgYGhlaWdodGAgKG9yIHBvdGVudGlhbGx5IGFueXRoaW5nIGVsc2UpXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHBhcnNlZC1kaW1lbnNpb246IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgMCwgJG9wZXJhdG9yLWluZGV4IC0gMSk7XG4gICRkaW1lbnNpb246ICd3aWR0aCc7XG5cbiAgQGlmIHN0ci1sZW5ndGgoJHBhcnNlZC1kaW1lbnNpb24pID4gMCB7XG4gICAgJGRpbWVuc2lvbjogJHBhcnNlZC1kaW1lbnNpb247XG4gIH1cblxuICBAcmV0dXJuICRkaW1lbnNpb247XG59XG5cblxuLy8vXG4vLy8gR2V0IGRpbWVuc2lvbiBwcmVmaXggYmFzZWQgb24gYW4gb3BlcmF0b3Jcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvclxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGBtaW5gIG9yIGBtYXhgXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKSB7XG4gIEByZXR1cm4gaWYoaW5kZXgoKCc8JywgJzw9JywgJ+KJpCcpLCAkb3BlcmF0b3IpLCAnbWF4JywgJ21pbicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCB2YWx1ZSBvZiBhbiBleHByZXNzaW9uLCBiYXNlZCBvbiBhIGZvdW5kIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIGV4dHJhY3QgdmFsdWUgZnJvbVxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvciBmcm9tIGAkZXhwcmVzc2lvbmBcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn0gLSBBIG51bWVyaWMgdmFsdWVcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLXZhbHVlKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcbiAgJG9wZXJhdG9yLWluZGV4OiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG4gICR2YWx1ZTogc3RyLXNsaWNlKCRleHByZXNzaW9uLCAkb3BlcmF0b3ItaW5kZXggKyBzdHItbGVuZ3RoKCRvcGVyYXRvcikpO1xuXG4gIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICR2YWx1ZSkge1xuICAgICR2YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICR2YWx1ZSk7XG4gIH0gQGVsc2Uge1xuICAgICR2YWx1ZTogdG8tbnVtYmVyKCR2YWx1ZSk7XG4gIH1cblxuICAkaW50ZXJ2YWw6IG1hcC1nZXQoJHVuaXQtaW50ZXJ2YWxzLCB1bml0KCR2YWx1ZSkpO1xuXG4gIEBpZiBub3QgJGludGVydmFsIHtcbiAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluc2lkZSBhIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvXG4gICAgLy8gcmVseSBvbiB0aGUgYGltLWxvZyguLilgIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHRoZSBgbG9nKC4uKWAgbWl4aW4uIEJlY2F1c2VcbiAgICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgICAvLyBhIGR1bW15IHZhcmlhYmxlLCBzdWNoIGFzIGAkX2AuIElmIGFueWJvZHkgZXZlciByYWlzZSBhIHNjb3BpbmcgaXNzdWUgd2l0aFxuICAgIC8vIFNhc3MgMy4zLCBjaGFuZ2UgdGhpcyBsaW5lIGluIGBAaWYgaW0tbG9nKC4uKSB7fWAgaW5zdGVhZC5cbiAgICAkXzogaW0tbG9nKCdVbmtub3duIHVuaXQgYCN7dW5pdCgkdmFsdWUpfWAuJyk7XG4gIH1cblxuICBAaWYgJG9wZXJhdG9yID09ICc+JyB7XG4gICAgJHZhbHVlOiAkdmFsdWUgKyAkaW50ZXJ2YWw7XG4gIH0gQGVsc2UgaWYgJG9wZXJhdG9yID09ICc8JyB7XG4gICAgJHZhbHVlOiAkdmFsdWUgLSAkaW50ZXJ2YWw7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cblxuXG4vLy9cbi8vLyBQYXJzZSBhbiBleHByZXNzaW9uIHRvIHJldHVybiBhIHZhbGlkIG1lZGlhLXF1ZXJ5IGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gcGFyc2Vcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBWYWxpZCBtZWRpYSBxdWVyeVxuLy8vXG5AZnVuY3Rpb24gcGFyc2UtZXhwcmVzc2lvbigkZXhwcmVzc2lvbikge1xuICAvLyBJZiBpdCBpcyBwYXJ0IG9mICRtZWRpYS1leHByZXNzaW9ucywgaXQgaGFzIG5vIG9wZXJhdG9yXG4gIC8vIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBnbyBhbnkgZnVydGhlciwganVzdCByZXR1cm4gdGhlIHZhbHVlXG4gIEBpZiBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRleHByZXNzaW9uKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pO1xuICB9XG5cbiAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbik7XG4gICRkaW1lbnNpb246IGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG4gICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG5cbiAgQHJldHVybiAnKCN7JHByZWZpeH0tI3skZGltZW5zaW9ufTogI3skdmFsdWV9KSc7XG59XG5cbi8vL1xuLy8vIFNsaWNlIGAkbGlzdGAgYmV0d2VlbiBgJHN0YXJ0YCBhbmQgYCRlbmRgIGluZGV4ZXNcbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkbGlzdCAtIExpc3QgdG8gc2xpY2Vcbi8vLyBAcGFyYW0ge051bWJlcn0gJHN0YXJ0IFsxXSAtIFN0YXJ0IGluZGV4XG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRlbmQgW2xlbmd0aCgkbGlzdCldIC0gRW5kIGluZGV4XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fSBTbGljZWQgbGlzdFxuLy8vXG5AZnVuY3Rpb24gc2xpY2UoJGxpc3QsICRzdGFydDogMSwgJGVuZDogbGVuZ3RoKCRsaXN0KSkge1xuICBAaWYgbGVuZ3RoKCRsaXN0KSA8IDEgb3IgJHN0YXJ0ID4gJGVuZCB7XG4gICAgQHJldHVybiAoKTtcbiAgfVxuXG4gICRyZXN1bHQ6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAkc3RhcnQgdGhyb3VnaCAkZW5kIHtcbiAgICAkcmVzdWx0OiBhcHBlbmQoJHJlc3VsdCwgbnRoKCRsaXN0LCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLy8vXG4vLy8gU3RyaW5nIHRvIG51bWJlciBjb252ZXJ0ZXJcbi8vLyBAYXV0aG9yIEtpdHR5IEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gQ2FzdHMgYSBzdHJpbmcgaW50byBhIG51bWJlclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGJlIHBhcnNlZFxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfVxuLy8vXG5AZnVuY3Rpb24gdG8tbnVtYmVyKCR2YWx1ZSkge1xuICBAaWYgdHlwZS1vZigkdmFsdWUpID09ICdudW1iZXInIHtcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCR2YWx1ZSkgIT0gJ3N0cmluZycge1xuICAgICRfOiBpbS1sb2coJ1ZhbHVlIGZvciBgdG8tbnVtYmVyYCBzaG91bGQgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gIH1cblxuICAkZmlyc3QtY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAxLCAxKTtcbiAgJHJlc3VsdDogMDtcbiAgJGRpZ2l0czogMDtcbiAgJG1pbnVzOiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpO1xuICAkbnVtYmVyczogKCcwJzogMCwgJzEnOiAxLCAnMic6IDIsICczJzogMywgJzQnOiA0LCAnNSc6IDUsICc2JzogNiwgJzcnOiA3LCAnOCc6IDgsICc5JzogOSk7XG5cbiAgLy8gUmVtb3ZlICsvLSBzaWduIGlmIHByZXNlbnQgYXQgZmlyc3QgY2hhcmFjdGVyXG4gIEBpZiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnKycgb3IgJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpIHtcbiAgICAkdmFsdWU6IHN0ci1zbGljZSgkdmFsdWUsIDIpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBzdHItbGVuZ3RoKCR2YWx1ZSkge1xuICAgICRjaGFyYWN0ZXI6IHN0ci1zbGljZSgkdmFsdWUsICRpLCAkaSk7XG5cbiAgICBAaWYgbm90IChpbmRleChtYXAta2V5cygkbnVtYmVycyksICRjaGFyYWN0ZXIpIG9yICRjaGFyYWN0ZXIgPT0gJy4nKSB7XG4gICAgICBAcmV0dXJuIHRvLWxlbmd0aChpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KSwgc3RyLXNsaWNlKCR2YWx1ZSwgJGkpKVxuICAgIH1cblxuICAgIEBpZiAkY2hhcmFjdGVyID09ICcuJyB7XG4gICAgICAkZGlnaXRzOiAxO1xuICAgIH0gQGVsc2UgaWYgJGRpZ2l0cyA9PSAwIHtcbiAgICAgICRyZXN1bHQ6ICRyZXN1bHQgKiAxMCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGRpZ2l0czogJGRpZ2l0cyAqIDEwO1xuICAgICAgJHJlc3VsdDogJHJlc3VsdCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpIC8gJGRpZ2l0cztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIGlmKCRtaW51cywgLSRyZXN1bHQsICRyZXN1bHQpO1xufVxuXG5cbi8vL1xuLy8vIEFkZCBgJHVuaXRgIHRvIGAkdmFsdWVgXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gVmFsdWUgdG8gYWRkIHVuaXQgdG9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHVuaXQgLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn0gLSBgJHZhbHVlYCBleHByZXNzZWQgaW4gYCR1bml0YFxuLy8vXG5AZnVuY3Rpb24gdG8tbGVuZ3RoKCR2YWx1ZSwgJHVuaXQpIHtcbiAgJHVuaXRzOiAoJ3B4JzogMXB4LCAnY20nOiAxY20sICdtbSc6IDFtbSwgJyUnOiAxJSwgJ2NoJzogMWNoLCAncGMnOiAxcGMsICdpbic6IDFpbiwgJ2VtJzogMWVtLCAncmVtJzogMXJlbSwgJ3B0JzogMXB0LCAnZXgnOiAxZXgsICd2dyc6IDF2dywgJ3ZoJzogMXZoLCAndm1pbic6IDF2bWluLCAndm1heCc6IDF2bWF4KTtcblxuICBAaWYgbm90IGluZGV4KG1hcC1rZXlzKCR1bml0cyksICR1bml0KSB7XG4gICAgJF86IGltLWxvZygnSW52YWxpZCB1bml0IGAjeyR1bml0fWAuJyk7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZSAqIG1hcC1nZXQoJHVuaXRzLCAkdW5pdCk7XG59XG5cbi8vL1xuLy8vIFRoaXMgbWl4aW4gYWltcyBhdCByZWRlZmluaW5nIHRoZSBjb25maWd1cmF0aW9uIGp1c3QgZm9yIHRoZSBzY29wZSBvZlxuLy8vIHRoZSBjYWxsLiBJdCBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIGEgY29tcG9uZW50IG5lZWRpbmcgYW4gZXh0ZW5kZWRcbi8vLyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgY3VzdG9tIGJyZWFrcG9pbnRzIChyZWZlcnJlZCB0byBhcyB0d2Vha3BvaW50cylcbi8vLyBmb3IgaW5zdGFuY2UuXG4vLy9cbi8vLyBAYXV0aG9yIEtpdHR5IEdpcmF1ZGVsXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJHR3ZWFrcG9pbnRzIFsoKV0gLSBNYXAgb2YgdHdlYWtwb2ludHMgdG8gYmUgbWVyZ2VkIHdpdGggYCRicmVha3BvaW50c2Bcbi8vLyBAcGFyYW0ge01hcH0gJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zIFsoKV0gLSBNYXAgb2YgdHdlYWtlZCBtZWRpYSBleHByZXNzaW9ucyB0byBiZSBtZXJnZWQgd2l0aCBgJG1lZGlhLWV4cHJlc3Npb25gXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgYnJlYWtwb2ludHMgd2l0aCBhIHR3ZWFrcG9pbnRcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSkge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoJz5waG9uZScsICc8PWN1c3RvbScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgdGhlIGdsb2JhbCBtZWRpYSBleHByZXNzaW9ucyB3aXRoIGEgY3VzdG9tIG9uZVxuLy8vICBAaW5jbHVkZSBtZWRpYS1jb250ZXh0KCR0d2Vhay1tZWRpYS1leHByZXNzaW9uczogKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCBib3RoIGNvbmZpZ3VyYXRpb24gbWFwc1xuLy8vICBAaW5jbHVkZSBtZWRpYS1jb250ZXh0KCgnY3VzdG9tJzogNjc4cHgpLCAoJ2FsbCc6ICdhbGwnKSkge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoJ2FsbCcsICc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbkBtaXhpbiBtZWRpYS1jb250ZXh0KCR0d2Vha3BvaW50czogKCksICR0d2Vhay1tZWRpYS1leHByZXNzaW9uczogKCkpIHtcbiAgLy8gU2F2ZSBnbG9iYWwgY29uZmlndXJhdGlvblxuICAkZ2xvYmFsLWJyZWFrcG9pbnRzOiAkYnJlYWtwb2ludHM7XG4gICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnM6ICRtZWRpYS1leHByZXNzaW9ucztcblxuICAvLyBVcGRhdGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGJyZWFrcG9pbnRzOiBtYXAtbWVyZ2UoJGJyZWFrcG9pbnRzLCAkdHdlYWtwb2ludHMpICFnbG9iYWw7XG4gICRtZWRpYS1leHByZXNzaW9uczogbWFwLW1lcmdlKCRtZWRpYS1leHByZXNzaW9ucywgJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zKSAhZ2xvYmFsO1xuXG4gIEBjb250ZW50O1xuXG4gIC8vIFJlc3RvcmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGJyZWFrcG9pbnRzOiAkZ2xvYmFsLWJyZWFrcG9pbnRzICFnbG9iYWw7XG4gICRtZWRpYS1leHByZXNzaW9uczogJGdsb2JhbC1tZWRpYS1leHByZXNzaW9ucyAhZ2xvYmFsO1xufVxuXG4vLy8vXG4vLy8gaW5jbHVkZS1tZWRpYSBwdWJsaWMgZXhwb3NlZCBBUElcbi8vLyBAYXV0aG9yIEVkdWFyZG8gQm91Y2FzXG4vLy8gQGFjY2VzcyBwdWJsaWNcbi8vLy9cblxuXG4vLy9cbi8vLyBHZW5lcmF0ZXMgYSBtZWRpYSBxdWVyeSBiYXNlZCBvbiBhIGxpc3Qgb2YgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHBhcmFtIHtBcmdsaXN0fSAgICRjb25kaXRpb25zICAtIE1lZGlhIHF1ZXJ5IGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGEgc2luZ2xlIHNldCBicmVha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIHR3byBzZXQgYnJlYWtwb2ludHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz5waG9uZScsICc8PXRhYmxldCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggY3VzdG9tIHZhbHVlc1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNThweCcsICc8ODUwcHgnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIHNldCBicmVha3BvaW50cyB3aXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz5kZXNrdG9wJywgJzw9MTM1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHN0YXRpYyBleHByZXNzaW9uXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCdyZXRpbmEyeCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIE1peGluZyBldmVyeXRoaW5nXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PTM1MHB4JywgJzx0YWJsZXQnLCAncmV0aW5hM3gnKSB7IH1cbi8vL1xuQG1peGluIG1lZGlhKCRjb25kaXRpb25zLi4uKSB7XG4gIEBpZiAoJGltLW1lZGlhLXN1cHBvcnQgYW5kIGxlbmd0aCgkY29uZGl0aW9ucykgPT0gMCkgb3JcbiAgICAgIChub3QgJGltLW1lZGlhLXN1cHBvcnQgYW5kIGltLWludGVyY2VwdHMtc3RhdGljLWJyZWFrcG9pbnQoJGNvbmRpdGlvbnMuLi4pKSB7XG4gICAgQGNvbnRlbnQ7XG4gIH0gQGVsc2UgaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID4gMCkge1xuICAgIEBtZWRpYSAje3VucXVvdGUocGFyc2UtZXhwcmVzc2lvbihudGgoJGNvbmRpdGlvbnMsIDEpKSl9IHtcbiAgICAgIC8vIFJlY3Vyc2l2ZSBjYWxsXG4gICAgICBAaW5jbHVkZSBtZWRpYShzbGljZSgkY29uZGl0aW9ucywgMikuLi4pIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIubWVkaWFCbG9jayB7XG4gICAgLnBhZ2UtdGVtcGxhdGUtdGVtcGxhdGVzLWZpcnN0dGh1cnNkYXlzIC50d2l0dGVyRmVlZCB7XG4gICAgICAgIGRpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7IFxuICAgIH1cbiAgICAuY2F0ZWdvcnlfbmFtZSB7XG4gICAgICAgIGhlaWdodDogNDVweCFpbXBvcnRhbnQ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrIWltcG9ydGFudDtcbiAgICAgICAgJi0tbmV3IHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnZmYtZGluLXdlYic7XG4gICAgICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5jYXRlZ29yeV9idXR0b24gYSB7XG4gICAgICAgIGNvbG9yOiB3aGl0ZSFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNDdGNTMhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiA2cHggMTNweCA1cHggMTNweCFpbXBvcnRhbnQ7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlciFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxNzVweCFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvIDAgMCAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBibG9jayFpbXBvcnRhbnQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlciFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5jYXRlZ29yeV9kYXRlIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG4gICAgLmNhdGVnb3J5X21ldGFfdGl0bGUge1xuICAgICAgICBmb250LXNpemU6MWVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLm9uZVRoaXJkTWVkaWEge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC1nYXA6IDE1cHg7XG4gICAgJiA+ICoge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/