/* SurpriseCalendar Calendar Configurator Styles */

/* ============================================
   CUSTOM FONTS
   ============================================ */

/* SurpriseCalendar (2026-09-12): Schriftkatalog des Konfigurators.
   Jede Schrift liegt LOKAL unter /static/fonts/ (kein Google-Fonts-CDN, CSP
   font-src 'self') und in derselben Schnittvariante unter
   /srv/surprisecalendar/fonts/ für die Druckdatei (PrintGenerator::$fontMap).
   Regel: pro Familie genau die Schnitte hosten, die der Browser tatsächlich
   nutzt — Textebenen sind fett (700), Türtexte normal (400). Fehlt ein Schnitt,
   nimmt der Browser den vorhandenen OHNE Kunstfett (font-synthesis: none,
   s. .gbc-title-text), und der Druck macht es genauso.
   Drift-Guard über alle vier Fundstellen (CSS, ConfigState, Templ-Auswahl,
   PHP-Fontmap): static/js/configurator/font-catalog.test.js. */

@font-face {
    font-family: 'Poppins';
    src: url('/static/fonts/Poppins-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Poppins';
    src: url('/static/fonts/Poppins-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Nunito';
    src: url('/static/fonts/Nunito-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Montserrat';
    src: url('/static/fonts/Montserrat-Bold.woff2') format('woff2');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Oswald';
    src: url('/static/fonts/Oswald-Bold.woff2') format('woff2');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Bebas Neue';
    src: url('/static/fonts/BebasNeue-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Quicksand';
    src: url('/static/fonts/Quicksand-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Quicksand';
    src: url('/static/fonts/Quicksand-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Josefin Sans';
    src: url('/static/fonts/JosefinSans-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Josefin Sans';
    src: url('/static/fonts/JosefinSans-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Fredoka';
    src: url('/static/fonts/Fredoka-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Fredoka';
    src: url('/static/fonts/Fredoka-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Playfair Display';
    src: url('/static/fonts/PlayfairDisplay-Bold.woff2') format('woff2');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Cormorant Garamond';
    src: url('/static/fonts/CormorantGaramond-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Cormorant Garamond';
    src: url('/static/fonts/CormorantGaramond-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Cinzel';
    src: url('/static/fonts/Cinzel-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Cinzel';
    src: url('/static/fonts/Cinzel-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Great Vibes';
    src: url('/static/fonts/GreatVibes-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Dancing Script';
    src: url('/static/fonts/DancingScript-Bold.woff2') format('woff2');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Caveat';
    src: url('/static/fonts/Caveat-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Caveat';
    src: url('/static/fonts/Caveat-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Amatic SC';
    src: url('/static/fonts/AmaticSC-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Amatic SC';
    src: url('/static/fonts/AmaticSC-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Kaushan Script';
    src: url('/static/fonts/KaushanScript-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Indie Flower';
    src: url('/static/fonts/IndieFlower-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Permanent Marker';
    src: url('/static/fonts/PermanentMarker-Regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Pacifico';
    src: url('/static/fonts/Pacifico-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Lobster';
    src: url('/static/fonts/Lobster-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Luckiest Guy';
    src: url('/static/fonts/LuckiestGuy-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Bangers';
    src: url('/static/fonts/Bangers-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Mountains of Christmas';
    src: url('/static/fonts/MountainsofChristmas-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Mountains of Christmas';
    src: url('/static/fonts/MountainsofChristmas-Bold.ttf') format('truetype');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Berkshire Swash';
    src: url('/static/fonts/BerkshireSwash-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Abril Fatface';
    src: url('/static/fonts/AbrilFatface-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Alfa Slab One';
    src: url('/static/fonts/AlfaSlabOne-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'Fredericka the Great';
    src: url('/static/fonts/FrederickatheGreat-Regular.ttf') format('truetype');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

/* ============================================
   MODE SELECTOR
   ============================================ */

.mode-selector {
    display: flex;
    gap: var(--space-3);
    justify-content: center;
    /* allow the two min-width:160px buttons to wrap instead of overflowing
       horizontally on narrow viewports (FMAE-242) */
    flex-wrap: wrap;
}

.mode-option {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-2) var(--space-4);
    background: var(--color-bg-white);
    border: 2px solid var(--color-border);
    border-radius: var(--radius-lg);
    cursor: pointer;
    transition: all var(--transition-base);
    white-space: nowrap;
}

.mode-option input[type="radio"] {
    display: none;
}

.mode-option:hover {
    border-color: var(--color-primary);
}

.mode-option.active {
    border-color: var(--color-primary);
    background: rgba(var(--color-primary-rgb), 0.1);
    box-shadow: var(--shadow-md);
}

.mode-icon-svg {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    color: var(--color-primary-text);
}

.mode-label {
    font-weight: 600;
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

/* Product Description Container — weiße Karte nach Design-System "Warm Gift":
   --color-bg-dark ist dem Footer vorbehalten, und das Markenrot der strong-
   Auszeichnungen erreichte auf Dunkel nur 2.56:1 (Floor: 4.5:1); auf Weiß 5.93:1. */
.product-description-container {
    margin-top: var(--space-6);
    margin-bottom: var(--space-6);
    padding: var(--space-8);
    background: var(--color-bg-white);
    border-radius: var(--radius-xl);
    border: 1px solid var(--color-border);
    font-size: var(--font-size-base);
    line-height: 1.8;
    color: var(--color-text);
    max-width: 900px;
    margin-left: auto;
    margin-right: auto;
    box-shadow: var(--shadow-md);
}

.product-description-container p {
    margin: 0 0 var(--space-4) 0;
}

.product-description-container p:first-child {
    font-size: var(--font-size-lg);
    font-weight: 600;
    color: var(--color-text);
}

.product-description-container p:last-child {
    margin-bottom: 0;
    font-weight: 600;
    color: var(--color-primary-text);
}

.product-description-container ol,
.product-description-container ul {
    margin: var(--space-4) 0;
    padding-left: 0;
    list-style: none;
}

.product-description-container li {
    margin-bottom: var(--space-3);
    padding-left: var(--space-6);
    position: relative;
}

.product-description-container li::before {
    content: '✓';
    position: absolute;
    left: 0;
    color: var(--color-primary-text);
    font-weight: bold;
}

.product-description-container strong {
    color: var(--color-primary-text);
    font-weight: 700;
}

/* ============================================
   KONFIGURATOR-ARBEITSFLÄCHE — Bühne + Werkzeugspalte (2026-09-25)
   Gemeinsames Markup für "/" und "/calendar": ConfiguratorWorkspace() in
   configurator.templ. Ab 1024 px liegt die Kalender-Front links (Bühne,
   sticky unter dem Header) und rechts stehen in EINER Spalte: Modus-
   Umschalter, Text/Vorlage, Bilder, Hintergrund (Multi), Warenkorb-CTA.
   Vorher lagen alle Werkzeuge untereinander und die 900-px-Front füllte auf
   FullHD den Viewport. Unter 1024 px stapelt sich alles in DOM-Reihenfolge:
   Modus → Front → Werkzeuge. Sichtbarkeit je Modus: jedes Wrapper-Element
   mit data-configurator-mode schaltet index.js switchMode() um
   (ui/ModeVisibility.js). Breiten-Modell im Drift-Guard
   door-number-centering.test.js — Spaltenbreite/gap dort mitziehen.
   ============================================ */

.configurator-workspace {
    padding: var(--space-4) 0 var(--space-8);
}

.configurator-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--space-4);
}

.configurator-mode-block,
.configurator-stage,
.configurator-sidebar {
    min-width: 0; /* Grid-Kinder dürfen die Spalte nicht aufweiten */
}

.configurator-sidebar,
.configurator-mode-tools {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
}

/* Text/Vorlage: die beiden gestrichelten „Hinzufügen"-Buttons */
.gbc-tools-block {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-2) var(--space-3);
}

/* Der Warenkorb-Block bringt eigenen Abstand mit — in der Spalte regelt der gap */
.configurator-sidebar .configurator-actions {
    margin-top: 0;
}

@media (min-width: 1024px) {
    .configurator-grid {
        grid-template-columns: minmax(0, 1fr) 320px;
        grid-template-rows: auto 1fr;
        -moz-column-gap: var(--space-8);
             column-gap: var(--space-8);
        row-gap: var(--space-4);
        align-items: start;
    }

    .configurator-stage {
        grid-column: 1;
        grid-row: 1 / span 2;
        /* Die Werkzeugspalte ist länger als die Front: die Front bleibt beim
           Scrollen durch Bilder/Hintergründe im Blick. 6rem = Sticky-Header
           + Luft, wie scroll-margin-top von #konfigurator (main.css). */
        position: sticky;
        top: 6rem;
    }

    .configurator-mode-block {
        grid-column: 2;
        grid-row: 1;
    }

    .configurator-sidebar {
        grid-column: 2;
        grid-row: 2;
    }

    /* Modus-Umschalter als zweispaltiger Block statt zentrierter Zeile */
    .configurator-mode-block .mode-selector {
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
        gap: var(--space-2);
    }

    .configurator-mode-block .mode-option {
        justify-content: center;
        padding: var(--space-3);
        white-space: normal;
        line-height: 1.2;
    }

    /* Text/Vorlage untereinander in voller Spaltenbreite */
    .configurator-sidebar .gbc-tools-block .gbc-add-title-btn {
        flex: 1 1 100%;
        justify-content: center;
    }

    /* Bildkacheln: 4 pro Zeile in der schmalen Spalte (statt 3 × 80 px) */
    .configurator-sidebar .gbc-image-previews-container {
        grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
        gap: var(--space-2);
    }

    /* 17+ Kacheln in 4er-Zeilen plus Upload-Button überschreiten die
       generischen 600 px des aufgeklappten Panels — der Inhalt liefe sonst
       über den Warenkorb-Block. */
    .configurator-sidebar .gbc-collapsible-content[aria-hidden="false"] {
        max-height: 1200px;
    }

    .configurator-sidebar .configurator-actions {
        padding: var(--space-4);
        padding-bottom: calc(var(--space-4) + env(safe-area-inset-bottom, 0px));
    }

    .configurator-sidebar .configurator-actions .btn {
        width: 100%;
        min-width: 0;
    }
}

@media (min-width: 1280px) {
    .configurator-grid {
        grid-template-columns: minmax(0, 1fr) 360px;
        -moz-column-gap: var(--space-10);
             column-gap: var(--space-10);
    }
}

/* ============================================
   CALENDAR CONTAINER
   Physical: 34.5cm × 24cm
   ============================================ */

.gbc-calendar-title-button-wrapper {
    text-align: center;
    margin-bottom: var(--space-4);
}

.gbc-add-title-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-2) var(--space-4);
    background: var(--color-bg-white);
    border: 2px dashed var(--color-border);
    border-radius: var(--radius-lg);
    cursor: pointer;
    font-size: var(--font-size-base);
    transition: all var(--transition-fast);
}

.gbc-add-title-btn:hover {
    border-color: var(--color-primary);
    background: rgba(var(--color-primary-rgb), 0.05);
}

/* Calendar Grid — die-exact WYSIWYG (SurpriseCalendar 2026-07-22).
   Die Türen liegen ABSOLUT auf der Stanzgeometrie KAL6007: sichtbare Front
   330 × 240 mm, Positionen/Größen pro Tür in Prozent der Front. Quelle der
   mm-Werte: backend PrintGenerator::DOOR_MM_FRONT_VIEW — bei Stanzänderungen
   BEIDE Stellen anpassen (Drift-Guard: door-geometry.test.js). Das frühere
   Flex-Grid (30/22, gleiche Spaltenhöhen) wich sichtbar von der gedruckten
   Ware ab (Tür an Platz 3: 50 mm Stanze vs. ~26 mm im UI). */
#gbc-calendar-container.gbc-multi-image-layout {
    position: relative;
    background-color: #ffffff;
    border: 1px solid var(--color-border);
    border-radius: 0;
    box-shadow: var(--shadow-lg);
    aspect-ratio: 33 / 24;  /* 330 × 240 mm Front */
    box-sizing: border-box;
}

/* Door Styles.
   2026-09-30: die Tür trägt nur noch eine leicht strichlierte 1-px-Linie —
   reiner Bildschirmhinweis auf die Stanze, KEIN Rahmen: die Druckdatei zeichnet
   seit heute keinen Türrahmen mehr (PrintNoDoorFrameTest). Vorher: 2 px beige,
   mit Bild durchgezogen ziegelrot; Einzelbild 3 px weiß + dunkle Kontur.
   Warmgrau mit 90 % Deckung, weil die Linie auf der weißen Leerfront UND auf
   Fotos tragen muss: Weiß verschwand auf der Leerfront, 35-%-Schwarz auf
   dunklen Fotos (Live-Vergleich 2026-09-30). Dieselbe Linie in beiden Modi und
   mit/ohne Bild — Guard: door-cut-line.test.js. */
.gbc-calendar-door {
    position: absolute;
    background-color: #F0EADD;
    border: 1px dashed rgba(140, 130, 118, 0.9);
    border-radius: 0;
    overflow: hidden;
    transition: all 0.2s ease-in-out;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    cursor: pointer;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);
    touch-action: manipulation;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
}

/* Türgeometrie (Prozent der 330×240-mm-Front; gilt für den Konfigurator UND
   die Single-Image-Cutouts — identische Stanze). */
.gbc-calendar-door[data-door-id="1"],  .gbc-static-door[data-slot="1"]  { left: 5.594%;  top: 6.054%;  width: 13.679%; height: 30.417%; }
.gbc-calendar-door[data-door-id="2"],  .gbc-static-door[data-slot="2"]  { left: 5.539%;  top: 46.863%; width: 13.712%; height: 47.104%; }
.gbc-calendar-door[data-door-id="3"],  .gbc-static-door[data-slot="3"]  { left: 24.527%; top: 5.967%;  width: 31.821%; height: 20.946%; }
.gbc-calendar-door[data-door-id="4"],  .gbc-static-door[data-slot="4"]  { left: 24.533%; top: 32.696%; width: 31.830%; height: 27.925%; }
.gbc-calendar-door[data-door-id="5"],  .gbc-static-door[data-slot="5"]  { left: 24.542%; top: 66.421%; width: 31.827%; height: 10.842%; }
.gbc-calendar-door[data-door-id="6"],  .gbc-static-door[data-slot="6"]  { left: 24.548%; top: 83.038%; width: 31.827%; height: 10.946%; }
.gbc-calendar-door[data-door-id="7"],  .gbc-static-door[data-slot="7"]  { left: 61.652%; top: 6.054%;  width: 13.679%; height: 30.417%; }
.gbc-calendar-door[data-door-id="8"],  .gbc-static-door[data-slot="8"]  { left: 61.667%; top: 46.925%; width: 13.679%; height: 47.071%; }
.gbc-calendar-door[data-door-id="9"],  .gbc-static-door[data-slot="9"]  { left: 80.745%; top: 6.008%;  width: 13.679%; height: 30.417%; }
.gbc-calendar-door[data-door-id="10"], .gbc-static-door[data-slot="10"] { left: 80.758%; top: 46.925%; width: 13.679%; height: 47.071%; }

.gbc-calendar-door:hover {
    border-color: var(--color-primary);
    transform: scale(1.03);
}

/* 2026-09-30 ENTFERNT: `.gbc-calendar-door.has-image { border: solid
   var(--color-primary) }` — die Tür mit Bild sah damit gerahmt aus. Sie trägt
   jetzt dieselbe Strichlinie wie die leere Tür. */

/* Door Placeholder.
   2026-08-11: enthält nur noch den „Bild hinzufügen"-Hinweis — die Türnummer
   ist an die Tür gewandert (s. .gbc-calendar-door > .gbc-door-number weiter
   unten). Der Hinweis rutscht deshalb ans untere Türende: der Chip sitzt jetzt
   exakt in der Türmitte und läge sonst über ihm. */
.gbc-image-placeholder {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    padding-bottom: 0.35em;
    height: 100%;
    text-align: center;
    color: var(--color-text-light);
    pointer-events: none;
    box-sizing: border-box;
}

/* 2026-08-11 ENTFERNT: die alte Basisregel `.gbc-door-number { font-size: 1.5em;
   font-weight: bold; color: var(--color-accent-dark) }` und ihr 480-px-Override
   `{ font-size: 1em }`. Beide bemaßten die Nummer als schlichten Text im
   Platzhalter des Mehrfachbild-Modus. Seit die Nummer in BEIDEN Modi derselbe
   Chip ist, gewinnt ohnehin die Chip-Regel (Spezifität 0,2,0 gegen 0,1,0) —
   die Altregeln waren nur noch irreführend. */

.gbc-door-prompt {
    font-size: 0.75em;
    display: none;
}

@media (min-width: 768px) {
    .gbc-door-prompt {
        display: block;
    }
}

/* Türen 5 und 6 sind mit 26 mm die flachsten der Stanze (10.84 % der Fronthöhe).
   Dort ist neben dem mittigen Chip kein Platz mehr für den Hinweistext — er
   überlagerte ihn. Die gestrichelte Tür und der Chip bleiben als Affordanz. */
.gbc-calendar-door[data-door-id="5"] .gbc-door-prompt,
.gbc-calendar-door[data-door-id="6"] .gbc-door-prompt {
    display: none;
}

/* Door Image Viewport */
.gbc-door-image {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    cursor: grab;
    touch-action: none;
}

.gbc-door-image:active {
    cursor: grabbing;
}

/* Actual image inside viewport (for pan/zoom) */
.gbc-door-image-inner {
    position: absolute;
    /* Width/height set by transform scale - don't set here */
    transform-origin: 0 0;
    max-width: none;
    max-height: none;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
    pointer-events: none;
}

/* Drop zone active state */
.gbc-calendar-door.drop-active {
    border-color: var(--color-primary) !important;
    border-style: dashed !important;
    background-color: rgba(var(--color-primary-rgb), 0.15);
    transform: scale(1.05);
}

/* Preview item being dragged */
.gbc-preview-item {
    aspect-ratio: 1;
    border: 2px solid var(--color-border);
    border-radius: var(--radius-md);
    background-size: cover;
    background-position: center;
    cursor: grab;
    transition: transform 0.2s, border-color 0.2s;
    touch-action: none;
}

.gbc-preview-item:hover {
    border-color: var(--color-primary);
}

.gbc-preview-item:active {
    cursor: grabbing;
}

/* Kontext-Werkzeuge zum Bild (Zoom, Entfernen; Multi: für die aktive Tür).
   Seit 2026-09-25 UNTER der Front — Text/Vorlage stehen in der Werkzeug-
   spalte. Die Zeile reserviert ihre Höhe, damit die Front nicht springt,
   sobald ein Bild geladen ist und die Controls erscheinen. */
.gbc-multi-toolbar,
.gbc-single-toolbar {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--space-3);
    flex-wrap: wrap;
    min-height: 44px;
    margin-top: var(--space-3);
}

.gbc-multi-zoom-controls {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    background: rgba(0, 0, 0, 0.06);
    border-radius: var(--radius-md);
    padding: 4px 10px;
}

.gbc-multi-zoom-label {
    font-size: var(--font-size-sm);
    color: var(--color-text);
    font-weight: 500;
    white-space: nowrap;
}

.gbc-multi-zoom-buttons {
    display: flex;
    gap: 4px;
}

/* Active door highlight: whichever door the toolbar acts on.
   2026-09-30: strichliert statt 3-px-Vollring (kein Rahmen-Look mehr). Die
   eigene 1-px-Linie der Tür wird transparent, das ::after zeichnet 2 px direkt
   innen daneben — optisch EINE rote Strichlinie, ohne dass sich die Randbreite
   und damit die Bildlage in der Tür ändert. */
.gbc-calendar-door.is-active {
    border-color: transparent;
}

.gbc-calendar-door.is-active::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    border: 2px dashed var(--color-primary, #B23A31);
    pointer-events: none;
    z-index: 18;
}

/* Door Text Overlay */
.gbc-door-text-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none; /* Overlay is pass-through */
    z-index: 20;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding-bottom: 40px;
}

.gbc-door-text {
    position: absolute;
    left: 50%;
    top: 85%;
    transform: translate(-50%, -50%);
    padding: 4px 10px;
    background: rgba(0, 0, 0, 0.7);
    color: white;
    border-radius: var(--radius-sm);
    font-size: 0.9em;
    word-wrap: break-word;
    max-width: 90%;
    text-align: center;
    cursor: grab;
    pointer-events: auto; /* Text IS interactive */
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
    touch-action: none;
    z-index: 25;
    font-synthesis: none; /* Druck setzt den Regular-Schnitt (2026-09-12) */
}

/* Customize Text Button */
.gbc-customize-text-btn {
    position: absolute;
    top: 4px;
    right: 4px;
    width: 28px;
    height: 28px;
    background: rgba(var(--color-primary-rgb), 0.9);
    color: white;
    border: 2px solid rgba(255, 255, 255, 0.9);
    border-radius: var(--radius-sm);
    cursor: pointer;
    font-size: 12px;
    font-weight: bold;
    z-index: 10;
    transition: all 0.2s;
}

.gbc-customize-text-btn:hover {
    background: rgba(var(--color-primary-rgb), 1);
    transform: scale(1.1);
}

/* Title Overlay */
.gbc-title-overlay {
    position: absolute;
    top: 10%;
    left: 50%;
    transform: translateX(-50%);
    padding: 0;
    background: transparent;
    cursor: move;
    z-index: 20;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-1);
}

/* Buttons container — floats ABOVE the text box, out of flow (2026-09-12):
   the overlay's top edge is thereby the text box's top edge, which is the `y`
   the print reads. Before, the buttons row sat in flow and the print drew the
   text ~3 % of the face height higher than the configurator showed it. */
.gbc-title-overlay .gbc-title-buttons {
    position: absolute;
    bottom: 100%;
    left: 50%;
    transform: translateX(-50%);
    margin-bottom: 4px;
    display: flex;
    gap: var(--space-1);
    opacity: 0;
    transition: opacity 0.2s ease;
}

.gbc-title-overlay:hover .gbc-title-buttons {
    opacity: 1;
}

/* The text box. Font size (face-relative px, TextScale.js), colour, letter
   spacing, shadow, outline and rotation are set inline by paintTextBox();
   every rule here has a print mirror in PrintGenerator::compositeTitle. */
.gbc-title-text-container {
    min-height: 1em;
    line-height: 1.2;
    font-weight: bold;
    font-synthesis: none;
    transform-origin: center center;
    /* Outline behind the fill (paint-order) — CSS variable set per layer.
       html2canvas cannot draw it: PreviewGenerator swaps it for a shadow ring
       during the cart capture (workaround E). */
    -webkit-text-stroke: var(--text-stroke, 0);
    paint-order: stroke fill;
}

.gbc-title-text {
    display: block;
    text-align: center;
    white-space: pre;
    font-weight: inherit;
    font-synthesis: none;
}

.gbc-title-line {
    display: block;
}

.gbc-title-edit-btn,
.gbc-title-remove-btn {
    background: rgba(0, 0, 0, 0.6);
    border: none;
    cursor: pointer;
    padding: 4px 8px;
    font-size: 0.85rem;
    color: white;
    border-radius: var(--radius-sm);
    opacity: 0.9;
}

.gbc-title-edit-btn:hover,
.gbc-title-remove-btn:hover {
    opacity: 1;
    background: rgba(0, 0, 0, 0.8);
}

/* ============================================
   COLLAPSIBLE PANELS
   ============================================ */

.gbc-collapsible-section {
    margin-bottom: var(--space-4);
    background: var(--color-bg-white);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    overflow: hidden;
}

.gbc-collapsible-toggle {
    width: 100%;
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-4);
    background: none;
    border: none;
    cursor: pointer;
    font-size: var(--font-size-base);
    font-weight: 500;
    text-align: left;
    transition: background var(--transition-fast);
}

.gbc-collapsible-toggle:hover {
    background: var(--color-bg);
}

.gbc-toggle-icon {
    font-size: 1.25rem;
}

.gbc-toggle-text {
    flex: 1;
}

.gbc-toggle-arrow {
    transition: transform var(--transition-base);
}

.gbc-collapsible-toggle[aria-expanded="true"] .gbc-toggle-arrow {
    transform: rotate(180deg);
}

.gbc-collapsible-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height var(--transition-base);
}

/* (Expanded state is defined once, lower in this file — see FMAE-243.
   The previous 500px rule here was dead: a later un-mediated rule overrode it
   on every viewport.) */

/* Image Previews Grid */
.gbc-image-previews-container {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
    gap: var(--space-2);
    min-height: 40px;
}

/* Upload button is a full-width call-to-action pinned to the FIRST slot of the
   grid, regardless of DOM order (stock/background images are appended after it
   in the DOM). order:-1 + spanning all columns keeps it on top on every viewport. */
.gbc-image-previews-container .upload-btn {
    order: -1;
    grid-column: 1 / -1;
}

/* Empty / loading state spans full row so it never collides with the upload button */
.gbc-image-previews-container .loading-text {
    grid-column: 1 / -1;
    padding: var(--space-3);
    margin: 0;
}

/* Combined images grid container for unified stock + user images */
.gbc-combined-images-grid {
    display: contents; /* Makes children flow into parent grid */
}

/* On larger screens, use 3-column section layout */
@media (min-width: 768px) {
    .gbc-image-previews-container {
        grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
        gap: var(--space-3);
    }
}

.gbc-preview-item {
    aspect-ratio: 1;
    border: 2px solid var(--color-border);
    border-radius: var(--radius-md);
    background-size: cover;
    background-position: center;
    cursor: pointer;
    transition: all 0.2s;
}

.gbc-preview-item:hover {
    border-color: var(--color-primary);
    transform: scale(1.05);
}

/* Loading state while scanning images */
.gbc-preview-item.gbc-loading {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: var(--color-bg);
    border: 2px dashed var(--color-primary);
    color: var(--color-text-muted);
    font-size: var(--font-size-xs);
    gap: var(--space-1);
}

.gbc-spinner {
    width: 24px;
    height: 24px;
    border: 3px solid var(--color-border);
    border-top-color: var(--color-primary);
    border-radius: 50%;
    animation: spin 1s linear infinite;
}

@keyframes spin {
    to { transform: rotate(360deg); }
}

/* Large spinner for modal upload loading */
.gbc-spinner-large {
    width: 48px;
    height: 48px;
    border: 4px solid var(--color-border);
    border-top-color: var(--color-primary);
    border-radius: 50%;
    animation: spin 1s linear infinite;
}

.gbc-upload-loading {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-3);
    padding: var(--space-6);
    text-align: center;
}

.gbc-loading-text {
    font-weight: 600;
    color: var(--color-primary-text);
    font-size: var(--font-size-base);
}

.gbc-loading-subtext {
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

.upload-btn {
    padding: var(--space-3) var(--space-4);
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    font-weight: 600;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    line-height: 1.25;
    min-height: 44px;
    box-sizing: border-box;
    /* Full-width text button: override .gbc-preview-item's square aspect-ratio */
    aspect-ratio: auto;
    /* Long label wraps at spaces (and breaks as a last resort) instead of
       overflowing the button on narrow panels — 320px up. */
    white-space: normal;
    overflow-wrap: break-word;
    /* Width/placement handled by grid */
}

/* ============================================
   MODALS
   ============================================ */

.gbc-modal {
    position: fixed;
    /* Sits above the sticky site header (z-index: 10001 in main.css) */
    z-index: 10010;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.6);
    display: flex;
    align-items: center;
    justify-content: center;
}

/* 2026-09-30: <main> ist ein eigener Stapelkontext (design-system.css:
   position: relative; z-index: 1) — die Modals darin kamen mit ihren 10010
   nie über den Sticky-Header (10001). Auf Handys quer (375 px hoch) und auf
   kleinen Laptops verdeckte der Header Titel und ✕ jedes Konfigurator-Modals
   (gemessen: elementFromPoint am Modal-Kopf = .nav-links). Nur solange ein
   Modal offen ist, liegt <main> über dem Header; der globale z-index bleibt
   unangetastet. ModalManager setzt body.modal-open, das Vorschau-Modal wird
   direkt per style.display geöffnet — daher zusätzlich :has() (wie beim
   PWA-Banner in main.css). */
body.modal-open main,
body:has(.gbc-modal[style*="display: flex"]) main {
    z-index: 10002;
}

.gbc-modal-content {
    background: var(--color-bg-white);
    border-radius: var(--radius-xl);
    max-width: 500px;
    width: 90%;
    max-height: 80vh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    box-shadow: var(--shadow-xl);
}

.gbc-modal-header {
    padding: var(--space-4);
    border-bottom: 1px solid var(--color-border);
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: var(--gradient-primary);
    color: white;
}

.gbc-modal-header h3 {
    margin: 0;
    font-size: var(--font-size-lg);
    /* die globale h3-Regel (color: var(--color-text)) würde sonst dunkel auf
       der roten Header-Fläche rendern — explizit weiß (Redesign 2026-07-08) */
    color: white;
}

.gbc-modal-close {
    font-size: 1.5rem;
    cursor: pointer;
    opacity: 0.8;
    line-height: 1;
}

.gbc-modal-close:hover {
    opacity: 1;
}

.gbc-modal-tabs {
    display: flex;
    border-bottom: 1px solid var(--color-border);
}

.gbc-tab-btn {
    flex: 1;
    padding: var(--space-3);
    border: none;
    background: transparent;
    cursor: pointer;
    font-weight: 500;
    transition: all 0.2s;
}

.gbc-tab-btn:hover {
    background: var(--color-bg);
}

.gbc-tab-btn.active {
    background: var(--color-bg-white);
    border-bottom: 3px solid var(--color-primary);
    color: var(--color-primary-text);
}

.gbc-modal-body {
    padding: var(--space-4);
    overflow-y: auto;
    flex: 1;
}

.gbc-tab-content {
    display: none;
}

.gbc-tab-content.active {
    display: block;
}

.gbc-modal-image-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
    gap: var(--space-2);
}

.gbc-modal-image-item {
    aspect-ratio: 1;
    background-size: cover;
    background-position: center;
    border-radius: var(--radius-md);
    cursor: pointer;
    border: 3px solid transparent;
    transition: all 0.2s;
}

.gbc-modal-image-item:hover {
    border-color: var(--color-primary);
    transform: scale(1.05);
}

.gbc-modal-upload-area {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: var(--space-8);
    border: 2px dashed var(--color-primary);
    border-radius: var(--radius-lg);
    cursor: pointer;
    margin-bottom: var(--space-4);
    background: rgba(var(--color-primary-rgb), 0.05);
    transition: all 0.2s;
}

.gbc-modal-upload-area:hover {
    background: rgba(var(--color-primary-rgb), 0.1);
}

.upload-icon {
    font-size: 2.5rem;
    margin-bottom: var(--space-2);
}

/* Title Customization Modal */
.gbc-text-customization-content {
    max-width: 400px;
}

.gbc-text-modal-body .form-group {
    margin-bottom: var(--space-4);
}

.gbc-text-modal-body label {
    display: block;
    margin-bottom: var(--space-2);
    font-weight: 500;
}

.gbc-font-select option {
    padding: var(--space-2);
}

.gbc-title-preview {
    margin-top: var(--space-4);
    padding-top: var(--space-4);
    border-top: 1px solid var(--color-border);
}

#gbc-title-preview-box {
    padding: var(--space-4);
    background: var(--color-bg);
    border-radius: var(--radius-md);
    text-align: center;
    min-height: 60px;
    display: flex;
    align-items: center;
    justify-content: center;
}

#gbc-title-preview-box {
    overflow: hidden; /* rotated boxes may poke out */
    min-height: 90px;
}

/* The preview box is painted by paintTextBox() exactly like an overlay. */
#gbc-title-preview-shape {
    line-height: 1.2;
    font-weight: 700;
    font-synthesis: none;
    transform-origin: center center;
    -webkit-text-stroke: var(--text-stroke, 0);
    paint-order: stroke fill;
    max-width: 100%;
}

#gbc-title-preview-text {
    display: block;
    text-align: center;
    white-space: pre;
    font-weight: inherit;
    font-synthesis: none;
}

.gbc-text-modal-hint {
    margin: 0 0 var(--space-4);
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

.gbc-title-textarea {
    resize: vertical;
    min-height: 2.6em;
    line-height: 1.3;
}

/* Two sliders side by side (spacing + rotation) */
.gbc-form-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--space-3);
}

@media (max-width: 480px) {
    .gbc-form-row {
        grid-template-columns: 1fr;
    }
}

/* Outline options - hidden until enabled (same pattern as .gbc-bg-options) */
.gbc-stroke-options {
    display: none;
}

.gbc-stroke-options.visible {
    display: block;
}

.gbc-text-modal-body .form-actions {
    display: flex;
    gap: var(--space-2);
}

.gbc-text-modal-body .form-actions .btn {
    flex: 1;
}

/* Colour swatches (core/Palettes.js) above each colour input */
.gbc-swatches {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
    margin-bottom: var(--space-2);
}

.gbc-swatch-group {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
}

.gbc-swatch-group__label {
    flex: 0 0 auto;
    min-width: 6.5em;
    white-space: nowrap;
    font-size: var(--font-size-xs, 0.75rem);
    color: var(--color-text-muted);
    text-transform: uppercase;
    letter-spacing: 0.05em;
}

.gbc-swatch {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    border: 2px solid var(--color-border);
    background: var(--swatch, #fff);
    cursor: pointer;
    padding: 0;
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
    transition: transform var(--transition-fast), border-color var(--transition-fast);
}

.gbc-swatch:hover {
    transform: scale(1.12);
    border-color: var(--color-text-muted);
}

.gbc-swatch.active {
    border-color: var(--color-primary);
    box-shadow: 0 0 0 2px var(--color-bg-white), 0 0 0 4px var(--color-primary);
}

/* Design templates (components/TemplateChooser.js) */
.gbc-template-modal-content {
    max-width: 640px;
}

.gbc-template-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: var(--space-3);
}

.gbc-template-card {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
    padding: 0 0 var(--space-3);
    border: 2px solid var(--color-border);
    border-radius: var(--radius-lg);
    background: var(--color-bg-white);
    cursor: pointer;
    text-align: left;
    overflow: hidden;
    transition: border-color var(--transition-fast), transform var(--transition-fast);
}

.gbc-template-card:hover {
    border-color: var(--color-primary);
    transform: translateY(-2px);
}

.gbc-template-card__preview {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 64px;
    padding: var(--space-2);
    font-size: 1.35rem;
    font-weight: 700;
    font-synthesis: none;
    color: #fff;
    text-shadow: 0.06em 0.06em 0.12em rgba(0, 0, 0, 0.35);
    text-align: center;
    line-height: 1.15;
}

.gbc-template-card__name {
    padding: 0 var(--space-3);
    font-weight: 600;
}

.gbc-template-card__desc {
    padding: 0 var(--space-3);
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

.gbc-template-card__swatches {
    display: flex;
    gap: 4px;
    padding: 0 var(--space-3);
}

.gbc-template-card__swatches i {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    border: 1px solid rgba(0, 0, 0, 0.12);
}

/* Form divider for sections */
.form-group-divider {
    display: flex;
    align-items: center;
    margin: var(--space-4) 0;
    gap: var(--space-3);
}

.form-group-divider::before,
.form-group-divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--color-border);
}

.form-group-divider span {
    font-size: var(--font-size-sm);
    font-weight: 600;
    color: var(--color-text-muted);
    text-transform: uppercase;
    letter-spacing: 0.05em;
}

/* Background options - hidden by default */
.gbc-bg-options {
    display: none;
}

.gbc-bg-options.visible {
    display: block;
}

/* Füllung wählen im Vorschau-Modal (SurpriseCalendar 2026-09-12) */
.gbc-filling-chooser {
    margin: var(--space-4) 0;
    padding: var(--space-3) var(--space-4);
    background: var(--color-bg);
    border-radius: var(--radius-lg);
}

.gbc-filling-chooser h4 {
    margin: 0 0 var(--space-1);
}

.gbc-filling-hint {
    margin: 0 0 var(--space-3);
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

.gbc-filling-options {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: var(--space-2);
}

/* SurpriseCalendar (2026-10-08): auf schmalen Handys eine Füllung je Zeile */
@media (max-width: 600px) {
    .gbc-filling-options {
        grid-template-columns: 1fr;
    }
}

.gbc-filling-option {
    display: flex;
    gap: var(--space-2);
    align-items: center;
    padding: var(--space-2) var(--space-3);
    border: 2px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-bg-white);
    cursor: pointer;
    transition: border-color var(--transition-fast);
}

.gbc-filling-option:hover {
    border-color: var(--color-text-muted);
}

.gbc-filling-option.is-selected {
    border-color: var(--color-primary);
    background: rgba(var(--color-primary-rgb), 0.05);
}

.gbc-filling-option input {
    flex: none;
    margin: 0;
}

/* Produktbild links (SurpriseCalendar 2026-10-08) */
.gbc-filling-option__img {
    flex: none;
    width: 56px;
    height: 56px;
    -o-object-fit: cover;
       object-fit: cover;
    border-radius: var(--radius-md);
    background: var(--color-bg);
}

.gbc-filling-option__img--leer {
    border: 1px dashed var(--color-border);
}

.gbc-filling-option__body {
    display: flex;
    flex-direction: column;
    gap: 2px;
    font-size: var(--font-size-sm);
}

.gbc-filling-option__price {
    color: var(--color-primary-text);
    font-weight: 600;
}

.gbc-filling-option small {
    color: var(--color-text-muted);
}

/* Configurator Actions */
.configurator-actions {
    display: flex;
    gap: var(--space-4);
    justify-content: center;
    margin-top: var(--space-6);
    padding: var(--space-6);
    background: var(--color-bg-white);
    border-radius: var(--radius-xl);
    box-shadow: var(--shadow-sm);
}

.configurator-actions .btn {
    min-width: 150px;
}

/* Loading and Coming Soon */
.loading-text,
.coming-soon {
    text-align: center;
    color: var(--color-text-muted);
    padding: var(--space-8);
}

/* ============================================
   COMPACT HERO (Homepage)
   ============================================ */

.hero-compact {
    background: var(--gradient-gold);
    color: white;
    padding: var(--space-4) 0;
    text-align: center;
}

.hero-compact h1 {
    font-size: var(--font-size-2xl);
    margin-bottom: var(--space-2);
}

.hero-compact p {
    font-size: var(--font-size-base);
    opacity: 0.9;
    margin: 0;
}

/* ============================================
   FULL WIDTH BUTTON
   ============================================ */

.btn-full {
    width: 100%;
}

.btn-block {
    display: block;
    width: 100%;
}

/* Cart CTA: clean two-line layout on narrow screens, single line otherwise */
.cart-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: var(--space-1) var(--space-3);
    line-height: 1.25;
}

.cart-cta .cart-cta-label,
.cart-cta .price-display {
    white-space: nowrap;
}

/* Cart-Icon im CTA — Linien-SVG wie im Header (ersetzt 🛒-Emoji 2026-07-15) */
.cart-cta .cart-cta-icon {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
}

/* ============================================
   MOBILE RESPONSIVE
   Mobile-First Approach
   ============================================ */

/* Base mobile styles — Seitenabstand kommt seit 2026-09-25 vom .container
   der Arbeitsfläche (16 px), nicht mehr von .configurator-section/.gbc-layout-container. */

/* Small mobile devices */
@media (max-width: 480px) {
    .hero-compact h1 {
        font-size: var(--font-size-xl);
    }
    
    .hero-compact p {
        font-size: var(--font-size-sm);
    }
    
    /* 2026-08-11 ENTFERNT: `.gbc-door-number { font-size: 1em }`. Bemaß die
       Türnummer des Mehrfachbild-Modus, als sie noch schlichter Text im
       Platzhalter war. Seit die Nummer in beiden Modi derselbe Chip ist, greift
       ohnehin dessen fluide clamp()-Größe (Spezifität 0,2,0 gegen 0,1,0) — die
       Regel war wirkungslos und widersprach der Chip-Bemaßung nur scheinbar. */

    .gbc-add-title-btn {
        font-size: var(--font-size-sm);
        padding: var(--space-2);
    }
    
    .gbc-collapsible-toggle {
        padding: var(--space-3);
    }
    
    .gbc-toggle-text {
        font-size: var(--font-size-sm);
    }
    
    .upload-btn {
        width: 100%;
        padding: var(--space-3) var(--space-4);
    }
    
    .configurator-actions {
        padding: var(--space-4);
        margin-top: var(--space-4);
    }

    /* Modal full screen on mobile */
    .gbc-modal-content {
        width: 100%;
        height: 100%;
        max-height: 100%;
        border-radius: 0;
    }
    
    .gbc-modal-image-grid {
        grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
    }
    
    .gbc-modal-upload-area {
        padding: var(--space-4);
    }
    
    .upload-icon {
        font-size: 2rem;
    }
}

/* Tablets and larger phones */
@media (min-width: 481px) and (max-width: 768px) {
    .hero-compact h1 {
        font-size: var(--font-size-2xl);
    }
    
    .gbc-door-prompt {
        display: block;
        font-size: 0.65em;
    }
}

/* Desktop and larger tablets */
@media (min-width: 769px) {
    .hero-compact {
        padding: var(--space-6) 0;
    }
    
    .hero-compact h1 {
        font-size: var(--font-size-3xl);
    }
    
    .hero-compact p {
        font-size: var(--font-size-lg);
    }
    
    .configurator-actions .btn {
        min-width: 200px;
    }
    
    .configurator-actions {
        flex-direction: row;
    }
    
    .btn-full {
        width: auto;
        min-width: 300px;
    }
}

/* Collapsible section expanded state */
.gbc-collapsible-content[aria-hidden="false"] {
    max-height: 600px;
    padding: var(--space-4);
    padding-top: var(--space-2);
    overflow: visible;
}

/* Touch-friendly adjustments */
@media (hover: none) and (pointer: coarse) {
    .gbc-calendar-door:hover {
        transform: none;
    }
    
    .gbc-preview-item:hover {
        transform: none;
    }
    
    .gbc-calendar-door:active {
        transform: scale(0.98);
        border-color: var(--color-primary);
    }
    
    .gbc-preview-item:active {
        transform: scale(0.95);
        border-color: var(--color-primary);
    }
}

/* Body scroll lock when modal open */
body.modal-open {
    overflow: hidden;
    position: fixed;
    width: 100%;
}

/* Fix iOS safe area */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
    .configurator-actions {
        padding-bottom: calc(var(--space-6) + env(safe-area-inset-bottom));
    }
}

/* ============================================
   SINGLE-IMAGE CONFIGURATOR
   330 × 240 mm Stanzen-Front (33/24, KAL6007) — wie Multi-Image;
   Quelle: PrintGenerator::DOOR_MM_FRONT_VIEW
   ============================================ */

/* Single Image Calendar Container - Matches multi-image dimensions */
#gbc-single-calendar-container.gbc-single-image-layout {
    position: relative;
    display: block;  /* Changed to block for proper aspect-ratio */
    width: 100%;
    background-color: #ffffff;
    border: 1px solid var(--color-border);
    border-radius: 0;
    box-shadow: var(--shadow-lg);
    aspect-ratio: 33 / 24;  /* 330 × 240 mm Stanzen-Front (2026-07-22) */
    box-sizing: border-box;
    overflow: hidden;
}

/* Background Image Layer - Full container, behind doors */
.gbc-single-background-layer {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 1;
    overflow: hidden;
    cursor: grab;
    touch-action: none;
}

.gbc-single-background-layer:active {
    cursor: grabbing;
}

.gbc-single-background-image {
    position: absolute;
    top: 0;
    left: 0;
    transform-origin: 0 0;
    max-width: none;
    max-height: none;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
    pointer-events: none;
}

/* Upload Placeholder */
.gbc-single-upload-placeholder {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    color: var(--color-text-light);
    text-align: center;
    pointer-events: none;
    z-index: 2;
}

.gbc-single-upload-placeholder .placeholder-icon {
    font-size: 3rem;
    margin-bottom: var(--space-2);
}

.gbc-single-upload-placeholder .placeholder-text {
    font-size: var(--font-size-lg);
    font-weight: 500;
}

/* Door Overlay - Sits on top with transparent cutouts.
   SurpriseCalendar (2026-07-22): Cutouts liegen absolut auf der
   Stanzgeometrie (siehe [data-slot]-Regeln beim Multi-Grid). */
.gbc-single-door-overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 5;
    pointer-events: none;
    box-sizing: border-box;
}

/* Static Doors - Transparent, only the light dashed die line (2026-09-30,
   dieselbe Linie wie .gbc-calendar-door, Begründung dort). */
.gbc-static-door {
    position: absolute;
    background-color: transparent;  /* Transparent to show background image */
    border: 1px dashed rgba(140, 130, 118, 0.9);
    border-radius: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    transition: all 0.2s ease;
}

/* ============================================
   ZUSATZBILDER (Einzelbild, 2026-09-30) — components/ImageLayers.js
   Ebene = Box aus left/top (Mittelpunkt), width (% der Front), aspect-ratio
   und transform (inline). z 3: über dem Hauptbild (1), UNTER Türlinien und
   -nummern (Overlay 5) — wie im Druck, wo die Nummern zuletzt kommen. Der
   Auswahlrahmen liegt auf z 19, damit seine Griffe greifbar bleiben.
   ============================================ */
.gbc-image-layer {
    position: absolute;
    z-index: 3;
    box-sizing: border-box;
    overflow: hidden;
    cursor: move;
    touch-action: none;
    -moz-user-select: none;
         user-select: none;
    -webkit-user-select: none;
    transform-origin: center center;
}

.gbc-image-layer--circle {
    border-radius: 50%;
}

/* Maße setzt ImageLayers.paint() inline (Kreis: Cover-Ausschnitt ohne
   object-fit — html2canvas 1.4.1 kennt object-fit nicht). max-width: none
   hebt das globale img-Limit auf, sonst wird der Kreis-Ausschnitt gestaucht. */
.gbc-image-layer img {
    position: absolute;
    display: block;
    max-width: none;
    max-height: none;
    pointer-events: none;
}

/* Eltern-Block der Front: Bezugsrahmen des Auswahlrahmens (setzt ImageLayers) */
.gbc-image-layer-host {
    position: relative;
}

.gbc-image-layer-selection {
    position: absolute;
    z-index: 19;
    box-sizing: border-box;
    border: 2px dashed var(--color-primary, #B23A31);
    cursor: move;
    touch-action: none;
    transform-origin: center center;
}

.gbc-image-layer-selection[hidden] {
    display: none;
}

.gbc-image-layer-selection--circle {
    border-radius: 50%;
}

.gbc-image-layer-handle {
    position: absolute;
    width: 28px;
    height: 28px;
    padding: 0;
    border: 2px solid #fff;
    border-radius: 50%;
    background: var(--color-primary, #B23A31);
    color: #fff;
    font-size: 16px;
    line-height: 1;
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
    touch-action: none;
}

/* Drehgriff an einem Stiel über der Oberkante */
.gbc-image-layer-handle--rotate {
    top: -44px;
    left: 50%;
    margin-left: -14px;
    cursor: grab;
}

.gbc-image-layer-handle--rotate::after {
    content: '';
    position: absolute;
    top: 100%;
    left: 50%;
    width: 2px;
    height: 16px;
    margin-left: -1px;
    background: var(--color-primary, #B23A31);
}

.gbc-image-layer-handle--resize {
    right: -14px;
    bottom: -14px;
    border-radius: 6px;
    cursor: nwse-resize;
}

.gbc-image-layer-tools {
    position: absolute;
    top: calc(100% + 18px);
    left: 50%;
    /* aufrecht, auch wenn der Rahmen gedreht ist (--layer-rotation setzt ImageLayers) */
    transform: translateX(-50%) rotate(calc(-1 * var(--layer-rotation, 0deg)));
    display: flex;
    gap: 4px;
    padding: 3px;
    border-radius: var(--radius-md);
    background: rgba(255, 255, 255, 0.95);
    box-shadow: 0 1px 6px rgba(0, 0, 0, 0.25);
}

.gbc-image-layer-tools button {
    min-width: 32px;
    height: 32px;
    padding: 0 6px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: #fff;
    color: var(--color-text);
    font-size: 16px;
    cursor: pointer;
}

.gbc-image-layer-tools button.active {
    border-color: var(--color-primary);
    color: var(--color-primary-text);
    background: rgba(var(--color-primary-rgb), 0.08);
}

.gbc-image-layer-tools .gbc-image-layer-remove {
    color: var(--color-primary-text);
}

.gbc-image-layer-hint {
    margin: 0;
    padding: var(--space-3) var(--space-4) 0;
    font-size: var(--font-size-sm);
    color: var(--color-text-muted, #6b6b6b);
}

/* Door number - semi-transparent background for readability.
   2026-08-11: gilt jetzt für BEIDE Modi — der Mehrfachbild-Modus trug die Nummer
   vorher als schlichten Text im Platzhalter und verlor sie damit, sobald ein Bild
   in der Tür lag. Gleiche Optik in beiden Modi = gleiche Optik wie die
   Druckdatei (PrintGenerator::drawDoorNumbers). */
.gbc-static-door .gbc-door-number,
.gbc-calendar-door > .gbc-door-number {
    font-size: 1.5em;  /* Fallback für Browser ohne clamp() */
    /* 2026-08-10: Der Chip skaliert jetzt mit der Front statt fixer px-Größen.
       Der flachste Slot (5/6) ist nur 10.842 % der Fronthöhe — bei 320 px sind
       das 22.5 px inkl. 2×3 px Rahmen, also 16.5 px Innenhöhe. Ein statisch
       bemessener Chip passte dort nie. Obergrenze 1.5rem = bisheriger
       Desktop-Wert, Untergrenze 0.625rem = kleinster noch lesbarer Wert. */
    font-size: clamp(0.625rem, 3vw, 1.5rem);
    /* Pflicht: die von <body> geerbte line-height 1.6 blähte den Chip auf das
       1.6-fache der Schriftgröße auf (46.4 px auf dem Desktop) und ließ ihn in
       Slot 5/6 überlaufen. Der Chip ist immer einzeilig. */
    line-height: 1;
    font-weight: bold;
    color: rgba(255, 255, 255, 0.9);
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.7);
    background: rgba(0, 0, 0, 0.4);
    padding: 0.1em 0.5em;
    border-radius: var(--radius-sm);
    display: flex;
    align-items: center;
    justify-content: center;
    /* 2026-07-22: absolute Zentrierung statt Eltern-Flex — html2canvas
       (Warenkorb-Capture) rendert Flex-Zentrierung in den seit heute absolut
       positionierten Türen unzuverlässig (Chips wanderten aus der Mitte).
       transform-basierte Zentrierung captured stabil.
       ⚠️ top/left und transform sind EINE Einheit: wer `top` überschreibt, ohne
       `transform` zu neutralisieren, addiert beide Zentrierungen statt sie zu
       ersetzen und schiebt den Chip aus der Tür heraus (genau das war der
       ≤480-px-Bug, gefixt 2026-08-10). Siehe door-number-centering.test.js. */
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

/* Nur der Mehrfachbild-Modus: dort liegen Kundenbild (.gbc-door-image) und
   Türtext-Overlay (z-index 20) in derselben Tür. Die Nummer muss über beide —
   sie ist eine Produktionsvorgabe, nicht Kundeninhalt, und die Druckdatei
   zeichnet sie aus demselben Grund zuletzt. pointer-events: none, damit der
   Chip in der Türmitte weder Klick noch Drop der Tür abfängt (der Platzhalter
   macht es genauso). Die Zentrierung kommt aus der gemeinsamen Chip-Regel
   darüber und wird hier bewusst NICHT angefasst. */
.gbc-calendar-door > .gbc-door-number {
    z-index: 21;
    pointer-events: none;
}

/* Türgeometrie: siehe die gemeinsamen [data-door-id]/[data-slot]-Regeln
   beim Multi-Grid (Stanze KAL6007, 2026-07-22). */

/* Single-Image Toolbar: gemeinsame Regel mit .gbc-multi-toolbar (s. oben) */

/* Zoom Controls - Now in toolbar */
.gbc-single-zoom-controls {
    display: flex;
    gap: 4px;
    background: rgba(0, 0, 0, 0.1);
    border-radius: var(--radius-md);
    padding: 4px;
}

/* Remove Image Button - Toolbar version */
.gbc-remove-image-toolbar-btn {
    display: flex;
    align-items: center;
    gap: var(--space-1);
    padding: var(--space-1) var(--space-3);
    background: rgba(166, 35, 26, 0.1);
    color: var(--color-error);
    border: 1px solid rgba(166, 35, 26, 0.3);
    border-radius: var(--radius-md);
    cursor: pointer;
    font-size: var(--font-size-sm);
    transition: all 0.2s;
}

.gbc-remove-image-toolbar-btn:hover {
    background: var(--color-error);
    color: white;
    border-color: var(--color-error);
}

.gbc-zoom-btn {
    width: 36px;
    height: 36px;
    border: none;
    background: rgba(255, 255, 255, 0.9);
    color: var(--color-text);
    border-radius: var(--radius-sm);
    cursor: pointer;
    font-size: 18px;
    font-weight: bold;
    line-height: 36px;
    text-align: center;
    transition: all 0.2s;
}

.gbc-zoom-btn:hover {
    background: white;
    transform: scale(1.1);
}

.gbc-zoom-btn:active {
    transform: scale(0.95);
}

/* Drag Hint (for single image) */
.gbc-drag-hint {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: rgba(0, 0, 0, 0.7);
    color: white;
    padding: var(--space-4) var(--space-6);
    border-radius: var(--radius-lg);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-2);
    z-index: 20;
    pointer-events: none;
    animation: pulseHint 2s ease-in-out infinite;
}

.gbc-drag-hint .drag-icon {
    font-size: 2rem;
}

@keyframes pulseHint {
    0%, 100% { opacity: 0.9; transform: translate(-50%, -50%) scale(1); }
    50% { opacity: 1; transform: translate(-50%, -50%) scale(1.05); }
}

/* Mobile responsive for single image */
@media (max-width: 480px) {
    /* 2026-08-10 ENTFERNT: `.gbc-static-door .gbc-door-number { width: 20px;
       height: 20px; font-size: 0.75em; top: 4px }`.
       `top: 4px` hob die Basis-Translation nicht auf, sondern addierte sich zu
       ihr: 3 px Rahmen + 4 px − translateY(−50 %) von 20 px = −3 px, der Chip
       saß also 3 px OBERHALB der Türkante und überlagerte den weißen Rahmen.
       width/height waren unter dem globalen border-box-Reset (design-system.css)
       ohnehin wirkungslos — padding 4/12 px übersteigt 20 px, die genutzte
       Breite war 24 px. Die Basisregel zentriert und skaliert jetzt selbst
       korrekt; ein Mobile-Override ist nicht mehr nötig. */

    .gbc-single-zoom-controls {
        bottom: 8px;
        padding: 4px;
        gap: 4px;
    }
    
    .gbc-zoom-btn {
        width: 30px;
        height: 30px;
        font-size: 16px;
        line-height: 30px;
    }
}

/* ============================================
   QUERFORMAT-HINWEIS (/calendar) — CSS nachgetragen 2026-09-25
   Das Markup (#landscape-prompt-overlay, ConfiguratorPage) und die Logik
   (static/js/main.js initLandscapeMode: Klasse .active bei ≤ 768 px im
   Hochformat, body.orientation-locked) existierten, aber keine einzige
   Regel dazu — der Hinweis stand auf JEDEM Viewport als nackter Text am
   Seitenanfang von /calendar. Versteckt, bis das JS ihn aktiviert.
   ============================================ */

.landscape-prompt-overlay {
    display: none;
}

.landscape-prompt-overlay.active {
    display: flex;
    position: fixed;
    inset: 0;
    z-index: 10020; /* über Header (10001) und Modals (10010) */
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-3);
    padding: var(--space-6);
    text-align: center;
    background: var(--color-bg);
    color: var(--color-text);
}

body.orientation-locked {
    overflow: hidden;
}

.landscape-prompt-icon {
    font-size: 3rem;
    line-height: 1;
}

.landscape-prompt-title {
    font-family: var(--font-heading);
    font-size: var(--font-size-2xl);
    margin: 0;
}

.landscape-prompt-text {
    max-width: 28rem;
    margin: 0 0 var(--space-3);
    color: var(--color-text-muted);
}

.landscape-prompt-btn {
    padding: var(--space-3) var(--space-6);
    background: var(--color-primary);
    color: #fff;
    border: none;
    border-radius: var(--radius-md);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    cursor: pointer;
}

.landscape-prompt-skip {
    background: none;
    border: none;
    color: var(--color-text-muted);
    text-decoration: underline;
    cursor: pointer;
    font-size: var(--font-size-sm);
}

/* ============================================
   PREVIEW MODAL
   ============================================ */

.gbc-preview-modal-content {
    max-width: 700px;
    width: calc(100% - 32px);
    margin: 16px;
    box-sizing: border-box;
}

.gbc-preview-modal-body {
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
    padding: var(--space-6);
}

.gbc-preview-canvas-container {
    background: var(--color-bg);
    border-radius: var(--radius-lg);
    padding: var(--space-4);
    text-align: center;
}

.gbc-preview-canvas-container canvas {
    max-width: 100%;
    height: auto;
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-lg);
    border: 2px solid var(--color-primary);
}

.gbc-preview-hint {
    margin-top: var(--space-3);
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

.gbc-preview-summary {
    background: var(--color-bg);
    border-radius: var(--radius-md);
    padding: var(--space-4);
}

.gbc-preview-summary h4 {
    margin-bottom: var(--space-3);
    font-size: var(--font-size-base);
    color: var(--color-text);
}

.gbc-preview-summary ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

.gbc-preview-summary li {
    display: flex;
    justify-content: space-between;
    padding: var(--space-2) 0;
    border-bottom: 1px solid var(--color-border);
    font-size: var(--font-size-sm);
}

.gbc-preview-summary li:last-child {
    border-bottom: none;
}

.gbc-preview-summary .label {
    font-weight: 600;
    color: var(--color-text-muted);
}

.gbc-preview-actions {
    display: flex;
    gap: var(--space-4);
    justify-content: space-between;
}

.gbc-preview-actions .btn {
    flex: 1;
}

/* Mobile: Preview Modal fullscreen */
@media (max-width: 480px) {
    .gbc-preview-modal-content {
        width: 100%;
        max-width: 100%;
        height: 100%;
        max-height: 100%;
        margin: 0;
        border-radius: 0;
    }
    
    .gbc-preview-modal-body {
        padding: var(--space-4);
        gap: var(--space-4);
    }
    
    .gbc-preview-canvas-container {
        padding: var(--space-2);
    }
}

@media (max-width: 600px) {
    .gbc-preview-actions {
        flex-direction: column;
    }
    
    .gbc-preview-actions .btn {
        width: 100%;
    }
}

/* Preview Clone Styling */
.gbc-preview-wrapper {
    max-height: 350px;
    overflow: hidden;
    background: #fff;
}

.gbc-preview-clone {
    transform-origin: top left;
    pointer-events: none;
}

.gbc-preview-clone .gbc-customize-text-btn,
.gbc-preview-clone .gbc-remove-image-toolbar-btn,
.gbc-preview-clone .gbc-add-title-btn,
.gbc-preview-clone .gbc-template-btn,
.gbc-preview-clone .gbc-multi-toolbar,
.gbc-preview-clone .gbc-multi-zoom-controls,
.gbc-preview-clone .gbc-calendar-door.is-active::after,
.gbc-preview-clone .gbc-image-layer-selection {
    display: none !important;
}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jc3MvY29uZmlndXJhdG9yLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7O0FBRWxEOztpREFFaUQ7O0FBRWpEOzs7Ozs7Ozs7K0RBUytEOztBQUUvRDtJQUNJLHNCQUFzQjtJQUN0Qiw2REFBNkQ7SUFDN0QsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxzQkFBc0I7SUFDdEIsZ0VBQWdFO0lBQ2hFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0kscUJBQXFCO0lBQ3JCLDREQUE0RDtJQUM1RCxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLHlCQUF5QjtJQUN6QiwrREFBK0Q7SUFDL0QsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxxQkFBcUI7SUFDckIsMkRBQTJEO0lBQzNELGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0kseUJBQXlCO0lBQ3pCLGtFQUFrRTtJQUNsRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLHdCQUF3QjtJQUN4QixrRUFBa0U7SUFDbEUsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSx3QkFBd0I7SUFDeEIsK0RBQStEO0lBQy9ELGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksMkJBQTJCO0lBQzNCLG9FQUFvRTtJQUNwRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLDJCQUEyQjtJQUMzQixpRUFBaUU7SUFDakUsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7O0FBRUE7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Q0ksaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSwwQkFBMEI7SUFDMUIsb0JBQW9CO0FBQ3hCOztBQUVBOzs7Ozs7OztJQVFJLHdCQUF3QjtBQUM1QiIsImZpbGUiOiJjb25maWd1cmF0b3IuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogU3VycHJpc2VDYWxlbmRhciBDYWxlbmRhciBDb25maWd1cmF0b3IgU3R5bGVzICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDVVNUT00gRk9OVFNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIFN1cnByaXNlQ2FsZW5kYXIgKDIwMjYtMDktMTIpOiBTY2hyaWZ0a2F0YWxvZyBkZXMgS29uZmlndXJhdG9ycy5cbiAgIEplZGUgU2NocmlmdCBsaWVndCBMT0tBTCB1bnRlciAvc3RhdGljL2ZvbnRzLyAoa2VpbiBHb29nbGUtRm9udHMtQ0ROLCBDU1BcbiAgIGZvbnQtc3JjICdzZWxmJykgdW5kIGluIGRlcnNlbGJlbiBTY2huaXR0dmFyaWFudGUgdW50ZXJcbiAgIC9zcnYvc3VycHJpc2VjYWxlbmRhci9mb250cy8gZsO8ciBkaWUgRHJ1Y2tkYXRlaSAoUHJpbnRHZW5lcmF0b3I6OiRmb250TWFwKS5cbiAgIFJlZ2VsOiBwcm8gRmFtaWxpZSBnZW5hdSBkaWUgU2Nobml0dGUgaG9zdGVuLCBkaWUgZGVyIEJyb3dzZXIgdGF0c8OkY2hsaWNoXG4gICBudXR6dCDigJQgVGV4dGViZW5lbiBzaW5kIGZldHQgKDcwMCksIFTDvHJ0ZXh0ZSBub3JtYWwgKDQwMCkuIEZlaGx0IGVpbiBTY2huaXR0LFxuICAgbmltbXQgZGVyIEJyb3dzZXIgZGVuIHZvcmhhbmRlbmVuIE9ITkUgS3Vuc3RmZXR0IChmb250LXN5bnRoZXNpczogbm9uZSxcbiAgIHMuIC5nYmMtdGl0bGUtdGV4dCksIHVuZCBkZXIgRHJ1Y2sgbWFjaHQgZXMgZ2VuYXVzby5cbiAgIERyaWZ0LUd1YXJkIMO8YmVyIGFsbGUgdmllciBGdW5kc3RlbGxlbiAoQ1NTLCBDb25maWdTdGF0ZSwgVGVtcGwtQXVzd2FobCxcbiAgIFBIUC1Gb250bWFwKTogc3RhdGljL2pzL2NvbmZpZ3VyYXRvci9mb250LWNhdGFsb2cudGVzdC5qcy4gKi9cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdQb3BwaW5zJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9Qb3BwaW5zLUJvbGQudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdQb3BwaW5zJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9Qb3BwaW5zLVJlZ3VsYXIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdOdW5pdG8nO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL051bml0by1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnTW9udHNlcnJhdCc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvTW9udHNlcnJhdC1Cb2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdPc3dhbGQnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL09zd2FsZC1Cb2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdCZWJhcyBOZXVlJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9CZWJhc05ldWUtUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1F1aWNrc2FuZCc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvUXVpY2tzYW5kLVJlZ3VsYXIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdRdWlja3NhbmQnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL1F1aWNrc2FuZC1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnSm9zZWZpbiBTYW5zJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9Kb3NlZmluU2Fucy1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnSm9zZWZpbiBTYW5zJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9Kb3NlZmluU2Fucy1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnRnJlZG9rYSc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvRnJlZG9rYS1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnRnJlZG9rYSc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvRnJlZG9rYS1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnUGxheWZhaXIgRGlzcGxheSc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvUGxheWZhaXJEaXNwbGF5LUJvbGQud29mZjInKSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvQ29ybW9yYW50R2FyYW1vbmQtUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0Nvcm1vcmFudCBHYXJhbW9uZCc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvQ29ybW9yYW50R2FyYW1vbmQtQm9sZC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0NpbnplbCc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvQ2luemVsLVJlZ3VsYXIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdDaW56ZWwnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL0NpbnplbC1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnR3JlYXQgVmliZXMnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL0dyZWF0VmliZXMtUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0RhbmNpbmcgU2NyaXB0JztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9EYW5jaW5nU2NyaXB0LUJvbGQud29mZjInKSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0NhdmVhdCc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvQ2F2ZWF0LVJlZ3VsYXIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdDYXZlYXQnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL0NhdmVhdC1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnQW1hdGljIFNDJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9BbWF0aWNTQy1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnQW1hdGljIFNDJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9BbWF0aWNTQy1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnS2F1c2hhbiBTY3JpcHQnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL0thdXNoYW5TY3JpcHQtUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0luZGllIEZsb3dlcic7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvSW5kaWVGbG93ZXItUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1Blcm1hbmVudCBNYXJrZXInO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL1Blcm1hbmVudE1hcmtlci1SZWd1bGFyLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdQYWNpZmljbyc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvUGFjaWZpY28tUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0xvYnN0ZXInO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL0xvYnN0ZXItUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0x1Y2tpZXN0IEd1eSc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvTHVja2llc3RHdXktUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0JhbmdlcnMnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL0JhbmdlcnMtUmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ01vdW50YWlucyBvZiBDaHJpc3RtYXMnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL01vdW50YWluc29mQ2hyaXN0bWFzLVJlZ3VsYXIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdNb3VudGFpbnMgb2YgQ2hyaXN0bWFzJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9Nb3VudGFpbnNvZkNocmlzdG1hcy1Cb2xkLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnQmVya3NoaXJlIFN3YXNoJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9CZXJrc2hpcmVTd2FzaC1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnQWJyaWwgRmF0ZmFjZSc7XG4gICAgc3JjOiB1cmwoJy9zdGF0aWMvZm9udHMvQWJyaWxGYXRmYWNlLVJlZ3VsYXIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdBbGZhIFNsYWIgT25lJztcbiAgICBzcmM6IHVybCgnL3N0YXRpYy9mb250cy9BbGZhU2xhYk9uZS1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnRnJlZGVyaWNrYSB0aGUgR3JlYXQnO1xuICAgIHNyYzogdXJsKCcvc3RhdGljL2ZvbnRzL0ZyZWRlcmlja2F0aGVHcmVhdC1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RFIFNFTEVDVE9SXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kZS1zZWxlY3RvciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC8qIGFsbG93IHRoZSB0d28gbWluLXdpZHRoOjE2MHB4IGJ1dHRvbnMgdG8gd3JhcCBpbnN0ZWFkIG9mIG92ZXJmbG93aW5nXG4gICAgICAgaG9yaXpvbnRhbGx5IG9uIG5hcnJvdyB2aWV3cG9ydHMgKEZNQUUtMjQyKSAqL1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLm1vZGUtb3B0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLXdoaXRlKTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWJhc2UpO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5tb2RlLW9wdGlvbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tb2RlLW9wdGlvbjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLm1vZGUtb3B0aW9uLmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiKSwgMC4xKTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xufVxuXG4ubW9kZS1pY29uLXN2ZyB7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXRleHQpO1xufVxuXG4ubW9kZS1sYWJlbCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xufVxuXG4vKiBQcm9kdWN0IERlc2NyaXB0aW9uIENvbnRhaW5lciDigJQgd2Vpw59lIEthcnRlIG5hY2ggRGVzaWduLVN5c3RlbSBcIldhcm0gR2lmdFwiOlxuICAgLS1jb2xvci1iZy1kYXJrIGlzdCBkZW0gRm9vdGVyIHZvcmJlaGFsdGVuLCB1bmQgZGFzIE1hcmtlbnJvdCBkZXIgc3Ryb25nLVxuICAgQXVzemVpY2hudW5nZW4gZXJyZWljaHRlIGF1ZiBEdW5rZWwgbnVyIDIuNTY6MSAoRmxvb3I6IDQuNToxKTsgYXVmIFdlacOfIDUuOTM6MS4gKi9cbi5wcm9kdWN0LWRlc2NyaXB0aW9uLWNvbnRhaW5lciB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNik7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtOCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctd2hpdGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgICBsaW5lLWhlaWdodDogMS44O1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgICBtYXgtd2lkdGg6IDkwMHB4O1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xufVxuXG4ucHJvZHVjdC1kZXNjcmlwdGlvbi1jb250YWluZXIgcCB7XG4gICAgbWFyZ2luOiAwIDAgdmFyKC0tc3BhY2UtNCkgMDtcbn1cblxuLnByb2R1Y3QtZGVzY3JpcHRpb24tY29udGFpbmVyIHA6Zmlyc3QtY2hpbGQge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbn1cblxuLnByb2R1Y3QtZGVzY3JpcHRpb24tY29udGFpbmVyIHA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXRleHQpO1xufVxuXG4ucHJvZHVjdC1kZXNjcmlwdGlvbi1jb250YWluZXIgb2wsXG4ucHJvZHVjdC1kZXNjcmlwdGlvbi1jb250YWluZXIgdWwge1xuICAgIG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLnByb2R1Y3QtZGVzY3JpcHRpb24tY29udGFpbmVyIGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTYpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnByb2R1Y3QtZGVzY3JpcHRpb24tY29udGFpbmVyIGxpOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICfinJMnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXRleHQpO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ucHJvZHVjdC1kZXNjcmlwdGlvbi1jb250YWluZXIgc3Ryb25nIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS10ZXh0KTtcbiAgICBmb250LXdlaWdodDogNzAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgS09ORklHVVJBVE9SLUFSQkVJVFNGTMOEQ0hFIOKAlCBCw7xobmUgKyBXZXJremV1Z3NwYWx0ZSAoMjAyNi0wOS0yNSlcbiAgIEdlbWVpbnNhbWVzIE1hcmt1cCBmw7xyIFwiL1wiIHVuZCBcIi9jYWxlbmRhclwiOiBDb25maWd1cmF0b3JXb3Jrc3BhY2UoKSBpblxuICAgY29uZmlndXJhdG9yLnRlbXBsLiBBYiAxMDI0IHB4IGxpZWd0IGRpZSBLYWxlbmRlci1Gcm9udCBsaW5rcyAoQsO8aG5lLFxuICAgc3RpY2t5IHVudGVyIGRlbSBIZWFkZXIpIHVuZCByZWNodHMgc3RlaGVuIGluIEVJTkVSIFNwYWx0ZTogTW9kdXMtXG4gICBVbXNjaGFsdGVyLCBUZXh0L1ZvcmxhZ2UsIEJpbGRlciwgSGludGVyZ3J1bmQgKE11bHRpKSwgV2FyZW5rb3JiLUNUQS5cbiAgIFZvcmhlciBsYWdlbiBhbGxlIFdlcmt6ZXVnZSB1bnRlcmVpbmFuZGVyIHVuZCBkaWUgOTAwLXB4LUZyb250IGbDvGxsdGUgYXVmXG4gICBGdWxsSEQgZGVuIFZpZXdwb3J0LiBVbnRlciAxMDI0IHB4IHN0YXBlbHQgc2ljaCBhbGxlcyBpbiBET00tUmVpaGVuZm9sZ2U6XG4gICBNb2R1cyDihpIgRnJvbnQg4oaSIFdlcmt6ZXVnZS4gU2ljaHRiYXJrZWl0IGplIE1vZHVzOiBqZWRlcyBXcmFwcGVyLUVsZW1lbnRcbiAgIG1pdCBkYXRhLWNvbmZpZ3VyYXRvci1tb2RlIHNjaGFsdGV0IGluZGV4LmpzIHN3aXRjaE1vZGUoKSB1bVxuICAgKHVpL01vZGVWaXNpYmlsaXR5LmpzKS4gQnJlaXRlbi1Nb2RlbGwgaW0gRHJpZnQtR3VhcmRcbiAgIGRvb3ItbnVtYmVyLWNlbnRlcmluZy50ZXN0LmpzIOKAlCBTcGFsdGVuYnJlaXRlL2dhcCBkb3J0IG1pdHppZWhlbi5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jb25maWd1cmF0b3Itd29ya3NwYWNlIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSAwIHZhcigtLXNwYWNlLTgpO1xufVxuXG4uY29uZmlndXJhdG9yLWdyaWQge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uY29uZmlndXJhdG9yLW1vZGUtYmxvY2ssXG4uY29uZmlndXJhdG9yLXN0YWdlLFxuLmNvbmZpZ3VyYXRvci1zaWRlYmFyIHtcbiAgICBtaW4td2lkdGg6IDA7IC8qIEdyaWQtS2luZGVyIGTDvHJmZW4gZGllIFNwYWx0ZSBuaWNodCBhdWZ3ZWl0ZW4gKi9cbn1cblxuLmNvbmZpZ3VyYXRvci1zaWRlYmFyLFxuLmNvbmZpZ3VyYXRvci1tb2RlLXRvb2xzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogVGV4dC9Wb3JsYWdlOiBkaWUgYmVpZGVuIGdlc3RyaWNoZWx0ZW4g4oCeSGluenVmw7xnZW5cIi1CdXR0b25zICovXG4uZ2JjLXRvb2xzLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xufVxuXG4vKiBEZXIgV2FyZW5rb3JiLUJsb2NrIGJyaW5ndCBlaWdlbmVuIEFic3RhbmQgbWl0IOKAlCBpbiBkZXIgU3BhbHRlIHJlZ2VsdCBkZXIgZ2FwICovXG4uY29uZmlndXJhdG9yLXNpZGViYXIgLmNvbmZpZ3VyYXRvci1hY3Rpb25zIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gICAgLmNvbmZpZ3VyYXRvci1ncmlkIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSAzMjBweDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDFmcjtcbiAgICAgICAgY29sdW1uLWdhcDogdmFyKC0tc3BhY2UtOCk7XG4gICAgICAgIHJvdy1nYXA6IHZhcigtLXNwYWNlLTQpO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgfVxuXG4gICAgLmNvbmZpZ3VyYXRvci1zdGFnZSB7XG4gICAgICAgIGdyaWQtY29sdW1uOiAxO1xuICAgICAgICBncmlkLXJvdzogMSAvIHNwYW4gMjtcbiAgICAgICAgLyogRGllIFdlcmt6ZXVnc3BhbHRlIGlzdCBsw6RuZ2VyIGFscyBkaWUgRnJvbnQ6IGRpZSBGcm9udCBibGVpYnQgYmVpbVxuICAgICAgICAgICBTY3JvbGxlbiBkdXJjaCBCaWxkZXIvSGludGVyZ3LDvG5kZSBpbSBCbGljay4gNnJlbSA9IFN0aWNreS1IZWFkZXJcbiAgICAgICAgICAgKyBMdWZ0LCB3aWUgc2Nyb2xsLW1hcmdpbi10b3Agdm9uICNrb25maWd1cmF0b3IgKG1haW4uY3NzKS4gKi9cbiAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgdG9wOiA2cmVtO1xuICAgIH1cblxuICAgIC5jb25maWd1cmF0b3ItbW9kZS1ibG9jayB7XG4gICAgICAgIGdyaWQtY29sdW1uOiAyO1xuICAgICAgICBncmlkLXJvdzogMTtcbiAgICB9XG5cbiAgICAuY29uZmlndXJhdG9yLXNpZGViYXIge1xuICAgICAgICBncmlkLWNvbHVtbjogMjtcbiAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgfVxuXG4gICAgLyogTW9kdXMtVW1zY2hhbHRlciBhbHMgendlaXNwYWx0aWdlciBCbG9jayBzdGF0dCB6ZW50cmllcnRlciBaZWlsZSAqL1xuICAgIC5jb25maWd1cmF0b3ItbW9kZS1ibG9jayAubW9kZS1zZWxlY3RvciB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMTQwcHgsIDFmcikpO1xuICAgICAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIH1cblxuICAgIC5jb25maWd1cmF0b3ItbW9kZS1ibG9jayAubW9kZS1vcHRpb24ge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMyk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgfVxuXG4gICAgLyogVGV4dC9Wb3JsYWdlIHVudGVyZWluYW5kZXIgaW4gdm9sbGVyIFNwYWx0ZW5icmVpdGUgKi9cbiAgICAuY29uZmlndXJhdG9yLXNpZGViYXIgLmdiYy10b29scy1ibG9jayAuZ2JjLWFkZC10aXRsZS1idG4ge1xuICAgICAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLyogQmlsZGthY2hlbG46IDQgcHJvIFplaWxlIGluIGRlciBzY2htYWxlbiBTcGFsdGUgKHN0YXR0IDMgw5cgODAgcHgpICovXG4gICAgLmNvbmZpZ3VyYXRvci1zaWRlYmFyIC5nYmMtaW1hZ2UtcHJldmlld3MtY29udGFpbmVyIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoNjBweCwgMWZyKSk7XG4gICAgICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgfVxuXG4gICAgLyogMTcrIEthY2hlbG4gaW4gNGVyLVplaWxlbiBwbHVzIFVwbG9hZC1CdXR0b24gw7xiZXJzY2hyZWl0ZW4gZGllXG4gICAgICAgZ2VuZXJpc2NoZW4gNjAwIHB4IGRlcyBhdWZnZWtsYXBwdGVuIFBhbmVscyDigJQgZGVyIEluaGFsdCBsaWVmZSBzb25zdFxuICAgICAgIMO8YmVyIGRlbiBXYXJlbmtvcmItQmxvY2suICovXG4gICAgLmNvbmZpZ3VyYXRvci1zaWRlYmFyIC5nYmMtY29sbGFwc2libGUtY29udGVudFthcmlhLWhpZGRlbj1cImZhbHNlXCJdIHtcbiAgICAgICAgbWF4LWhlaWdodDogMTIwMHB4O1xuICAgIH1cblxuICAgIC5jb25maWd1cmF0b3Itc2lkZWJhciAuY29uZmlndXJhdG9yLWFjdGlvbnMge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IGNhbGModmFyKC0tc3BhY2UtNCkgKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KSk7XG4gICAgfVxuXG4gICAgLmNvbmZpZ3VyYXRvci1zaWRlYmFyIC5jb25maWd1cmF0b3ItYWN0aW9ucyAuYnRuIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjgwcHgpIHtcbiAgICAuY29uZmlndXJhdG9yLWdyaWQge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIDM2MHB4O1xuICAgICAgICBjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjZS0xMCk7XG4gICAgfVxufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ0FMRU5EQVIgQ09OVEFJTkVSXG4gICBQaHlzaWNhbDogMzQuNWNtIMOXIDI0Y21cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5nYmMtY2FsZW5kYXItdGl0bGUtYnV0dG9uLXdyYXBwZXIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmdiYy1hZGQtdGl0bGUtYnRuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctd2hpdGUpO1xuICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJhc2UpO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWZhc3QpO1xufVxuXG4uZ2JjLWFkZC10aXRsZS1idG46aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1jb2xvci1wcmltYXJ5LXJnYiksIDAuMDUpO1xufVxuXG4vKiBDYWxlbmRhciBHcmlkIOKAlCBkaWUtZXhhY3QgV1lTSVdZRyAoU3VycHJpc2VDYWxlbmRhciAyMDI2LTA3LTIyKS5cbiAgIERpZSBUw7xyZW4gbGllZ2VuIEFCU09MVVQgYXVmIGRlciBTdGFuemdlb21ldHJpZSBLQUw2MDA3OiBzaWNodGJhcmUgRnJvbnRcbiAgIDMzMCDDlyAyNDAgbW0sIFBvc2l0aW9uZW4vR3LDtsOfZW4gcHJvIFTDvHIgaW4gUHJvemVudCBkZXIgRnJvbnQuIFF1ZWxsZSBkZXJcbiAgIG1tLVdlcnRlOiBiYWNrZW5kIFByaW50R2VuZXJhdG9yOjpET09SX01NX0ZST05UX1ZJRVcg4oCUIGJlaSBTdGFuesOkbmRlcnVuZ2VuXG4gICBCRUlERSBTdGVsbGVuIGFucGFzc2VuIChEcmlmdC1HdWFyZDogZG9vci1nZW9tZXRyeS50ZXN0LmpzKS4gRGFzIGZyw7xoZXJlXG4gICBGbGV4LUdyaWQgKDMwLzIyLCBnbGVpY2hlIFNwYWx0ZW5ow7ZoZW4pIHdpY2ggc2ljaHRiYXIgdm9uIGRlciBnZWRydWNrdGVuXG4gICBXYXJlIGFiIChUw7xyIGFuIFBsYXR6IDM6IDUwIG1tIFN0YW56ZSB2cy4gfjI2IG1tIGltIFVJKS4gKi9cbiNnYmMtY2FsZW5kYXItY29udGFpbmVyLmdiYy1tdWx0aS1pbWFnZS1sYXlvdXQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xuICAgIGFzcGVjdC1yYXRpbzogMzMgLyAyNDsgIC8qIDMzMCDDlyAyNDAgbW0gRnJvbnQgKi9cbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiBEb29yIFN0eWxlcy5cbiAgIDIwMjYtMDktMzA6IGRpZSBUw7xyIHRyw6RndCBudXIgbm9jaCBlaW5lIGxlaWNodCBzdHJpY2hsaWVydGUgMS1weC1MaW5pZSDigJRcbiAgIHJlaW5lciBCaWxkc2NoaXJtaGlud2VpcyBhdWYgZGllIFN0YW56ZSwgS0VJTiBSYWhtZW46IGRpZSBEcnVja2RhdGVpIHplaWNobmV0XG4gICBzZWl0IGhldXRlIGtlaW5lbiBUw7xycmFobWVuIG1laHIgKFByaW50Tm9Eb29yRnJhbWVUZXN0KS4gVm9yaGVyOiAyIHB4IGJlaWdlLFxuICAgbWl0IEJpbGQgZHVyY2hnZXpvZ2VuIHppZWdlbHJvdDsgRWluemVsYmlsZCAzIHB4IHdlacOfICsgZHVua2xlIEtvbnR1ci5cbiAgIFdhcm1ncmF1IG1pdCA5MCAlIERlY2t1bmcsIHdlaWwgZGllIExpbmllIGF1ZiBkZXIgd2Vpw59lbiBMZWVyZnJvbnQgVU5EIGF1ZlxuICAgRm90b3MgdHJhZ2VuIG11c3M6IFdlacOfIHZlcnNjaHdhbmQgYXVmIGRlciBMZWVyZnJvbnQsIDM1LSUtU2Nod2FyeiBhdWZcbiAgIGR1bmtsZW4gRm90b3MgKExpdmUtVmVyZ2xlaWNoIDIwMjYtMDktMzApLiBEaWVzZWxiZSBMaW5pZSBpbiBiZWlkZW4gTW9kaSB1bmRcbiAgIG1pdC9vaG5lIEJpbGQg4oCUIEd1YXJkOiBkb29yLWN1dC1saW5lLnRlc3QuanMuICovXG4uZ2JjLWNhbGVuZGFyLWRvb3Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBFQUREO1xuICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDE0MCwgMTMwLCAxMTgsIDAuOSk7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLyogVMO8cmdlb21ldHJpZSAoUHJvemVudCBkZXIgMzMww5cyNDAtbW0tRnJvbnQ7IGdpbHQgZsO8ciBkZW4gS29uZmlndXJhdG9yIFVORFxuICAgZGllIFNpbmdsZS1JbWFnZS1DdXRvdXRzIOKAlCBpZGVudGlzY2hlIFN0YW56ZSkuICovXG4uZ2JjLWNhbGVuZGFyLWRvb3JbZGF0YS1kb29yLWlkPVwiMVwiXSwgIC5nYmMtc3RhdGljLWRvb3JbZGF0YS1zbG90PVwiMVwiXSAgeyBsZWZ0OiA1LjU5NCU7ICB0b3A6IDYuMDU0JTsgIHdpZHRoOiAxMy42NzklOyBoZWlnaHQ6IDMwLjQxNyU7IH1cbi5nYmMtY2FsZW5kYXItZG9vcltkYXRhLWRvb3ItaWQ9XCIyXCJdLCAgLmdiYy1zdGF0aWMtZG9vcltkYXRhLXNsb3Q9XCIyXCJdICB7IGxlZnQ6IDUuNTM5JTsgIHRvcDogNDYuODYzJTsgd2lkdGg6IDEzLjcxMiU7IGhlaWdodDogNDcuMTA0JTsgfVxuLmdiYy1jYWxlbmRhci1kb29yW2RhdGEtZG9vci1pZD1cIjNcIl0sICAuZ2JjLXN0YXRpYy1kb29yW2RhdGEtc2xvdD1cIjNcIl0gIHsgbGVmdDogMjQuNTI3JTsgdG9wOiA1Ljk2NyU7ICB3aWR0aDogMzEuODIxJTsgaGVpZ2h0OiAyMC45NDYlOyB9XG4uZ2JjLWNhbGVuZGFyLWRvb3JbZGF0YS1kb29yLWlkPVwiNFwiXSwgIC5nYmMtc3RhdGljLWRvb3JbZGF0YS1zbG90PVwiNFwiXSAgeyBsZWZ0OiAyNC41MzMlOyB0b3A6IDMyLjY5NiU7IHdpZHRoOiAzMS44MzAlOyBoZWlnaHQ6IDI3LjkyNSU7IH1cbi5nYmMtY2FsZW5kYXItZG9vcltkYXRhLWRvb3ItaWQ9XCI1XCJdLCAgLmdiYy1zdGF0aWMtZG9vcltkYXRhLXNsb3Q9XCI1XCJdICB7IGxlZnQ6IDI0LjU0MiU7IHRvcDogNjYuNDIxJTsgd2lkdGg6IDMxLjgyNyU7IGhlaWdodDogMTAuODQyJTsgfVxuLmdiYy1jYWxlbmRhci1kb29yW2RhdGEtZG9vci1pZD1cIjZcIl0sICAuZ2JjLXN0YXRpYy1kb29yW2RhdGEtc2xvdD1cIjZcIl0gIHsgbGVmdDogMjQuNTQ4JTsgdG9wOiA4My4wMzglOyB3aWR0aDogMzEuODI3JTsgaGVpZ2h0OiAxMC45NDYlOyB9XG4uZ2JjLWNhbGVuZGFyLWRvb3JbZGF0YS1kb29yLWlkPVwiN1wiXSwgIC5nYmMtc3RhdGljLWRvb3JbZGF0YS1zbG90PVwiN1wiXSAgeyBsZWZ0OiA2MS42NTIlOyB0b3A6IDYuMDU0JTsgIHdpZHRoOiAxMy42NzklOyBoZWlnaHQ6IDMwLjQxNyU7IH1cbi5nYmMtY2FsZW5kYXItZG9vcltkYXRhLWRvb3ItaWQ9XCI4XCJdLCAgLmdiYy1zdGF0aWMtZG9vcltkYXRhLXNsb3Q9XCI4XCJdICB7IGxlZnQ6IDYxLjY2NyU7IHRvcDogNDYuOTI1JTsgd2lkdGg6IDEzLjY3OSU7IGhlaWdodDogNDcuMDcxJTsgfVxuLmdiYy1jYWxlbmRhci1kb29yW2RhdGEtZG9vci1pZD1cIjlcIl0sICAuZ2JjLXN0YXRpYy1kb29yW2RhdGEtc2xvdD1cIjlcIl0gIHsgbGVmdDogODAuNzQ1JTsgdG9wOiA2LjAwOCU7ICB3aWR0aDogMTMuNjc5JTsgaGVpZ2h0OiAzMC40MTclOyB9XG4uZ2JjLWNhbGVuZGFyLWRvb3JbZGF0YS1kb29yLWlkPVwiMTBcIl0sIC5nYmMtc3RhdGljLWRvb3JbZGF0YS1zbG90PVwiMTBcIl0geyBsZWZ0OiA4MC43NTglOyB0b3A6IDQ2LjkyNSU7IHdpZHRoOiAxMy42NzklOyBoZWlnaHQ6IDQ3LjA3MSU7IH1cblxuLmdiYy1jYWxlbmRhci1kb29yOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMyk7XG59XG5cbi8qIDIwMjYtMDktMzAgRU5URkVSTlQ6IGAuZ2JjLWNhbGVuZGFyLWRvb3IuaGFzLWltYWdlIHsgYm9yZGVyOiBzb2xpZFxuICAgdmFyKC0tY29sb3ItcHJpbWFyeSkgfWAg4oCUIGRpZSBUw7xyIG1pdCBCaWxkIHNhaCBkYW1pdCBnZXJhaG10IGF1cy4gU2llIHRyw6RndFxuICAgamV0enQgZGllc2VsYmUgU3RyaWNobGluaWUgd2llIGRpZSBsZWVyZSBUw7xyLiAqL1xuXG4vKiBEb29yIFBsYWNlaG9sZGVyLlxuICAgMjAyNi0wOC0xMTogZW50aMOkbHQgbnVyIG5vY2ggZGVuIOKAnkJpbGQgaGluenVmw7xnZW5cIi1IaW53ZWlzIOKAlCBkaWUgVMO8cm51bW1lclxuICAgaXN0IGFuIGRpZSBUw7xyIGdld2FuZGVydCAocy4gLmdiYy1jYWxlbmRhci1kb29yID4gLmdiYy1kb29yLW51bWJlciB3ZWl0ZXJcbiAgIHVudGVuKS4gRGVyIEhpbndlaXMgcnV0c2NodCBkZXNoYWxiIGFucyB1bnRlcmUgVMO8cmVuZGU6IGRlciBDaGlwIHNpdHp0IGpldHp0XG4gICBleGFrdCBpbiBkZXIgVMO8cm1pdHRlIHVuZCBsw6RnZSBzb25zdCDDvGJlciBpaG0uICovXG4uZ2JjLWltYWdlLXBsYWNlaG9sZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjM1ZW07XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1saWdodCk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogMjAyNi0wOC0xMSBFTlRGRVJOVDogZGllIGFsdGUgQmFzaXNyZWdlbCBgLmdiYy1kb29yLW51bWJlciB7IGZvbnQtc2l6ZTogMS41ZW07XG4gICBmb250LXdlaWdodDogYm9sZDsgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1kYXJrKSB9YCB1bmQgaWhyIDQ4MC1weC1PdmVycmlkZVxuICAgYHsgZm9udC1zaXplOiAxZW0gfWAuIEJlaWRlIGJlbWHDn3RlbiBkaWUgTnVtbWVyIGFscyBzY2hsaWNodGVuIFRleHQgaW1cbiAgIFBsYXR6aGFsdGVyIGRlcyBNZWhyZmFjaGJpbGQtTW9kdXMuIFNlaXQgZGllIE51bW1lciBpbiBCRUlERU4gTW9kaSBkZXJzZWxiZVxuICAgQ2hpcCBpc3QsIGdld2lubnQgb2huZWhpbiBkaWUgQ2hpcC1SZWdlbCAoU3BlemlmaXTDpHQgMCwyLDAgZ2VnZW4gMCwxLDApIOKAlFxuICAgZGllIEFsdHJlZ2VsbiB3YXJlbiBudXIgbm9jaCBpcnJlZsO8aHJlbmQuICovXG5cbi5nYmMtZG9vci1wcm9tcHQge1xuICAgIGZvbnQtc2l6ZTogMC43NWVtO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5nYmMtZG9vci1wcm9tcHQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG59XG5cbi8qIFTDvHJlbiA1IHVuZCA2IHNpbmQgbWl0IDI2IG1tIGRpZSBmbGFjaHN0ZW4gZGVyIFN0YW56ZSAoMTAuODQgJSBkZXIgRnJvbnRow7ZoZSkuXG4gICBEb3J0IGlzdCBuZWJlbiBkZW0gbWl0dGlnZW4gQ2hpcCBrZWluIFBsYXR6IG1laHIgZsO8ciBkZW4gSGlud2Vpc3RleHQg4oCUIGVyXG4gICDDvGJlcmxhZ2VydGUgaWhuLiBEaWUgZ2VzdHJpY2hlbHRlIFTDvHIgdW5kIGRlciBDaGlwIGJsZWliZW4gYWxzIEFmZm9yZGFuei4gKi9cbi5nYmMtY2FsZW5kYXItZG9vcltkYXRhLWRvb3ItaWQ9XCI1XCJdIC5nYmMtZG9vci1wcm9tcHQsXG4uZ2JjLWNhbGVuZGFyLWRvb3JbZGF0YS1kb29yLWlkPVwiNlwiXSAuZ2JjLWRvb3ItcHJvbXB0IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBEb29yIEltYWdlIFZpZXdwb3J0ICovXG4uZ2JjLWRvb3ItaW1hZ2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjdXJzb3I6IGdyYWI7XG4gICAgdG91Y2gtYWN0aW9uOiBub25lO1xufVxuXG4uZ2JjLWRvb3ItaW1hZ2U6YWN0aXZlIHtcbiAgICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG4vKiBBY3R1YWwgaW1hZ2UgaW5zaWRlIHZpZXdwb3J0IChmb3IgcGFuL3pvb20pICovXG4uZ2JjLWRvb3ItaW1hZ2UtaW5uZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvKiBXaWR0aC9oZWlnaHQgc2V0IGJ5IHRyYW5zZm9ybSBzY2FsZSAtIGRvbid0IHNldCBoZXJlICovXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBEcm9wIHpvbmUgYWN0aXZlIHN0YXRlICovXG4uZ2JjLWNhbGVuZGFyLWRvb3IuZHJvcC1hY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSkgIWltcG9ydGFudDtcbiAgICBib3JkZXItc3R5bGU6IGRhc2hlZCAhaW1wb3J0YW50O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tY29sb3ItcHJpbWFyeS1yZ2IpLCAwLjE1KTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xufVxuXG4vKiBQcmV2aWV3IGl0ZW0gYmVpbmcgZHJhZ2dlZCAqL1xuLmdiYy1wcmV2aWV3LWl0ZW0ge1xuICAgIGFzcGVjdC1yYXRpbzogMTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBncmFiO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzLCBib3JkZXItY29sb3IgMC4ycztcbiAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG59XG5cbi5nYmMtcHJldmlldy1pdGVtOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4uZ2JjLXByZXZpZXctaXRlbTphY3RpdmUge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbi8qIEtvbnRleHQtV2Vya3pldWdlIHp1bSBCaWxkIChab29tLCBFbnRmZXJuZW47IE11bHRpOiBmw7xyIGRpZSBha3RpdmUgVMO8cikuXG4gICBTZWl0IDIwMjYtMDktMjUgVU5URVIgZGVyIEZyb250IOKAlCBUZXh0L1ZvcmxhZ2Ugc3RlaGVuIGluIGRlciBXZXJremV1Zy1cbiAgIHNwYWx0ZS4gRGllIFplaWxlIHJlc2VydmllcnQgaWhyZSBIw7ZoZSwgZGFtaXQgZGllIEZyb250IG5pY2h0IHNwcmluZ3QsXG4gICBzb2JhbGQgZWluIEJpbGQgZ2VsYWRlbiBpc3QgdW5kIGRpZSBDb250cm9scyBlcnNjaGVpbmVuLiAqL1xuLmdiYy1tdWx0aS10b29sYmFyLFxuLmdiYy1zaW5nbGUtdG9vbGJhciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMyk7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1pbi1oZWlnaHQ6IDQ0cHg7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5nYmMtbXVsdGktem9vbS1jb250cm9scyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA2KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIHBhZGRpbmc6IDRweCAxMHB4O1xufVxuXG4uZ2JjLW11bHRpLXpvb20tbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uZ2JjLW11bHRpLXpvb20tYnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDRweDtcbn1cblxuLyogQWN0aXZlIGRvb3IgaGlnaGxpZ2h0OiB3aGljaGV2ZXIgZG9vciB0aGUgdG9vbGJhciBhY3RzIG9uLlxuICAgMjAyNi0wOS0zMDogc3RyaWNobGllcnQgc3RhdHQgMy1weC1Wb2xscmluZyAoa2VpbiBSYWhtZW4tTG9vayBtZWhyKS4gRGllXG4gICBlaWdlbmUgMS1weC1MaW5pZSBkZXIgVMO8ciB3aXJkIHRyYW5zcGFyZW50LCBkYXMgOjphZnRlciB6ZWljaG5ldCAyIHB4IGRpcmVrdFxuICAgaW5uZW4gZGFuZWJlbiDigJQgb3B0aXNjaCBFSU5FIHJvdGUgU3RyaWNobGluaWUsIG9obmUgZGFzcyBzaWNoIGRpZSBSYW5kYnJlaXRlXG4gICB1bmQgZGFtaXQgZGllIEJpbGRsYWdlIGluIGRlciBUw7xyIMOkbmRlcnQuICovXG4uZ2JjLWNhbGVuZGFyLWRvb3IuaXMtYWN0aXZlIHtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uZ2JjLWNhbGVuZGFyLWRvb3IuaXMtYWN0aXZlOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLWNvbG9yLXByaW1hcnksICNCMjNBMzEpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDE4O1xufVxuXG4vKiBEb29yIFRleHQgT3ZlcmxheSAqL1xuLmdiYy1kb29yLXRleHQtb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAvKiBPdmVybGF5IGlzIHBhc3MtdGhyb3VnaCAqL1xuICAgIHotaW5kZXg6IDIwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xufVxuXG4uZ2JjLWRvb3ItdGV4dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0b3A6IDg1JTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG4gICAgZm9udC1zaXplOiAwLjllbTtcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGN1cnNvcjogZ3JhYjtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsgLyogVGV4dCBJUyBpbnRlcmFjdGl2ZSAqL1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcbiAgICB6LWluZGV4OiAyNTtcbiAgICBmb250LXN5bnRoZXNpczogbm9uZTsgLyogRHJ1Y2sgc2V0enQgZGVuIFJlZ3VsYXItU2Nobml0dCAoMjAyNi0wOS0xMikgKi9cbn1cblxuLyogQ3VzdG9taXplIFRleHQgQnV0dG9uICovXG4uZ2JjLWN1c3RvbWl6ZS10ZXh0LWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNHB4O1xuICAgIHJpZ2h0OiA0cHg7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tY29sb3ItcHJpbWFyeS1yZ2IpLCAwLjkpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xufVxuXG4uZ2JjLWN1c3RvbWl6ZS10ZXh0LWJ0bjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1jb2xvci1wcmltYXJ5LXJnYiksIDEpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbn1cblxuLyogVGl0bGUgT3ZlcmxheSAqL1xuLmdiYy10aXRsZS1vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxMCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogbW92ZTtcbiAgICB6LWluZGV4OiAyMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTEpO1xufVxuXG4vKiBCdXR0b25zIGNvbnRhaW5lciDigJQgZmxvYXRzIEFCT1ZFIHRoZSB0ZXh0IGJveCwgb3V0IG9mIGZsb3cgKDIwMjYtMDktMTIpOlxuICAgdGhlIG92ZXJsYXkncyB0b3AgZWRnZSBpcyB0aGVyZWJ5IHRoZSB0ZXh0IGJveCdzIHRvcCBlZGdlLCB3aGljaCBpcyB0aGUgYHlgXG4gICB0aGUgcHJpbnQgcmVhZHMuIEJlZm9yZSwgdGhlIGJ1dHRvbnMgcm93IHNhdCBpbiBmbG93IGFuZCB0aGUgcHJpbnQgZHJldyB0aGVcbiAgIHRleHQgfjMgJSBvZiB0aGUgZmFjZSBoZWlnaHQgaGlnaGVyIHRoYW4gdGhlIGNvbmZpZ3VyYXRvciBzaG93ZWQgaXQuICovXG4uZ2JjLXRpdGxlLW92ZXJsYXkgLmdiYy10aXRsZS1idXR0b25zIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAxMDAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0xKTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlO1xufVxuXG4uZ2JjLXRpdGxlLW92ZXJsYXk6aG92ZXIgLmdiYy10aXRsZS1idXR0b25zIHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4vKiBUaGUgdGV4dCBib3guIEZvbnQgc2l6ZSAoZmFjZS1yZWxhdGl2ZSBweCwgVGV4dFNjYWxlLmpzKSwgY29sb3VyLCBsZXR0ZXJcbiAgIHNwYWNpbmcsIHNoYWRvdywgb3V0bGluZSBhbmQgcm90YXRpb24gYXJlIHNldCBpbmxpbmUgYnkgcGFpbnRUZXh0Qm94KCk7XG4gICBldmVyeSBydWxlIGhlcmUgaGFzIGEgcHJpbnQgbWlycm9yIGluIFByaW50R2VuZXJhdG9yOjpjb21wb3NpdGVUaXRsZS4gKi9cbi5nYmMtdGl0bGUtdGV4dC1jb250YWluZXIge1xuICAgIG1pbi1oZWlnaHQ6IDFlbTtcbiAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3ludGhlc2lzOiBub25lO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG4gICAgLyogT3V0bGluZSBiZWhpbmQgdGhlIGZpbGwgKHBhaW50LW9yZGVyKSDigJQgQ1NTIHZhcmlhYmxlIHNldCBwZXIgbGF5ZXIuXG4gICAgICAgaHRtbDJjYW52YXMgY2Fubm90IGRyYXcgaXQ6IFByZXZpZXdHZW5lcmF0b3Igc3dhcHMgaXQgZm9yIGEgc2hhZG93IHJpbmdcbiAgICAgICBkdXJpbmcgdGhlIGNhcnQgY2FwdHVyZSAod29ya2Fyb3VuZCBFKS4gKi9cbiAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiB2YXIoLS10ZXh0LXN0cm9rZSwgMCk7XG4gICAgcGFpbnQtb3JkZXI6IHN0cm9rZSBmaWxsO1xufVxuXG4uZ2JjLXRpdGxlLXRleHQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xuICAgIGZvbnQtc3ludGhlc2lzOiBub25lO1xufVxuXG4uZ2JjLXRpdGxlLWxpbmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uZ2JjLXRpdGxlLWVkaXQtYnRuLFxuLmdiYy10aXRsZS1yZW1vdmUtYnRuIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcbiAgICBvcGFjaXR5OiAwLjk7XG59XG5cbi5nYmMtdGl0bGUtZWRpdC1idG46aG92ZXIsXG4uZ2JjLXRpdGxlLXJlbW92ZS1idG46aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09MTEFQU0lCTEUgUEFORUxTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZ2JjLWNvbGxhcHNpYmxlLXNlY3Rpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLXdoaXRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmdiYy1jb2xsYXBzaWJsZS10b2dnbGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS10cmFuc2l0aW9uLWZhc3QpO1xufVxuXG4uZ2JjLWNvbGxhcHNpYmxlLXRvZ2dsZTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpO1xufVxuXG4uZ2JjLXRvZ2dsZS1pY29uIHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG59XG5cbi5nYmMtdG9nZ2xlLXRleHQge1xuICAgIGZsZXg6IDE7XG59XG5cbi5nYmMtdG9nZ2xlLWFycm93IHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbn1cblxuLmdiYy1jb2xsYXBzaWJsZS10b2dnbGVbYXJpYS1leHBhbmRlZD1cInRydWVcIl0gLmdiYy10b2dnbGUtYXJyb3cge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG5cbi5nYmMtY29sbGFwc2libGUtY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgdmFyKC0tdHJhbnNpdGlvbi1iYXNlKTtcbn1cblxuLyogKEV4cGFuZGVkIHN0YXRlIGlzIGRlZmluZWQgb25jZSwgbG93ZXIgaW4gdGhpcyBmaWxlIOKAlCBzZWUgRk1BRS0yNDMuXG4gICBUaGUgcHJldmlvdXMgNTAwcHggcnVsZSBoZXJlIHdhcyBkZWFkOiBhIGxhdGVyIHVuLW1lZGlhdGVkIHJ1bGUgb3ZlcnJvZGUgaXRcbiAgIG9uIGV2ZXJ5IHZpZXdwb3J0LikgKi9cblxuLyogSW1hZ2UgUHJldmlld3MgR3JpZCAqL1xuLmdiYy1pbWFnZS1wcmV2aWV3cy1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoNjBweCwgMWZyKSk7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0yKTtcbiAgICBtaW4taGVpZ2h0OiA0MHB4O1xufVxuXG4vKiBVcGxvYWQgYnV0dG9uIGlzIGEgZnVsbC13aWR0aCBjYWxsLXRvLWFjdGlvbiBwaW5uZWQgdG8gdGhlIEZJUlNUIHNsb3Qgb2YgdGhlXG4gICBncmlkLCByZWdhcmRsZXNzIG9mIERPTSBvcmRlciAoc3RvY2svYmFja2dyb3VuZCBpbWFnZXMgYXJlIGFwcGVuZGVkIGFmdGVyIGl0XG4gICBpbiB0aGUgRE9NKS4gb3JkZXI6LTEgKyBzcGFubmluZyBhbGwgY29sdW1ucyBrZWVwcyBpdCBvbiB0b3Agb24gZXZlcnkgdmlld3BvcnQuICovXG4uZ2JjLWltYWdlLXByZXZpZXdzLWNvbnRhaW5lciAudXBsb2FkLWJ0biB7XG4gICAgb3JkZXI6IC0xO1xuICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7XG59XG5cbi8qIEVtcHR5IC8gbG9hZGluZyBzdGF0ZSBzcGFucyBmdWxsIHJvdyBzbyBpdCBuZXZlciBjb2xsaWRlcyB3aXRoIHRoZSB1cGxvYWQgYnV0dG9uICovXG4uZ2JjLWltYWdlLXByZXZpZXdzLWNvbnRhaW5lciAubG9hZGluZy10ZXh0IHtcbiAgICBncmlkLWNvbHVtbjogMSAvIC0xO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogQ29tYmluZWQgaW1hZ2VzIGdyaWQgY29udGFpbmVyIGZvciB1bmlmaWVkIHN0b2NrICsgdXNlciBpbWFnZXMgKi9cbi5nYmMtY29tYmluZWQtaW1hZ2VzLWdyaWQge1xuICAgIGRpc3BsYXk6IGNvbnRlbnRzOyAvKiBNYWtlcyBjaGlsZHJlbiBmbG93IGludG8gcGFyZW50IGdyaWQgKi9cbn1cblxuLyogT24gbGFyZ2VyIHNjcmVlbnMsIHVzZSAzLWNvbHVtbiBzZWN0aW9uIGxheW91dCAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLmdiYy1pbWFnZS1wcmV2aWV3cy1jb250YWluZXIge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCg4MHB4LCAxZnIpKTtcbiAgICAgICAgZ2FwOiB2YXIoLS1zcGFjZS0zKTtcbiAgICB9XG59XG5cbi5nYmMtcHJldmlldy1pdGVtIHtcbiAgICBhc3BlY3QtcmF0aW86IDE7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbn1cblxuLmdiYy1wcmV2aWV3LWl0ZW06aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcbn1cblxuLyogTG9hZGluZyBzdGF0ZSB3aGlsZSBzY2FubmluZyBpbWFnZXMgKi9cbi5nYmMtcHJldmlldy1pdGVtLmdiYy1sb2FkaW5nIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7XG4gICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14cyk7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLmdiYy1zcGlubmVyIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBzcGluIHtcbiAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1cblxuLyogTGFyZ2Ugc3Bpbm5lciBmb3IgbW9kYWwgdXBsb2FkIGxvYWRpbmcgKi9cbi5nYmMtc3Bpbm5lci1sYXJnZSB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJvcmRlcjogNHB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbi5nYmMtdXBsb2FkLWxvYWRpbmcge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMyk7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZ2JjLWxvYWRpbmctdGV4dCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS10ZXh0KTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbn1cblxuLmdiYy1sb2FkaW5nLXN1YnRleHQge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7XG59XG5cbi51cGxvYWQtYnRuIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgbWluLWhlaWdodDogNDRweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC8qIEZ1bGwtd2lkdGggdGV4dCBidXR0b246IG92ZXJyaWRlIC5nYmMtcHJldmlldy1pdGVtJ3Mgc3F1YXJlIGFzcGVjdC1yYXRpbyAqL1xuICAgIGFzcGVjdC1yYXRpbzogYXV0bztcbiAgICAvKiBMb25nIGxhYmVsIHdyYXBzIGF0IHNwYWNlcyAoYW5kIGJyZWFrcyBhcyBhIGxhc3QgcmVzb3J0KSBpbnN0ZWFkIG9mXG4gICAgICAgb3ZlcmZsb3dpbmcgdGhlIGJ1dHRvbiBvbiBuYXJyb3cgcGFuZWxzIOKAlCAzMjBweCB1cC4gKi9cbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgLyogV2lkdGgvcGxhY2VtZW50IGhhbmRsZWQgYnkgZ3JpZCAqL1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZ2JjLW1vZGFsIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgLyogU2l0cyBhYm92ZSB0aGUgc3RpY2t5IHNpdGUgaGVhZGVyICh6LWluZGV4OiAxMDAwMSBpbiBtYWluLmNzcykgKi9cbiAgICB6LWluZGV4OiAxMDAxMDtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyogMjAyNi0wOS0zMDogPG1haW4+IGlzdCBlaW4gZWlnZW5lciBTdGFwZWxrb250ZXh0IChkZXNpZ24tc3lzdGVtLmNzczpcbiAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSkg4oCUIGRpZSBNb2RhbHMgZGFyaW4ga2FtZW4gbWl0IGlocmVuIDEwMDEwXG4gICBuaWUgw7xiZXIgZGVuIFN0aWNreS1IZWFkZXIgKDEwMDAxKS4gQXVmIEhhbmR5cyBxdWVyICgzNzUgcHggaG9jaCkgdW5kIGF1ZlxuICAga2xlaW5lbiBMYXB0b3BzIHZlcmRlY2t0ZSBkZXIgSGVhZGVyIFRpdGVsIHVuZCDinJUgamVkZXMgS29uZmlndXJhdG9yLU1vZGFsc1xuICAgKGdlbWVzc2VuOiBlbGVtZW50RnJvbVBvaW50IGFtIE1vZGFsLUtvcGYgPSAubmF2LWxpbmtzKS4gTnVyIHNvbGFuZ2UgZWluXG4gICBNb2RhbCBvZmZlbiBpc3QsIGxpZWd0IDxtYWluPiDDvGJlciBkZW0gSGVhZGVyOyBkZXIgZ2xvYmFsZSB6LWluZGV4IGJsZWlidFxuICAgdW5hbmdldGFzdGV0LiBNb2RhbE1hbmFnZXIgc2V0enQgYm9keS5tb2RhbC1vcGVuLCBkYXMgVm9yc2NoYXUtTW9kYWwgd2lyZFxuICAgZGlyZWt0IHBlciBzdHlsZS5kaXNwbGF5IGdlw7ZmZm5ldCDigJQgZGFoZXIgenVzw6R0emxpY2ggOmhhcygpICh3aWUgYmVpbVxuICAgUFdBLUJhbm5lciBpbiBtYWluLmNzcykuICovXG5ib2R5Lm1vZGFsLW9wZW4gbWFpbixcbmJvZHk6aGFzKC5nYmMtbW9kYWxbc3R5bGUqPVwiZGlzcGxheTogZmxleFwiXSkgbWFpbiB7XG4gICAgei1pbmRleDogMTAwMDI7XG59XG5cbi5nYmMtbW9kYWwtY29udGVudCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctd2hpdGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7XG4gICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgICB3aWR0aDogOTAlO1xuICAgIG1heC1oZWlnaHQ6IDgwdmg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXhsKTtcbn1cblxuLmdiYy1tb2RhbC1oZWFkZXIge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtcHJpbWFyeSk7XG4gICAgY29sb3I6IHdoaXRlO1xufVxuXG4uZ2JjLW1vZGFsLWhlYWRlciBoMyB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbiAgICAvKiBkaWUgZ2xvYmFsZSBoMy1SZWdlbCAoY29sb3I6IHZhcigtLWNvbG9yLXRleHQpKSB3w7xyZGUgc29uc3QgZHVua2VsIGF1ZlxuICAgICAgIGRlciByb3RlbiBIZWFkZXItRmzDpGNoZSByZW5kZXJuIOKAlCBleHBsaXppdCB3ZWnDnyAoUmVkZXNpZ24gMjAyNi0wNy0wOCkgKi9cbiAgICBjb2xvcjogd2hpdGU7XG59XG5cbi5nYmMtbW9kYWwtY2xvc2Uge1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi5nYmMtbW9kYWwtY2xvc2U6aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi5nYmMtbW9kYWwtdGFicyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbn1cblxuLmdiYy10YWItYnRuIHtcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbn1cblxuLmdiYy10YWItYnRuOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7XG59XG5cbi5nYmMtdGFiLWJ0bi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLXdoaXRlKTtcbiAgICBib3JkZXItYm90dG9tOiAzcHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktdGV4dCk7XG59XG5cbi5nYmMtbW9kYWwtYm9keSB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNCk7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBmbGV4OiAxO1xufVxuXG4uZ2JjLXRhYi1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uZ2JjLXRhYi1jb250ZW50LmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5nYmMtbW9kYWwtaW1hZ2UtZ3JpZCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCg4MHB4LCAxZnIpKTtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uZ2JjLW1vZGFsLWltYWdlLWl0ZW0ge1xuICAgIGFzcGVjdC1yYXRpbzogMTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbn1cblxuLmdiYy1tb2RhbC1pbWFnZS1pdGVtOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG59XG5cbi5nYmMtbW9kYWwtdXBsb2FkLWFyZWEge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpO1xuICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiKSwgMC4wNSk7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG59XG5cbi5nYmMtbW9kYWwtdXBsb2FkLWFyZWE6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tY29sb3ItcHJpbWFyeS1yZ2IpLCAwLjEpO1xufVxuXG4udXBsb2FkLWljb24ge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xufVxuXG4vKiBUaXRsZSBDdXN0b21pemF0aW9uIE1vZGFsICovXG4uZ2JjLXRleHQtY3VzdG9taXphdGlvbi1jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xufVxuXG4uZ2JjLXRleHQtbW9kYWwtYm9keSAuZm9ybS1ncm91cCB7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5nYmMtdGV4dC1tb2RhbC1ib2R5IGxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuXG4uZ2JjLWZvbnQtc2VsZWN0IG9wdGlvbiB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5nYmMtdGl0bGUtcHJldmlldyB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG4gICAgcGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTQpO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xufVxuXG4jZ2JjLXRpdGxlLXByZXZpZXctYm94IHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWluLWhlaWdodDogNjBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNnYmMtdGl0bGUtcHJldmlldy1ib3gge1xuICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIHJvdGF0ZWQgYm94ZXMgbWF5IHBva2Ugb3V0ICovXG4gICAgbWluLWhlaWdodDogOTBweDtcbn1cblxuLyogVGhlIHByZXZpZXcgYm94IGlzIHBhaW50ZWQgYnkgcGFpbnRUZXh0Qm94KCkgZXhhY3RseSBsaWtlIGFuIG92ZXJsYXkuICovXG4jZ2JjLXRpdGxlLXByZXZpZXctc2hhcGUge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXN5bnRoZXNpczogbm9uZTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICAgIC13ZWJraXQtdGV4dC1zdHJva2U6IHZhcigtLXRleHQtc3Ryb2tlLCAwKTtcbiAgICBwYWludC1vcmRlcjogc3Ryb2tlIGZpbGw7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4jZ2JjLXRpdGxlLXByZXZpZXctdGV4dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gICAgZm9udC1zeW50aGVzaXM6IG5vbmU7XG59XG5cbi5nYmMtdGV4dC1tb2RhbC1oaW50IHtcbiAgICBtYXJnaW46IDAgMCB2YXIoLS1zcGFjZS00KTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xufVxuXG4uZ2JjLXRpdGxlLXRleHRhcmVhIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICAgIG1pbi1oZWlnaHQ6IDIuNmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG5cbi8qIFR3byBzbGlkZXJzIHNpZGUgYnkgc2lkZSAoc3BhY2luZyArIHJvdGF0aW9uKSAqL1xuLmdiYy1mb3JtLXJvdyB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLmdiYy1mb3JtLXJvdyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICAgIH1cbn1cblxuLyogT3V0bGluZSBvcHRpb25zIC0gaGlkZGVuIHVudGlsIGVuYWJsZWQgKHNhbWUgcGF0dGVybiBhcyAuZ2JjLWJnLW9wdGlvbnMpICovXG4uZ2JjLXN0cm9rZS1vcHRpb25zIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uZ2JjLXN0cm9rZS1vcHRpb25zLnZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uZ2JjLXRleHQtbW9kYWwtYm9keSAuZm9ybS1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5nYmMtdGV4dC1tb2RhbC1ib2R5IC5mb3JtLWFjdGlvbnMgLmJ0biB7XG4gICAgZmxleDogMTtcbn1cblxuLyogQ29sb3VyIHN3YXRjaGVzIChjb3JlL1BhbGV0dGVzLmpzKSBhYm92ZSBlYWNoIGNvbG91ciBpbnB1dCAqL1xuLmdiYy1zd2F0Y2hlcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMSk7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5nYmMtc3dhdGNoLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogNnB4O1xufVxuXG4uZ2JjLXN3YXRjaC1ncm91cF9fbGFiZWwge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIG1pbi13aWR0aDogNi41ZW07XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14cywgMC43NXJlbSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbn1cblxuLmdiYy1zd2F0Y2gge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zd2F0Y2gsICNmZmYpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS10cmFuc2l0aW9uLWZhc3QpLCBib3JkZXItY29sb3IgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbn1cblxuLmdiYy1zd2F0Y2g6aG92ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xMik7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmdiYy1zd2F0Y2guYWN0aXZlIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1jb2xvci1iZy13aGl0ZSksIDAgMCAwIDRweCB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbn1cblxuLyogRGVzaWduIHRlbXBsYXRlcyAoY29tcG9uZW50cy9UZW1wbGF0ZUNob29zZXIuanMpICovXG4uZ2JjLXRlbXBsYXRlLW1vZGFsLWNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNjQwcHg7XG59XG5cbi5nYmMtdGVtcGxhdGUtbGlzdCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNTBweCwgMWZyKSk7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmdiYy10ZW1wbGF0ZS1jYXJkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0xKTtcbiAgICBwYWRkaW5nOiAwIDAgdmFyKC0tc3BhY2UtMyk7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLXdoaXRlKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS10cmFuc2l0aW9uLWZhc3QpLCB0cmFuc2Zvcm0gdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbn1cblxuLmdiYy10ZW1wbGF0ZS1jYXJkOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLmdiYy10ZW1wbGF0ZS1jYXJkX19wcmV2aWV3IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLWhlaWdodDogNjRweDtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKTtcbiAgICBmb250LXNpemU6IDEuMzVyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXN5bnRoZXNpczogbm9uZTtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICB0ZXh0LXNoYWRvdzogMC4wNmVtIDAuMDZlbSAwLjEyZW0gcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbGluZS1oZWlnaHQ6IDEuMTU7XG59XG5cbi5nYmMtdGVtcGxhdGUtY2FyZF9fbmFtZSB7XG4gICAgcGFkZGluZzogMCB2YXIoLS1zcGFjZS0zKTtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG4uZ2JjLXRlbXBsYXRlLWNhcmRfX2Rlc2Mge1xuICAgIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtMyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmdiYy10ZW1wbGF0ZS1jYXJkX19zd2F0Y2hlcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDRweDtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTMpO1xufVxuXG4uZ2JjLXRlbXBsYXRlLWNhcmRfX3N3YXRjaGVzIGkge1xuICAgIHdpZHRoOiAxNHB4O1xuICAgIGhlaWdodDogMTRweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cblxuLyogRm9ybSBkaXZpZGVyIGZvciBzZWN0aW9ucyAqL1xuLmZvcm0tZ3JvdXAtZGl2aWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgMDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uZm9ybS1ncm91cC1kaXZpZGVyOjpiZWZvcmUsXG4uZm9ybS1ncm91cC1kaXZpZGVyOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZmxleDogMTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ib3JkZXIpO1xufVxuXG4uZm9ybS1ncm91cC1kaXZpZGVyIHNwYW4ge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG59XG5cbi8qIEJhY2tncm91bmQgb3B0aW9ucyAtIGhpZGRlbiBieSBkZWZhdWx0ICovXG4uZ2JjLWJnLW9wdGlvbnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5nYmMtYmctb3B0aW9ucy52aXNpYmxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogRsO8bGx1bmcgd8OkaGxlbiBpbSBWb3JzY2hhdS1Nb2RhbCAoU3VycHJpc2VDYWxlbmRhciAyMDI2LTA5LTEyKSAqL1xuLmdiYy1maWxsaW5nLWNob29zZXIge1xuICAgIG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbn1cblxuLmdiYy1maWxsaW5nLWNob29zZXIgaDQge1xuICAgIG1hcmdpbjogMCAwIHZhcigtLXNwYWNlLTEpO1xufVxuXG4uZ2JjLWZpbGxpbmctaGludCB7XG4gICAgbWFyZ2luOiAwIDAgdmFyKC0tc3BhY2UtMyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmdiYy1maWxsaW5nLW9wdGlvbnMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjIwcHgsIDFmcikpO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi8qIFN1cnByaXNlQ2FsZW5kYXIgKDIwMjYtMTAtMDgpOiBhdWYgc2NobWFsZW4gSGFuZHlzIGVpbmUgRsO8bGx1bmcgamUgWmVpbGUgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgIC5nYmMtZmlsbGluZy1vcHRpb25zIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgfVxufVxuXG4uZ2JjLWZpbGxpbmctb3B0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctd2hpdGUpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbn1cblxuLmdiYy1maWxsaW5nLW9wdGlvbjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmdiYy1maWxsaW5nLW9wdGlvbi5pcy1zZWxlY3RlZCB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiKSwgMC4wNSk7XG59XG5cbi5nYmMtZmlsbGluZy1vcHRpb24gaW5wdXQge1xuICAgIGZsZXg6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiBQcm9kdWt0YmlsZCBsaW5rcyAoU3VycHJpc2VDYWxlbmRhciAyMDI2LTEwLTA4KSAqL1xuLmdiYy1maWxsaW5nLW9wdGlvbl9faW1nIHtcbiAgICBmbGV4OiBub25lO1xuICAgIHdpZHRoOiA1NnB4O1xuICAgIGhlaWdodDogNTZweDtcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTtcbn1cblxuLmdiYy1maWxsaW5nLW9wdGlvbl9faW1nLS1sZWVyIHtcbiAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbn1cblxuLmdiYy1maWxsaW5nLW9wdGlvbl9fYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMnB4O1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbn1cblxuLmdiYy1maWxsaW5nLW9wdGlvbl9fcHJpY2Uge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXRleHQpO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5nYmMtZmlsbGluZy1vcHRpb24gc21hbGwge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLyogQ29uZmlndXJhdG9yIEFjdGlvbnMgKi9cbi5jb25maWd1cmF0b3ItYWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTQpO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLXdoaXRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteGwpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSk7XG59XG5cbi5jb25maWd1cmF0b3ItYWN0aW9ucyAuYnRuIHtcbiAgICBtaW4td2lkdGg6IDE1MHB4O1xufVxuXG4vKiBMb2FkaW5nIGFuZCBDb21pbmcgU29vbiAqL1xuLmxvYWRpbmctdGV4dCxcbi5jb21pbmctc29vbiB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPTVBBQ1QgSEVSTyAoSG9tZXBhZ2UpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uaGVyby1jb21wYWN0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1nb2xkKTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5oZXJvLWNvbXBhY3QgaDEge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTJ4bCk7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5oZXJvLWNvbXBhY3QgcCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYmFzZSk7XG4gICAgb3BhY2l0eTogMC45O1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZVTEwgV0lEVEggQlVUVE9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYnRuLWZ1bGwge1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4uYnRuLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLyogQ2FydCBDVEE6IGNsZWFuIHR3by1saW5lIGxheW91dCBvbiBuYXJyb3cgc2NyZWVucywgc2luZ2xlIGxpbmUgb3RoZXJ3aXNlICovXG4uY2FydC1jdGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtMyk7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjU7XG59XG5cbi5jYXJ0LWN0YSAuY2FydC1jdGEtbGFiZWwsXG4uY2FydC1jdGEgLnByaWNlLWRpc3BsYXkge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi8qIENhcnQtSWNvbiBpbSBDVEEg4oCUIExpbmllbi1TVkcgd2llIGltIEhlYWRlciAoZXJzZXR6dCDwn5uSLUVtb2ppIDIwMjYtMDctMTUpICovXG4uY2FydC1jdGEgLmNhcnQtY3RhLWljb24ge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PQklMRSBSRVNQT05TSVZFXG4gICBNb2JpbGUtRmlyc3QgQXBwcm9hY2hcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIEJhc2UgbW9iaWxlIHN0eWxlcyDigJQgU2VpdGVuYWJzdGFuZCBrb21tdCBzZWl0IDIwMjYtMDktMjUgdm9tIC5jb250YWluZXJcbiAgIGRlciBBcmJlaXRzZmzDpGNoZSAoMTYgcHgpLCBuaWNodCBtZWhyIHZvbiAuY29uZmlndXJhdG9yLXNlY3Rpb24vLmdiYy1sYXlvdXQtY29udGFpbmVyLiAqL1xuXG4vKiBTbWFsbCBtb2JpbGUgZGV2aWNlcyAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLmhlcm8tY29tcGFjdCBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhsKTtcbiAgICB9XG4gICAgXG4gICAgLmhlcm8tY29tcGFjdCBwIHtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIH1cbiAgICBcbiAgICAvKiAyMDI2LTA4LTExIEVOVEZFUk5UOiBgLmdiYy1kb29yLW51bWJlciB7IGZvbnQtc2l6ZTogMWVtIH1gLiBCZW1hw58gZGllXG4gICAgICAgVMO8cm51bW1lciBkZXMgTWVocmZhY2hiaWxkLU1vZHVzLCBhbHMgc2llIG5vY2ggc2NobGljaHRlciBUZXh0IGltXG4gICAgICAgUGxhdHpoYWx0ZXIgd2FyLiBTZWl0IGRpZSBOdW1tZXIgaW4gYmVpZGVuIE1vZGkgZGVyc2VsYmUgQ2hpcCBpc3QsIGdyZWlmdFxuICAgICAgIG9obmVoaW4gZGVzc2VuIGZsdWlkZSBjbGFtcCgpLUdyw7bDn2UgKFNwZXppZml0w6R0IDAsMiwwIGdlZ2VuIDAsMSwwKSDigJQgZGllXG4gICAgICAgUmVnZWwgd2FyIHdpcmt1bmdzbG9zIHVuZCB3aWRlcnNwcmFjaCBkZXIgQ2hpcC1CZW1hw591bmcgbnVyIHNjaGVpbmJhci4gKi9cblxuICAgIC5nYmMtYWRkLXRpdGxlLWJ0biB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMik7XG4gICAgfVxuICAgIFxuICAgIC5nYmMtY29sbGFwc2libGUtdG9nZ2xlIHtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMyk7XG4gICAgfVxuICAgIFxuICAgIC5nYmMtdG9nZ2xlLXRleHQge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgfVxuICAgIFxuICAgIC51cGxvYWQtYnRuIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuICAgIH1cbiAgICBcbiAgICAuY29uZmlndXJhdG9yLWFjdGlvbnMge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICAgICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG4gICAgfVxuXG4gICAgLyogTW9kYWwgZnVsbCBzY3JlZW4gb24gbW9iaWxlICovXG4gICAgLmdiYy1tb2RhbC1jb250ZW50IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG4gICAgXG4gICAgLmdiYy1tb2RhbC1pbWFnZS1ncmlkIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoNjBweCwgMWZyKSk7XG4gICAgfVxuICAgIFxuICAgIC5nYmMtbW9kYWwtdXBsb2FkLWFyZWEge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICB9XG4gICAgXG4gICAgLnVwbG9hZC1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtO1xuICAgIH1cbn1cblxuLyogVGFibGV0cyBhbmQgbGFyZ2VyIHBob25lcyAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDQ4MXB4KSBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAuaGVyby1jb21wYWN0IGgxIHtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMnhsKTtcbiAgICB9XG4gICAgXG4gICAgLmdiYy1kb29yLXByb21wdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDAuNjVlbTtcbiAgICB9XG59XG5cbi8qIERlc2t0b3AgYW5kIGxhcmdlciB0YWJsZXRzICovXG5AbWVkaWEgKG1pbi13aWR0aDogNzY5cHgpIHtcbiAgICAuaGVyby1jb21wYWN0IHtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNikgMDtcbiAgICB9XG4gICAgXG4gICAgLmhlcm8tY29tcGFjdCBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTN4bCk7XG4gICAgfVxuICAgIFxuICAgIC5oZXJvLWNvbXBhY3QgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbiAgICB9XG4gICAgXG4gICAgLmNvbmZpZ3VyYXRvci1hY3Rpb25zIC5idG4ge1xuICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgIH1cbiAgICBcbiAgICAuY29uZmlndXJhdG9yLWFjdGlvbnMge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIH1cbiAgICBcbiAgICAuYnRuLWZ1bGwge1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICB9XG59XG5cbi8qIENvbGxhcHNpYmxlIHNlY3Rpb24gZXhwYW5kZWQgc3RhdGUgKi9cbi5nYmMtY29sbGFwc2libGUtY29udGVudFthcmlhLWhpZGRlbj1cImZhbHNlXCJdIHtcbiAgICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtMik7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8qIFRvdWNoLWZyaWVuZGx5IGFkanVzdG1lbnRzICovXG5AbWVkaWEgKGhvdmVyOiBub25lKSBhbmQgKHBvaW50ZXI6IGNvYXJzZSkge1xuICAgIC5nYmMtY2FsZW5kYXItZG9vcjpob3ZlciB7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICB9XG4gICAgXG4gICAgLmdiYy1wcmV2aWV3LWl0ZW06aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgfVxuICAgIFxuICAgIC5nYmMtY2FsZW5kYXItZG9vcjphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIH1cbiAgICBcbiAgICAuZ2JjLXByZXZpZXctaXRlbTphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIH1cbn1cblxuLyogQm9keSBzY3JvbGwgbG9jayB3aGVuIG1vZGFsIG9wZW4gKi9cbmJvZHkubW9kYWwtb3BlbiB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbi8qIEZpeCBpT1Mgc2FmZSBhcmVhICovXG5Ac3VwcG9ydHMgKHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpIHtcbiAgICAuY29uZmlndXJhdG9yLWFjdGlvbnMge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogY2FsYyh2YXIoLS1zcGFjZS02KSArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gICAgfVxufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU0lOR0xFLUlNQUdFIENPTkZJR1VSQVRPUlxuICAgMzMwIMOXIDI0MCBtbSBTdGFuemVuLUZyb250ICgzMy8yNCwgS0FMNjAwNykg4oCUIHdpZSBNdWx0aS1JbWFnZTtcbiAgIFF1ZWxsZTogUHJpbnRHZW5lcmF0b3I6OkRPT1JfTU1fRlJPTlRfVklFV1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogU2luZ2xlIEltYWdlIENhbGVuZGFyIENvbnRhaW5lciAtIE1hdGNoZXMgbXVsdGktaW1hZ2UgZGltZW5zaW9ucyAqL1xuI2diYy1zaW5nbGUtY2FsZW5kYXItY29udGFpbmVyLmdiYy1zaW5nbGUtaW1hZ2UtbGF5b3V0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7ICAvKiBDaGFuZ2VkIHRvIGJsb2NrIGZvciBwcm9wZXIgYXNwZWN0LXJhdGlvICovXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbiAgICBhc3BlY3QtcmF0aW86IDMzIC8gMjQ7ICAvKiAzMzAgw5cgMjQwIG1tIFN0YW56ZW4tRnJvbnQgKDIwMjYtMDctMjIpICovXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBCYWNrZ3JvdW5kIEltYWdlIExheWVyIC0gRnVsbCBjb250YWluZXIsIGJlaGluZCBkb29ycyAqL1xuLmdiYy1zaW5nbGUtYmFja2dyb3VuZC1sYXllciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgY3Vyc29yOiBncmFiO1xuICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cblxuLmdiYy1zaW5nbGUtYmFja2dyb3VuZC1sYXllcjphY3RpdmUge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbi5nYmMtc2luZ2xlLWJhY2tncm91bmQtaW1hZ2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qIFVwbG9hZCBQbGFjZWhvbGRlciAqL1xuLmdiYy1zaW5nbGUtdXBsb2FkLXBsYWNlaG9sZGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LWxpZ2h0KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMjtcbn1cblxuLmdiYy1zaW5nbGUtdXBsb2FkLXBsYWNlaG9sZGVyIC5wbGFjZWhvbGRlci1pY29uIHtcbiAgICBmb250LXNpemU6IDNyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5nYmMtc2luZ2xlLXVwbG9hZC1wbGFjZWhvbGRlciAucGxhY2Vob2xkZXItdGV4dCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbGcpO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi8qIERvb3IgT3ZlcmxheSAtIFNpdHMgb24gdG9wIHdpdGggdHJhbnNwYXJlbnQgY3V0b3V0cy5cbiAgIFN1cnByaXNlQ2FsZW5kYXIgKDIwMjYtMDctMjIpOiBDdXRvdXRzIGxpZWdlbiBhYnNvbHV0IGF1ZiBkZXJcbiAgIFN0YW56Z2VvbWV0cmllIChzaWVoZSBbZGF0YS1zbG90XS1SZWdlbG4gYmVpbSBNdWx0aS1HcmlkKS4gKi9cbi5nYmMtc2luZ2xlLWRvb3Itb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB6LWluZGV4OiA1O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIFN0YXRpYyBEb29ycyAtIFRyYW5zcGFyZW50LCBvbmx5IHRoZSBsaWdodCBkYXNoZWQgZGllIGxpbmUgKDIwMjYtMDktMzAsXG4gICBkaWVzZWxiZSBMaW5pZSB3aWUgLmdiYy1jYWxlbmRhci1kb29yLCBCZWdyw7xuZHVuZyBkb3J0KS4gKi9cbi5nYmMtc3RhdGljLWRvb3Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgIC8qIFRyYW5zcGFyZW50IHRvIHNob3cgYmFja2dyb3VuZCBpbWFnZSAqL1xuICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDE0MCwgMTMwLCAxMTgsIDAuOSk7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBaVVNBVFpCSUxERVIgKEVpbnplbGJpbGQsIDIwMjYtMDktMzApIOKAlCBjb21wb25lbnRzL0ltYWdlTGF5ZXJzLmpzXG4gICBFYmVuZSA9IEJveCBhdXMgbGVmdC90b3AgKE1pdHRlbHB1bmt0KSwgd2lkdGggKCUgZGVyIEZyb250KSwgYXNwZWN0LXJhdGlvXG4gICB1bmQgdHJhbnNmb3JtIChpbmxpbmUpLiB6IDM6IMO8YmVyIGRlbSBIYXVwdGJpbGQgKDEpLCBVTlRFUiBUw7xybGluaWVuIHVuZFxuICAgLW51bW1lcm4gKE92ZXJsYXkgNSkg4oCUIHdpZSBpbSBEcnVjaywgd28gZGllIE51bW1lcm4genVsZXR6dCBrb21tZW4uIERlclxuICAgQXVzd2FobHJhaG1lbiBsaWVndCBhdWYgeiAxOSwgZGFtaXQgc2VpbmUgR3JpZmZlIGdyZWlmYmFyIGJsZWliZW4uXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLmdiYy1pbWFnZS1sYXllciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDM7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGN1cnNvcjogbW92ZTtcbiAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xufVxuXG4uZ2JjLWltYWdlLWxheWVyLS1jaXJjbGUge1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLyogTWHDn2Ugc2V0enQgSW1hZ2VMYXllcnMucGFpbnQoKSBpbmxpbmUgKEtyZWlzOiBDb3Zlci1BdXNzY2huaXR0IG9obmVcbiAgIG9iamVjdC1maXQg4oCUIGh0bWwyY2FudmFzIDEuNC4xIGtlbm50IG9iamVjdC1maXQgbmljaHQpLiBtYXgtd2lkdGg6IG5vbmVcbiAgIGhlYnQgZGFzIGdsb2JhbGUgaW1nLUxpbWl0IGF1Ziwgc29uc3Qgd2lyZCBkZXIgS3JlaXMtQXVzc2Nobml0dCBnZXN0YXVjaHQuICovXG4uZ2JjLWltYWdlLWxheWVyIGltZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBFbHRlcm4tQmxvY2sgZGVyIEZyb250OiBCZXp1Z3NyYWhtZW4gZGVzIEF1c3dhaGxyYWhtZW5zIChzZXR6dCBJbWFnZUxheWVycykgKi9cbi5nYmMtaW1hZ2UtbGF5ZXItaG9zdCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZ2JjLWltYWdlLWxheWVyLXNlbGVjdGlvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDE5O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLWNvbG9yLXByaW1hcnksICNCMjNBMzEpO1xuICAgIGN1cnNvcjogbW92ZTtcbiAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcbn1cblxuLmdiYy1pbWFnZS1sYXllci1zZWxlY3Rpb25baGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmdiYy1pbWFnZS1sYXllci1zZWxlY3Rpb24tLWNpcmNsZSB7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4uZ2JjLWltYWdlLWxheWVyLWhhbmRsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAyOHB4O1xuICAgIGhlaWdodDogMjhweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXByaW1hcnksICNCMjNBMzEpO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG59XG5cbi8qIERyZWhncmlmZiBhbiBlaW5lbSBTdGllbCDDvGJlciBkZXIgT2JlcmthbnRlICovXG4uZ2JjLWltYWdlLWxheWVyLWhhbmRsZS0tcm90YXRlIHtcbiAgICB0b3A6IC00NHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLTE0cHg7XG4gICAgY3Vyc29yOiBncmFiO1xufVxuXG4uZ2JjLWltYWdlLWxheWVyLWhhbmRsZS0tcm90YXRlOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6IDJweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSwgI0IyM0EzMSk7XG59XG5cbi5nYmMtaW1hZ2UtbGF5ZXItaGFuZGxlLS1yZXNpemUge1xuICAgIHJpZ2h0OiAtMTRweDtcbiAgICBib3R0b206IC0xNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBjdXJzb3I6IG53c2UtcmVzaXplO1xufVxuXG4uZ2JjLWltYWdlLWxheWVyLXRvb2xzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiBjYWxjKDEwMCUgKyAxOHB4KTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgLyogYXVmcmVjaHQsIGF1Y2ggd2VubiBkZXIgUmFobWVuIGdlZHJlaHQgaXN0ICgtLWxheWVyLXJvdGF0aW9uIHNldHp0IEltYWdlTGF5ZXJzKSAqL1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSByb3RhdGUoY2FsYygtMSAqIHZhcigtLWxheWVyLXJvdGF0aW9uLCAwZGVnKSkpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA0cHg7XG4gICAgcGFkZGluZzogM3B4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTtcbiAgICBib3gtc2hhZG93OiAwIDFweCA2cHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cblxuLmdiYy1pbWFnZS1sYXllci10b29scyBidXR0b24ge1xuICAgIG1pbi13aWR0aDogMzJweDtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgcGFkZGluZzogMCA2cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5nYmMtaW1hZ2UtbGF5ZXItdG9vbHMgYnV0dG9uLmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS10ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiKSwgMC4wOCk7XG59XG5cbi5nYmMtaW1hZ2UtbGF5ZXItdG9vbHMgLmdiYy1pbWFnZS1sYXllci1yZW1vdmUge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXRleHQpO1xufVxuXG4uZ2JjLWltYWdlLWxheWVyLWhpbnQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KSAwO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCwgIzZiNmI2Yik7XG59XG5cbi8qIERvb3IgbnVtYmVyIC0gc2VtaS10cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGZvciByZWFkYWJpbGl0eS5cbiAgIDIwMjYtMDgtMTE6IGdpbHQgamV0enQgZsO8ciBCRUlERSBNb2RpIOKAlCBkZXIgTWVocmZhY2hiaWxkLU1vZHVzIHRydWcgZGllIE51bW1lclxuICAgdm9yaGVyIGFscyBzY2hsaWNodGVuIFRleHQgaW0gUGxhdHpoYWx0ZXIgdW5kIHZlcmxvciBzaWUgZGFtaXQsIHNvYmFsZCBlaW4gQmlsZFxuICAgaW4gZGVyIFTDvHIgbGFnLiBHbGVpY2hlIE9wdGlrIGluIGJlaWRlbiBNb2RpID0gZ2xlaWNoZSBPcHRpayB3aWUgZGllXG4gICBEcnVja2RhdGVpIChQcmludEdlbmVyYXRvcjo6ZHJhd0Rvb3JOdW1iZXJzKS4gKi9cbi5nYmMtc3RhdGljLWRvb3IgLmdiYy1kb29yLW51bWJlcixcbi5nYmMtY2FsZW5kYXItZG9vciA+IC5nYmMtZG9vci1udW1iZXIge1xuICAgIGZvbnQtc2l6ZTogMS41ZW07ICAvKiBGYWxsYmFjayBmw7xyIEJyb3dzZXIgb2huZSBjbGFtcCgpICovXG4gICAgLyogMjAyNi0wOC0xMDogRGVyIENoaXAgc2thbGllcnQgamV0enQgbWl0IGRlciBGcm9udCBzdGF0dCBmaXhlciBweC1HcsO2w59lbi5cbiAgICAgICBEZXIgZmxhY2hzdGUgU2xvdCAoNS82KSBpc3QgbnVyIDEwLjg0MiAlIGRlciBGcm9udGjDtmhlIOKAlCBiZWkgMzIwIHB4IHNpbmRcbiAgICAgICBkYXMgMjIuNSBweCBpbmtsLiAyw5czIHB4IFJhaG1lbiwgYWxzbyAxNi41IHB4IElubmVuaMO2aGUuIEVpbiBzdGF0aXNjaFxuICAgICAgIGJlbWVzc2VuZXIgQ2hpcCBwYXNzdGUgZG9ydCBuaWUuIE9iZXJncmVuemUgMS41cmVtID0gYmlzaGVyaWdlclxuICAgICAgIERlc2t0b3AtV2VydCwgVW50ZXJncmVuemUgMC42MjVyZW0gPSBrbGVpbnN0ZXIgbm9jaCBsZXNiYXJlciBXZXJ0LiAqL1xuICAgIGZvbnQtc2l6ZTogY2xhbXAoMC42MjVyZW0sIDN2dywgMS41cmVtKTtcbiAgICAvKiBQZmxpY2h0OiBkaWUgdm9uIDxib2R5PiBnZWVyYnRlIGxpbmUtaGVpZ2h0IDEuNiBibMOkaHRlIGRlbiBDaGlwIGF1ZiBkYXNcbiAgICAgICAxLjYtZmFjaGUgZGVyIFNjaHJpZnRncsO2w59lIGF1ZiAoNDYuNCBweCBhdWYgZGVtIERlc2t0b3ApIHVuZCBsaWXDnyBpaG4gaW5cbiAgICAgICBTbG90IDUvNiDDvGJlcmxhdWZlbi4gRGVyIENoaXAgaXN0IGltbWVyIGVpbnplaWxpZy4gKi9cbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgIHRleHQtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjcpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC40KTtcbiAgICBwYWRkaW5nOiAwLjFlbSAwLjVlbTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAvKiAyMDI2LTA3LTIyOiBhYnNvbHV0ZSBaZW50cmllcnVuZyBzdGF0dCBFbHRlcm4tRmxleCDigJQgaHRtbDJjYW52YXNcbiAgICAgICAoV2FyZW5rb3JiLUNhcHR1cmUpIHJlbmRlcnQgRmxleC1aZW50cmllcnVuZyBpbiBkZW4gc2VpdCBoZXV0ZSBhYnNvbHV0XG4gICAgICAgcG9zaXRpb25pZXJ0ZW4gVMO8cmVuIHVuenV2ZXJsw6Rzc2lnIChDaGlwcyB3YW5kZXJ0ZW4gYXVzIGRlciBNaXR0ZSkuXG4gICAgICAgdHJhbnNmb3JtLWJhc2llcnRlIFplbnRyaWVydW5nIGNhcHR1cmVkIHN0YWJpbC5cbiAgICAgICDimqDvuI8gdG9wL2xlZnQgdW5kIHRyYW5zZm9ybSBzaW5kIEVJTkUgRWluaGVpdDogd2VyIGB0b3BgIMO8YmVyc2NocmVpYnQsIG9obmVcbiAgICAgICBgdHJhbnNmb3JtYCB6dSBuZXV0cmFsaXNpZXJlbiwgYWRkaWVydCBiZWlkZSBaZW50cmllcnVuZ2VuIHN0YXR0IHNpZSB6dVxuICAgICAgIGVyc2V0emVuIHVuZCBzY2hpZWJ0IGRlbiBDaGlwIGF1cyBkZXIgVMO8ciBoZXJhdXMgKGdlbmF1IGRhcyB3YXIgZGVyXG4gICAgICAg4omkNDgwLXB4LUJ1ZywgZ2VmaXh0IDIwMjYtMDgtMTApLiBTaWVoZSBkb29yLW51bWJlci1jZW50ZXJpbmcudGVzdC5qcy4gKi9cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vKiBOdXIgZGVyIE1laHJmYWNoYmlsZC1Nb2R1czogZG9ydCBsaWVnZW4gS3VuZGVuYmlsZCAoLmdiYy1kb29yLWltYWdlKSB1bmRcbiAgIFTDvHJ0ZXh0LU92ZXJsYXkgKHotaW5kZXggMjApIGluIGRlcnNlbGJlbiBUw7xyLiBEaWUgTnVtbWVyIG11c3Mgw7xiZXIgYmVpZGUg4oCUXG4gICBzaWUgaXN0IGVpbmUgUHJvZHVrdGlvbnN2b3JnYWJlLCBuaWNodCBLdW5kZW5pbmhhbHQsIHVuZCBkaWUgRHJ1Y2tkYXRlaVxuICAgemVpY2huZXQgc2llIGF1cyBkZW1zZWxiZW4gR3J1bmQgenVsZXR6dC4gcG9pbnRlci1ldmVudHM6IG5vbmUsIGRhbWl0IGRlclxuICAgQ2hpcCBpbiBkZXIgVMO8cm1pdHRlIHdlZGVyIEtsaWNrIG5vY2ggRHJvcCBkZXIgVMO8ciBhYmbDpG5ndCAoZGVyIFBsYXR6aGFsdGVyXG4gICBtYWNodCBlcyBnZW5hdXNvKS4gRGllIFplbnRyaWVydW5nIGtvbW10IGF1cyBkZXIgZ2VtZWluc2FtZW4gQ2hpcC1SZWdlbFxuICAgZGFyw7xiZXIgdW5kIHdpcmQgaGllciBiZXd1c3N0IE5JQ0hUIGFuZ2VmYXNzdC4gKi9cbi5nYmMtY2FsZW5kYXItZG9vciA+IC5nYmMtZG9vci1udW1iZXIge1xuICAgIHotaW5kZXg6IDIxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBUw7xyZ2VvbWV0cmllOiBzaWVoZSBkaWUgZ2VtZWluc2FtZW4gW2RhdGEtZG9vci1pZF0vW2RhdGEtc2xvdF0tUmVnZWxuXG4gICBiZWltIE11bHRpLUdyaWQgKFN0YW56ZSBLQUw2MDA3LCAyMDI2LTA3LTIyKS4gKi9cblxuLyogU2luZ2xlLUltYWdlIFRvb2xiYXI6IGdlbWVpbnNhbWUgUmVnZWwgbWl0IC5nYmMtbXVsdGktdG9vbGJhciAocy4gb2JlbikgKi9cblxuLyogWm9vbSBDb250cm9scyAtIE5vdyBpbiB0b29sYmFyICovXG4uZ2JjLXNpbmdsZS16b29tLWNvbnRyb2xzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogNHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIHBhZGRpbmc6IDRweDtcbn1cblxuLyogUmVtb3ZlIEltYWdlIEJ1dHRvbiAtIFRvb2xiYXIgdmVyc2lvbiAqL1xuLmdiYy1yZW1vdmUtaW1hZ2UtdG9vbGJhci1idG4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTEpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTMpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTY2LCAzNSwgMjYsIDAuMSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWVycm9yKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2NiwgMzUsIDI2LCAwLjMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbn1cblxuLmdiYy1yZW1vdmUtaW1hZ2UtdG9vbGJhci1idG46aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWVycm9yKTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1lcnJvcik7XG59XG5cbi5nYmMtem9vbS1idG4ge1xuICAgIHdpZHRoOiAzNnB4O1xuICAgIGhlaWdodDogMzZweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xufVxuXG4uZ2JjLXpvb20tYnRuOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG59XG5cbi5nYmMtem9vbS1idG46YWN0aXZlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xufVxuXG4vKiBEcmFnIEhpbnQgKGZvciBzaW5nbGUgaW1hZ2UpICovXG4uZ2JjLWRyYWctaGludCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0yKTtcbiAgICB6LWluZGV4OiAyMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBhbmltYXRpb246IHB1bHNlSGludCAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbn1cblxuLmdiYy1kcmFnLWhpbnQgLmRyYWctaWNvbiB7XG4gICAgZm9udC1zaXplOiAycmVtO1xufVxuXG5Aa2V5ZnJhbWVzIHB1bHNlSGludCB7XG4gICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAwLjk7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOyB9XG4gICAgNTAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMS4wNSk7IH1cbn1cblxuLyogTW9iaWxlIHJlc3BvbnNpdmUgZm9yIHNpbmdsZSBpbWFnZSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLyogMjAyNi0wOC0xMCBFTlRGRVJOVDogYC5nYmMtc3RhdGljLWRvb3IgLmdiYy1kb29yLW51bWJlciB7IHdpZHRoOiAyMHB4O1xuICAgICAgIGhlaWdodDogMjBweDsgZm9udC1zaXplOiAwLjc1ZW07IHRvcDogNHB4IH1gLlxuICAgICAgIGB0b3A6IDRweGAgaG9iIGRpZSBCYXNpcy1UcmFuc2xhdGlvbiBuaWNodCBhdWYsIHNvbmRlcm4gYWRkaWVydGUgc2ljaCB6dVxuICAgICAgIGlocjogMyBweCBSYWhtZW4gKyA0IHB4IOKIkiB0cmFuc2xhdGVZKOKIkjUwICUpIHZvbiAyMCBweCA9IOKIkjMgcHgsIGRlciBDaGlwXG4gICAgICAgc2HDnyBhbHNvIDMgcHggT0JFUkhBTEIgZGVyIFTDvHJrYW50ZSB1bmQgw7xiZXJsYWdlcnRlIGRlbiB3ZWnDn2VuIFJhaG1lbi5cbiAgICAgICB3aWR0aC9oZWlnaHQgd2FyZW4gdW50ZXIgZGVtIGdsb2JhbGVuIGJvcmRlci1ib3gtUmVzZXQgKGRlc2lnbi1zeXN0ZW0uY3NzKVxuICAgICAgIG9obmVoaW4gd2lya3VuZ3Nsb3Mg4oCUIHBhZGRpbmcgNC8xMiBweCDDvGJlcnN0ZWlndCAyMCBweCwgZGllIGdlbnV0enRlXG4gICAgICAgQnJlaXRlIHdhciAyNCBweC4gRGllIEJhc2lzcmVnZWwgemVudHJpZXJ0IHVuZCBza2FsaWVydCBqZXR6dCBzZWxic3RcbiAgICAgICBrb3JyZWt0OyBlaW4gTW9iaWxlLU92ZXJyaWRlIGlzdCBuaWNodCBtZWhyIG7DtnRpZy4gKi9cblxuICAgIC5nYmMtc2luZ2xlLXpvb20tY29udHJvbHMge1xuICAgICAgICBib3R0b206IDhweDtcbiAgICAgICAgcGFkZGluZzogNHB4O1xuICAgICAgICBnYXA6IDRweDtcbiAgICB9XG4gICAgXG4gICAgLmdiYy16b29tLWJ0biB7XG4gICAgICAgIHdpZHRoOiAzMHB4O1xuICAgICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgfVxufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUVVFUkZPUk1BVC1ISU5XRUlTICgvY2FsZW5kYXIpIOKAlCBDU1MgbmFjaGdldHJhZ2VuIDIwMjYtMDktMjVcbiAgIERhcyBNYXJrdXAgKCNsYW5kc2NhcGUtcHJvbXB0LW92ZXJsYXksIENvbmZpZ3VyYXRvclBhZ2UpIHVuZCBkaWUgTG9naWtcbiAgIChzdGF0aWMvanMvbWFpbi5qcyBpbml0TGFuZHNjYXBlTW9kZTogS2xhc3NlIC5hY3RpdmUgYmVpIOKJpCA3NjggcHggaW1cbiAgIEhvY2hmb3JtYXQsIGJvZHkub3JpZW50YXRpb24tbG9ja2VkKSBleGlzdGllcnRlbiwgYWJlciBrZWluZSBlaW56aWdlXG4gICBSZWdlbCBkYXp1IOKAlCBkZXIgSGlud2VpcyBzdGFuZCBhdWYgSkVERU0gVmlld3BvcnQgYWxzIG5hY2t0ZXIgVGV4dCBhbVxuICAgU2VpdGVuYW5mYW5nIHZvbiAvY2FsZW5kYXIuIFZlcnN0ZWNrdCwgYmlzIGRhcyBKUyBpaG4gYWt0aXZpZXJ0LlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmxhbmRzY2FwZS1wcm9tcHQtb3ZlcmxheSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmxhbmRzY2FwZS1wcm9tcHQtb3ZlcmxheS5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGluc2V0OiAwO1xuICAgIHotaW5kZXg6IDEwMDIwOyAvKiDDvGJlciBIZWFkZXIgKDEwMDAxKSB1bmQgTW9kYWxzICgxMDAxMCkgKi9cbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0zKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbn1cblxuYm9keS5vcmllbnRhdGlvbi1sb2NrZWQge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5sYW5kc2NhcGUtcHJvbXB0LWljb24ge1xuICAgIGZvbnQtc2l6ZTogM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMTtcbn1cblxuLmxhbmRzY2FwZS1wcm9tcHQtdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWhlYWRpbmcpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTJ4bCk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4ubGFuZHNjYXBlLXByb21wdC10ZXh0IHtcbiAgICBtYXgtd2lkdGg6IDI4cmVtO1xuICAgIG1hcmdpbjogMCAwIHZhcigtLXNwYWNlLTMpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmxhbmRzY2FwZS1wcm9tcHQtYnRuIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS02KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5sYW5kc2NhcGUtcHJvbXB0LXNraXAge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUFJFVklFVyBNT0RBTFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmdiYy1wcmV2aWV3LW1vZGFsLWNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNzAwcHg7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xuICAgIG1hcmdpbjogMTZweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZ2JjLXByZXZpZXctbW9kYWwtYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtNik7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5nYmMtcHJldmlldy1jYW52YXMtY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iZyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5nYmMtcHJldmlldy1jYW52YXMtY29udGFpbmVyIGNhbnZhcyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG59XG5cbi5nYmMtcHJldmlldy1oaW50IHtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0zKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xufVxuXG4uZ2JjLXByZXZpZXctc3VtbWFyeSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5nYmMtcHJldmlldy1zdW1tYXJ5IGg0IHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG59XG5cbi5nYmMtcHJldmlldy1zdW1tYXJ5IHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4uZ2JjLXByZXZpZXctc3VtbWFyeSBsaSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMikgMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG59XG5cbi5nYmMtcHJldmlldy1zdW1tYXJ5IGxpOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5nYmMtcHJldmlldy1zdW1tYXJ5IC5sYWJlbCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7XG59XG5cbi5nYmMtcHJldmlldy1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tc3BhY2UtNCk7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4uZ2JjLXByZXZpZXctYWN0aW9ucyAuYnRuIHtcbiAgICBmbGV4OiAxO1xufVxuXG4vKiBNb2JpbGU6IFByZXZpZXcgTW9kYWwgZnVsbHNjcmVlbiAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLmdiYy1wcmV2aWV3LW1vZGFsLWNvbnRlbnQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG4gICAgXG4gICAgLmdiYy1wcmV2aWV3LW1vZGFsLWJvZHkge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcbiAgICAgICAgZ2FwOiB2YXIoLS1zcGFjZS00KTtcbiAgICB9XG4gICAgXG4gICAgLmdiYy1wcmV2aWV3LWNhbnZhcy1jb250YWluZXIge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKTtcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgIC5nYmMtcHJldmlldy1hY3Rpb25zIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgXG4gICAgLmdiYy1wcmV2aWV3LWFjdGlvbnMgLmJ0biB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cblxuLyogUHJldmlldyBDbG9uZSBTdHlsaW5nICovXG4uZ2JjLXByZXZpZXctd3JhcHBlciB7XG4gICAgbWF4LWhlaWdodDogMzUwcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xufVxuXG4uZ2JjLXByZXZpZXctY2xvbmUge1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uZ2JjLXByZXZpZXctY2xvbmUgLmdiYy1jdXN0b21pemUtdGV4dC1idG4sXG4uZ2JjLXByZXZpZXctY2xvbmUgLmdiYy1yZW1vdmUtaW1hZ2UtdG9vbGJhci1idG4sXG4uZ2JjLXByZXZpZXctY2xvbmUgLmdiYy1hZGQtdGl0bGUtYnRuLFxuLmdiYy1wcmV2aWV3LWNsb25lIC5nYmMtdGVtcGxhdGUtYnRuLFxuLmdiYy1wcmV2aWV3LWNsb25lIC5nYmMtbXVsdGktdG9vbGJhcixcbi5nYmMtcHJldmlldy1jbG9uZSAuZ2JjLW11bHRpLXpvb20tY29udHJvbHMsXG4uZ2JjLXByZXZpZXctY2xvbmUgLmdiYy1jYWxlbmRhci1kb29yLmlzLWFjdGl2ZTo6YWZ0ZXIsXG4uZ2JjLXByZXZpZXctY2xvbmUgLmdiYy1pbWFnZS1sYXllci1zZWxlY3Rpb24ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiJdfQ== */