/*!**********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/00_reset.css ***!
  \**********************************************************************************************************************/
*, ::after, ::before {
    box-sizing: border-box;
}

body {
    margin: 0;
}

ul {
    list-style-type: none;
    padding-inline-start: 0;
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/10_font.css ***!
  \*********************************************************************************************************************/
html {
    /* Il est interdit de rajouter des couleurs sans demander l'accord du PO */
    --cBlanc1: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBlanc1p: #E0E0E0; */
    --cBlanc02: #F5F5F5;
    --cBlanc2: #F0F0F0;
    --cBlanc03: #dce1ea;
    --cBlanc3: #CCCFCC;
    /* inutilisé 2026-06-13  --cBlanc4: #AAAFAA; */
    --cBlanc5: #999C99;


    /* ============================================
       COULEURS TEXTE NOIR - UTILISATION OBLIGATOIRE
       ============================================ */

    /* --cNoir1 : ÉLÉMENTS D'EMPHASE
       - Titres : h1, h2, h3
       - Texte des boutons (quand pas de couleur définie)
       - Labels obligatoires (required)
       - Menus de navigation
       - Checkbox et radio boutons
       - Valeur principale dans les compteurs (ex: "3" dans "3 / 5")
    */
    --cNoir1: #181818;
    /* inutilisé 2026-06-13  --cNoir1o: #18181855; */

    /* --cNoir2 : CORPS DE TEXTE
       - Paragraphes <p>
       - Listes <li>, énumérations
       - Labels facultatifs
       - Texte saisi dans les inputs
       - Titres h4, h5, h6
       - Valeur secondaire dans les compteurs (ex: "/ 5" dans "3 / 5")
    */
    --cNoir2: #282828;

    /* --cNoir3 : TEXTE TERTIAIRE
       - Placeholders
       - Messages d'aide discrets
       - Texte désactivé
    */
    --cNoir3: #555;

    /* --cNoir4-5 : TEXTE TRÈS ATTÉNUÉ
       - Éléments désactivés
       - Texte décoratif
    */
    --cNoir4: #999;
    --cNoir5: #BBB;
    --cBlanc: #FFF;
    --cNoir: #000;
    --cTexte1: #222;
    /* inutilisé 2026-06-13  --cTexte2: #444; */
    --cForm: #000;
    /* inutilisé 2026-06-13  --cForm_b: #555; */

    /* ============================================
       PALETTES DE RÔLE — une seule forme, 8 paliers, toujours nommés pareil
       0 fond très pâle · 1 fond pâle · 2 bordure / moyen · 3 couleur pleine (bouton, lien,
       onglet actif, indicateur) · 4 foncé / survol · _a dégradé · _ah dégradé au survol ·
       t texte posé sur la couleur pleine.
       Accent est la couleur de l'espace où l'on est : elle change par une classe sur <body>
       (voir le bloc après html{}). Or, Rouge et Succes ne changent jamais.
       Décision PO 2026-09-05. Aucune autre couleur de rôle n'est admise.
       ============================================ */

    /* Accent : voir le bloc body { } après html { }. Elle vit sur body, pas ici — une
       variable dérivée (dégradé, halo) se calcule là où elle est déclarée, et doit donc
       être déclarée sur le même élément que la classe qui change la couleur. */

    /* Or — s'inscrire, connexion, tarif, mise en avant */
    --cOr0: #fefce8;
    --cOr1: #fef3c7;
    --cOr2: #f5d96b;
    --cOr3: #FFD814; /* l'or d'Amazon, texte foncé dessus (décision chef de projet 2026-10-07) */
    --cOr4: #FFCE12; /* son survol */
    --cOr_a: linear-gradient(to bottom, var(--cOr3), var(--cOr4) 100%);
    --cOr_ah: linear-gradient(to bottom, var(--cOr3), var(--cOr3) 100%);
    --cOrt: #181818; /* foncé : le blanc sur --cOr3 ne faisait que 2,0:1 de contraste, 8,8:1 ainsi (décision chef de projet 2026-10-07) */

    /* Rouge — erreur, alerte, suppression, geste dangereux */
    --cRouge0: #fdf3f2;
    --cRouge1: #fbe2df;
    --cRouge2: #f5aaa3;
    --cRouge3: #f15b4e;
    --cRouge4: #930000;
    --cRouge_a: linear-gradient(to bottom, var(--cRouge3), var(--cRouge4) 100%);
    --cRouge_ah: linear-gradient(to bottom, var(--cRouge3), var(--cRouge3) 100%);
    --cRouget: #FFF;

    /* Cœur « J'aime » — un rouge à lui, sang, bordeaux foncé : le rouge de la famille dit
       l'alerte et le danger, pas l'affection (décision chef de projet 2026-09-16).
       Deux crans, comme les autres familles : le pâle du survol, la couleur du cœur. */
    --cCoeur0: #f6e4e7;
    --cCoeur3: #c1192f;

    /* Succes — validation, confirmation */
    --cSucces0: #f0fbff;
    --cSucces1: #ddf1fa;
    --cSucces2: #93d3ea;
    --cSucces3: #0e9dc9;
    --cSucces4: #0b5f7a;
    --cSucces_a: linear-gradient(to bottom, var(--cSucces3), var(--cSucces4) 100%);
    --cSucces_ah: linear-gradient(to bottom, var(--cSucces3), var(--cSucces3) 100%);
    --cSuccest: #FFF;

    --cBackground: var(--cBlanc);

    /* Le bandeau des aperçus (pageRubrique.css, ≥ 1600px). UN PLATEAU UNI AU CENTRE, le dégradé
       sur les bords seulement (décision chef de projet 2026-09-24) : l'ancien dégradé allait
       du gris des bords au blanc du centre, et des cartes blanches identiques paraissaient
       blanches sur le gris et ternes sur le blanc. Sur le plateau, toutes se détachent
       pareil. Deux halos de couleur, tenus dans les bords, donnent un peu de vie : le bleu
       du site en haut à gauche, l'orange des illustrations en bas à droite. */
    --cBackgroundGrand:
        radial-gradient(14% 40% at 0% 25%, #436bc11f, transparent),
        radial-gradient(14% 40% at 100% 75%, #f39c341f, transparent),
        linear-gradient(90deg, #E8EBF0 0%, #F4F5F7 12%, #F4F5F7 88%, #E8EBF0 100%);

    /* Layout */
    --largeur: 1360px;
    /* inutilisé 2026-06-13  --maxWidth: 760px; */
    --cBg: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBg_b: #CCC; */

    /* Noir transparent — ombres */
    --cOmbre: #0002;            /* environ 15% */
    --cOmbreForte: #0004;       /* environ 30% */

    /* transparent — overlays */
    --cOverlay: #0008;          /* environ 50% */
    --cBlancOverlay: #FFFC;     /* environ 80% */
    --cBlancVerre: #FFFFFF8C;   /* environ 55% — verre dépoli, toujours avec un flou (barre et bulle de l'aperçu) */

    /* Ombres composées */
    --ombrePortee: 0 4px 12px var(--cOmbre);
    --ombrePortee2: 0 0px 25px #000;
    --ombreModale: 0 10px 40px var(--cOmbreForte);
    --ombreInterne: 0 0 10px 10px inset var(--cBlanc02);

    /* Couleurs Noir gradients */
    /* inutilisé 2026-06-13  --cNoir3_a: linear-gradient(to bottom, #505858, #303838 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ah: linear-gradient(to bottom, #505858, #505858 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ahLight: linear-gradient(to bottom, #707878, #707878 100%); */
    /* inutilisé 2026-06-13  --cNoir3_at: #FFF; */


    /* inutilisé 2026-06-13  --sAlerte_s: #DEC4C4; */
    /* inutilisé 2026-06-13  --cTuto: #C6F; */
    /* inutilisé 2026-06-13  --cTuto_t: #000; */
    /* inutilisé 2026-06-13  --cTuto_ah: #d79af2; */
    /* inutilisé 2026-06-13  --cBlanc1_t: #181818; */
    /* inutilisé 2026-06-13  --cPlacehoder: #888; */
    /* inutilisé 2026-06-13  --cForm_s: #FFF; */
    /* inutilisé 2026-06-13  --bsCta: 0 7px 14px #3352, 0 3px 6px #0001; */

    /* Formulaires utilisateur */
    /* inutilisé 2026-06-13  --cFormUsr: #EEFAFF; */
    /* inutilisé 2026-06-13  --cFormUsr_b: #334; */
    /* inutilisé 2026-06-13  --cFormUsr_h: #FFF; */
    /* inutilisé 2026-06-13  --cFormUsr_bf: #0AF; */
    /* inutilisé 2026-06-13  --cFormUsr_cb: #059; */
    /* inutilisé 2026-06-13  --cForm_bf: #3C0; */
    /* inutilisé 2026-06-13  --cForm_cb: #590; */
    /* inutilisé 2026-06-13  --cKo_b: #F88; */

    /* Logo */
    /* inutilisé 2026-06-13  --cLogo1: #EBF7E4; */
    /* inutilisé 2026-06-13  --cLogo2: #C6E9AF; */

    --ffBase: 'Noto Sans', Arial, sans-serif;
    --ffMono: 'JetBrainsMono', 'Verdana', monospace;
    /* Police standard de l'écran public (tout ce qui est projeté) — seule source, lue aussi
       par les canvas via policeEcran() (kitPlugin/shared/police.ts). Décision 2026-08-29 :
       Noto Sans seule, pas de Scada ni Montserrat sur ce que voit le public. */
    --ffEcran: 'Noto Sans', sans-serif;
    /* Police des chiffres de l'écran public (tirages, compte à rebours, panneaux à volets) —
       chiffres monolarges garantis aux deux familles, lue par les canvas via policeChiffres().
       Décision 2026-08-29 : remplace 'Courier New' (police machine, absente d'Android/Linux). */
    --ffChiffres: 'Ubuntu Sans', 'Noto Sans', sans-serif;

    /* Il est interdit de rajouter des styles typo sans demander l'accord du PO */
    /* inutilisé 2026-06-13  --fTitre: normal normal 700 32px 'Scada', sans-serif; */
    --fH1: normal normal 700 32px 'Scada', sans-serif;
    --fH2: normal normal 700 24px 'Scada', sans-serif;
    --fH3: normal normal 400 22px 'Scada', sans-serif;
    --fH4: normal normal 400 18px 'Scada', sans-serif;
    /* Titre de l'événement sur l'écran public (.zoneTitreTexte) : police de l'écran, pas Scada.
       La taille est recalée à l'affichage par GestionnaireFondEnTete. Décision chef de projet 2026-09-14. */
    --fTitreEcran: normal normal 700 32px var(--ffEcran);
    --fMenu14: normal normal 400 14px 'Montserrat', sans-serif;
    /* Cran compact de la barre de pilotage (AdaptationBarre.ts) : la barre redéfinit --fMenu14 avec
       celle-ci pour son seul périmètre. Décision du chef de projet 2026-09-03. */
    --fMenu13: normal normal 400 13px 'Montserrat', sans-serif;
    --fCta16: normal normal 700 18px 'Montserrat', sans-serif;
    /* Remise en service le 2026-09-16 (décision chef de projet) : le mono d'un LIBELLÉ, par
       opposition à --fMono24b qui est le mono d'un GROS CHIFFRE (codes d'accès, compteurs).
       Première usagère : l'étiquette d'une scène sur la Vitrine (composants/etiquetteJaime.css).
       Le repli 'Courier New' est une vraie chasse fixe — celui de --ffMono (Verdana) n'en est
       pas une. */
    --fMono16: normal normal 400 16px 'JetBrainsMono', 'Courier New', Courier, monospace;
    /* inutilisé 2026-06-13  --fMono24: normal normal 400 24px 'JetBrainsMono', 'Courier New', Courier, monospace; */
    --fMono24b: normal normal 700 24px 'JetBrainsMono', 'Courier New', Courier, monospace;
    --fCta20: normal normal 700 20px 'Montserrat', sans-serif;
    /* inutilisé 2026-06-13  --fLegend16: normal normal 400 20px 'Scada', sans-serif; */
    --fLight14: italic normal 200 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fMini11: italic normal 200 11px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16: normal normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16Strong: normal normal 700 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fItalic16: italic normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fAlerte16: italic small-caps 700 20px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fLabel: normal normal 400 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;

    --border: 1px solid #dce1ea;
    --borderR0: 3px;
    --borderR1: 5px;
    --borderR2: 7px;
    --borderCarte: 1px solid var(--cNoir4);
    --borderForm: 1px solid var(--cNoir5);
    --borderInput: 1px solid var(--cNoir5);

    /* Espacements — nommés par rôle (comme les bordures), accord PO 2026-07-03.
       Migration progressive : ne remplacer une valeur en dur que si le rôle ET la valeur
       correspondent (no-op visuel) ; aligner une dérive de valeur = décision à part. */
    --gapListe: 32px;   /* entre les éléments d'une liste. La colonne qui borde la liste (ex. panneau de filtres) prend le MÊME gap : deux rythmes différents côte à côte, c'est moche */
    --paddingCorps: 20px;   /* intérieur d'un corps de bloc / panneau / modale */
    --gapDefaut: 8px;       /* espace standard entre éléments frères (flex/grid) */
    --gapReduit: 4px;       /* variante volontairement plus serrée : listes compactes, groupes de boutons */
    --gapMoyen: 12px;    /* espacement intermédiaire entre éléments frères */
    --gapLarge: 20px;    /* espacement généreux entre groupes d'éléments */
    --gapColonnes: 4rem; /* entre deux colonnes de page de nature différente : le texte et son image, le menu et son contenu (décision chef de projet 2026-09-17) */
    --gapBlocs: 10rem;   /* le blanc entre deux blocs empilés d'une même colonne de lecture : l'article, ses questions, ses scénarios ; deux chapitres (décision chef de projet 2026-09-17) */
    --paddingMiniDiv: 8px 16px; /* padding de tout les blocs avec fond colorées */
    --paddingEtiquette: 3px 6px; /* padding des span et autres etiquette */
    --paddingCarte: 16px 20px;   /* intérieur d'une CARTE — son corps comme sa barre d'actions. La carte existe en trois exemplaires jumeaux (blocs.css, ilotScenarios.css, 55_scenariosCompatibles.css) : chacun recopiait le chiffre, ils lisent maintenant la même variable (décision chef de projet 2026-09-07) */
    --paddingCarteEtroit: 12px 20px; /* la même carte en fenêtre étroite, quand la barre d'actions passe sous le corps */
    --paddingCta: 15px 20px;     /* LE grand bouton : pleine largeur, min-width 180px, fonte --fCta16. La silhouette compacte, elle, prend --paddingCta14 (décision chef de projet 2026-09-07) */
    --paddingBadge: 4px 16px;    /* un badge en pilule, posé sur un bloc — pas la petite étiquette inline d'un récap, qui garde --paddingEtiquette */
    --paddingPastille: 6px 14px; /* une pastille NON cliquable : une étape, un état, un filtre posé */
    --paddingInput: 10px 12px;   /* l'intérieur d'un champ de saisie (--borderInput dit sa bordure) */
    --paddingCellule: 8px 16px 8px 0; /* une cellule de tableau : rien à gauche, la colonne commence au texte */
    --paddingCode: 12px 16px;    /* un bloc de code à recopier */
    --paddingLigneListe: 16px 0; /* une ligne LARGE d'une liste — une question qu'on déplie, un état vide. Les lignes ordinaires prennent --gapDefaut 0 */
    --paddingRecap: 10px 14px;   /* le rythme intérieur du récapitulatif de composition (blocs, actions, encadrés) */
    --paddingPage: 30px 40px;    /* l'enveloppe d'une page : .contenu, et les colonnes du bas de page */
    --paddingCarteLarge: 30px 25px; /* une carte qui doit respirer : une offre, une catégorie d'aperçu */
    --paddingRappel: 20px 40px 25px; /* une carte de rappel du compte (.divRappel), et tout bloc posé à côté d'elles sur la même page (.aide, .enAttente) : les titres et les textes tombent à l'aplomb */
    --paddingBandeau: 4rem;      /* le bandeau des aperçus, qui traverse la fenêtre sur grand écran */
    --retraitListeCourt: 20px;   /* le retrait d'un ul de liste courte — récap, progression, ul générique. Le retrait FRANC du rédactionnel est --retraitListe */
    --retraitListe: 40px;        /* le retrait d'un ul rédactionnel — article, chapitre, réponse de FAQ. Ce retrait franc dit que ces lignes sont un bloc à part, et non la suite du paragraphe */

    /* Boutons : un bouton ne choisit NI son padding, NI sa bordure, NI sa couleur
       (décision PO 2026-07-18). Il prend ces variables — ou pas de bordure, ou la
       couleur d'un rôle (primaire, danger, aperçu) — jamais une valeur à lui. */
    --paddingCta14V: 8px;                 /* l'air vertical d'un bouton compact, seul : la barre de pilotage en déduit sa hauteur (_studioIntegree.css) */
    --paddingCta14: var(--paddingCta14V) 16px; /* padding de tout bouton compact (.cta14, .ctaDiscret, toggles) */
    --borderCta: 1px solid var(--cNoir4); /* LA bordure d'un bouton : celle-ci ou aucune */
    --cCtaTexte: var(--cNoir2);         /* LE texte d'un bouton neutre : ce noir ou une couleur de rôle */
}

/* ============================================
   ACCENT — la couleur de l'espace où l'on est. Déclarée sur body, JAMAIS sur html
   ou :root : une variable dérivée (--cAccent_a, --cFormFocusHalo…) se calcule sur
   l'élément où elle est déclarée ; sur html elle figerait le bleu par défaut et la
   classe du body ne changerait plus que les valeurs directes.
   La classe du <body> choisit la teinte ; sans classe : bleu administration.
   Vitrine : baseVitrinePublic.twig pose bodyPageVitrine.
   Studio : studio/base.twig pose modeTester ou modeDiffuser selon l'onglet principal
   (la page se recharge à chaque changement de mode, pas de Turbo).
   Une règle qui a besoin d'Accent au niveau :root doit lire var(--cAccent…) sur
   l'élément concerné, pas déclarer une variable dérivée à la racine.
   ============================================ */

/* Bleu administration : compte, tarifs, données, Studio hors mode, onglet Préparer */
body {
    --cAccent0: #f1f4f8;
    --cAccent1: #e3eef8;
    --cAccent2: #accee8;
    --cAccent3: #436bc1;
    --cAccent4: #335bb1;
    --cAccent_a: linear-gradient(to bottom, var(--cAccent3), var(--cAccent4) 100%);
    --cAccent_ah: linear-gradient(to bottom, var(--cAccent3), var(--cAccent3) 100%);
    --cAccentt: #FFF;

    /* Focus des champs : l'accent, et son halo à 15 % */
    --cFormFocus: var(--cAccent3);
    --cFormFocusHalo: color-mix(in srgb, var(--cAccent3) 15%, transparent);
}

/* Vitrine, pages publiques : vert */
.bodyPageVitrine {
    --cAccent0: #f0f9f4;
    --cAccent1: #dcf2e5;
    --cAccent2: #9fd9b8;
    --cAccent3: #08914c;
    --cAccent4: #075524;
}

/* Studio, onglet Tester : violet */
.modeTester {
    --cAccent0: #f7f1f9;
    --cAccent1: #ecdcf3;
    --cAccent2: #d2a8e0;
    --cAccent3: #9b59b6;
    --cAccent4: #783b92;
}

/* Studio, onglet Diffuser : bleu diffusion */
.modeDiffuser {
    --cAccent0: #f0f6fb;
    --cAccent1: #e0eef8;
    --cAccent2: #a6cdea;
    --cAccent3: #308ed1;
    --cAccent4: #2572a9;
}

/* Bleu administration POSÉ SUR UN ÉLÉMENT, dans un autre espace (décision chef de projet
   2026-09-06) : un geste d'administration au milieu d'une page publique — créer un événement
   depuis la page d'une scène ou la page Configurer d'un scénario — se dit en bleu, pas dans
   la couleur de la page. Mêmes cinq valeurs que le body sans classe : c'est le même espace,
   ramené sur l'élément qui le porte (le bouton lui-même, pas sa barre : les voisins gardent
   la couleur de la page). Une règle qui lit var(--cAccent…) sur cet élément voit le bleu. */
.accentAdministration {
    --cAccent0: #f1f4f8;
    --cAccent1: #e3eef8;
    --cAccent2: #accee8;
    --cAccent3: #436bc1;
    --cAccent4: #335bb1;
}

/* ============================================
   TITRES ET TYPOGRAPHIE
   ============================================ */

h1, h2, h3 {
    color: var(--cNoir1);
}

h4 {
    color: var(--cNoir2);
}

h5, h6 {
    color: var(--cNoir3);
}

p, li {
    color: var(--cNoir2);
}

h1, h2, h3, h4, h5, h6 {
    font: var(--fH1);
}

button {
    font: var(--fCta16);
}

h1 {
    font: var(--fH1);
    margin: 10px 15px 5px 0;
    padding: 0;
}

h2 {
    font: var(--fH2);
    margin: 15px 10px 5px 0;
    padding: 0;
}

h3 {
    font: var(--fH3);
    padding: 0;
    margin: 25px 0 15px;
}

h4, h5 {
    font: var(--fH4);
}

h4, h5, h6 {
    margin: 25px 0 7px;
}

/* <i> est utilisée comme balise de suffixe (#2, #3…) sur les noms d'éléments.
   La balise <em> remplace <i> pour l'italique sémantique. */
i {
    display: inline-block;
    font-size: 75%;
    font-weight: 700;
    font-style: italic;
    font-family: var(--ffMono);
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/30_base.css ***!
  \*********************************************************************************************************************/
/* inutilisé 2026-06-13
#divBody {
    max-width: 920px;
    margin: 0 auto;
    padding: 10px;
}
*/

.contenu {
    padding: 10px 40px;
}

.zoneFlash {
    max-width: 1155px;
    margin: 0 auto 20px;
    min-height: 38px; /* Hauteur d'un message flash (padding 12px * 2 + font 14px) */
}

/* Le message se détache sous le haut de page : centré, à la largeur de son texte, posé en
   ombre (décision chef de projet 2026-09-14). max-width : un message long revient à la ligne
   sur téléphone au lieu de déborder de l'écran. */
.zoneFlash .alertSucces,
.zoneFlash .alertErreur {
    margin: 20px auto 0;
    width: max-content;
    max-width: 100%;
    box-shadow: var(--ombrePortee);
}

/* Box de rappel (lecture seule) */
.divRappel {
    background: var(--cBlanc);
    border-left: var(--border);
    border-right: var(--border);
    padding: var(--paddingRappel);
    width: 335px;
    margin: 0;
}

/* L'aide masquable (composants/aide.css) prend le titre d'une carte : elle se pose à côté d'elles. */
.divRappel h3,
.aide h3 {
    padding: 0;
    margin: 0 0 var(--gapLarge) 0;
}

/* CTA dans les blocs divRappel : taille contenu, aligné à gauche */
.divRappel .ctaValider,
.divRappel .ctaSecondaire {
    width: fit-content;
    height: auto;
    text-align: left;
    justify-content: flex-start;
}

@media (max-width: 800px) {
    .contenu {
        padding: 10px 20px;
    }
}

/* inutilisé 2026-06-13
.divCentre {
    text-align: center;
    margin: 0 auto;
    max-width: 1200px;
    padding: 20px;
}
*/

body {
    font: var(--fText16);
    overflow-x: hidden;
    width: 100%;
    margin: 0;
    padding: 0;
    color: var(--cNoir1);
    background-color: var(--cBackground);
}

#bodyPage {
    max-width: 1280px;
    margin: 10px auto;
}

/* inutilisé 2026-06-13
.marge2 {
    margin: 5px auto;
    padding: 0 20px;
}
*/

@media all and (min-width: 750px) {
    /* inutilisé 2026-06-13
    .marge2 {
        margin: 10px auto;
        padding: 0 20px;
    }
    */
}

/* inutilisé 2026-06-13
#centrePage {
    max-width: 1440px;
    margin: 0 auto;
    width: 100%;
}

#divPage {
    margin: 25px 10px 50px;
    min-height: 25vh;
}

#quiSuisJe {
    display: flex;
    justify-content: space-between;
    flex-direction: row;
    font: var(--fLight14);
}
#quiSuisJeLogout {
    display: flex;
    align-items: center;
    gap: 6px;
    opacity: .7;
}

#quiSuisJeLogout:hover {
    background: transparent;
    color: var(--cAccent3);
    opacity: 1;
}
*/
/* inutilisé 2026-06-13
#divHeader {
    display: flex;
    align-items: center;
    justify-content: space-between;

}
*/
/* Liste à puces : le reset (00_reset.css) retire les puces de tout ul ; une liste qui doit
   les montrer le demande avec cette classe (décision chef de projet 2026-09-14) */
ul.listePuces {
    list-style-type: disc;
    padding-inline-start: var(--retraitListeCourt);
}

/*!********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/31_cta.css ***!
  \********************************************************************************************************************/
button {
    user-select: none;
    -webkit-user-select: none;
    display: inline-block;
    cursor: pointer;
    margin: 0;
    color: var(--cAccent3);
    font: var(--fCta16);
    text-decoration: none;
}

button.ctaAnnuler {
    font: var(--fText16);
    color: var(--cAccent3);
    background: transparent;
    border: transparent;
    text-decoration: none;
}

/* button.lienBouton : un <button> qui a le visuel d'un lien (templates/CLAUDE.md, « Bouton
   ou lien ? ») — il prend exactement le style de a (décision chef de projet 2026-09-14) */
a,
button.lienBouton {
    color: var(--cAccent3);
    display: inline-block;
    text-decoration: none;
    padding: var(--gapReduit) 0;
}

button.lienBouton {
    font: var(--fText16);
    background: none;
    border: none;
}

a:focus,
button.lienBouton:focus {
    outline: none;
}

a:focus-visible,
button.lienBouton:focus-visible {
    box-shadow: 0 0 0 3px var(--cFormFocus);
}


button.ctaAnnuler,
a.ctaAnnuler {
    text-decoration: none;
    display: block;
    margin: 20px 0;
    padding: 0;
    color: var(--cNoir3);
}

button.btn, a.btn {
    min-width: 180px;
    cursor: pointer;
    border: 0;
    color: var(--cAccentt);
    background-color: var(--cAccent3);
    font: var(--fCta16);
    text-align: center;
    transition: all 0.3s;
    position: relative;
    padding: var(--paddingCta);
    margin: 10px 0;
    border-radius: var(--borderR1);
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    text-decoration: none;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

a.btn:hover, button.btn:hover {
    color: var(--cAccentt);
    background-color: var(--cAccent4);

}

/* inutilisé 2026-06-13
button.btn2, a.btn2 {
    min-width: 100px;
    display: block;
    cursor: pointer;
    border: 0;
    font: var(--fCta20);
    padding: 20px 40px;
    margin: 20px auto;
    text-align: center;
    transition: all 0.3s;
    color: var(--cTexte1);
    position: relative;
    background-repeat: round;
    width: fit-content;
    border-radius: 12px;
}

button#redirection.btn2 {
    background-color: transparent;
}

button#redirection.btn2:hover,
a.btn2:hover, button.btn2:hover {
    color: var(--cAccentt);
    background-color: var(--cAccent4);
}
*/

/* ============================================
   CTA COMPACT — socle .cta14

   LA silhouette des boutons d'action compacts (barres d'action, cartes) :
   forme, police, dimensions définies ici et nulle part ailleurs. Modèle :
   le bouton de la barre de contrôle aperçu (décision PO 2026-07-18).
   Se pose à côté du rôle qui apporte sa couleur : class="cta14 ctaPreviewControle".
   14 = la taille de police (--fMenu14). Silhouette formulaire à venir : .cta18.
   ============================================ */

.cta14 {
    display: inline-block; /* un <a> hors barre flex reste un bouton (padding vertical réel) */
    padding: var(--paddingCta14);
    font: var(--fMenu14);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
    /* Un bouton n'est jamais souligné, quelle que soit sa balise : la Vitrine souligne tous
       ses liens (vitrine.css, décision PO 2026-08-25), un <a class="cta14"> y était souligné
       comme un lien de paragraphe (décision chef de projet 2026-09-06). */
    text-decoration: none;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

/* La silhouette compacte GAGNE sur un rôle qui porte aussi une silhouette : la page des
   tarifs de la Vitrine redéfinit .ctaOr en grand bouton de carte (offres.css : display block,
   grand padding, police 16), ce qui écrasait « cta14 ctaOr » — le petit bouton doré qui mène
   à l'offre du dessus (page « Mon studio », scènes réservées à une offre : décision chef de
   projet 2026-10-07). Même composition que « cta14 ctaPrimaire », même taille. */
.cta14.ctaOr {
    display: inline-block;
    width: auto;
    margin: 0;
    padding: var(--paddingCta14);
    font: var(--fMenu14);
    text-align: left;
    /* LE JAUNE PÂLE DU PETIT BOUTON (décision chef de projet 2026-10-08) : le jaune plein
       d'Amazon (--cOr3) est fait pour les gros boutons et l'onglet « Tarifs » ; sur un petit
       bouton posé dans une page aux tons neutres et pastel, il prenait le dessus sur tout le
       reste. Fond pâle (--cOr1), et une bordure jaune pour qu'on le voie comme un bouton et
       comme du jaune : c'est elle, plus que le fond, qui le détache de la page. Même épaisseur
       que les autres boutons (--borderCta), seule la couleur change. */
    background: var(--cOr1);
    border: var(--borderCta);
    border-color: var(--cOr3);
}

.cta14.ctaOr:hover {
    background: var(--cOr2);
    border-color: var(--cOr4);
}

/* LE PETIT BOUTON EN JAUNE PLEIN (décision chef de projet 2026-10-14) : la même silhouette
   compacte, les couleurs du gros bouton des tarifs (.ctaOr). Pour le bouton qui est SEUL et
   doit se voir : « Mon studio », la limite d'événements atteinte du Studio. Là où il revient
   souvent (vignettes, listes de scénarios, page d'une scène), le jaune pâle reste. */
.cta14.ctaOr.ctaOrPlein {
    background: var(--cOr3);
    border-color: var(--cOr3);
    color: var(--cOrt);
}

.cta14.ctaOr.ctaOrPlein:hover {
    background: var(--cOr4);
    border-color: var(--cOr4);
}

.cta14:disabled {
    opacity: 0.4;
    cursor: auto;
}

/* Rôle action principale : LE bouton qui fait la chose pour laquelle la page existe
   (créer un événement…), en Accent — la couleur de l'espace, ou celle qu'un
   .accentAdministration pose sur lui. Un seul rôle, défini ici et nulle part ailleurs
   (décision chef de projet 2026-09-06) : pas de CSS par bouton. */
.ctaPrimaire {
    background: var(--cAccent3);
    color: var(--cAccentt);
}

.ctaPrimaire:hover {
    background: var(--cAccent4);
    color: var(--cAccentt);
}

/* Rôle offre : LE bouton qui mène aux offres et aux tarifs — Or, la couleur du prix et de
   l'inscription (couleurs.md). L'encadré « limite d'événements » du Studio. */
.ctaOr {
    background: var(--cOr3);
    color: var(--cOrt);
}

.ctaOr:hover {
    background: var(--cOr4);
    color: var(--cOrt);
}

/* Rôle aperçu : LE bouton qui lance un aperçu — violet aperçu, partout
   (catalogue, page Modifier, fiches d'animation). Un aperçu = violet,
   décision PO 2026-07-18. */
.ctaPreview {
    background: var(--cAccent_a);
    color: var(--cBlanc);
}

.ctaPreview:hover {
    background: var(--cAccent_ah);
}

/* ============================================
   BADGE MODE TEST - Réutilisable partout
   ============================================ */

.badgeModeTest {
    display: inline-block;
    padding: var(--paddingBadge);
    font: var(--fLabel);
    color: var(--cBlanc);
    background: var(--cAccent3);
    border-radius: 10px;
    margin: 10px 0;
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/42_auth.css ***!
  \*********************************************************************************************************************/
/* ==========================================================================
   Pages d'authentification (login, register, inscription)
   ========================================================================== */

.authForm {
    padding: 40px 20px 20px;
    display: flex;
    justify-content: center;
}

/* L'encadré et ce qui se pose SOUS lui, empilés et centrés (décision chef de projet
   2026-09-12). `.authForm` juste au-dessus est une RANGÉE : un second enfant s'y placerait à
   côté de la boîte, pas dessous. D'où cette colonne intermédiaire.
   Posée par la brique noyau/_/_boiteFormulaire.twig autour de chaque boîte ; les règles vivent
   ici parce que c'est le CSS des pages d'authentification, et le seul que ces pages chargent
   (entrée webpack `noyau`). */
.authColonne {
    display: flex;
    flex-direction: column;
    align-items: center;
}

/* LA SORTIE, sous l'encadré blanc et centrée dessous : ces pages n'ont ni menu ni pied de
   page, sans elle on ne peut plus repartir. Marge courte — détachée de la boîte, mais assez
   proche pour se voir sans la chercher. */
.authRetourAccueil {
    margin: 16px 0 0;
    text-align: center;
    font: var(--fText16);
}

/* La phrase qui dit pourquoi on est là, quand on arrive du parcours « créer un événement ».
   Un paragraphe, pas un bandeau : rien n'a réussi, il reste une étape à franchir. */
.entreePourCreer {
    font: var(--fText16);
    text-align: center;
    margin: 0 0 20px;
}

/* Box de connexion / inscription */
.boxCenterForm {
    background: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR2);
    padding: 30px 40px 40px;
    /* Une largeur fixe, pas un pourcentage : le parent (.authColonne) prend la largeur de son
       contenu, et 95 % de lui faisaient varier la boîte selon l'étape et la langue. Sur
       téléphone, l'écran moins les 2 × 20 px de .authForm. */
    width: min(400px, 100vw - 40px);
    box-shadow: 0 2px 10px var(--cOmbre);
    margin: 0;
}

.boxCenterForm h3 {
    padding: 0;
    margin: 0 0 20px 0;
    text-align: center;
}

/* inutilisé 2026-06-13
.boxCenterForm .sousTitre {
    font: var(--fLight14);
    text-align: center;
    margin: 0 0 20px 0;
}
*/

form > div {
    margin-bottom: 15px;
}

.boxCenterForm .ctaValider {
    margin-top: 5px;
}

/* Actions du formulaire (valider + annuler) */
.formActions {
    margin-top: 10px;
}

/* inutilisé 2026-06-13
.formActionsFlex {
    margin-top: 10px;
}

@media (min-width: 500px) {
    .formActionsFlex {
        display: flex;
        flex-direction: row-reverse;
        gap: 15px;
    }

    .formActionsFlex .ctaValider,
    .formActionsFlex .ctaSecondaire {
        width: auto;
        flex: 0 1 auto;
    }
}
*/

/* Alertes */
.alertErreur,
.alertErreurOAuth,
.alertSucces {
    background: var(--cRouge4);
    color: var(--cBlanc);
    padding: var(--paddingMiniDiv);
    margin-bottom: 20px;
    font: var(--fText16);
}

/* Message d'erreur inline OAuth */
.alertErreurOAuth {
    margin-top: 10px;
}

.alertSucces {
    background: var(--cSucces0);
    border: 1px solid var(--cSucces3);
    color: var(--cSucces4);
}

/* Lien vers autre page auth */
/* inutilisé 2026-06-13
.lienAuth {
    text-align: center;
    margin-top: 25px;
    padding-top: 20px;
    border-top: var(--border);
    font: var(--fLight14);
    font-style: normal;
}

.lienAuth a {
    color: var(--cAccent3);
}

.lienAuth a:hover {
    color: var(--cBlanc);
    background: var(--cAccent4);
}
*/

/* Séparateur OAuth */
.boxCenterForm hr {
    margin: 50px 0;
    border: none;
    border-top: var(--border);
}

/* Séparateur avec espace blanc */
hr.separateur {
    margin: 30px 0;
    border: none;
    border-top: var(--border);
}

/* Petit trait (hr.mini) dans la boîte : il garde sa marge réduite, que la règle du séparateur
   OAuth (.boxCenterForm hr, 50px) écraserait. Il sépare les notes du formulaire. */
.boxCenterForm hr.mini {
    margin: 20px 0 0;
}

/* Bouton OAuth */
.btnOAuth {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    width: 100%;
    padding: 8px 12px;
    border: 1px solid var(--cNoir1);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    color: var(--cNoir1);
    font: var(--fCta16);
    text-align: left;
    cursor: pointer;
    transition: all 0.2s;
}

.btnOAuth:hover {
    background: var(--cAccent0);
    color: var(--cNoir1);
}

.btnOAuth svg {
    width: 40px;
    height: 40px;
}

/* État de chargement du formulaire */
.formEnChargement {
    pointer-events: none;
}

.formEnChargement input,
.formEnChargement select,
.formEnChargement textarea,
.formEnChargement label {
    opacity: 0.5;
}


/* Notes d'un formulaire, à la façon de Wikipédia : le libellé d'une case porte un « ¹ » en
   exposant, sans lien, et le document se lit dans la note sous le formulaire. Aucun lien dans
   le libellé : cliquer sur la case ne doit pas risquer d'ouvrir un document à la place
   (décision chef de projet 2026-10-15). */
.notesFormulaire {
    margin: var(--gapDefaut) 0 0;
    padding: 0 0 0 1.4em;
    font: var(--fText16);
    color: var(--cNoir2);
}

.notesFormulaire li {
    margin: 4px 0;
}

/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/hautDePageCompte.css ***!
  \******************************************************************************************************************************/
/* ============================================
   HAUT DE PAGE COMPTE
   Header simplifié pour l'espace compte Vitrine
   Logo gauche, menu droite
   ============================================ */

#hautDePageCompte {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 42px;
    padding: 0 40px;
    border-bottom: var(--border);
}

/* ============================================
   LOGO À GAUCHE
   ============================================ */

#hautDePageCompte .headerLogo {
    flex-shrink: 0;
    display: flex;
    align-items: center;
}

#hautDePageCompte .headerLogo a {
    display: flex;
    align-items: center;
}

#hautDePageCompte .headerLogo svg {
    height: 28px;
    aspect-ratio: 245 / 36;
}

/* ============================================
   NAVIGATION COMPTE À DROITE
   ============================================ */

#headerNavCompte {
    display: flex;
    align-items: center;
}

#headerNavCompte ul {
    display: flex;
    list-style: none;
    align-items: center;
    margin: 0;
    padding: 0;
    gap: var(--gapDefaut);
}

#headerNavCompte ul li a {
    text-decoration: none;
    font: var(--fMenu14);
    color: var(--cAccent3);
    padding: 8px 16px;
    border-radius: var(--borderR1);
    transition: all 0.2s ease;
    display: block;
}

#headerNavCompte ul li a:hover,
#headerNavCompte ul li a.active {
    background-color: var(--cAccent3);
    color: var(--cAccentt);
}

/* ============================================
   RESPONSIVE - MOBILE < 600px
   ============================================ */

@media (max-width: 600px) {
    #hautDePageCompte {
        padding: 0 16px;
        justify-content: flex-end;
    }

    #hautDePageCompte .headerLogo {
        display: none;
    }
}

@media (max-width: 400px) {
    #headerNavCompte ul li a {
        padding: 8px 12px;
        font-size: 13px;
    }
}

/*!*****************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/53_blocs.css ***!
  \*****************************************************************************************************************************/
/* ============================================
   BLOCS - Composant générique Studio
   ============================================

   ⚠️ Un SOUS-ENSEMBLE « carte » de ce composant est copié dans
   studioVitrine/assets/vitrine/css/blocs.css (partie .bloc / .blocCorps /
   .blocTitre / .blocTexte / .blocActions uniquement, pour la liste des
   scénarios d'aperçu). Si tu modifies l'une de ces règles ici → demander au PO
   s'il faut la répercuter sur la copie vitrine. Le reste du composant (stats,
   compteur, réordonnancement, formulaires) est propre au studio.

   Composant unifié pour tous les blocs de type :
   Icône | Contenu | Actions

   Structure HTML :
   <div class="bloc blocGroupe">  ← blocGroupe conservé pour TS
       <div class="blocIcone">...</div>
       <div class="blocCorps">
           <h4 class="blocTitre">...</h4>
           <p class="blocTexte">...</p>
       </div>
       <div class="blocActions">...</div>
   </div>

   LE conteneur de contenu Studio (décision PO 2026-07-18) : toute boîte
   « titre + texte + actions » adopte ce composant — cartes du catalogue de
   scénarios, blocs de la page Modifier, blocs d'onglet. Zones optionnelles ;
   les contextes n'apportent que des modificateurs (couleur, largeur).

   Modificateurs de catégorie (couleurs d'icône) :
   - .blocGroupes (ou .blocGroupe pour compat TS)
   - .blocDistributions
   - .blocTelecharger
   - .blocGroupe (mode test, compat TS)

   ============================================ */

/* ══════════════════════════════════════
   CONTENEUR PRINCIPAL
   ══════════════════════════════════════ */

.bloc {
    display: flex;
    align-items: stretch;
    max-width: 600px;
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
    overflow: hidden;
    transition: box-shadow 0.2s;
}

/* ══════════════════════════════════════
   ZONE ICÔNE (wrapper uniquement)
   Le style des img/svg et les couleurs de fond
   par catégorie sont centralisés dans 54_icones.css
   ══════════════════════════════════════ */

.blocIcone {
    display: flex;
    justify-content: flex-start;
    padding: 0 4px 0 0;
}

/* ══════════════════════════════════════
   ZONE CONTENU
   ══════════════════════════════════════ */

.blocCorps {
    flex: 1;
    /* 16/18 et pas 16/20 (décision PO 2026-08-14) : le corps porte maintenant une
       illustration, et un écart de 4px entre marge haute et marges latérales se voit
       immédiatement autour d'une image. 2px passent, 4 non. */
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

.blocTitre {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0;
}

.blocTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 0;
}

/* inutilisé 2026-06-13
.blocSousTitre {
    font: var(--fMenu14);
    color: var(--cNoir3);
}
*/

/* ══════════════════════════════════════
   ZONE ACTIONS
   ══════════════════════════════════════ */

.blocActions {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    gap: var(--gapDefaut);
    padding: 16px 20px;
    border-left: var(--border);
    min-width: 240px;
}

.blocActions .toggleAvecLabel {
    justify-content: space-between;
}

/* ══════════════════════════════════════
   STATS (nombre + label)
   ══════════════════════════════════════ */

.blocStats {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
    margin-top: 4px;
}

.blocNombre {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

.blocLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Le total des inscriptions en direct (en tête de l'onglet Participants de Diffuser) : « / 500 », la
   limite de l'offre ; alerte dès 90 %, places offertes au-delà (ParticipantService::etatLimiteInscriptionsEnDirect). */
.blocLimite {
    font: var(--fMono24b);
    color: var(--cNoir4);
}

.blocNombreAlerte,
.compteurGlobalValeur.blocNombreAlerte {
    color: var(--cOr4);
}

.blocNombreOffert,
.compteurGlobalValeur.blocNombreOffert,
.blocPlacesOffertes {
    color: var(--cRouge3);
}

.blocPlacesOffertes {
    font: var(--fText16);
}

/* ══════════════════════════════════════
   COMPTEUR (gros chiffre avec séparateur)
   ══════════════════════════════════════ */

.blocCompteur {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
}

.compteurValeur {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

.compteurReste {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
}

/* display:flex écraserait l'attribut hidden → on le rétablit explicitement. */
.compteurReste[hidden] {
    display: none;
}

.compteurSeparateur {
    font: var(--fH3);
    color: var(--cNoir4);
}

.compteurLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* ══════════════════════════════════════
   DATE / INFO SECONDAIRE
   ══════════════════════════════════════ */

.blocDate /*, .blocTest (inutilisé 2026-06-13) */, .blocReferences {
    font: var(--fLight14);
    color: var(--cNoir1);
    margin-top: auto;
}

/* Infos secondaires empilées en bas de carte : seule la première prend l'espace libre */
.blocReferences + .blocReferences,
.blocReferences + .blocDate {
    margin-top: 0;
}

/* inutilisé 2026-06-13
.blocTest {
    color: var(--cAccent3);
}
*/

/* ══════════════════════════════════════
   LISTE D'ITEMS (lots)
   ══════════════════════════════════════ */

.blocListe {
    list-style: none;
    margin: 12px 0 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
}

.blocItem {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 8px 12px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
}

.blocItemImage {
    width: 32px;
    height: 32px;
    object-fit: cover;
    border-radius: var(--borderR1);
}

.blocItemLabel {
    flex: 1;
    font: var(--fText16);
    color: var(--cNoir1);
}

.blocItemStock {
    font: var(--fText16);
    color: var(--cNoir1);
}

.panneauFormulaire form > div.blocVertical,
.sectionFormulaire > div.blocVertical {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 15px 0;
    margin: 30px 20px 30px;
    border-top: var(--border);
}

/* Dans une section canonique, le retrait horizontal est porté par la section elle-même */
.sectionFormulaire > div.blocVertical {
    margin: 15px 0 12px;
}

/* Un groupe showIf prolonge le champ qui le commande, déclaré juste avant lui dans form.json
   (loi de proximité, chef de projet 2026-09-27) : ni trait ni marge de bloc, il se colle sous
   ce champ, et l'espace ordinaire revient après lui. */
.sectionFormulaire > :not(.blocVertical):has(+ div.blocVertical[data-show-if-field]) {
    margin-bottom: var(--gapDefaut);
}

.sectionFormulaire > div.blocVertical[data-show-if-field] {
    margin: 0 0 var(--gapLarge);
    padding: 0;
    border-top: none;
}

.sectionFormulaire > div.blocVertical[data-show-if-field]:last-child {
    margin-bottom: 0;
}

/* Dans une section où une case fait apparaître des réglages, un trait sépare les blocs, pour
   montrer ce qui va ensemble : un bloc est un champ, avec le groupe showIf collé sous lui
   (chef de projet 2026-09-27). */
.sectionFormulaire:has(> [data-show-if-field]) > div:not([data-show-if-field]) ~ div:not([data-show-if-field]) {
    border-top: var(--border);
    padding-top: var(--gapMoyen);
}

/* ══════════════════════════════════════
   RÉORDONNANCEMENT (poignée + flèches)
   ══════════════════════════════════════ */

.listeOrdrePoignee {
    width: 14px;
    color: var(--cNoir4);
    cursor: grab;
}

.listeOrdrePoignee:active {
    cursor: grabbing;
}

.divActionClasser {
    display: flex;
    gap: var(--gapReduit);
    margin-left: auto;
}

/* Petit bouton icône compact (flèches, +/−, etc.) */
.miniAction {
    background: none;
    border: var(--border);
    border-radius: var(--borderR1);
    cursor: pointer;
    padding: 2px 8px;
    font: var(--fLabel);
    color: var(--cNoir1);
}

.miniAction:disabled {
    opacity: 0.3;
    cursor: default;
}

.miniAction:not(:disabled):hover {
    background: var(--cBlanc02);
}

.listeOrdreItem.dragging {
    opacity: 0.3;
}

/* ══════════════════════════════════════
   RESPONSIVE
   ══════════════════════════════════════ */

@media (max-width: 600px) {
    .bloc {
        flex-direction: column;
    }

    .blocActions {
        flex-direction: column;
        align-items: flex-end;
        border-left: none;
        border-top: var(--border);
        padding: 12px 20px;
    }
}

/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/54_icones.css ***!
  \******************************************************************************************************************************/
/* ============================================
   ICÔNES - Styles pour les briques et les blocs
   ============================================

   Ce fichier centralise le style visuel des icônes
   utilisées à la fois dans :
   - les briques du menu d'ajout (.briqueIcone sur img/svg)
   - les blocs de résumé (img/svg dans .blocIcone)

   Le wrapper .blocIcone lui-même (flex, padding) reste
   dans 53_blocs.css car c'est de la structure de composant.

   ============================================ */

/* DEUX tailles d'icône de scène dans tout le projet, mesurées sur le DESSIN, jamais sur la
   case (décision chef de projet 2026-09-16) : 52px — les tuiles du scénario, l'affichage
   le plus fréquent, et tout ce qui est petit — ou 64px — carrousel de composition, page de
   scène, icône de scénario, récapitulatif, boîte de passage. La case ajoute son air et son
   fond AUTOUR de ces 52 ou 64, jamais dedans : case 64 et 6px d'air = dessin 52. */
.briqueIcone,
.blocIcone img,
.blocIcone svg {
    width: 64px;
    height: 64px;
    padding: 6px;
    object-fit: contain;
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

/* ============================================
   FONDS PAR CATÉGORIE
   ============================================ */

.briqueGroupes .briqueIcone,
.blocGroupe .blocIcone img,
.blocGroupe .blocIcone svg,
.blocTelecharger .blocIcone img,
.blocTelecharger .blocIcone svg { background: var(--cAccent1); }

.briqueDistributions .briqueIcone,
.blocDistribution .blocIcone img,
.blocDistribution .blocIcone svg { background: var(--cAccent1); }

.briqueConfigurations .briqueIcone,
.briqueConfig .briqueIcone { background: var(--cAccent1); }

.briqueScenes .briqueIcone { background: var(--cAccent1); }

.briqueAffichages .briqueIcone { background: var(--cAccent1); }

/* ============================================
   ICÔNE D'UN SCÉNARIO
   ============================================

   Toujours à DROITE, et SANS fond (décision PO 2026-07-31) : les fonds ci-dessus
   codent une catégorie de brique, un scénario n'en a aucune.

   Le SVG est inliné (iconeScenario), pas en <img> : scenarios/{dossier}/icone.svg
   est hors public/. 64px de dessin, la grande des deux tailles du projet (ci-dessus).
   ============================================ */

.scenarioIcone {
    flex: 0 0 auto;
    align-self: flex-start;
    margin-left: auto;
    width: 64px;
    height: 64px;
    box-sizing: border-box;
}

.scenarioIcone svg {
    display: block;
    width: 100%;
    height: 100%;
}

/* Dans une carte du catalogue, l'icône se cale sur le padding du corps du bloc. */
.creerScenarioCarte .scenarioIcone {
    margin: 16px 20px 16px auto;
}

/* Page d'un scénario : description à gauche, icône à droite. */
.scenarioEntete {
    display: flex;
    align-items: flex-start;
    gap: var(--gapDefaut);
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/55_sidebarEvenement.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   SIDEBAR GESTION ÉVÉNEMENT
   ============================================ */

/* inutilisé 2026-06-13
#gestionEvenement {
    display: flex;
    min-height: calc(100vh - 60px);
}
*/

/* ============================================
   SIDEBAR
   ============================================ */

/* inutilisé 2026-06-13
#sidebarEvenement {
    width: 200px;
    min-width: 200px;
    background: var(--cBlanc02);
    border-right: var(--border);
    display: flex;
    flex-direction: column;
}

#sidebarEntete {
    padding: 20px 15px;
    border-bottom: var(--border);
}

#ctaSidebarRetour {
    font: var(--fMenu14);
    color: var(--cAccent3);
    display: block;
    margin-bottom: 10px;
}

#ctaSidebarRetour:hover {
    color: var(--cAccent4);
}

#sidebarTitre {
    font: var(--fH3);
    color: var(--cNoir1);
    margin: 0;
    word-break: break-word;
}
*/

/* ============================================
   MENU SIDEBAR
   ============================================ */

/* inutilisé 2026-06-13
#sidebarMenu {
    list-style: none;
    margin: 0;
    padding: 15px 0;
}

#sidebarMenu li {
    margin: 0;
}

#sidebarMenu a {
    display: block;
    padding: 12px 20px;
    font: var(--fMenu14);
    color: var(--cNoir2);
    border-left: 3px solid transparent;
    transition: background 0.15s, border-color 0.15s;
}

#sidebarMenu a:hover {
    background: var(--cBlanc03);
}

#sidebarMenu a.active {
    background: var(--cBlanc1);
    border-left-color: var(--cAccent3);
    color: var(--cAccent3);
    font-weight: 700;
}
*/

/* ============================================
   CONTENU PRINCIPAL
   ============================================ */

/* inutilisé 2026-06-13
#gestionContenu {
    flex: 1;
    padding: 30px 40px;
    background: var(--cBlanc1);
    overflow-y: auto;
}
*/

/* ============================================
   BLOC COULEURS (formulaire création)
   ============================================ */

.titreEvenement {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

/* Action de l'en-tête (engrenage config ou croix de fermeture) poussée tout à droite. */
.titreEvenementAction {
    margin-left: auto;
}

.btnConfigOnglets {
    display: inline-flex;
    width: 22px;
    height: 22px;
    color: var(--cNoir4);
    transition: color 0.2s;
}

.btnConfigOnglets:hover {
    color: var(--cNoir1);
}

.blocOnglets {
    margin: 15px 0;
}

/* Titre sans icône : padding explicite */
.titreFormulaireSansIcone {
    padding: 12px 20px;
}

.blocOngletsEntrees .svgCb {
    color: var(--cAccent1);
}

.blocOngletsExtras .svgCb {
    color: var(--cAccent1);
}

.blocCouleurs {
    margin: 15px 0;
}

.blocCouleurs > label {
    display: block;
    font: var(--fLabel);
    color: var(--cNoir3);
    margin-bottom: 8px;
}

.contenuCouleurs {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge);
    align-items: flex-start;
}

.ligneCouleurs {
    display: flex;
    gap: var(--gapLarge);
}

.champCouleur {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--gapReduit);
}

.champCouleur input[type="color"] {
    width: 50px;
    height: 40px;
}

.champCouleur span {
    font: var(--fLight14);
    color: var(--cNoir4);
}

/* Aperçu Configuration Fond */
#previsualisationConfigFond {
    min-height: 200px;
    margin: 20px;
    padding: var(--paddingCorps);
    background-color: var(--cBlanc03);
    background-size: cover;
    background-position: center;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
    align-items: center;
    justify-content: center;
}

/* Le titre d'en-tête se pose À MÊME le fond, hors de la carte : seul texte de l'écran dans ce
   cas, et donc seul concerné par la couleur réglée sous l'image. Sa couleur est en style inline
   (elle vient du sélecteur, pas d'une variable de la palette). */
#previsualisationTitreSurFond {
    font: var(--fH3);
    margin: 0;
    text-align: center;
}

#previsualisationConfigFondCarte {
    padding: 20px 28px;
    border-radius: var(--borderR1);
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
    min-width: 200px;
    transition: background-color 0.3s ease, background 0.3s ease, border 0.3s ease, box-shadow 0.3s ease;
}

#previsualisationTitreFond {
    font: var(--fH3);
    margin: 0;
}

#previsualisationTexteFond {
    font: var(--fText16);
    margin: 0;
}

/* ============================================
   ENTÊTE SECTION (bouton ajouter)
   ============================================ */

/* inutilisé 2026-06-13
.enteteSection {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: var(--gapLarge);
    margin-bottom: 20px;
}

.enteteSection h1 {
    margin: 0 0 5px;
}

.enteteSection p {
    margin: 0;
    color: var(--cNoir4);
}

.compteur {
    font: var(--fLight14);
    color: var(--cNoir4);
    margin: 0 0 20px;
}
*/

/* ============================================
   TABLE DE GESTION
   ============================================ */

/* inutilisé 2026-06-13
.tableGestion {
    width: 100%;
    border-collapse: collapse;
    background: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR1);
}

.tableGestion th,
.tableGestion td {
    padding: 12px 15px;
    text-align: left;
    border-bottom: var(--border);
}

.tableGestion th {
    font: var(--fMenu14);
    color: var(--cNoir3);
    background: var(--cBlanc02);
}

.tableGestion tbody tr:last-child td {
    border-bottom: none;
}

.tableGestion tbody tr:hover {
    background: var(--cBlanc02);
}

.tableGestion .colActions {
    width: 100px;
    text-align: center;
}

.tableGestion .colNombre {
    width: 100px;
    text-align: center;
}

.tableGestion .epuise {
    color: var(--cRouge3);
    font-weight: 700;
}
*/

/* Boutons icônes */
/* inutilisé 2026-06-13
.btnIcone {
    background: none;
    border: none;
    padding: 6px;
    cursor: pointer;
    color: var(--cNoir4);
    border-radius: var(--borderR1);
    transition: background 0.15s, color 0.15s;
}

.btnIcone:hover {
    background: var(--cBlanc03);
    color: var(--cNoir1);
}

.btnIcone svg {
    width: 18px;
    height: 18px;
    display: block;
}
*/

/* ============================================
   MODALE (dialog)
   ============================================ */

dialog {
    border: none;
    border-radius: var(--borderR2);
    box-shadow: 0 10px 40px var(--cOmbreForte);
    padding: 0;
    /* Pas de taille sur le sélecteur d'élément : elle contraindrait TOUS les
       <dialog> (la surcouche aperçu 16/9 du noyau y est passée). La taille est
       portée « en plus » par la classe de chaque modale — .modale : 500px
       (décision PO 2026-07-18). */
}

dialog::backdrop {
    background: var(--cOverlay);
}

dialog form {
    padding: 25px;
}

dialog h3 {
    margin: 0 0 20px;
    font: var(--fH3);
}

/* inutilisé 2026-06-13
.champFormulaire {
    margin-bottom: 15px;
}

.champFormulaire label {
    display: block;
    font: var(--fMenu14);
    color: var(--cNoir3);
    margin-bottom: 5px;
}

.champFormulaire input,
.champFormulaire textarea {
    width: 100%;
    padding: 10px 12px;
    font: var(--fText16);
    border: var(--border);
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

.champFormulaire input:focus,
.champFormulaire textarea:focus {
    outline: none;
    border-color: var(--cAccent3);
}

.champFormulaire input[type="number"] {
    width: 100px;
}
*/

/* inutilisé 2026-06-13
.actionsModale {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 25px;
}
*/

/* ============================================
   RESPONSIVE
   ============================================ */

@media (max-width: 768px) {
    /* inutilisé 2026-06-13
    #gestionEvenement {
        flex-direction: column;
    }

    #sidebarEvenement {
        width: 100%;
        min-width: 100%;
        border-right: none;
        border-bottom: var(--border);
    }

    #sidebarMenu {
        display: flex;
        flex-wrap: wrap;
        padding: 10px;
        gap: 5px;
    }

    #sidebarMenu a {
        padding: 8px 12px;
        border-left: none;
        border-radius: var(--borderR1);
    }

    #sidebarMenu a.active {
        border-left: none;
        background: var(--cAccent3);
        color: var(--cAccentt);
    }

    #gestionContenu {
        padding: 20px;
    }
    */

    /* Entête section responsive */
    /* inutilisé 2026-06-13
    .enteteSection {
        flex-direction: column;
        gap: 15px;
    }
    */

    /* Table responsive */
    /* inutilisé 2026-06-13
    .tableGestion {
        display: block;
        overflow-x: auto;
    }

    .tableGestion th,
    .tableGestion td {
        padding: 10px;
    }
    */
}

/*!**********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/55_evenements.css ***!
  \**********************************************************************************************************************************/
/* ============================================
   LISTE DES ÉVÉNEMENTS
   ============================================ */

/* Deux boutons de création côte à côte, au-dessus de la liste */
.barreCreationEvenement {
    display: flex;
    gap: var(--gapMoyen);
    margin-top: 30px;
}

/* Encadré « limite atteinte » (studio/_/_limiteEvenements.twig) : pleine largeur, palette Or —
   il parle d'offre (or = prix et inscription, couleurs.md). Titre et texte à gauche, le bouton
   à droite ; en fenêtre étroite, le bouton passe sous le texte. Même respiration que la carte
   d'offre de la Vitrine (--paddingCarteLarge, --borderR2). Sur la liste comme sur les trois
   pages du parcours scénario. */
.divLimiteEvenements {
    display: flex;
    align-items: center;
    gap: var(--gapLarge);
    margin-top: var(--gapLarge);
    padding: var(--paddingCarteLarge);
    background: var(--cOr0);
    border: 1px solid var(--cOr2);
    border-radius: var(--borderR2);
}

.limiteEvenementsCorps {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

@media (max-width: 800px) {
    .divLimiteEvenements {
        flex-direction: column;
        align-items: flex-start;
    }
}

/* Liste : un événement par ligne. Table = colonnes alignées sur toutes les lignes. */
.tableEvenements {
    width: 100%;
    border-collapse: collapse;
    margin-top: var(--gapLarge);
}

.tableEvenements th {
    font: var(--fMenu14);
    color: var(--cNoir3);
    text-align: left;
    padding: var(--gapMoyen) var(--gapLarge);
}

.tableEvenements td {
    padding: var(--gapMoyen) var(--gapLarge);
    border-top: var(--border);
    vertical-align: middle;
}

/* Survol : repère visuel de la ligne courante (pas une sélection) */
.tableEvenements tbody tr:hover {
    background: var(--cBlanc02);
}

/* Seule la colonne titre absorbe l'espace ; les autres se calent sur leur contenu */
.tableEvenements th:not(:first-child),
.tableEvenements td:not(:first-child) {
    width: 1%;
    white-space: nowrap;
}

/* Alignement : titre à gauche, Statut et Date centrés, Supprimer à droite */
.tableEvenements th:nth-child(2),
.tableEvenements td:nth-child(2),
.tableEvenements th:nth-child(3),
.tableEvenements td:nth-child(3) {
    text-align: center;
}

.tableEvenements th:last-child,
.tableEvenements td:last-child {
    text-align: right;
}

.ligneEvenementNom {
    font: var(--fH4);
    color: var(--cAccent3);
}

.ligneEvenementNom:hover {
    color: var(--cAccent4);
    text-decoration: underline;
}

.ligneEvenementDate {
    font: var(--fLight14);
    color: var(--cNoir3);
}

/* Actions de la ligne : Ouvrir / Supprimer, côte à côte, alignées à droite */
.ligneEvenementActions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: var(--gapMoyen);
}

.lienOuvrirEvenement {
    font: var(--fText16);
    color: var(--cAccent3);
}

.lienOuvrirEvenement:hover {
    color: var(--cAccent4);
    text-decoration: underline;
}

/* Suppression : bouton d'un form POST, présenté comme un lien (pas de chrome natif) */
.lienSupprimerEvenement {
    background: none;
    border: none;
    padding: 0;
    font: var(--fText16);
    color: var(--cRouge3);
    cursor: pointer;
}

.lienSupprimerEvenement:hover {
    text-decoration: underline;
}

/* Statut : Préparer / Tester / Diffuser (vocabulaire des onglets) */
.statutEvenement {
    display: inline-block;
    padding: var(--paddingEtiquette);
    border-radius: var(--borderR1);
    font: var(--fMenu14);
}

.statutPreparer {
    background: var(--cBlanc02);
    color: var(--cNoir3);
}

.statutTester {
    background: var(--cAccent1);
    color: var(--cAccent3);
}

.statutDiffuser {
    background: var(--cSucces0);
    color: var(--cSucces4);
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_rubriques.css ***!
  \*********************************************************************************************************************************/
/* ============================================
   GRILLE DES GRANDES CATÉGORIES (étape 2 : créer depuis un scénario)
   Même patron que la grille des événements (55_evenements.css) : flex-wrap +
   cartes à largeur fixe, pas de grille étirée en 1fr. Dimensions et espacements
   pris sur les tokens du projet (largeur de carte 334px, gaps, bordure de carte).
   ============================================ */

#grilleRubriques {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge);
    margin-top: 30px;
}

.carteRubrique {
    width: 334px;
    box-sizing: border-box;
    display: grid;
    grid-template-columns: 1fr auto;
    column-gap: var(--gapMoyen);
    row-gap: var(--gapDefaut);
    align-content: start;
    padding: var(--paddingCorps);
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    color: var(--cNoir1);
    transition: background-color 0.3s;
}

.carteRubrique:hover {
    background: var(--cBlanc02);
}

.carteRubriqueNom {
    grid-column: 1;
    grid-row: 1;
    align-self: center;
    margin: 0;
    font: var(--fH3);
}

.carteRubriqueAccroche {
    grid-column: 1 / -1;
    margin: 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Icône SVG inline (stroke: currentColor → colorée par la propriété color) */
.carteRubriqueIcone {
    grid-column: 2;
    grid-row: 1;
    align-self: center;
    color: var(--cAccent3);
}

.carteRubriqueIcone svg {
    width: 48px;
    height: 48px;
    display: block;
}

/*!*******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/55_filtres.css ***!
  \*******************************************************************************************************************************/
/* ============================================
   FILTRES — composant commun (« une classe = un design »)

   ⚠️ COPIE ASSUMÉE — jumelle de studioVitrine/assets/vitrine/css/filtres.css.
   Identique au départ. Toute modification ici → demander au PO s'il faut la répercuter
   sur le jumeau vitrine. Les deux copies peuvent diverger selon les besoins de chaque côté
   (studio = outil connecté ; vitrine = funnel public, cachable, SEO).

   UN SEUL design de panneau de filtres pour tout le studio : catalogue
   « Créer à partir d'un scénario » et menu « Ajouter » (section Scenes).
   Les #id des panneaux (#divFiltreScenario, #divFiltreScene) ne servent
   qu'au TypeScript et aux réglages propres à une page — jamais au design.

   .divFiltreZone     la rangée : panneau à gauche, contenu filtré à droite
   .divFiltre         le panneau vertical de filtres
   .titreFiltre       titre du panneau
   .divFiltreGroupe   groupe de puces (+ .plie : replié, seuls les actifs restent visibles)
   .titreGroupeFiltre titre d'un groupe, cliquable (chevron), replie/déplie (pliageFiltres.ts)
   .filtre            la puce cliquable (+ .actif : fond gris + coche ✓ à droite)
   ============================================ */

.divFiltreZone {
    display: flex;
    gap: var(--gapListe); /* aligné 20 → 32px (décision PO 2026-07-18) */
    align-items: flex-start;
}

.divFiltre {
    flex: 0 0 280px;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
    padding: var(--paddingCorps);
    background: var(--cBlanc02);
    border: var(--border);
    border-radius: var(--borderR2);
}

.titreFiltre {
    font: var(--fH4);
    color: var(--cNoir1);
    padding-bottom: var(--gapDefaut);
    border-bottom: var(--border);
}

.divFiltreGroupe {
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

/* Titre de groupe : cliquable, replie/déplie son groupe (TS pliageFiltres.ts pose .plie) */
.titreGroupeFiltre {
    position: relative;
    font: var(--fLabel);
    color: var(--cNoir3);
    margin-top: var(--gapDefaut);
    padding-right: 18px; /* place du chevron */
    cursor: pointer;
    user-select: none;
}

.titreGroupeFiltre:hover {
    color: var(--cNoir1);
}

/* Chevron dessiné en CSS (aucune icône chevron n'existe dans l'appli) : ▾ ouvert, ▸ plié */
.titreGroupeFiltre::after {
    content: '';
    position: absolute;
    right: 4px;
    top: 50%;
    width: 7px;
    height: 7px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: translateY(-70%) rotate(45deg);
    transition: transform 0.2s;
}

.divFiltreGroupe.plie .titreGroupeFiltre::after {
    transform: translateY(-50%) rotate(-45deg);
}

/* Groupe plié : seuls les filtres actifs restent apparents */
.divFiltreGroupe.plie .filtre:not(.actif) {
    display: none;
}

/* La puce : du texte, pas un bouton — le contour et le fond bleu plein appartiennent aux cta */
.filtre {
    position: relative;
    padding: 6px 26px 6px 12px; /* place réservée à droite pour la coche : rien ne bouge à la sélection */
    background: transparent;
    border: none; /* neutralise l'habillage natif des puces <button> */
    border-radius: var(--borderR1);
    color: var(--cNoir2);
    font: var(--fMenu14);
    text-align: left;
    cursor: pointer;
    user-select: none;
    transition: background 0.15s, color 0.15s;
}

/* Actif = le fond du survol qui reste (--cBlanc03 : fond existant des boutons discrets) */
.filtre:hover,
.filtre.actif {
    background: var(--cBlanc03);
    color: var(--cNoir1);
}

.filtre.actif::after {
    content: '✓';
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--cNoir1);
}

/* inutilisé 2026-07-18 — premier design de la puce (contour + fond bleu cta), abandonné :
   il parlait la langue des cta (décision PO, pas de git : on garde la trace)
.filtre {
    padding: 6px 12px;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}
.filtre:hover { border-color: var(--cAccent3); color: var(--cAccent3); }
.filtre.actif { background: var(--cAccent3); border-color: var(--cAccent3); color: var(--cAccentt); }
.filtre.actif:hover { background: var(--cAccent4); }
*/

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/55_scenariosCatalogue.css ***!
  \******************************************************************************************************************************************/
/* ============================================
   CRÉER À PARTIR D'UN SCÉNARIO — Catalogue + filtres

   ⚠️ COPIE ASSUMÉE — jumelle de studioVitrine/assets/vitrine/css/scenariosCatalogue.css.
   Identique au départ. Toute modification ici → demander au PO s'il faut la répercuter
   sur le jumeau vitrine. Les deux copies peuvent diverger selon les besoins de chaque côté
   (studio = outil connecté ; vitrine = funnel public, cachable, SEO).

   Namespace « creerScenario » exclusif à cette page. NE PAS réutiliser « brique »,
   qui appartient aux cartes du builder de scénario (assets/noyau/css/studio/56_scenario/).
   ============================================ */

.creerScenarioIntro {
    font: var(--fText16);
    color: var(--cNoir3);
    margin-top: var(--gapDefaut);
}

/* Le design du panneau de filtres vient du composant commun (55_filtres.css). */
#creerScenario {
    margin-top: 30px;
}

/* La liste des scénarios est longue : le panneau suit le défilement (propre à cette page). */
#divFiltreScenario {
    position: sticky;
    top: 20px;
}

/* Liste des scénarios */
#creerScenarioListe {
    flex: 1;
    min-width: 0;
    max-width: 800px;
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* La carte EST un bloc (composant commun, 53_blocs.css — décision PO 2026-07-18) :
   la classe ne sert plus qu'au filtrage TS et aux réglages propres à la page. */
.creerScenarioCarte {
    max-width: none; /* la liste (800px) commande, pas le clamp 600px du bloc */
}

/* inutilisé 2026-07-18 — tags retirés des cartes (doublon des filtres avec un autre design)
.creerScenarioCarteTags {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapReduit);
}

.creerScenarioCarteTag {
    padding: 3px 10px;
    background: var(--cBlanc02);
    border: var(--borderCarte);
    border-radius: var(--borderR2);
    color: var(--cNoir3);
    font: var(--fLabel);
    cursor: pointer;
    user-select: none;
    transition: border-color 0.2s, background 0.2s, color 0.2s;
}

.creerScenarioCarteTag:hover {
    border-color: var(--cAccent3);
    color: var(--cAccent3);
}

.creerScenarioCarteTag.actif {
    background: var(--cAccent3);
    border-color: var(--cAccent3);
    color: var(--cAccentt);
}
*/

/* La colonne d'actions de la carte est la zone .blocActions du composant. */

/* Boutons de la carte : .ctaDiscret (56_scenario/_modale.css), Configurer puis
   Aperçu. Pas de primaire/secondaire ni de violet ici : dans une liste,
   chaque carte répète les mêmes boutons — cinquante primaires n'ont aucun sens
   (décision PO 2026-07-18). Le violet aperçu reste aux boutons solo (.ctaPreview). */

.creerScenarioVide {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Masquage par le filtre */
.creerScenarioMasque {
    display: none !important;
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/ecran/css/_toggleScene.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   Toggle animation (choix exclusif)
   ============================================ */

.toggleSceneGroupe {
    display: flex;
    position: relative;
    /* Les plans internes du toggle (indicateur 0, boutons 1) restent confinés au groupe :
       sans cela, les boutons montaient dans l'échelle de la barre de pilotage et passaient
       au-dessus de son voile (#barrePilotage::before, z 1 — _barreFin.css). */
    isolation: isolate;
    background: var(--cBlanc03);
    border-radius: var(--borderR1);
}

/* Hors flux : le titre ne réserve aucune hauteur, il ne doit pas gêner la lecture de la barre */
.toggleSceneTitre {
    position: absolute;
    top: 2px;
    left: 3px;
    transform: translateY(-100%);
    font: var(--fMini11);
    color: var(--cNoir4);
    white-space: nowrap;
    pointer-events: none;
}

.toggleSceneIndicateur {
    position: absolute;
    top: 0;
    bottom: 0;
    background: var(--cBlanc1);
    transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
                width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
                border-radius 0.35s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 0;
    border: 1px solid  var(--cNoir1);
    pointer-events: none;
}

.toggleSceneBtn {
    position: relative;
    z-index: 1;
    padding: var(--paddingCta14); /* même hauteur que les cta de la barre d'actions */
    border: none;
    font: var(--fMenu14);
    cursor: pointer;
    background: transparent;
    color: var(--cNoir3);
    border-radius: var(--borderR1);
}

.toggleSceneBtn:hover:not(.selectionne):not(:disabled) {
    color: var(--cNoir1);
}

.toggleSceneBtn.selectionne {
    color: var(--cNoir1);
    cursor: default;
}

.toggleSceneBtn:disabled {
    opacity: 0.4;
    cursor: auto;
}

/* Groupe qui n'offre plus de choix (au plus un bouton actif, ou figé par verrouillerChoix) */
.toggleSceneGroupe.sansChoix .toggleSceneBtn,
.toggleSceneGroupe.sansChoix .toggleSceneIndicateur {
    opacity: 0.4;
}

.toggleSceneGroupe.sansChoix .toggleSceneBtn {
    cursor: auto;
    pointer-events: none;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/55_scenarioModifier.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   COMPOSITION D'UN SCÉNARIO — Composition par famille

   Namespace « modifierScenario » exclusif aux deux pages jumelles de la brique
   _compositionScenario : « Modifier ce scénario » (Studio) et « Configurer »
   (Vitrine) — décision PO 2026-08-14. Le stepper et les détails
   Entrées/Sorties réutilisent les classes du récapitulatif (56_scenario/_recapitulatif.css) ;
   ici uniquement le carrousel de remplaçantes, les fiches et la barre d'actions.
   ============================================ */

/* Le toggle à choix exclusif de la barre de pilotage de l'écran (.toggleSceneGroupe),
   réemployé tel quel dans la barre d'actions — un seul exemplaire du composant, importé
   ici plutôt que dans chacune des trois entrées qui servent cette page. */

#modifierScenario {
    margin-top: 30px;
}

/* Les blocs de la page sont des .bloc (composant commun 53_blocs.css, décision
   PO 2026-07-18) ; ici uniquement les réglages propres à la page. */
#modifierScenario .bloc {
    /* inutilisé 2026-08-11 — ancrait l'icône absolue .recapTitreIcone des blocs sans
       remplaçante, remplacée par la tuile façon carrousel (décision PO).
    position: relative; */
    max-width: none; /* les tuiles du carrousel dépassent le clamp 600px du bloc */
}

/* Classe et non id : un carrousel par bloc, répété dans la page. */
.divActionChangerScene {
    display: flex;
    align-items: center;
    margin-bottom: 10px;
    gap: var(--gapReduit); /* le padding vient du blocCorps */
}

.actionChangerScene {
    flex: 0 0 auto;
    width: 36px;
    height: 74px; /* même hauteur que les tuiles */
    background: var(--cBlanc);
    border: var(--borderCta);
    border-radius: var(--borderR1);
    color: var(--cCtaTexte);
    font: var(--fMenu14);
    cursor: pointer;
    transition: border-color 0.2s, color 0.2s;
}

.actionChangerScene:hover:not(:disabled) {
    border-color: var(--cAccent3);
    color: var(--cAccent3);
}

.actionChangerScene:disabled {
    opacity: 0.35;
    cursor: default;
}

/* Posée par modifierScenario.ts quand toutes les tuiles tiennent sans scroll : les
   flèches ne servent alors à rien, et leur absence aligne la rangée sur le bord
   gauche, comme la tuile des blocs sans remplaçante (décision PO 2026-08-11). */
.divActionChangerSceneSansFleches .actionChangerScene {
    display: none;
}

.modifierScenarioIcones {
    display: flex;
    gap: var(--gapReduit);
    overflow-x: auto;
    /* 8,5 icônes visibles au maximum : la demi-icône coupée signale qu'il y a une suite */
    max-width: calc(74px * 8.5 + var(--gapReduit) * 8);
}

.modifierScenarioIcone {
    flex: 0 0 auto;
    width: 74px;
    height: 74px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: border-color 0.2s, background 0.2s, opacity 0.2s, filter 0.2s;
}

/* Survol d'une tuile non retenue : ton clair de la famille (~50 % du fond), aperçu de
   l'activation. Défaut = animation, .recapBlocAffichage sur le bloc bascule en affichage. */
.modifierScenarioIcone:not(.actif):hover {
    background: var(--cAccent0);
}

.recapBlocAffichage .modifierScenarioIcone:not(.actif):hover {
    background: var(--cAccent0);
}

/* Tuile retenue : fond plein de la famille + bordure CTA nette et halo. */
.modifierScenarioIcone.actif {
    background: var(--cAccent1);
    border-color: var(--cNoir1);
    box-shadow: 0 0 0 2px var(--cFormFocusHalo);
    border-width: 2px;
}

.recapBlocAffichage .modifierScenarioIcone.actif {
    background: var(--cAccent1);
}

/* Carte « changement de fond » (brique _compositionScenario) : carte blanche comme les
   autres — la couleur de famille est sur la tuile, le fond lavande plein reste l'affaire
   des bandeaux du récap (56_scenario/_recapitulatif.css). L'id l'emporte sur l'ordre
   d'import, identique ou non entre studio et vitrine. */
#modifierScenario .bloc.recapBlocConfigurations {
    background: var(--cBlanc);
}

.recapBlocConfigurations .modifierScenarioIcone.actif {
    background: var(--cAccent1);
}

/* 64px de dessin, la grande des deux tailles du projet (54_icones.css) ; la tuile de 74
   met l'air autour. */
.modifierScenarioIcone img,
.modifierScenarioIcone svg {
    width: 64px;
    height: 64px;
}

/* Tuile de la scène unique (bloc sans remplaçante) : même silhouette « actif » que le
   carrousel, mais rien à cliquer — un span, curseur normal. */
.modifierScenarioIconeSeule {
    cursor: default;
}

/* Carte SUIVEUSE (brique _compositionScenario, décision chef de projet 2026-09-13) : elle
   propose la même liste de scènes qu'une carte plus haut, la cheffe, et c'est là-haut qu'on
   choisit. Plus de menu ici : flèches et tuiles non retenues disparaissent, seule la tuile
   active reste — la même silhouette que la tuile d'une carte sans remplaçante. Les tuiles
   sont désactivées dans le Twig ; c'est le TS qui déplace `actif` quand la cheffe change. */
.modifierScenarioBlocSuiveur .actionChangerScene,
.modifierScenarioBlocSuiveur .modifierScenarioIcone:not(.actif) {
    display: none;
}

.modifierScenarioBlocSuiveur .modifierScenarioIcone {
    cursor: default;
}

/* Cue retirée (tuile croix sélectionnée, classe posée par modifierScenario.ts) : le bloc
   « s'éteint » et se REPLIE sur sa rangée de tuiles — scènes et flèches en grisé estompé,
   SEULE la croix reste pleine, colonne récap fermée. La croix n'a pas de fiche (décision
   PO 2026-08-14 : pas de texte, le bloc replié parle de lui-même — et quatre cues
   retirées ne mangent plus l'écran). Tout reste cliquable, un clic ramène la cue. La
   hauteur du repli est animée par le TS (mettreAJourEtatRetire) : le CSS ne sait pas
   animer vers auto. */
.modifierScenarioBlocRetire .modifierScenarioIcone:not(.modifierScenarioIconeFacultative),
.modifierScenarioBlocRetire .actionChangerScene {
    opacity: 0.35;
    filter: grayscale(1);
}

.modifierScenarioBlocRetire .recapComposition {
    display: none;
}

/* L'extinction des tuiles et flèches se fait en douceur — les tuiles portent déjà
   opacity/filter dans leur propre transition. */
.actionChangerScene {
    transition: opacity 0.2s, filter 0.2s;
}

.modifierScenarioFiche {
    display: none;
}

.modifierScenarioFiche.actif {
    display: block;
}

/* Barre d'action de la fiche : sépare le bouton du descriptif (un bouton nu
   collé au texte, décision PO 2026-07-18). */
.divActionFiche {
    margin-top: var(--gapDefaut);
}

/* Dans la FICHE du carrousel, la barre est une ligne : « Jouer la scène » à gauche, le cœur
   « J'aime » à droite (brique noyau _jaime, décision chef de projet 2026-09-12). Seulement
   là — la galerie d'illustrations (.recapCompositionIllustration) range la sienne autrement. */
.modifierScenarioFiche .divActionFiche {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--gapDefaut);
}

/* inutilisé 2026-08-11 — réservait la colonne de droite à l'icône absolue .recapTitreIcone
   des blocs sans remplaçante, remplacée par la tuile façon carrousel (décision PO).
#modifierScenario .bloc:not(.modifierScenarioBloc) .blocTexte {
    padding-right: 78px;
}
*/

/* ── Colonne récap de composition (Entrées/Sorties, décision PO 2026-08-11) ──
   Largeur FIXE identique sur tous les blocs : l'alignement vertical des colonnes prime.
   Zone bien séparée : un trait fin + de l'air, pas d'encadré — la hiérarchie vient des
   tags du récap (56_scenario). Contenu rendu par le client (recapComposition.ts). */
#modifierScenario .blocCorps {
    flex-direction: row;
    gap: 18px; /* = les marges latérales du blocCorps : même air partout autour de l'illustration */
}

/* Reprend la pile verticale que .blocCorps assurait avant son passage en rangée. */
.modifierScenarioPrincipal {
    flex: 1;
    min-width: 0; /* autorise la rangée de tuiles à rétrécir (overflow → flèches) */
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

/* Contenu : des .recapCompositionSection (un h4 + sa liste) espacées par le gap — les
   styles h4/ul/li viennent du récap (56_scenario/_recapitulatif.css, sélecteurs élargis). */
/* 292px = 273 d'illustration + les 18 du padding + le trait : c'est l'illustration qui commande
   la largeur de la colonne (décision PO 2026-08-14), et les deux affichages la partagent pour que
   rien ne bouge quand on bascule de l'un à l'autre. */
.recapComposition,
.recapCompositionIllustration {
    flex: 0 0 292px;
    border-left: var(--borderCarte);
    padding-left: var(--retraitListeCourt); /* = le padding droit du blocCorps : trait centré entre les deux zones */
}

/* La hauteur des entrées/sorties est RÉSERVÉE : basculer d'un affichage à l'autre ne doit
   déplacer aucune carte (décision PO 2026-08-14). Sans ça, la colonne dicte la hauteur du
   bloc et tout ce qui suit remonte au changement d'affichage — on clique ici, ça bouge
   ailleurs. C'est la hauteur d'une illustration, pour que les deux se correspondent.
   Les cartes de changement de fond en sont exclues : plus courtes par nature.
   L'emplacement d'illustration, lui, ne réserve RIEN : vide, il ne prend aucune hauteur
   (décision PO 2026-08-14) — une cue retirée ou une scène sans illustration garderait
   sinon une carte gonflée par un rectangle qui ne montre rien. */
.recapBlocScene .recapComposition {
    min-height: calc(273px * 9 / 16);
}

.recapComposition {
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

/* Le ratio est imposé, jamais subi : une capture recadrée au pixel près n'est pas toujours
   exactement 16:9, et une hauteur qui varie d'une carte à l'autre casserait l'alignement de
   la colonne. Le fichier fait 1000px de large pour 273 affichés : la taille est celle de la
   vitrine, qui les montre bien plus grandes ; ici le navigateur réduit, proprement. */
.recapCompositionIllustration img {
    display: block;
    width: 100%;
    aspect-ratio: 16 / 9;
    object-fit: cover;
    border-radius: var(--borderR1);
}

/* Barre de la galerie, SOUS l'image : flèche · points · flèche, étalée sur toute la largeur
   (décision PO 2026-08-14). Rien par-dessus l'image, elle est déjà petite. Les flèches sont
   des .ctaDiscret dans la même .divActionFiche que le bouton « Jouer la scène » de la fiche
   voisine — même niveau, même écart. Toute la barre n'apparaît qu'à partir de deux
   illustrations : avec une seule, il n'y a rien à parcourir ni à compter. */
.recapCompositionIllustration .divActionFiche {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--gapDefaut);
}

.recapIllustrationPoints {
    display: flex;
    gap: var(--gapReduit);
}

/* Un point par illustration : dit combien il y en a et où l'on en est. Cliquable — c'est
   l'attente devant une pastille de galerie, et ça évite d'enchaîner les clics de flèche.

   Le BOUTON est la zone de clic (24×24, invisible), le rond n'est que son dessin : viser
   un disque de 10px à la souris est pénible, et deux zones qui se touchent font cliquer à
   côté. D'où la surface généreuse ET le gap entre elles (décision PO 2026-08-14). */
.recapIllustrationPoint {
    width: 24px;
    height: 24px;
    padding: 0;
    border: none;
    background: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
}

.recapIllustrationPoint::before {
    content: '';
    width: 10px;
    height: 10px;
    border: 2px solid var(--cNoir4); /* 2px et non la bordure de bouton : un rond de 10px doit se voir */
    border-radius: 50%;
    background: var(--cBlanc);
    transition: background 0.2s, border-color 0.2s;
}

/* Le point plein est NOIR, pas à la couleur d'accent (chef de projet 2026-09-18) : un repère
   de position, pas un bouton d'action — vaut pour la galerie d'illustrations et pour la barre
   de choix du déroulé d'un scénario (_deroule.css), qui reprend ces points. */
.recapIllustrationPointActif::before {
    background: var(--cNoir1);
    border-color: var(--cNoir1);
}

/* L'illustration d'abord, les entrées et sorties sur demande (décision PO 2026-08-14) : une
   illustration permet de se projeter, une liste de sorties est une lecture d'expert. Le choix
   n'est pas mémorisé — on revient à l'illustration à chaque arrivée. La classe vient du toggle
   de la barre d'actions (toggleAffichageCarte.ts) ; les cartes de changement de fond ne
   sont pas concernées, leur colonne vide reste et tient la géométrie. */
.recapBlocScene .recapComposition {
    display: none;
}

.modifierScenarioAfficheEntrees .recapCompositionIllustration {
    display: none;
}

.modifierScenarioAfficheEntrees .recapBlocScene .recapComposition {
    display: flex;
}

/* Le toggle occupe la droite de la barre, les deux boutons restent à gauche. */
.divActionModifierScenario .toggleSceneGroupe {
    margin-left: auto;
}

/* Écran étroit : on ne réduit pas, on retire (décision PO 2026-08-14). La colonne de
   droite passée sous le contenu s'étirait sur toute la largeur — une illustration 16:9 géante,
   et des entrées/sorties qui n'ont rien d'un contenu de première lecture. Ni l'un ni
   l'autre, donc, et pas de toggle non plus : il ne commanderait plus rien. Reste la
   carte : sa tuile, son titre, son texte. Même seuil que le numéro de place et le repère
   de défilement, qui disparaissent ici aussi — la page se simplifie d'un bloc.
   L'ID est nécessaire : sans lui, la règle qui MONTRE les entrées en mode « entrées »
   (.modifierScenarioAfficheEntrees .recapBlocScene .recapComposition) l'emporterait, et
   la colonne reviendrait à qui a basculé avant de réduire sa fenêtre. */
@media (max-width: 900px) {
    #modifierScenario .recapComposition,
    #modifierScenario .recapCompositionIllustration,
    .divActionModifierScenario .toggleSceneGroupe {
        display: none;
    }
}

/* ── Numéro de place, dans la marge en regard de chaque carte (décision PO 2026-08-14) ──
   Douze cartes se ressemblent en défilant : le numéro dit où l'on en est. Il vit dans la
   rangée, PAS dans la carte : .bloc coupe ce qui dépasse (overflow hidden), et la carte
   garde ainsi sa géométrie au pixel près. Même gouttière, même gris et même chasse que le
   repère de défilement : un seul langage de chiffres dans cette marge. */
.modifierScenarioRangee {
    position: relative;
}

.modifierScenarioNumero {
    display: none;
    position: absolute;
    left: -36px;
    top: 16px; /* = padding haut du blocCorps : le numéro s'aligne sur la rangée de tuiles */
    width: 32px;
    text-align: center;
    font: var(--fMenu14);
    color: var(--cNoir5);
}

@media (min-width: 900px) {
    .modifierScenarioNumero {
        display: block;
    }
}

/* ── Repère de défilement (marge gauche du scénario, décision PO 2026-08-14) ──
   Sa zone longe le stepper sur toute sa hauteur, dans le padding gauche de .contenu (40px) :
   le repère ne recouvre donc aucune carte, et se cale sur le scénario quelle que soit la
   largeur de la fenêtre. Le repère y est STICKY : il colle au bas de la fenêtre tant qu'il
   reste des cartes, puis s'arrête à la fin du scénario — au bas de la PAGE il se retrouverait
   à côté des CTA, où il n'a rien à faire. Sous 900px la page n'a plus de marge à lui donner
   (la colonne récap passe déjà sous le contenu) : masqué. */
#modifierScenario .recapStepper {
    position: relative;
}

#indicateurDefilementZone {
    display: none;
    position: absolute;
    top: 0;
    bottom: 0;
    left: -36px;
    width: 32px;
}

/* Place naturelle du repère : le BAS de la zone, d'où le sticky le remonte au bas de la
   fenêtre tant que le scénario continue. Posé en haut, il n'aurait rien à remonter : le
   sticky ne retient un élément que vers sa contrainte, il ne le pousse jamais plus loin. */
@media (min-width: 900px) {
    #indicateurDefilementZone {
        display: flex;
        flex-direction: column;
        justify-content: flex-end;
        align-items: center;
    }
}

#indicateurDefilement:not([hidden]) {
    display: flex;
    position: sticky;
    /* Au-dessus de la barre d'actions collante, jamais à hauteur des boutons (décision
       PO 2026-08-14). --hauteurBarreAction est mesurée par barreActionCollante.ts ; le
       repli à 0px vaut le temps de la première mesure. */
    bottom: calc(var(--hauteurBarreAction, 0px) + var(--gapLarge));
    flex-direction: column;
    align-items: center;
    gap: 0; /* l'espace vient du padding des boutons, qui est aussi leur cible de clic */
    /* Le gris des bordures de cartes : un repère de lecture ne pèse pas plus que le
       contenu qu'il sert (décision PO 2026-08-14). */
    color: var(--cNoir5);
    /* Fond de page opaque : les numéros de place défilent DERRIÈRE le repère, ils ne
       viennent pas se superposer à lui. */
    background: var(--cBackground);
    padding: var(--gapReduit) 0;
}

/* Enfant direct = la souris ; les chevrons vivent dans les boutons. */
#indicateurDefilement > svg {
    display: block;
    width: 22px;
}

/* Bouton nu, mais cible LARGE : le chevron ne fait que 12×8, on ne vise pas ça à la
   souris. Le bouton prend toute la gouttière et s'ouvre en hauteur — c'est son padding qui
   fait aussi l'espace jusqu'à la souris (d'où le gap 0 du conteneur) : la cible grandit,
   le dessin ne bouge pas. La couleur CTA n'arrive qu'au survol, quand le repère devient
   une action. */
.indicateurDefilementAction {
    display: flex;
    align-self: stretch;
    justify-content: center;
    background: none;
    border: none;
    padding: var(--gapDefaut) 0;
    color: inherit;
    cursor: pointer;
    transition: color 0.2s;
}

.indicateurDefilementAction:hover:not(:disabled) {
    color: var(--cAccent3);
}

/* Bout de course : le chevron s'efface, sa place reste (décision PO 2026-08-14 — pas de
   flèche qui ne mène nulle part, mais pas de souris qui saute non plus). */
.indicateurDefilementAction:disabled {
    visibility: hidden;
}

.indicateurDefilementChevron {
    display: block;
    width: 12px;
}

/* Alignés à gauche, comme toute barre d'action (décision PO 2026-07-18 : pas
   d'alignement qui varie d'une barre à l'autre).

   Collée au bas de la fenêtre tant que sa vraie place est plus bas, posée dans le flux
   dès qu'on l'atteint (décision PO 2026-08-14) : la page est une page d'atterrissage,
   le visiteur qui arrive doit voir « Jouer le scénario » sans avoir rien défilé. En bas
   et pas en haut, parce que ces boutons agissent sur ce qui les précède — le lien porte
   le ?remplacer= construit à partir des tuiles choisies.

   Le sticky remonte l'élément vers sa contrainte, il ne le pousse jamais : ça marche ici
   parce que sa place naturelle est DÉJÀ le bas de #modifierScenario. Le padding remplace
   l'ancien margin-top pour que le fond couvre aussi l'air au-dessus des boutons. */
.divActionModifierScenario {
    display: flex;
    position: sticky;
    bottom: 0;
    align-items: center;
    gap: var(--gapDefaut);
    padding: var(--paddingCorps) 0;
}

/* Un CTA ne se comprime pas : sans ça, tout ce qu'on ajoute dans la barre écrase les
   deux boutons et casse leur libellé sur deux lignes. */
.divActionModifierScenario > * {
    flex-shrink: 0;
}

/* Fond et trait vont d'un bord à l'autre de la PAGE — la largeur de #bodyPage, pas celle
   de l'écran : le haut de page fait exactement ça, sans effort, parce qu'il est enfant
   direct de #bodyPage (décision PO 2026-08-14). La barre, elle, vit dans .contenu : le
   pseudo-élément rattrape donc son padding horizontal, et rien de plus. Ce débordement
   couvre au passage la gouttière de gauche, sinon les numéros de place des cartes qui
   passent dessous resteraient à découvert sous le trait. Fond opaque obligatoire : sans
   lui les cartes défilent en transparence sous les boutons.
   Les -40px/-20px sont le padding de .contenu (30_base.css) au signe près : les deux
   valeurs changent ensemble. */
.divActionModifierScenario::before {
    content: '';
    position: absolute;
    z-index: -1;
    top: 0;
    bottom: 0;
    left: -40px;
    right: -40px;
    background: var(--cBackground);
}

/* Épinglée : elle flotte au-dessus des cartes, un trait l'en détache. Posée en bas du
   scénario, elle est à sa place et ne tranche rien — la classe est posée par
   barreActionCollante.ts, aucun sélecteur CSS ne distingue les deux états. */
.divActionModifierScenarioCollee::before {
    border-top: var(--border);
}

/* Fondu au-dessus de la barre épinglée (décision PO 2026-08-14) : la coupure nette du
   contenu était brutale, et le contenu qui s'efface au lieu de s'arrêter dit qu'il en
   reste dessous. Disparaît en même temps que le trait, quand la barre se pose : là, il
   n'y a plus rien à estomper. Devant le contenu, donc pas de z-index négatif ici —
   l'ordre du DOM suffit ; pointer-events: none, il ne mange pas les clics des cartes. */
.divActionModifierScenarioCollee::after {
    content: '';
    position: absolute;
    bottom: 100%;
    left: -40px;
    right: -40px;
    height: 40px;
    background: linear-gradient(to top, var(--cBackground), transparent);
    pointer-events: none;
}

/* Miroir de la media query de .contenu (30_base.css) : son padding tombe à 20px, le
   débordement des deux pseudo-éléments avec lui — sinon la barre sort de la page. */
@media (max-width: 800px) {
    .divActionModifierScenario::before,
    .divActionModifierScenarioCollee::after {
        left: -20px;
        right: -20px;
    }
}

/* CÔTÉ STUDIO, « Créer votre événement » vit dans un <form> (il POSTe la composition
   `remplacer`). display:contents efface la boîte du form : le gap de la barre s'applique aux
   boutons eux-mêmes (même solution que le catalogue).
   Côté VITRINE, le même bouton est un <a> qui porte la composition dans son href (le parcours
   passe par la connexion, qui ne revient qu'en GET) : pas de form, donc rien à effacer — il
   est déjà enfant direct de la barre. */
.divActionModifierScenario form {
    display: contents;
}

/* « Créer cet événement » : seule action primaire de la page — silhouette .cta14 et rôle
   .ctaPrimaire (31_cta.css), en bleu administration (.accentAdministration, 10_font.css) :
   plus aucune couleur écrite ici (décision chef de projet 2026-09-06, avant : classe locale
   .ctaModifierScenarioCreer). « Aperçu » qui le suit est un .ctaDiscret neutre, le même que
   le catalogue (décision PO 2026-07-18). */

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_etiquettes.css ***!
  \********************************************************************************************************************************************/
/* ============================================
   ÉTIQUETTES - Marquage typographique
   ============================================

   Les étiquettes données par l'organisateur (animations, sorties, groupes)
   sont enveloppées dans .etiquetteMono par le filtre Twig `etiquetteHtml`.
   La chasse fixe les distingue des libellés du système (décision PO 2026-06-10).
*/

.etiquetteMono {
    font-family: var(--ffMono);
}

/* Marqueur d'une source provisoire, accolé à l'étiquette par le même filtre */
.etiquetteAConfigurer {
    font: var(--fLight14);
    color: var(--cRouge4);
}

.recapBlocDetail .etiquetteAConfigurer {
    color: unset;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_grille.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   SCÉNARIO - Grille de briques
   ============================================ */

/* Le conteneur d'une grille à traits (scenarioLignes.ts) : le SVG des lignes s'y absolutise.
   Par classe et non par identifiant : une page peut en porter plusieurs (2026-09-18). */
.scenarioLignesConteneur {
    position: relative;
}

#scenarioGrille {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge) var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    margin-bottom: 30px;
}

/* SVG des lignes de connexion */
.scenarioLignesSvg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    pointer-events: none; /* Ne bloque pas les clics */
    overflow: visible;
    z-index: 0; /* Derrière les briques */
}

.brique * {
    user-select: none;
}

body.isDragging,
body.isDragging * {
    cursor: grabbing !important;
}

/* Brique de base */
.brique {
    width: 162px;
    height: 100px;
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    border: var(--borderCarte );
    cursor: pointer;
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: flex-start;
    color: inherit;
    overflow: hidden;
    transition: box-shadow 0.2s;
}

.brique:hover {
    box-shadow: var(--ombrePortee);
}

/* Grille statique (page « Voir la config » des aperçus) : les briques se regardent, ne se cliquent pas.
   Pas d'ombre au survol (rien ne bouge sous la souris) : c'est un aperçu, tout y est désactivé
   (décision chef de projet 2026-09-15). Elle ne porte ni brique « Configuration » ni brique « + »
   (2026-09-18), seulement les scènes. La poignée de déplacement est traitée de même dans _dragDrop.css. */
.scenarioGrilleStatique .brique {
    cursor: default;
}

.scenarioGrilleStatique .brique:hover {
    box-shadow: none;
}

.brique.active {
    box-shadow: var(--ombrePortee);
}

/* Marqueur « à configurer » : même étoile rouge partout — sur la brique d’animation qui
   consomme une provisoire, et sur l'onglet où cette provisoire se configure
   (variante d'onglet dans _ongletMenu.css, avec .onglet). Le placement en coin est
   propre à la brique : ailleurs l'étoile suit le texte. */
.pastilleProvisoire {
    color: var(--cRouge4);
    font: var(--fAlerte16);
}

.brique .pastilleProvisoire {
    position: absolute;
    top: 4px;
    right: 82px;
}

/* Styles d'icônes : voir 54_icones.css */

.briqueConfig { background: var(--cAccent1); }

.briqueTitre {
    font: var(--fMenu14);
    color: var(--cNoir1);
    padding: 8px 10px 0 10px;
    width: 100%;
    box-sizing: border-box;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* inutilisé 2026-06-13
.briqueNombre {
    font: var(--fLight14);
    color: var(--cNoir3);
    padding: 2px 10px 10px 10px;
}
*/

/* Contrats animation (sous-ligne icônes + plages) */
.briqueContrats {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: 2px 10px 8px 10px;
    font: var(--fLight14);
    color: var(--cNoir3);
    width: 100%;
    box-sizing: border-box;
}

.contratScene {
    display: inline-flex;
    align-items: center;
    gap: 2px;
}

.contratScene svg {
    width: 12px;
    height: auto;
    flex-shrink: 0;
}

.contratPlage {
    font: var(--fLight14);
    font-size: 12px;
    color: var(--cNoir2);
}

/* Brique Ajouter (bouton + générique) */
.briqueAjouter {
    border-style: dashed;
    background: var(--cBlanc02);
    justify-content: center;
    align-items: center;
}

.briqueIconePlus {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: 1px dashed var(--cNoir4);
    display: flex;
    justify-content: center;
    align-items: center;
    font: var(--fH2);
    color: var(--cNoir4);
}

.briqueAjouter:hover .briqueIconePlus {
    color: var(--cAccent3);
    border-color: var(--cAccent3);
}

/* Brique + désactivée (quand menu affiché) */
.briqueAjouter.briqueAjouterActif {
    pointer-events: none;
    border-style: solid;
}

.briqueAjouterActif .briqueIconePlus {
    border-style: solid;
}

/* ============================================
   COULEURS BRIQUES AJOUTER (par section)
   Utilise des CSS custom properties locales
   ============================================ */

/* Définition des variables par section */
.briqueAjouterGroupes {
    --briqueFond: var(--cAccent1);
    --briqueBordure: var(--cAccent2);
}

.briqueAjouterDistributions {
    --briqueFond: var(--cAccent1);
    --briqueBordure: var(--cAccent2);
}

.briqueAjouterConfigurations {
    --briqueFond: var(--cAccent1);
    --briqueBordure: var(--cAccent2);
}

.briqueAjouterAffichages {
    --briqueFond: var(--cAccent1);
    --briqueBordure: var(--cAccent2);
}

.briqueAjouterScenes {
    --briqueFond: var(--cAccent1);
    --briqueBordure: var(--cAccent2);
}

/* Styles communs utilisant les variables */
.briqueAjouter.briqueAjouterGroupes,
.briqueAjouter.briqueAjouterDistributions,
.briqueAjouter.briqueAjouterConfigurations,
.briqueAjouter.briqueAjouterAffichages,
.briqueAjouter.briqueAjouterScenes {
    background: var(--briqueFond);
    border-color: var(--briqueBordure);
}

.briqueAjouterGroupes .briqueIconePlus,
.briqueAjouterDistributions .briqueIconePlus,
.briqueAjouterConfigurations .briqueIconePlus,
.briqueAjouterAffichages .briqueIconePlus,
.briqueAjouterScenes .briqueIconePlus {
    color: var(--briqueBordure);
    border-color: var(--briqueBordure);
}

/*!*********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_formulaires.css ***!
  \*********************************************************************************************************************************************/
/* ============================================
   ZONE FORMULAIRE (Turbo Frame)
   ============================================ */

#scenarioPanneau {
    margin: 20px 0;
    display: block;
    border-top: var(--borderCarte);
    padding: 20px 0;
}

/* ============================================
   PANNEAU - Classes génériques réutilisables
   ============================================ */

.panneauWrapper {
    display: flex;
    gap: var(--gapListe); /* aligné 30 → 32px (décision PO 2026-07-18) */
    align-items: stretch;
}

.panneauGauche {
    width: 600px;
    flex-shrink: 0;
}

.panneauAide {
    flex: 1;
    padding: 15px 20px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.panneauAide h2:first-child {
    margin-top: 0;
}

.panneauAide h3 {
    margin: 40px 0 10px 0;
    font: var(--fH3);
}

.panneauAide p {
    margin: 10px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

.panneauAide strong,
.panneauAide b {
    font: var(--fText16Strong);
}

.panneauAide ul {
    margin: 10px 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauAide li,
.fichierPrevisualisationListe li {
    margin: 5px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Encart « choisir la bonne source » (_aideEncartSources.twig) : ajouté à la fin de tout
   panneau d'aide, commun à toutes les scènes. Le fond des groupes suffit à le détacher de
   l'aide de la scène : pas de bordure, pas de couleur de texte propre (décision PO
   2026-08-10, on fait simple). */
.aideEncartSources {
    margin-top: 30px;
    padding: 12px 16px;
    background: var(--cAccent1);
    border-radius: var(--borderR1);
}

.aideEncartSources h3 {
    margin: 0 0 8px 0;
    font: var(--fH3);
    color: var(--cNoir1);
}

.aideEncartSources h4 {
    margin: 16px 0 4px 0;
    font: var(--fH4);
    color: var(--cNoir1);
}

.aideEncartSources p {
    color: var(--cNoir1);
}

.aideEncartSources p:last-child {
    margin-bottom: 0;
}

/* Encadré générique d'aperçu d'un fichier importé (construit en JS, ex. import CSV). */
.fichierPrevisualisation {
    padding: 8px 12px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    border: var(--borderCarte);
}

.fichierPrevisualisation h4 {
    margin: 0 0 6px;
    font: var(--fH4);
}

/* Les <p> de l'aperçu ne sont pas enfants directs du form : on neutralise la marge
   par défaut du navigateur (sinon gros trou entre un titre de liste et sa liste). */
.fichierPrevisualisation p {
    margin: 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Bloc « titre + liste » : séparé du compteur, mais titre collé à sa liste (proximité). */
.fichierPrevisualisationListe {
    margin-top: 12px;
}

/* Lien « Utiliser un autre fichier » DANS l'encadré (comme le bouton des aperçus d'image). */
.fichierPrevisualisation .ctaSupprimer {
    margin-top: 8px;
}

.fichierPrevisualisationListe ul {
    margin: 2px 0 0;
    padding-left: 20px;
    list-style: disc;
}

/* Les boutons du panneau d'aide sont des LIENS (« Utiliser un autre fichier »…) : pas de
   silhouette, juste du texte bleu. Le mini-menu Description / Aide, lui, est un vrai menu
   d'onglets (.onglet, _ongletMenu.css) : il garde sa police et son air — sans ce :not(),
   cette règle lui retirait son padding, et le pavé de l'onglet actif collait au mot. */
.panneauAide button:not(.onglet) {
    font: unset;
    margin: 0;
    color: var(--cAccent3);
    padding: 0;
    background: none;
    border: none;
    cursor: pointer;
    transition: color 0.2s;
}

@media (max-width: 1000px) {
    .panneauWrapper {
        flex-direction: column;
    }

    .panneauGauche {
        width: 100%;
        max-width: 600px;
    }

    .panneauAide {
        width: 100%;
        max-width: 600px;
    }
}

.messageAide {
    color: var(--cNoir3);
}

.messageAide p {
    font: var(--fText16);
    margin: 5px 0;
    max-width: 600px;
}

/* ============================================
   BLOC ENCADRÉ - Style unifié pour les blocs
   dans les formulaires (lots, actualisation, etc.)

   Structure HTML obligatoire : form > div > .blocEncadre
   (le .blocEncadre doit être dans une div intermédiaire)
   ============================================ */

.blocEncadre {
    padding: 15px;
    margin-bottom: 15px;
    box-shadow: var(--ombreInterne);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.blocEncadre .vignetteImageExistante {
    background: var(--cBlanc02);
    box-shadow: none;
}

.blocEncadre > :first-child {
    margin-top: 0;
}

.blocEncadre > :last-child {
    margin-bottom: 0;
}

.blocEncadre > div {
    padding: 0 0 20px;
}

/* Titre du formulaire avec icône et couleur */
.titreFormulaire {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    width: 100%;
    margin: 0 0 40px 0;
    font: var(--fH3);
    box-sizing: border-box;
}

.titreFormulaire:has(+ .sousTitreFormulaire) {
    margin-bottom: 8px;
}

.sousTitreFormulaire {
    margin: 20px 0 30px 0;
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Case 64 et 6px d'air : dessin 52, la petite des deux tailles du projet (54_icones.css). */
.titreIcone {
    width: 64px;
    height: 64px;
    padding: 6px;
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

/* ============================================
   VARIANTES DE COULEURS DES TITRES FORMULAIRES
   Utilise des CSS custom properties locales
   ============================================ */

/* Variables locales pour le titre et son icône (éléments enfants) */
.titreConfig,
.titreConfigurations {
    --titreFond: var(--cAccent1);
    --titreIconeFond: var(--cAccent1);
}

.titreGroupes {
    --titreFond: var(--cAccent1);
    --titreIconeFond: var(--cAccent1);
}

.titreDistributions {
    --titreFond: var(--cAccent1);
    --titreIconeFond: var(--cAccent1);
}

.titreScenes {
    --titreFond: var(--cAccent1);
    --titreIconeFond: var(--cAccent1);
}

.titreAffichages {
    --titreFond: var(--cAccent1);
    --titreIconeFond: var(--cAccent1);
}

/* Styles communs utilisant les variables locales */
.titreConfig,
.titreConfigurations,
.titreGroupes,
.titreDistributions,
.titreScenes,
.titreAffichages {
    background: var(--titreFond);
}

.titreConfig .titreIcone,
.titreConfigurations .titreIcone,
.titreGroupes .titreIcone,
.titreDistributions .titreIcone,
.titreScenes .titreIcone,
.titreAffichages .titreIcone {
    background: var(--titreIconeFond);
}

.panneauFormulaire .ctaValider {
    margin-top: 0;
    padding: 10px 40px;
    width: auto;
}

.panneauFormulaire .ctaValider:disabled {
    cursor: auto;
}

/* ============================================
   COULEURS PAR CATÉGORIE (.divConfig, .divGroupes, etc.)
   Classe ajoutée sur .panneauFormulaire par _baseCreate/_baseEdit
   ============================================ */

/* Bouton valider - Config */
.divConfig .ctaValider,
.divConfigurations .ctaValider {
    background: var(--cAccent_a);
}
.divConfig .ctaValider:hover,
.divConfigurations .ctaValider:hover {
    background: var(--cAccent_ah);
}

/* Bouton valider - Participants */
.divGroupes .ctaValider {
    background: var(--cAccent_a);
}
.divGroupes .ctaValider:hover {
    background: var(--cAccent_ah);
}

/* Bouton valider - Lots */
.divDistributions .ctaValider {
    background: var(--cAccent_a);
}
.divDistributions .ctaValider:hover {
    background: var(--cAccent_ah);
}

/* Bouton valider - Scenes */
.divScenes .ctaValider {
    background: var(--cAccent_a);
}
.divScenes .ctaValider:hover {
    background: var(--cAccent_ah);
}

/* Bouton valider - Affichages */
.divAffichages .ctaValider {
    background: var(--cAccent_a);
}
.divAffichages .ctaValider:hover {
    background: var(--cAccent_ah);
}

/* Focus des champs - Config */
.divConfig input:focus,
.divConfig textarea:focus,
.divConfigurations input:focus,
.divConfigurations textarea:focus {
    border-color: var(--cAccent4);
    outline-color: var(--cAccent4);
}

/* Focus des champs - Participants */
.divGroupes input:focus,
.divGroupes textarea:focus {
    border-color: var(--cAccent4);
    outline-color: var(--cAccent4);
}

/* Focus des champs - Lots */
.divDistributions input:focus,
.divDistributions textarea:focus {
    border-color: var(--cAccent4);
    outline-color: var(--cAccent4);
}

/* Focus des champs - Scenes */
.divScenes input:focus,
.divScenes textarea:focus {
    border-color: var(--cAccent4);
    outline-color: var(--cAccent4);
}

/* Focus des champs - Affichages */
.divAffichages input:focus,
.divAffichages textarea:focus {
    border-color: var(--cAccent4);
    outline-color: var(--cAccent4);
}

/* Textes d'aide - Config */
.divConfig .help-text,
.divConfig .facultatif,
.divConfigurations .help-text,
.divConfigurations .facultatif {
    color: var(--cAccent4);
}

/* Label principal d'un groupe (radio / champ) dans les formulaires de config = titre */
.divConfig > div > label:first-child {
    display: block;
    margin-bottom: 10px;
    font: var(--fText16Strong);
}

/* Textes d'aide - Participants */
.divGroupes .help-text,
.divGroupes .facultatif {
    color: var(--cAccent4);
}

/* Textes d'aide - Lots */
.divDistributions .help-text,
.divDistributions .facultatif {
    color: var(--cAccent4);
}

/* Textes d'aide - Scenes : pas de couleur thématique, reste gris par défaut */

/* Groupe radio pour les slots de distribution */

.radioDistributionOptions {
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
}

/* Le conteneur porte l'espacement (gap), les pilules n'ont pas de marge propre */
.radioDistributionOptions .toggleAvecLabel {
    margin: 0;
}

/* Radio pilule : même format que le toggle, mais pleine (sélectionnée) ou vide.
   Le remplissage glisse verticalement — c'est lui qui rend le choix unique lisible :
   quand la sélection change, une pilule se vide pendant que l'autre se remplit. */
.radioPilule {
    position: relative;
    display: inline-block;
    width: 38px;
    height: 22px;
    cursor: pointer;
    flex-shrink: 0;
}

.radioPilule input {
    opacity: 0;
    width: 0;
    height: 0;
}

.radioPiluleFond {
    position: absolute;
    inset: 0;
    background: var(--cBlanc03);
    border: var(--borderForm);
    border-radius: 20px;
    overflow: hidden;
}

/* Galet intérieur : en retrait de 2px comme le bouton du toggle — le fond de la
   pilule, passé au blanc quand elle est sélectionnée, forme le liseré entre la
   bordure et le galet */
.radioPiluleFond::before {
    content: '';
    position: absolute;
    inset: 3px;
    border-radius: 20px;
    transform: translateY(calc(100% + 3px));
    transition: transform 0.25s;
}

.radioPilule input:checked + .radioPiluleFond {
    background: var(--cBlanc);
}

.radioPilule input:checked + .radioPiluleFond::before {
    transform: translateY(0);
}

.radioPiluleLots::before {
    background: var(--cAccent3);
}

/* ============================================
   CHAMP NOM REPLIABLE
   ============================================ */

.champEtiquette {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.champEtiquetteValeur {
    color: var(--cNoir2);
}

.champEtiquetteEditer {
    background: none;
    border: none;
    cursor: pointer;
    padding: 0.2rem;
    color: var(--cNoir2);
    transition: opacity 0.2s;
}

.champEtiquetteEditer:hover {
    opacity: 0.6;
}

.champEtiquette .masque {
    display: none;
}

.champEtiquetteChamp {
    flex: 1;
}

/* Checkboxes et radios - Config */
.divConfig .svgCb,
.divConfig .svgRb,
.divConfigurations .svgCb,
.divConfigurations .svgRb {
    color: var(--cAccent1);
}

/* Checkboxes et radios - Participants */
.divGroupes .svgCb,
.divGroupes .svgRb {
    color: var(--cAccent1);
}

/* Checkboxes et radios - Lots */
.divDistributions .svgCb,
.divDistributions .svgRb {
    color: var(--cAccent1);
}

/* Checkboxes et radios - Scenes */
.divScenes .svgCb,
.divScenes .svgRb {
    color: var(--cAccent1);
}

/* Checkboxes et radios - Affichages */
.divAffichages .svgCb,
.divAffichages .svgRb {
    color: var(--cAccent1);
}

/* Dans un formulaire animation, les sections participants/lots gardent leur propre couleur */
.sectionAnimGroupes .svgCb,
.sectionAnimGroupes .svgRb { color: var(--cAccent1); }
.sectionAnimLots .svgCb,
.sectionAnimLots .svgRb { color: var(--cAccent1); }

/* Sections colorées dans les formulaires d'animation */
.panneauFormulaire form > .sectionAnimGroupes {
    margin: 20px 0;
}

/* Bouton file input - Config */
.divConfig input[type="file"]::file-selector-button,
.divConfigurations input[type="file"]::file-selector-button {
    background: var(--cAccent_a);
}
.divConfig input[type="file"]::file-selector-button:hover,
.divConfigurations input[type="file"]::file-selector-button:hover {
    background: var(--cAccent_ah);
}

/* Bouton file input - Participants */
.divGroupes input[type="file"]::file-selector-button {
    background: var(--cAccent_a);
}
.divGroupes input[type="file"]::file-selector-button:hover {
    background: var(--cAccent_ah);
}

/* Bouton file input - Lots */
.divDistributions input[type="file"]::file-selector-button {
    background: var(--cAccent_a);
}
.divDistributions input[type="file"]::file-selector-button:hover {
    background: var(--cAccent_ah);
}

/* Bouton file input - Scenes */
.divScenes input[type="file"]::file-selector-button {
    background: var(--cAccent_a);
}
.divScenes input[type="file"]::file-selector-button:hover {
    background: var(--cAccent_ah);
}

/* Bouton file input - Affichages */
.divAffichages input[type="file"]::file-selector-button {
    background: var(--cAccent_a);
}
.divAffichages input[type="file"]::file-selector-button:hover {
    background: var(--cAccent_ah);
}

/* Panneau formulaire : un seul form OU plusieurs .contenu */
.panneauGaucheFlex,
.panneauFormulaire {
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* form pour les formulaires, .blocContenu pour les blocs d'information */
.panneauFormulaire form,
.panneauFormulaire .blocContenu,
.panneauGaucheFlex .blocContenu {
    margin: 0;
    border: var(--borderCarte );
    border-radius: var(--borderR1);
    overflow: hidden;
}

.panneauFormulaire .blocContenu,
.panneauGaucheFlex .blocContenu {
    padding-bottom: 20px;
}

/* Bloc contenu en mode test (style violet) */
.blocContenuTest .titreFormulaire {
    --titreFond: var(--cAccent1);
    --titreIconeFond: var(--cAccent2);
}

.panneauFormulaire .divCb,
.panneauGaucheFlex .divCb {
    margin: 0 0 20px;
}

.panneauFormulaire form > h4,
.panneauFormulaire .blocContenu > h4,
.panneauGaucheFlex .blocContenu > h4 {
    margin-top: 20px;
    padding: 0 20px;
}

.panneauFormulaire form > div,
.panneauFormulaire .blocContenu > div,
.panneauGaucheFlex .blocContenu > div,
.panneauFormulaire form > p,
.panneauFormulaire .blocContenu > p,
.panneauGaucheFlex .blocContenu > p {
    padding: 0 20px;
}

/* ============================================
   SECTIONS CANONIQUES (formulaires d'animation)
   Une section = un conteneur .sectionFormulaire qui porte son <h4>,
   ses champs (aide comprise) et ses sous-groupes. Le padding horizontal
   vient du contrat form > div ci-dessus ; ici, le rythme interne.
   Registre : animations/_partage/sections.json
   ============================================ */

.panneauFormulaire form > div.sectionFormulaire {
    margin-bottom: 25px;
}

.sectionFormulaire > h4 {
    margin: 0 0 12px;
}

.sectionFormulaire > div {
    margin-bottom: 12px;
}

.sectionFormulaire > :last-child {
    margin-bottom: 0;
}

/* Une zone de texte de scène prend la hauteur que son form.json demande (attr.rows), au lieu
   des 100px communs à toutes les zones de texte (form.css) — chef de projet, 2026-09-27. */
.sectionFormulaire textarea[rows] {
    height: auto;
}

/* Liste à puces dans un bloc d'information : le reset global (00_reset) retire les puces */
.panneauFormulaire .blocContenu ul {
    margin: 0 0 15px;
    padding-inline-start: 40px;
    list-style: disc;
}

.panneauFormulaire .blocContenu li {
    margin: 5px 0;
}

/* Le <hr> séparateur s'aligne sur le retrait horizontal des champs (20px) au lieu de couper toute la largeur */
.panneauFormulaire form > hr {
    margin-left: 20px;
    margin-right: 20px;
}

.panneauFormulaire form > div,
.espaceForm > div {
    margin-bottom: 15px;
}

.tableauPrevisualisation {
    width: 100%;
    border-collapse: collapse;
    margin-top: 20px;
    font: var(--fLabel);
}

.tableauPrevisualisation th,
.tableauPrevisualisation td {
    padding: 4px 8px;
    border: var(--border);
    text-align: left;
}

.tableauPrevisualisation th {
    background: var(--cBlanc02);
    font: var(--fLabel);
}

.tableauPrevisualisation .separateurPrevisualisation td {
    text-align: center;
    border: none;
    color: var(--cNoir3);
}

/* Toggle avec label — classes de base (déplacées depuis _modale.css) */
.toggleAvecLabel {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    width: 100%;
    margin: 8px 0;
    cursor: pointer;
}

.toggleLabel {
    font: var(--fMenu14);
    color: var(--cNoir2);
}

/* Toggle désactivé (bloqué) */
.toggleDisabled {
    opacity: 0.4;
    filter: grayscale(1);
    cursor: auto;
    pointer-events: none;
}

/* pointer-events:none rend le toggle transparent au survol : sans ça le cursor:pointer du label reprend la main sur toute la ligne */
.toggleAvecLabel:has(.toggleDisabled) {
    cursor: auto;
}

/* inutilisé 2026-06-14 : paramètre 'message' du toggle jamais passé par aucun appelant ; rendait un texte ROUGE d'alerte alors que décrit comme « explicatif » (ADR vérificationDocumentation, cas réel n°5)
.toggleMessage {
    font: var(--fLight14);
    color: var(--cRouge3);
}
*/

.panneauFormulaire .toggleAvecLabel {
    justify-content: space-between;
}

.panneauFormulaire form .toggleAvecLabel {
    justify-content: flex-end;
    flex-direction: row-reverse;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Ligne toggle du thème de formulaire (div.ligneToggle > label + aide) : le conteneur
   porte l'espacement de ligne, le toggle n'a plus de marge propre. Les toggles écrits
   à la main (slots de sources) gardent leur margin 8px pour s'espacer entre eux. */
.ligneToggle > .toggleAvecLabel {
    margin: 0;
}

.panneauFormulaire .formActions {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 20px;
    padding-bottom: 0;
}
/* ctaAnnuler dans le panneau : pas de margin (le noyau met 20px, inutile ici) */
.panneauFormulaire .formActions > .ctaAnnuler {
    margin: 0;
}

/* Le style des alertes (couleurs, police, padding) vient du noyau (42_auth.css) :
   ici uniquement l'alignement sur le padding latéral du formulaire */
.panneauFormulaire .alertErreur {
    margin: 0 20px 10px;
}

.panneauFormulaire .alertErreur li {
    color: inherit;
}

.panneauFormulaire .alertErreur ul {
    margin: 6px 0 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauFormulaire form > div .alertErreur {
    margin: 0 0 10px;
}

.panneauFormulaire .formActions .alertErreur {
    margin: 0;
    width: 100%;
}

.panneauFormulaire .ctaAnnuler:hover {
    text-decoration: underline;
}

/* Bouton « Remplacer par une animation similaire » : ouvre la popup des jumelles de famille
   (pas une action réelle, contrairement à Annuler/Supprimer ou Modifier voisins). Présent dans
   le formulaire d'édition ET le panneau récap (d'où .panneauGauche, leur parent commun). Même
   police et même couleur qu'Annuler/Modifier (cf. noyau 31_cta.css) : seules les actions
   marquées (Supprimer) gardent une couleur. */
.panneauGauche .lienSimilaires {
    margin: 0;
    padding: 0;
    border: none;
    background: none;
    font: var(--fText16);
    color: var(--cNoir3);
    cursor: pointer;
}

.panneauGauche .lienSimilaires:hover {
    text-decoration: underline;
}

div .ctaSupprimer {
    width: auto;
    height: auto;
    margin: 0;
    padding: 0;
    font: var(--fText16);
    color: var(--cRouge3);
    background: transparent;
    border: none;
    border-radius: 0;
    cursor: pointer;
}

div .ctaSupprimer:hover {
    text-decoration: underline;
}

div .ctaSupprimerConfirm {
    position: relative;
    isolation: isolate;
    color: var(--cBlanc);
    background: transparent;
    margin-left: 10px;
}

div .ctaSupprimerConfirm::before {
    content: '';
    position: absolute;
    inset: -5px -12px;
    background: var(--cRouge3);
    border-radius: var(--borderR1);
    z-index: -1;
    animation: confirmBgGrow 0.2s ease-out forwards;
}

@keyframes confirmBgGrow {
    from {
        transform: scale(0.7);
        opacity: 0;
    }
    to {
        transform: scale(1);
        opacity: 1;
    }
}

div .ctaSupprimerDesactive {
    opacity: 0.4;
    cursor: auto;
}

div .ctaSupprimer.hidden {
    display: none;
}

/* Champ enfant dépendant d'un autre champ (checkbox parent)
   Utilisé avec data-toggle-enfant sur le parent et classe champEnfant sur l'enfant */
.champEnfant {
    transition: 0.2s;
}

.champEnfant.inactif {
    opacity: 0.4;
    filter: grayscale(1);
    pointer-events: none;
    cursor: auto;
}

.divDistributionMode .champEnfant.inactif {
    display: none;
}

/* Séparateur discret avec texte centré (utilisé dans les slots d'entrées) */
.separateurDiscret {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    margin: 6px 0;
    color: var(--cNoir3);
    font: var(--fLight14);
}

.separateurDiscret::before,
.separateurDiscret::after {
    content: '';
    flex: 1;
    border-top: 1px solid var(--cBlanc03);
}

/* Bouton fermer le panneau formulaire */
.panneauClose {
    position: absolute;
    top: 50%;
    right: 5px;
    transform: translateY(-50%);
}

/* ============================================
   ENTRÉES GROUPES (groupes dans les animations)
   Utilise .blocEncadre comme base de design
   ============================================ */

.entreeGroupeHeader {
    margin-bottom: 10px;
}

.entreeGroupeHeader .entreeNumero {
    font: var(--fH4);
}

/* Groupe de champs en grille (option "colonnes" de form.json) : N champs par ligne.
   Surclasse le display:flex de .blocVertical ; le showIf bascule style.display (none/'') par-dessus. */
.panneauFormulaire form > div.blocVertical.champsGrille,
.sectionFormulaire > div.blocVertical.champsGrille {
    display: grid;
    gap: var(--gapDefaut) var(--gapLarge); /* aligné 6->8, 16->20px (échelle PO 2026-07-18) */
    /* Les labels n'ont pas tous la même hauteur : caler par le bas aligne les inputs d'une rangée */
    align-items: end;
}

/* Intertitre de rangée d'une grille (option "titresLignes" de form.json, ex. « Palier 1 ») */
.grilleLigneTitre {
    grid-column: 1 / -1;
    margin-top: 10px;
    color: var(--cNoir3);
    font: var(--fH4);
}

.champsGrille .grilleLigneTitre:first-child {
    margin-top: 0;
}

.panneauFormulaire form > div.blocVertical.champsGrille[data-colonnes="3"],
.sectionFormulaire > div.blocVertical.champsGrille[data-colonnes="3"] {
    grid-template-columns: repeat(3, 1fr);
}

/* Note d'aide d'un groupe (option "aide" de form.json) : pleine largeur, sous les champs. */
.grilleAide {
    display: block;
}

.champsGrille .grilleAide {
    grid-column: 1 / -1;
}

/* Questions des participants refusées : un seul cadre sous le champ, un seul fond. Seul le titre
   est rouge ; par erreur, la ligne saisie entre guillemets (chasse fixe), le message, puis le
   numéro de la ligne en petit — c'est un repère, pas ce qu'on lit d'abord (chef de projet,
   2026-10-04). Gabarit : templates/_form/_themeAuth.twig, questions_participant_row */
.erreursQuestions {
    margin-top: var(--gapMoyen);
    padding: var(--gapMoyen) 16px;
    background: var(--cRouge0);
    border: 1px solid var(--cRouge2);
    border-radius: var(--borderR1);
    color: var(--cNoir1);
}

.erreursQuestionsEntete {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--gapMoyen);
}

.erreursQuestionsTitre {
    margin: 0;
    font: var(--fText16Strong);
    color: var(--cRouge4);
}

.erreurQuestion {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin-top: var(--gapMoyen);
    font: var(--fText16);
}

/* Un filet entre deux erreurs, jamais sous le titre : la liste respire sans refaire des boîtes */
.erreurQuestion + .erreurQuestion {
    padding-top: var(--gapMoyen);
    border-top: 1px solid var(--cRouge2);
}

.erreurQuestionTexte span {
    font: var(--fMono16);
    overflow-wrap: anywhere;
}

.erreurQuestionLigne {
    font: var(--fLabel);
    font-style: italic;
    color: var(--cNoir3);
}

/* Bouton copier à icône (data-copier-icone) : l'icône seule ; une fois copié, le mot que le
   gabarit a placé dans .ctaCopierIconeCopie paraît à sa gauche */
.ctaCopierIcone {
    display: inline-flex;
    flex-direction: row-reverse;
    align-items: center;
    gap: var(--gapDefaut);
    padding: 4px;
    background: none;
    border: none;
    color: var(--cNoir2);
    font: var(--fLabel);
    cursor: pointer;
}

.ctaCopierIcone svg {
    width: 20px;
    height: 20px;
}

.ctaCopierIcone:hover {
    color: var(--cNoir1);
}

.ctaCopierIconeCopie {
    display: none;
}

.ctaCopierIcone.copie {
    color: var(--cSucces4);
    cursor: default;
}

.ctaCopierIcone.copie .ctaCopierIconeCopie {
    display: inline;
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_faqEncadre.css ***!
  \********************************************************************************************************************************************/
/* ============================================
   UNE QUESTION MISE EN ÉVIDENCE — balise Markdown `faq:identifiant` (BaliseFaq, noyau)

   Un cadre au fil d'un panneau d'aide (.panneauAide) : la question en tête, la réponse
   dessous, toujours visible. Rien ne se replie — on met en évidence, on ne cache pas
   (décision du chef de projet, 2026-09-05). Le HTML est celui du noyau, le même que dans
   un article de la Vitrine (faq.css) ; seul l'habillage est d'ici.

   Le cadre est celui des blocs de formulaire (.blocEncadre : filet, coins, ombre interne),
   posé sur un élément que le Markdown produit — on ne peut pas y mettre la classe. Le
   panneau d'aide règle déjà ses p, h3, ul et li : la réponse en hérite, on ne redit rien.
   La question est un <p> comme les autres : sa règle doit gagner sur `.panneauAide p`.
   ============================================ */

.faqEncadre {
    margin: 20px 0;
    padding: 15px;
    box-shadow: var(--ombreInterne);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.faqEncadre .faqEncadreQuestion {
    margin: 0 0 10px;
    font: var(--fText16Strong);
    color: var(--cNoir1);
}

.faqEncadreReponse > :first-child {
    margin-top: 0;
}

.faqEncadreReponse > :last-child {
    margin-bottom: 0;
}

/* Un sous-titre de réponse n'a pas les 40px de haut d'un h3 de panneau : il vit dans un
   cadre déjà serré. */
.faqEncadre .faqEncadreReponse h3 {
    margin: 16px 0 6px;
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_ongletMenu.css ***!
  \********************************************************************************************************************************************/
/* ============================================
   TOGGLE MENU - Classe de base réutilisable
   Scene slide fluide entre les onglets
   ============================================ */

.divOngletMenu {
    display: flex;
    position: relative;
    gap: var(--gapReduit);
    margin-bottom: 20px;
    padding: 0;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    width: fit-content;
    max-width: 100%;
    overflow-x: auto;
}

/* Indicateur qui slide — toujours la couleur Accent de la page (le mode de l'onglet
   principal la fixe par la classe du <body>) : plus de couleur par type d'onglet. */
.indicateurOnglet {
    position: absolute;
    top: 0;
    bottom: 0;
    background: var(--cAccent_a);
    transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    background 0.35s ease;
    z-index: 0;
    pointer-events: none;
}

/* Switch Configurer / Tester / Diffuser */
#divOngletModeWrapper {
    position: relative;
}

#divOngletMode {
    display: flex;
    margin-bottom: 20px;
    border-bottom: 1px solid var(--cNoir1);
    overflow: hidden;
}

#divOngletMode .ongletMode {
    padding: 8px 18px;
    font: var(--fMenu14);
    color: var(--cNoir3);
    background: transparent;
    user-select: none;
}

#divOngletMode .ongletMode.actif {
    color: var(--cBlanc1);
    background: var(--cAccent3);
    cursor: default;
    pointer-events: none;
}

#divOngletMode .ongletMode.desactive {
    color: var(--cNoir5);
}

/* Onglet Supprimer : rouge (action destructive), comme le lien Supprimer de la liste */
#divOngletMode .ongletMode[data-mode="supprimer"].actif {
    color: var(--cBlanc1);
    background: var(--cRouge4);
}

/* Rappel de l'icône engrenage du titre dans l'onglet Configurer */
#divOngletMode .ongletMode[data-mode="config"] {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut); /* aligné 7 -> 8px (échelle PO 2026-07-18) */
}

#divOngletMode .ongletMode[data-mode="config"] svg {
    width: 16px;
    height: 16px;
}

/* Alerte redirection (test/diffusion en cours) */
.alerteRedirection {
    position: absolute;
    left: 0;
    right: 0;
    background: var(--cRouge3);
    color: var(--cBlanc);
    font: var(--fCta16);
    padding: 12px 30px;
    text-align: center;
    border-radius: var(--borderR1);
    box-shadow: var(--ombrePortee);
    z-index: 10;
    animation: alerteApparition 0.3s ease;
}

@keyframes alerteApparition {
    from {
        opacity: 0;
        transform: translateY(-10px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Boutons */
.onglet {
    position: relative;
    z-index: 1;
    padding: 10px 20px;
    border: none;
    font: var(--fMenu14);
    cursor: pointer;
    background: transparent;
    color: var(--cNoir2);
    user-select: none;
}

/* Étoile de rappel « à configurer » (classe définie dans _grille.css) : hors flux comme sur
   la brique, sinon ses 20px grandiraient la ligne de l'onglet, qui est en 14px — et seuls
   les onglets étoilés deviendraient plus hauts que leurs voisins. Elle se pose dans le
   padding droit de l'onglet, jamais par-dessus le libellé. */
.onglet .pastilleProvisoire {
    position: absolute;
    top: 0;
    right: 6px;
}

.onglet.actif .pastilleProvisoire {
    color: var(--cBlanc1);
    opacity: .5;
}

.onglet:hover:not(.actif) {
    color: var(--cNoir1);
}

.onglet.actif {
    color: var(--cBlanc1);
    cursor: default;
}

/* ============================================
   MINI-MENU DES PANNEAUX D'AIDE — .ongletMenuAide

   Le seul menu d'onglets qui ne prend pas la couleur de sa famille. Il vit DANS un texte
   d'aide, où tout est noir : un pavé violet ou bleu au milieu du texte ne dit rien, il fait
   juste une tache. Il reprend donc, à l'identique, le toggle de la barre d'actions d'une
   scène (.toggleSceneGroupe, _toggleScene.css) : fond gris, pavé blanc bordé de noir qui
   glisse, libellés en noir. Un seul dessin de « choix entre deux mots » dans le studio.

   Il sert les panneaux de scène (_aideScene.twig) comme ceux des formulaires
   (_aideMarkdown.twig) : participants, lots, configuration.
   ============================================ */

.divOngletMenu.ongletMenuAide {
    gap: 0; /* les deux moitiés se touchent, comme le toggle de la barre d'actions */
    background: var(--cBlanc03);
}

/* Plus fort que la couleur Accent de .indicateurOnglet :
   ce pavé-là reste blanc, quel que soit le mode de la page qui l'affiche. */
.divOngletMenu.ongletMenuAide .indicateurOnglet {
    background: var(--cBlanc1);
    border: 1px solid var(--cNoir1);
    border-radius: var(--borderR1);
    transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    border-radius 0.35s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Le pavé épouse le bord du menu du côté où il est collé, et reste carré côté intérieur —
   ce que le toggle de la barre d'actions calcule en JS (BoutonsActions.ts). Ici le menu n'a
   jamais que deux onglets : le CSS suffit à savoir lequel est actif, sans toucher au module
   d'indicateur partagé par tous les autres menus (ongletIndicateur.ts). */
.divOngletMenu.ongletMenuAide:has(.onglet:first-of-type.actif) .indicateurOnglet {
    border-radius: var(--borderR1) 0 0 var(--borderR1);
}

.divOngletMenu.ongletMenuAide:has(.onglet:last-of-type.actif) .indicateurOnglet {
    border-radius: 0 var(--borderR1) var(--borderR1) 0;
}

/* Silhouette du bouton compact, celle du toggle de la barre d'actions. */
.divOngletMenu.ongletMenuAide .onglet {
    padding: var(--paddingCta14);
    color: var(--cNoir3);
    border-radius: var(--borderR1);
}

/* Actif : le mot passe au noir plein, il ne blanchit pas — c'est le pavé qui est blanc. */
.divOngletMenu.ongletMenuAide .onglet.actif {
    color: var(--cNoir1);
}

.divOngletMenu.ongletMenuAide .onglet.actif .pastilleProvisoire {
    color: var(--cNoir1);
}

/* Masquer les toggles section non pertinents */
.divOngletMenu.masque {
    display: none;
}

/* Masquer les boutons individuels non pertinents */
.onglet.masque {
    display: none;
}

/* Responsive */
@media (max-width: 999px) {
    #divOngletSections {
        display: none;
    }
}

@media (max-width: 600px) {
    .onglet {
        flex-shrink: 0;
        white-space: nowrap;
    }
}

/*!*********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_menuAjouter.css ***!
  \*********************************************************************************************************************************************/
/* ============================================
   MENU AJOUTER (Choix d'élément à créer)
   ============================================ */

.menuAjouter h3 {
    margin: 0 0 20px 0;
    font: var(--fH3);
}

.ligneSections {
    display: flex;
    flex-wrap: wrap;
    gap: 0 182px; /* Vertical: 0 (géré par margin-bottom) | Horizontal: largeur d'une brique */
}

.ligneSections .sectionAjouter {
    flex: 0 0 auto; /* Ne pas étirer, garder la taille naturelle */
}

.sectionAjouter {
    margin-bottom: 25px;
}

/* Masquage initial pour éviter le flash (desktop uniquement) */
@media (min-width: 1000px) {
    .sectionAjouter[data-section] {
        display: none;
    }

    .sectionAjouter[data-section].visible {
        display: block;
    }
}

.sectionAjouter h4 {
    margin: 0 0 10px 0;
    font: var(--fMenu14);
    color: var(--cNoir3);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.sectionAjouter h4::before {
    content: "+ ";
}

.briquesAjouter {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

.briqueGroupes::before {
    color: var(--cAccent2);
}

.briqueDistributions::before {
    color: var(--cAccent2);
}

.briqueConfigurations::before {
    color: var(--cAccent2);
}

.briqueAffichages::before {
    color: var(--cAccent2);
}

.briqueScenes::before {
    color: var(--cAccent2);
}

.brique.briqueDistributions,
.brique.briqueGroupes {
    border-radius: var(--borderR1);
}

/* Filtre par tags et entrées dans la section Scenes :
   le design du panneau vient du composant commun (55_filtres.css). */

.divFiltreZone .briquesAjouter {
    flex: 1;
    min-width: 0;
}

.briqueScenes.masque {
    display: none;
}

.briqueGroupes {
    background: var(--cAccent1);
}

.briqueDistributions {
    background: var(--cAccent1);
}

.briqueConfigurations {
    background: var(--cAccent1);
}

.briqueAffichages {
    background: var(--cAccent1);
}

.briqueScenes {
    background: var(--cAccent1);
}

/*!*************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_briquesCouleurs.css ***!
  \*************************************************************************************************************************************************/
/* ============================================
   BRIQUES DU SCÉNARIO PAR TYPE
   ============================================ */

/* Brique Brouillon (en cours de création) */
.briqueBrouillon {
    opacity: 0.7;
    border-style: dashed;
}

/* Couleurs des briques du scénario par type */
.brique.briqueGroupes { background: var(--cAccent1); }
.brique.briqueDistributions { background: var(--cAccent1); }
.brique.briqueConfigurations { background: var(--cAccent1); }
.brique.briqueAffichages { background: var(--cAccent1); }
.brique.briqueScenes { background: var(--cAccent1); }

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_dragDrop.css ***!
  \******************************************************************************************************************************************/
/* ============================================
   DRAG & DROP
   ============================================ */

.handleDrag {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 18px;
    height: 12px;
    color: var(--cNoir3);
    opacity: 0.4;
    transition: opacity 0.2s;
}

.handleDrag:hover {
    opacity: 1;
    cursor: grab;
}

.handleDrag:active {
    cursor: grabbing;
}

/* Grille statique (page « Voir la config » des aperçus) : la poignée reste un repère visuel, sans affordance de drag */
.scenarioGrilleStatique .handleDrag:hover {
    opacity: 0.4;
    cursor: default;
}

/* État pendant le drag */
.briqueDraggable.dragging {
    opacity: 0.5;
    border-style: dashed;
    cursor: grabbing;
}

/* Zone de drop */
#scenarioGrille.formulaireActif:hover .brique.dragOver,
.brique.dragOver {
    box-shadow: -4px -4px 0 var(--cAccent3);
    transform: translate(4px, 4px) scale(1);
    transition: .5s ease;
}

/* Scene FLIP au drop */
.brique.animeDrop {
    transition: transform 0.25s ease;
}

/* Fantôme pendant le drag */
.dragFantome {
    opacity: 0.9;
    box-shadow: var(--ombrePortee);
    cursor: grabbing;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/boutonFermeture.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   BOUTON DE FERMETURE (.modaleClose) — source unique (docs/designSystem/boutonFermeture.md)

   La croix est dessinée par ::before (mask SVG ci-dessous) : en HTML le bouton reste VIDE —
   ne JAMAIS y mettre × / &times; / texte. Réutilisable : VIDE = croix centrée ; avec un
   enfant .modaleCloseTexte = la même boîte s'élargit et un libellé s'ajoute à GAUCHE de la
   croix (ex. « Prendre la main ✕ »). Pas de padding horizontal : la croix a déjà ~6px de
   marge interne à droite (mask 6→18 sur viewBox 24), c'est .modaleCloseTexte qui redonne
   le même air à gauche → équilibré.

   Ici la silhouette GÉNÉRALE (boîte souple, croix 20px — barre d'aperçu écran). Les
   contextes n'écrivent que leurs écarts, APRÈS leur @import de ce fichier :
   - modales Studio (56_scenario/_modale.css) : boîte fixe 44×44, croix 24 ;
   - surcouche aperçu (composants/surcouchePreview.css) : idem + masque « plein écran ».
   ============================================ */

.modaleClose {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 25px;
    padding: var(--gapDefaut) var(--gapReduit); /* vertical aligné sur .cta14 (même rythme dans la barre aperçu) */
    gap: var(--gapDefaut);
    border: none;
    border-radius: var(--borderR1);
    background: transparent;
    cursor: pointer;
    transition: background 0.2s;
}

.modaleClose::before {
    content: '';
    order: 1; /* croix à droite d'un éventuel .modaleCloseTexte (seule = centrée, inchangé) */
    width: 20px;
    height: 20px;
    background-color: var(--cNoir1);
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
}

.modaleClose:hover {
    background: var(--cBlanc02);
}

/* Libellé optionnel à gauche de la croix (cf. en-tête). Le padding gauche donne au texte
   le même air (~6px) que la marge interne de la croix à droite → visuellement équilibré. */
.modaleCloseTexte {
    padding-left: var(--gapReduit);
    font: var(--fMenu14);
    color: var(--cNoir1); /* même teinte que la croix */
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_modale.css ***!
  \****************************************************************************************************************************************/
/* Bouton de fermeture (.modaleClose) : silhouette et croix dans le composant — ici,
   plus bas, uniquement l'écart des modales Studio (boîte fixe 44×44, croix 24). */

/* ============================================
   BOUTONS BRIQUE ANIMATION (info + aperçu)
   Groupés en haut à droite, côte à côte
   ============================================ */

.boutonsBriqueScene {
    position: absolute;
    top: 3px;
    right: 3px;
    display: flex;
    gap: 2px;
    z-index: 2;
}

.boutonsBriqueScene button {
    width: 22px;
    height: 22px;
    padding: 3px;
    border: none;
    border-radius: 4px;
    background: var(--cBlanc);
    box-shadow: 0 1px 3px var(--cOmbre);
    cursor: pointer;
    opacity: 0.7;
    transition: opacity 0.15s, background 0.15s;
}

.boutonsBriqueScene button:hover {
    opacity: 1;
    background: var(--cBlanc);
    box-shadow: 0 1px 4px var(--cOmbreForte);
}

.boutonsBriqueScene button svg {
    width: 100%;
    height: 100%;
    display: block;
    color: var(--cNoir2);
}

/* ============================================
   MODALE - STYLES GÉNÉRIQUES
   ============================================ */

.modale {
    border: none;
    border-radius: var(--borderR1);
    padding: 0;
    max-width: 500px;
    width: 90vw;
    max-height: 80vh;
    box-shadow: var(--ombreModale);
    background: transparent;
}

.modale::backdrop {
    background: var(--cOverlay);
}

.modaleContenu {
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    max-height: 80vh;
}

/* ============================================
   MODALE - VARIANTES PAR CONTEXTE
   ============================================ */

/* Scenes : header jaune, plus large */
.modaleScenes {
    max-width: 600px;
}

.modaleScenes .modaleHeader {
    background: var(--cAccent1);
}

/* Participants : header cyan */
.modaleParticipants .modaleHeader {
    background: var(--cAccent1);
}

/* Mode test : header lavande */
.modaleHeaderTest {
    background: var(--cAccent1) !important;
}

/* Récap erreur : header rouge, plus large pour le stepper */
.modaleRecap {
    max-width: 600px;
}

.modaleRecap .modaleHeader {
    background: var(--cBlanc);
    padding-left: 20px;
}

.modaleHeader {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 5px;
    background: var(--cAccent1);
    border-bottom: var(--border);
    flex-shrink: 0;
}

.modaleHeader h3 {
    flex: 1;
    margin: 0;
    font: var(--fH3);
}

.modaleIcone {
    width: 40px;
    height: 40px;
    object-fit: contain;
}

/* Bouton de fermeture : silhouette et croix dans composants/boutonFermeture.css (importé en
   tête). Ici l'écart des modales Studio : boîte fixe 44×44, croix 24. */
.modaleClose {
    width: 44px;
    height: 44px;
    padding: 0;
}

.modaleClose::before {
    width: 24px;
    height: 24px;
}

.modaleCorps {
    padding: var(--paddingCorps);
    overflow-y: auto;
    font: var(--fText16);
    color: var(--cNoir2);
    /* Scroll auto quand la modale dépasse 80vh : sans min-height:0 le corps ne shrink pas
       sous son contenu et le bas serait clippé. Le header (flex-shrink:0) reste visible. */
    min-height: 0;
}

/* Barre de scroll VISIBLE (non-overlay) : l'utilisateur doit voir qu'il peut scroller, sinon il
   ne comprend pas qu'il manque du contenu. Même pattern que la pop-up de saisie (saisie.css).
   Pas de scrollbar-color : sur Chrome ≥121 il désactiverait ces règles et remettrait la barre
   overlay auto-masquée. */
.modaleCorps::-webkit-scrollbar {
    width: 12px;
}

.modaleCorps::-webkit-scrollbar-track {
    background: var(--cBlanc2);
    border-radius: var(--borderR1);
}

.modaleCorps::-webkit-scrollbar-thumb {
    background: var(--cNoir4);
    border-radius: var(--borderR1);
}

.modaleCorps h1,
.modaleCorps h2,
.modaleCorps h3 {
    margin-top: 1em;
    margin-bottom: 0.5em;
}

.modaleCorps h1:first-child,
.modaleCorps h2:first-child,
.modaleCorps h3:first-child {
    margin-top: 0;
}

.modaleCorps p {
    margin: 0.5em 0;
}

.modaleErreur {
    padding: 40px;
    text-align: center;
    font: var(--fText16);
    color: var(--cNoir3);
}

.modaleErreur {
    color: var(--cRouge3);
}

/* ============================================
   MODALE - BARRE D'OUTILS
   ============================================ */

.modaleBarreOutilsFlex {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: var(--border);
}

.modaleCompteur {
    font: var(--fCta16);
    color: var(--cNoir1);
}

/* ============================================
   MODALE - BOUTONS DE TRI / ACTIONS
   ============================================ */

.modaleBoutons {
    display: flex;
    gap: var(--gapDefaut);
}

/* Le bouton discret (ex-ctaModale, renommé 2026-07-18 : né dans les modales, il
   vit partout — blocs d'onglet, formulaires, TS). Même padding que tous les
   boutons compacts : --paddingCta14 (décision PO 2026-07-18, un .ctaDiscret côtoie
   un .cta14 dans les barres — deux paddings différents, c'est ultra visible). */
/* ⚠️ La base .ctaDiscret (base + hover + désactivé ci-dessous) est copiée dans
   studioVitrine/assets/vitrine/css/ctaDiscret.css (boutons des cartes de la page aperçu).
   Si tu modifies ces règles → demander au PO s'il faut la répercuter sur la copie vitrine.
   Les variantes .ctaDiscret.actif contextuelles (modales) restent propres au studio. */
.ctaDiscretPrimaire,
.ctaDiscret {
    display: inline-block; /* un <a> hors barre flex reste un bouton (padding vertical réel) — même règle que .cta14 */
    text-decoration: none;
    padding: var(--paddingCta14);
    text-align: center;
    border: var(--borderCta);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    font: var(--fMenu14);
    color: var(--cCtaTexte);
    cursor: pointer;
    user-select: none;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.ctaDiscret:hover {
    background: var(--cBlanc02);
}
.ctaDiscretPrimaire:disabled,
.ctaDiscret:disabled {
    opacity: 0.4;
    cursor: auto;
}

.ctaDiscretPrimaire {
    background: var(--cAccent_a);
    color: var(--cAccentt);
}

.ctaDiscretPrimaire:hover {
    background: var(--cAccent_ah);
    color: var(--cAccentt);
}

/* Variante <a> désactivé (un lien ne connaît pas :disabled) — le bleu comme le gris : à la
   limite d'événements, le bouton de création de la liste est un <a> lui aussi. */
.ctaDiscret.disabled,
.ctaDiscretPrimaire.disabled {
    opacity: 0.4;
    pointer-events: none;
}

.ctaDiscret:disabled:hover {
    background: var(--cBlanc);
}

.ctaDiscret.actif {
    color: var(--cNoir1);
}

/* Couleur du bouton actif selon le contexte */
.modaleParticipants .ctaDiscret.actif {
    background: var(--cAccent1);
    border-color: var(--cAccent2);
}

.modaleScenes .ctaDiscret.actif {
    background: var(--cAccent1);
    border-color: var(--cAccent2);
}

.modaleDistributions .ctaDiscret.actif {
    background: var(--cAccent1);
    border-color: var(--cAccent2);
}

/* Mode test : bouton actif lavande */
.modaleCorpsTest .ctaDiscret.actif {
    background: var(--cAccent1);
    border-color: var(--cAccent3);
}

/* Label "Données de test" sous le compteur */
.modaleTestLabel {
    display: block;
    font: var(--fLight14);
    color: var(--cAccent3);
}

/* ============================================
   MODALE - TOGGLE ACTIF/DÉSACTIVÉ
   ============================================ */

.toggleActif {
    position: relative;
    display: inline-block;
    width: 38px;
    height: 22px;
    cursor: pointer;
    flex-shrink: 0;
}

.toggleActif input {
    opacity: 0;
    width: 0;
    height: 0;
}

.toggleSlider {
    position: absolute;
    inset: 0;
    background: var(--cBlanc03);
    border: var(--borderForm);
    border-radius: 20px;
    transition: background 0.2s;
}

.toggleSlider::before {
    content: '';
    position: absolute;
    width: 16px;
    height: 16px;
    left: 2px;
    bottom: 2px;
    background: var(--cBlanc);
    border-radius: 50%;
    transition: transform 0.2s;
}

.toggleActif input:checked + .toggleSlider {
    background: var(--cAccent3);
}

.toggleActif input:checked + .toggleSlider::before {
    transform: translateX(16px);
}

/* Lettres trouvées par la recherche (≥4 caractères) — couleur plutôt que gras. */
.rechercheMatch {
    color: var(--cAccent3);
}

/* État banni */
.participantBanni {
    opacity: 0.5;
}

.participantBanni .participantNom {
    text-decoration: line-through;
    color: var(--cNoir4);
}

/* ============================================
   MODALE - PRÉVISUALISATION DISTRIBUTION
   ============================================ */

.modaleDistributions .modaleHeader {
    background: var(--cAccent1);
}

/* inutilisé 2026-06-13
.modaleAvertissement {
    font: var(--fLight14);
    color: var(--cNoir4);
}
*/

.listePrevisualisation {
    list-style: none;
    padding: 0;
    margin: 12px 0;
}

.listePrevisualisation .blocItem {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    padding: 10px 0;
    background: transparent;
    border-radius: 0;
    border-bottom: var(--border);
}

.listePrevisualisation .blocItem:last-child {
    border-bottom: none;
}

.previsualiserNumero {
    font: var(--fCta16);
    color: var(--cNoir3);
    min-width: 28px;
    text-align: center;
}

.previsualiserMinute {
    font: var(--fMenu14);
    color: var(--cNoir4);
    min-width: 36px;
    text-align: right;
}

.previsualiserPerdant {
    font: var(--fLight14);
    color: var(--cRouge3);
}

.previsualiserIntervalle {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
}

.previsualiserIntervalleLabel {
    font: var(--fMenu14);
    color: var(--cNoir2);
}

.previsualiserRaison {
    font: var(--fLight14);
    color: var(--cNoir4);
    min-width: 20px;
    text-align: center;
}

/* inutilisé 2026-06-13
.previsualiserPied {
    padding: 12px 20px;
    text-align: center;
    border-top: var(--border);
    background: var(--cBlanc);
}
*/

/* ============================================
   MODALE - VOCABULAIRE DE L'ANIMATION
   ============================================ */

/* Lien discret sous les champs de l'animation, ouvre la modale de vocabulaire. */
.vocabulaireScene {
    margin-top: 12px;
}

.vocabulaireLien {
    color: var(--cAccent3);
    cursor: pointer;
    font: var(--fText16);
}

.vocabulaireLien:hover {
    color: var(--cAccent4);
    text-decoration: underline;
}

.vocabulaireChamp {
    margin-bottom: 12px;
}

/* Bouton aligné sur le bord gauche des champs (pas de ré-indentation, contrairement à .formActions). */
.vocabulaireActions {
    margin-top: 12px;
}

/* Séparateur menu / mots : gap délibéré et équilibré (le hr global est à 30px, trop). Le champ
   au-dessus a déjà 12px de marge basse → 4px en haut + 16px en bas = 16px de chaque côté. */
.modaleVocabulaire hr {
    margin: 4px 0 16px;
}

.vocabulaireChamp label {
    display: block;
    margin-bottom: 4px;
    font: var(--fLabel);
    color: var(--cNoir2);
}

/* Pas d'icône ici : on aligne le titre sur le corps (comme .modaleRecap). */
.modaleVocabulaire .modaleHeader {
    padding-left: 20px;
}

/* ============================================
   MODALE « ANIMATIONS SIMILAIRES »
   Jumelles de famille d'une animation du scénario
   ============================================ */

.modaleSimilaires {
    max-width: 520px;
}

/* Pas d'icône ici non plus : titre aligné sur le corps (comme .modaleRecap). */
.modaleSimilaires .modaleHeader {
    background: var(--cBlanc);
    padding-left: 20px;
}

.modaleSimilaires .modaleCorps {
    padding: 16px 20px;
}

.similairesIntro {
    margin: 0 0 12px;
    color: var(--cNoir3);
}

.similairesListe {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

.similairesCarte {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 12px;
    border: var(--border);
    border-radius: var(--borderR2);
}

/* Carte de l'animation en place : fond discret, pas de bouton (juste le libellé d'état) */
.similairesCarteActuelle {
    background: var(--cBlanc02);
}

/* 52px de dessin, la petite des deux tailles du projet (54_icones.css), sans air. */
.similairesIcone {
    width: 52px;
    height: 52px;
    object-fit: contain;
    flex-shrink: 0;
}

.similairesInfos {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
}

.similairesInfos h4 {
    margin: 0;
}

.similairesActuelle {
    font: var(--fMenu14);
    color: var(--cNoir3);
}

.similairesActions {
    display: flex;
    align-items: center;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_alertes.css ***!
  \*****************************************************************************************************************************************/
/* ========================================
   Formulaire actif : atténuation des briques
   ======================================== */

/* Atténuation des briques non actives quand un formulaire est ouvert */
#scenarioGrille.formulaireActif .brique:not(.briqueActive):not(:hover),
.briquesAjouter.formulaireActif .brique:not(.briqueActive):not(:hover) {
    background: transparent;
    border-color: var(--cNoir5);
    opacity: .7;
}

/* Atténuation des briques quand le menu d'ajout est ouvert (sauf brique +) */
#scenarioGrille.menuAjouterActif .brique:not(.briqueAjouter) {
    background: transparent;
    border-color: var(--cNoir5);
    opacity: .7;
}

/* ========================================
   Scene après confirmation
   ======================================== */

@keyframes briqueRetour {
    from {
        opacity: .7;
        background: transparent;
    }
    to {
        opacity: 1;
    }
}

#scenarioGrille.apresConfirmation .brique:not(.briqueModifiee) {
    animation: briqueRetour 0.4s ease forwards;
}

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_uploads.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   APERÇU DES IMAGES (Formulaire upload)
   ============================================ */

.champAvecVignette {
    margin-bottom: 15px;
}

/* .vignetteImageExistante utilise .blocEncadre (défini dans _formulaires.css) */

.vignetteImageExistante img {
    max-width: 200px;
    max-height: 120px;
    object-fit: contain;
    display: block;
    margin: 10px 0;
}

/* ============================================
   GALERIE PUBLIQUE (modale de choix d'image)
   ============================================ */

/* Règle d'autorité : les états du champ image sont pilotés par l'attribut hidden
   (galerieImages.ts). Sans !important, les display posés ailleurs (ex. noyau
   button.ctaAnnuler { display: block }) gagnent sur le hidden du navigateur. */
.champAvecVignette [hidden] {
    display: none !important;
}

/* Séparateur entre les deux façons de choisir (upload « ou charger depuis : » galeries) */
.champChoixImage .galerieOu {
    color: var(--cNoir3);
    margin: 2px 0;
    padding: 0;
    font: var(--fLabel);
}
.champChoixImage label {
    margin-bottom: 4px;
}

/* Rangée des boutons de galeries (publique / événement / toutes mes images) */
.galerieBoutons {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gapMoyen);
}

.galerieGrille {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: var(--gapMoyen);
    padding: 20px;
}

.galerieVignette {
    border: none;
    padding: 0;
    background: transparent;
    cursor: pointer;
}

.galerieVignette img {
    width: 100%;
    aspect-ratio: 16 / 9;
    object-fit: contain;
    display: block;
    border-radius: var(--borderR1);
}

.galerieVignette:hover img {
    box-shadow: 0 1px 4px var(--cOmbreForte);
}

/* ============================================
   FORMULAIRE LOTS DYNAMIQUE
   ============================================ */

#distributionsContainer {
    margin-bottom: 20px;
}

/* .distributionItem utilise .blocEncadre (défini dans _formulaires.css) */

/* Le bouton supprimer de lot utilise .ctaSupprimer (défini dans _formulaires.css) */
.distributionItem > .ctaSupprimer {
    margin-top: 15px;
}

.distributionItemRow {
    display: flex;
    gap: var(--gapLarge);
    margin-bottom: 10px;
}

.distributionItemLabel {
    flex: 1;
}

.distributionItemStock {
    width: 100px;
    flex-shrink: 0;
}

/* inutilisé 2026-06-13
.distributionItem .champFormulaire {
    margin-bottom: 10px;
}
*/

@media (max-width: 650px) {
    .distributionItemRow {
        flex-direction: column;
        gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    }
}

#btnAjouterDistribution, #btnAjouterEquipe {
    font: var(--fText16);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
    margin: 0 20px 20px 20px;
}

#btnAjouterDistribution {
    color: var(--cAccent4);
}

/* Source Équipes : couleur de la section Participants */
#btnAjouterEquipe {
    color: var(--cAccent4);
}

#btnAjouterDistribution:hover, #btnAjouterEquipe:hover {
    text-decoration: underline;
}

/*!**************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_blocReseauSocial.css ***!
  \**************************************************************************************************************************************************/
/* ============================================
   BLOCS RÉSEAUX SOCIAUX - Styles communs
   Facebook, Instagram, LinkedIn
   ============================================ */

/* Bloc connexion (wrapper) */
.blocConnexion {
    margin: 10px 0 20px;
}

/* Bouton de connexion - classe commune */
.btnConnexion {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut);
    padding: 10px 20px;
    color: var(--cBlanc);
    border: none;
    border-radius: var(--borderR1);
    font: var(--fCta16);
    cursor: pointer;
}

.btnConnexion:disabled {
    background: var(--cBlanc03);
}

/* Variantes par réseau */
.btnConnexion.facebook {
    background: #1877F2; /* Couleur officielle de la marque Facebook */
    transition: background 0.2s;
}

.btnConnexion.facebook:hover {
    background: #166FE5; /* Couleur officielle de la marque Facebook (hover) */
}

.btnConnexion.instagram {
    background: linear-gradient(45deg, #FCAF45, #E1306C, #833AB4); /* Gradient officiel de la marque Instagram */
    transition: opacity 0.2s;
}

.btnConnexion.instagram:hover {
    opacity: 0.9;
}

.btnConnexion.linkedin {
    background: linear-gradient(135deg, #0077B5, #0A66C2); /* Gradient officiel de la marque LinkedIn */
    transition: opacity 0.2s;
}

.btnConnexion.linkedin:hover {
    opacity: 0.9;
}

/* Icône dans le bouton */
.iconeReseau {
    width: 20px;
    height: 20px;
}

/* ============================================
   État connecté (utilisé par tous les réseaux)
   ============================================ */

.connexionActive {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 15px;
    background: var(--cSucces0);
    border: 1px solid var(--cSucces3);
    border-radius: var(--borderR1);
}

.iconeConnecte::before {
    content: '✓';
    color: var(--cSucces3);
    font-weight: bold;
}

.pageConnectee {
    font: var(--fText16);
    color: var(--cNoir1);
}

.btnDeconnecter {
    margin-left: auto;
    padding: 5px 10px;
    background: transparent;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir2);
    cursor: pointer;
}

.btnDeconnecter:hover {
    background: var(--cNoir5);
}

/* ============================================
   Alertes et messages
   ============================================ */

/* Fond pâle, texte sombre, lien rouge foncé — le dessin de .erreursQuestions (_formulaires.css).
   Avant : fond --cRouge4 (rouge foncé) sous du texte --cNoir1, illisible (bilan du 2026-10-04, n° 22). */
.alerteTokenExpire {
    margin-top: 10px;
    padding: 10px 15px;
    background: var(--cRouge0);
    border: 1px solid var(--cRouge2);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir1);
}

.alerteTokenExpire a {
    color: var(--cRouge4);
    text-decoration: underline;
}

.messageInfo {
    padding: 10px 15px;
    background: var(--cNoir5);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir2);
}

/* ============================================
   Bloc publication/media (sélection de contenu)
   ============================================ */

.blocPublication,
.blocMedia {
    margin: 20px 0;
}

.blocPublication label,
.blocMedia label {
    display: block;
    margin-bottom: 5px;
    font: var(--fText16);
    color: var(--cNoir1);
}

.selectPublication,
.selectMedia {
    width: 100%;
    max-width: 400px;
    padding: 10px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    background: var(--cBlanc);
}

.selectPublication:disabled,
.selectMedia:disabled {
    background: var(--cNoir5);
}

.btnRefreshPublications,
.btnRefreshMedias {
    margin-left: 10px;
    padding: 10px 12px;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font-size: 16px;
    cursor: pointer;
    vertical-align: middle;
}

.btnRefreshPublications:hover,
.btnRefreshMedias:hover {
    background: var(--cNoir5);
}

.publicationSelectionnee,
.mediaSelectionne {
    margin-top: 5px;
    font: var(--fLight14);
    color: var(--cSucces3);
}

/* ============================================
   Bloc actualisation
   ============================================ */

.infoActualisation {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.labelActualisation {
    font: var(--fText16);
    color: var(--cNoir2);
}

.tempsRelatif {
    font: var(--fText16);
    font-weight: 600;
    color: var(--cNoir1);
}

.nombreParticipants {
    font: var(--fText16);
    font-weight: 600;
    color: var(--cNoir1);
}

.btnActualiser {
    padding: 10px 20px;
    background: var(--cAccent_a);
    color: var(--cBlanc);
    border: none;
    border-radius: var(--borderR1);
    font: var(--fCta16);
    cursor: pointer;
    transition: background 0.2s;
}

.btnActualiser:hover {
    background: var(--cAccent_ah);
}

.btnActualiser:disabled {
    background: var(--cBlanc03);
}

.erreurToken {
    margin-top: 10px;
    font: var(--fLight14);
    color: var(--cRouge3);
}

.blocActualisation .messageAide {
    margin-top: 10px;
    font: var(--fLight14);
    color: var(--cNoir3);
}

/*!***********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_ongletGroupes.css ***!
  \***********************************************************************************************************************************************/
/* ============================================
   ONGLET PARTICIPANTS - Styles spécifiques
   ============================================

   Les styles communs des blocs sont dans 53_blocs.css
   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet participants.

   ============================================ */

/* Conteneur des blocs (commun participants et lots) */
.groupesListe,
.distributionsListe {
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* Message si vide (commun participants et lots) */
.groupesVide,
.distributionsVide {
    font: var(--fText16);
    color: var(--cNoir3);
    padding: 40px 20px;
    text-align: center;
    background: var(--cBlanc02);
    border-radius: var(--borderR2);
}

/* Liste des participants dans la modale */
.listeParticipants {
    list-style: none;
    margin: 0;
    padding: 0;
}

.listeParticipants li {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 10px 0;
    border-bottom: var(--border);
}

.listeParticipants li:last-child {
    border-bottom: none;
}

.participantNom {
    flex: 1;
    font: var(--fText16);
    color: var(--cNoir1);
}

.participantChances {
    font: var(--fLight14);
    color: var(--cNoir3);
}

.modaleVide {
    color: var(--cNoir3);
    text-align: center;
    padding: var(--paddingCorps);
}

/* ============================================
   TOGGLE MENU PARTICIPANTS
   Réutilise les styles de _ongletMenu.css
   Seule la couleur de l'indicateur change
   ============================================ */

/* Couleur spécifique pour l'indicateur participants */
.divOngletMenuGroupes .indicateurOnglet {
    background: var(--cAccent3);
}

/* Sections masquées par défaut */
/* inutilisé 2026-06-13
.sectionGroupes {
    display: none;
}

.sectionGroupes.visible {
    display: block;
}
*/

/* ============================================
   TOGGLE MENU LOTS
   Réutilise les styles de _ongletMenu.css
   Seule la couleur de l'indicateur change
   ============================================ */

/* Couleur spécifique pour l'indicateur lots */
.divOngletMenuDistributions .indicateurOnglet {
    background: var(--cAccent3);
}

/* Sections masquées par défaut */
/* inutilisé 2026-06-13
.sectionDistributions {
    display: none;
}

.sectionDistributions.visible {
    display: block;
}
*/


/*!*****************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_ongletDistributions.css ***!
  \*****************************************************************************************************************************************************/
/* ============================================
   ONGLET LOTS - Styles spécifiques
   ============================================

   Les styles communs (.distributionsListe, .distributionsVide) sont
   définis dans _ongletGroupes.css (sélecteurs groupés)

   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet lots qui diffèrent de l'onglet participants.

   ============================================ */

/*!***********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_ongletCartons.css ***!
  \***********************************************************************************************************************************************/
/* ============================================
   ONGLET CARTONS (bingo) - Styles spécifiques
   ============================================
   Modes Préparer et Diffuser. Le panneau est un .panneauFormulaire : chaque formulaire
   est une carte encadrée au contrat de _formulaires.css (titre .titreFormulaire, padding
   des form > div). Logo en Préparer, qui peut scanner en Diffuser, puis un formulaire
   « Créer vos cartons » par format : nombre + ajouter, la liste par séries, tout
   télécharger. Couleur d'onglet : celle des Numéros (.divGroupes sur le panneau).
   ============================================ */

.cartonsPanneau .titreFormulaire {
    margin-bottom: 20px;
}

/* Nombre de cartons + Ajouter : une ligne */
.cartonsAjout {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gapDefaut);
    padding-bottom: 20px;
}

.cartonsAjout label {
    display: inline;
    width: auto;
    margin: 0;
    font: var(--fText16);
}

.cartonsAjout input {
    width: 90px;
    text-align: center;
}

.cartonsListe {
    width: 100%;
    table-layout: fixed;
    border-collapse: collapse;
    font: var(--fText16);
    margin-bottom: 20px;
}

.cartonsListe th {
    text-align: left;
    font: var(--fLight14);
    color: var(--cNoir3);
    border-bottom: var(--border);
}

.cartonsListe td {
    border-bottom: var(--border);
    vertical-align: middle;
}

/* Trois colonnes qui se partagent toute la largeur de la carte, aérées. */
.cartonsListe th,
.cartonsListe td {
    padding: 10px 24px 10px 0;
}

.cartonsListe th:last-child,
.cartonsListe td:last-child {
    padding-right: 0;
}

.cartonsListe .colNumero {
    width: 28%;
}

/* Numéros « 1-50 » : début, tiret et fin dans trois cases de largeur fixe, chiffres à
   largeur fixe alignés à droite : d'une ligne à l'autre, les unités tombent sous les unités. */
.cartonsListe td.colNumero {
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.cartonsListe .numDe,
.cartonsListe .numA {
    display: inline-block;
    min-width: 3.5ch;
    text-align: right;
}

.cartonsListe .numSep {
    display: inline-block;
    width: 1.5ch;
    text-align: center;
}

.cartonsCreer .formActions {
    padding-bottom: 20px;
}

/*!*************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_ongletResultats.css ***!
  \*************************************************************************************************************************************************/
/* ============================================
   ONGLET RÉSULTATS - Styles spécifiques
   ============================================

   Les styles communs des blocs sont dans 53_blocs.css
   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet résultats (sections, gagnants, etc.)

   ============================================ */

/* Section de résultats */
.sectionResultats {
    margin-bottom: 40px;
}

.sectionResultatsTitre {
    font: var(--fH3);
    color: var(--cNoir1);
    margin: 0 0 20px 0;
    padding-bottom: 12px;
    border-bottom: var(--border);
}

/* Liste des blocs de téléchargement */
.listeTelecharger {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Bloc résultat par animation — box (titre = nom de l'animation, fin trait comme les box participants) */
.blocResultatScene {
    max-width: 600px;
    margin-bottom: 16px;
    padding: 16px 20px;
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
}

.blocResultatScene:empty {
    display: none;
}

.blocResultatTitre {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0 0 12px 0;
}

.blocResultatBoutons {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapDefaut);
}

/* Téléchargements résultats : une ligne par ronde/classement, petits liens par format. */
.resultatLignes {
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
}

.resultatLigne {
    display: flex;
    align-items: baseline;
    gap: var(--gapMoyen);
    font: var(--fText16);
}

.resultatLabel {
    color: var(--cNoir3);
    min-width: 100px;
}

.resultatLien {
    color: var(--cAccent3);
    cursor: pointer;
}

.resultatLien:hover {
    color: var(--cAccent4);
    text-decoration: underline;
}

/*!***************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_ongletPublication.css ***!
  \***************************************************************************************************************************************************/
/* Onglet Publication — une carte par animation : titre, case « publier », lien + QR. */

.blocPublication {
    margin-bottom: 16px;
}

.publicationCaseLabel {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
}

.publicationLien {
    margin-top: 12px;
}

/*!***********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_recapitulatif.css ***!
  \***********************************************************************************************************************************************/
/* ============================================
   RÉCAPITULATIF SCÉNARIO (stepper vertical)
   ============================================ */

/* Container du stepper */
.recapStepper {
    display: flex;
    flex-direction: column;
    gap: 0;
}
#scenarioPanneau .recapStepper > .recapActions + .recapBloc {
    margin-top: 32px;
}

/* Connecteur vertical entre les blocs */
.recapConnecteur {
    width: 3px;
    height: 24px;
    background: var(--cBlanc03);
    margin-left: 20px;
}

/* Bloc individuel du stepper */
.recapBloc {
    position: relative;
    border-radius: var(--borderR1);
    border: var(--borderCarte);
    min-height: 66px;
    overflow: hidden;
}

/* Titre du bloc (h3) */
.recapBloc h3 {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: var(--paddingRecap);
    padding-bottom: 0;
    font: var(--fH4);
    margin: 0;
}

/* Étiquettes du récap : un SEUL style, qu'elles soient cliquables (<a>/<button> en mode
   Préparer / progression) ou statiques. Fond clair de catégorie, texte noir, bordure légère
   (choix PO 2026-07-20 : plus de pastille foncée à texte blanc — l'onglet Diffuser fait foi).
   .recapTagSortie = blanc, la couleur du « produit d'une scène » (conservée en entrée).
   .recapTagSortieSecondaire = sortie déclarée `secondaire` par le contrat d'une scène, en
   retrait — page d'une scène seulement (Vitrine) : un scénario n'affiche pas ses sorties
   inutilisées (décision chef de projet 2026-09-16). */
.recapTagGroupes,
.recapTagDistributions,
.recapTagSortie,
.recapTagSortieSecondaire,
.recapLienGroupes,
.recapLienDistributions {
    display: inline-block;
    margin: 2px 0;
    padding: var(--paddingEtiquette);
    border-radius: var(--borderR0);
    border: 1px solid currentColor;
    color: var(--cNoir3);
}

.recapTagSortieSecondaire {
    color: var(--cNoir4);
}

.recapTagGroupes,
.recapLienGroupes { background: var(--cAccent1); }

.recapTagDistributions,
.recapLienDistributions { background: var(--cAccent1); }

/* Titre d'animation/affichage cliquable (mode Préparer) : lien sobre, sans pastille colorée,
   pour ne pas perturber la lecture — même sobriété que le titre non cliquable de la progression. */
.recapLienScenes,
.recapLienAffichages {
    color: inherit;
}

/* Affordance « cliquable » : soulignement au survol (étiquettes d'entrée + titres) */
.recapLienGroupes:hover,
.recapLienDistributions:hover,
.recapLienScenes:hover,
.recapLienAffichages:hover {
    text-decoration: underline;
}

/* Sous-titre dans le bloc (h4) — élargi à la colonne récap de composition
   (55_scenarioModifier.css), qui reprend la grammaire du récap hors panneau. */
.recapBloc h4,
.recapComposition h4 {
    font: var(--fH4);
    margin: 0;
    color: var(--cNoir3);
}

/* Listes à puces dans le bloc */
.recapBloc ul,
.recapComposition ul {
    margin: 4px 0;
    padding-left: var(--retraitListeCourt);
}

/* Colonne récap de composition (largeur fixe étroite) : pas de puces — chaque ligne
   est déjà un tag — et un « Étiquette : Label » ne se plie JAMAIS sur deux lignes
   (décision PO 2026-08-11) ; au-delà de la colonne, ellipse. */
.recapComposition ul {
    list-style: none;
    padding-left: 0;
}

.recapComposition .recapTagGroupes,
.recapComposition .recapTagSortie,
.recapComposition .recapTagSortieSecondaire {
    white-space: nowrap;
    max-width: 100%;
    box-sizing: border-box;
    overflow: hidden;
    text-overflow: ellipsis;
}

.recapBloc li,
.recapComposition li {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Détails du bloc */
.recapBlocDetail {
    padding: var(--paddingRecap);
    padding-top: var(--gapReduit);
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapBlocDetail p {
    margin: 2px 0;
}

.recapBlocDetail hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 20px 0;
}

/* Icône de l'animation en rappel dans le coin haut-droit du bloc.
   Case 80 et 8px d'air : dessin 64, la grande des deux tailles du projet (54_icones.css).
   Hors flux (absolute) pour ne pas gonfler la hauteur du titre — calée sur le padding du h3. */
.recapTitreIcone {
    position: absolute;
    top: 0;
    right: 0;
    width: 80px;
    height: 80px;
    padding: var(--gapDefaut);
    border-radius: var(--borderR1);
}

/* Colonne de l'icône (chef de projet, 2026-09-22) : l'icône tient toute la hauteur du bloc, à
   droite, séparée du contenu par un filet ; le contenu s'arrête avant elle, rien ne passe
   dessous. Le dessin reste en haut de la colonne (object-fit). Ne vaut que pour le bloc du
   récapitulatif (.recapBloc) : la composition de scénario porte aussi .recapBlocScene. */
.recapBloc.recapBlocScene {
    min-height: 80px; /* la colonne ne descend jamais sous la case de l'icône */
    padding-right: 80px;
}

.recapBloc.recapBlocScene .recapTitreIcone {
    bottom: 0;
    height: auto;
    object-fit: contain;
    object-position: top;
    border-radius: 0;
    border-left: var(--borderCarte);
}

/* Variantes couleur par type */
.recapBlocGroupes /* .recapBlocDistributions (inutilisé 2026-06-13) */ {
    background: var(--cBlanc1);
}

.recapBlocScene .recapTitreIcone {
    background: var(--cAccent1);
}

.recapBlocScene.recapBlocAffichage .recapTitreIcone {
    background: var(--cAccent1);
}

.recapBlocConfigurations {
    background: var(--cAccent1);
}

/* inutilisé 2026-06-13
.recapBlocFinal {
    background: var(--cBlanc02);
}
*/

/* Lien "Modifier" sous le récap */
.recapActions {
    padding: var(--paddingRecap);
}

/* Même couleur qu'Annuler des formulaires (noyau 31_cta.css) : les actions neutres sont
   noires, les couleurs restent réservées aux actions marquées (Supprimer). */
.recapActions a {
    color: var(--cNoir3);
}

.recapActions a:hover {
    text-decoration: underline;
}

/* Image dans un bloc récap */
.recapImage {
    max-width: 100%;
    border-radius: var(--borderR1);
}

/* Pastilles couleurs dans le récap */
.recapCouleurs {
    display: flex;
    gap: var(--gapDefaut);
    margin-top: 6px;
}

.recapCouleurPastille {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: var(--border);
}

/* Message vide */
.recapVide {
    font: var(--fItalic16);
    color: var(--cNoir3);
    padding: var(--paddingLigneListe);
}

/* Source list dans les détails */
/* inutilisé 2026-06-13
.recapSources {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
*/

/* Alerte insuffisance */
.recapAlerte {
    color: var(--cRouge3);
    font: var(--fAlerte16);
}

/* Brique récapitulatif dans la grille du scénario */
/* inutilisé 2026-06-13
.brique.briqueRecap {
    background: var(--cBlanc02);
    border-color: var(--cBlanc03);
}
*/

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig:empty {
    display: none;
}
*/

.recapEncadre {
    margin: 10px 0;
    padding: var(--paddingRecap);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    background: #FFF8;
}

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig h4 {
    font: var(--fH4);
    margin: 20px 0 4px;
}

.recapAnimConfig h4:first-child {
    margin-top: 0;
}

.recapAnimConfig p {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.recapAnimConfig ul,
.recapAnimConfig ol {
    margin: 4px 0;
    padding-left: 20px;
}

.recapAnimConfig li {
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig table {
    width: 100%;
    border-collapse: collapse;
    margin: 6px 0;
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig th,
.recapAnimConfig td {
    padding: 4px 8px;
    text-align: left;
    border-bottom: var(--borderCarte);
}

.recapAnimConfig th {
    font-weight: 600;
}

.recapAnimConfig hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 8px 0;
}
*/

/* Boutons participants cliquables dans la progression : même étiquette que les autres
   (contour compris, cf. bloc du haut), on n'ajuste que l'interactivité. */
button.recapTagGroupes {
    cursor: pointer;
    font: inherit;
}

button.recapTagGroupes:hover {
    text-decoration: underline;
}

/* ============================================
   PROGRESSION — États des blocs
   ============================================ */

/* Seules les cues à venir sont atténuées : celles déjà jouées restent pleines, elles ont été
   actives (chef de projet, 2026-09-22). */
#progression .recapBlocScene {
    transition: opacity 0.3s;
}

#progression .recapBlocScene.recapBlocFutur {
    opacity: .5;
}

/* Nombre d'éléments d'une pastille d'entrée ou de sortie (peintureProgression.ts), séparé du
   libellé par un filet de la couleur de la pastille. Absent tant que le nombre n'est pas connu. */
.recapCompte {
    margin-left: 6px;
    padding-left: 6px;
    border-left: 1px solid currentColor;
    font: var(--fText16Strong);
}

/* Section « Progression » de la cue active : une section du bloc comme Entrées et Sorties
   (.recapBlocDetail, même titre, même marge), servie cachée par le template. */
.progressionEtat[hidden] {
    display: none;
}

/* La barre et son compte au retrait des listes d'Entrées et de Sorties. */
.progressionEtatBlocs {
    margin: 4px 0;
    padding-left: var(--retraitListeCourt);
}

/* Cue à venir (après la cue active) : son titre et son icône seulement — ses entrées et ses
   sorties ne disent rien tant qu'elle n'a pas commencé (chef de projet, 2026-09-22). */
#progression .recapBlocFutur .progressionContenu {
    display: none;
}

/* Aération de secours quand le bloc n'a aucune section visible */
.progressionContenu:not(:has(> :not([hidden]))) {
    padding-bottom: var(--gapMoyen);
}

/* Blocs de progression émis par l'animation (obtenirProgression → rendu unique peintureProgression.ts) */
.progressionBlocTitre {
    font: var(--fH4);
    color: var(--cNoir3);
    margin: 6px 0 2px;
}

.progressionBlocTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.progressionBlocListe {
    margin: 4px 0;
    padding-left: var(--retraitListeCourt);
}

.progressionBlocListe li {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Barre sobre (chef de projet, 2026-09-22) : la cue active se voit déjà à l'opacité, la barre
   n'a pas à crier. Fine, bouts droits comme la police, noire sans couleur d'accent, la moitié
   du bloc ; le compte en petit gris à côté. */
.progressionBlocBarre {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    margin: 4px 0;
}

.progressionBlocBarrePiste {
    flex: 0 1 50%;
    height: 4px;
    background: var(--cBlanc03);
    overflow: hidden;
}

.progressionBlocBarreJauge {
    height: 100%;
    background: var(--cNoir);
    transition: width 0.3s;
}

.progressionBlocBarreLabel {
    font: var(--fLabel);
    color: var(--cNoir3);
}

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario/_deroule.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   DÉROULÉ D'UN SCÉNARIO — brique noyau _derouleScenario.twig

   Le dessin de la grille de l'onglet Scénario (brique 162×100, icône 64, nom en dessous,
   trait et flèche), dans un code à part : ici on découvre un scénario, on ne le règle pas
   (décision chef de projet 2026-09-18). Feuille AUTONOME : elle ne dépend pas de
   _grille.css, que la Vitrine ne charge pas sur ses pages — les mesures sont recopiées,
   les règles d'interaction (survol, glisser-déposer, formulaire actif) ne le sont pas.
   Chargée par 56_scenario.css (Studio) et vitrine.css (Vitrine).
   ============================================ */

/* Le déroulé : une marge de 32px à DROITE seulement, où vit la bascule icônes / visuels,
   hors de la ligne des tuiles (décision chef de projet 2026-09-18 : l'icône vient en plus,
   léger, à droite). À gauche, rien : le déroulé se cale au bord comme le reste de la page.
   Là où la page CENTRE le déroulé (le bandeau des pages rubriques à partir de 1600px), c'est
   à la feuille de cette page d'ajouter la même marge à gauche, pour que la ligne des tuiles
   reste centrée (ilotScenariosBandeau.css) : la brique ne sait pas si elle est centrée. */
.derouleScenario {
    position: relative;
    padding-right: 32px;
}

/* La bascule : un œil, discret, collé à droite de la DERNIÈRE tuile (dans son emplacement,
   hors du flux : il la suit où qu'elle passe à la ligne, et ne prend pas de place dans la
   rangée — la marge droite du déroulé lui garde les 32px quand la tuile est au bord), aligné
   sur le haut de la tuile, NOIR en toute circonstance — ni survol ni état enfoncé ne le
   colorent (décision chef de projet 2026-09-18) : ce sont les tuiles qui montrent le mode,
   pas l'icône. aria-pressed=true = visuels. */
.derouleBascule {
    position: absolute;
    top: 0;
    left: calc(100% + 6px);
    width: 28px;
    height: 28px;
    padding: 4px;
    border: none;
    background: none;
    color: var(--cNoir1);
    cursor: pointer;
}

.derouleBascule svg {
    width: 100%;
    height: 100%;
}

/* Le corps du déroulé : la ligne des tuiles et, par-dessus, le calque du trait.
   `position: relative` est ici et non seulement dans _grille.css : la Vitrine ne charge pas
   cette feuille, et sans lui le calque SVG s'absolutisait contre la carte. */
.derouleCorps {
    position: relative;
}

/* Le calque des traits (scenarioLignes.ts) : mêmes règles que .scenarioLignesSvg dans
   _grille.css, recopiées parce que la Vitrine ne charge pas _grille.css. Sans elles le SVG
   restait dans le flux, large de 300px par défaut, et coupait le trait (constat du chef de
   projet 2026-09-18). */
.derouleScenario .scenarioLignesSvg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    pointer-events: none;
    overflow: visible;
    z-index: 0;
}

/* UNE LIGNE TANT QU'ELLE TIENT, PLUSIEURS SINON (décision chef de projet 2026-09-18 : on
   voulait éviter le retour à la ligne, mais sous 900px un scénario long se coupait, et un
   défilement horizontal aux barres invisibles n'est pas lisible). Le trait suit : le module
   scenarioLignes.ts dessine une ligne par rangée, avec les prolongements qui disent « ça
   continue », exactement comme la grille du Studio. L'écart entre rangées laisse la place
   du trait et de la barre de choix sous chaque tuile. */
.derouleScenarioLigne {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge) var(--gapMoyen);
}

/* L'emplacement, de haut en bas : la brique, le trait, la barre de choix (décision chef de
   projet 2026-09-18). Le trait est dessiné 10px sous la brique (scenarioLignes.ts) : l'air
   de 24px entre la brique et la barre lui laisse la place, la barre commence sous lui. */
.derouleEmplacement {
    position: relative; /* l'œil de la dernière tuile s'y accroche */
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    gap: 24px;
    width: 162px;
}

/* Brique : mêmes mesures que .brique (_grille.css), sans main ni ombre — rien ne se
   clique sur la brique elle-même ; le choix se fait dans la barre, dessous. Rien ne s'y
   SÉLECTIONNE non plus (ni l'étiquette, ni l'icône, ni le visuel — comme `.brique *` dans
   _grille.css) : une tuile qui se surligne au passage de la souris fait texte, elle n'en est
   pas un (décision chef de projet 2026-09-18). */
.derouleBrique,
.derouleBrique * {
    user-select: none;
    -webkit-user-select: none;
}

.derouleBrique img,
.derouleBrique svg {
    pointer-events: none;
    -webkit-user-drag: none;
}

.derouleBrique {
    flex: 0 0 auto;
    width: 162px;
    height: 100px;
    background: var(--cAccent1);
    border-radius: var(--borderR1);
    border: var(--borderCarte);
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: flex-start;
    color: inherit;
    overflow: hidden;
    box-sizing: border-box;
}

/* La face : l'icône ou le visuel, et l'étiquette — ce que le script remplace à chaque choix.
   Elle remplit TOUTE la tuile, pas seulement la hauteur de son contenu : c'est sur elle que
   le visuel prend ses 100 % de hauteur ; à 90px de contenu, l'image laissait une bande en
   bas de la tuile (constat du chef de projet 2026-09-18). */
.derouleBriqueFace {
    flex: 1 1 auto;
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: flex-start;
}

/* MODE VISUELS (.derouleVisuels, posé par derouleScenario.ts sur tous les déroulés de la
   page) : la tuile GARDE SA FORME, 162×100, et l'illustration la remplit (recadrée, elle est
   en 16/9) ; l'icône et l'étiquette disparaissent — tant pis pour le nom, la forme prime
   (décision chef de projet 2026-09-18 : pas des tuiles carrées à côté des rectangulaires).
   La croix et une scène sans illustration gardent leur dessin. */
.derouleBriqueVisuel {
    display: none;
}

.derouleVisuels .derouleBriqueVisuel {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.derouleVisuels .derouleBriqueIcone:not(.derouleBriqueIconeSeule),
.derouleVisuels .derouleBriqueIcone:not(.derouleBriqueIconeSeule) ~ .derouleBriqueTitre {
    display: none;
}

/* La barre de choix : flèche · points · flèche — le dessin de la galerie d'illustrations de
   la page « Configurer » (.divActionFiche sous l'image, 55_scenarioModifier.css), avec les
   mêmes .ctaDiscret et .recapIllustrationPoint. Les flèches sont ramenées à la hauteur des
   points : la barre est fine, elle ne fait pas bouton. Groupée au CENTRE, flèches contre les
   points, et non étalée sur la largeur : deux points seuls faisaient vide, et le groupe dit
   mieux « c'est le choix de cette case » ; à cinq points le groupe prend de lui-même presque
   toute la largeur (décision chef de projet 2026-09-18). */
.derouleBarre {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    height: 24px;
}

/* Points resserrés : la zone de clic reste 24px de haut, mais 16px de large, sans écart —
   au doigt on ne clique pas ici, c'est un site d'ordinateur. */
.derouleBarre .recapIllustrationPoints {
    gap: 0;
}

.derouleBarre .recapIllustrationPoint {
    width: 16px;
}

/* Au-delà de cinq positions : « 3/6 » à la place des points. */
.derouleCompteur {
    font: var(--fMenu14);
    color: var(--cNoir2);
    padding: 0 4px;
}

.derouleBarre .ctaDiscret {
    min-height: 0;
    height: 24px;
    padding: 0 8px;
    line-height: 22px;
}

.derouleBarre .ctaDiscret:disabled {
    color: var(--cNoir4);
    border-color: var(--cNoir5);
    cursor: default;
}

/* Icône de scène : la case 64 de tout le projet (54_icones.css), 6px d'air = dessin 52.
   La croix a la même case, dans les deux modes. SANS fond propre : l'icône prend la couleur
   de sa tuile, quelle qu'elle soit (décision chef de projet 2026-09-18, pour la mise en
   avant ci-dessous). */
.derouleBriqueIcone,
.derouleBriqueCroix {
    width: 64px;
    height: 64px;
    padding: 6px;
    object-fit: contain;
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

/* MISE EN AVANT D'UNE SCÈNE (.derouleAvecMiseEnAvant, page d'une scène) : seule la tuile
   qui porte la scène de la page garde la couleur, les autres deviennent TRANSPARENTES — le
   fond de la page passe au travers, on voit d'un coup d'œil où la scène joue dans le
   scénario (décision chef de projet 2026-09-18). Pas de blanc : blanc à bord, c'est le
   dessin des boutons, et une tuile n'est pas cliquable. La classe suit le choix du
   visiteur (derouleScenario.ts). */
.derouleAvecMiseEnAvant .derouleBrique {
    background: transparent;
}

.derouleAvecMiseEnAvant .derouleBrique.derouleBriqueMiseEnAvant {
    background: var(--cAccent1);
}

.derouleBriqueTitre {
    font: var(--fMenu14);
    color: var(--cNoir1);
    padding: 8px 10px 0 10px;
    width: 100%;
    box-sizing: border-box;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Emplacement retiré (croix) : la brique reste à sa place, éteinte. */
.derouleBriqueRetiree {
    background: var(--cBlanc);
    border-style: dashed;
}

.derouleBriqueRetiree .derouleBriqueTitre {
    color: var(--cNoir3);
}

/*!********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/56_scenario.css ***!
  \********************************************************************************************************************************/
/* ============================================
   SCÉNARIO - Fichier principal
   ============================================

   Ce fichier importe les partials organisés par thème.
   Chaque partial gère un aspect spécifique de la scenario.

   ============================================ */

/*!************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/57_ongletStudio.css ***!
  \************************************************************************************************************************************/
/* ============================================
   ONGLET STUDIO - Lanceur / Pilotage
   Utilise .panneauWrapper / .panneauGauche / .panneauFormulaire
   définis dans 56_scenario/_formulaires.css
   ============================================ */

/* ============================================
   BLOC STUDIO (design sobre, en premier)
   ============================================ */

.blocStudio {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    padding: var(--paddingCorps);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.blocStudio h3 {
    margin: 0;
}

.blocStudio .ctaSupprimer {
    width: max-content;
}

/* Écran de suppression : avertissement accepté (case « J'ai compris ») — fond noir en surcharge
   du rouge d'alerte, marges et padding inchangés pour ne rien décaler. */
.alertErreur.accepteAvertissement {
    background: var(--cNoir);
}

/* ============================================
   URL BOX (copier l'URL)
   ============================================ */

.studioUrlBox {
    display: flex;
    gap: var(--gapMoyen);
}

.studioUrl {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.studioUrl:hover {
    text-decoration: underline;
}

.btnCopier {
    font: var(--fText16);
    color: var(--cNoir2);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
    white-space: nowrap;
}

.btnCopier:hover {
    text-decoration: underline;
}

/* État après copie : texte vert, non interactif */
.btnCopier.copie {
    cursor: default;
    pointer-events: none;
}

/* ============================================
   QR CODE
   ============================================ */

.studioQrCode img {
    display: block;
    width: 150px;
    height: 150px;
    transform: translateX(-17px);
}

/* L'équipe que le QR code nourrit (nom et blason), et le gel posé par une scène
   au coup d'envoi — _blocQrCode.twig. */
.qrCodeEquipe {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    font-weight: 700;
}

.qrCodeEquipeBlason {
    width: 32px;
    height: 32px;
    object-fit: contain;
}

.qrCodeGele {
    margin: 0;
    font-weight: 700;
    color: var(--cRouge3);
}

/* Onglet Équipes de Diffuser : chaque équipe et ses inscrits (equipes.twig). */
.blocEquipeLigne {
    display: flex;
    justify-content: space-between;
    gap: var(--gapMoyen);
    margin: 0;
}


/* ============================================
   CODE D'ACCÈS (caché par défaut)
   ============================================ */

.studioCodeBox {
    display: flex;
    align-items: center;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

.studioCodeMasque,
.studioCodeValeur {
    font: var(--fMono24b);
    letter-spacing: 0.3em;
    color: var(--cNoir1);
}

.studioCodeMasque {
    color: var(--cNoir4);
}

.btnDecouvrir {
    padding: 10px 20px;
    font: var(--fText16);
    color: var(--cNoir1);
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
    cursor: pointer;
}

.btnDecouvrir:hover {
    background: var(--cBlanc02);
    color: var(--cNoir2);
}

.btnDecouvrir[hidden] {
    visibility: hidden;
}

/* ============================================
   CHANGER MES CODES (style discret comme Supprimer)
   ============================================ */

.btnChangerCodes {
    font: var(--fText16);
    color: var(--cRouge3);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
}

.btnChangerCodes:hover {
    text-decoration: underline;
}

/* ============================================
   PLACEHOLDER (rien de configuré)
   ============================================ */

.studioPlaceholder {
    text-align: center;
    padding: 48px 24px;
    color: var(--cNoir3);
    font: var(--fText16);
}

/* ============================================
   COMPTEUR GLOBAL (fond blanc, au-dessus du mode test)
   ============================================ */

#compteurGlobal {
    padding: var(--paddingCorps);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    background: var(--cAccent1);
}

#compteurGlobal > div {
    width: max-content;
    margin-left: 40px;
}

@media (max-width: 600px) {
    #compteurGlobal > div {
        margin-left: -5px;
    }
}

/* inutilisé 2026-06-13
.compteurGlobalLimite {
    font: var(--fText16);
    color: var(--cNoir2);
    margin: 10px 0 4px;
}
*/

.compteurGlobalLigne {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin: 0;
}

.compteurGlobalTotal {
    margin-top: 6px;
    padding-top: 6px;
    border-top: 1px solid var(--cAccent3);
}

.compteurGlobalLabel {
    font: var(--fText16);
    color: var(--cNoir2);
}

.compteurGlobalValeur,
.compteurGlobalValeurReels,
.compteurGlobalValeurFictifs {
    font: var(--fMono24b);
    color: var(--cNoir1);
    text-align: right;
    min-width: 60px;
}

.compteurGlobalTotal .compteurGlobalValeur {
    font: var(--fMono24b);
}

#compteurGlobal.modeTestActif {
    background: var(--cAccent1);
}

#compteurGlobal.limiteAtteinte .compteurGlobalValeur {
    color: var(--cRouge3);
}

/* ============================================
   BLOC MODE TEST (participants fictifs)
   ============================================ */

.fictifActif .blocIcone img,
.fictifActif .blocIcone svg {
    background: var(--cAccent1);
}

/* Section fictifs */
#sectionFictifs {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge);
}

#sectionFictifs.hidden {
    display: none;
}

/* Override du bloc générique pour le mode test */
.bloc.blocGroupe {
    max-width: none;
    border: var(--borderCarte);
    background: var(--cBlanc);
    border-radius: var(--borderR1);
}

.blocGroupe .blocCorps {
    gap: var(--gapMoyen);
    padding: 16px;
}

/* Ligne 2 : Toggle - réutilise .toggleAvecLabel de _modale.css */

/* Ligne 3 : Contenu conditionnel */
.blocGroupeContenu {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen);
}

.blocGroupeReels.hidden,
.blocGroupeFictifs.hidden {
    display: none;
}

/* Compteurs - réutilise les classes de _ongletGroupes.css */
.blocGroupeReels /*, .fictifsCompteur (inutilisé 2026-06-13) */ {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
    margin-bottom: 10px;
}

/* Label avant le compteur */
#blocModeTest .compteurLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Valeur principale (gros chiffre) */
#blocModeTest .compteurValeur {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

/* Séparateur "/" */
#blocModeTest .compteurSeparateur {
    font: var(--fText16);
    color: var(--cNoir4);
}

/* Test en cours : formulaires désactivés */
#blocModeTest.testEnCours .toggleSlider {
    opacity: .5;
    cursor: default;
}

/* Formulaire d'ajout fictifs */
/* inutilisé 2026-06-13
.fictifsFormulaire {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    flex-wrap: wrap;
}
*/

/* Input et bouton même hauteur */
.inputNombreFictifs {
    width: 80px;
    padding: 4px 8px;
    text-align: center;
}

.inputNombreFictifs.hidden /*, .btnAjouterFictifs.hidden (inutilisé 2026-06-13) */ {
    display: none;
}

/* ============================================
   TABLEAU DONNÉES COLLECTÉES (dans recapBloc)
   ============================================ */

.tableauDonneesCollectees {
    border-collapse: collapse;
}

.tableauDonneesCollectees td {
    padding: 3px 12px 3px 0;
    vertical-align: baseline;
    max-width: 300px;
}

.tableauDonneesCollectees td:first-child {
    font: var(--fText16);
    color: var(--cNoir1);
    white-space: nowrap;
}

.tableauDonneesCollectees td:last-child {
    font: var(--fLight14);
    color: var(--cNoir1);
    white-space: nowrap;
}

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/menuSousRubriques.css ***!
  \******************************************************************************************************************************************/
/* ============================================
   MENU DES SOUS-RUBRIQUES
   Barre de navigation entre les pages sœurs d'une rubrique
   (Bingo 75 / Bingo 90…).

   Trois états, trois rôles distincts :
     - souligné fin gris : sépare les sœurs les unes des autres ;
     - souligné épais    : la sœur où l'on se trouve ;
     - pavé plein        : la sœur survolée, couverte comme un bouton.

   PARTAGÉ Vitrine / Studio. Le balisage diffère des deux côtés (liens posés
   à la main côté Vitrine, dérivés du tag de sous-rubrique côté Studio), la
   géométrie est la même, et la couleur est l'Accent de la page (--cAccent3,
   texte --cAccentt) : verte en Vitrine, bleue en Studio, par la classe du body.

   Transcrit du menu de tirage-au-sort.net (référence chef de projet).
   ============================================ */

#menuSousRubriques {
    padding: var(--gapReduit);
}

#menuSousRubriques li {
    display: inline-block;
    margin: 7px 0 0;
    vertical-align: top;
}

#menuSousRubriques a {
    display: block;
    position: relative;
    /* Contient le pavé de survol : sans ça, son z-index négatif le ferait passer
       derrière le fond de la page au lieu de rester derrière le texte. */
    isolation: isolate;
    margin: 0 4px;
    padding: var(--paddingCta14);
    font: var(--fMenu14);
    font-size: 15px;
    line-height: 23px;
    color: var(--cNoir3);
    border-bottom: 1px solid var(--cBlanc3);
    text-decoration: none;
    cursor: pointer;
    transition: .3s;
}

@media (max-width: 1023px) {
    /* La silhouette ne change plus en fenêtre étroite : seul le corps du texte descend.
       Un bouton ne choisit pas son padding (décision PO 2026-07-18). */
    #menuSousRubriques a {
        font-size: 14px;
    }
}

/* La sœur où l'on se trouve. */
#menuSousRubriques a.actif {
    color: var(--cNoir1);
    border-bottom: 2px solid var(--cAccent3);
}

/* Le pavé de survol : au repos il est rentré à l'intérieur du texte, et transparent. */
#menuSousRubriques a::before {
    content: "";
    display: block;
    position: absolute;
    top: 4px;
    right: 8px;
    bottom: -2px;
    left: 8px;
    z-index: -100;
    border-radius: var(--borderR1);
    background: transparent;
    transition: .3s;
}

/* Focus clavier : anneau intérieur, pas d'outline — le lien n'a pas de soulignement
   qui signalerait le parcours au clavier. */
#menuSousRubriques a:focus {
    outline: none;
    box-shadow: 0 0 0 3px var(--cFormFocus) inset;
}

#menuSousRubriques a:hover {
    color: var(--cAccentt);
    border-bottom-color: transparent;
}

/* Au survol il déborde du texte et se remplit : c'est ce débordement qui fait le zoom. */
#menuSousRubriques a:hover::before {
    top: -2px;
    right: -8px;
    bottom: -2px;
    left: -8px;
    background: var(--cAccent3);
}

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/58_menuSousRubriques.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   MENU DES SOUS-RUBRIQUES - Studio
   Import de la structure noyau. La couleur du menu est l'Accent de la page (classe du body),
   rien à déclarer ici. Jumeau : vitrine/css/menuSousRubriques.css.
   ============================================ */

/*!***********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/60_accesStudio.css ***!
  \***********************************************************************************************************************************/
/* ============================================
   PAGE ACCÈS STUDIO (saisie code 5 lettres)
   Layout commun dans noyau/css/composants/formAccesCode.css
   ============================================ */

/* Lien connexion — spécifique au studio uniquement */
.noteConnexion {
    margin-top: 24px;
    font: var(--fLight14);
    color: var(--cNoir3);
}

.noteConnexion a {
    color: var(--cAccent3);
    text-decoration: underline;
}

.noteConnexion a:hover {
    color: var(--cAccent4);
}

/*!*****************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/studio/59_noter.css ***!
  \*****************************************************************************************************************************/
/* ==========================================================================
   Donner votre avis (src/Studio/Service/Noter/CLAUDE.md) — Studio seulement.
   Le contenu de l'onglet « Donner votre avis » (onglet/_avis.twig) : le rang des onze
   chiffres dans le formulaire de configuration, et le récapitulatif dans sa carte.
   Tout le reste vient du moule commun (form.css, 56_scenario/_formulaires.css, 57_ongletStudio.css).
   ========================================================================== */

/* Les onze chiffres : un rang de boutons radio, le bouton natif caché, le libellé fait le bouton */
/* Onze cases, TOUJOURS sur une ligne : elles se partagent la largeur du panneau */
.noterRang {
    display: flex;
    gap: var(--gapReduit);
}

.noterChiffre {
    display: block;
    flex: 1 1 0;
    min-width: 0;
}

.noterChiffre input {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.noterChiffre span {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 40px;
    box-sizing: border-box;
    font: var(--fCta16);
    color: var(--cNoir1);
    background: var(--cBlanc);
    border: var(--borderInput);
    border-radius: var(--borderR1);
    cursor: pointer;
}

.noterChiffre:hover span {
    border-color: var(--cAccent3);
}

.noterChiffre:has(input:checked) span {
    background: var(--cAccent1);
    border-color: var(--cAccent3);
}

.noterChiffre:has(input:focus-visible) span {
    outline: 2px solid var(--cFormFocus);
    outline-offset: 2px;
}


/* Le dégradé des chiffres (décision chef de projet 2026-09-22) : le 10 à 100 %, quatre points
   de moins par cran jusqu'au 0 à 60 %. Sur le texte seul, la case reste entière. */
.noterChiffre:nth-child(1) span { color: color-mix(in srgb, var(--cNoir1) 60%, transparent); }
.noterChiffre:nth-child(2) span { color: color-mix(in srgb, var(--cNoir1) 64%, transparent); }
.noterChiffre:nth-child(3) span { color: color-mix(in srgb, var(--cNoir1) 68%, transparent); }
.noterChiffre:nth-child(4) span { color: color-mix(in srgb, var(--cNoir1) 72%, transparent); }
.noterChiffre:nth-child(5) span { color: color-mix(in srgb, var(--cNoir1) 76%, transparent); }
.noterChiffre:nth-child(6) span { color: color-mix(in srgb, var(--cNoir1) 80%, transparent); }
.noterChiffre:nth-child(7) span { color: color-mix(in srgb, var(--cNoir1) 84%, transparent); }
.noterChiffre:nth-child(8) span { color: color-mix(in srgb, var(--cNoir1) 88%, transparent); }
.noterChiffre:nth-child(9) span { color: color-mix(in srgb, var(--cNoir1) 92%, transparent); }
.noterChiffre:nth-child(10) span { color: color-mix(in srgb, var(--cNoir1) 96%, transparent); }
.noterChiffre:nth-child(11) span { color: color-mix(in srgb, var(--cNoir1) 100%, transparent); }

/* Le récapitulatif, dans une carte .blocStudio */
.noterRecapNote {
    font: var(--fH4);
    color: var(--cNoir1);
}

.noterRecapMot {
    font: var(--fItalic16);
    color: var(--cNoir2);
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/salle/kitSingleton/css/carte.css ***!
  \**************************************************************************************************************************************/
/**
 * Kit CSS — Effets visuels (carte)
 *
 * Applique via data-effet sur #salleEcran.
 * Ajouter .vueCarte sur tout bloc a styliser.
 */

/* ── Variable bordure dérivée (une seule source) ── */
#salleEcran {
    --ilotBordure: 1px solid color-mix(in srgb, var(--couleurPrimaire) 30%, transparent);
}

/* ── Classes partagées ── */

.vueTitreCentre {
    font-size: var(--police1);
    font-family: var(--ffEcran);
    font-weight: 700;
    text-align: center;
    color: var(--couleurPrimaire);
}

/* Scene d'entree commune */
@keyframes vueApparition {
    from {
        opacity: 0;
        transform: translateY(0.75em);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.vueAnimer {
    animation: vueApparition 150ms ease-out forwards;
}

/* Carte de base. Son cadre est l'espace des cartes de tout l'écran (Dimensionneur.espaceCarte) :
   le même sur toutes les cartes, qui ne suit ni la police ni le zoom. */
.vueCarte {
    border-radius: var(--ilotRayon);
    padding: var(--ilotPadding);
}

/* L'îlot fait main d'une carte (un bloc, pas un tableau du kit) la remplit : aucun vide ne
   s'ajoute au cadre d'un côté. Les tableaux du kit, eux, ont la largeur que le kit calcule, et la
   carte les enveloppe. */
.vueCarte div.vueTableau {
    width: auto;
    margin-left: 0;
    margin-right: 0;
    align-self: stretch;
    flex-grow: 1;
}

/* Glacis */
[data-effet="1"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 30%, transparent);
    backdrop-filter: blur(12px);
    border: 1px solid var(--couleurFond);
    box-shadow: 0 4px 20px var(--cNoir);
}

/* Transparent */
[data-effet="2"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 70%, transparent);
}

/* Voile */
[data-effet="3"] .vueCarte {
    background: linear-gradient(165deg,
        color-mix(in srgb, var(--couleurFond) 95%, transparent),
        color-mix(in srgb, var(--couleurFond) 40%, transparent));
}

/* Encadre */
[data-effet="4"] .vueCarte {
    background-color: var(--couleurFond);
    border: 2px solid var(--couleurPrimaire);
}

/* Ombre */
[data-effet="5"] .vueCarte {
    background-color: var(--couleurFond);
    box-shadow: 0 4px 20px var(--cOmbreForte);
}

/* Popup : ombre portee pour detacher du fond */
.vuePopup {
    box-shadow: 0 0 20px 10px var(--cNoir);box-shadow: 0 0 50px 50px var(--cNoir);
}

/* Ilots internes : bordure subtile dans la carte */
[data-effet] .vueCarte .vueTableau,
[data-effet] .vueCarte .vueMatchLigne {
    background: var(--couleurFond);
    border-radius: var(--ilotRayonInterne);
    border: var(--ilotBordure);
}

/* Carte « bande » : la carte sans son cadre, pour une boîte trop basse où le cadre prendrait plus
   de place que le contenu (décision chef de projet 2026-09-26). Il ne reste que l'îlot, qui prend
   la forme de la carte et garde sa silhouette selon l'effet — l'ombre du glacis et de l'ombré, le
   liseré de l'encadré ; le transparent et le voile n'ont que leur cadre, qui disparaît. C'est la
   scène qui la choisit (`vueCarte vueBande`), jamais un calcul. */
.vueCarte.vueBande,
[data-effet] .vueCarte.vueBande {
    padding: 0;
    background: none;
    backdrop-filter: none;
    border: none;
    box-shadow: none;
}

[data-effet] .vueCarte.vueBande .vueTableau {
    border-radius: var(--ilotRayon);
}

[data-effet="1"] .vueCarte.vueBande .vueTableau {
    box-shadow: 0 4px 20px var(--cNoir);
}

[data-effet="4"] .vueCarte.vueBande .vueTableau {
    border: 2px solid var(--couleurPrimaire);
}

[data-effet="5"] .vueCarte.vueBande .vueTableau {
    box-shadow: 0 4px 20px var(--cOmbreForte);
}

/* Carte sans ombre : seule l'ombre disparaît, le fond et le cadre de l'effet restent. C'est la
   scène (ou le kit) qui la demande, pour un affichage de base qui ne doit pas dominer
   (`vueCarte vueSansOmbre`). */
[data-effet] .vueCarte.vueSansOmbre {
    box-shadow: none;
}

/* Carte « pastille » : le dessin de la carte à la taille d'une mention (un rang à côté d'un
   résultat). Son cadre suit son propre texte, pas l'espace de l'écran, qui la rendrait plus
   grosse que ce qu'elle accompagne. C'est le kit qui la demande (`vueCarte vuePastille`). */
.vueCarte.vuePastille {
    padding: 0.3em 0.5em;
}

/* Gagnant / Perdant (generique) */
.vueGagnant {
    color: var(--couleurPrimaire);
}

.vuePerdant {
    font-weight: 200;
    opacity: 0.4;
}

/* Pagination */
.vuePagination {
    text-align: center;
}

/* Lot display */
.vueLot {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.vueLotImageWrap {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 0;
    width: 100%;
}

.vueLotImage {
    max-width: min(80%, calc(100vw * 12 / 48));
    max-height: min(90%, calc(100vh * 8 / 24));
    object-fit: contain;
    display: block;
}

/* Badge résultat — participant nommé ou numéro tombola */

@keyframes vueBadgeResultatPop {
    0%   { opacity: 0; transform: scale(0.2) rotate(-6deg); }
    60%  { opacity: 1; transform: scale(1.1) rotate(1deg); }
    80%  { transform: scale(0.96); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); }
}

@keyframes vueBadgeResultatFlash {
    0%   {
        box-shadow:
            inset  6px  6px 18px 18px #FFB3C188,
            inset -6px  6px 18px 18px #B3D9FF88,
            inset  6px -6px 18px 18px #B3FFB388,
            inset -6px -6px 18px 18px #FFF3B388;
    }
    100% { box-shadow: inset 0 0 0 0 transparent; }
}

.vueBadgeResultat.vueAnimer {
    /* Le pop garde `forwards` (il fige l'échelle et l'opacité d'arrivée), le flash NON — et
       c'est volontaire. Le flash pilote `box-shadow` ; avec `forwards`, sa dernière image
       restait figée tant que `.vueAnimer` était posée, et la classe reste sur le dernier
       résultat sorti (les kits ne la retirent qu'à l'arrivée du suivant, parfois jamais).
       Le flash ne doit donc rien laisser derrière lui : il rend `box-shadow` au badge à la
       fin des 700 ms, la synchronisation est portée par l'animation et non par le
       JavaScript, et un oubli de retrait de classe n'a plus aucun effet visible. */
    animation: vueBadgeResultatPop 550ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards,
               vueBadgeResultatFlash 700ms ease-out;
}

.vueBadgeResultat {
    font-size: var(--police1);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    /* Accroches d'habillage (docs/architecture/habillage.md) : chaque fallback est le
       défaut historique ; --habCouleurResultat est publiée en inline par VueKit. */
    padding: var(--habPadding, 0.5em 1em);
    border: var(--habBordure, 1px solid transparent);
    border-radius: var(--habForme, var(--ilotRayonInterne));
    /* PAS d'ombre : le badge résultat n'endosse pas --habOmbre (décision chef de projet
       2026-09-04). L'ombre ne venait que d'un habillage, le flap, où elle sertissait le
       panneau ; elle coûtait plus qu'elle ne rendait — le flash d'apparition pilote lui
       aussi `box-shadow`, et toute ombre de fond devenait une valeur à restituer à la fin
       de l'animation, donc une synchronisation de plus à tenir. Le badge est plat, posé sur
       le fond : sa silhouette tient à la bordure, à la forme et à l'outline. */
    font-family: var(--habPolice, inherit);
    background: var(--habCouleurResultat, var(--habFond, var(--couleurFond)));
    outline: 1px solid var(--cNoir);
    outline-offset: -1px;
    /* PAS de `overflow: hidden` : un résultat amputé est pire qu'un résultat qui dépasse
       (décision chef de projet 2026-08-28). Le calibrage de police est là pour que le texte
       tienne ; s'il se trompe de quelques pour cent, on veut le voir déborder, pas
       disparaître. Le trait et le label de l'animation « Annulé » sont posés en inset: 0,
       ils n'ont jamais eu besoin du clipping. */
    width: 100%;
    max-width: 100%;
    min-height: 2.2em;
    flex-shrink: 0;
    /* Ancre des états posés DANS le badge (rang, tampon — kitPlugin/CLAUDE.md, « Kits d'affichage »).
       Sans décalage, donc sans effet sur la mise en page ; un kit qui positionne ses badges
       en absolu (GagnantKit) continue de le faire en inline, qui prime. */
    position: relative;
}

.vueBadgeResultatVide {
    /* Futur résultat : l'habillage ne s'applique qu'au tiré. Un badge vide ne porte ni fond ni
       bordure d'habillage, seule la forme reste pour annoncer la silhouette — et son contour est
       CELUI des badges pleins, pas un trait pâle : une place à prendre se voit comme une place
       prise (décision PO 2026-09-11, qui remplace le trait discret du 2026-08-25). La bordure
       garde sa largeur en transparent pour que le badge ne change pas de taille en se
       remplissant. Rien à annuler côté ombre : le badge résultat n'en porte plus du tout. */
    background: #00000005;
    border-color: transparent;
}

/* Place ouverte : ce qui vient PEUT arriver ici. Le badge vide s'allume, sous tout habillage —
   c'est une information de jeu, pas un décor : la question « où puis-je aller ? » se lit sur les
   cartes (décision PO 2026-09-10, répartition en équipes). Dans la couleur de la carte quand
   elle en a une (celle de l'équipe : la place a déjà la couleur que le nom prendra), en blanc uni
   sinon. Posé par le kit à liste sur sa première place libre, option `ouvert` de `mettreAJour`. */
.vueBadgeResultatVide.vueBadgeResultatOuvert {
    background: var(--habCouleurResultat, var(--cBlanc));
}

.vueBadgeResultatNom {
    position: relative;
    z-index: 1;
    /* Sans effet à largeur naturelle ; un texte ajusté dans sa hauteur (au-delà du plafond de
       signes, kitPlugin/CLAUDE.md, « Kits d'affichage ») prend toute la largeur et doit rester centré. */
    text-align: center;
    /* Ni `max-width: 100%`, ni `overflow: hidden`, ni `text-overflow: ellipsis`.
       L'ellipsis coûtait BEAUCOUP plus que le débordement qu'elle prétendait masquer :
       pour cacher 5 % de trop-plein, le navigateur doit retirer assez de caractères pour
       loger le « … » lui-même — sur un numéro monospacé espacé (0.3em), cela faisait
       « AF-082 » → « AF-0… », un tiers du résultat perdu. Le texte garde donc sa largeur
       naturelle et reste centré par le flex parent : s'il déborde, il déborde des deux
       côtés, lisiblement (décision chef de projet 2026-08-28). */
    font-weight: 700;
    color: var(--habCouleurResultatTexte, var(--habTexte, var(--cNoir)));
    text-align: center;
    white-space: nowrap;
}

@keyframes vueBadgeResultatEcarter {
    0%   { letter-spacing: 0; text-indent: 0; }
    100% { letter-spacing: var(--habInterlettrageChiffres, 0.2em); text-indent: var(--habInterlettrageChiffres, 0.2em); }
}

.vueBadgeResultatNomChiffres {
    /* text-indent = letter-spacing : l'espacement s'applique aussi APRÈS le dernier
       chiffre et décale le centrage vers la gauche ; l'indent rajoute l'équivalent
       devant pour rééquilibrer (même parade que les volets du flap).
       text-indent et NON padding-left : un habillage peut poser la même compensation sur
       le badge (`.habFlap .habElement { text-indent: 0.3em }`), et le span en hérite. Avec
       deux propriétés différentes les deux s'additionnaient — 0.6em de décalage pour 0.3em
       d'espacement en trop, le texte poussé à droite et coupé. Avec la même propriété, la
       déclaration du span REMPLACE la valeur héritée : la compensation vaut l'espacement, une
       seule fois, avec ou sans habillage.
       L'espacement lui-même est un axe du contrat d'habillage (--habInterlettrageChiffres,
       docs/architecture/habillage.md) : 0.2em sans habillage, la roue et la roulette le
       resserrent, le flap l'aligne sur ses volets. Décision chef de projet 2026-09-06 :
       les chiffres s'écartent partout, chaque habillage règle de combien. */
    letter-spacing: var(--habInterlettrageChiffres, 0.2em);
    text-indent: var(--habInterlettrageChiffres, 0.2em);
}

.vueBadgeResultat.vueAnimer .vueBadgeResultatNomChiffres {
    animation: vueBadgeResultatEcarter 500ms cubic-bezier(0.34, 1.56, 0.64, 1) 100ms both;
}

.vueBadgeResultatNumero {
    position: relative;
    z-index: 1;
    font-size: 0.75em;
    font-weight: 400;
    color: var(--habCouleurResultatTexte, var(--habTexte, var(--cNoir)));
    opacity: 0.7;
    text-align: center;
}

/* ── États du badge posés par les kits (décision chef de projet 2026-09-10,
   kitPlugin/CLAUDE.md, « Kits d'affichage »). Le rang et le tampon sont des états du badge, dans le
   socle, à côté de lui : plus de copie par kit. Posés par VueKit.poserRangBadgeResultat et
   VueKit.tamponnerBadgeResultat. Le socle porte le comportement par défaut ; un kit qui en
   veut un autre pose sa propre classe par-dessus. ── */

/* Rang du tirage (#N), coin haut-gauche du badge. La moitié de la police du badge, sans plancher
   en pixels — le rang suit la police, comme le nom, et rien d'autre —, et une pastille qui suit la
   police aussi (décision PO 2026-09-11 — à 25 % et 11 px de plancher, il ne se lisait pas). */
.vueBadgeResultatRang {
    position: absolute;
    z-index: 2;
    top: 0;
    left: 0;
    font-size: 50%;
    line-height: 1;
    letter-spacing: 0;
    text-indent: 0;
    padding: 0.15em 0.35em;
    border-radius: 0 0 0.4em;
    background: var(--cNoir);
    color: var(--cBlanc);
    pointer-events: none;
}
.vueBadgeResultatRang > span {
    color: var(--cNoir4);
}

/* Tampon (annulation) — 8 s au total, durée reprise par VueKit.tamponnerBadgeResultat.
   PRINCIPE : le résultat reste 100 % lisible, aucun overlay ne le couvre. Un trait oblique se
   dessine sur le badge, une étiquette paraît dans le coin, le badge sort en glissant.
   Timeline : 0 → 0.2 s délai ; 0.2 → 1 s le trait se dessine de gauche à droite ;
   1 → 1.4 s l'étiquette paraît (ressort) ; 1.4 → 6.5 s tenue ; 6.5 → 8 s sortie glissée + fondu.
   Le texte de l'étiquette vient de --vueBadgeTamponTexte (rendu via `content:`) : autre chose
   qu'« Annulé » est possible. Trait (inset: 0) et étiquette (top/right) sont posés DANS le
   badge : ils n'ont jamais eu besoin d'un overflow: hidden, qui aurait recoupé le résultat.
   Sélecteur à une classe, comme les anciens .gaKitBadgeAnnule / .lgKitBadgeAnnule : un badge
   qui porte encore .vueAnimer garde l'animation d'apparition (plus spécifique) et ne joue pas
   la sortie — comportement constant, signalé au chef de projet à l'étape 0. */
.vueBadgeResultatTampon {
    animation: vueBadgeResultatTamponSortie 1.5s cubic-bezier(0.55, 0, 0.45, 1) 6.5s forwards;
}
/* Trait oblique d'un coin à l'autre, quel que soit le ratio : SVG inline étiré par
   preserveAspectRatio="none", trait gardé à 4px par vector-effect="non-scaling-stroke",
   « dessiné » par un clip-path qui s'ouvre de gauche à droite. */
.vueBadgeResultatTampon::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;charset=UTF-8,<svg xmlns=%27http://www.w3.org/2000/svg%27 preserveAspectRatio=%27none%27 viewBox=%270 0 1 1%27><line x1=%270%27 y1=%271%27 x2=%271%27 y2=%270%27 stroke=%27black%27 stroke-width=%274%27 stroke-opacity=%270.5%27 vector-effect=%27non-scaling-stroke%27/></svg>");
    background-size: 100% 100%;
    background-repeat: no-repeat;
    clip-path: inset(0 100% 0 0);
    animation: vueBadgeResultatTamponRayer 0.8s cubic-bezier(0.65, 0, 0.35, 1) 0.2s forwards;
    pointer-events: none;
    z-index: 5;
}
.vueBadgeResultatTampon::after {
    content: var(--vueBadgeTamponTexte);
    position: absolute;
    top: 4px;
    right: 4px;
    max-width: 50%;
    font: 700 max(11px, 25%) var(--ffEcran);
    color: var(--cBlanc);
    background: var(--cNoir);
    padding: 2px 6px;
    border-radius: 3px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    pointer-events: none;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    box-shadow: 0 1px 3px var(--cOmbre);
    transform: scale(0) rotate(8deg);
    transform-origin: top right;
    animation: vueBadgeResultatTamponEtiquette 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 1s forwards;
    z-index: 6;
}
@keyframes vueBadgeResultatTamponRayer {
    to { clip-path: inset(0 0 0 0); }
}
@keyframes vueBadgeResultatTamponEtiquette {
    0%   { transform: scale(0)    rotate(8deg);  opacity: 0; }
    60%  { transform: scale(1.15) rotate(-3deg); opacity: 1; }
    100% { transform: scale(1)    rotate(0deg);  opacity: 1; }
}
@keyframes vueBadgeResultatTamponSortie {
    0%   { opacity: 1; transform: translateY(0)    scale(1); }
    100% { opacity: 0; transform: translateY(40px) scale(0.95); filter: blur(1px); }
}

/* Séparateurs directionnels */
.vueSeparateurH,
.vueSeparateurV {
    flex-shrink: 0;
    background: color-mix(in srgb, var(--couleurSecondaire) 15%, transparent);
}

.vueSeparateurH { width: 100%; height: 1px; }
.vueSeparateurV { height: 100%; width: 1px; }

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/formAccesCode.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   FORMULAIRE ACCÈS CODE (partagé studio + borne)
   Styles communs pour la saisie du code 5 lettres
   ============================================ */

/* ============================================
   PAGE D'ACCÈS CODE — Layout partagé
   Utilisé par studioAcces.twig et borneAcces.twig
   ============================================ */

.pageAccesCode {
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: var(--cBlanc02);
}

.contenuAccesCode {
    width: 100%;
    max-width: 400px;
    text-align: center;
    padding: 40px 32px;
    background: var(--cBlanc);
    border-radius: var(--borderR2);
    box-shadow: var(--ombrePortee);
}

.contenuAccesCode h1 {
    font: var(--fH2);
    margin-bottom: 12px;
}

.accesCodeInstruction {
    font: var(--fText16);
    color: var(--cNoir3);
    margin-bottom: 24px;
}

.contenuAccesCode .alertErreur {
    background: var(--cRouget);
    color: var(--cRouge4);
    padding: 12px 16px;
    border-radius: var(--borderR1);
    margin-bottom: 20px;
    font: var(--fText16);
}

.contenuAccesCode .alertBlocage {
    background: var(--cOr0);
    color: var(--cOr4);
    padding: 24px;
    border-radius: var(--borderR2);
    font: var(--fText16);
}

.contenuAccesCode .alertBlocage p {
    margin: 0 0 8px;
}

.contenuAccesCode .alertBlocage p:last-child {
    margin-bottom: 0;
}

.formAccesCode {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge);
}

/* ============================================
   CHAMP CODE — Saisie 5 lettres
   ============================================ */

.champCode {
    display: flex;
    justify-content: center;
    position: relative;
    margin-bottom: 15px;
}

.inputCodeAcces {
    width: 100%;
    max-width: 240px;
    padding: 20px;
    font: var(--fH1);
    font-family: var(--ffMono);
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    border: var(--borderForm);
    border-radius: var(--borderR2);
}

.inputCodeAcces::placeholder {
    color: var(--cNoir5);
    letter-spacing: 0.3em;
}

.inputCodeAcces:focus {
    outline: none;
    border-color: var(--cFormFocus);
    box-shadow: 0 0 0 3px var(--cFormFocusHalo);
}

.btnAcceder {
    width: 100%;
    padding: 18px 24px;
    font: var(--fCta16);
    color: var(--cAccentt);
    background: var(--cAccent3);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: background 0.15s;
}

.btnAcceder:hover {
    background: var(--cAccent4);
}

/* Bouton toggle visibilité du code */
.btnTogglePassword {
    position: absolute;
    right: 55px;
    top: 45%;
    transform: translateY(-50%);
    width: 28px;
    height: 28px;
    padding: 4px;
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--cNoir4);
    transition: color 0.15s;
}

.btnTogglePassword:hover {
    color: var(--cNoir2);
}

.btnTogglePassword svg {
    width: 100%;
    height: 100%;
}

/* État par défaut : œil barré visible (code masqué) */
.btnTogglePassword .iconeOeil {
    display: none;
}

.btnTogglePassword .iconeOeilBarre {
    display: block;
}

/* État visible : œil normal visible (code affiché) */
.btnTogglePassword.visible .iconeOeil {
    display: block;
}

.btnTogglePassword.visible .iconeOeilBarre {
    display: none;
}

/*!***********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/champCode6.css ***!
  \***********************************************************************************************************************************/
/**
 * Composant Champ de code à 6 chiffres
 *
 * Six cases dessinées (.champCode6Case), un seul vrai champ posé par-dessus, transparent :
 * voir ts/composants/champCode6.ts. Le champ n'est pas masqué (opacity) mais rendu
 * transparent : sur iPhone, un champ masqué ne propose plus « Coller » à l'appui long.
 */

.champCode6Cases {
    position: relative;
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: var(--gapDefaut);
}

.champCode6Case {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 4 / 5;
    border: var(--borderForm);
    border-radius: var(--borderR2);
    background: var(--cBlanc);
    color: var(--cNoir1);
    font: var(--fMono24b);
}

.champCode6Case.caseActive {
    border-color: var(--cFormFocus);
    box-shadow: 0 0 0 3px var(--cFormFocusHalo);
}

/* Le vrai champ couvre les six cases : un toucher n'importe où l'active, l'appui long y colle.
   16px : en dessous, iOS zoome sur le champ à la saisie. */
.champCode6Cases input.champCode6 {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    color: transparent;
    caret-color: transparent;
    font: var(--fText16);
    cursor: text;
}

.champCode6Cases input.champCode6::selection {
    background: transparent;
}

.champCode6Cases input.champCode6:focus {
    outline: none;
    box-shadow: none;
}

/* « Coller le code » : centré sous les cases */
button.champCode6Coller:not([hidden]) {
    display: block;
    margin: var(--gapMoyen) auto 0;
}

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/surcouchePreview.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   SURCOUCHE APERÇU — pop-up iframe (composant noyau)

   Ouvre un aperçu (animation ou scénario) dans la page quand la fenêtre est
   assez grande, au lieu d'un nouvel onglet. Un seul système pour tous les
   aperçus, Studio comme Vitrine (décision PO 2026-07-18).

   Boutons : base .modaleClose (composants/boutonFermeture.css, source unique de la croix),
   surcouche = uniquement l'écart de taille ci-dessous.

   Markup généré par surcouchePreview.ts (noyau) sur les déclencheurs [data-preview]
   (liens href ou boutons data-url), aucun template :
   .surcouche > .surcoucheContenu > .surcoucheBarre (plein écran + croix) + .surcoucheIframe

   Les seuils d'ouverture (iframe 16/9 d'au moins 960×540 + marges 80/120)
   vivent dans surcouchePreview.ts — garder TS et dimensionnement CSS alignés.
   ============================================ */

/* Boutons de la barre : base .modaleClose (composant, croix comprise) — posée par le TS sur
   les deux boutons. Ici uniquement l'écart surcouche (44×44, icônes 24) + le masque plein écran. */

.surcouche {
    border: none;
    border-radius: var(--borderR1);
    padding: 0;
    box-shadow: var(--ombreModale);
    background: transparent;
}

.surcouche::backdrop {
    background: var(--cOverlay);
}

.surcoucheContenu {
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.surcoucheBarre {
    position: relative; /* les onglets se centrent sur elle */
    display: flex;
    align-items: center;
    justify-content: flex-end;
    /* Pas de trait sous la barre : il ressortait sur la bulle de l'aperçu collée dessous
       (chef de projet, 2026-09-17). */
}

/* POC (chef de projet, 2026-09-16) : les onglets de l'aperçu dans la barre de titre, à gauche
   (surcouchePreview.ts, alimentés par l'aperçu). Même air que la barre de l'aperçu : marge de
   8, écart de 8. Sobres, c'est une barre de titre : aucun fond, le gris du texte tertiaire
   (cNoir3) au repos, un contour de cette couleur ; l'onglet dont la vue est ouverte prend la
   couleur des icônes de la barre, le noir de la croix (chef de projet, 2026-09-16). */
/* CENTRÉS sur la barre de titre, pas calés à gauche (chef de projet, 2026-09-16) : centrés,
   on les voit ; et quand un onglet s'ajoute à la fin de l'aperçu, le groupe se recentre et
   bouge — c'est voulu, le mouvement dit qu'il se passe quelque chose là-haut. Hors flux pour
   que les deux icônes de droite ne pèsent pas dans le centrage. */
.surcoucheOnglets {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
}

/* Sans contour au repos ; le contour paraît au survol et reste sur l'onglet actif — c'est
   lui qui dit lequel est ouvert (chef de projet, 2026-09-16). La bordure est là dès le
   repos, transparente : elle garde son épaisseur, rien ne bouge et rien ne se troue. */
.surcoucheOnglet {
    color: var(--cNoir3);
    background: transparent;
    border: 1px solid transparent;
}

.surcoucheOnglet:hover {
    border-color: currentColor;
}

.surcoucheOngletActif {
    color: var(--cNoir1);
    border-color: currentColor;
}

/* Les deux boutons portent la classe .modaleClose (posée par le TS) : silhouette, croix et
   hover viennent du composant. Ici l'écart surcouche : boîte fixe 44×44, icônes 24. */
.surcoucheClose,
.surcouchePleinEcran {
    width: 44px;
    height: 44px;
    padding: 0;
}

.surcoucheClose::before,
.surcouchePleinEcran::before {
    width: 24px;
    height: 24px;
}

.surcouchePleinEcran::before {
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M8 3H5a2 2 0 0 0-2 2v3%27/%3E%3Cpath d=%27M21 8V5a2 2 0 0 0-2-2h-3%27/%3E%3Cpath d=%27M3 16v3a2 2 0 0 0 2 2h3%27/%3E%3Cpath d=%27M16 21h3a2 2 0 0 0 2-2v-3%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M8 3H5a2 2 0 0 0-2 2v3%27/%3E%3Cpath d=%27M21 8V5a2 2 0 0 0-2-2h-3%27/%3E%3Cpath d=%27M3 16v3a2 2 0 0 0 2 2h3%27/%3E%3Cpath d=%27M16 21h3a2 2 0 0 0 2-2v-3%27/%3E%3C/svg%3E") center / contain no-repeat;
}

/* 16/9, aussi grand que la fenêtre le permet (marges : 80 en largeur, 120 en
   hauteur — la barre de la surcouche + l'air autour). */
.surcoucheIframe {
    display: block;
    border: none;
    width: min(calc(100vw - 80px), calc((100vh - 120px) * 16 / 9));
    aspect-ratio: 16 / 9;
}

/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/jaime.css ***!
  \******************************************************************************************************************************/
/* ============================================
   LE CŒUR « J'AIME » ET SON COMPTEUR — brique noyau _jaime.twig, Vitrine comme Studio
   (décision chef de projet 2026-09-12)

   Quatre états, façon X, tous ici et nulle part ailleurs :
     1. éteint            — contour gris, chiffre gris ;
     2. survol (actif)    — cœur et chiffre en rouge, un disque pâle derrière le cœur ;
     3. allumé            — cœur PLEIN, rouge, un peu plus grand — un peu seulement, ça se
                            joue à très peu (chef de projet) ;
     4. allumé au survol  — le même, avec le disque pâle.
   Plus l'inactif (`disabled`) : le visiteur non connecté voit le cœur et le nombre, il ne
   peut pas y toucher. Ni survol, ni curseur, et À MOITIÉ ESTOMPÉ (décision chef de projet
   2026-09-16, qui défait le « pas grisé » du 2026-09-12) : un cœur plein et net se lit comme
   une commande, et le visiteur déconnecté cliquait dessus sans comprendre pourquoi rien ne
   se passait.

   Le rouge est celui du cœur (--cCoeur3, --cCoeur0 pour le survol, 10_font.css) : un rouge
   sang, bordeaux foncé, à lui — le rouge de la famille --cRouge dit l'alerte et le danger,
   pas l'affection (décision chef de projet 2026-09-16, qui remplace le --cRouge3 du 12).
   Aucune couleur en dur (docs/designSystem/couleurs.md).

   Le bouton ne pose ni bordure ni fond : c'est une icône et un chiffre posés à même la page,
   comme le lien « En savoir plus » d'une tuile (.lienScenePlus). Padding : --gapReduit, la
   même variable que ce lien — une valeur nommée, jamais un chiffre (assets/vitrine/css/CLAUDE.md).
   ============================================ */
.toggleJaime {
    display: inline-flex;
    align-items: center;
    gap: var(--gapReduit);
    padding: var(--gapReduit) 0;
    border: none;
    background: none;
    font: var(--fMenu14);
    color: var(--cNoir3);
    cursor: pointer;
    user-select: none;
    /* `opacity` : le passage de 25 % à 50 % ou à 100 %, quand la réponse de fin de page
       arrive, se fait en fondu et non d'un coup — le cœur ne clignote plus (décision chef de
       projet 2026-09-16). `color` : le survol, comme avant. */
    transition: color 0.2s, opacity 0.4s;
}

/* Le disque pâle du survol est un pseudo-élément derrière le cœur : le cœur reste à sa
   place, seul le fond apparaît. `isolation` + `z-index` pour qu'il passe DERRIÈRE le tracé
   du cœur sans sortir du bouton. */
.toggleJaimeCoeur {
    position: relative;
    isolation: isolate;
    flex: none;
    width: 20px;
    height: 20px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linejoin: round;
    overflow: visible;
    transition: transform 0.2s, fill 0.2s, stroke 0.2s;
}

.toggleJaimeCoeur::before {
    content: '';
    position: absolute;
    z-index: -1;
    inset: -8px;
    border-radius: 50%;
    background: var(--cCoeur0);
    opacity: 0;
    transition: opacity 0.2s;
}

/* Le chiffre ne réserve aucune largeur : à zéro il est vide, le cœur est seul. */
.toggleJaimeNombre {
    font-variant-numeric: tabular-nums;
}

/* 2 — survol, bouton ACTIF seulement */
.toggleJaime:not(:disabled):hover {
    color: var(--cCoeur3);
}

.toggleJaime:not(:disabled):hover .toggleJaimeCoeur::before {
    opacity: 1;
}

/* 3 — allumé : cœur plein, à peine plus grand */
.toggleJaime[aria-pressed="true"] {
    color: var(--cCoeur3);
}

.toggleJaime[aria-pressed="true"] .toggleJaimeCoeur {
    fill: currentColor;
    transform: scale(1.08);
}

/* Le petit rebond quand on clique : le cœur grossit puis revient. Posé par le JavaScript
   au moment du geste, retiré à la fin de l'animation — jamais au chargement, sinon trente
   cœurs rebondiraient en chœur à l'ouverture de la page. */
.toggleJaimeAnime .toggleJaimeCoeur {
    animation: toggleJaimeRebond 0.35s ease-out;
}

@keyframes toggleJaimeRebond {
    0%   { transform: scale(1); }
    40%  { transform: scale(1.35); }
    100% { transform: scale(1.08); }
}

/* Inactif : pas de survol, pas de curseur, et ESTOMPÉ À 50 % (décision chef de projet
   2026-09-16). Le visiteur doit VOIR qu'il ne peut pas cliquer : sans l'estompe, un cœur
   inactif ressemblait trait pour trait à un cœur actif au repos.
   Le 2026-09-12 avait tranché l'inverse (« pas grisé, c'est une information ») : le chiffre
   reste lisible à 50 %, l'information est toujours là.
   Sur le Studio, l'utilisateur est toujours connecté : cet état n'y apparaît pas. */
.toggleJaime:disabled {
    cursor: default;
    opacity: 0.5;
}

/* EN ATTENTE : 25 % (décision chef de projet 2026-09-16). Le cœur tel que le serveur
   l'écrit, avant que la requête de fin de page ait répondu. Le JavaScript retire la classe
   dès la réponse : le cœur passe alors à 50 % (déconnecté, `disabled` ci-dessus) ou à 100 %
   (connecté). Trois paliers, pour qu'aucun ne se confonde avec un autre.
   ⚠️ Même poids que `.toggleJaime:disabled` (une classe + une classe, une classe + une
   pseudo-classe) : c'est l'ORDRE qui tranche. Cette règle doit rester APRÈS celle-là. */
.toggleJaime.toggleJaimeAttente {
    opacity: 0.25;
}

/* Le même halo de focus que les liens et boutons du site (31_cta.css). */
.toggleJaime:focus {
    outline: none;
}

.toggleJaime:focus-visible {
    box-shadow: 0 0 0 3px var(--cFormFocus);
    border-radius: 999px;
}

@media (prefers-reduced-motion: reduce) {
    .toggleJaime,
    .toggleJaimeCoeur,
    .toggleJaimeCoeur::before {
        transition: none;
    }

    .toggleJaimeAnime .toggleJaimeCoeur {
        animation: none;
    }
}

/*!******************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/form.css ***!
  \******************************************************************************************************************/
fieldset {
    background-color: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR1);
    margin: 10px 0;
    padding: 20px;
}

fieldset h3 {
    margin: 0 0 0.9375rem;
    color: var(--cAccent3);
}

hr {
    margin: 30px 0;
    border-top: var(--border);
    border-bottom: none;
}

hr.mini {
    margin: 10px 0;
    border-top: var(--border);
    border-bottom: none;
}

/* inutilisé 2026-06-13
#imgForm {
    max-width: 690px;
    width: 100%;
    margin: 15px 0;
}

#imgForm > div:last-child {
    aspect-ratio: 1100/449;
    max-width: 690px;
    width: 100%;
    margin-top: 60px;
    margin-bottom: 200px;
    background-size: contain;
    border: none;
    display: none;
}

#divForm {
    max-width: 690px;
    padding: 0 5px;
}

#divGlobalForm {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    text-align: center;
    gap: 10px;
}
*/


@media all and (min-width: 1500px) {
    /* inutilisé 2026-06-13
    #divGlobalForm {
        flex-direction: row;
        align-items: center;
        justify-content: center;
        gap: 30px;
    }

    #divForm div:last-child {
        display: block;
    }

    #divForm {
        padding: 0 30px;
    }

    #imgForm div:last-child {
        display: block;
    }
    */
}

/* inutilisé 2026-06-13
input.phNoir::placeholder {
    color: var(--cNoir);
}
*/

label {
    display: flex;
    align-items: baseline;
    font: var(--fLabel);
    margin: 0 0 2px;
    padding: 0;
    color: var(--cNoir1);
    user-select: none;
}

/* Label facultatif : couleur atténuée */
label:has(.facultatif) {
    color: var(--cNoir3);
}

/* Conteneur désactivé (champ disabled) */
.disabledDiv {
    opacity: 0.5;
}

input, select, textarea {
    width: 100%;
    border: var(--borderInput);
    border-radius: var(--borderR1);
    padding: 7px 8px;
    font: var(--fText16);
    color: var(--cNoir2);
    box-sizing: border-box;
}

/* Inputs spéciaux : pas de width 100% */
input[type="color"],
input[type="checkbox"],
input[type="radio"],
input[type="range"] {
    width: auto;
}

/* Un nombre tient en huit chiffres : son champ a la même largeur partout et se lit comme un petit
   nombre (chef de projet, 2026-09-27). La largeur ajoute aux chiffres le retrait (8px de chaque
   côté) et les flèches. */
input[type="number"] {
    width: calc(8ch + 40px);
    max-width: 100%;
}

/* Un menu déroulant prend la largeur de son plus long choix, pas celle de la ligne.
   fit-content et non auto : dans un conteneur flex, auto laisse le menu s'étirer. */
select {
    width: fit-content;
    max-width: 100%;
}

/* Input couleur */
input[type="color"] {
    padding: 2px;
    height: 40px;
    min-width: 60px;
    cursor: pointer;
}

/* Champ désactivé — et champ brut d'un formulaire figé : les sections entrées et lots de
   la page « Configuration » d'un aperçu sont du HTML brut, sans attribut `disabled`. Même
   trait pointillé sur fond retiré : on lit la valeur, on voit qu'on ne la saisit pas. */
input:disabled,
select:disabled,
textarea:disabled,
.formulaireFige input:not([type="checkbox"]):not([type="radio"]),
.formulaireFige select,
.formulaireFige textarea {
    background: none;
    border: 1px dashed var(--cBlanc5);
    pointer-events: none;
}

input[type="file"] {
    padding: 5px;
    cursor: pointer;
    background: var(--cBlanc);
}

input[type="file"]::file-selector-button {
    font: var(--fText16);
    color: var(--cBlanc);
    background: var(--cAccent3);
    border: none;
    border-radius: var(--borderR1);
    padding: 6px 12px;
    cursor: pointer;
    margin-right: 10px;
}

input[type="file"]::file-selector-button:hover {
    background: var(--cAccent4);
}

input::placeholder,
textarea::placeholder {
    color: var(--cNoir5);
}

textarea::placeholder {
    white-space: pre-line;
}


label .facultatif /*, label .facultatifSpan, label .modifiable (inutilisé 2026-06-13) */ {
    display: inline;
    color: var(--cAccent4);
    font: var(--fLight14);
    padding-left: 10px;
    text-transform: lowercase;
}

/* Cacher "Facultatif" sur les champs conditionnels */
label.sansFacultatif .facultatif {
    display: none;
}

/* Textes d'aide */
form small,
form small a,
.help-text {
    color: var(--cNoir4);
    display: block;
    font: var(--fLight14);
    margin-left: 0;
    max-width: calc(100vw - 85px);
    padding: 2px 0;
}

.help-text.help-alerte {
    color: var(--cRouge4);
}
/* inutilisé 2026-06-13
div.cbForm input {
    cursor: pointer;
    width: auto;
    margin-top: 0;
}

div.cbForm label {
    cursor: pointer;
    text-align: justify;
}
*/

form {
    margin: 0 auto;
    padding: 0;
    text-align: left;
    max-width: 600px;
    min-width: auto;
    width: 100%;
}

/* Le formulaire du bouton d'action (_boutonAction.twig) n'est qu'un moyen d'envoyer un POST :
   il ne prend aucune place. Sans ça, il recevait la mise en page des formulaires de saisie
   (600px au plus, centré) et le bouton ne se dessinait pas comme le même bouton en lien : sur
   une carte d'offre en une colonne, « Accéder aux services » (un <button> dans ce formulaire)
   faisait 600px quand « Passer à Essential » (un lien) prenait toute la carte (vu par le chef
   de projet 2026-10-15). Le bouton se place désormais comme le ferait un lien au même endroit. */
form.formBoutonAction {
    display: contents;
}

/* inutilisé 2026-06-13
form > div > div.rowForm div {
    margin: 5px 0;
}

form > div.rowForm {
    margin: 0;
}

form > div.rowForm div.rowFormDownTxt {
    margin: 0 20px;
}

form > div.rowForm div.rowFormDownTxt > div {
    display: flex;
    justify-content: center;
    align-items: center;
    border: 3px solid var(--cBlanc03);
    border-radius: 10px;
    margin: 0;
    font: var(--fLight14);
    text-align: center;
    height: 100%;
    width: 100%;
    background-color: var(--cBlanc);
}
*/

/* inutilisé 2026-06-13
.infoLight {
    opacity: .8;
}
*/

/* inutilisé 2026-06-13
#formGainImg {
    grid-column: 1 / 2;
}

#formFormulaire {
    grid-column: 2 / 3;
    max-width: 320px;
}

p#pML {
    margin: 0 10% 0 38%;
    grid-column: 1/3;
}
*/

/* inutilisé 2026-06-13
.rowForm {
    display: grid;
    grid-template-columns: 100% 0%;
}

.rowForm ul {
    color: var(--cRouge3);
    margin-block-start: 3px;
    margin-block-end: 3px;
    padding: 10px 0 0;
}
*/

/* Checkbox (.divCb) - Structure : .divCb > input + label > .svgCb + texte */
.divCb {
    position: relative;
    margin: 5px 0;
}

.divCb input[type="checkbox"] {
    position: absolute;
    opacity: 0;
    cursor: pointer;
    width: 0;
    height: 0;
}

.divCb label {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
    margin: 0;
}

/* Case à cocher ou bouton radio désactivé : même atténuation du label (SVG + texte) —
   sélecteur élargi au radio (.divRb), qui n'avait aucune marque de désactivation. */
.divCb input[type="checkbox"]:disabled ~ label,
.divRb input[type="radio"]:disabled ~ label {
    opacity: 0.65;
}

.svgCb {
    width: 22px;
    height: 22px;
    color: var(--cBlanc);
    flex-shrink: 0;
}

.svgCb .checked {
    display: none;
}

.svgCb .checked path {
    fill: var(--cNoir1);
}

input[type="checkbox"]:checked ~ label .svgCb .checked {
    display: block;
}

/* inutilisé 2026-08-09 — plus aucun _checkbox.svg (Studio ni Vitrine) ne porte de .fondCb
input[type="checkbox"]:checked ~ label .svgCb .fondCb {
    fill: var(--cForm);
}
*/

.divCbSupp input[type="checkbox"]:checked ~ label .svgCb svg .checked path {
    fill: var(--cRouge3);
}

/* Radio button (.divRb) - Structure : .divRb > input + label > .svgRb + texte */
.divRb {
    position: relative;
    margin: 8px 0 5px;
}

.divRb input[type="radio"] {
    position: absolute;
    opacity: 0;
    cursor: pointer;
    width: 0;
    height: 0;
}

.divRb label {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
    margin: 0;
}

.svgRb {
    width: 22px;
    height: 22px;
    color: var(--cBlanc);
    flex-shrink: 0;
}

.svgRb .checked {
    display: none;
}

input[type="radio"]:checked ~ label .svgRb .checked {
    display: block;
}

input[type="radio"]:checked ~ label .svgRb .fondCb {
    fill: var(--cForm);
}

/* ==========================================================================
   FORMULAIRE FIGÉ — la page « Configuration » d'un aperçu (previewSceneConfig.twig)
   montre le formulaire d'une scène sans le rendre saisissable.
   ========================================================================== */

.formulaireFige {
    pointer-events: none;
    opacity: 0.85;
}

/* Toggles (sources de participants) et pilules (slots de lots) : HTML brut, sans attribut
   `disabled` — sans cette atténuation ils gardent l'apparence d'un contrôle actif. Même
   valeur que les cases à cocher et les boutons radio désactivés. */
.formulaireFige .toggleAvecLabel {
    opacity: 0.65;
}

/* inutilisé 2026-06-13
#uploadBtn1:focus {
    box-shadow: 0 0 0 2px var(--cForm);
}
*/

input:focus,
select:focus,
textarea:focus {
    border-color: var(--cFormFocus);
    outline: 2px solid var(--cFormFocus);
}

label small {
    display: inline-block;
    transform: translateY(-6px);
}

/* inutilisé 2026-06-13
.rowFormDownTxt {
    display: none;
}
*/

/* inutilisé 2026-06-13
#homeDivHaut {
    padding: 15px 15px 1px;
}

#homeDiv button.btn {
    bottom: 47px;
}

.formulaire #accrochePage {
    margin-bottom: -60px;
}

#homeDivBas {
    padding: 1px;
    margin: auto;
    width: 80%;
    text-align: center;
}
*/

/* inutilisé 2026-06-13
.rowOptin1,
.rowOptin2,
.rowOptin3,
.rowOptin4 {
    position: relative;
    margin: 5px 0;
}

.rowOptin1 label a {
    padding: 0;
}
*/


/* inutilisé 2026-06-13
#divForm div #loadingBarSpinner {
    display: none;
    justify-content: center;
    margin: 20px;
    font: var(--fLabel);
    color: var(--cTexte1);
    padding: 15px 30px;
}
*/

/* inutilisé 2026-06-13
#spinnerIcon {
    display: inline-block;
    width: 18px;
    height: 18px;
    margin-right: 10px;
    border: solid 2px transparent;
    border-top-color: var(--cTexte1);
    border-left-color: var(--cTexte1);
    border-radius: 50%;
    animation: animeSpinnerIcon 1000ms linear infinite;
}

@keyframes animeSpinnerIcon {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}
*/

.ctaSupprimer,
.ctaSecondaire,
.ctaValider /*, .ctaValider2 (inutilisé 2026-06-13) */ {
    width: 100%;
    /* Hauteur minimale, pas fixe : un libellé sur deux lignes (« Changer mon mot de passe »)
       se faisait couper en bas (vu en production le 2026-10-13). */
    min-height: 50px;
    padding: 10px 20px;
    margin-top: 20px;
    margin-bottom: 8px;
    cursor: pointer;
    font: var(--fCta16);
    border-radius: var(--borderR1);
}

.ctaSecondaire {
    display: block;
    text-align: center;
    border: 2px solid var(--cAccent3);
    background: var(--cBlanc);
    color: var(--cAccent3);
}

.ctaValider /*, .ctaValider2 (inutilisé 2026-06-13) */ {
    border: none;
    background: var(--cAccent_a);
    color: var(--cAccentt);
}

/* Un lien habillé en bouton de validation (« Aller à mon studio ») : un <button> centre son
   libellé tout seul, un <a> non — le texte restait en haut à gauche de la zone bleue
   (décision chef de projet 2026-10-14). */
a.ctaValider {
    display: flex;
    align-items: center;
    justify-content: center;
    text-decoration: none;
}

.ctaSupprimer {
    border: 2px solid var(--cBlanc03);
    color: var(--cRouge4);
}

.ctaValider:hover /*, .ctaValider2:hover (inutilisé 2026-06-13) */ {
    background: var(--cAccent_ah);
    color: var(--cAccentt);
}

.ctaValider:disabled,
/* .ctaValider2:disabled, (inutilisé 2026-06-13) */
.ctaSecondaire:disabled,
.ctaSupprimer:disabled {
    opacity: 0.4;
    cursor: wait;
    pointer-events: none;
    filter: grayscale(1);
}

.formulaire {
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto;
}

@media (min-width: 650px) {

    .formulaire {
        grid-template-columns: 1fr 1fr;
        grid-template-rows: auto;
        gap: 0 var(--gapListe); /* aligné 30 -> 32px (échelle PO 2026-07-18) */
    }

    /* inutilisé 2026-06-13
    .formulaireBorne {
        grid-column: 1 / 2;
        grid-row: 1 / 2;
    }

    .formulaireDate {
        grid-column: 1 / 2;
        grid-row: 2 / 3;
    }

    .formulaireCommercial {
        grid-column: 1 / 2;
        grid-row: 3 / 4;
    }

    .formulaireMagasin {
        grid-column: 2 / 3;
        grid-row: 1 / 5;
        display: grid;
    }
    */

}

/* inutilisé 2026-06-13
p#messageDate {
    color: var(--cNoir3);
    font-style: italic;
}

p#messageDate.erreurDate,
p#messageDate2.erreurDate {
    color: var(--cRouge3);
    font-style: normal;
}
*/

fieldset ul {
    margin: 0 0 10px 0;
}

fieldset ul li {
    color: var(--cRouge3);
}

/* inutilisé 2026-06-13
.imgBorne {
    max-width: 100%;
    height: auto;
    margin: 0 auto;
    display: block;
}
*/

label.required {
    position: relative;
    width: max-content;
}
/* inutilisé 2026-06-13
label.required2:after {
    content: "*";
    margin-left: 3px;
    color: var(--cNoir2);
}
*/

textarea {
    width: 100%;
    height: 100px;
    resize: vertical;
    border-bottom-right-radius: 0;
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNkLGtCQUFrQjtJQUNsQixpQ0FBaUM7SUFDakMseUJBQXlCO0lBQ3pCLHNCQUFzQjtBQUMxQjs7QUFFQTtJQUNJLFlBQVk7SUFDWiw0QkFBNEI7SUFDNUIsc0JBQXNCO0FBQzFCOztBQUVBOzswQ0FFMEM7QUFDMUM7SUFDSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixxQkFBcUI7QUFDekI7O0FBRUE7SUFDSSxpQ0FBaUM7SUFDakMscUJBQXFCO0FBQ3pCOztBQUVBO0lBQ0ksNkJBQTZCO0lBQzdCLHNCQUFzQjtBQUMxQjs7QUFFQTs7OztJQUlJLFlBQVk7SUFDWixZQUFZO0lBQ1osb0JBQW9CO0lBQ3BCLG9CQUFvQjtBQUN4Qjs7QUFFQTtJQUNJLGFBQWE7SUFDYiwwQkFBMEI7SUFDMUIsd0JBQXdCO0FBQzVCOztBQUVBOztJQUVJO1FBQ0ksOEJBQThCO1FBQzlCLHdCQUF3QjtRQUN4QixzQkFBc0IsRUFBRSw4Q0FBOEM7SUFDMUU7O0lBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXFCQzs7QUFFTDs7QUFFQTs7Ozs7Ozs7Ozs7Q0FXQzs7QUFFRDtJQUNJLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLHFCQUFxQjtBQUN6Qjs7QUFFQTs7Ozs7OztDQU9DOztBQUVEO0lBQ0ksa0JBQWtCO0lBQ2xCLGtCQUFrQjtBQUN0QjtBQUNBOzs7Ozs7Q0FNQzs7QUFFRDtJQUNJLFdBQVc7SUFDWCxhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLDZCQUE2QjtBQUNqQyxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy8wMF9yZXNldC5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy8xMF9mb250LmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzLzMwX2Jhc2UuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvMzFfY3RhLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzLzQyX2F1dGguY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvaGF1dERlUGFnZUNvbXB0ZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTNfYmxvY3MuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU0X2ljb25lcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTVfc2lkZWJhckV2ZW5lbWVudC5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTVfZXZlbmVtZW50cy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfcnVicmlxdWVzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81NV9maWx0cmVzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81NV9zY2VuYXJpb3NDYXRhbG9ndWUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9zYWxsZS9lY3Jhbi9jc3MvX3RvZ2dsZVNjZW5lLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81NV9zY2VuYXJpb01vZGlmaWVyLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fZXRpcXVldHRlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8vX2dyaWxsZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8vX2Zvcm11bGFpcmVzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fZmFxRW5jYWRyZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8vX29uZ2xldE1lbnUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU2X3NjZW5hcmlvL19tZW51QWpvdXRlci5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8vX2JyaXF1ZXNDb3VsZXVycy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8vX2RyYWdEcm9wLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2NvbXBvc2FudHMvYm91dG9uRmVybWV0dXJlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fbW9kYWxlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fYWxlcnRlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8vX3VwbG9hZHMuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU2X3NjZW5hcmlvL19ibG9jUmVzZWF1U29jaWFsLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fb25nbGV0R3JvdXBlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8vX29uZ2xldERpc3RyaWJ1dGlvbnMuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU2X3NjZW5hcmlvL19vbmdsZXRDYXJ0b25zLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fb25nbGV0UmVzdWx0YXRzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fb25nbGV0UHVibGljYXRpb24uY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU2X3NjZW5hcmlvL19yZWNhcGl0dWxhdGlmLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby9fZGVyb3VsZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNTZfc2NlbmFyaW8uY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU3X29uZ2xldFN0dWRpby5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9jb21wb3NhbnRzL21lbnVTb3VzUnVicmlxdWVzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3N0dWRpby81OF9tZW51U291c1J1YnJpcXVlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9zdHVkaW8vNjBfYWNjZXNTdHVkaW8uY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3Mvc3R1ZGlvLzU5X25vdGVyLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc2FsbGUva2l0U2luZ2xldG9uL2Nzcy9jYXJ0ZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9jb21wb3NhbnRzL2Zvcm1BY2Nlc0NvZGUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvY29tcG9zYW50cy9jaGFtcENvZGU2LmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2NvbXBvc2FudHMvc3VyY291Y2hlUHJldmlldy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9jb21wb3NhbnRzL2phaW1lLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2Zvcm0uY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIiosIDo6YWZ0ZXIsIDo6YmVmb3JlIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5ib2R5IHtcbiAgICBtYXJnaW46IDA7XG59XG5cbnVsIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG59IiwiaHRtbCB7XG4gICAgLyogSWwgZXN0IGludGVyZGl0IGRlIHJham91dGVyIGRlcyBjb3VsZXVycyBzYW5zIGRlbWFuZGVyIGwnYWNjb3JkIGR1IFBPICovXG4gICAgLS1jQmxhbmMxOiB2YXIoLS1jQmxhbmMpO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxhbmMxcDogI0UwRTBFMDsgKi9cbiAgICAtLWNCbGFuYzAyOiAjRjVGNUY1O1xuICAgIC0tY0JsYW5jMjogI0YwRjBGMDtcbiAgICAtLWNCbGFuYzAzOiAjZGNlMWVhO1xuICAgIC0tY0JsYW5jMzogI0NDQ0ZDQztcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jNDogI0FBQUZBQTsgKi9cbiAgICAtLWNCbGFuYzU6ICM5OTlDOTk7XG5cblxuICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgQ09VTEVVUlMgVEVYVEUgTk9JUiAtIFVUSUxJU0FUSU9OIE9CTElHQVRPSVJFXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qIC0tY05vaXIxIDogw4lMw4lNRU5UUyBEJ0VNUEhBU0VcbiAgICAgICAtIFRpdHJlcyA6IGgxLCBoMiwgaDNcbiAgICAgICAtIFRleHRlIGRlcyBib3V0b25zIChxdWFuZCBwYXMgZGUgY291bGV1ciBkw6lmaW5pZSlcbiAgICAgICAtIExhYmVscyBvYmxpZ2F0b2lyZXMgKHJlcXVpcmVkKVxuICAgICAgIC0gTWVudXMgZGUgbmF2aWdhdGlvblxuICAgICAgIC0gQ2hlY2tib3ggZXQgcmFkaW8gYm91dG9uc1xuICAgICAgIC0gVmFsZXVyIHByaW5jaXBhbGUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIzXCIgZGFucyBcIjMgLyA1XCIpXG4gICAgKi9cbiAgICAtLWNOb2lyMTogIzE4MTgxODtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIxbzogIzE4MTgxODU1OyAqL1xuXG4gICAgLyogLS1jTm9pcjIgOiBDT1JQUyBERSBURVhURVxuICAgICAgIC0gUGFyYWdyYXBoZXMgPHA+XG4gICAgICAgLSBMaXN0ZXMgPGxpPiwgw6ludW3DqXJhdGlvbnNcbiAgICAgICAtIExhYmVscyBmYWN1bHRhdGlmc1xuICAgICAgIC0gVGV4dGUgc2Fpc2kgZGFucyBsZXMgaW5wdXRzXG4gICAgICAgLSBUaXRyZXMgaDQsIGg1LCBoNlxuICAgICAgIC0gVmFsZXVyIHNlY29uZGFpcmUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIvIDVcIiBkYW5zIFwiMyAvIDVcIilcbiAgICAqL1xuICAgIC0tY05vaXIyOiAjMjgyODI4O1xuXG4gICAgLyogLS1jTm9pcjMgOiBURVhURSBURVJUSUFJUkVcbiAgICAgICAtIFBsYWNlaG9sZGVyc1xuICAgICAgIC0gTWVzc2FnZXMgZCdhaWRlIGRpc2NyZXRzXG4gICAgICAgLSBUZXh0ZSBkw6lzYWN0aXbDqVxuICAgICovXG4gICAgLS1jTm9pcjM6ICM1NTU7XG5cbiAgICAvKiAtLWNOb2lyNC01IDogVEVYVEUgVFLDiFMgQVRUw4lOVcOJXG4gICAgICAgLSDDiWzDqW1lbnRzIGTDqXNhY3RpdsOpc1xuICAgICAgIC0gVGV4dGUgZMOpY29yYXRpZlxuICAgICovXG4gICAgLS1jTm9pcjQ6ICM5OTk7XG4gICAgLS1jTm9pcjU6ICNCQkI7XG4gICAgLS1jQmxhbmM6ICNGRkY7XG4gICAgLS1jTm9pcjogIzAwMDtcbiAgICAtLWNUZXh0ZTE6ICMyMjI7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUZXh0ZTI6ICM0NDQ7ICovXG4gICAgLS1jRm9ybTogIzAwMDtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fYjogIzU1NTsgKi9cblxuICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgUEFMRVRURVMgREUgUsOUTEUg4oCUIHVuZSBzZXVsZSBmb3JtZSwgOCBwYWxpZXJzLCB0b3Vqb3VycyBub21tw6lzIHBhcmVpbFxuICAgICAgIDAgZm9uZCB0csOocyBww6JsZSDCtyAxIGZvbmQgcMOibGUgwrcgMiBib3JkdXJlIC8gbW95ZW4gwrcgMyBjb3VsZXVyIHBsZWluZSAoYm91dG9uLCBsaWVuLFxuICAgICAgIG9uZ2xldCBhY3RpZiwgaW5kaWNhdGV1cikgwrcgNCBmb25jw6kgLyBzdXJ2b2wgwrcgX2EgZMOpZ3JhZMOpIMK3IF9haCBkw6lncmFkw6kgYXUgc3Vydm9sIMK3XG4gICAgICAgdCB0ZXh0ZSBwb3PDqSBzdXIgbGEgY291bGV1ciBwbGVpbmUuXG4gICAgICAgQWNjZW50IGVzdCBsYSBjb3VsZXVyIGRlIGwnZXNwYWNlIG/DuSBsJ29uIGVzdCA6IGVsbGUgY2hhbmdlIHBhciB1bmUgY2xhc3NlIHN1ciA8Ym9keT5cbiAgICAgICAodm9pciBsZSBibG9jIGFwcsOocyBodG1se30pLiBPciwgUm91Z2UgZXQgU3VjY2VzIG5lIGNoYW5nZW50IGphbWFpcy5cbiAgICAgICBEw6ljaXNpb24gUE8gMjAyNi0wOS0wNS4gQXVjdW5lIGF1dHJlIGNvdWxldXIgZGUgcsO0bGUgbidlc3QgYWRtaXNlLlxuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgICAvKiBBY2NlbnQgOiB2b2lyIGxlIGJsb2MgYm9keSB7IH0gYXByw6hzIGh0bWwgeyB9LiBFbGxlIHZpdCBzdXIgYm9keSwgcGFzIGljaSDigJQgdW5lXG4gICAgICAgdmFyaWFibGUgZMOpcml2w6llIChkw6lncmFkw6ksIGhhbG8pIHNlIGNhbGN1bGUgbMOgIG/DuSBlbGxlIGVzdCBkw6ljbGFyw6llLCBldCBkb2l0IGRvbmNcbiAgICAgICDDqnRyZSBkw6ljbGFyw6llIHN1ciBsZSBtw6ptZSDDqWzDqW1lbnQgcXVlIGxhIGNsYXNzZSBxdWkgY2hhbmdlIGxhIGNvdWxldXIuICovXG5cbiAgICAvKiBPciDigJQgcydpbnNjcmlyZSwgY29ubmV4aW9uLCB0YXJpZiwgbWlzZSBlbiBhdmFudCAqL1xuICAgIC0tY09yMDogI2ZlZmNlODtcbiAgICAtLWNPcjE6ICNmZWYzYzc7XG4gICAgLS1jT3IyOiAjZjVkOTZiO1xuICAgIC0tY09yMzogI0ZGRDgxNDsgLyogbCdvciBkJ0FtYXpvbiwgdGV4dGUgZm9uY8OpIGRlc3N1cyAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMTAtMDcpICovXG4gICAgLS1jT3I0OiAjRkZDRTEyOyAvKiBzb24gc3Vydm9sICovXG4gICAgLS1jT3JfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY09yMyksIHZhcigtLWNPcjQpIDEwMCUpO1xuICAgIC0tY09yX2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jT3IzKSwgdmFyKC0tY09yMykgMTAwJSk7XG4gICAgLS1jT3J0OiAjMTgxODE4OyAvKiBmb25jw6kgOiBsZSBibGFuYyBzdXIgLS1jT3IzIG5lIGZhaXNhaXQgcXVlIDIsMDoxIGRlIGNvbnRyYXN0ZSwgOCw4OjEgYWluc2kgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTEwLTA3KSAqL1xuXG4gICAgLyogUm91Z2Ug4oCUIGVycmV1ciwgYWxlcnRlLCBzdXBwcmVzc2lvbiwgZ2VzdGUgZGFuZ2VyZXV4ICovXG4gICAgLS1jUm91Z2UwOiAjZmRmM2YyO1xuICAgIC0tY1JvdWdlMTogI2ZiZTJkZjtcbiAgICAtLWNSb3VnZTI6ICNmNWFhYTM7XG4gICAgLS1jUm91Z2UzOiAjZjE1YjRlO1xuICAgIC0tY1JvdWdlNDogIzkzMDAwMDtcbiAgICAtLWNSb3VnZV9hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jUm91Z2UzKSwgdmFyKC0tY1JvdWdlNCkgMTAwJSk7XG4gICAgLS1jUm91Z2VfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNSb3VnZTMpLCB2YXIoLS1jUm91Z2UzKSAxMDAlKTtcbiAgICAtLWNSb3VnZXQ6ICNGRkY7XG5cbiAgICAvKiBDxZN1ciDCqyBKJ2FpbWUgwrsg4oCUIHVuIHJvdWdlIMOgIGx1aSwgc2FuZywgYm9yZGVhdXggZm9uY8OpIDogbGUgcm91Z2UgZGUgbGEgZmFtaWxsZSBkaXRcbiAgICAgICBsJ2FsZXJ0ZSBldCBsZSBkYW5nZXIsIHBhcyBsJ2FmZmVjdGlvbiAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTYpLlxuICAgICAgIERldXggY3JhbnMsIGNvbW1lIGxlcyBhdXRyZXMgZmFtaWxsZXMgOiBsZSBww6JsZSBkdSBzdXJ2b2wsIGxhIGNvdWxldXIgZHUgY8WTdXIuICovXG4gICAgLS1jQ29ldXIwOiAjZjZlNGU3O1xuICAgIC0tY0NvZXVyMzogI2MxMTkyZjtcblxuICAgIC8qIFN1Y2NlcyDigJQgdmFsaWRhdGlvbiwgY29uZmlybWF0aW9uICovXG4gICAgLS1jU3VjY2VzMDogI2YwZmJmZjtcbiAgICAtLWNTdWNjZXMxOiAjZGRmMWZhO1xuICAgIC0tY1N1Y2NlczI6ICM5M2QzZWE7XG4gICAgLS1jU3VjY2VzMzogIzBlOWRjOTtcbiAgICAtLWNTdWNjZXM0OiAjMGI1ZjdhO1xuICAgIC0tY1N1Y2Nlc19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jU3VjY2VzMyksIHZhcigtLWNTdWNjZXM0KSAxMDAlKTtcbiAgICAtLWNTdWNjZXNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNTdWNjZXMzKSwgdmFyKC0tY1N1Y2NlczMpIDEwMCUpO1xuICAgIC0tY1N1Y2Nlc3Q6ICNGRkY7XG5cbiAgICAtLWNCYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuXG4gICAgLyogTGUgYmFuZGVhdSBkZXMgYXBlcsOndXMgKHBhZ2VSdWJyaXF1ZS5jc3MsIOKJpSAxNjAwcHgpLiBVTiBQTEFURUFVIFVOSSBBVSBDRU5UUkUsIGxlIGTDqWdyYWTDqVxuICAgICAgIHN1ciBsZXMgYm9yZHMgc2V1bGVtZW50IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0yNCkgOiBsJ2FuY2llbiBkw6lncmFkw6kgYWxsYWl0XG4gICAgICAgZHUgZ3JpcyBkZXMgYm9yZHMgYXUgYmxhbmMgZHUgY2VudHJlLCBldCBkZXMgY2FydGVzIGJsYW5jaGVzIGlkZW50aXF1ZXMgcGFyYWlzc2FpZW50XG4gICAgICAgYmxhbmNoZXMgc3VyIGxlIGdyaXMgZXQgdGVybmVzIHN1ciBsZSBibGFuYy4gU3VyIGxlIHBsYXRlYXUsIHRvdXRlcyBzZSBkw6l0YWNoZW50XG4gICAgICAgcGFyZWlsLiBEZXV4IGhhbG9zIGRlIGNvdWxldXIsIHRlbnVzIGRhbnMgbGVzIGJvcmRzLCBkb25uZW50IHVuIHBldSBkZSB2aWUgOiBsZSBibGV1XG4gICAgICAgZHUgc2l0ZSBlbiBoYXV0IMOgIGdhdWNoZSwgbCdvcmFuZ2UgZGVzIGlsbHVzdHJhdGlvbnMgZW4gYmFzIMOgIGRyb2l0ZS4gKi9cbiAgICAtLWNCYWNrZ3JvdW5kR3JhbmQ6XG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCgxNCUgNDAlIGF0IDAlIDI1JSwgIzQzNmJjMTFmLCB0cmFuc3BhcmVudCksXG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCgxNCUgNDAlIGF0IDEwMCUgNzUlLCAjZjM5YzM0MWYsIHRyYW5zcGFyZW50KSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjRThFQkYwIDAlLCAjRjRGNUY3IDEyJSwgI0Y0RjVGNyA4OCUsICNFOEVCRjAgMTAwJSk7XG5cbiAgICAvKiBMYXlvdXQgKi9cbiAgICAtLWxhcmdldXI6IDEzNjBweDtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tbWF4V2lkdGg6IDc2MHB4OyAqL1xuICAgIC0tY0JnOiB2YXIoLS1jQmxhbmMpO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmdfYjogI0NDQzsgKi9cblxuICAgIC8qIE5vaXIgdHJhbnNwYXJlbnQg4oCUIG9tYnJlcyAqL1xuICAgIC0tY09tYnJlOiAjMDAwMjsgICAgICAgICAgICAvKiBlbnZpcm9uIDE1JSAqL1xuICAgIC0tY09tYnJlRm9ydGU6ICMwMDA0OyAgICAgICAvKiBlbnZpcm9uIDMwJSAqL1xuXG4gICAgLyogdHJhbnNwYXJlbnQg4oCUIG92ZXJsYXlzICovXG4gICAgLS1jT3ZlcmxheTogIzAwMDg7ICAgICAgICAgIC8qIGVudmlyb24gNTAlICovXG4gICAgLS1jQmxhbmNPdmVybGF5OiAjRkZGQzsgICAgIC8qIGVudmlyb24gODAlICovXG4gICAgLS1jQmxhbmNWZXJyZTogI0ZGRkZGRjhDOyAgIC8qIGVudmlyb24gNTUlIOKAlCB2ZXJyZSBkw6lwb2xpLCB0b3Vqb3VycyBhdmVjIHVuIGZsb3UgKGJhcnJlIGV0IGJ1bGxlIGRlIGwnYXBlcsOndSkgKi9cblxuICAgIC8qIE9tYnJlcyBjb21wb3PDqWVzICovXG4gICAgLS1vbWJyZVBvcnRlZTogMCA0cHggMTJweCB2YXIoLS1jT21icmUpO1xuICAgIC0tb21icmVQb3J0ZWUyOiAwIDBweCAyNXB4ICMwMDA7XG4gICAgLS1vbWJyZU1vZGFsZTogMCAxMHB4IDQwcHggdmFyKC0tY09tYnJlRm9ydGUpO1xuICAgIC0tb21icmVJbnRlcm5lOiAwIDAgMTBweCAxMHB4IGluc2V0IHZhcigtLWNCbGFuYzAyKTtcblxuICAgIC8qIENvdWxldXJzIE5vaXIgZ3JhZGllbnRzICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNOb2lyM19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNTA1ODU4LCAjMzAzODM4IDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM1MDU4NTgsICM1MDU4NTggMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNOb2lyM19haExpZ2h0OiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNzA3ODc4LCAjNzA3ODc4IDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYXQ6ICNGRkY7ICovXG5cblxuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1zQWxlcnRlX3M6ICNERUM0QzQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUdXRvOiAjQzZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b190OiAjMDAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b19haDogI2Q3OWFmMjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jMV90OiAjMTgxODE4OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUGxhY2Vob2RlcjogIzg4ODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fczogI0ZGRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tYnNDdGE6IDAgN3B4IDE0cHggIzMzNTIsIDAgM3B4IDZweCAjMDAwMTsgKi9cblxuICAgIC8qIEZvcm11bGFpcmVzIHV0aWxpc2F0ZXVyICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtVXNyOiAjRUVGQUZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iOiAjMzM0OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9oOiAjRkZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iZjogIzBBRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1Vc3JfY2I6ICMwNTk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtX2JmOiAjM0MwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybV9jYjogIzU5MDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0tvX2I6ICNGODg7ICovXG5cbiAgICAvKiBMb2dvICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNMb2dvMTogI0VCRjdFNDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0xvZ28yOiAjQzZFOUFGOyAqL1xuXG4gICAgLS1mZkJhc2U6ICdOb3RvIFNhbnMnLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZmTW9ubzogJ0pldEJyYWluc01vbm8nLCAnVmVyZGFuYScsIG1vbm9zcGFjZTtcbiAgICAvKiBQb2xpY2Ugc3RhbmRhcmQgZGUgbCfDqWNyYW4gcHVibGljICh0b3V0IGNlIHF1aSBlc3QgcHJvamV0w6kpIOKAlCBzZXVsZSBzb3VyY2UsIGx1ZSBhdXNzaVxuICAgICAgIHBhciBsZXMgY2FudmFzIHZpYSBwb2xpY2VFY3JhbigpIChraXRQbHVnaW4vc2hhcmVkL3BvbGljZS50cykuIETDqWNpc2lvbiAyMDI2LTA4LTI5IDpcbiAgICAgICBOb3RvIFNhbnMgc2V1bGUsIHBhcyBkZSBTY2FkYSBuaSBNb250c2VycmF0IHN1ciBjZSBxdWUgdm9pdCBsZSBwdWJsaWMuICovXG4gICAgLS1mZkVjcmFuOiAnTm90byBTYW5zJywgc2Fucy1zZXJpZjtcbiAgICAvKiBQb2xpY2UgZGVzIGNoaWZmcmVzIGRlIGwnw6ljcmFuIHB1YmxpYyAodGlyYWdlcywgY29tcHRlIMOgIHJlYm91cnMsIHBhbm5lYXV4IMOgIHZvbGV0cykg4oCUXG4gICAgICAgY2hpZmZyZXMgbW9ub2xhcmdlcyBnYXJhbnRpcyBhdXggZGV1eCBmYW1pbGxlcywgbHVlIHBhciBsZXMgY2FudmFzIHZpYSBwb2xpY2VDaGlmZnJlcygpLlxuICAgICAgIETDqWNpc2lvbiAyMDI2LTA4LTI5IDogcmVtcGxhY2UgJ0NvdXJpZXIgTmV3JyAocG9saWNlIG1hY2hpbmUsIGFic2VudGUgZCdBbmRyb2lkL0xpbnV4KS4gKi9cbiAgICAtLWZmQ2hpZmZyZXM6ICdVYnVudHUgU2FucycsICdOb3RvIFNhbnMnLCBzYW5zLXNlcmlmO1xuXG4gICAgLyogSWwgZXN0IGludGVyZGl0IGRlIHJham91dGVyIGRlcyBzdHlsZXMgdHlwbyBzYW5zIGRlbWFuZGVyIGwnYWNjb3JkIGR1IFBPICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWZUaXRyZTogbm9ybWFsIG5vcm1hbCA3MDAgMzJweCAnU2NhZGEnLCBzYW5zLXNlcmlmOyAqL1xuICAgIC0tZkgxOiBub3JtYWwgbm9ybWFsIDcwMCAzMnB4ICdTY2FkYScsIHNhbnMtc2VyaWY7XG4gICAgLS1mSDI6IG5vcm1hbCBub3JtYWwgNzAwIDI0cHggJ1NjYWRhJywgc2Fucy1zZXJpZjtcbiAgICAtLWZIMzogbm9ybWFsIG5vcm1hbCA0MDAgMjJweCAnU2NhZGEnLCBzYW5zLXNlcmlmO1xuICAgIC0tZkg0OiBub3JtYWwgbm9ybWFsIDQwMCAxOHB4ICdTY2FkYScsIHNhbnMtc2VyaWY7XG4gICAgLyogVGl0cmUgZGUgbCfDqXbDqW5lbWVudCBzdXIgbCfDqWNyYW4gcHVibGljICguem9uZVRpdHJlVGV4dGUpIDogcG9saWNlIGRlIGwnw6ljcmFuLCBwYXMgU2NhZGEuXG4gICAgICAgTGEgdGFpbGxlIGVzdCByZWNhbMOpZSDDoCBsJ2FmZmljaGFnZSBwYXIgR2VzdGlvbm5haXJlRm9uZEVuVGV0ZS4gRMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTQuICovXG4gICAgLS1mVGl0cmVFY3Jhbjogbm9ybWFsIG5vcm1hbCA3MDAgMzJweCB2YXIoLS1mZkVjcmFuKTtcbiAgICAtLWZNZW51MTQ6IG5vcm1hbCBub3JtYWwgNDAwIDE0cHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC8qIENyYW4gY29tcGFjdCBkZSBsYSBiYXJyZSBkZSBwaWxvdGFnZSAoQWRhcHRhdGlvbkJhcnJlLnRzKSA6IGxhIGJhcnJlIHJlZMOpZmluaXQgLS1mTWVudTE0IGF2ZWNcbiAgICAgICBjZWxsZS1jaSBwb3VyIHNvbiBzZXVsIHDDqXJpbcOodHJlLiBEw6ljaXNpb24gZHUgY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0wMy4gKi9cbiAgICAtLWZNZW51MTM6IG5vcm1hbCBub3JtYWwgNDAwIDEzcHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC0tZkN0YTE2OiBub3JtYWwgbm9ybWFsIDcwMCAxOHB4ICdNb250c2VycmF0Jywgc2Fucy1zZXJpZjtcbiAgICAvKiBSZW1pc2UgZW4gc2VydmljZSBsZSAyMDI2LTA5LTE2IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQpIDogbGUgbW9ubyBkJ3VuIExJQkVMTMOJLCBwYXJcbiAgICAgICBvcHBvc2l0aW9uIMOgIC0tZk1vbm8yNGIgcXVpIGVzdCBsZSBtb25vIGQndW4gR1JPUyBDSElGRlJFIChjb2RlcyBkJ2FjY8OocywgY29tcHRldXJzKS5cbiAgICAgICBQcmVtacOocmUgdXNhZ8OocmUgOiBsJ8OpdGlxdWV0dGUgZCd1bmUgc2PDqG5lIHN1ciBsYSBWaXRyaW5lIChjb21wb3NhbnRzL2V0aXF1ZXR0ZUphaW1lLmNzcykuXG4gICAgICAgTGUgcmVwbGkgJ0NvdXJpZXIgTmV3JyBlc3QgdW5lIHZyYWllIGNoYXNzZSBmaXhlIOKAlCBjZWx1aSBkZSAtLWZmTW9ubyAoVmVyZGFuYSkgbidlbiBlc3RcbiAgICAgICBwYXMgdW5lLiAqL1xuICAgIC0tZk1vbm8xNjogbm9ybWFsIG5vcm1hbCA0MDAgMTZweCAnSmV0QnJhaW5zTW9ubycsICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZk1vbm8yNDogbm9ybWFsIG5vcm1hbCA0MDAgMjRweCAnSmV0QnJhaW5zTW9ubycsICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTsgKi9cbiAgICAtLWZNb25vMjRiOiBub3JtYWwgbm9ybWFsIDcwMCAyNHB4ICdKZXRCcmFpbnNNb25vJywgJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlO1xuICAgIC0tZkN0YTIwOiBub3JtYWwgbm9ybWFsIDcwMCAyMHB4ICdNb250c2VycmF0Jywgc2Fucy1zZXJpZjtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZkxlZ2VuZDE2OiBub3JtYWwgbm9ybWFsIDQwMCAyMHB4ICdTY2FkYScsIHNhbnMtc2VyaWY7ICovXG4gICAgLS1mTGlnaHQxNDogaXRhbGljIG5vcm1hbCAyMDAgMTRweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZNaW5pMTE6IGl0YWxpYyBub3JtYWwgMjAwIDExcHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mVGV4dDE2OiBub3JtYWwgbm9ybWFsIDQwMCAxNnB4ICdOb3RvIFNhbnMnLCBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIC0tZlRleHQxNlN0cm9uZzogbm9ybWFsIG5vcm1hbCA3MDAgMTZweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZJdGFsaWMxNjogaXRhbGljIG5vcm1hbCA0MDAgMTZweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZBbGVydGUxNjogaXRhbGljIHNtYWxsLWNhcHMgNzAwIDIwcHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mTGFiZWw6IG5vcm1hbCBub3JtYWwgNDAwIDE0cHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiAgICAtLWJvcmRlcjogMXB4IHNvbGlkICNkY2UxZWE7XG4gICAgLS1ib3JkZXJSMDogM3B4O1xuICAgIC0tYm9yZGVyUjE6IDVweDtcbiAgICAtLWJvcmRlclIyOiA3cHg7XG4gICAgLS1ib3JkZXJDYXJ0ZTogMXB4IHNvbGlkIHZhcigtLWNOb2lyNCk7XG4gICAgLS1ib3JkZXJGb3JtOiAxcHggc29saWQgdmFyKC0tY05vaXI1KTtcbiAgICAtLWJvcmRlcklucHV0OiAxcHggc29saWQgdmFyKC0tY05vaXI1KTtcblxuICAgIC8qIEVzcGFjZW1lbnRzIOKAlCBub21tw6lzIHBhciByw7RsZSAoY29tbWUgbGVzIGJvcmR1cmVzKSwgYWNjb3JkIFBPIDIwMjYtMDctMDMuXG4gICAgICAgTWlncmF0aW9uIHByb2dyZXNzaXZlIDogbmUgcmVtcGxhY2VyIHVuZSB2YWxldXIgZW4gZHVyIHF1ZSBzaSBsZSByw7RsZSBFVCBsYSB2YWxldXJcbiAgICAgICBjb3JyZXNwb25kZW50IChuby1vcCB2aXN1ZWwpIDsgYWxpZ25lciB1bmUgZMOpcml2ZSBkZSB2YWxldXIgPSBkw6ljaXNpb24gw6AgcGFydC4gKi9cbiAgICAtLWdhcExpc3RlOiAzMnB4OyAgIC8qIGVudHJlIGxlcyDDqWzDqW1lbnRzIGQndW5lIGxpc3RlLiBMYSBjb2xvbm5lIHF1aSBib3JkZSBsYSBsaXN0ZSAoZXguIHBhbm5lYXUgZGUgZmlsdHJlcykgcHJlbmQgbGUgTcOKTUUgZ2FwIDogZGV1eCByeXRobWVzIGRpZmbDqXJlbnRzIGPDtHRlIMOgIGPDtHRlLCBjJ2VzdCBtb2NoZSAqL1xuICAgIC0tcGFkZGluZ0NvcnBzOiAyMHB4OyAgIC8qIGludMOpcmlldXIgZCd1biBjb3JwcyBkZSBibG9jIC8gcGFubmVhdSAvIG1vZGFsZSAqL1xuICAgIC0tZ2FwRGVmYXV0OiA4cHg7ICAgICAgIC8qIGVzcGFjZSBzdGFuZGFyZCBlbnRyZSDDqWzDqW1lbnRzIGZyw6hyZXMgKGZsZXgvZ3JpZCkgKi9cbiAgICAtLWdhcFJlZHVpdDogNHB4OyAgICAgICAvKiB2YXJpYW50ZSB2b2xvbnRhaXJlbWVudCBwbHVzIHNlcnLDqWUgOiBsaXN0ZXMgY29tcGFjdGVzLCBncm91cGVzIGRlIGJvdXRvbnMgKi9cbiAgICAtLWdhcE1veWVuOiAxMnB4OyAgICAvKiBlc3BhY2VtZW50IGludGVybcOpZGlhaXJlIGVudHJlIMOpbMOpbWVudHMgZnLDqHJlcyAqL1xuICAgIC0tZ2FwTGFyZ2U6IDIwcHg7ICAgIC8qIGVzcGFjZW1lbnQgZ8OpbsOpcmV1eCBlbnRyZSBncm91cGVzIGQnw6lsw6ltZW50cyAqL1xuICAgIC0tZ2FwQ29sb25uZXM6IDRyZW07IC8qIGVudHJlIGRldXggY29sb25uZXMgZGUgcGFnZSBkZSBuYXR1cmUgZGlmZsOpcmVudGUgOiBsZSB0ZXh0ZSBldCBzb24gaW1hZ2UsIGxlIG1lbnUgZXQgc29uIGNvbnRlbnUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE3KSAqL1xuICAgIC0tZ2FwQmxvY3M6IDEwcmVtOyAgIC8qIGxlIGJsYW5jIGVudHJlIGRldXggYmxvY3MgZW1waWzDqXMgZCd1bmUgbcOqbWUgY29sb25uZSBkZSBsZWN0dXJlIDogbCdhcnRpY2xlLCBzZXMgcXVlc3Rpb25zLCBzZXMgc2PDqW5hcmlvcyA7IGRldXggY2hhcGl0cmVzIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNykgKi9cbiAgICAtLXBhZGRpbmdNaW5pRGl2OiA4cHggMTZweDsgLyogcGFkZGluZyBkZSB0b3V0IGxlcyBibG9jcyBhdmVjIGZvbmQgY29sb3LDqWVzICovXG4gICAgLS1wYWRkaW5nRXRpcXVldHRlOiAzcHggNnB4OyAvKiBwYWRkaW5nIGRlcyBzcGFuIGV0IGF1dHJlcyBldGlxdWV0dGUgKi9cbiAgICAtLXBhZGRpbmdDYXJ0ZTogMTZweCAyMHB4OyAgIC8qIGludMOpcmlldXIgZCd1bmUgQ0FSVEUg4oCUIHNvbiBjb3JwcyBjb21tZSBzYSBiYXJyZSBkJ2FjdGlvbnMuIExhIGNhcnRlIGV4aXN0ZSBlbiB0cm9pcyBleGVtcGxhaXJlcyBqdW1lYXV4IChibG9jcy5jc3MsIGlsb3RTY2VuYXJpb3MuY3NzLCA1NV9zY2VuYXJpb3NDb21wYXRpYmxlcy5jc3MpIDogY2hhY3VuIHJlY29waWFpdCBsZSBjaGlmZnJlLCBpbHMgbGlzZW50IG1haW50ZW5hbnQgbGEgbcOqbWUgdmFyaWFibGUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTA3KSAqL1xuICAgIC0tcGFkZGluZ0NhcnRlRXRyb2l0OiAxMnB4IDIwcHg7IC8qIGxhIG3Dqm1lIGNhcnRlIGVuIGZlbsOqdHJlIMOpdHJvaXRlLCBxdWFuZCBsYSBiYXJyZSBkJ2FjdGlvbnMgcGFzc2Ugc291cyBsZSBjb3JwcyAqL1xuICAgIC0tcGFkZGluZ0N0YTogMTVweCAyMHB4OyAgICAgLyogTEUgZ3JhbmQgYm91dG9uIDogcGxlaW5lIGxhcmdldXIsIG1pbi13aWR0aCAxODBweCwgZm9udGUgLS1mQ3RhMTYuIExhIHNpbGhvdWV0dGUgY29tcGFjdGUsIGVsbGUsIHByZW5kIC0tcGFkZGluZ0N0YTE0IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0wNykgKi9cbiAgICAtLXBhZGRpbmdCYWRnZTogNHB4IDE2cHg7ICAgIC8qIHVuIGJhZGdlIGVuIHBpbHVsZSwgcG9zw6kgc3VyIHVuIGJsb2Mg4oCUIHBhcyBsYSBwZXRpdGUgw6l0aXF1ZXR0ZSBpbmxpbmUgZCd1biByw6ljYXAsIHF1aSBnYXJkZSAtLXBhZGRpbmdFdGlxdWV0dGUgKi9cbiAgICAtLXBhZGRpbmdQYXN0aWxsZTogNnB4IDE0cHg7IC8qIHVuZSBwYXN0aWxsZSBOT04gY2xpcXVhYmxlIDogdW5lIMOpdGFwZSwgdW4gw6l0YXQsIHVuIGZpbHRyZSBwb3PDqSAqL1xuICAgIC0tcGFkZGluZ0lucHV0OiAxMHB4IDEycHg7ICAgLyogbCdpbnTDqXJpZXVyIGQndW4gY2hhbXAgZGUgc2Fpc2llICgtLWJvcmRlcklucHV0IGRpdCBzYSBib3JkdXJlKSAqL1xuICAgIC0tcGFkZGluZ0NlbGx1bGU6IDhweCAxNnB4IDhweCAwOyAvKiB1bmUgY2VsbHVsZSBkZSB0YWJsZWF1IDogcmllbiDDoCBnYXVjaGUsIGxhIGNvbG9ubmUgY29tbWVuY2UgYXUgdGV4dGUgKi9cbiAgICAtLXBhZGRpbmdDb2RlOiAxMnB4IDE2cHg7ICAgIC8qIHVuIGJsb2MgZGUgY29kZSDDoCByZWNvcGllciAqL1xuICAgIC0tcGFkZGluZ0xpZ25lTGlzdGU6IDE2cHggMDsgLyogdW5lIGxpZ25lIExBUkdFIGQndW5lIGxpc3RlIOKAlCB1bmUgcXVlc3Rpb24gcXUnb24gZMOpcGxpZSwgdW4gw6l0YXQgdmlkZS4gTGVzIGxpZ25lcyBvcmRpbmFpcmVzIHByZW5uZW50IC0tZ2FwRGVmYXV0IDAgKi9cbiAgICAtLXBhZGRpbmdSZWNhcDogMTBweCAxNHB4OyAgIC8qIGxlIHJ5dGhtZSBpbnTDqXJpZXVyIGR1IHLDqWNhcGl0dWxhdGlmIGRlIGNvbXBvc2l0aW9uIChibG9jcywgYWN0aW9ucywgZW5jYWRyw6lzKSAqL1xuICAgIC0tcGFkZGluZ1BhZ2U6IDMwcHggNDBweDsgICAgLyogbCdlbnZlbG9wcGUgZCd1bmUgcGFnZSA6IC5jb250ZW51LCBldCBsZXMgY29sb25uZXMgZHUgYmFzIGRlIHBhZ2UgKi9cbiAgICAtLXBhZGRpbmdDYXJ0ZUxhcmdlOiAzMHB4IDI1cHg7IC8qIHVuZSBjYXJ0ZSBxdWkgZG9pdCByZXNwaXJlciA6IHVuZSBvZmZyZSwgdW5lIGNhdMOpZ29yaWUgZCdhcGVyw6d1ICovXG4gICAgLS1wYWRkaW5nUmFwcGVsOiAyMHB4IDQwcHggMjVweDsgLyogdW5lIGNhcnRlIGRlIHJhcHBlbCBkdSBjb21wdGUgKC5kaXZSYXBwZWwpLCBldCB0b3V0IGJsb2MgcG9zw6kgw6AgY8O0dMOpIGQnZWxsZXMgc3VyIGxhIG3Dqm1lIHBhZ2UgKC5haWRlLCAuZW5BdHRlbnRlKSA6IGxlcyB0aXRyZXMgZXQgbGVzIHRleHRlcyB0b21iZW50IMOgIGwnYXBsb21iICovXG4gICAgLS1wYWRkaW5nQmFuZGVhdTogNHJlbTsgICAgICAvKiBsZSBiYW5kZWF1IGRlcyBhcGVyw6d1cywgcXVpIHRyYXZlcnNlIGxhIGZlbsOqdHJlIHN1ciBncmFuZCDDqWNyYW4gKi9cbiAgICAtLXJldHJhaXRMaXN0ZUNvdXJ0OiAyMHB4OyAgIC8qIGxlIHJldHJhaXQgZCd1biB1bCBkZSBsaXN0ZSBjb3VydGUg4oCUIHLDqWNhcCwgcHJvZ3Jlc3Npb24sIHVsIGfDqW7DqXJpcXVlLiBMZSByZXRyYWl0IEZSQU5DIGR1IHLDqWRhY3Rpb25uZWwgZXN0IC0tcmV0cmFpdExpc3RlICovXG4gICAgLS1yZXRyYWl0TGlzdGU6IDQwcHg7ICAgICAgICAvKiBsZSByZXRyYWl0IGQndW4gdWwgcsOpZGFjdGlvbm5lbCDigJQgYXJ0aWNsZSwgY2hhcGl0cmUsIHLDqXBvbnNlIGRlIEZBUS4gQ2UgcmV0cmFpdCBmcmFuYyBkaXQgcXVlIGNlcyBsaWduZXMgc29udCB1biBibG9jIMOgIHBhcnQsIGV0IG5vbiBsYSBzdWl0ZSBkdSBwYXJhZ3JhcGhlICovXG5cbiAgICAvKiBCb3V0b25zIDogdW4gYm91dG9uIG5lIGNob2lzaXQgTkkgc29uIHBhZGRpbmcsIE5JIHNhIGJvcmR1cmUsIE5JIHNhIGNvdWxldXJcbiAgICAgICAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiBJbCBwcmVuZCBjZXMgdmFyaWFibGVzIOKAlCBvdSBwYXMgZGUgYm9yZHVyZSwgb3UgbGFcbiAgICAgICBjb3VsZXVyIGQndW4gcsO0bGUgKHByaW1haXJlLCBkYW5nZXIsIGFwZXLDp3UpIOKAlCBqYW1haXMgdW5lIHZhbGV1ciDDoCBsdWkuICovXG4gICAgLS1wYWRkaW5nQ3RhMTRWOiA4cHg7ICAgICAgICAgICAgICAgICAvKiBsJ2FpciB2ZXJ0aWNhbCBkJ3VuIGJvdXRvbiBjb21wYWN0LCBzZXVsIDogbGEgYmFycmUgZGUgcGlsb3RhZ2UgZW4gZMOpZHVpdCBzYSBoYXV0ZXVyIChfc3R1ZGlvSW50ZWdyZWUuY3NzKSAqL1xuICAgIC0tcGFkZGluZ0N0YTE0OiB2YXIoLS1wYWRkaW5nQ3RhMTRWKSAxNnB4OyAvKiBwYWRkaW5nIGRlIHRvdXQgYm91dG9uIGNvbXBhY3QgKC5jdGExNCwgLmN0YURpc2NyZXQsIHRvZ2dsZXMpICovXG4gICAgLS1ib3JkZXJDdGE6IDFweCBzb2xpZCB2YXIoLS1jTm9pcjQpOyAvKiBMQSBib3JkdXJlIGQndW4gYm91dG9uIDogY2VsbGUtY2kgb3UgYXVjdW5lICovXG4gICAgLS1jQ3RhVGV4dGU6IHZhcigtLWNOb2lyMik7ICAgICAgICAgLyogTEUgdGV4dGUgZCd1biBib3V0b24gbmV1dHJlIDogY2Ugbm9pciBvdSB1bmUgY291bGV1ciBkZSByw7RsZSAqL1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQUNDRU5UIOKAlCBsYSBjb3VsZXVyIGRlIGwnZXNwYWNlIG/DuSBsJ29uIGVzdC4gRMOpY2xhcsOpZSBzdXIgYm9keSwgSkFNQUlTIHN1ciBodG1sXG4gICBvdSA6cm9vdCA6IHVuZSB2YXJpYWJsZSBkw6lyaXbDqWUgKC0tY0FjY2VudF9hLCAtLWNGb3JtRm9jdXNIYWxv4oCmKSBzZSBjYWxjdWxlIHN1clxuICAgbCfDqWzDqW1lbnQgb8O5IGVsbGUgZXN0IGTDqWNsYXLDqWUgOyBzdXIgaHRtbCBlbGxlIGZpZ2VyYWl0IGxlIGJsZXUgcGFyIGTDqWZhdXQgZXQgbGFcbiAgIGNsYXNzZSBkdSBib2R5IG5lIGNoYW5nZXJhaXQgcGx1cyBxdWUgbGVzIHZhbGV1cnMgZGlyZWN0ZXMuXG4gICBMYSBjbGFzc2UgZHUgPGJvZHk+IGNob2lzaXQgbGEgdGVpbnRlIDsgc2FucyBjbGFzc2UgOiBibGV1IGFkbWluaXN0cmF0aW9uLlxuICAgVml0cmluZSA6IGJhc2VWaXRyaW5lUHVibGljLnR3aWcgcG9zZSBib2R5UGFnZVZpdHJpbmUuXG4gICBTdHVkaW8gOiBzdHVkaW8vYmFzZS50d2lnIHBvc2UgbW9kZVRlc3RlciBvdSBtb2RlRGlmZnVzZXIgc2Vsb24gbCdvbmdsZXQgcHJpbmNpcGFsXG4gICAobGEgcGFnZSBzZSByZWNoYXJnZSDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBtb2RlLCBwYXMgZGUgVHVyYm8pLlxuICAgVW5lIHLDqGdsZSBxdWkgYSBiZXNvaW4gZCdBY2NlbnQgYXUgbml2ZWF1IDpyb290IGRvaXQgbGlyZSB2YXIoLS1jQWNjZW504oCmKSBzdXJcbiAgIGwnw6lsw6ltZW50IGNvbmNlcm7DqSwgcGFzIGTDqWNsYXJlciB1bmUgdmFyaWFibGUgZMOpcml2w6llIMOgIGxhIHJhY2luZS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIEJsZXUgYWRtaW5pc3RyYXRpb24gOiBjb21wdGUsIHRhcmlmcywgZG9ubsOpZXMsIFN0dWRpbyBob3JzIG1vZGUsIG9uZ2xldCBQcsOpcGFyZXIgKi9cbmJvZHkge1xuICAgIC0tY0FjY2VudDA6ICNmMWY0Zjg7XG4gICAgLS1jQWNjZW50MTogI2UzZWVmODtcbiAgICAtLWNBY2NlbnQyOiAjYWNjZWU4O1xuICAgIC0tY0FjY2VudDM6ICM0MzZiYzE7XG4gICAgLS1jQWNjZW50NDogIzMzNWJiMTtcbiAgICAtLWNBY2NlbnRfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0FjY2VudDMpLCB2YXIoLS1jQWNjZW50NCkgMTAwJSk7XG4gICAgLS1jQWNjZW50X2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jQWNjZW50MyksIHZhcigtLWNBY2NlbnQzKSAxMDAlKTtcbiAgICAtLWNBY2NlbnR0OiAjRkZGO1xuXG4gICAgLyogRm9jdXMgZGVzIGNoYW1wcyA6IGwnYWNjZW50LCBldCBzb24gaGFsbyDDoCAxNSAlICovXG4gICAgLS1jRm9ybUZvY3VzOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgLS1jRm9ybUZvY3VzSGFsbzogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNBY2NlbnQzKSAxNSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLyogVml0cmluZSwgcGFnZXMgcHVibGlxdWVzIDogdmVydCAqL1xuLmJvZHlQYWdlVml0cmluZSB7XG4gICAgLS1jQWNjZW50MDogI2YwZjlmNDtcbiAgICAtLWNBY2NlbnQxOiAjZGNmMmU1O1xuICAgIC0tY0FjY2VudDI6ICM5ZmQ5Yjg7XG4gICAgLS1jQWNjZW50MzogIzA4OTE0YztcbiAgICAtLWNBY2NlbnQ0OiAjMDc1NTI0O1xufVxuXG4vKiBTdHVkaW8sIG9uZ2xldCBUZXN0ZXIgOiB2aW9sZXQgKi9cbi5tb2RlVGVzdGVyIHtcbiAgICAtLWNBY2NlbnQwOiAjZjdmMWY5O1xuICAgIC0tY0FjY2VudDE6ICNlY2RjZjM7XG4gICAgLS1jQWNjZW50MjogI2QyYThlMDtcbiAgICAtLWNBY2NlbnQzOiAjOWI1OWI2O1xuICAgIC0tY0FjY2VudDQ6ICM3ODNiOTI7XG59XG5cbi8qIFN0dWRpbywgb25nbGV0IERpZmZ1c2VyIDogYmxldSBkaWZmdXNpb24gKi9cbi5tb2RlRGlmZnVzZXIge1xuICAgIC0tY0FjY2VudDA6ICNmMGY2ZmI7XG4gICAgLS1jQWNjZW50MTogI2UwZWVmODtcbiAgICAtLWNBY2NlbnQyOiAjYTZjZGVhO1xuICAgIC0tY0FjY2VudDM6ICMzMDhlZDE7XG4gICAgLS1jQWNjZW50NDogIzI1NzJhOTtcbn1cblxuLyogQmxldSBhZG1pbmlzdHJhdGlvbiBQT1PDiSBTVVIgVU4gw4lMw4lNRU5ULCBkYW5zIHVuIGF1dHJlIGVzcGFjZSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0XG4gICAyMDI2LTA5LTA2KSA6IHVuIGdlc3RlIGQnYWRtaW5pc3RyYXRpb24gYXUgbWlsaWV1IGQndW5lIHBhZ2UgcHVibGlxdWUg4oCUIGNyw6llciB1biDDqXbDqW5lbWVudFxuICAgZGVwdWlzIGxhIHBhZ2UgZCd1bmUgc2PDqG5lIG91IGxhIHBhZ2UgQ29uZmlndXJlciBkJ3VuIHNjw6luYXJpbyDigJQgc2UgZGl0IGVuIGJsZXUsIHBhcyBkYW5zXG4gICBsYSBjb3VsZXVyIGRlIGxhIHBhZ2UuIE3Dqm1lcyBjaW5xIHZhbGV1cnMgcXVlIGxlIGJvZHkgc2FucyBjbGFzc2UgOiBjJ2VzdCBsZSBtw6ptZSBlc3BhY2UsXG4gICByYW1lbsOpIHN1ciBsJ8OpbMOpbWVudCBxdWkgbGUgcG9ydGUgKGxlIGJvdXRvbiBsdWktbcOqbWUsIHBhcyBzYSBiYXJyZSA6IGxlcyB2b2lzaW5zIGdhcmRlbnRcbiAgIGxhIGNvdWxldXIgZGUgbGEgcGFnZSkuIFVuZSByw6hnbGUgcXVpIGxpdCB2YXIoLS1jQWNjZW504oCmKSBzdXIgY2V0IMOpbMOpbWVudCB2b2l0IGxlIGJsZXUuICovXG4uYWNjZW50QWRtaW5pc3RyYXRpb24ge1xuICAgIC0tY0FjY2VudDA6ICNmMWY0Zjg7XG4gICAgLS1jQWNjZW50MTogI2UzZWVmODtcbiAgICAtLWNBY2NlbnQyOiAjYWNjZWU4O1xuICAgIC0tY0FjY2VudDM6ICM0MzZiYzE7XG4gICAgLS1jQWNjZW50NDogIzMzNWJiMTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRJVFJFUyBFVCBUWVBPR1JBUEhJRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuaDEsIGgyLCBoMyB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbmg0IHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuaDUsIGg2IHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxucCwgbGkge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xufVxuXG5idXR0b24ge1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG59XG5cbmgxIHtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xuICAgIG1hcmdpbjogMTBweCAxNXB4IDVweCAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbmgyIHtcbiAgICBmb250OiB2YXIoLS1mSDIpO1xuICAgIG1hcmdpbjogMTVweCAxMHB4IDVweCAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbmgzIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAyNXB4IDAgMTVweDtcbn1cblxuaDQsIGg1IHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xufVxuXG5oNCwgaDUsIGg2IHtcbiAgICBtYXJnaW46IDI1cHggMCA3cHg7XG59XG5cbi8qIDxpPiBlc3QgdXRpbGlzw6llIGNvbW1lIGJhbGlzZSBkZSBzdWZmaXhlICgjMiwgIzPigKYpIHN1ciBsZXMgbm9tcyBkJ8OpbMOpbWVudHMuXG4gICBMYSBiYWxpc2UgPGVtPiByZW1wbGFjZSA8aT4gcG91ciBsJ2l0YWxpcXVlIHPDqW1hbnRpcXVlLiAqL1xuaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogNzUlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mZk1vbm8pO1xufSIsIi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2RpdkJvZHkge1xuICAgIG1heC13aWR0aDogOTIwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMTBweDtcbn1cbiovXG5cbi5jb250ZW51IHtcbiAgICBwYWRkaW5nOiAxMHB4IDQwcHg7XG59XG5cbi56b25lRmxhc2gge1xuICAgIG1heC13aWR0aDogMTE1NXB4O1xuICAgIG1hcmdpbjogMCBhdXRvIDIwcHg7XG4gICAgbWluLWhlaWdodDogMzhweDsgLyogSGF1dGV1ciBkJ3VuIG1lc3NhZ2UgZmxhc2ggKHBhZGRpbmcgMTJweCAqIDIgKyBmb250IDE0cHgpICovXG59XG5cbi8qIExlIG1lc3NhZ2Ugc2UgZMOpdGFjaGUgc291cyBsZSBoYXV0IGRlIHBhZ2UgOiBjZW50csOpLCDDoCBsYSBsYXJnZXVyIGRlIHNvbiB0ZXh0ZSwgcG9zw6kgZW5cbiAgIG9tYnJlIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNCkuIG1heC13aWR0aCA6IHVuIG1lc3NhZ2UgbG9uZyByZXZpZW50IMOgIGxhIGxpZ25lXG4gICBzdXIgdMOpbMOpcGhvbmUgYXUgbGlldSBkZSBkw6lib3JkZXIgZGUgbCfDqWNyYW4uICovXG4uem9uZUZsYXNoIC5hbGVydFN1Y2Nlcyxcbi56b25lRmxhc2ggLmFsZXJ0RXJyZXVyIHtcbiAgICBtYXJnaW46IDIwcHggYXV0byAwO1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xufVxuXG4vKiBCb3ggZGUgcmFwcGVsIChsZWN0dXJlIHNldWxlKSAqL1xuLmRpdlJhcHBlbCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItbGVmdDogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmlnaHQ6IHZhcigtLWJvcmRlcik7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ1JhcHBlbCk7XG4gICAgd2lkdGg6IDMzNXB4O1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogTCdhaWRlIG1hc3F1YWJsZSAoY29tcG9zYW50cy9haWRlLmNzcykgcHJlbmQgbGUgdGl0cmUgZCd1bmUgY2FydGUgOiBlbGxlIHNlIHBvc2Ugw6AgY8O0dMOpIGQnZWxsZXMuICovXG4uZGl2UmFwcGVsIGgzLFxuLmFpZGUgaDMge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwIDAgdmFyKC0tZ2FwTGFyZ2UpIDA7XG59XG5cbi8qIENUQSBkYW5zIGxlcyBibG9jcyBkaXZSYXBwZWwgOiB0YWlsbGUgY29udGVudSwgYWxpZ27DqSDDoCBnYXVjaGUgKi9cbi5kaXZSYXBwZWwgLmN0YVZhbGlkZXIsXG4uZGl2UmFwcGVsIC5jdGFTZWNvbmRhaXJlIHtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogODAwcHgpIHtcbiAgICAuY29udGVudSB7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB9XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmRpdkNlbnRyZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIG1heC13aWR0aDogMTIwMHB4O1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG4qL1xuXG5ib2R5IHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0JhY2tncm91bmQpO1xufVxuXG4jYm9keVBhZ2Uge1xuICAgIG1heC13aWR0aDogMTI4MHB4O1xuICAgIG1hcmdpbjogMTBweCBhdXRvO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5tYXJnZTIge1xuICAgIG1hcmdpbjogNXB4IGF1dG87XG4gICAgcGFkZGluZzogMCAyMHB4O1xufVxuKi9cblxuQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogNzUwcHgpIHtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAubWFyZ2UyIHtcbiAgICAgICAgbWFyZ2luOiAxMHB4IGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICB9XG4gICAgKi9cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jY2VudHJlUGFnZSB7XG4gICAgbWF4LXdpZHRoOiAxNDQwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbiNkaXZQYWdlIHtcbiAgICBtYXJnaW46IDI1cHggMTBweCA1MHB4O1xuICAgIG1pbi1oZWlnaHQ6IDI1dmg7XG59XG5cbiNxdWlTdWlzSmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xufVxuI3F1aVN1aXNKZUxvZ291dCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNnB4O1xuICAgIG9wYWNpdHk6IC43O1xufVxuXG4jcXVpU3Vpc0plTG9nb3V0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIG9wYWNpdHk6IDE7XG59XG4qL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jZGl2SGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG59XG4qL1xuLyogTGlzdGUgw6AgcHVjZXMgOiBsZSByZXNldCAoMDBfcmVzZXQuY3NzKSByZXRpcmUgbGVzIHB1Y2VzIGRlIHRvdXQgdWwgOyB1bmUgbGlzdGUgcXVpIGRvaXRcbiAgIGxlcyBtb250cmVyIGxlIGRlbWFuZGUgYXZlYyBjZXR0ZSBjbGFzc2UgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE0KSAqL1xudWwubGlzdGVQdWNlcyB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1yZXRyYWl0TGlzdGVDb3VydCk7XG59XG4iLCJidXR0b24ge1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuYnV0dG9uLmN0YUFubnVsZXIge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi8qIGJ1dHRvbi5saWVuQm91dG9uIDogdW4gPGJ1dHRvbj4gcXVpIGEgbGUgdmlzdWVsIGQndW4gbGllbiAodGVtcGxhdGVzL0NMQVVERS5tZCwgwqsgQm91dG9uXG4gICBvdSBsaWVuID8gwrspIOKAlCBpbCBwcmVuZCBleGFjdGVtZW50IGxlIHN0eWxlIGRlIGEgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE0KSAqL1xuYSxcbmJ1dHRvbi5saWVuQm91dG9uIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgcGFkZGluZzogdmFyKC0tZ2FwUmVkdWl0KSAwO1xufVxuXG5idXR0b24ubGllbkJvdXRvbiB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG59XG5cbmE6Zm9jdXMsXG5idXR0b24ubGllbkJvdXRvbjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuYTpmb2N1cy12aXNpYmxlLFxuYnV0dG9uLmxpZW5Cb3V0b246Zm9jdXMtdmlzaWJsZSB7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWNGb3JtRm9jdXMpO1xufVxuXG5cbmJ1dHRvbi5jdGFBbm51bGVyLFxuYS5jdGFBbm51bGVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuYnV0dG9uLmJ0biwgYS5idG4ge1xuICAgIG1pbi13aWR0aDogMTgwcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJvcmRlcjogMDtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudHQpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0N0YSk7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuYS5idG46aG92ZXIsIGJ1dHRvbi5idG46aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0FjY2VudDQpO1xuXG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuYnV0dG9uLmJ0bjIsIGEuYnRuMiB7XG4gICAgbWluLXdpZHRoOiAxMDBweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZDdGEyMCk7XG4gICAgcGFkZGluZzogMjBweCA0MHB4O1xuICAgIG1hcmdpbjogMjBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcbiAgICBjb2xvcjogdmFyKC0tY1RleHRlMSk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiByb3VuZDtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbn1cblxuYnV0dG9uI3JlZGlyZWN0aW9uLmJ0bjIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5idXR0b24jcmVkaXJlY3Rpb24uYnRuMjpob3ZlcixcbmEuYnRuMjpob3ZlciwgYnV0dG9uLmJ0bjI6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0FjY2VudDQpO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENUQSBDT01QQUNUIOKAlCBzb2NsZSAuY3RhMTRcblxuICAgTEEgc2lsaG91ZXR0ZSBkZXMgYm91dG9ucyBkJ2FjdGlvbiBjb21wYWN0cyAoYmFycmVzIGQnYWN0aW9uLCBjYXJ0ZXMpIDpcbiAgIGZvcm1lLCBwb2xpY2UsIGRpbWVuc2lvbnMgZMOpZmluaWVzIGljaSBldCBudWxsZSBwYXJ0IGFpbGxldXJzLiBNb2TDqGxlIDpcbiAgIGxlIGJvdXRvbiBkZSBsYSBiYXJyZSBkZSBjb250csO0bGUgYXBlcsOndSAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLlxuICAgU2UgcG9zZSDDoCBjw7R0w6kgZHUgcsO0bGUgcXVpIGFwcG9ydGUgc2EgY291bGV1ciA6IGNsYXNzPVwiY3RhMTQgY3RhUHJldmlld0NvbnRyb2xlXCIuXG4gICAxNCA9IGxhIHRhaWxsZSBkZSBwb2xpY2UgKC0tZk1lbnUxNCkuIFNpbGhvdWV0dGUgZm9ybXVsYWlyZSDDoCB2ZW5pciA6IC5jdGExOC5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jdGExNCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiB1biA8YT4gaG9ycyBiYXJyZSBmbGV4IHJlc3RlIHVuIGJvdXRvbiAocGFkZGluZyB2ZXJ0aWNhbCByw6llbCkgKi9cbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhMTQpO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIC8qIFVuIGJvdXRvbiBuJ2VzdCBqYW1haXMgc291bGlnbsOpLCBxdWVsbGUgcXVlIHNvaXQgc2EgYmFsaXNlIDogbGEgVml0cmluZSBzb3VsaWduZSB0b3VzXG4gICAgICAgc2VzIGxpZW5zICh2aXRyaW5lLmNzcywgZMOpY2lzaW9uIFBPIDIwMjYtMDgtMjUpLCB1biA8YSBjbGFzcz1cImN0YTE0XCI+IHkgw6l0YWl0IHNvdWxpZ27DqVxuICAgICAgIGNvbW1lIHVuIGxpZW4gZGUgcGFyYWdyYXBoZSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMDYpLiAqL1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMsIGNvbG9yIDAuMnMsIGJvcmRlci1jb2xvciAwLjJzO1xufVxuXG4vKiBMYSBzaWxob3VldHRlIGNvbXBhY3RlIEdBR05FIHN1ciB1biByw7RsZSBxdWkgcG9ydGUgYXVzc2kgdW5lIHNpbGhvdWV0dGUgOiBsYSBwYWdlIGRlc1xuICAgdGFyaWZzIGRlIGxhIFZpdHJpbmUgcmVkw6lmaW5pdCAuY3RhT3IgZW4gZ3JhbmQgYm91dG9uIGRlIGNhcnRlIChvZmZyZXMuY3NzIDogZGlzcGxheSBibG9jayxcbiAgIGdyYW5kIHBhZGRpbmcsIHBvbGljZSAxNiksIGNlIHF1aSDDqWNyYXNhaXQgwqsgY3RhMTQgY3RhT3Igwrsg4oCUIGxlIHBldGl0IGJvdXRvbiBkb3LDqSBxdWkgbcOobmVcbiAgIMOgIGwnb2ZmcmUgZHUgZGVzc3VzIChwYWdlIMKrIE1vbiBzdHVkaW8gwrssIHNjw6huZXMgcsOpc2VydsOpZXMgw6AgdW5lIG9mZnJlIDogZMOpY2lzaW9uIGNoZWYgZGVcbiAgIHByb2pldCAyMDI2LTEwLTA3KS4gTcOqbWUgY29tcG9zaXRpb24gcXVlIMKrIGN0YTE0IGN0YVByaW1haXJlIMK7LCBtw6ptZSB0YWlsbGUuICovXG4uY3RhMTQuY3RhT3Ige1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0N0YTE0KTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIC8qIExFIEpBVU5FIFDDgkxFIERVIFBFVElUIEJPVVRPTiAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMTAtMDgpIDogbGUgamF1bmUgcGxlaW5cbiAgICAgICBkJ0FtYXpvbiAoLS1jT3IzKSBlc3QgZmFpdCBwb3VyIGxlcyBncm9zIGJvdXRvbnMgZXQgbCdvbmdsZXQgwqsgVGFyaWZzIMK7IDsgc3VyIHVuIHBldGl0XG4gICAgICAgYm91dG9uIHBvc8OpIGRhbnMgdW5lIHBhZ2UgYXV4IHRvbnMgbmV1dHJlcyBldCBwYXN0ZWwsIGlsIHByZW5haXQgbGUgZGVzc3VzIHN1ciB0b3V0IGxlXG4gICAgICAgcmVzdGUuIEZvbmQgcMOibGUgKC0tY09yMSksIGV0IHVuZSBib3JkdXJlIGphdW5lIHBvdXIgcXUnb24gbGUgdm9pZSBjb21tZSB1biBib3V0b24gZXRcbiAgICAgICBjb21tZSBkdSBqYXVuZSA6IGMnZXN0IGVsbGUsIHBsdXMgcXVlIGxlIGZvbmQsIHF1aSBsZSBkw6l0YWNoZSBkZSBsYSBwYWdlLiBNw6ptZSDDqXBhaXNzZXVyXG4gICAgICAgcXVlIGxlcyBhdXRyZXMgYm91dG9ucyAoLS1ib3JkZXJDdGEpLCBzZXVsZSBsYSBjb3VsZXVyIGNoYW5nZS4gKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3IxKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckN0YSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jT3IzKTtcbn1cblxuLmN0YTE0LmN0YU9yOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3IyKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNPcjQpO1xufVxuXG4vKiBMRSBQRVRJVCBCT1VUT04gRU4gSkFVTkUgUExFSU4gKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTEwLTE0KSA6IGxhIG3Dqm1lIHNpbGhvdWV0dGVcbiAgIGNvbXBhY3RlLCBsZXMgY291bGV1cnMgZHUgZ3JvcyBib3V0b24gZGVzIHRhcmlmcyAoLmN0YU9yKS4gUG91ciBsZSBib3V0b24gcXVpIGVzdCBTRVVMIGV0XG4gICBkb2l0IHNlIHZvaXIgOiDCqyBNb24gc3R1ZGlvIMK7LCBsYSBsaW1pdGUgZCfDqXbDqW5lbWVudHMgYXR0ZWludGUgZHUgU3R1ZGlvLiBMw6Agb8O5IGlsIHJldmllbnRcbiAgIHNvdXZlbnQgKHZpZ25ldHRlcywgbGlzdGVzIGRlIHNjw6luYXJpb3MsIHBhZ2UgZCd1bmUgc2PDqG5lKSwgbGUgamF1bmUgcMOibGUgcmVzdGUuICovXG4uY3RhMTQuY3RhT3IuY3RhT3JQbGVpbiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY09yMyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jT3IzKTtcbiAgICBjb2xvcjogdmFyKC0tY09ydCk7XG59XG5cbi5jdGExNC5jdGFPci5jdGFPclBsZWluOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3I0KTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNPcjQpO1xufVxuXG4uY3RhMTQ6ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBjdXJzb3I6IGF1dG87XG59XG5cbi8qIFLDtGxlIGFjdGlvbiBwcmluY2lwYWxlIDogTEUgYm91dG9uIHF1aSBmYWl0IGxhIGNob3NlIHBvdXIgbGFxdWVsbGUgbGEgcGFnZSBleGlzdGVcbiAgIChjcsOpZXIgdW4gw6l2w6luZW1lbnTigKYpLCBlbiBBY2NlbnQg4oCUIGxhIGNvdWxldXIgZGUgbCdlc3BhY2UsIG91IGNlbGxlIHF1J3VuXG4gICAuYWNjZW50QWRtaW5pc3RyYXRpb24gcG9zZSBzdXIgbHVpLiBVbiBzZXVsIHLDtGxlLCBkw6lmaW5pIGljaSBldCBudWxsZSBwYXJ0IGFpbGxldXJzXG4gICAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMDYpIDogcGFzIGRlIENTUyBwYXIgYm91dG9uLiAqL1xuLmN0YVByaW1haXJlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbn1cblxuLmN0YVByaW1haXJlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50NCk7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbn1cblxuLyogUsO0bGUgb2ZmcmUgOiBMRSBib3V0b24gcXVpIG3DqG5lIGF1eCBvZmZyZXMgZXQgYXV4IHRhcmlmcyDigJQgT3IsIGxhIGNvdWxldXIgZHUgcHJpeCBldCBkZVxuICAgbCdpbnNjcmlwdGlvbiAoY291bGV1cnMubWQpLiBMJ2VuY2FkcsOpIMKrIGxpbWl0ZSBkJ8OpdsOpbmVtZW50cyDCuyBkdSBTdHVkaW8uICovXG4uY3RhT3Ige1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPcjMpO1xuICAgIGNvbG9yOiB2YXIoLS1jT3J0KTtcbn1cblxuLmN0YU9yOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3I0KTtcbiAgICBjb2xvcjogdmFyKC0tY09ydCk7XG59XG5cbi8qIFLDtGxlIGFwZXLDp3UgOiBMRSBib3V0b24gcXVpIGxhbmNlIHVuIGFwZXLDp3Ug4oCUIHZpb2xldCBhcGVyw6d1LCBwYXJ0b3V0XG4gICAoY2F0YWxvZ3VlLCBwYWdlIE1vZGlmaWVyLCBmaWNoZXMgZCdhbmltYXRpb24pLiBVbiBhcGVyw6d1ID0gdmlvbGV0LFxuICAgZMOpY2lzaW9uIFBPIDIwMjYtMDctMTguICovXG4uY3RhUHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudF9hKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbn1cblxuLmN0YVByZXZpZXc6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkFER0UgTU9ERSBURVNUIC0gUsOpdXRpbGlzYWJsZSBwYXJ0b3V0XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYmFkZ2VNb2RlVGVzdCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdCYWRnZSk7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBtYXJnaW46IDEwcHggMDtcbn0iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUGFnZXMgZCdhdXRoZW50aWZpY2F0aW9uIChsb2dpbiwgcmVnaXN0ZXIsIGluc2NyaXB0aW9uKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmF1dGhGb3JtIHtcbiAgICBwYWRkaW5nOiA0MHB4IDIwcHggMjBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4vKiBMJ2VuY2FkcsOpIGV0IGNlIHF1aSBzZSBwb3NlIFNPVVMgbHVpLCBlbXBpbMOpcyBldCBjZW50csOpcyAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0XG4gICAyMDI2LTA5LTEyKS4gYC5hdXRoRm9ybWAganVzdGUgYXUtZGVzc3VzIGVzdCB1bmUgUkFOR8OJRSA6IHVuIHNlY29uZCBlbmZhbnQgcyd5IHBsYWNlcmFpdCDDoFxuICAgY8O0dMOpIGRlIGxhIGJvw650ZSwgcGFzIGRlc3NvdXMuIEQnb8O5IGNldHRlIGNvbG9ubmUgaW50ZXJtw6lkaWFpcmUuXG4gICBQb3PDqWUgcGFyIGxhIGJyaXF1ZSBub3lhdS9fL19ib2l0ZUZvcm11bGFpcmUudHdpZyBhdXRvdXIgZGUgY2hhcXVlIGJvw650ZSA7IGxlcyByw6hnbGVzIHZpdmVudFxuICAgaWNpIHBhcmNlIHF1ZSBjJ2VzdCBsZSBDU1MgZGVzIHBhZ2VzIGQnYXV0aGVudGlmaWNhdGlvbiwgZXQgbGUgc2V1bCBxdWUgY2VzIHBhZ2VzIGNoYXJnZW50XG4gICAoZW50csOpZSB3ZWJwYWNrIGBub3lhdWApLiAqL1xuLmF1dGhDb2xvbm5lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLyogTEEgU09SVElFLCBzb3VzIGwnZW5jYWRyw6kgYmxhbmMgZXQgY2VudHLDqWUgZGVzc291cyA6IGNlcyBwYWdlcyBuJ29udCBuaSBtZW51IG5pIHBpZWQgZGVcbiAgIHBhZ2UsIHNhbnMgZWxsZSBvbiBuZSBwZXV0IHBsdXMgcmVwYXJ0aXIuIE1hcmdlIGNvdXJ0ZSDigJQgZMOpdGFjaMOpZSBkZSBsYSBib8OudGUsIG1haXMgYXNzZXpcbiAgIHByb2NoZSBwb3VyIHNlIHZvaXIgc2FucyBsYSBjaGVyY2hlci4gKi9cbi5hdXRoUmV0b3VyQWNjdWVpbCB7XG4gICAgbWFyZ2luOiAxNnB4IDAgMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG59XG5cbi8qIExhIHBocmFzZSBxdWkgZGl0IHBvdXJxdW9pIG9uIGVzdCBsw6AsIHF1YW5kIG9uIGFycml2ZSBkdSBwYXJjb3VycyDCqyBjcsOpZXIgdW4gw6l2w6luZW1lbnQgwrsuXG4gICBVbiBwYXJhZ3JhcGhlLCBwYXMgdW4gYmFuZGVhdSA6IHJpZW4gbidhIHLDqXVzc2ksIGlsIHJlc3RlIHVuZSDDqXRhcGUgw6AgZnJhbmNoaXIuICovXG4uZW50cmVlUG91ckNyZWVyIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luOiAwIDAgMjBweDtcbn1cblxuLyogQm94IGRlIGNvbm5leGlvbiAvIGluc2NyaXB0aW9uICovXG4uYm94Q2VudGVyRm9ybSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIHBhZGRpbmc6IDMwcHggNDBweCA0MHB4O1xuICAgIC8qIFVuZSBsYXJnZXVyIGZpeGUsIHBhcyB1biBwb3VyY2VudGFnZSA6IGxlIHBhcmVudCAoLmF1dGhDb2xvbm5lKSBwcmVuZCBsYSBsYXJnZXVyIGRlIHNvblxuICAgICAgIGNvbnRlbnUsIGV0IDk1ICUgZGUgbHVpIGZhaXNhaWVudCB2YXJpZXIgbGEgYm/DrnRlIHNlbG9uIGwnw6l0YXBlIGV0IGxhIGxhbmd1ZS4gU3VyXG4gICAgICAgdMOpbMOpcGhvbmUsIGwnw6ljcmFuIG1vaW5zIGxlcyAyIMOXIDIwIHB4IGRlIC5hdXRoRm9ybS4gKi9cbiAgICB3aWR0aDogbWluKDQwMHB4LCAxMDB2dyAtIDQwcHgpO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDEwcHggdmFyKC0tY09tYnJlKTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5ib3hDZW50ZXJGb3JtIGgzIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmJveENlbnRlckZvcm0gLnNvdXNUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG59XG4qL1xuXG5mb3JtID4gZGl2IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4uYm94Q2VudGVyRm9ybSAuY3RhVmFsaWRlciB7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xufVxuXG4vKiBBY3Rpb25zIGR1IGZvcm11bGFpcmUgKHZhbGlkZXIgKyBhbm51bGVyKSAqL1xuLmZvcm1BY3Rpb25zIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5mb3JtQWN0aW9uc0ZsZXgge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA1MDBweCkge1xuICAgIC5mb3JtQWN0aW9uc0ZsZXgge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICAgIGdhcDogMTVweDtcbiAgICB9XG5cbiAgICAuZm9ybUFjdGlvbnNGbGV4IC5jdGFWYWxpZGVyLFxuICAgIC5mb3JtQWN0aW9uc0ZsZXggLmN0YVNlY29uZGFpcmUge1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgfVxufVxuKi9cblxuLyogQWxlcnRlcyAqL1xuLmFsZXJ0RXJyZXVyLFxuLmFsZXJ0RXJyZXVyT0F1dGgsXG4uYWxlcnRTdWNjZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdNaW5pRGl2KTtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4vKiBNZXNzYWdlIGQnZXJyZXVyIGlubGluZSBPQXV0aCAqL1xuLmFsZXJ0RXJyZXVyT0F1dGgge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbi5hbGVydFN1Y2NlcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1N1Y2NlczApO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNTdWNjZXMzKTtcbiAgICBjb2xvcjogdmFyKC0tY1N1Y2NlczQpO1xufVxuXG4vKiBMaWVuIHZlcnMgYXV0cmUgcGFnZSBhdXRoICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5saWVuQXV0aCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDI1cHg7XG4gICAgcGFkZGluZy10b3A6IDIwcHg7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4ubGllbkF1dGggYSB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbn1cblxuLmxpZW5BdXRoIGE6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQ0KTtcbn1cbiovXG5cbi8qIFPDqXBhcmF0ZXVyIE9BdXRoICovXG4uYm94Q2VudGVyRm9ybSBociB7XG4gICAgbWFyZ2luOiA1MHB4IDA7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIGF2ZWMgZXNwYWNlIGJsYW5jICovXG5oci5zZXBhcmF0ZXVyIHtcbiAgICBtYXJnaW46IDMwcHggMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogUGV0aXQgdHJhaXQgKGhyLm1pbmkpIGRhbnMgbGEgYm/DrnRlIDogaWwgZ2FyZGUgc2EgbWFyZ2UgcsOpZHVpdGUsIHF1ZSBsYSByw6hnbGUgZHUgc8OpcGFyYXRldXJcbiAgIE9BdXRoICguYm94Q2VudGVyRm9ybSBociwgNTBweCkgw6ljcmFzZXJhaXQuIElsIHPDqXBhcmUgbGVzIG5vdGVzIGR1IGZvcm11bGFpcmUuICovXG4uYm94Q2VudGVyRm9ybSBoci5taW5pIHtcbiAgICBtYXJnaW46IDIwcHggMCAwO1xufVxuXG4vKiBCb3V0b24gT0F1dGggKi9cbi5idG5PQXV0aCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpOyAvKiBhbGlnbsOpIDE2IC0+IDIwcHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY05vaXIxKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xufVxuXG4uYnRuT0F1dGg6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQwKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJ0bk9BdXRoIHN2ZyB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xufVxuXG4vKiDDiXRhdCBkZSBjaGFyZ2VtZW50IGR1IGZvcm11bGFpcmUgKi9cbi5mb3JtRW5DaGFyZ2VtZW50IHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmZvcm1FbkNoYXJnZW1lbnQgaW5wdXQsXG4uZm9ybUVuQ2hhcmdlbWVudCBzZWxlY3QsXG4uZm9ybUVuQ2hhcmdlbWVudCB0ZXh0YXJlYSxcbi5mb3JtRW5DaGFyZ2VtZW50IGxhYmVsIHtcbiAgICBvcGFjaXR5OiAwLjU7XG59XG5cblxuLyogTm90ZXMgZCd1biBmb3JtdWxhaXJlLCDDoCBsYSBmYcOnb24gZGUgV2lraXDDqWRpYSA6IGxlIGxpYmVsbMOpIGQndW5lIGNhc2UgcG9ydGUgdW4gwqsgwrkgwrsgZW5cbiAgIGV4cG9zYW50LCBzYW5zIGxpZW4sIGV0IGxlIGRvY3VtZW50IHNlIGxpdCBkYW5zIGxhIG5vdGUgc291cyBsZSBmb3JtdWxhaXJlLiBBdWN1biBsaWVuIGRhbnNcbiAgIGxlIGxpYmVsbMOpIDogY2xpcXVlciBzdXIgbGEgY2FzZSBuZSBkb2l0IHBhcyByaXNxdWVyIGQnb3V2cmlyIHVuIGRvY3VtZW50IMOgIGxhIHBsYWNlXG4gICAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMTAtMTUpLiAqL1xuLm5vdGVzRm9ybXVsYWlyZSB7XG4gICAgbWFyZ2luOiB2YXIoLS1nYXBEZWZhdXQpIDAgMDtcbiAgICBwYWRkaW5nOiAwIDAgMCAxLjRlbTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLm5vdGVzRm9ybXVsYWlyZSBsaSB7XG4gICAgbWFyZ2luOiA0cHggMDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBIQVVUIERFIFBBR0UgQ09NUFRFXG4gICBIZWFkZXIgc2ltcGxpZmnDqSBwb3VyIGwnZXNwYWNlIGNvbXB0ZSBWaXRyaW5lXG4gICBMb2dvIGdhdWNoZSwgbWVudSBkcm9pdGVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNoYXV0RGVQYWdlQ29tcHRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGhlaWdodDogNDJweDtcbiAgICBwYWRkaW5nOiAwIDQwcHg7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIExPR08gw4AgR0FVQ0hFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jaGF1dERlUGFnZUNvbXB0ZSAuaGVhZGVyTG9nbyB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4jaGF1dERlUGFnZUNvbXB0ZSAuaGVhZGVyTG9nbyBhIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbiNoYXV0RGVQYWdlQ29tcHRlIC5oZWFkZXJMb2dvIHN2ZyB7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIGFzcGVjdC1yYXRpbzogMjQ1IC8gMzY7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBOQVZJR0FUSU9OIENPTVBURSDDgCBEUk9JVEVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNoZWFkZXJOYXZDb21wdGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuI2hlYWRlck5hdkNvbXB0ZSB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4jaGVhZGVyTmF2Q29tcHRlIHVsIGxpIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIHBhZGRpbmc6IDhweCAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4jaGVhZGVyTmF2Q29tcHRlIHVsIGxpIGE6aG92ZXIsXG4jaGVhZGVyTmF2Q29tcHRlIHVsIGxpIGEuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFJFU1BPTlNJVkUgLSBNT0JJTEUgPCA2MDBweFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgI2hhdXREZVBhZ2VDb21wdGUge1xuICAgICAgICBwYWRkaW5nOiAwIDE2cHg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgfVxuXG4gICAgI2hhdXREZVBhZ2VDb21wdGUgLmhlYWRlckxvZ28ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7XG4gICAgI2hlYWRlck5hdkNvbXB0ZSB1bCBsaSBhIHtcbiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkxPQ1MgLSBDb21wb3NhbnQgZ8OpbsOpcmlxdWUgU3R1ZGlvXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICDimqDvuI8gVW4gU09VUy1FTlNFTUJMRSDCqyBjYXJ0ZSDCuyBkZSBjZSBjb21wb3NhbnQgZXN0IGNvcGnDqSBkYW5zXG4gICBzdHVkaW9WaXRyaW5lL2Fzc2V0cy92aXRyaW5lL2Nzcy9ibG9jcy5jc3MgKHBhcnRpZSAuYmxvYyAvIC5ibG9jQ29ycHMgL1xuICAgLmJsb2NUaXRyZSAvIC5ibG9jVGV4dGUgLyAuYmxvY0FjdGlvbnMgdW5pcXVlbWVudCwgcG91ciBsYSBsaXN0ZSBkZXNcbiAgIHNjw6luYXJpb3MgZCdhcGVyw6d1KS4gU2kgdHUgbW9kaWZpZXMgbCd1bmUgZGUgY2VzIHLDqGdsZXMgaWNpIOKGkiBkZW1hbmRlciBhdSBQT1xuICAgcydpbCBmYXV0IGxhIHLDqXBlcmN1dGVyIHN1ciBsYSBjb3BpZSB2aXRyaW5lLiBMZSByZXN0ZSBkdSBjb21wb3NhbnQgKHN0YXRzLFxuICAgY29tcHRldXIsIHLDqW9yZG9ubmFuY2VtZW50LCBmb3JtdWxhaXJlcykgZXN0IHByb3ByZSBhdSBzdHVkaW8uXG5cbiAgIENvbXBvc2FudCB1bmlmacOpIHBvdXIgdG91cyBsZXMgYmxvY3MgZGUgdHlwZSA6XG4gICBJY8O0bmUgfCBDb250ZW51IHwgQWN0aW9uc1xuXG4gICBTdHJ1Y3R1cmUgSFRNTCA6XG4gICA8ZGl2IGNsYXNzPVwiYmxvYyBibG9jR3JvdXBlXCI+ICDihpAgYmxvY0dyb3VwZSBjb25zZXJ2w6kgcG91ciBUU1xuICAgICAgIDxkaXYgY2xhc3M9XCJibG9jSWNvbmVcIj4uLi48L2Rpdj5cbiAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY0NvcnBzXCI+XG4gICAgICAgICAgIDxoNCBjbGFzcz1cImJsb2NUaXRyZVwiPi4uLjwvaDQ+XG4gICAgICAgICAgIDxwIGNsYXNzPVwiYmxvY1RleHRlXCI+Li4uPC9wPlxuICAgICAgIDwvZGl2PlxuICAgICAgIDxkaXYgY2xhc3M9XCJibG9jQWN0aW9uc1wiPi4uLjwvZGl2PlxuICAgPC9kaXY+XG5cbiAgIExFIGNvbnRlbmV1ciBkZSBjb250ZW51IFN0dWRpbyAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpIDogdG91dGUgYm/DrnRlXG4gICDCqyB0aXRyZSArIHRleHRlICsgYWN0aW9ucyDCuyBhZG9wdGUgY2UgY29tcG9zYW50IOKAlCBjYXJ0ZXMgZHUgY2F0YWxvZ3VlIGRlXG4gICBzY8OpbmFyaW9zLCBibG9jcyBkZSBsYSBwYWdlIE1vZGlmaWVyLCBibG9jcyBkJ29uZ2xldC4gWm9uZXMgb3B0aW9ubmVsbGVzIDtcbiAgIGxlcyBjb250ZXh0ZXMgbidhcHBvcnRlbnQgcXVlIGRlcyBtb2RpZmljYXRldXJzIChjb3VsZXVyLCBsYXJnZXVyKS5cblxuICAgTW9kaWZpY2F0ZXVycyBkZSBjYXTDqWdvcmllIChjb3VsZXVycyBkJ2ljw7RuZSkgOlxuICAgLSAuYmxvY0dyb3VwZXMgKG91IC5ibG9jR3JvdXBlIHBvdXIgY29tcGF0IFRTKVxuICAgLSAuYmxvY0Rpc3RyaWJ1dGlvbnNcbiAgIC0gLmJsb2NUZWxlY2hhcmdlclxuICAgLSAuYmxvY0dyb3VwZSAobW9kZSB0ZXN0LCBjb21wYXQgVFMpXG5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgQ09OVEVORVVSIFBSSU5DSVBBTFxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycztcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBaT05FIElDw5RORSAod3JhcHBlciB1bmlxdWVtZW50KVxuICAgTGUgc3R5bGUgZGVzIGltZy9zdmcgZXQgbGVzIGNvdWxldXJzIGRlIGZvbmRcbiAgIHBhciBjYXTDqWdvcmllIHNvbnQgY2VudHJhbGlzw6lzIGRhbnMgNTRfaWNvbmVzLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jSWNvbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIHBhZGRpbmc6IDAgNHB4IDAgMDtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBaT05FIENPTlRFTlVcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uYmxvY0NvcnBzIHtcbiAgICBmbGV4OiAxO1xuICAgIC8qIDE2LzE4IGV0IHBhcyAxNi8yMCAoZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTQpIDogbGUgY29ycHMgcG9ydGUgbWFpbnRlbmFudCB1bmVcbiAgICAgICBpbGx1c3RyYXRpb24sIGV0IHVuIMOpY2FydCBkZSA0cHggZW50cmUgbWFyZ2UgaGF1dGUgZXQgbWFyZ2VzIGxhdMOpcmFsZXMgc2Ugdm9pdFxuICAgICAgIGltbcOpZGlhdGVtZW50IGF1dG91ciBkJ3VuZSBpbWFnZS4gMnB4IHBhc3NlbnQsIDQgbm9uLiAqL1xuICAgIHBhZGRpbmc6IDE2cHggMThweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xufVxuXG4uYmxvY1RpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLmJsb2NUZXh0ZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5ibG9jU291c1RpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cbiovXG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgWk9ORSBBQ1RJT05TXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NBY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG4gICAgYm9yZGVyLWxlZnQ6IHZhcigtLWJvcmRlcik7XG4gICAgbWluLXdpZHRoOiAyNDBweDtcbn1cblxuLmJsb2NBY3Rpb25zIC50b2dnbGVBdmVjTGFiZWwge1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBTVEFUUyAobm9tYnJlICsgbGFiZWwpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NTdGF0cyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpOyAvKiBhbGlnbsOpIDYgLT4gOHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIG1hcmdpbi10b3A6IDRweDtcbn1cblxuLmJsb2NOb21icmUge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMjRiKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJsb2NMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIExlIHRvdGFsIGRlcyBpbnNjcmlwdGlvbnMgZW4gZGlyZWN0IChlbiB0w6p0ZSBkZSBsJ29uZ2xldCBQYXJ0aWNpcGFudHMgZGUgRGlmZnVzZXIpIDogwqsgLyA1MDAgwrssIGxhXG4gICBsaW1pdGUgZGUgbCdvZmZyZSA7IGFsZXJ0ZSBkw6hzIDkwICUsIHBsYWNlcyBvZmZlcnRlcyBhdS1kZWzDoCAoUGFydGljaXBhbnRTZXJ2aWNlOjpldGF0TGltaXRlSW5zY3JpcHRpb25zRW5EaXJlY3QpLiAqL1xuLmJsb2NMaW1pdGUge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMjRiKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLmJsb2NOb21icmVBbGVydGUsXG4uY29tcHRldXJHbG9iYWxWYWxldXIuYmxvY05vbWJyZUFsZXJ0ZSB7XG4gICAgY29sb3I6IHZhcigtLWNPcjQpO1xufVxuXG4uYmxvY05vbWJyZU9mZmVydCxcbi5jb21wdGV1ckdsb2JhbFZhbGV1ci5ibG9jTm9tYnJlT2ZmZXJ0LFxuLmJsb2NQbGFjZXNPZmZlcnRlcyB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTMpO1xufVxuXG4uYmxvY1BsYWNlc09mZmVydGVzIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBDT01QVEVVUiAoZ3JvcyBjaGlmZnJlIGF2ZWMgc8OpcGFyYXRldXIpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NDb21wdGV1ciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4uY29tcHRldXJWYWxldXIge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMjRiKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmNvbXB0ZXVyUmVzdGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogZGlzcGxheTpmbGV4IMOpY3Jhc2VyYWl0IGwnYXR0cmlidXQgaGlkZGVuIOKGkiBvbiBsZSByw6l0YWJsaXQgZXhwbGljaXRlbWVudC4gKi9cbi5jb21wdGV1clJlc3RlW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jb21wdGV1clNlcGFyYXRldXIge1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi5jb21wdGV1ckxhYmVsIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBEQVRFIC8gSU5GTyBTRUNPTkRBSVJFXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NEYXRlIC8qLCAuYmxvY1Rlc3QgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8sIC5ibG9jUmVmZXJlbmNlcyB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbi10b3A6IGF1dG87XG59XG5cbi8qIEluZm9zIHNlY29uZGFpcmVzIGVtcGlsw6llcyBlbiBiYXMgZGUgY2FydGUgOiBzZXVsZSBsYSBwcmVtacOocmUgcHJlbmQgbCdlc3BhY2UgbGlicmUgKi9cbi5ibG9jUmVmZXJlbmNlcyArIC5ibG9jUmVmZXJlbmNlcyxcbi5ibG9jUmVmZXJlbmNlcyArIC5ibG9jRGF0ZSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uYmxvY1Rlc3Qge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG4qL1xuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIExJU1RFIEQnSVRFTVMgKGxvdHMpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NMaXN0ZSB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDEycHggMCAwIDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4uYmxvY0l0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYmxvY0l0ZW1JbWFnZSB7XG4gICAgd2lkdGg6IDMycHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmJsb2NJdGVtTGFiZWwge1xuICAgIGZsZXg6IDE7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5ibG9jSXRlbVN0b2NrIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYuYmxvY1ZlcnRpY2FsLFxuLnNlY3Rpb25Gb3JtdWxhaXJlID4gZGl2LmJsb2NWZXJ0aWNhbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMTVweCAwO1xuICAgIG1hcmdpbjogMzBweCAyMHB4IDMwcHg7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogRGFucyB1bmUgc2VjdGlvbiBjYW5vbmlxdWUsIGxlIHJldHJhaXQgaG9yaXpvbnRhbCBlc3QgcG9ydMOpIHBhciBsYSBzZWN0aW9uIGVsbGUtbcOqbWUgKi9cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGRpdi5ibG9jVmVydGljYWwge1xuICAgIG1hcmdpbjogMTVweCAwIDEycHg7XG59XG5cbi8qIFVuIGdyb3VwZSBzaG93SWYgcHJvbG9uZ2UgbGUgY2hhbXAgcXVpIGxlIGNvbW1hbmRlLCBkw6ljbGFyw6kganVzdGUgYXZhbnQgbHVpIGRhbnMgZm9ybS5qc29uXG4gICAobG9pIGRlIHByb3hpbWl0w6ksIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMjcpIDogbmkgdHJhaXQgbmkgbWFyZ2UgZGUgYmxvYywgaWwgc2UgY29sbGUgc291c1xuICAgY2UgY2hhbXAsIGV0IGwnZXNwYWNlIG9yZGluYWlyZSByZXZpZW50IGFwcsOocyBsdWkuICovXG4uc2VjdGlvbkZvcm11bGFpcmUgPiA6bm90KC5ibG9jVmVydGljYWwpOmhhcygrIGRpdi5ibG9jVmVydGljYWxbZGF0YS1zaG93LWlmLWZpZWxkXSkge1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGRpdi5ibG9jVmVydGljYWxbZGF0YS1zaG93LWlmLWZpZWxkXSB7XG4gICAgbWFyZ2luOiAwIDAgdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxuLnNlY3Rpb25Gb3JtdWxhaXJlID4gZGl2LmJsb2NWZXJ0aWNhbFtkYXRhLXNob3ctaWYtZmllbGRdOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi8qIERhbnMgdW5lIHNlY3Rpb24gb8O5IHVuZSBjYXNlIGZhaXQgYXBwYXJhw650cmUgZGVzIHLDqWdsYWdlcywgdW4gdHJhaXQgc8OpcGFyZSBsZXMgYmxvY3MsIHBvdXJcbiAgIG1vbnRyZXIgY2UgcXVpIHZhIGVuc2VtYmxlIDogdW4gYmxvYyBlc3QgdW4gY2hhbXAsIGF2ZWMgbGUgZ3JvdXBlIHNob3dJZiBjb2xsw6kgc291cyBsdWlcbiAgIChjaGVmIGRlIHByb2pldCAyMDI2LTA5LTI3KS4gKi9cbi5zZWN0aW9uRm9ybXVsYWlyZTpoYXMoPiBbZGF0YS1zaG93LWlmLWZpZWxkXSkgPiBkaXY6bm90KFtkYXRhLXNob3ctaWYtZmllbGRdKSB+IGRpdjpub3QoW2RhdGEtc2hvdy1pZi1maWVsZF0pIHtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xuICAgIHBhZGRpbmctdG9wOiB2YXIoLS1nYXBNb3llbik7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgUsOJT1JET05OQU5DRU1FTlQgKHBvaWduw6llICsgZmzDqGNoZXMpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmxpc3RlT3JkcmVQb2lnbmVlIHtcbiAgICB3aWR0aDogMTRweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBjdXJzb3I6IGdyYWI7XG59XG5cbi5saXN0ZU9yZHJlUG9pZ25lZTphY3RpdmUge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbi5kaXZBY3Rpb25DbGFzc2VyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbn1cblxuLyogUGV0aXQgYm91dG9uIGljw7RuZSBjb21wYWN0IChmbMOoY2hlcywgKy/iiJIsIGV0Yy4pICovXG4ubWluaUFjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAycHggOHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5taW5pQWN0aW9uOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4ubWluaUFjdGlvbjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4ubGlzdGVPcmRyZUl0ZW0uZHJhZ2dpbmcge1xuICAgIG9wYWNpdHk6IDAuMztcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBSRVNQT05TSVZFXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgLmJsb2Mge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cblxuICAgIC5ibG9jQWN0aW9ucyB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSUPDlE5FUyAtIFN0eWxlcyBwb3VyIGxlcyBicmlxdWVzIGV0IGxlcyBibG9jc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgQ2UgZmljaGllciBjZW50cmFsaXNlIGxlIHN0eWxlIHZpc3VlbCBkZXMgaWPDtG5lc1xuICAgdXRpbGlzw6llcyDDoCBsYSBmb2lzIGRhbnMgOlxuICAgLSBsZXMgYnJpcXVlcyBkdSBtZW51IGQnYWpvdXQgKC5icmlxdWVJY29uZSBzdXIgaW1nL3N2ZylcbiAgIC0gbGVzIGJsb2NzIGRlIHLDqXN1bcOpIChpbWcvc3ZnIGRhbnMgLmJsb2NJY29uZSlcblxuICAgTGUgd3JhcHBlciAuYmxvY0ljb25lIGx1aS1tw6ptZSAoZmxleCwgcGFkZGluZykgcmVzdGVcbiAgIGRhbnMgNTNfYmxvY3MuY3NzIGNhciBjJ2VzdCBkZSBsYSBzdHJ1Y3R1cmUgZGUgY29tcG9zYW50LlxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBERVVYIHRhaWxsZXMgZCdpY8O0bmUgZGUgc2PDqG5lIGRhbnMgdG91dCBsZSBwcm9qZXQsIG1lc3Vyw6llcyBzdXIgbGUgREVTU0lOLCBqYW1haXMgc3VyIGxhXG4gICBjYXNlIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNikgOiA1MnB4IOKAlCBsZXMgdHVpbGVzIGR1IHNjw6luYXJpbywgbCdhZmZpY2hhZ2VcbiAgIGxlIHBsdXMgZnLDqXF1ZW50LCBldCB0b3V0IGNlIHF1aSBlc3QgcGV0aXQg4oCUIG91IDY0cHgg4oCUIGNhcnJvdXNlbCBkZSBjb21wb3NpdGlvbiwgcGFnZSBkZVxuICAgc2PDqG5lLCBpY8O0bmUgZGUgc2PDqW5hcmlvLCByw6ljYXBpdHVsYXRpZiwgYm/DrnRlIGRlIHBhc3NhZ2UuIExhIGNhc2UgYWpvdXRlIHNvbiBhaXIgZXQgc29uXG4gICBmb25kIEFVVE9VUiBkZSBjZXMgNTIgb3UgNjQsIGphbWFpcyBkZWRhbnMgOiBjYXNlIDY0IGV0IDZweCBkJ2FpciA9IGRlc3NpbiA1Mi4gKi9cbi5icmlxdWVJY29uZSxcbi5ibG9jSWNvbmUgaW1nLFxuLmJsb2NJY29uZSBzdmcge1xuICAgIHdpZHRoOiA2NHB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICBwYWRkaW5nOiA2cHg7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZPTkRTIFBBUiBDQVTDiUdPUklFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYnJpcXVlR3JvdXBlcyAuYnJpcXVlSWNvbmUsXG4uYmxvY0dyb3VwZSAuYmxvY0ljb25lIGltZyxcbi5ibG9jR3JvdXBlIC5ibG9jSWNvbmUgc3ZnLFxuLmJsb2NUZWxlY2hhcmdlciAuYmxvY0ljb25lIGltZyxcbi5ibG9jVGVsZWNoYXJnZXIgLmJsb2NJY29uZSBzdmcgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7IH1cblxuLmJyaXF1ZURpc3RyaWJ1dGlvbnMgLmJyaXF1ZUljb25lLFxuLmJsb2NEaXN0cmlidXRpb24gLmJsb2NJY29uZSBpbWcsXG4uYmxvY0Rpc3RyaWJ1dGlvbiAuYmxvY0ljb25lIHN2ZyB7IGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTsgfVxuXG4uYnJpcXVlQ29uZmlndXJhdGlvbnMgLmJyaXF1ZUljb25lLFxuLmJyaXF1ZUNvbmZpZyAuYnJpcXVlSWNvbmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7IH1cblxuLmJyaXF1ZVNjZW5lcyAuYnJpcXVlSWNvbmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7IH1cblxuLmJyaXF1ZUFmZmljaGFnZXMgLmJyaXF1ZUljb25lIHsgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpOyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBJQ8OUTkUgRCdVTiBTQ8OJTkFSSU9cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIFRvdWpvdXJzIMOgIERST0lURSwgZXQgU0FOUyBmb25kIChkw6ljaXNpb24gUE8gMjAyNi0wNy0zMSkgOiBsZXMgZm9uZHMgY2ktZGVzc3VzXG4gICBjb2RlbnQgdW5lIGNhdMOpZ29yaWUgZGUgYnJpcXVlLCB1biBzY8OpbmFyaW8gbidlbiBhIGF1Y3VuZS5cblxuICAgTGUgU1ZHIGVzdCBpbmxpbsOpIChpY29uZVNjZW5hcmlvKSwgcGFzIGVuIDxpbWc+IDogc2NlbmFyaW9zL3tkb3NzaWVyfS9pY29uZS5zdmdcbiAgIGVzdCBob3JzIHB1YmxpYy8uIDY0cHggZGUgZGVzc2luLCBsYSBncmFuZGUgZGVzIGRldXggdGFpbGxlcyBkdSBwcm9qZXQgKGNpLWRlc3N1cykuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uc2NlbmFyaW9JY29uZSB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDY0cHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnNjZW5hcmlvSWNvbmUgc3ZnIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi8qIERhbnMgdW5lIGNhcnRlIGR1IGNhdGFsb2d1ZSwgbCdpY8O0bmUgc2UgY2FsZSBzdXIgbGUgcGFkZGluZyBkdSBjb3JwcyBkdSBibG9jLiAqL1xuLmNyZWVyU2NlbmFyaW9DYXJ0ZSAuc2NlbmFyaW9JY29uZSB7XG4gICAgbWFyZ2luOiAxNnB4IDIwcHggMTZweCBhdXRvO1xufVxuXG4vKiBQYWdlIGQndW4gc2PDqW5hcmlvIDogZGVzY3JpcHRpb24gw6AgZ2F1Y2hlLCBpY8O0bmUgw6AgZHJvaXRlLiAqL1xuLnNjZW5hcmlvRW50ZXRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTSURFQkFSIEdFU1RJT04gw4lWw4lORU1FTlRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2dlc3Rpb25FdmVuZW1lbnQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWluLWhlaWdodDogY2FsYygxMDB2aCAtIDYwcHgpO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNJREVCQVJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI3NpZGViYXJFdmVuZW1lbnQge1xuICAgIHdpZHRoOiAyMDBweDtcbiAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmlnaHQ6IHZhcigtLWJvcmRlcik7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4jc2lkZWJhckVudGV0ZSB7XG4gICAgcGFkZGluZzogMjBweCAxNXB4O1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG59XG5cbiNjdGFTaWRlYmFyUmV0b3VyIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbiNjdGFTaWRlYmFyUmV0b3VyOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDQpO1xufVxuXG4jc2lkZWJhclRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMDtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1FTlUgU0lERUJBUlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jc2lkZWJhck1lbnUge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDE1cHggMDtcbn1cblxuI3NpZGViYXJNZW51IGxpIHtcbiAgICBtYXJnaW46IDA7XG59XG5cbiNzaWRlYmFyTWVudSBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCBib3JkZXItY29sb3IgMC4xNXM7XG59XG5cbiNzaWRlYmFyTWVudSBhOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG59XG5cbiNzaWRlYmFyTWVudSBhLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09OVEVOVSBQUklOQ0lQQUxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2dlc3Rpb25Db250ZW51IHtcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDMwcHggNDBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJMT0MgQ09VTEVVUlMgKGZvcm11bGFpcmUgY3LDqWF0aW9uKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnRpdHJlRXZlbmVtZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLyogQWN0aW9uIGRlIGwnZW4tdMOqdGUgKGVuZ3JlbmFnZSBjb25maWcgb3UgY3JvaXggZGUgZmVybWV0dXJlKSBwb3Vzc8OpZSB0b3V0IMOgIGRyb2l0ZS4gKi9cbi50aXRyZUV2ZW5lbWVudEFjdGlvbiB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5idG5Db25maWdPbmdsZXRzIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbn1cblxuLmJ0bkNvbmZpZ09uZ2xldHM6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uYmxvY09uZ2xldHMge1xuICAgIG1hcmdpbjogMTVweCAwO1xufVxuXG4vKiBUaXRyZSBzYW5zIGljw7RuZSA6IHBhZGRpbmcgZXhwbGljaXRlICovXG4udGl0cmVGb3JtdWxhaXJlU2Fuc0ljb25lIHtcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG59XG5cbi5ibG9jT25nbGV0c0VudHJlZXMgLnN2Z0NiIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4uYmxvY09uZ2xldHNFeHRyYXMgLnN2Z0NiIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4uYmxvY0NvdWxldXJzIHtcbiAgICBtYXJnaW46IDE1cHggMDtcbn1cblxuLmJsb2NDb3VsZXVycyA+IGxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLmNvbnRlbnVDb3VsZXVycyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5saWduZUNvdWxldXJzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4uY2hhbXBDb3VsZXVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG59XG5cbi5jaGFtcENvdWxldXIgaW5wdXRbdHlwZT1cImNvbG9yXCJdIHtcbiAgICB3aWR0aDogNTBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG59XG5cbi5jaGFtcENvdWxldXIgc3BhbiB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4vKiBBcGVyw6d1IENvbmZpZ3VyYXRpb24gRm9uZCAqL1xuI3ByZXZpc3VhbGlzYXRpb25Db25maWdGb25kIHtcbiAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICBtYXJnaW46IDIwcHg7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4vKiBMZSB0aXRyZSBkJ2VuLXTDqnRlIHNlIHBvc2Ugw4AgTcOKTUUgbGUgZm9uZCwgaG9ycyBkZSBsYSBjYXJ0ZSA6IHNldWwgdGV4dGUgZGUgbCfDqWNyYW4gZGFucyBjZVxuICAgY2FzLCBldCBkb25jIHNldWwgY29uY2VybsOpIHBhciBsYSBjb3VsZXVyIHLDqWdsw6llIHNvdXMgbCdpbWFnZS4gU2EgY291bGV1ciBlc3QgZW4gc3R5bGUgaW5saW5lXG4gICAoZWxsZSB2aWVudCBkdSBzw6lsZWN0ZXVyLCBwYXMgZCd1bmUgdmFyaWFibGUgZGUgbGEgcGFsZXR0ZSkuICovXG4jcHJldmlzdWFsaXNhdGlvblRpdHJlU3VyRm9uZCB7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBtYXJnaW46IDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4jcHJldmlzdWFsaXNhdGlvbkNvbmZpZ0ZvbmRDYXJ0ZSB7XG4gICAgcGFkZGluZzogMjBweCAyOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1pbi13aWR0aDogMjAwcHg7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UsIGJhY2tncm91bmQgMC4zcyBlYXNlLCBib3JkZXIgMC4zcyBlYXNlLCBib3gtc2hhZG93IDAuM3MgZWFzZTtcbn1cblxuI3ByZXZpc3VhbGlzYXRpb25UaXRyZUZvbmQge1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4jcHJldmlzdWFsaXNhdGlvblRleHRlRm9uZCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRU5Uw4pURSBTRUNUSU9OIChib3V0b24gYWpvdXRlcilcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmVudGV0ZVNlY3Rpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5lbnRldGVTZWN0aW9uIGgxIHtcbiAgICBtYXJnaW46IDAgMCA1cHg7XG59XG5cbi5lbnRldGVTZWN0aW9uIHAge1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLmNvbXB0ZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgbWFyZ2luOiAwIDAgMjBweDtcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBUQUJMRSBERSBHRVNUSU9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi50YWJsZUdlc3Rpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4udGFibGVHZXN0aW9uIHRoLFxuLnRhYmxlR2VzdGlvbiB0ZCB7XG4gICAgcGFkZGluZzogMTJweCAxNXB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLnRhYmxlR2VzdGlvbiB0aCB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4udGFibGVHZXN0aW9uIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi50YWJsZUdlc3Rpb24gdGJvZHkgdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLnRhYmxlR2VzdGlvbiAuY29sQWN0aW9ucyB7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRhYmxlR2VzdGlvbiAuY29sTm9tYnJlIHtcbiAgICB3aWR0aDogMTAwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udGFibGVHZXN0aW9uIC5lcHVpc2Uge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xufVxuKi9cblxuLyogQm91dG9ucyBpY8O0bmVzICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5idG5JY29uZSB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgcGFkZGluZzogNnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgY29sb3IgMC4xNXM7XG59XG5cbi5idG5JY29uZTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uYnRuSWNvbmUgc3ZnIHtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIChkaWFsb2cpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5kaWFsb2cge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDQwcHggdmFyKC0tY09tYnJlRm9ydGUpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgLyogUGFzIGRlIHRhaWxsZSBzdXIgbGUgc8OpbGVjdGV1ciBkJ8OpbMOpbWVudCA6IGVsbGUgY29udHJhaW5kcmFpdCBUT1VTIGxlc1xuICAgICAgIDxkaWFsb2c+IChsYSBzdXJjb3VjaGUgYXBlcsOndSAxNi85IGR1IG5veWF1IHkgZXN0IHBhc3PDqWUpLiBMYSB0YWlsbGUgZXN0XG4gICAgICAgcG9ydMOpZSDCqyBlbiBwbHVzIMK7IHBhciBsYSBjbGFzc2UgZGUgY2hhcXVlIG1vZGFsZSDigJQgLm1vZGFsZSA6IDUwMHB4XG4gICAgICAgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS4gKi9cbn1cblxuZGlhbG9nOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY092ZXJsYXkpO1xufVxuXG5kaWFsb2cgZm9ybSB7XG4gICAgcGFkZGluZzogMjVweDtcbn1cblxuZGlhbG9nIGgzIHtcbiAgICBtYXJnaW46IDAgMCAyMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmNoYW1wRm9ybXVsYWlyZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLmNoYW1wRm9ybXVsYWlyZSBsYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4uY2hhbXBGb3JtdWxhaXJlIGlucHV0LFxuLmNoYW1wRm9ybXVsYWlyZSB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmNoYW1wRm9ybXVsYWlyZSBpbnB1dDpmb2N1cyxcbi5jaGFtcEZvcm11bGFpcmUgdGV4dGFyZWE6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi5jaGFtcEZvcm11bGFpcmUgaW5wdXRbdHlwZT1cIm51bWJlclwiXSB7XG4gICAgd2lkdGg6IDEwMHB4O1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uYWN0aW9uc01vZGFsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGdhcDogMTBweDtcbiAgICBtYXJnaW4tdG9wOiAyNXB4O1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFJFU1BPTlNJVkVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuICAgICNnZXN0aW9uRXZlbmVtZW50IHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG5cbiAgICAjc2lkZWJhckV2ZW5lbWVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbiAgICB9XG5cbiAgICAjc2lkZWJhck1lbnUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgIGdhcDogNXB4O1xuICAgIH1cblxuICAgICNzaWRlYmFyTWVudSBhIHtcbiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgfVxuXG4gICAgI3NpZGViYXJNZW51IGEuYWN0aXZlIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQzKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbiAgICB9XG5cbiAgICAjZ2VzdGlvbkNvbnRlbnUge1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgIH1cbiAgICAqL1xuXG4gICAgLyogRW50w6p0ZSBzZWN0aW9uIHJlc3BvbnNpdmUgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAuZW50ZXRlU2VjdGlvbiB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTVweDtcbiAgICB9XG4gICAgKi9cblxuICAgIC8qIFRhYmxlIHJlc3BvbnNpdmUgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAudGFibGVHZXN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuXG4gICAgLnRhYmxlR2VzdGlvbiB0aCxcbiAgICAudGFibGVHZXN0aW9uIHRkIHtcbiAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICB9XG4gICAgKi9cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBMSVNURSBERVMgw4lWw4lORU1FTlRTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBEZXV4IGJvdXRvbnMgZGUgY3LDqWF0aW9uIGPDtHRlIMOgIGPDtHRlLCBhdS1kZXNzdXMgZGUgbGEgbGlzdGUgKi9cbi5iYXJyZUNyZWF0aW9uRXZlbmVtZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG59XG5cbi8qIEVuY2FkcsOpIMKrIGxpbWl0ZSBhdHRlaW50ZSDCuyAoc3R1ZGlvL18vX2xpbWl0ZUV2ZW5lbWVudHMudHdpZykgOiBwbGVpbmUgbGFyZ2V1ciwgcGFsZXR0ZSBPciDigJRcbiAgIGlsIHBhcmxlIGQnb2ZmcmUgKG9yID0gcHJpeCBldCBpbnNjcmlwdGlvbiwgY291bGV1cnMubWQpLiBUaXRyZSBldCB0ZXh0ZSDDoCBnYXVjaGUsIGxlIGJvdXRvblxuICAgw6AgZHJvaXRlIDsgZW4gZmVuw6p0cmUgw6l0cm9pdGUsIGxlIGJvdXRvbiBwYXNzZSBzb3VzIGxlIHRleHRlLiBNw6ptZSByZXNwaXJhdGlvbiBxdWUgbGEgY2FydGVcbiAgIGQnb2ZmcmUgZGUgbGEgVml0cmluZSAoLS1wYWRkaW5nQ2FydGVMYXJnZSwgLS1ib3JkZXJSMikuIFN1ciBsYSBsaXN0ZSBjb21tZSBzdXIgbGVzIHRyb2lzXG4gICBwYWdlcyBkdSBwYXJjb3VycyBzY8OpbmFyaW8uICovXG4uZGl2TGltaXRlRXZlbmVtZW50cyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLWdhcExhcmdlKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ2FydGVMYXJnZSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY09yMCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY09yMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xufVxuXG4ubGltaXRlRXZlbmVtZW50c0NvcnBzIHtcbiAgICBmbGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkge1xuICAgIC5kaXZMaW1pdGVFdmVuZW1lbnRzIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgfVxufVxuXG4vKiBMaXN0ZSA6IHVuIMOpdsOpbmVtZW50IHBhciBsaWduZS4gVGFibGUgPSBjb2xvbm5lcyBhbGlnbsOpZXMgc3VyIHRvdXRlcyBsZXMgbGlnbmVzLiAqL1xuLnRhYmxlRXZlbmVtZW50cyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1nYXBMYXJnZSk7XG59XG5cbi50YWJsZUV2ZW5lbWVudHMgdGgge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgcGFkZGluZzogdmFyKC0tZ2FwTW95ZW4pIHZhcigtLWdhcExhcmdlKTtcbn1cblxuLnRhYmxlRXZlbmVtZW50cyB0ZCB7XG4gICAgcGFkZGluZzogdmFyKC0tZ2FwTW95ZW4pIHZhcigtLWdhcExhcmdlKTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8qIFN1cnZvbCA6IHJlcMOocmUgdmlzdWVsIGRlIGxhIGxpZ25lIGNvdXJhbnRlIChwYXMgdW5lIHPDqWxlY3Rpb24pICovXG4udGFibGVFdmVuZW1lbnRzIHRib2R5IHRyOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi8qIFNldWxlIGxhIGNvbG9ubmUgdGl0cmUgYWJzb3JiZSBsJ2VzcGFjZSA7IGxlcyBhdXRyZXMgc2UgY2FsZW50IHN1ciBsZXVyIGNvbnRlbnUgKi9cbi50YWJsZUV2ZW5lbWVudHMgdGg6bm90KDpmaXJzdC1jaGlsZCksXG4udGFibGVFdmVuZW1lbnRzIHRkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICB3aWR0aDogMSU7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLyogQWxpZ25lbWVudCA6IHRpdHJlIMOgIGdhdWNoZSwgU3RhdHV0IGV0IERhdGUgY2VudHLDqXMsIFN1cHByaW1lciDDoCBkcm9pdGUgKi9cbi50YWJsZUV2ZW5lbWVudHMgdGg6bnRoLWNoaWxkKDIpLFxuLnRhYmxlRXZlbmVtZW50cyB0ZDpudGgtY2hpbGQoMiksXG4udGFibGVFdmVuZW1lbnRzIHRoOm50aC1jaGlsZCgzKSxcbi50YWJsZUV2ZW5lbWVudHMgdGQ6bnRoLWNoaWxkKDMpIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi50YWJsZUV2ZW5lbWVudHMgdGg6bGFzdC1jaGlsZCxcbi50YWJsZUV2ZW5lbWVudHMgdGQ6bGFzdC1jaGlsZCB7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi5saWduZUV2ZW5lbWVudE5vbSB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xufVxuXG4ubGlnbmVFdmVuZW1lbnROb206aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5saWduZUV2ZW5lbWVudERhdGUge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogQWN0aW9ucyBkZSBsYSBsaWduZSA6IE91dnJpciAvIFN1cHByaW1lciwgY8O0dGUgw6AgY8O0dGUsIGFsaWduw6llcyDDoCBkcm9pdGUgKi9cbi5saWduZUV2ZW5lbWVudEFjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4ubGllbk91dnJpckV2ZW5lbWVudCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbn1cblxuLmxpZW5PdXZyaXJFdmVuZW1lbnQ6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIFN1cHByZXNzaW9uIDogYm91dG9uIGQndW4gZm9ybSBQT1NULCBwcsOpc2VudMOpIGNvbW1lIHVuIGxpZW4gKHBhcyBkZSBjaHJvbWUgbmF0aWYpICovXG4ubGllblN1cHByaW1lckV2ZW5lbWVudCB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ubGllblN1cHByaW1lckV2ZW5lbWVudDpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIFN0YXR1dCA6IFByw6lwYXJlciAvIFRlc3RlciAvIERpZmZ1c2VyICh2b2NhYnVsYWlyZSBkZXMgb25nbGV0cykgKi9cbi5zdGF0dXRFdmVuZW1lbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nRXRpcXVldHRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG59XG5cbi5zdGF0dXRQcmVwYXJlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4uc3RhdHV0VGVzdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbn1cblxuLnN0YXR1dERpZmZ1c2VyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jU3VjY2VzMCk7XG4gICAgY29sb3I6IHZhcigtLWNTdWNjZXM0KTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBHUklMTEUgREVTIEdSQU5ERVMgQ0FUw4lHT1JJRVMgKMOpdGFwZSAyIDogY3LDqWVyIGRlcHVpcyB1biBzY8OpbmFyaW8pXG4gICBNw6ptZSBwYXRyb24gcXVlIGxhIGdyaWxsZSBkZXMgw6l2w6luZW1lbnRzICg1NV9ldmVuZW1lbnRzLmNzcykgOiBmbGV4LXdyYXAgK1xuICAgY2FydGVzIMOgIGxhcmdldXIgZml4ZSwgcGFzIGRlIGdyaWxsZSDDqXRpcsOpZSBlbiAxZnIuIERpbWVuc2lvbnMgZXQgZXNwYWNlbWVudHNcbiAgIHByaXMgc3VyIGxlcyB0b2tlbnMgZHUgcHJvamV0IChsYXJnZXVyIGRlIGNhcnRlIDMzNHB4LCBnYXBzLCBib3JkdXJlIGRlIGNhcnRlKS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNncmlsbGVSdWJyaXF1ZXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG59XG5cbi5jYXJ0ZVJ1YnJpcXVlIHtcbiAgICB3aWR0aDogMzM0cHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87XG4gICAgY29sdW1uLWdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHJvdy1nYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgYWxpZ24tY29udGVudDogc3RhcnQ7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG59XG5cbi5jYXJ0ZVJ1YnJpcXVlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi5jYXJ0ZVJ1YnJpcXVlTm9tIHtcbiAgICBncmlkLWNvbHVtbjogMTtcbiAgICBncmlkLXJvdzogMTtcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG59XG5cbi5jYXJ0ZVJ1YnJpcXVlQWNjcm9jaGUge1xuICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiBJY8O0bmUgU1ZHIGlubGluZSAoc3Ryb2tlOiBjdXJyZW50Q29sb3Ig4oaSIGNvbG9yw6llIHBhciBsYSBwcm9wcmnDqXTDqSBjb2xvcikgKi9cbi5jYXJ0ZVJ1YnJpcXVlSWNvbmUge1xuICAgIGdyaWQtY29sdW1uOiAyO1xuICAgIGdyaWQtcm93OiAxO1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xufVxuXG4uY2FydGVSdWJyaXF1ZUljb25lIHN2ZyB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZJTFRSRVMg4oCUIGNvbXBvc2FudCBjb21tdW4gKMKrIHVuZSBjbGFzc2UgPSB1biBkZXNpZ24gwrspXG5cbiAgIOKaoO+4jyBDT1BJRSBBU1NVTcOJRSDigJQganVtZWxsZSBkZSBzdHVkaW9WaXRyaW5lL2Fzc2V0cy92aXRyaW5lL2Nzcy9maWx0cmVzLmNzcy5cbiAgIElkZW50aXF1ZSBhdSBkw6lwYXJ0LiBUb3V0ZSBtb2RpZmljYXRpb24gaWNpIOKGkiBkZW1hbmRlciBhdSBQTyBzJ2lsIGZhdXQgbGEgcsOpcGVyY3V0ZXJcbiAgIHN1ciBsZSBqdW1lYXUgdml0cmluZS4gTGVzIGRldXggY29waWVzIHBldXZlbnQgZGl2ZXJnZXIgc2Vsb24gbGVzIGJlc29pbnMgZGUgY2hhcXVlIGPDtHTDqVxuICAgKHN0dWRpbyA9IG91dGlsIGNvbm5lY3TDqSA7IHZpdHJpbmUgPSBmdW5uZWwgcHVibGljLCBjYWNoYWJsZSwgU0VPKS5cblxuICAgVU4gU0VVTCBkZXNpZ24gZGUgcGFubmVhdSBkZSBmaWx0cmVzIHBvdXIgdG91dCBsZSBzdHVkaW8gOiBjYXRhbG9ndWVcbiAgIMKrIENyw6llciDDoCBwYXJ0aXIgZCd1biBzY8OpbmFyaW8gwrsgZXQgbWVudSDCqyBBam91dGVyIMK7IChzZWN0aW9uIFNjZW5lcykuXG4gICBMZXMgI2lkIGRlcyBwYW5uZWF1eCAoI2RpdkZpbHRyZVNjZW5hcmlvLCAjZGl2RmlsdHJlU2NlbmUpIG5lIHNlcnZlbnRcbiAgIHF1J2F1IFR5cGVTY3JpcHQgZXQgYXV4IHLDqWdsYWdlcyBwcm9wcmVzIMOgIHVuZSBwYWdlIOKAlCBqYW1haXMgYXUgZGVzaWduLlxuXG4gICAuZGl2RmlsdHJlWm9uZSAgICAgbGEgcmFuZ8OpZSA6IHBhbm5lYXUgw6AgZ2F1Y2hlLCBjb250ZW51IGZpbHRyw6kgw6AgZHJvaXRlXG4gICAuZGl2RmlsdHJlICAgICAgICAgbGUgcGFubmVhdSB2ZXJ0aWNhbCBkZSBmaWx0cmVzXG4gICAudGl0cmVGaWx0cmUgICAgICAgdGl0cmUgZHUgcGFubmVhdVxuICAgLmRpdkZpbHRyZUdyb3VwZSAgIGdyb3VwZSBkZSBwdWNlcyAoKyAucGxpZSA6IHJlcGxpw6ksIHNldWxzIGxlcyBhY3RpZnMgcmVzdGVudCB2aXNpYmxlcylcbiAgIC50aXRyZUdyb3VwZUZpbHRyZSB0aXRyZSBkJ3VuIGdyb3VwZSwgY2xpcXVhYmxlIChjaGV2cm9uKSwgcmVwbGllL2TDqXBsaWUgKHBsaWFnZUZpbHRyZXMudHMpXG4gICAuZmlsdHJlICAgICAgICAgICAgbGEgcHVjZSBjbGlxdWFibGUgKCsgLmFjdGlmIDogZm9uZCBncmlzICsgY29jaGUg4pyTIMOgIGRyb2l0ZSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5kaXZGaWx0cmVab25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTGlzdGUpOyAvKiBhbGlnbsOpIDIwIOKGkiAzMnB4IChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cblxuLmRpdkZpbHRyZSB7XG4gICAgZmxleDogMCAwIDI4MHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbn1cblxuLnRpdHJlRmlsdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHBhZGRpbmctYm90dG9tOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG59XG5cbi5kaXZGaWx0cmVHcm91cGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG59XG5cbi8qIFRpdHJlIGRlIGdyb3VwZSA6IGNsaXF1YWJsZSwgcmVwbGllL2TDqXBsaWUgc29uIGdyb3VwZSAoVFMgcGxpYWdlRmlsdHJlcy50cyBwb3NlIC5wbGllKSAqL1xuLnRpdHJlR3JvdXBlRmlsdHJlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIHBhZGRpbmctcmlnaHQ6IDE4cHg7IC8qIHBsYWNlIGR1IGNoZXZyb24gKi9cbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi50aXRyZUdyb3VwZUZpbHRyZTpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi8qIENoZXZyb24gZGVzc2luw6kgZW4gQ1NTIChhdWN1bmUgaWPDtG5lIGNoZXZyb24gbidleGlzdGUgZGFucyBsJ2FwcGxpKSA6IOKWviBvdXZlcnQsIOKWuCBwbGnDqSAqL1xuLnRpdHJlR3JvdXBlRmlsdHJlOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiA0cHg7XG4gICAgdG9wOiA1MCU7XG4gICAgd2lkdGg6IDdweDtcbiAgICBoZWlnaHQ6IDdweDtcbiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTcwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycztcbn1cblxuLmRpdkZpbHRyZUdyb3VwZS5wbGllIC50aXRyZUdyb3VwZUZpbHRyZTo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoLTQ1ZGVnKTtcbn1cblxuLyogR3JvdXBlIHBsacOpIDogc2V1bHMgbGVzIGZpbHRyZXMgYWN0aWZzIHJlc3RlbnQgYXBwYXJlbnRzICovXG4uZGl2RmlsdHJlR3JvdXBlLnBsaWUgLmZpbHRyZTpub3QoLmFjdGlmKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogTGEgcHVjZSA6IGR1IHRleHRlLCBwYXMgdW4gYm91dG9uIOKAlCBsZSBjb250b3VyIGV0IGxlIGZvbmQgYmxldSBwbGVpbiBhcHBhcnRpZW5uZW50IGF1eCBjdGEgKi9cbi5maWx0cmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiA2cHggMjZweCA2cHggMTJweDsgLyogcGxhY2UgcsOpc2VydsOpZSDDoCBkcm9pdGUgcG91ciBsYSBjb2NoZSA6IHJpZW4gbmUgYm91Z2Ugw6AgbGEgc8OpbGVjdGlvbiAqL1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTsgLyogbmV1dHJhbGlzZSBsJ2hhYmlsbGFnZSBuYXRpZiBkZXMgcHVjZXMgPGJ1dHRvbj4gKi9cbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgY29sb3IgMC4xNXM7XG59XG5cbi8qIEFjdGlmID0gbGUgZm9uZCBkdSBzdXJ2b2wgcXVpIHJlc3RlICgtLWNCbGFuYzAzIDogZm9uZCBleGlzdGFudCBkZXMgYm91dG9ucyBkaXNjcmV0cykgKi9cbi5maWx0cmU6aG92ZXIsXG4uZmlsdHJlLmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5maWx0cmUuYWN0aWY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4pyTJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDhweDtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNy0xOCDigJQgcHJlbWllciBkZXNpZ24gZGUgbGEgcHVjZSAoY29udG91ciArIGZvbmQgYmxldSBjdGEpLCBhYmFuZG9ubsOpIDpcbiAgIGlsIHBhcmxhaXQgbGEgbGFuZ3VlIGRlcyBjdGEgKGTDqWNpc2lvbiBQTywgcGFzIGRlIGdpdCA6IG9uIGdhcmRlIGxhIHRyYWNlKVxuLmZpbHRyZSB7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG4uZmlsdHJlOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Myk7IGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7IH1cbi5maWx0cmUuYWN0aWYgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7IGJvcmRlci1jb2xvcjogdmFyKC0tY0FjY2VudDMpOyBjb2xvcjogdmFyKC0tY0FjY2VudHQpOyB9XG4uZmlsdHJlLmFjdGlmOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDQpOyB9XG4qL1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENSw4lFUiDDgCBQQVJUSVIgRCdVTiBTQ8OJTkFSSU8g4oCUIENhdGFsb2d1ZSArIGZpbHRyZXNcblxuICAg4pqg77iPIENPUElFIEFTU1VNw4lFIOKAlCBqdW1lbGxlIGRlIHN0dWRpb1ZpdHJpbmUvYXNzZXRzL3ZpdHJpbmUvY3NzL3NjZW5hcmlvc0NhdGFsb2d1ZS5jc3MuXG4gICBJZGVudGlxdWUgYXUgZMOpcGFydC4gVG91dGUgbW9kaWZpY2F0aW9uIGljaSDihpIgZGVtYW5kZXIgYXUgUE8gcydpbCBmYXV0IGxhIHLDqXBlcmN1dGVyXG4gICBzdXIgbGUganVtZWF1IHZpdHJpbmUuIExlcyBkZXV4IGNvcGllcyBwZXV2ZW50IGRpdmVyZ2VyIHNlbG9uIGxlcyBiZXNvaW5zIGRlIGNoYXF1ZSBjw7R0w6lcbiAgIChzdHVkaW8gPSBvdXRpbCBjb25uZWN0w6kgOyB2aXRyaW5lID0gZnVubmVsIHB1YmxpYywgY2FjaGFibGUsIFNFTykuXG5cbiAgIE5hbWVzcGFjZSDCqyBjcmVlclNjZW5hcmlvIMK7IGV4Y2x1c2lmIMOgIGNldHRlIHBhZ2UuIE5FIFBBUyByw6l1dGlsaXNlciDCqyBicmlxdWUgwrssXG4gICBxdWkgYXBwYXJ0aWVudCBhdXggY2FydGVzIGR1IGJ1aWxkZXIgZGUgc2PDqW5hcmlvIChhc3NldHMvbm95YXUvY3NzL3N0dWRpby81Nl9zY2VuYXJpby8pLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNyZWVyU2NlbmFyaW9JbnRybyB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogTGUgZGVzaWduIGR1IHBhbm5lYXUgZGUgZmlsdHJlcyB2aWVudCBkdSBjb21wb3NhbnQgY29tbXVuICg1NV9maWx0cmVzLmNzcykuICovXG4jY3JlZXJTY2VuYXJpbyB7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbn1cblxuLyogTGEgbGlzdGUgZGVzIHNjw6luYXJpb3MgZXN0IGxvbmd1ZSA6IGxlIHBhbm5lYXUgc3VpdCBsZSBkw6lmaWxlbWVudCAocHJvcHJlIMOgIGNldHRlIHBhZ2UpLiAqL1xuI2RpdkZpbHRyZVNjZW5hcmlvIHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHRvcDogMjBweDtcbn1cblxuLyogTGlzdGUgZGVzIHNjw6luYXJpb3MgKi9cbiNjcmVlclNjZW5hcmlvTGlzdGUge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGlzdGUpO1xufVxuXG4vKiBMYSBjYXJ0ZSBFU1QgdW4gYmxvYyAoY29tcG9zYW50IGNvbW11biwgNTNfYmxvY3MuY3NzIOKAlCBkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkgOlxuICAgbGEgY2xhc3NlIG5lIHNlcnQgcGx1cyBxdSdhdSBmaWx0cmFnZSBUUyBldCBhdXggcsOpZ2xhZ2VzIHByb3ByZXMgw6AgbGEgcGFnZS4gKi9cbi5jcmVlclNjZW5hcmlvQ2FydGUge1xuICAgIG1heC13aWR0aDogbm9uZTsgLyogbGEgbGlzdGUgKDgwMHB4KSBjb21tYW5kZSwgcGFzIGxlIGNsYW1wIDYwMHB4IGR1IGJsb2MgKi9cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA3LTE4IOKAlCB0YWdzIHJldGlyw6lzIGRlcyBjYXJ0ZXMgKGRvdWJsb24gZGVzIGZpbHRyZXMgYXZlYyB1biBhdXRyZSBkZXNpZ24pXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFncyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xufVxuXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFnIHtcbiAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzLCBiYWNrZ3JvdW5kIDAuMnMsIGNvbG9yIDAuMnM7XG59XG5cbi5jcmVlclNjZW5hcmlvQ2FydGVUYWc6aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi5jcmVlclNjZW5hcmlvQ2FydGVUYWcuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudHQpO1xufVxuKi9cblxuLyogTGEgY29sb25uZSBkJ2FjdGlvbnMgZGUgbGEgY2FydGUgZXN0IGxhIHpvbmUgLmJsb2NBY3Rpb25zIGR1IGNvbXBvc2FudC4gKi9cblxuLyogQm91dG9ucyBkZSBsYSBjYXJ0ZSA6IC5jdGFEaXNjcmV0ICg1Nl9zY2VuYXJpby9fbW9kYWxlLmNzcyksIENvbmZpZ3VyZXIgcHVpc1xuICAgQXBlcsOndS4gUGFzIGRlIHByaW1haXJlL3NlY29uZGFpcmUgbmkgZGUgdmlvbGV0IGljaSA6IGRhbnMgdW5lIGxpc3RlLFxuICAgY2hhcXVlIGNhcnRlIHLDqXDDqHRlIGxlcyBtw6ptZXMgYm91dG9ucyDigJQgY2lucXVhbnRlIHByaW1haXJlcyBuJ29udCBhdWN1biBzZW5zXG4gICAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiBMZSB2aW9sZXQgYXBlcsOndSByZXN0ZSBhdXggYm91dG9ucyBzb2xvICguY3RhUHJldmlldykuICovXG5cbi5jcmVlclNjZW5hcmlvVmlkZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIE1hc3F1YWdlIHBhciBsZSBmaWx0cmUgKi9cbi5jcmVlclNjZW5hcmlvTWFzcXVlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVG9nZ2xlIGFuaW1hdGlvbiAoY2hvaXggZXhjbHVzaWYpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4udG9nZ2xlU2NlbmVHcm91cGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8qIExlcyBwbGFucyBpbnRlcm5lcyBkdSB0b2dnbGUgKGluZGljYXRldXIgMCwgYm91dG9ucyAxKSByZXN0ZW50IGNvbmZpbsOpcyBhdSBncm91cGUgOlxuICAgICAgIHNhbnMgY2VsYSwgbGVzIGJvdXRvbnMgbW9udGFpZW50IGRhbnMgbCfDqWNoZWxsZSBkZSBsYSBiYXJyZSBkZSBwaWxvdGFnZSBldCBwYXNzYWllbnRcbiAgICAgICBhdS1kZXNzdXMgZGUgc29uIHZvaWxlICgjYmFycmVQaWxvdGFnZTo6YmVmb3JlLCB6IDEg4oCUIF9iYXJyZUZpbi5jc3MpLiAqL1xuICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBIb3JzIGZsdXggOiBsZSB0aXRyZSBuZSByw6lzZXJ2ZSBhdWN1bmUgaGF1dGV1ciwgaWwgbmUgZG9pdCBwYXMgZ8OqbmVyIGxhIGxlY3R1cmUgZGUgbGEgYmFycmUgKi9cbi50b2dnbGVTY2VuZVRpdHJlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAycHg7XG4gICAgbGVmdDogM3B4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG4gICAgZm9udDogdmFyKC0tZk1pbmkxMSk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnRvZ2dsZVNjZW5lSW5kaWNhdGV1ciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICAgICAgICAgIHdpZHRoIDAuMzVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1cyAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICAgIHotaW5kZXg6IDA7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIHZhcigtLWNOb2lyMSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi50b2dnbGVTY2VuZUJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0N0YTE0KTsgLyogbcOqbWUgaGF1dGV1ciBxdWUgbGVzIGN0YSBkZSBsYSBiYXJyZSBkJ2FjdGlvbnMgKi9cbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLnRvZ2dsZVNjZW5lQnRuOmhvdmVyOm5vdCguc2VsZWN0aW9ubmUpOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLnRvZ2dsZVNjZW5lQnRuLnNlbGVjdGlvbm5lIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi50b2dnbGVTY2VuZUJ0bjpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLyogR3JvdXBlIHF1aSBuJ29mZnJlIHBsdXMgZGUgY2hvaXggKGF1IHBsdXMgdW4gYm91dG9uIGFjdGlmLCBvdSBmaWfDqSBwYXIgdmVycm91aWxsZXJDaG9peCkgKi9cbi50b2dnbGVTY2VuZUdyb3VwZS5zYW5zQ2hvaXggLnRvZ2dsZVNjZW5lQnRuLFxuLnRvZ2dsZVNjZW5lR3JvdXBlLnNhbnNDaG9peCAudG9nZ2xlU2NlbmVJbmRpY2F0ZXVyIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG59XG5cbi50b2dnbGVTY2VuZUdyb3VwZS5zYW5zQ2hvaXggLnRvZ2dsZVNjZW5lQnRuIHtcbiAgICBjdXJzb3I6IGF1dG87XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09NUE9TSVRJT04gRCdVTiBTQ8OJTkFSSU8g4oCUIENvbXBvc2l0aW9uIHBhciBmYW1pbGxlXG5cbiAgIE5hbWVzcGFjZSDCqyBtb2RpZmllclNjZW5hcmlvIMK7IGV4Y2x1c2lmIGF1eCBkZXV4IHBhZ2VzIGp1bWVsbGVzIGRlIGxhIGJyaXF1ZVxuICAgX2NvbXBvc2l0aW9uU2NlbmFyaW8gOiDCqyBNb2RpZmllciBjZSBzY8OpbmFyaW8gwrsgKFN0dWRpbykgZXQgwqsgQ29uZmlndXJlciDCu1xuICAgKFZpdHJpbmUpIOKAlCBkw6ljaXNpb24gUE8gMjAyNi0wOC0xNC4gTGUgc3RlcHBlciBldCBsZXMgZMOpdGFpbHNcbiAgIEVudHLDqWVzL1NvcnRpZXMgcsOpdXRpbGlzZW50IGxlcyBjbGFzc2VzIGR1IHLDqWNhcGl0dWxhdGlmICg1Nl9zY2VuYXJpby9fcmVjYXBpdHVsYXRpZi5jc3MpIDtcbiAgIGljaSB1bmlxdWVtZW50IGxlIGNhcnJvdXNlbCBkZSByZW1wbGHDp2FudGVzLCBsZXMgZmljaGVzIGV0IGxhIGJhcnJlIGQnYWN0aW9ucy5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIExlIHRvZ2dsZSDDoCBjaG9peCBleGNsdXNpZiBkZSBsYSBiYXJyZSBkZSBwaWxvdGFnZSBkZSBsJ8OpY3JhbiAoLnRvZ2dsZVNjZW5lR3JvdXBlKSxcbiAgIHLDqWVtcGxvecOpIHRlbCBxdWVsIGRhbnMgbGEgYmFycmUgZCdhY3Rpb25zIOKAlCB1biBzZXVsIGV4ZW1wbGFpcmUgZHUgY29tcG9zYW50LCBpbXBvcnTDqVxuICAgaWNpIHBsdXTDtHQgcXVlIGRhbnMgY2hhY3VuZSBkZXMgdHJvaXMgZW50csOpZXMgcXVpIHNlcnZlbnQgY2V0dGUgcGFnZS4gKi9cbkBpbXBvcnQgJy4uLy4uL3NhbGxlL2VjcmFuL2Nzcy9fdG9nZ2xlU2NlbmUuY3NzJztcblxuI21vZGlmaWVyU2NlbmFyaW8ge1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG59XG5cbi8qIExlcyBibG9jcyBkZSBsYSBwYWdlIHNvbnQgZGVzIC5ibG9jIChjb21wb3NhbnQgY29tbXVuIDUzX2Jsb2NzLmNzcywgZMOpY2lzaW9uXG4gICBQTyAyMDI2LTA3LTE4KSA7IGljaSB1bmlxdWVtZW50IGxlcyByw6lnbGFnZXMgcHJvcHJlcyDDoCBsYSBwYWdlLiAqL1xuI21vZGlmaWVyU2NlbmFyaW8gLmJsb2Mge1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wOC0xMSDigJQgYW5jcmFpdCBsJ2ljw7RuZSBhYnNvbHVlIC5yZWNhcFRpdHJlSWNvbmUgZGVzIGJsb2NzIHNhbnNcbiAgICAgICByZW1wbGHDp2FudGUsIHJlbXBsYWPDqWUgcGFyIGxhIHR1aWxlIGZhw6dvbiBjYXJyb3VzZWwgKGTDqWNpc2lvbiBQTykuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAqL1xuICAgIG1heC13aWR0aDogbm9uZTsgLyogbGVzIHR1aWxlcyBkdSBjYXJyb3VzZWwgZMOpcGFzc2VudCBsZSBjbGFtcCA2MDBweCBkdSBibG9jICovXG59XG5cbi8qIENsYXNzZSBldCBub24gaWQgOiB1biBjYXJyb3VzZWwgcGFyIGJsb2MsIHLDqXDDqXTDqSBkYW5zIGxhIHBhZ2UuICovXG4uZGl2QWN0aW9uQ2hhbmdlclNjZW5lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7IC8qIGxlIHBhZGRpbmcgdmllbnQgZHUgYmxvY0NvcnBzICovXG59XG5cbi5hY3Rpb25DaGFuZ2VyU2NlbmUge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIHdpZHRoOiAzNnB4O1xuICAgIGhlaWdodDogNzRweDsgLyogbcOqbWUgaGF1dGV1ciBxdWUgbGVzIHR1aWxlcyAqL1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjb2xvcjogdmFyKC0tY0N0YVRleHRlKTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMsIGNvbG9yIDAuMnM7XG59XG5cbi5hY3Rpb25DaGFuZ2VyU2NlbmU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi5hY3Rpb25DaGFuZ2VyU2NlbmU6ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuMzU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKiBQb3PDqWUgcGFyIG1vZGlmaWVyU2NlbmFyaW8udHMgcXVhbmQgdG91dGVzIGxlcyB0dWlsZXMgdGllbm5lbnQgc2FucyBzY3JvbGwgOiBsZXNcbiAgIGZsw6hjaGVzIG5lIHNlcnZlbnQgYWxvcnMgw6AgcmllbiwgZXQgbGV1ciBhYnNlbmNlIGFsaWduZSBsYSByYW5nw6llIHN1ciBsZSBib3JkXG4gICBnYXVjaGUsIGNvbW1lIGxhIHR1aWxlIGRlcyBibG9jcyBzYW5zIHJlbXBsYcOnYW50ZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTEpLiAqL1xuLmRpdkFjdGlvbkNoYW5nZXJTY2VuZVNhbnNGbGVjaGVzIC5hY3Rpb25DaGFuZ2VyU2NlbmUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tb2RpZmllclNjZW5hcmlvSWNvbmVzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIC8qIDgsNSBpY8O0bmVzIHZpc2libGVzIGF1IG1heGltdW0gOiBsYSBkZW1pLWljw7RuZSBjb3Vww6llIHNpZ25hbGUgcXUnaWwgeSBhIHVuZSBzdWl0ZSAqL1xuICAgIG1heC13aWR0aDogY2FsYyg3NHB4ICogOC41ICsgdmFyKC0tZ2FwUmVkdWl0KSAqIDgpO1xufVxuXG4ubW9kaWZpZXJTY2VuYXJpb0ljb25lIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB3aWR0aDogNzRweDtcbiAgICBoZWlnaHQ6IDc0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycywgYmFja2dyb3VuZCAwLjJzLCBvcGFjaXR5IDAuMnMsIGZpbHRlciAwLjJzO1xufVxuXG4vKiBTdXJ2b2wgZCd1bmUgdHVpbGUgbm9uIHJldGVudWUgOiB0b24gY2xhaXIgZGUgbGEgZmFtaWxsZSAofjUwICUgZHUgZm9uZCksIGFwZXLDp3UgZGVcbiAgIGwnYWN0aXZhdGlvbi4gRMOpZmF1dCA9IGFuaW1hdGlvbiwgLnJlY2FwQmxvY0FmZmljaGFnZSBzdXIgbGUgYmxvYyBiYXNjdWxlIGVuIGFmZmljaGFnZS4gKi9cbi5tb2RpZmllclNjZW5hcmlvSWNvbmU6bm90KC5hY3RpZik6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQwKTtcbn1cblxuLnJlY2FwQmxvY0FmZmljaGFnZSAubW9kaWZpZXJTY2VuYXJpb0ljb25lOm5vdCguYWN0aWYpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MCk7XG59XG5cbi8qIFR1aWxlIHJldGVudWUgOiBmb25kIHBsZWluIGRlIGxhIGZhbWlsbGUgKyBib3JkdXJlIENUQSBuZXR0ZSBldCBoYWxvLiAqL1xuLm1vZGlmaWVyU2NlbmFyaW9JY29uZS5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tY0Zvcm1Gb2N1c0hhbG8pO1xuICAgIGJvcmRlci13aWR0aDogMnB4O1xufVxuXG4ucmVjYXBCbG9jQWZmaWNoYWdlIC5tb2RpZmllclNjZW5hcmlvSWNvbmUuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLyogQ2FydGUgwqsgY2hhbmdlbWVudCBkZSBmb25kIMK7IChicmlxdWUgX2NvbXBvc2l0aW9uU2NlbmFyaW8pIDogY2FydGUgYmxhbmNoZSBjb21tZSBsZXNcbiAgIGF1dHJlcyDigJQgbGEgY291bGV1ciBkZSBmYW1pbGxlIGVzdCBzdXIgbGEgdHVpbGUsIGxlIGZvbmQgbGF2YW5kZSBwbGVpbiByZXN0ZSBsJ2FmZmFpcmVcbiAgIGRlcyBiYW5kZWF1eCBkdSByw6ljYXAgKDU2X3NjZW5hcmlvL19yZWNhcGl0dWxhdGlmLmNzcykuIEwnaWQgbCdlbXBvcnRlIHN1ciBsJ29yZHJlXG4gICBkJ2ltcG9ydCwgaWRlbnRpcXVlIG91IG5vbiBlbnRyZSBzdHVkaW8gZXQgdml0cmluZS4gKi9cbiNtb2RpZmllclNjZW5hcmlvIC5ibG9jLnJlY2FwQmxvY0NvbmZpZ3VyYXRpb25zIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xufVxuXG4ucmVjYXBCbG9jQ29uZmlndXJhdGlvbnMgLm1vZGlmaWVyU2NlbmFyaW9JY29uZS5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4vKiA2NHB4IGRlIGRlc3NpbiwgbGEgZ3JhbmRlIGRlcyBkZXV4IHRhaWxsZXMgZHUgcHJvamV0ICg1NF9pY29uZXMuY3NzKSA7IGxhIHR1aWxlIGRlIDc0XG4gICBtZXQgbCdhaXIgYXV0b3VyLiAqL1xuLm1vZGlmaWVyU2NlbmFyaW9JY29uZSBpbWcsXG4ubW9kaWZpZXJTY2VuYXJpb0ljb25lIHN2ZyB7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiA2NHB4O1xufVxuXG4vKiBUdWlsZSBkZSBsYSBzY8OobmUgdW5pcXVlIChibG9jIHNhbnMgcmVtcGxhw6dhbnRlKSA6IG3Dqm1lIHNpbGhvdWV0dGUgwqsgYWN0aWYgwrsgcXVlIGxlXG4gICBjYXJyb3VzZWwsIG1haXMgcmllbiDDoCBjbGlxdWVyIOKAlCB1biBzcGFuLCBjdXJzZXVyIG5vcm1hbC4gKi9cbi5tb2RpZmllclNjZW5hcmlvSWNvbmVTZXVsZSB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKiBDYXJ0ZSBTVUlWRVVTRSAoYnJpcXVlIF9jb21wb3NpdGlvblNjZW5hcmlvLCBkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xMykgOiBlbGxlXG4gICBwcm9wb3NlIGxhIG3Dqm1lIGxpc3RlIGRlIHNjw6huZXMgcXUndW5lIGNhcnRlIHBsdXMgaGF1dCwgbGEgY2hlZmZlLCBldCBjJ2VzdCBsw6AtaGF1dCBxdSdvblxuICAgY2hvaXNpdC4gUGx1cyBkZSBtZW51IGljaSA6IGZsw6hjaGVzIGV0IHR1aWxlcyBub24gcmV0ZW51ZXMgZGlzcGFyYWlzc2VudCwgc2V1bGUgbGEgdHVpbGVcbiAgIGFjdGl2ZSByZXN0ZSDigJQgbGEgbcOqbWUgc2lsaG91ZXR0ZSBxdWUgbGEgdHVpbGUgZCd1bmUgY2FydGUgc2FucyByZW1wbGHDp2FudGUuIExlcyB0dWlsZXNcbiAgIHNvbnQgZMOpc2FjdGl2w6llcyBkYW5zIGxlIFR3aWcgOyBjJ2VzdCBsZSBUUyBxdWkgZMOpcGxhY2UgYGFjdGlmYCBxdWFuZCBsYSBjaGVmZmUgY2hhbmdlLiAqL1xuLm1vZGlmaWVyU2NlbmFyaW9CbG9jU3VpdmV1ciAuYWN0aW9uQ2hhbmdlclNjZW5lLFxuLm1vZGlmaWVyU2NlbmFyaW9CbG9jU3VpdmV1ciAubW9kaWZpZXJTY2VuYXJpb0ljb25lOm5vdCguYWN0aWYpIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4ubW9kaWZpZXJTY2VuYXJpb0Jsb2NTdWl2ZXVyIC5tb2RpZmllclNjZW5hcmlvSWNvbmUge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLyogQ3VlIHJldGlyw6llICh0dWlsZSBjcm9peCBzw6lsZWN0aW9ubsOpZSwgY2xhc3NlIHBvc8OpZSBwYXIgbW9kaWZpZXJTY2VuYXJpby50cykgOiBsZSBibG9jXG4gICDCqyBzJ8OpdGVpbnQgwrsgZXQgc2UgUkVQTElFIHN1ciBzYSByYW5nw6llIGRlIHR1aWxlcyDigJQgc2PDqG5lcyBldCBmbMOoY2hlcyBlbiBncmlzw6kgZXN0b21ww6ksXG4gICBTRVVMRSBsYSBjcm9peCByZXN0ZSBwbGVpbmUsIGNvbG9ubmUgcsOpY2FwIGZlcm3DqWUuIExhIGNyb2l4IG4nYSBwYXMgZGUgZmljaGUgKGTDqWNpc2lvblxuICAgUE8gMjAyNi0wOC0xNCA6IHBhcyBkZSB0ZXh0ZSwgbGUgYmxvYyByZXBsacOpIHBhcmxlIGRlIGx1aS1tw6ptZSDigJQgZXQgcXVhdHJlIGN1ZXNcbiAgIHJldGlyw6llcyBuZSBtYW5nZW50IHBsdXMgbCfDqWNyYW4pLiBUb3V0IHJlc3RlIGNsaXF1YWJsZSwgdW4gY2xpYyByYW3DqG5lIGxhIGN1ZS4gTGFcbiAgIGhhdXRldXIgZHUgcmVwbGkgZXN0IGFuaW3DqWUgcGFyIGxlIFRTIChtZXR0cmVBSm91ckV0YXRSZXRpcmUpIDogbGUgQ1NTIG5lIHNhaXQgcGFzXG4gICBhbmltZXIgdmVycyBhdXRvLiAqL1xuLm1vZGlmaWVyU2NlbmFyaW9CbG9jUmV0aXJlIC5tb2RpZmllclNjZW5hcmlvSWNvbmU6bm90KC5tb2RpZmllclNjZW5hcmlvSWNvbmVGYWN1bHRhdGl2ZSksXG4ubW9kaWZpZXJTY2VuYXJpb0Jsb2NSZXRpcmUgLmFjdGlvbkNoYW5nZXJTY2VuZSB7XG4gICAgb3BhY2l0eTogMC4zNTtcbiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9CbG9jUmV0aXJlIC5yZWNhcENvbXBvc2l0aW9uIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBMJ2V4dGluY3Rpb24gZGVzIHR1aWxlcyBldCBmbMOoY2hlcyBzZSBmYWl0IGVuIGRvdWNldXIg4oCUIGxlcyB0dWlsZXMgcG9ydGVudCBkw6lqw6BcbiAgIG9wYWNpdHkvZmlsdGVyIGRhbnMgbGV1ciBwcm9wcmUgdHJhbnNpdGlvbi4gKi9cbi5hY3Rpb25DaGFuZ2VyU2NlbmUge1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgZmlsdGVyIDAuMnM7XG59XG5cbi5tb2RpZmllclNjZW5hcmlvRmljaGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tb2RpZmllclNjZW5hcmlvRmljaGUuYWN0aWYge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBCYXJyZSBkJ2FjdGlvbiBkZSBsYSBmaWNoZSA6IHPDqXBhcmUgbGUgYm91dG9uIGR1IGRlc2NyaXB0aWYgKHVuIGJvdXRvbiBudVxuICAgY29sbMOpIGF1IHRleHRlLCBkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkuICovXG4uZGl2QWN0aW9uRmljaGUge1xuICAgIG1hcmdpbi10b3A6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi8qIERhbnMgbGEgRklDSEUgZHUgY2Fycm91c2VsLCBsYSBiYXJyZSBlc3QgdW5lIGxpZ25lIDogwqsgSm91ZXIgbGEgc2PDqG5lIMK7IMOgIGdhdWNoZSwgbGUgY8WTdXJcbiAgIMKrIEonYWltZSDCuyDDoCBkcm9pdGUgKGJyaXF1ZSBub3lhdSBfamFpbWUsIGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTEyKS4gU2V1bGVtZW50XG4gICBsw6Ag4oCUIGxhIGdhbGVyaWUgZCdpbGx1c3RyYXRpb25zICgucmVjYXBDb21wb3NpdGlvbklsbHVzdHJhdGlvbikgcmFuZ2UgbGEgc2llbm5lIGF1dHJlbWVudC4gKi9cbi5tb2RpZmllclNjZW5hcmlvRmljaGUgLmRpdkFjdGlvbkZpY2hlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA4LTExIOKAlCByw6lzZXJ2YWl0IGxhIGNvbG9ubmUgZGUgZHJvaXRlIMOgIGwnaWPDtG5lIGFic29sdWUgLnJlY2FwVGl0cmVJY29uZVxuICAgZGVzIGJsb2NzIHNhbnMgcmVtcGxhw6dhbnRlLCByZW1wbGFjw6llIHBhciBsYSB0dWlsZSBmYcOnb24gY2Fycm91c2VsIChkw6ljaXNpb24gUE8pLlxuI21vZGlmaWVyU2NlbmFyaW8gLmJsb2M6bm90KC5tb2RpZmllclNjZW5hcmlvQmxvYykgLmJsb2NUZXh0ZSB7XG4gICAgcGFkZGluZy1yaWdodDogNzhweDtcbn1cbiovXG5cbi8qIOKUgOKUgCBDb2xvbm5lIHLDqWNhcCBkZSBjb21wb3NpdGlvbiAoRW50csOpZXMvU29ydGllcywgZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTEpIOKUgOKUgFxuICAgTGFyZ2V1ciBGSVhFIGlkZW50aXF1ZSBzdXIgdG91cyBsZXMgYmxvY3MgOiBsJ2FsaWduZW1lbnQgdmVydGljYWwgZGVzIGNvbG9ubmVzIHByaW1lLlxuICAgWm9uZSBiaWVuIHPDqXBhcsOpZSA6IHVuIHRyYWl0IGZpbiArIGRlIGwnYWlyLCBwYXMgZCdlbmNhZHLDqSDigJQgbGEgaGnDqXJhcmNoaWUgdmllbnQgZGVzXG4gICB0YWdzIGR1IHLDqWNhcCAoNTZfc2NlbmFyaW8pLiBDb250ZW51IHJlbmR1IHBhciBsZSBjbGllbnQgKHJlY2FwQ29tcG9zaXRpb24udHMpLiAqL1xuI21vZGlmaWVyU2NlbmFyaW8gLmJsb2NDb3JwcyB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBnYXA6IDE4cHg7IC8qID0gbGVzIG1hcmdlcyBsYXTDqXJhbGVzIGR1IGJsb2NDb3JwcyA6IG3Dqm1lIGFpciBwYXJ0b3V0IGF1dG91ciBkZSBsJ2lsbHVzdHJhdGlvbiAqL1xufVxuXG4vKiBSZXByZW5kIGxhIHBpbGUgdmVydGljYWxlIHF1ZSAuYmxvY0NvcnBzIGFzc3VyYWl0IGF2YW50IHNvbiBwYXNzYWdlIGVuIHJhbmfDqWUuICovXG4ubW9kaWZpZXJTY2VuYXJpb1ByaW5jaXBhbCB7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7IC8qIGF1dG9yaXNlIGxhIHJhbmfDqWUgZGUgdHVpbGVzIMOgIHLDqXRyw6ljaXIgKG92ZXJmbG93IOKGkiBmbMOoY2hlcykgKi9cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xufVxuXG4vKiBDb250ZW51IDogZGVzIC5yZWNhcENvbXBvc2l0aW9uU2VjdGlvbiAodW4gaDQgKyBzYSBsaXN0ZSkgZXNwYWPDqWVzIHBhciBsZSBnYXAg4oCUIGxlc1xuICAgc3R5bGVzIGg0L3VsL2xpIHZpZW5uZW50IGR1IHLDqWNhcCAoNTZfc2NlbmFyaW8vX3JlY2FwaXR1bGF0aWYuY3NzLCBzw6lsZWN0ZXVycyDDqWxhcmdpcykuICovXG4vKiAyOTJweCA9IDI3MyBkJ2lsbHVzdHJhdGlvbiArIGxlcyAxOCBkdSBwYWRkaW5nICsgbGUgdHJhaXQgOiBjJ2VzdCBsJ2lsbHVzdHJhdGlvbiBxdWkgY29tbWFuZGVcbiAgIGxhIGxhcmdldXIgZGUgbGEgY29sb25uZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTQpLCBldCBsZXMgZGV1eCBhZmZpY2hhZ2VzIGxhIHBhcnRhZ2VudCBwb3VyIHF1ZVxuICAgcmllbiBuZSBib3VnZSBxdWFuZCBvbiBiYXNjdWxlIGRlIGwndW4gw6AgbCdhdXRyZS4gKi9cbi5yZWNhcENvbXBvc2l0aW9uLFxuLnJlY2FwQ29tcG9zaXRpb25JbGx1c3RyYXRpb24ge1xuICAgIGZsZXg6IDAgMCAyOTJweDtcbiAgICBib3JkZXItbGVmdDogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcmV0cmFpdExpc3RlQ291cnQpOyAvKiA9IGxlIHBhZGRpbmcgZHJvaXQgZHUgYmxvY0NvcnBzIDogdHJhaXQgY2VudHLDqSBlbnRyZSBsZXMgZGV1eCB6b25lcyAqL1xufVxuXG4vKiBMYSBoYXV0ZXVyIGRlcyBlbnRyw6llcy9zb3J0aWVzIGVzdCBSw4lTRVJWw4lFIDogYmFzY3VsZXIgZCd1biBhZmZpY2hhZ2Ugw6AgbCdhdXRyZSBuZSBkb2l0XG4gICBkw6lwbGFjZXIgYXVjdW5lIGNhcnRlIChkw6ljaXNpb24gUE8gMjAyNi0wOC0xNCkuIFNhbnMgw6dhLCBsYSBjb2xvbm5lIGRpY3RlIGxhIGhhdXRldXIgZHVcbiAgIGJsb2MgZXQgdG91dCBjZSBxdWkgc3VpdCByZW1vbnRlIGF1IGNoYW5nZW1lbnQgZCdhZmZpY2hhZ2Ug4oCUIG9uIGNsaXF1ZSBpY2ksIMOnYSBib3VnZVxuICAgYWlsbGV1cnMuIEMnZXN0IGxhIGhhdXRldXIgZCd1bmUgaWxsdXN0cmF0aW9uLCBwb3VyIHF1ZSBsZXMgZGV1eCBzZSBjb3JyZXNwb25kZW50LlxuICAgTGVzIGNhcnRlcyBkZSBjaGFuZ2VtZW50IGRlIGZvbmQgZW4gc29udCBleGNsdWVzIDogcGx1cyBjb3VydGVzIHBhciBuYXR1cmUuXG4gICBMJ2VtcGxhY2VtZW50IGQnaWxsdXN0cmF0aW9uLCBsdWksIG5lIHLDqXNlcnZlIFJJRU4gOiB2aWRlLCBpbCBuZSBwcmVuZCBhdWN1bmUgaGF1dGV1clxuICAgKGTDqWNpc2lvbiBQTyAyMDI2LTA4LTE0KSDigJQgdW5lIGN1ZSByZXRpcsOpZSBvdSB1bmUgc2PDqG5lIHNhbnMgaWxsdXN0cmF0aW9uIGdhcmRlcmFpdFxuICAgc2lub24gdW5lIGNhcnRlIGdvbmZsw6llIHBhciB1biByZWN0YW5nbGUgcXVpIG5lIG1vbnRyZSByaWVuLiAqL1xuLnJlY2FwQmxvY1NjZW5lIC5yZWNhcENvbXBvc2l0aW9uIHtcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDI3M3B4ICogOSAvIDE2KTtcbn1cblxuLnJlY2FwQ29tcG9zaXRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG59XG5cbi8qIExlIHJhdGlvIGVzdCBpbXBvc8OpLCBqYW1haXMgc3ViaSA6IHVuZSBjYXB0dXJlIHJlY2FkcsOpZSBhdSBwaXhlbCBwcsOocyBuJ2VzdCBwYXMgdG91am91cnNcbiAgIGV4YWN0ZW1lbnQgMTY6OSwgZXQgdW5lIGhhdXRldXIgcXVpIHZhcmllIGQndW5lIGNhcnRlIMOgIGwnYXV0cmUgY2Fzc2VyYWl0IGwnYWxpZ25lbWVudCBkZVxuICAgbGEgY29sb25uZS4gTGUgZmljaGllciBmYWl0IDEwMDBweCBkZSBsYXJnZSBwb3VyIDI3MyBhZmZpY2jDqXMgOiBsYSB0YWlsbGUgZXN0IGNlbGxlIGRlIGxhXG4gICB2aXRyaW5lLCBxdWkgbGVzIG1vbnRyZSBiaWVuIHBsdXMgZ3JhbmRlcyA7IGljaSBsZSBuYXZpZ2F0ZXVyIHLDqWR1aXQsIHByb3ByZW1lbnQuICovXG4ucmVjYXBDb21wb3NpdGlvbklsbHVzdHJhdGlvbiBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGFzcGVjdC1yYXRpbzogMTYgLyA5O1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLyogQmFycmUgZGUgbGEgZ2FsZXJpZSwgU09VUyBsJ2ltYWdlIDogZmzDqGNoZSDCtyBwb2ludHMgwrcgZmzDqGNoZSwgw6l0YWzDqWUgc3VyIHRvdXRlIGxhIGxhcmdldXJcbiAgIChkw6ljaXNpb24gUE8gMjAyNi0wOC0xNCkuIFJpZW4gcGFyLWRlc3N1cyBsJ2ltYWdlLCBlbGxlIGVzdCBkw6lqw6AgcGV0aXRlLiBMZXMgZmzDqGNoZXMgc29udFxuICAgZGVzIC5jdGFEaXNjcmV0IGRhbnMgbGEgbcOqbWUgLmRpdkFjdGlvbkZpY2hlIHF1ZSBsZSBib3V0b24gwqsgSm91ZXIgbGEgc2PDqG5lIMK7IGRlIGxhIGZpY2hlXG4gICB2b2lzaW5lIOKAlCBtw6ptZSBuaXZlYXUsIG3Dqm1lIMOpY2FydC4gVG91dGUgbGEgYmFycmUgbidhcHBhcmHDrnQgcXUnw6AgcGFydGlyIGRlIGRldXhcbiAgIGlsbHVzdHJhdGlvbnMgOiBhdmVjIHVuZSBzZXVsZSwgaWwgbid5IGEgcmllbiDDoCBwYXJjb3VyaXIgbmkgw6AgY29tcHRlci4gKi9cbi5yZWNhcENvbXBvc2l0aW9uSWxsdXN0cmF0aW9uIC5kaXZBY3Rpb25GaWNoZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi5yZWNhcElsbHVzdHJhdGlvblBvaW50cyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG59XG5cbi8qIFVuIHBvaW50IHBhciBpbGx1c3RyYXRpb24gOiBkaXQgY29tYmllbiBpbCB5IGVuIGEgZXQgb8O5IGwnb24gZW4gZXN0LiBDbGlxdWFibGUg4oCUIGMnZXN0XG4gICBsJ2F0dGVudGUgZGV2YW50IHVuZSBwYXN0aWxsZSBkZSBnYWxlcmllLCBldCDDp2Egw6l2aXRlIGQnZW5jaGHDrm5lciBsZXMgY2xpY3MgZGUgZmzDqGNoZS5cblxuICAgTGUgQk9VVE9OIGVzdCBsYSB6b25lIGRlIGNsaWMgKDI0w5cyNCwgaW52aXNpYmxlKSwgbGUgcm9uZCBuJ2VzdCBxdWUgc29uIGRlc3NpbiA6IHZpc2VyXG4gICB1biBkaXNxdWUgZGUgMTBweCDDoCBsYSBzb3VyaXMgZXN0IHDDqW5pYmxlLCBldCBkZXV4IHpvbmVzIHF1aSBzZSB0b3VjaGVudCBmb250IGNsaXF1ZXIgw6BcbiAgIGPDtHTDqS4gRCdvw7kgbGEgc3VyZmFjZSBnw6luw6lyZXVzZSBFVCBsZSBnYXAgZW50cmUgZWxsZXMgKGTDqWNpc2lvbiBQTyAyMDI2LTA4LTE0KS4gKi9cbi5yZWNhcElsbHVzdHJhdGlvblBvaW50IHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ucmVjYXBJbGx1c3RyYXRpb25Qb2ludDo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY05vaXI0KTsgLyogMnB4IGV0IG5vbiBsYSBib3JkdXJlIGRlIGJvdXRvbiA6IHVuIHJvbmQgZGUgMTBweCBkb2l0IHNlIHZvaXIgKi9cbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMsIGJvcmRlci1jb2xvciAwLjJzO1xufVxuXG4vKiBMZSBwb2ludCBwbGVpbiBlc3QgTk9JUiwgcGFzIMOgIGxhIGNvdWxldXIgZCdhY2NlbnQgKGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTgpIDogdW4gcmVww6hyZVxuICAgZGUgcG9zaXRpb24sIHBhcyB1biBib3V0b24gZCdhY3Rpb24g4oCUIHZhdXQgcG91ciBsYSBnYWxlcmllIGQnaWxsdXN0cmF0aW9ucyBldCBwb3VyIGxhIGJhcnJlXG4gICBkZSBjaG9peCBkdSBkw6lyb3Vsw6kgZCd1biBzY8OpbmFyaW8gKF9kZXJvdWxlLmNzcyksIHF1aSByZXByZW5kIGNlcyBwb2ludHMuICovXG4ucmVjYXBJbGx1c3RyYXRpb25Qb2ludEFjdGlmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyMSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4vKiBMJ2lsbHVzdHJhdGlvbiBkJ2Fib3JkLCBsZXMgZW50csOpZXMgZXQgc29ydGllcyBzdXIgZGVtYW5kZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTQpIDogdW5lXG4gICBpbGx1c3RyYXRpb24gcGVybWV0IGRlIHNlIHByb2pldGVyLCB1bmUgbGlzdGUgZGUgc29ydGllcyBlc3QgdW5lIGxlY3R1cmUgZCdleHBlcnQuIExlIGNob2l4XG4gICBuJ2VzdCBwYXMgbcOpbW9yaXPDqSDigJQgb24gcmV2aWVudCDDoCBsJ2lsbHVzdHJhdGlvbiDDoCBjaGFxdWUgYXJyaXbDqWUuIExhIGNsYXNzZSB2aWVudCBkdSB0b2dnbGVcbiAgIGRlIGxhIGJhcnJlIGQnYWN0aW9ucyAodG9nZ2xlQWZmaWNoYWdlQ2FydGUudHMpIDsgbGVzIGNhcnRlcyBkZSBjaGFuZ2VtZW50IGRlIGZvbmQgbmVcbiAgIHNvbnQgcGFzIGNvbmNlcm7DqWVzLCBsZXVyIGNvbG9ubmUgdmlkZSByZXN0ZSBldCB0aWVudCBsYSBnw6lvbcOpdHJpZS4gKi9cbi5yZWNhcEJsb2NTY2VuZSAucmVjYXBDb21wb3NpdGlvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9BZmZpY2hlRW50cmVlcyAucmVjYXBDb21wb3NpdGlvbklsbHVzdHJhdGlvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9BZmZpY2hlRW50cmVlcyAucmVjYXBCbG9jU2NlbmUgLnJlY2FwQ29tcG9zaXRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG59XG5cbi8qIExlIHRvZ2dsZSBvY2N1cGUgbGEgZHJvaXRlIGRlIGxhIGJhcnJlLCBsZXMgZGV1eCBib3V0b25zIHJlc3RlbnQgw6AgZ2F1Y2hlLiAqL1xuLmRpdkFjdGlvbk1vZGlmaWVyU2NlbmFyaW8gLnRvZ2dsZVNjZW5lR3JvdXBlIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbn1cblxuLyogw4ljcmFuIMOpdHJvaXQgOiBvbiBuZSByw6lkdWl0IHBhcywgb24gcmV0aXJlIChkw6ljaXNpb24gUE8gMjAyNi0wOC0xNCkuIExhIGNvbG9ubmUgZGVcbiAgIGRyb2l0ZSBwYXNzw6llIHNvdXMgbGUgY29udGVudSBzJ8OpdGlyYWl0IHN1ciB0b3V0ZSBsYSBsYXJnZXVyIOKAlCB1bmUgaWxsdXN0cmF0aW9uIDE2OjkgZ8OpYW50ZSxcbiAgIGV0IGRlcyBlbnRyw6llcy9zb3J0aWVzIHF1aSBuJ29udCByaWVuIGQndW4gY29udGVudSBkZSBwcmVtacOocmUgbGVjdHVyZS4gTmkgbCd1biBuaVxuICAgbCdhdXRyZSwgZG9uYywgZXQgcGFzIGRlIHRvZ2dsZSBub24gcGx1cyA6IGlsIG5lIGNvbW1hbmRlcmFpdCBwbHVzIHJpZW4uIFJlc3RlIGxhXG4gICBjYXJ0ZSA6IHNhIHR1aWxlLCBzb24gdGl0cmUsIHNvbiB0ZXh0ZS4gTcOqbWUgc2V1aWwgcXVlIGxlIG51bcOpcm8gZGUgcGxhY2UgZXQgbGUgcmVww6hyZVxuICAgZGUgZMOpZmlsZW1lbnQsIHF1aSBkaXNwYXJhaXNzZW50IGljaSBhdXNzaSDigJQgbGEgcGFnZSBzZSBzaW1wbGlmaWUgZCd1biBibG9jLlxuICAgTCdJRCBlc3QgbsOpY2Vzc2FpcmUgOiBzYW5zIGx1aSwgbGEgcsOoZ2xlIHF1aSBNT05UUkUgbGVzIGVudHLDqWVzIGVuIG1vZGUgwqsgZW50csOpZXMgwrtcbiAgICgubW9kaWZpZXJTY2VuYXJpb0FmZmljaGVFbnRyZWVzIC5yZWNhcEJsb2NTY2VuZSAucmVjYXBDb21wb3NpdGlvbikgbCdlbXBvcnRlcmFpdCwgZXRcbiAgIGxhIGNvbG9ubmUgcmV2aWVuZHJhaXQgw6AgcXVpIGEgYmFzY3Vsw6kgYXZhbnQgZGUgcsOpZHVpcmUgc2EgZmVuw6p0cmUuICovXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgICAjbW9kaWZpZXJTY2VuYXJpbyAucmVjYXBDb21wb3NpdGlvbixcbiAgICAjbW9kaWZpZXJTY2VuYXJpbyAucmVjYXBDb21wb3NpdGlvbklsbHVzdHJhdGlvbixcbiAgICAuZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpbyAudG9nZ2xlU2NlbmVHcm91cGUge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuLyog4pSA4pSAIE51bcOpcm8gZGUgcGxhY2UsIGRhbnMgbGEgbWFyZ2UgZW4gcmVnYXJkIGRlIGNoYXF1ZSBjYXJ0ZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTQpIOKUgOKUgFxuICAgRG91emUgY2FydGVzIHNlIHJlc3NlbWJsZW50IGVuIGTDqWZpbGFudCA6IGxlIG51bcOpcm8gZGl0IG/DuSBsJ29uIGVuIGVzdC4gSWwgdml0IGRhbnMgbGFcbiAgIHJhbmfDqWUsIFBBUyBkYW5zIGxhIGNhcnRlIDogLmJsb2MgY291cGUgY2UgcXVpIGTDqXBhc3NlIChvdmVyZmxvdyBoaWRkZW4pLCBldCBsYSBjYXJ0ZVxuICAgZ2FyZGUgYWluc2kgc2EgZ8Opb23DqXRyaWUgYXUgcGl4ZWwgcHLDqHMuIE3Dqm1lIGdvdXR0acOocmUsIG3Dqm1lIGdyaXMgZXQgbcOqbWUgY2hhc3NlIHF1ZSBsZVxuICAgcmVww6hyZSBkZSBkw6lmaWxlbWVudCA6IHVuIHNldWwgbGFuZ2FnZSBkZSBjaGlmZnJlcyBkYW5zIGNldHRlIG1hcmdlLiAqL1xuLm1vZGlmaWVyU2NlbmFyaW9SYW5nZWUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9OdW1lcm8ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IC0zNnB4O1xuICAgIHRvcDogMTZweDsgLyogPSBwYWRkaW5nIGhhdXQgZHUgYmxvY0NvcnBzIDogbGUgbnVtw6lybyBzJ2FsaWduZSBzdXIgbGEgcmFuZ8OpZSBkZSB0dWlsZXMgKi9cbiAgICB3aWR0aDogMzJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNSk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5MDBweCkge1xuICAgIC5tb2RpZmllclNjZW5hcmlvTnVtZXJvIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxufVxuXG4vKiDilIDilIAgUmVww6hyZSBkZSBkw6lmaWxlbWVudCAobWFyZ2UgZ2F1Y2hlIGR1IHNjw6luYXJpbywgZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTQpIOKUgOKUgFxuICAgU2Egem9uZSBsb25nZSBsZSBzdGVwcGVyIHN1ciB0b3V0ZSBzYSBoYXV0ZXVyLCBkYW5zIGxlIHBhZGRpbmcgZ2F1Y2hlIGRlIC5jb250ZW51ICg0MHB4KSA6XG4gICBsZSByZXDDqHJlIG5lIHJlY291dnJlIGRvbmMgYXVjdW5lIGNhcnRlLCBldCBzZSBjYWxlIHN1ciBsZSBzY8OpbmFyaW8gcXVlbGxlIHF1ZSBzb2l0IGxhXG4gICBsYXJnZXVyIGRlIGxhIGZlbsOqdHJlLiBMZSByZXDDqHJlIHkgZXN0IFNUSUNLWSA6IGlsIGNvbGxlIGF1IGJhcyBkZSBsYSBmZW7DqnRyZSB0YW50IHF1J2lsXG4gICByZXN0ZSBkZXMgY2FydGVzLCBwdWlzIHMnYXJyw6p0ZSDDoCBsYSBmaW4gZHUgc2PDqW5hcmlvIOKAlCBhdSBiYXMgZGUgbGEgUEFHRSBpbCBzZSByZXRyb3V2ZXJhaXRcbiAgIMOgIGPDtHTDqSBkZXMgQ1RBLCBvw7kgaWwgbidhIHJpZW4gw6AgZmFpcmUuIFNvdXMgOTAwcHggbGEgcGFnZSBuJ2EgcGx1cyBkZSBtYXJnZSDDoCBsdWkgZG9ubmVyXG4gICAobGEgY29sb25uZSByw6ljYXAgcGFzc2UgZMOpasOgIHNvdXMgbGUgY29udGVudSkgOiBtYXNxdcOpLiAqL1xuI21vZGlmaWVyU2NlbmFyaW8gLnJlY2FwU3RlcHBlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4jaW5kaWNhdGV1ckRlZmlsZW1lbnRab25lIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IC0zNnB4O1xuICAgIHdpZHRoOiAzMnB4O1xufVxuXG4vKiBQbGFjZSBuYXR1cmVsbGUgZHUgcmVww6hyZSA6IGxlIEJBUyBkZSBsYSB6b25lLCBkJ2/DuSBsZSBzdGlja3kgbGUgcmVtb250ZSBhdSBiYXMgZGUgbGFcbiAgIGZlbsOqdHJlIHRhbnQgcXVlIGxlIHNjw6luYXJpbyBjb250aW51ZS4gUG9zw6kgZW4gaGF1dCwgaWwgbidhdXJhaXQgcmllbiDDoCByZW1vbnRlciA6IGxlXG4gICBzdGlja3kgbmUgcmV0aWVudCB1biDDqWzDqW1lbnQgcXVlIHZlcnMgc2EgY29udHJhaW50ZSwgaWwgbmUgbGUgcG91c3NlIGphbWFpcyBwbHVzIGxvaW4uICovXG5AbWVkaWEgKG1pbi13aWR0aDogOTAwcHgpIHtcbiAgICAjaW5kaWNhdGV1ckRlZmlsZW1lbnRab25lIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG59XG5cbiNpbmRpY2F0ZXVyRGVmaWxlbWVudDpub3QoW2hpZGRlbl0pIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgLyogQXUtZGVzc3VzIGRlIGxhIGJhcnJlIGQnYWN0aW9ucyBjb2xsYW50ZSwgamFtYWlzIMOgIGhhdXRldXIgZGVzIGJvdXRvbnMgKGTDqWNpc2lvblxuICAgICAgIFBPIDIwMjYtMDgtMTQpLiAtLWhhdXRldXJCYXJyZUFjdGlvbiBlc3QgbWVzdXLDqWUgcGFyIGJhcnJlQWN0aW9uQ29sbGFudGUudHMgOyBsZVxuICAgICAgIHJlcGxpIMOgIDBweCB2YXV0IGxlIHRlbXBzIGRlIGxhIHByZW1pw6hyZSBtZXN1cmUuICovXG4gICAgYm90dG9tOiBjYWxjKHZhcigtLWhhdXRldXJCYXJyZUFjdGlvbiwgMHB4KSArIHZhcigtLWdhcExhcmdlKSk7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMDsgLyogbCdlc3BhY2UgdmllbnQgZHUgcGFkZGluZyBkZXMgYm91dG9ucywgcXVpIGVzdCBhdXNzaSBsZXVyIGNpYmxlIGRlIGNsaWMgKi9cbiAgICAvKiBMZSBncmlzIGRlcyBib3JkdXJlcyBkZSBjYXJ0ZXMgOiB1biByZXDDqHJlIGRlIGxlY3R1cmUgbmUgcMOoc2UgcGFzIHBsdXMgcXVlIGxlXG4gICAgICAgY29udGVudSBxdSdpbCBzZXJ0IChkw6ljaXNpb24gUE8gMjAyNi0wOC0xNCkuICovXG4gICAgY29sb3I6IHZhcigtLWNOb2lyNSk7XG4gICAgLyogRm9uZCBkZSBwYWdlIG9wYXF1ZSA6IGxlcyBudW3DqXJvcyBkZSBwbGFjZSBkw6lmaWxlbnQgREVSUknDiFJFIGxlIHJlcMOocmUsIGlscyBuZVxuICAgICAgIHZpZW5uZW50IHBhcyBzZSBzdXBlcnBvc2VyIMOgIGx1aS4gKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmFja2dyb3VuZCk7XG4gICAgcGFkZGluZzogdmFyKC0tZ2FwUmVkdWl0KSAwO1xufVxuXG4vKiBFbmZhbnQgZGlyZWN0ID0gbGEgc291cmlzIDsgbGVzIGNoZXZyb25zIHZpdmVudCBkYW5zIGxlcyBib3V0b25zLiAqL1xuI2luZGljYXRldXJEZWZpbGVtZW50ID4gc3ZnIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMjJweDtcbn1cblxuLyogQm91dG9uIG51LCBtYWlzIGNpYmxlIExBUkdFIDogbGUgY2hldnJvbiBuZSBmYWl0IHF1ZSAxMsOXOCwgb24gbmUgdmlzZSBwYXMgw6dhIMOgIGxhXG4gICBzb3VyaXMuIExlIGJvdXRvbiBwcmVuZCB0b3V0ZSBsYSBnb3V0dGnDqHJlIGV0IHMnb3V2cmUgZW4gaGF1dGV1ciDigJQgYydlc3Qgc29uIHBhZGRpbmcgcXVpXG4gICBmYWl0IGF1c3NpIGwnZXNwYWNlIGp1c3F1J8OgIGxhIHNvdXJpcyAoZCdvw7kgbGUgZ2FwIDAgZHUgY29udGVuZXVyKSA6IGxhIGNpYmxlIGdyYW5kaXQsXG4gICBsZSBkZXNzaW4gbmUgYm91Z2UgcGFzLiBMYSBjb3VsZXVyIENUQSBuJ2Fycml2ZSBxdSdhdSBzdXJ2b2wsIHF1YW5kIGxlIHJlcMOocmUgZGV2aWVudFxuICAgdW5lIGFjdGlvbi4gKi9cbi5pbmRpY2F0ZXVyRGVmaWxlbWVudEFjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IHZhcigtLWdhcERlZmF1dCkgMDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbn1cblxuLmluZGljYXRldXJEZWZpbGVtZW50QWN0aW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xufVxuXG4vKiBCb3V0IGRlIGNvdXJzZSA6IGxlIGNoZXZyb24gcydlZmZhY2UsIHNhIHBsYWNlIHJlc3RlIChkw6ljaXNpb24gUE8gMjAyNi0wOC0xNCDigJQgcGFzIGRlXG4gICBmbMOoY2hlIHF1aSBuZSBtw6huZSBudWxsZSBwYXJ0LCBtYWlzIHBhcyBkZSBzb3VyaXMgcXVpIHNhdXRlIG5vbiBwbHVzKS4gKi9cbi5pbmRpY2F0ZXVyRGVmaWxlbWVudEFjdGlvbjpkaXNhYmxlZCB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4uaW5kaWNhdGV1ckRlZmlsZW1lbnRDaGV2cm9uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTJweDtcbn1cblxuLyogQWxpZ27DqXMgw6AgZ2F1Y2hlLCBjb21tZSB0b3V0ZSBiYXJyZSBkJ2FjdGlvbiAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTggOiBwYXNcbiAgIGQnYWxpZ25lbWVudCBxdWkgdmFyaWUgZCd1bmUgYmFycmUgw6AgbCdhdXRyZSkuXG5cbiAgIENvbGzDqWUgYXUgYmFzIGRlIGxhIGZlbsOqdHJlIHRhbnQgcXVlIHNhIHZyYWllIHBsYWNlIGVzdCBwbHVzIGJhcywgcG9zw6llIGRhbnMgbGUgZmx1eFxuICAgZMOocyBxdSdvbiBsJ2F0dGVpbnQgKGTDqWNpc2lvbiBQTyAyMDI2LTA4LTE0KSA6IGxhIHBhZ2UgZXN0IHVuZSBwYWdlIGQnYXR0ZXJyaXNzYWdlLFxuICAgbGUgdmlzaXRldXIgcXVpIGFycml2ZSBkb2l0IHZvaXIgwqsgSm91ZXIgbGUgc2PDqW5hcmlvIMK7IHNhbnMgYXZvaXIgcmllbiBkw6lmaWzDqS4gRW4gYmFzXG4gICBldCBwYXMgZW4gaGF1dCwgcGFyY2UgcXVlIGNlcyBib3V0b25zIGFnaXNzZW50IHN1ciBjZSBxdWkgbGVzIHByw6ljw6hkZSDigJQgbGUgbGllbiBwb3J0ZVxuICAgbGUgP3JlbXBsYWNlcj0gY29uc3RydWl0IMOgIHBhcnRpciBkZXMgdHVpbGVzIGNob2lzaWVzLlxuXG4gICBMZSBzdGlja3kgcmVtb250ZSBsJ8OpbMOpbWVudCB2ZXJzIHNhIGNvbnRyYWludGUsIGlsIG5lIGxlIHBvdXNzZSBqYW1haXMgOiDDp2EgbWFyY2hlIGljaVxuICAgcGFyY2UgcXVlIHNhIHBsYWNlIG5hdHVyZWxsZSBlc3QgRMOJSsOAIGxlIGJhcyBkZSAjbW9kaWZpZXJTY2VuYXJpby4gTGUgcGFkZGluZyByZW1wbGFjZVxuICAgbCdhbmNpZW4gbWFyZ2luLXRvcCBwb3VyIHF1ZSBsZSBmb25kIGNvdXZyZSBhdXNzaSBsJ2FpciBhdS1kZXNzdXMgZGVzIGJvdXRvbnMuICovXG4uZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpbyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIGJvdHRvbTogMDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpIDA7XG59XG5cbi8qIFVuIENUQSBuZSBzZSBjb21wcmltZSBwYXMgOiBzYW5zIMOnYSwgdG91dCBjZSBxdSdvbiBham91dGUgZGFucyBsYSBiYXJyZSDDqWNyYXNlIGxlc1xuICAgZGV1eCBib3V0b25zIGV0IGNhc3NlIGxldXIgbGliZWxsw6kgc3VyIGRldXggbGlnbmVzLiAqL1xuLmRpdkFjdGlvbk1vZGlmaWVyU2NlbmFyaW8gPiAqIHtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLyogRm9uZCBldCB0cmFpdCB2b250IGQndW4gYm9yZCDDoCBsJ2F1dHJlIGRlIGxhIFBBR0Ug4oCUIGxhIGxhcmdldXIgZGUgI2JvZHlQYWdlLCBwYXMgY2VsbGVcbiAgIGRlIGwnw6ljcmFuIDogbGUgaGF1dCBkZSBwYWdlIGZhaXQgZXhhY3RlbWVudCDDp2EsIHNhbnMgZWZmb3J0LCBwYXJjZSBxdSdpbCBlc3QgZW5mYW50XG4gICBkaXJlY3QgZGUgI2JvZHlQYWdlIChkw6ljaXNpb24gUE8gMjAyNi0wOC0xNCkuIExhIGJhcnJlLCBlbGxlLCB2aXQgZGFucyAuY29udGVudSA6IGxlXG4gICBwc2V1ZG8tw6lsw6ltZW50IHJhdHRyYXBlIGRvbmMgc29uIHBhZGRpbmcgaG9yaXpvbnRhbCwgZXQgcmllbiBkZSBwbHVzLiBDZSBkw6lib3JkZW1lbnRcbiAgIGNvdXZyZSBhdSBwYXNzYWdlIGxhIGdvdXR0acOocmUgZGUgZ2F1Y2hlLCBzaW5vbiBsZXMgbnVtw6lyb3MgZGUgcGxhY2UgZGVzIGNhcnRlcyBxdWlcbiAgIHBhc3NlbnQgZGVzc291cyByZXN0ZXJhaWVudCDDoCBkw6ljb3V2ZXJ0IHNvdXMgbGUgdHJhaXQuIEZvbmQgb3BhcXVlIG9ibGlnYXRvaXJlIDogc2Fuc1xuICAgbHVpIGxlcyBjYXJ0ZXMgZMOpZmlsZW50IGVuIHRyYW5zcGFyZW5jZSBzb3VzIGxlcyBib3V0b25zLlxuICAgTGVzIC00MHB4Ly0yMHB4IHNvbnQgbGUgcGFkZGluZyBkZSAuY29udGVudSAoMzBfYmFzZS5jc3MpIGF1IHNpZ25lIHByw6hzIDogbGVzIGRldXhcbiAgIHZhbGV1cnMgY2hhbmdlbnQgZW5zZW1ibGUuICovXG4uZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpbzo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogLTE7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAtNDBweDtcbiAgICByaWdodDogLTQwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JhY2tncm91bmQpO1xufVxuXG4vKiDDiXBpbmdsw6llIDogZWxsZSBmbG90dGUgYXUtZGVzc3VzIGRlcyBjYXJ0ZXMsIHVuIHRyYWl0IGwnZW4gZMOpdGFjaGUuIFBvc8OpZSBlbiBiYXMgZHVcbiAgIHNjw6luYXJpbywgZWxsZSBlc3Qgw6Agc2EgcGxhY2UgZXQgbmUgdHJhbmNoZSByaWVuIOKAlCBsYSBjbGFzc2UgZXN0IHBvc8OpZSBwYXJcbiAgIGJhcnJlQWN0aW9uQ29sbGFudGUudHMsIGF1Y3VuIHPDqWxlY3RldXIgQ1NTIG5lIGRpc3Rpbmd1ZSBsZXMgZGV1eCDDqXRhdHMuICovXG4uZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpb0NvbGxlZTo6YmVmb3JlIHtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBGb25kdSBhdS1kZXNzdXMgZGUgbGEgYmFycmUgw6lwaW5nbMOpZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDgtMTQpIDogbGEgY291cHVyZSBuZXR0ZSBkdVxuICAgY29udGVudSDDqXRhaXQgYnJ1dGFsZSwgZXQgbGUgY29udGVudSBxdWkgcydlZmZhY2UgYXUgbGlldSBkZSBzJ2FycsOqdGVyIGRpdCBxdSdpbCBlblxuICAgcmVzdGUgZGVzc291cy4gRGlzcGFyYcOudCBlbiBtw6ptZSB0ZW1wcyBxdWUgbGUgdHJhaXQsIHF1YW5kIGxhIGJhcnJlIHNlIHBvc2UgOiBsw6AsIGlsXG4gICBuJ3kgYSBwbHVzIHJpZW4gw6AgZXN0b21wZXIuIERldmFudCBsZSBjb250ZW51LCBkb25jIHBhcyBkZSB6LWluZGV4IG7DqWdhdGlmIGljaSDigJRcbiAgIGwnb3JkcmUgZHUgRE9NIHN1ZmZpdCA7IHBvaW50ZXItZXZlbnRzOiBub25lLCBpbCBuZSBtYW5nZSBwYXMgbGVzIGNsaWNzIGRlcyBjYXJ0ZXMuICovXG4uZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpb0NvbGxlZTo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDEwMCU7XG4gICAgbGVmdDogLTQwcHg7XG4gICAgcmlnaHQ6IC00MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCB2YXIoLS1jQmFja2dyb3VuZCksIHRyYW5zcGFyZW50KTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLyogTWlyb2lyIGRlIGxhIG1lZGlhIHF1ZXJ5IGRlIC5jb250ZW51ICgzMF9iYXNlLmNzcykgOiBzb24gcGFkZGluZyB0b21iZSDDoCAyMHB4LCBsZVxuICAgZMOpYm9yZGVtZW50IGRlcyBkZXV4IHBzZXVkby3DqWzDqW1lbnRzIGF2ZWMgbHVpIOKAlCBzaW5vbiBsYSBiYXJyZSBzb3J0IGRlIGxhIHBhZ2UuICovXG5AbWVkaWEgKG1heC13aWR0aDogODAwcHgpIHtcbiAgICAuZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpbzo6YmVmb3JlLFxuICAgIC5kaXZBY3Rpb25Nb2RpZmllclNjZW5hcmlvQ29sbGVlOjphZnRlciB7XG4gICAgICAgIGxlZnQ6IC0yMHB4O1xuICAgICAgICByaWdodDogLTIwcHg7XG4gICAgfVxufVxuXG4vKiBDw5RUw4kgU1RVRElPLCDCqyBDcsOpZXIgdm90cmUgw6l2w6luZW1lbnQgwrsgdml0IGRhbnMgdW4gPGZvcm0+IChpbCBQT1NUZSBsYSBjb21wb3NpdGlvblxuICAgYHJlbXBsYWNlcmApLiBkaXNwbGF5OmNvbnRlbnRzIGVmZmFjZSBsYSBib8OudGUgZHUgZm9ybSA6IGxlIGdhcCBkZSBsYSBiYXJyZSBzJ2FwcGxpcXVlIGF1eFxuICAgYm91dG9ucyBldXgtbcOqbWVzIChtw6ptZSBzb2x1dGlvbiBxdWUgbGUgY2F0YWxvZ3VlKS5cbiAgIEPDtHTDqSBWSVRSSU5FLCBsZSBtw6ptZSBib3V0b24gZXN0IHVuIDxhPiBxdWkgcG9ydGUgbGEgY29tcG9zaXRpb24gZGFucyBzb24gaHJlZiAobGUgcGFyY291cnNcbiAgIHBhc3NlIHBhciBsYSBjb25uZXhpb24sIHF1aSBuZSByZXZpZW50IHF1J2VuIEdFVCkgOiBwYXMgZGUgZm9ybSwgZG9uYyByaWVuIMOgIGVmZmFjZXIg4oCUIGlsXG4gICBlc3QgZMOpasOgIGVuZmFudCBkaXJlY3QgZGUgbGEgYmFycmUuICovXG4uZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpbyBmb3JtIHtcbiAgICBkaXNwbGF5OiBjb250ZW50cztcbn1cblxuLyogwqsgQ3LDqWVyIGNldCDDqXbDqW5lbWVudCDCuyA6IHNldWxlIGFjdGlvbiBwcmltYWlyZSBkZSBsYSBwYWdlIOKAlCBzaWxob3VldHRlIC5jdGExNCBldCByw7RsZVxuICAgLmN0YVByaW1haXJlICgzMV9jdGEuY3NzKSwgZW4gYmxldSBhZG1pbmlzdHJhdGlvbiAoLmFjY2VudEFkbWluaXN0cmF0aW9uLCAxMF9mb250LmNzcykgOlxuICAgcGx1cyBhdWN1bmUgY291bGV1ciDDqWNyaXRlIGljaSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMDYsIGF2YW50IDogY2xhc3NlIGxvY2FsZVxuICAgLmN0YU1vZGlmaWVyU2NlbmFyaW9DcmVlcikuIMKrIEFwZXLDp3UgwrsgcXVpIGxlIHN1aXQgZXN0IHVuIC5jdGFEaXNjcmV0IG5ldXRyZSwgbGUgbcOqbWUgcXVlXG4gICBsZSBjYXRhbG9ndWUgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS4gKi9cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICDDiVRJUVVFVFRFUyAtIE1hcnF1YWdlIHR5cG9ncmFwaGlxdWVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIExlcyDDqXRpcXVldHRlcyBkb25uw6llcyBwYXIgbCdvcmdhbmlzYXRldXIgKGFuaW1hdGlvbnMsIHNvcnRpZXMsIGdyb3VwZXMpXG4gICBzb250IGVudmVsb3Bww6llcyBkYW5zIC5ldGlxdWV0dGVNb25vIHBhciBsZSBmaWx0cmUgVHdpZyBgZXRpcXVldHRlSHRtbGAuXG4gICBMYSBjaGFzc2UgZml4ZSBsZXMgZGlzdGluZ3VlIGRlcyBsaWJlbGzDqXMgZHUgc3lzdMOobWUgKGTDqWNpc2lvbiBQTyAyMDI2LTA2LTEwKS5cbiovXG5cbi5ldGlxdWV0dGVNb25vIHtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZmZNb25vKTtcbn1cblxuLyogTWFycXVldXIgZCd1bmUgc291cmNlIHByb3Zpc29pcmUsIGFjY29sw6kgw6AgbCfDqXRpcXVldHRlIHBhciBsZSBtw6ptZSBmaWx0cmUgKi9cbi5ldGlxdWV0dGVBQ29uZmlndXJlciB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U0KTtcbn1cblxuLnJlY2FwQmxvY0RldGFpbCAuZXRpcXVldHRlQUNvbmZpZ3VyZXIge1xuICAgIGNvbG9yOiB1bnNldDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTQ8OJTkFSSU8gLSBHcmlsbGUgZGUgYnJpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogTGUgY29udGVuZXVyIGQndW5lIGdyaWxsZSDDoCB0cmFpdHMgKHNjZW5hcmlvTGlnbmVzLnRzKSA6IGxlIFNWRyBkZXMgbGlnbmVzIHMneSBhYnNvbHV0aXNlLlxuICAgUGFyIGNsYXNzZSBldCBub24gcGFyIGlkZW50aWZpYW50IDogdW5lIHBhZ2UgcGV1dCBlbiBwb3J0ZXIgcGx1c2lldXJzICgyMDI2LTA5LTE4KS4gKi9cbi5zY2VuYXJpb0xpZ25lc0NvbnRlbmV1ciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4jc2NlbmFyaW9HcmlsbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpIHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG59XG5cbi8qIFNWRyBkZXMgbGlnbmVzIGRlIGNvbm5leGlvbiAqL1xuLnNjZW5hcmlvTGlnbmVzU3ZnIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIE5lIGJsb3F1ZSBwYXMgbGVzIGNsaWNzICovXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgei1pbmRleDogMDsgLyogRGVycmnDqHJlIGxlcyBicmlxdWVzICovXG59XG5cbi5icmlxdWUgKiB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbmJvZHkuaXNEcmFnZ2luZyxcbmJvZHkuaXNEcmFnZ2luZyAqIHtcbiAgICBjdXJzb3I6IGdyYWJiaW5nICFpbXBvcnRhbnQ7XG59XG5cbi8qIEJyaXF1ZSBkZSBiYXNlICovXG4uYnJpcXVlIHtcbiAgICB3aWR0aDogMTYycHg7XG4gICAgaGVpZ2h0OiAxMDBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlICk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzO1xufVxuXG4uYnJpcXVlOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZVBvcnRlZSk7XG59XG5cbi8qIEdyaWxsZSBzdGF0aXF1ZSAocGFnZSDCqyBWb2lyIGxhIGNvbmZpZyDCuyBkZXMgYXBlcsOndXMpIDogbGVzIGJyaXF1ZXMgc2UgcmVnYXJkZW50LCBuZSBzZSBjbGlxdWVudCBwYXMuXG4gICBQYXMgZCdvbWJyZSBhdSBzdXJ2b2wgKHJpZW4gbmUgYm91Z2Ugc291cyBsYSBzb3VyaXMpIDogYydlc3QgdW4gYXBlcsOndSwgdG91dCB5IGVzdCBkw6lzYWN0aXbDqVxuICAgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE1KS4gRWxsZSBuZSBwb3J0ZSBuaSBicmlxdWUgwqsgQ29uZmlndXJhdGlvbiDCuyBuaSBicmlxdWUgwqsgKyDCu1xuICAgKDIwMjYtMDktMTgpLCBzZXVsZW1lbnQgbGVzIHNjw6huZXMuIExhIHBvaWduw6llIGRlIGTDqXBsYWNlbWVudCBlc3QgdHJhaXTDqWUgZGUgbcOqbWUgZGFucyBfZHJhZ0Ryb3AuY3NzLiAqL1xuLnNjZW5hcmlvR3JpbGxlU3RhdGlxdWUgLmJyaXF1ZSB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4uc2NlbmFyaW9HcmlsbGVTdGF0aXF1ZSAuYnJpcXVlOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYnJpcXVlLmFjdGl2ZSB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xufVxuXG4vKiBNYXJxdWV1ciDCqyDDoCBjb25maWd1cmVyIMK7IDogbcOqbWUgw6l0b2lsZSByb3VnZSBwYXJ0b3V0IOKAlCBzdXIgbGEgYnJpcXVlIGTigJlhbmltYXRpb24gcXVpXG4gICBjb25zb21tZSB1bmUgcHJvdmlzb2lyZSwgZXQgc3VyIGwnb25nbGV0IG/DuSBjZXR0ZSBwcm92aXNvaXJlIHNlIGNvbmZpZ3VyZVxuICAgKHZhcmlhbnRlIGQnb25nbGV0IGRhbnMgX29uZ2xldE1lbnUuY3NzLCBhdmVjIC5vbmdsZXQpLiBMZSBwbGFjZW1lbnQgZW4gY29pbiBlc3RcbiAgIHByb3ByZSDDoCBsYSBicmlxdWUgOiBhaWxsZXVycyBsJ8OpdG9pbGUgc3VpdCBsZSB0ZXh0ZS4gKi9cbi5wYXN0aWxsZVByb3Zpc29pcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U0KTtcbiAgICBmb250OiB2YXIoLS1mQWxlcnRlMTYpO1xufVxuXG4uYnJpcXVlIC5wYXN0aWxsZVByb3Zpc29pcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDRweDtcbiAgICByaWdodDogODJweDtcbn1cblxuLyogU3R5bGVzIGQnaWPDtG5lcyA6IHZvaXIgNTRfaWNvbmVzLmNzcyAqL1xuXG4uYnJpcXVlQ29uZmlnIHsgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpOyB9XG5cbi5icmlxdWVUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgcGFkZGluZzogOHB4IDEwcHggMCAxMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5icmlxdWVOb21icmUge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBwYWRkaW5nOiAycHggMTBweCAxMHB4IDEwcHg7XG59XG4qL1xuXG4vKiBDb250cmF0cyBhbmltYXRpb24gKHNvdXMtbGlnbmUgaWPDtG5lcyArIHBsYWdlcykgKi9cbi5icmlxdWVDb250cmF0cyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogMnB4O1xuICAgIHBhZGRpbmc6IDJweCAxMHB4IDhweCAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uY29udHJhdFNjZW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMnB4O1xufVxuXG4uY29udHJhdFNjZW5lIHN2ZyB7XG4gICAgd2lkdGg6IDEycHg7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uY29udHJhdFBsYWdlIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiBCcmlxdWUgQWpvdXRlciAoYm91dG9uICsgZ8OpbsOpcmlxdWUpICovXG4uYnJpcXVlQWpvdXRlciB7XG4gICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5icmlxdWVJY29uZVBsdXMge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNOb2lyNCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZvbnQ6IHZhcigtLWZIMik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi5icmlxdWVBam91dGVyOmhvdmVyIC5icmlxdWVJY29uZVBsdXMge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi8qIEJyaXF1ZSArIGTDqXNhY3RpdsOpZSAocXVhbmQgbWVudSBhZmZpY2jDqSkgKi9cbi5icmlxdWVBam91dGVyLmJyaXF1ZUFqb3V0ZXJBY3RpZiB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJBY3RpZiAuYnJpcXVlSWNvbmVQbHVzIHtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09VTEVVUlMgQlJJUVVFUyBBSk9VVEVSIChwYXIgc2VjdGlvbilcbiAgIFV0aWxpc2UgZGVzIENTUyBjdXN0b20gcHJvcGVydGllcyBsb2NhbGVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBEw6lmaW5pdGlvbiBkZXMgdmFyaWFibGVzIHBhciBzZWN0aW9uICovXG4uYnJpcXVlQWpvdXRlckdyb3VwZXMge1xuICAgIC0tYnJpcXVlRm9uZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIC0tYnJpcXVlQm9yZHVyZTogdmFyKC0tY0FjY2VudDIpO1xufVxuXG4uYnJpcXVlQWpvdXRlckRpc3RyaWJ1dGlvbnMge1xuICAgIC0tYnJpcXVlRm9uZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIC0tYnJpcXVlQm9yZHVyZTogdmFyKC0tY0FjY2VudDIpO1xufVxuXG4uYnJpcXVlQWpvdXRlckNvbmZpZ3VyYXRpb25zIHtcbiAgICAtLWJyaXF1ZUZvbmQ6IHZhcigtLWNBY2NlbnQxKTtcbiAgICAtLWJyaXF1ZUJvcmR1cmU6IHZhcigtLWNBY2NlbnQyKTtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJBZmZpY2hhZ2VzIHtcbiAgICAtLWJyaXF1ZUZvbmQ6IHZhcigtLWNBY2NlbnQxKTtcbiAgICAtLWJyaXF1ZUJvcmR1cmU6IHZhcigtLWNBY2NlbnQyKTtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJTY2VuZXMge1xuICAgIC0tYnJpcXVlRm9uZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIC0tYnJpcXVlQm9yZHVyZTogdmFyKC0tY0FjY2VudDIpO1xufVxuXG4vKiBTdHlsZXMgY29tbXVucyB1dGlsaXNhbnQgbGVzIHZhcmlhYmxlcyAqL1xuLmJyaXF1ZUFqb3V0ZXIuYnJpcXVlQWpvdXRlckdyb3VwZXMsXG4uYnJpcXVlQWpvdXRlci5icmlxdWVBam91dGVyRGlzdHJpYnV0aW9ucyxcbi5icmlxdWVBam91dGVyLmJyaXF1ZUFqb3V0ZXJDb25maWd1cmF0aW9ucyxcbi5icmlxdWVBam91dGVyLmJyaXF1ZUFqb3V0ZXJBZmZpY2hhZ2VzLFxuLmJyaXF1ZUFqb3V0ZXIuYnJpcXVlQWpvdXRlclNjZW5lcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnJpcXVlRm9uZCk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmlxdWVCb3JkdXJlKTtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJHcm91cGVzIC5icmlxdWVJY29uZVBsdXMsXG4uYnJpcXVlQWpvdXRlckRpc3RyaWJ1dGlvbnMgLmJyaXF1ZUljb25lUGx1cyxcbi5icmlxdWVBam91dGVyQ29uZmlndXJhdGlvbnMgLmJyaXF1ZUljb25lUGx1cyxcbi5icmlxdWVBam91dGVyQWZmaWNoYWdlcyAuYnJpcXVlSWNvbmVQbHVzLFxuLmJyaXF1ZUFqb3V0ZXJTY2VuZXMgLmJyaXF1ZUljb25lUGx1cyB7XG4gICAgY29sb3I6IHZhcigtLWJyaXF1ZUJvcmR1cmUpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYnJpcXVlQm9yZHVyZSk7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgWk9ORSBGT1JNVUxBSVJFIChUdXJibyBGcmFtZSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNzY2VuYXJpb1Bhbm5lYXUge1xuICAgIG1hcmdpbjogMjBweCAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBwYWRkaW5nOiAyMHB4IDA7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQQU5ORUFVIC0gQ2xhc3NlcyBnw6luw6lyaXF1ZXMgcsOpdXRpbGlzYWJsZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5wYW5uZWF1V3JhcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcExpc3RlKTsgLyogYWxpZ27DqSAzMCDihpIgMzJweCAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpICovXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG5cbi5wYW5uZWF1R2F1Y2hlIHtcbiAgICB3aWR0aDogNjAwcHg7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5wYW5uZWF1QWlkZSB7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4ucGFubmVhdUFpZGUgaDI6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5wYW5uZWF1QWlkZSBoMyB7XG4gICAgbWFyZ2luOiA0MHB4IDAgMTBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG59XG5cbi5wYW5uZWF1QWlkZSBwIHtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLnBhbm5lYXVBaWRlIHN0cm9uZyxcbi5wYW5uZWF1QWlkZSBiIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2U3Ryb25nKTtcbn1cblxuLnBhbm5lYXVBaWRlIHVsIHtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbn1cblxuLnBhbm5lYXVBaWRlIGxpLFxuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uTGlzdGUgbGkge1xuICAgIG1hcmdpbjogNXB4IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIEVuY2FydCDCqyBjaG9pc2lyIGxhIGJvbm5lIHNvdXJjZSDCuyAoX2FpZGVFbmNhcnRTb3VyY2VzLnR3aWcpIDogYWpvdXTDqSDDoCBsYSBmaW4gZGUgdG91dFxuICAgcGFubmVhdSBkJ2FpZGUsIGNvbW11biDDoCB0b3V0ZXMgbGVzIHNjw6huZXMuIExlIGZvbmQgZGVzIGdyb3VwZXMgc3VmZml0IMOgIGxlIGTDqXRhY2hlciBkZVxuICAgbCdhaWRlIGRlIGxhIHNjw6huZSA6IHBhcyBkZSBib3JkdXJlLCBwYXMgZGUgY291bGV1ciBkZSB0ZXh0ZSBwcm9wcmUgKGTDqWNpc2lvbiBQT1xuICAgMjAyNi0wOC0xMCwgb24gZmFpdCBzaW1wbGUpLiAqL1xuLmFpZGVFbmNhcnRTb3VyY2VzIHtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYWlkZUVuY2FydFNvdXJjZXMgaDMge1xuICAgIG1hcmdpbjogMCAwIDhweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5haWRlRW5jYXJ0U291cmNlcyBoNCB7XG4gICAgbWFyZ2luOiAxNnB4IDAgNHB4IDA7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmFpZGVFbmNhcnRTb3VyY2VzIHAge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uYWlkZUVuY2FydFNvdXJjZXMgcDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4vKiBFbmNhZHLDqSBnw6luw6lyaXF1ZSBkJ2FwZXLDp3UgZCd1biBmaWNoaWVyIGltcG9ydMOpIChjb25zdHJ1aXQgZW4gSlMsIGV4LiBpbXBvcnQgQ1NWKS4gKi9cbi5maWNoaWVyUHJldmlzdWFsaXNhdGlvbiB7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbn1cblxuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uIGg0IHtcbiAgICBtYXJnaW46IDAgMCA2cHg7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbn1cblxuLyogTGVzIDxwPiBkZSBsJ2FwZXLDp3UgbmUgc29udCBwYXMgZW5mYW50cyBkaXJlY3RzIGR1IGZvcm0gOiBvbiBuZXV0cmFsaXNlIGxhIG1hcmdlXG4gICBwYXIgZMOpZmF1dCBkdSBuYXZpZ2F0ZXVyIChzaW5vbiBncm9zIHRyb3UgZW50cmUgdW4gdGl0cmUgZGUgbGlzdGUgZXQgc2EgbGlzdGUpLiAqL1xuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uIHAge1xuICAgIG1hcmdpbjogMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLyogQmxvYyDCqyB0aXRyZSArIGxpc3RlIMK7IDogc8OpcGFyw6kgZHUgY29tcHRldXIsIG1haXMgdGl0cmUgY29sbMOpIMOgIHNhIGxpc3RlIChwcm94aW1pdMOpKS4gKi9cbi5maWNoaWVyUHJldmlzdWFsaXNhdGlvbkxpc3RlIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xufVxuXG4vKiBMaWVuIMKrIFV0aWxpc2VyIHVuIGF1dHJlIGZpY2hpZXIgwrsgREFOUyBsJ2VuY2FkcsOpIChjb21tZSBsZSBib3V0b24gZGVzIGFwZXLDp3VzIGQnaW1hZ2UpLiAqL1xuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uIC5jdGFTdXBwcmltZXIge1xuICAgIG1hcmdpbi10b3A6IDhweDtcbn1cblxuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uTGlzdGUgdWwge1xuICAgIG1hcmdpbjogMnB4IDAgMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbn1cblxuLyogTGVzIGJvdXRvbnMgZHUgcGFubmVhdSBkJ2FpZGUgc29udCBkZXMgTElFTlMgKMKrIFV0aWxpc2VyIHVuIGF1dHJlIGZpY2hpZXIgwrvigKYpIDogcGFzIGRlXG4gICBzaWxob3VldHRlLCBqdXN0ZSBkdSB0ZXh0ZSBibGV1LiBMZSBtaW5pLW1lbnUgRGVzY3JpcHRpb24gLyBBaWRlLCBsdWksIGVzdCB1biB2cmFpIG1lbnVcbiAgIGQnb25nbGV0cyAoLm9uZ2xldCwgX29uZ2xldE1lbnUuY3NzKSA6IGlsIGdhcmRlIHNhIHBvbGljZSBldCBzb24gYWlyIOKAlCBzYW5zIGNlIDpub3QoKSxcbiAgIGNldHRlIHLDqGdsZSBsdWkgcmV0aXJhaXQgc29uIHBhZGRpbmcsIGV0IGxlIHBhdsOpIGRlIGwnb25nbGV0IGFjdGlmIGNvbGxhaXQgYXUgbW90LiAqL1xuLnBhbm5lYXVBaWRlIGJ1dHRvbjpub3QoLm9uZ2xldCkge1xuICAgIGZvbnQ6IHVuc2V0O1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDAwcHgpIHtcbiAgICAucGFubmVhdVdyYXBwZXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cblxuICAgIC5wYW5uZWF1R2F1Y2hlIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgfVxuXG4gICAgLnBhbm5lYXVBaWRlIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgfVxufVxuXG4ubWVzc2FnZUFpZGUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubWVzc2FnZUFpZGUgcCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgbWFyZ2luOiA1cHggMDtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkxPQyBFTkNBRFLDiSAtIFN0eWxlIHVuaWZpw6kgcG91ciBsZXMgYmxvY3NcbiAgIGRhbnMgbGVzIGZvcm11bGFpcmVzIChsb3RzLCBhY3R1YWxpc2F0aW9uLCBldGMuKVxuXG4gICBTdHJ1Y3R1cmUgSFRNTCBvYmxpZ2F0b2lyZSA6IGZvcm0gPiBkaXYgPiAuYmxvY0VuY2FkcmVcbiAgIChsZSAuYmxvY0VuY2FkcmUgZG9pdCDDqnRyZSBkYW5zIHVuZSBkaXYgaW50ZXJtw6lkaWFpcmUpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYmxvY0VuY2FkcmUge1xuICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZUludGVybmUpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmJsb2NFbmNhZHJlIC52aWduZXR0ZUltYWdlRXhpc3RhbnRlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLmJsb2NFbmNhZHJlID4gOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG4uYmxvY0VuY2FkcmUgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmJsb2NFbmNhZHJlID4gZGl2IHtcbiAgICBwYWRkaW5nOiAwIDAgMjBweDtcbn1cblxuLyogVGl0cmUgZHUgZm9ybXVsYWlyZSBhdmVjIGljw7RuZSBldCBjb3VsZXVyICovXG4udGl0cmVGb3JtdWxhaXJlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDAgMCA0MHB4IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4udGl0cmVGb3JtdWxhaXJlOmhhcygrIC5zb3VzVGl0cmVGb3JtdWxhaXJlKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4uc291c1RpdHJlRm9ybXVsYWlyZSB7XG4gICAgbWFyZ2luOiAyMHB4IDAgMzBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBDYXNlIDY0IGV0IDZweCBkJ2FpciA6IGRlc3NpbiA1MiwgbGEgcGV0aXRlIGRlcyBkZXV4IHRhaWxsZXMgZHUgcHJvamV0ICg1NF9pY29uZXMuY3NzKS4gKi9cbi50aXRyZUljb25lIHtcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDY0cHg7XG4gICAgcGFkZGluZzogNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVkFSSUFOVEVTIERFIENPVUxFVVJTIERFUyBUSVRSRVMgRk9STVVMQUlSRVNcbiAgIFV0aWxpc2UgZGVzIENTUyBjdXN0b20gcHJvcGVydGllcyBsb2NhbGVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBWYXJpYWJsZXMgbG9jYWxlcyBwb3VyIGxlIHRpdHJlIGV0IHNvbiBpY8O0bmUgKMOpbMOpbWVudHMgZW5mYW50cykgKi9cbi50aXRyZUNvbmZpZyxcbi50aXRyZUNvbmZpZ3VyYXRpb25zIHtcbiAgICAtLXRpdHJlRm9uZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLnRpdHJlR3JvdXBlcyB7XG4gICAgLS10aXRyZUZvbmQ6IHZhcigtLWNBY2NlbnQxKTtcbiAgICAtLXRpdHJlSWNvbmVGb25kOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi50aXRyZURpc3RyaWJ1dGlvbnMge1xuICAgIC0tdGl0cmVGb25kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgLS10aXRyZUljb25lRm9uZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4udGl0cmVTY2VuZXMge1xuICAgIC0tdGl0cmVGb25kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgLS10aXRyZUljb25lRm9uZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4udGl0cmVBZmZpY2hhZ2VzIHtcbiAgICAtLXRpdHJlRm9uZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLyogU3R5bGVzIGNvbW11bnMgdXRpbGlzYW50IGxlcyB2YXJpYWJsZXMgbG9jYWxlcyAqL1xuLnRpdHJlQ29uZmlnLFxuLnRpdHJlQ29uZmlndXJhdGlvbnMsXG4udGl0cmVHcm91cGVzLFxuLnRpdHJlRGlzdHJpYnV0aW9ucyxcbi50aXRyZVNjZW5lcyxcbi50aXRyZUFmZmljaGFnZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXRpdHJlRm9uZCk7XG59XG5cbi50aXRyZUNvbmZpZyAudGl0cmVJY29uZSxcbi50aXRyZUNvbmZpZ3VyYXRpb25zIC50aXRyZUljb25lLFxuLnRpdHJlR3JvdXBlcyAudGl0cmVJY29uZSxcbi50aXRyZURpc3RyaWJ1dGlvbnMgLnRpdHJlSWNvbmUsXG4udGl0cmVTY2VuZXMgLnRpdHJlSWNvbmUsXG4udGl0cmVBZmZpY2hhZ2VzIC50aXRyZUljb25lIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS10aXRyZUljb25lRm9uZCk7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuY3RhVmFsaWRlciB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiAxMHB4IDQwcHg7XG4gICAgd2lkdGg6IGF1dG87XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuY3RhVmFsaWRlcjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09VTEVVUlMgUEFSIENBVMOJR09SSUUgKC5kaXZDb25maWcsIC5kaXZHcm91cGVzLCBldGMuKVxuICAgQ2xhc3NlIGFqb3V0w6llIHN1ciAucGFubmVhdUZvcm11bGFpcmUgcGFyIF9iYXNlQ3JlYXRlL19iYXNlRWRpdFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQm91dG9uIHZhbGlkZXIgLSBDb25maWcgKi9cbi5kaXZDb25maWcgLmN0YVZhbGlkZXIsXG4uZGl2Q29uZmlndXJhdGlvbnMgLmN0YVZhbGlkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYSk7XG59XG4uZGl2Q29uZmlnIC5jdGFWYWxpZGVyOmhvdmVyLFxuLmRpdkNvbmZpZ3VyYXRpb25zIC5jdGFWYWxpZGVyOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2FoKTtcbn1cblxuLyogQm91dG9uIHZhbGlkZXIgLSBQYXJ0aWNpcGFudHMgKi9cbi5kaXZHcm91cGVzIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xufVxuLmRpdkdyb3VwZXMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xufVxuXG4vKiBCb3V0b24gdmFsaWRlciAtIExvdHMgKi9cbi5kaXZEaXN0cmlidXRpb25zIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xufVxuLmRpdkRpc3RyaWJ1dGlvbnMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xufVxuXG4vKiBCb3V0b24gdmFsaWRlciAtIFNjZW5lcyAqL1xuLmRpdlNjZW5lcyAuY3RhVmFsaWRlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudF9hKTtcbn1cbi5kaXZTY2VuZXMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xufVxuXG4vKiBCb3V0b24gdmFsaWRlciAtIEFmZmljaGFnZXMgKi9cbi5kaXZBZmZpY2hhZ2VzIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xufVxuLmRpdkFmZmljaGFnZXMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xufVxuXG4vKiBGb2N1cyBkZXMgY2hhbXBzIC0gQ29uZmlnICovXG4uZGl2Q29uZmlnIGlucHV0OmZvY3VzLFxuLmRpdkNvbmZpZyB0ZXh0YXJlYTpmb2N1cyxcbi5kaXZDb25maWd1cmF0aW9ucyBpbnB1dDpmb2N1cyxcbi5kaXZDb25maWd1cmF0aW9ucyB0ZXh0YXJlYTpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tY0FjY2VudDQpO1xufVxuXG4vKiBGb2N1cyBkZXMgY2hhbXBzIC0gUGFydGljaXBhbnRzICovXG4uZGl2R3JvdXBlcyBpbnB1dDpmb2N1cyxcbi5kaXZHcm91cGVzIHRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNBY2NlbnQ0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG5cbi8qIEZvY3VzIGRlcyBjaGFtcHMgLSBMb3RzICovXG4uZGl2RGlzdHJpYnV0aW9ucyBpbnB1dDpmb2N1cyxcbi5kaXZEaXN0cmlidXRpb25zIHRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNBY2NlbnQ0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG5cbi8qIEZvY3VzIGRlcyBjaGFtcHMgLSBTY2VuZXMgKi9cbi5kaXZTY2VuZXMgaW5wdXQ6Zm9jdXMsXG4uZGl2U2NlbmVzIHRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNBY2NlbnQ0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG5cbi8qIEZvY3VzIGRlcyBjaGFtcHMgLSBBZmZpY2hhZ2VzICovXG4uZGl2QWZmaWNoYWdlcyBpbnB1dDpmb2N1cyxcbi5kaXZBZmZpY2hhZ2VzIHRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNBY2NlbnQ0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG5cbi8qIFRleHRlcyBkJ2FpZGUgLSBDb25maWcgKi9cbi5kaXZDb25maWcgLmhlbHAtdGV4dCxcbi5kaXZDb25maWcgLmZhY3VsdGF0aWYsXG4uZGl2Q29uZmlndXJhdGlvbnMgLmhlbHAtdGV4dCxcbi5kaXZDb25maWd1cmF0aW9ucyAuZmFjdWx0YXRpZiB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQ0KTtcbn1cblxuLyogTGFiZWwgcHJpbmNpcGFsIGQndW4gZ3JvdXBlIChyYWRpbyAvIGNoYW1wKSBkYW5zIGxlcyBmb3JtdWxhaXJlcyBkZSBjb25maWcgPSB0aXRyZSAqL1xuLmRpdkNvbmZpZyA+IGRpdiA+IGxhYmVsOmZpcnN0LWNoaWxkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTZTdHJvbmcpO1xufVxuXG4vKiBUZXh0ZXMgZCdhaWRlIC0gUGFydGljaXBhbnRzICovXG4uZGl2R3JvdXBlcyAuaGVscC10ZXh0LFxuLmRpdkdyb3VwZXMgLmZhY3VsdGF0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG5cbi8qIFRleHRlcyBkJ2FpZGUgLSBMb3RzICovXG4uZGl2RGlzdHJpYnV0aW9ucyAuaGVscC10ZXh0LFxuLmRpdkRpc3RyaWJ1dGlvbnMgLmZhY3VsdGF0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG5cbi8qIFRleHRlcyBkJ2FpZGUgLSBTY2VuZXMgOiBwYXMgZGUgY291bGV1ciB0aMOpbWF0aXF1ZSwgcmVzdGUgZ3JpcyBwYXIgZMOpZmF1dCAqL1xuXG4vKiBHcm91cGUgcmFkaW8gcG91ciBsZXMgc2xvdHMgZGUgZGlzdHJpYnV0aW9uICovXG5cbi5yYWRpb0Rpc3RyaWJ1dGlvbk9wdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi8qIExlIGNvbnRlbmV1ciBwb3J0ZSBsJ2VzcGFjZW1lbnQgKGdhcCksIGxlcyBwaWx1bGVzIG4nb250IHBhcyBkZSBtYXJnZSBwcm9wcmUgKi9cbi5yYWRpb0Rpc3RyaWJ1dGlvbk9wdGlvbnMgLnRvZ2dsZUF2ZWNMYWJlbCB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiBSYWRpbyBwaWx1bGUgOiBtw6ptZSBmb3JtYXQgcXVlIGxlIHRvZ2dsZSwgbWFpcyBwbGVpbmUgKHPDqWxlY3Rpb25uw6llKSBvdSB2aWRlLlxuICAgTGUgcmVtcGxpc3NhZ2UgZ2xpc3NlIHZlcnRpY2FsZW1lbnQg4oCUIGMnZXN0IGx1aSBxdWkgcmVuZCBsZSBjaG9peCB1bmlxdWUgbGlzaWJsZSA6XG4gICBxdWFuZCBsYSBzw6lsZWN0aW9uIGNoYW5nZSwgdW5lIHBpbHVsZSBzZSB2aWRlIHBlbmRhbnQgcXVlIGwnYXV0cmUgc2UgcmVtcGxpdC4gKi9cbi5yYWRpb1BpbHVsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMzhweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ucmFkaW9QaWx1bGUgaW5wdXQge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xufVxuXG4ucmFkaW9QaWx1bGVGb25kIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDA7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyRm9ybSk7XG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBHYWxldCBpbnTDqXJpZXVyIDogZW4gcmV0cmFpdCBkZSAycHggY29tbWUgbGUgYm91dG9uIGR1IHRvZ2dsZSDigJQgbGUgZm9uZCBkZSBsYVxuICAgcGlsdWxlLCBwYXNzw6kgYXUgYmxhbmMgcXVhbmQgZWxsZSBlc3Qgc8OpbGVjdGlvbm7DqWUsIGZvcm1lIGxlIGxpc2Vyw6kgZW50cmUgbGFcbiAgIGJvcmR1cmUgZXQgbGUgZ2FsZXQgKi9cbi5yYWRpb1BpbHVsZUZvbmQ6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAzcHg7XG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygxMDAlICsgM3B4KSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xufVxuXG4ucmFkaW9QaWx1bGUgaW5wdXQ6Y2hlY2tlZCArIC5yYWRpb1BpbHVsZUZvbmQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbi5yYWRpb1BpbHVsZSBpbnB1dDpjaGVja2VkICsgLnJhZGlvUGlsdWxlRm9uZDo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5yYWRpb1BpbHVsZUxvdHM6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDMpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ0hBTVAgTk9NIFJFUExJQUJMRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNoYW1wRXRpcXVldHRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAwLjVyZW07XG59XG5cbi5jaGFtcEV0aXF1ZXR0ZVZhbGV1ciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi5jaGFtcEV0aXF1ZXR0ZUVkaXRlciB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDAuMnJlbTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XG59XG5cbi5jaGFtcEV0aXF1ZXR0ZUVkaXRlcjpob3ZlciB7XG4gICAgb3BhY2l0eTogMC42O1xufVxuXG4uY2hhbXBFdGlxdWV0dGUgLm1hc3F1ZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmNoYW1wRXRpcXVldHRlQ2hhbXAge1xuICAgIGZsZXg6IDE7XG59XG5cbi8qIENoZWNrYm94ZXMgZXQgcmFkaW9zIC0gQ29uZmlnICovXG4uZGl2Q29uZmlnIC5zdmdDYixcbi5kaXZDb25maWcgLnN2Z1JiLFxuLmRpdkNvbmZpZ3VyYXRpb25zIC5zdmdDYixcbi5kaXZDb25maWd1cmF0aW9ucyAuc3ZnUmIge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi8qIENoZWNrYm94ZXMgZXQgcmFkaW9zIC0gUGFydGljaXBhbnRzICovXG4uZGl2R3JvdXBlcyAuc3ZnQ2IsXG4uZGl2R3JvdXBlcyAuc3ZnUmIge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi8qIENoZWNrYm94ZXMgZXQgcmFkaW9zIC0gTG90cyAqL1xuLmRpdkRpc3RyaWJ1dGlvbnMgLnN2Z0NiLFxuLmRpdkRpc3RyaWJ1dGlvbnMgLnN2Z1JiIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4vKiBDaGVja2JveGVzIGV0IHJhZGlvcyAtIFNjZW5lcyAqL1xuLmRpdlNjZW5lcyAuc3ZnQ2IsXG4uZGl2U2NlbmVzIC5zdmdSYiB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLyogQ2hlY2tib3hlcyBldCByYWRpb3MgLSBBZmZpY2hhZ2VzICovXG4uZGl2QWZmaWNoYWdlcyAuc3ZnQ2IsXG4uZGl2QWZmaWNoYWdlcyAuc3ZnUmIge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi8qIERhbnMgdW4gZm9ybXVsYWlyZSBhbmltYXRpb24sIGxlcyBzZWN0aW9ucyBwYXJ0aWNpcGFudHMvbG90cyBnYXJkZW50IGxldXIgcHJvcHJlIGNvdWxldXIgKi9cbi5zZWN0aW9uQW5pbUdyb3VwZXMgLnN2Z0NiLFxuLnNlY3Rpb25BbmltR3JvdXBlcyAuc3ZnUmIgeyBjb2xvcjogdmFyKC0tY0FjY2VudDEpOyB9XG4uc2VjdGlvbkFuaW1Mb3RzIC5zdmdDYixcbi5zZWN0aW9uQW5pbUxvdHMgLnN2Z1JiIHsgY29sb3I6IHZhcigtLWNBY2NlbnQxKTsgfVxuXG4vKiBTZWN0aW9ucyBjb2xvcsOpZXMgZGFucyBsZXMgZm9ybXVsYWlyZXMgZCdhbmltYXRpb24gKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gLnNlY3Rpb25BbmltR3JvdXBlcyB7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG59XG5cbi8qIEJvdXRvbiBmaWxlIGlucHV0IC0gQ29uZmlnICovXG4uZGl2Q29uZmlnIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbixcbi5kaXZDb25maWd1cmF0aW9ucyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYSk7XG59XG4uZGl2Q29uZmlnIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbjpob3Zlcixcbi5kaXZDb25maWd1cmF0aW9ucyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xufVxuXG4vKiBCb3V0b24gZmlsZSBpbnB1dCAtIFBhcnRpY2lwYW50cyAqL1xuLmRpdkdyb3VwZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xufVxuLmRpdkdyb3VwZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2FoKTtcbn1cblxuLyogQm91dG9uIGZpbGUgaW5wdXQgLSBMb3RzICovXG4uZGl2RGlzdHJpYnV0aW9ucyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYSk7XG59XG4uZGl2RGlzdHJpYnV0aW9ucyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xufVxuXG4vKiBCb3V0b24gZmlsZSBpbnB1dCAtIFNjZW5lcyAqL1xuLmRpdlNjZW5lcyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYSk7XG59XG4uZGl2U2NlbmVzIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudF9haCk7XG59XG5cbi8qIEJvdXRvbiBmaWxlIGlucHV0IC0gQWZmaWNoYWdlcyAqL1xuLmRpdkFmZmljaGFnZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xufVxuLmRpdkFmZmljaGFnZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2FoKTtcbn1cblxuLyogUGFubmVhdSBmb3JtdWxhaXJlIDogdW4gc2V1bCBmb3JtIE9VIHBsdXNpZXVycyAuY29udGVudSAqL1xuLnBhbm5lYXVHYXVjaGVGbGV4LFxuLnBhbm5lYXVGb3JtdWxhaXJlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMaXN0ZSk7XG59XG5cbi8qIGZvcm0gcG91ciBsZXMgZm9ybXVsYWlyZXMsIC5ibG9jQ29udGVudSBwb3VyIGxlcyBibG9jcyBkJ2luZm9ybWF0aW9uICovXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSxcbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYmxvY0NvbnRlbnUsXG4ucGFubmVhdUdhdWNoZUZsZXggLmJsb2NDb250ZW51IHtcbiAgICBtYXJnaW46IDA7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSApO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmJsb2NDb250ZW51LFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSB7XG4gICAgcGFkZGluZy1ib3R0b206IDIwcHg7XG59XG5cbi8qIEJsb2MgY29udGVudSBlbiBtb2RlIHRlc3QgKHN0eWxlIHZpb2xldCkgKi9cbi5ibG9jQ29udGVudVRlc3QgLnRpdHJlRm9ybXVsYWlyZSB7XG4gICAgLS10aXRyZUZvbmQ6IHZhcigtLWNBY2NlbnQxKTtcbiAgICAtLXRpdHJlSWNvbmVGb25kOiB2YXIoLS1jQWNjZW50Mik7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuZGl2Q2IsXG4ucGFubmVhdUdhdWNoZUZsZXggLmRpdkNiIHtcbiAgICBtYXJnaW46IDAgMCAyMHB4O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGg0LFxuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSA+IGg0LFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSA+IGg0IHtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIHBhZGRpbmc6IDAgMjBweDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYsXG4ucGFubmVhdUZvcm11bGFpcmUgLmJsb2NDb250ZW51ID4gZGl2LFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSA+IGRpdixcbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gcCxcbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYmxvY0NvbnRlbnUgPiBwLFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSA+IHAge1xuICAgIHBhZGRpbmc6IDAgMjBweDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNFQ1RJT05TIENBTk9OSVFVRVMgKGZvcm11bGFpcmVzIGQnYW5pbWF0aW9uKVxuICAgVW5lIHNlY3Rpb24gPSB1biBjb250ZW5ldXIgLnNlY3Rpb25Gb3JtdWxhaXJlIHF1aSBwb3J0ZSBzb24gPGg0PixcbiAgIHNlcyBjaGFtcHMgKGFpZGUgY29tcHJpc2UpIGV0IHNlcyBzb3VzLWdyb3VwZXMuIExlIHBhZGRpbmcgaG9yaXpvbnRhbFxuICAgdmllbnQgZHUgY29udHJhdCBmb3JtID4gZGl2IGNpLWRlc3N1cyA7IGljaSwgbGUgcnl0aG1lIGludGVybmUuXG4gICBSZWdpc3RyZSA6IGFuaW1hdGlvbnMvX3BhcnRhZ2Uvc2VjdGlvbnMuanNvblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYuc2VjdGlvbkZvcm11bGFpcmUge1xuICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XG59XG5cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGg0IHtcbiAgICBtYXJnaW46IDAgMCAxMnB4O1xufVxuXG4uc2VjdGlvbkZvcm11bGFpcmUgPiBkaXYge1xuICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG59XG5cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4vKiBVbmUgem9uZSBkZSB0ZXh0ZSBkZSBzY8OobmUgcHJlbmQgbGEgaGF1dGV1ciBxdWUgc29uIGZvcm0uanNvbiBkZW1hbmRlIChhdHRyLnJvd3MpLCBhdSBsaWV1XG4gICBkZXMgMTAwcHggY29tbXVucyDDoCB0b3V0ZXMgbGVzIHpvbmVzIGRlIHRleHRlIChmb3JtLmNzcykg4oCUIGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTI3LiAqL1xuLnNlY3Rpb25Gb3JtdWxhaXJlIHRleHRhcmVhW3Jvd3NdIHtcbiAgICBoZWlnaHQ6IGF1dG87XG59XG5cbi8qIExpc3RlIMOgIHB1Y2VzIGRhbnMgdW4gYmxvYyBkJ2luZm9ybWF0aW9uIDogbGUgcmVzZXQgZ2xvYmFsICgwMF9yZXNldCkgcmV0aXJlIGxlcyBwdWNlcyAqL1xuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSB1bCB7XG4gICAgbWFyZ2luOiAwIDAgMTVweDtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogNDBweDtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmJsb2NDb250ZW51IGxpIHtcbiAgICBtYXJnaW46IDVweCAwO1xufVxuXG4vKiBMZSA8aHI+IHPDqXBhcmF0ZXVyIHMnYWxpZ25lIHN1ciBsZSByZXRyYWl0IGhvcml6b250YWwgZGVzIGNoYW1wcyAoMjBweCkgYXUgbGlldSBkZSBjb3VwZXIgdG91dGUgbGEgbGFyZ2V1ciAqL1xuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBociB7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGRpdixcbi5lc3BhY2VGb3JtID4gZGl2IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xufVxuXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24gdGgsXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24gdGQge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50YWJsZWF1UHJldmlzdWFsaXNhdGlvbiB0aCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG59XG5cbi50YWJsZWF1UHJldmlzdWFsaXNhdGlvbiAuc2VwYXJhdGV1clByZXZpc3VhbGlzYXRpb24gdGQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIFRvZ2dsZSBhdmVjIGxhYmVsIOKAlCBjbGFzc2VzIGRlIGJhc2UgKGTDqXBsYWPDqWVzIGRlcHVpcyBfbW9kYWxlLmNzcykgKi9cbi50b2dnbGVBdmVjTGFiZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiA4cHggMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi50b2dnbGVMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIFRvZ2dsZSBkw6lzYWN0aXbDqSAoYmxvcXXDqSkgKi9cbi50b2dnbGVEaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1xuICAgIGN1cnNvcjogYXV0bztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLyogcG9pbnRlci1ldmVudHM6bm9uZSByZW5kIGxlIHRvZ2dsZSB0cmFuc3BhcmVudCBhdSBzdXJ2b2wgOiBzYW5zIMOnYSBsZSBjdXJzb3I6cG9pbnRlciBkdSBsYWJlbCByZXByZW5kIGxhIG1haW4gc3VyIHRvdXRlIGxhIGxpZ25lICovXG4udG9nZ2xlQXZlY0xhYmVsOmhhcygudG9nZ2xlRGlzYWJsZWQpIHtcbiAgICBjdXJzb3I6IGF1dG87XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xNCA6IHBhcmFtw6h0cmUgJ21lc3NhZ2UnIGR1IHRvZ2dsZSBqYW1haXMgcGFzc8OpIHBhciBhdWN1biBhcHBlbGFudCA7IHJlbmRhaXQgdW4gdGV4dGUgUk9VR0UgZCdhbGVydGUgYWxvcnMgcXVlIGTDqWNyaXQgY29tbWUgwqsgZXhwbGljYXRpZiDCuyAoQURSIHbDqXJpZmljYXRpb25Eb2N1bWVudGF0aW9uLCBjYXMgcsOpZWwgbsKwNSlcbi50b2dnbGVNZXNzYWdlIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTMpO1xufVxuKi9cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC50b2dnbGVBdmVjTGFiZWwge1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gLnRvZ2dsZUF2ZWNMYWJlbCB7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLyogTGlnbmUgdG9nZ2xlIGR1IHRow6htZSBkZSBmb3JtdWxhaXJlIChkaXYubGlnbmVUb2dnbGUgPiBsYWJlbCArIGFpZGUpIDogbGUgY29udGVuZXVyXG4gICBwb3J0ZSBsJ2VzcGFjZW1lbnQgZGUgbGlnbmUsIGxlIHRvZ2dsZSBuJ2EgcGx1cyBkZSBtYXJnZSBwcm9wcmUuIExlcyB0b2dnbGVzIMOpY3JpdHNcbiAgIMOgIGxhIG1haW4gKHNsb3RzIGRlIHNvdXJjZXMpIGdhcmRlbnQgbGV1ciBtYXJnaW4gOHB4IHBvdXIgcydlc3BhY2VyIGVudHJlIGV1eC4gKi9cbi5saWduZVRvZ2dsZSA+IC50b2dnbGVBdmVjTGFiZWwge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5mb3JtQWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLyogY3RhQW5udWxlciBkYW5zIGxlIHBhbm5lYXUgOiBwYXMgZGUgbWFyZ2luIChsZSBub3lhdSBtZXQgMjBweCwgaW51dGlsZSBpY2kpICovXG4ucGFubmVhdUZvcm11bGFpcmUgLmZvcm1BY3Rpb25zID4gLmN0YUFubnVsZXIge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogTGUgc3R5bGUgZGVzIGFsZXJ0ZXMgKGNvdWxldXJzLCBwb2xpY2UsIHBhZGRpbmcpIHZpZW50IGR1IG5veWF1ICg0Ml9hdXRoLmNzcykgOlxuICAgaWNpIHVuaXF1ZW1lbnQgbCdhbGlnbmVtZW50IHN1ciBsZSBwYWRkaW5nIGxhdMOpcmFsIGR1IGZvcm11bGFpcmUgKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYWxlcnRFcnJldXIge1xuICAgIG1hcmdpbjogMCAyMHB4IDEwcHg7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYWxlcnRFcnJldXIgbGkge1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmFsZXJ0RXJyZXVyIHVsIHtcbiAgICBtYXJnaW46IDZweCAwIDA7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gZGl2IC5hbGVydEVycmV1ciB7XG4gICAgbWFyZ2luOiAwIDAgMTBweDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5mb3JtQWN0aW9ucyAuYWxlcnRFcnJldXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5jdGFBbm51bGVyOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogQm91dG9uIMKrIFJlbXBsYWNlciBwYXIgdW5lIGFuaW1hdGlvbiBzaW1pbGFpcmUgwrsgOiBvdXZyZSBsYSBwb3B1cCBkZXMganVtZWxsZXMgZGUgZmFtaWxsZVxuICAgKHBhcyB1bmUgYWN0aW9uIHLDqWVsbGUsIGNvbnRyYWlyZW1lbnQgw6AgQW5udWxlci9TdXBwcmltZXIgb3UgTW9kaWZpZXIgdm9pc2lucykuIFByw6lzZW50IGRhbnNcbiAgIGxlIGZvcm11bGFpcmUgZCfDqWRpdGlvbiBFVCBsZSBwYW5uZWF1IHLDqWNhcCAoZCdvw7kgLnBhbm5lYXVHYXVjaGUsIGxldXIgcGFyZW50IGNvbW11bikuIE3Dqm1lXG4gICBwb2xpY2UgZXQgbcOqbWUgY291bGV1ciBxdSdBbm51bGVyL01vZGlmaWVyIChjZi4gbm95YXUgMzFfY3RhLmNzcykgOiBzZXVsZXMgbGVzIGFjdGlvbnNcbiAgIG1hcnF1w6llcyAoU3VwcHJpbWVyKSBnYXJkZW50IHVuZSBjb3VsZXVyLiAqL1xuLnBhbm5lYXVHYXVjaGUgLmxpZW5TaW1pbGFpcmVzIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wYW5uZWF1R2F1Y2hlIC5saWVuU2ltaWxhaXJlczpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbmRpdiAuY3RhU3VwcHJpbWVyIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTMpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuZGl2IC5jdGFTdXBwcmltZXI6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG5kaXYgLmN0YVN1cHByaW1lckNvbmZpcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbmRpdiAuY3RhU3VwcHJpbWVyQ29uZmlybTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IC01cHggLTEycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdlMyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHotaW5kZXg6IC0xO1xuICAgIGFuaW1hdGlvbjogY29uZmlybUJnR3JvdyAwLjJzIGVhc2Utb3V0IGZvcndhcmRzO1xufVxuXG5Aa2V5ZnJhbWVzIGNvbmZpcm1CZ0dyb3cge1xuICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNyk7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG59XG5cbmRpdiAuY3RhU3VwcHJpbWVyRGVzYWN0aXZlIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG5kaXYgLmN0YVN1cHByaW1lci5oaWRkZW4ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIENoYW1wIGVuZmFudCBkw6lwZW5kYW50IGQndW4gYXV0cmUgY2hhbXAgKGNoZWNrYm94IHBhcmVudClcbiAgIFV0aWxpc8OpIGF2ZWMgZGF0YS10b2dnbGUtZW5mYW50IHN1ciBsZSBwYXJlbnQgZXQgY2xhc3NlIGNoYW1wRW5mYW50IHN1ciBsJ2VuZmFudCAqL1xuLmNoYW1wRW5mYW50IHtcbiAgICB0cmFuc2l0aW9uOiAwLjJzO1xufVxuXG4uY2hhbXBFbmZhbnQuaW5hY3RpZiB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLmRpdkRpc3RyaWJ1dGlvbk1vZGUgLmNoYW1wRW5mYW50LmluYWN0aWYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIGRpc2NyZXQgYXZlYyB0ZXh0ZSBjZW50csOpICh1dGlsaXPDqSBkYW5zIGxlcyBzbG90cyBkJ2VudHLDqWVzKSAqL1xuLnNlcGFyYXRldXJEaXNjcmV0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1hcmdpbjogNnB4IDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xufVxuXG4uc2VwYXJhdGV1ckRpc2NyZXQ6OmJlZm9yZSxcbi5zZXBhcmF0ZXVyRGlzY3JldDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGZsZXg6IDE7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbn1cblxuLyogQm91dG9uIGZlcm1lciBsZSBwYW5uZWF1IGZvcm11bGFpcmUgKi9cbi5wYW5uZWF1Q2xvc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogNXB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEVOVFLDiUVTIEdST1VQRVMgKGdyb3VwZXMgZGFucyBsZXMgYW5pbWF0aW9ucylcbiAgIFV0aWxpc2UgLmJsb2NFbmNhZHJlIGNvbW1lIGJhc2UgZGUgZGVzaWduXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZW50cmVlR3JvdXBlSGVhZGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uZW50cmVlR3JvdXBlSGVhZGVyIC5lbnRyZWVOdW1lcm8ge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG59XG5cbi8qIEdyb3VwZSBkZSBjaGFtcHMgZW4gZ3JpbGxlIChvcHRpb24gXCJjb2xvbm5lc1wiIGRlIGZvcm0uanNvbikgOiBOIGNoYW1wcyBwYXIgbGlnbmUuXG4gICBTdXJjbGFzc2UgbGUgZGlzcGxheTpmbGV4IGRlIC5ibG9jVmVydGljYWwgOyBsZSBzaG93SWYgYmFzY3VsZSBzdHlsZS5kaXNwbGF5IChub25lLycnKSBwYXItZGVzc3VzLiAqL1xuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYuYmxvY1ZlcnRpY2FsLmNoYW1wc0dyaWxsZSxcbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGRpdi5ibG9jVmVydGljYWwuY2hhbXBzR3JpbGxlIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KSB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgNi0+OCwgMTYtPjIwcHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgLyogTGVzIGxhYmVscyBuJ29udCBwYXMgdG91cyBsYSBtw6ptZSBoYXV0ZXVyIDogY2FsZXIgcGFyIGxlIGJhcyBhbGlnbmUgbGVzIGlucHV0cyBkJ3VuZSByYW5nw6llICovXG4gICAgYWxpZ24taXRlbXM6IGVuZDtcbn1cblxuLyogSW50ZXJ0aXRyZSBkZSByYW5nw6llIGQndW5lIGdyaWxsZSAob3B0aW9uIFwidGl0cmVzTGlnbmVzXCIgZGUgZm9ybS5qc29uLCBleC4gwqsgUGFsaWVyIDEgwrspICovXG4uZ3JpbGxlTGlnbmVUaXRyZSB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG59XG5cbi5jaGFtcHNHcmlsbGUgLmdyaWxsZUxpZ25lVGl0cmU6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gZGl2LmJsb2NWZXJ0aWNhbC5jaGFtcHNHcmlsbGVbZGF0YS1jb2xvbm5lcz1cIjNcIl0sXG4uc2VjdGlvbkZvcm11bGFpcmUgPiBkaXYuYmxvY1ZlcnRpY2FsLmNoYW1wc0dyaWxsZVtkYXRhLWNvbG9ubmVzPVwiM1wiXSB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTtcbn1cblxuLyogTm90ZSBkJ2FpZGUgZCd1biBncm91cGUgKG9wdGlvbiBcImFpZGVcIiBkZSBmb3JtLmpzb24pIDogcGxlaW5lIGxhcmdldXIsIHNvdXMgbGVzIGNoYW1wcy4gKi9cbi5ncmlsbGVBaWRlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmNoYW1wc0dyaWxsZSAuZ3JpbGxlQWlkZSB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbn1cblxuLyogUXVlc3Rpb25zIGRlcyBwYXJ0aWNpcGFudHMgcmVmdXPDqWVzIDogdW4gc2V1bCBjYWRyZSBzb3VzIGxlIGNoYW1wLCB1biBzZXVsIGZvbmQuIFNldWwgbGUgdGl0cmVcbiAgIGVzdCByb3VnZSA7IHBhciBlcnJldXIsIGxhIGxpZ25lIHNhaXNpZSBlbnRyZSBndWlsbGVtZXRzIChjaGFzc2UgZml4ZSksIGxlIG1lc3NhZ2UsIHB1aXMgbGVcbiAgIG51bcOpcm8gZGUgbGEgbGlnbmUgZW4gcGV0aXQg4oCUIGMnZXN0IHVuIHJlcMOocmUsIHBhcyBjZSBxdSdvbiBsaXQgZCdhYm9yZCAoY2hlZiBkZSBwcm9qZXQsXG4gICAyMDI2LTEwLTA0KS4gR2FiYXJpdCA6IHRlbXBsYXRlcy9fZm9ybS9fdGhlbWVBdXRoLnR3aWcsIHF1ZXN0aW9uc19wYXJ0aWNpcGFudF9yb3cgKi9cbi5lcnJldXJzUXVlc3Rpb25zIHtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1nYXBNb3llbik7XG4gICAgcGFkZGluZzogdmFyKC0tZ2FwTW95ZW4pIDE2cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdlMCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY1JvdWdlMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uZXJyZXVyc1F1ZXN0aW9uc0VudGV0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbn1cblxuLmVycmV1cnNRdWVzdGlvbnNUaXRyZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTZTdHJvbmcpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U0KTtcbn1cblxuLmVycmV1clF1ZXN0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAycHg7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4vKiBVbiBmaWxldCBlbnRyZSBkZXV4IGVycmV1cnMsIGphbWFpcyBzb3VzIGxlIHRpdHJlIDogbGEgbGlzdGUgcmVzcGlyZSBzYW5zIHJlZmFpcmUgZGVzIGJvw650ZXMgKi9cbi5lcnJldXJRdWVzdGlvbiArIC5lcnJldXJRdWVzdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IHZhcigtLWdhcE1veWVuKTtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY1JvdWdlMik7XG59XG5cbi5lcnJldXJRdWVzdGlvblRleHRlIHNwYW4ge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMTYpO1xuICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xufVxuXG4uZXJyZXVyUXVlc3Rpb25MaWduZSB7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIEJvdXRvbiBjb3BpZXIgw6AgaWPDtG5lIChkYXRhLWNvcGllci1pY29uZSkgOiBsJ2ljw7RuZSBzZXVsZSA7IHVuZSBmb2lzIGNvcGnDqSwgbGUgbW90IHF1ZSBsZVxuICAgZ2FiYXJpdCBhIHBsYWPDqSBkYW5zIC5jdGFDb3BpZXJJY29uZUNvcGllIHBhcmHDrnQgw6Agc2EgZ2F1Y2hlICovXG4uY3RhQ29waWVySWNvbmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiA0cHg7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jdGFDb3BpZXJJY29uZSBzdmcge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbn1cblxuLmN0YUNvcGllckljb25lOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmN0YUNvcGllckljb25lQ29waWUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jdGFDb3BpZXJJY29uZS5jb3BpZSB7XG4gICAgY29sb3I6IHZhcigtLWNTdWNjZXM0KTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5jdGFDb3BpZXJJY29uZS5jb3BpZSAuY3RhQ29waWVySWNvbmVDb3BpZSB7XG4gICAgZGlzcGxheTogaW5saW5lO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFVORSBRVUVTVElPTiBNSVNFIEVOIMOJVklERU5DRSDigJQgYmFsaXNlIE1hcmtkb3duIGBmYXE6aWRlbnRpZmlhbnRgIChCYWxpc2VGYXEsIG5veWF1KVxuXG4gICBVbiBjYWRyZSBhdSBmaWwgZCd1biBwYW5uZWF1IGQnYWlkZSAoLnBhbm5lYXVBaWRlKSA6IGxhIHF1ZXN0aW9uIGVuIHTDqnRlLCBsYSByw6lwb25zZVxuICAgZGVzc291cywgdG91am91cnMgdmlzaWJsZS4gUmllbiBuZSBzZSByZXBsaWUg4oCUIG9uIG1ldCBlbiDDqXZpZGVuY2UsIG9uIG5lIGNhY2hlIHBhc1xuICAgKGTDqWNpc2lvbiBkdSBjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0wNSkuIExlIEhUTUwgZXN0IGNlbHVpIGR1IG5veWF1LCBsZSBtw6ptZSBxdWUgZGFuc1xuICAgdW4gYXJ0aWNsZSBkZSBsYSBWaXRyaW5lIChmYXEuY3NzKSA7IHNldWwgbCdoYWJpbGxhZ2UgZXN0IGQnaWNpLlxuXG4gICBMZSBjYWRyZSBlc3QgY2VsdWkgZGVzIGJsb2NzIGRlIGZvcm11bGFpcmUgKC5ibG9jRW5jYWRyZSA6IGZpbGV0LCBjb2lucywgb21icmUgaW50ZXJuZSksXG4gICBwb3PDqSBzdXIgdW4gw6lsw6ltZW50IHF1ZSBsZSBNYXJrZG93biBwcm9kdWl0IOKAlCBvbiBuZSBwZXV0IHBhcyB5IG1ldHRyZSBsYSBjbGFzc2UuIExlXG4gICBwYW5uZWF1IGQnYWlkZSByw6hnbGUgZMOpasOgIHNlcyBwLCBoMywgdWwgZXQgbGkgOiBsYSByw6lwb25zZSBlbiBow6lyaXRlLCBvbiBuZSByZWRpdCByaWVuLlxuICAgTGEgcXVlc3Rpb24gZXN0IHVuIDxwPiBjb21tZSBsZXMgYXV0cmVzIDogc2EgcsOoZ2xlIGRvaXQgZ2FnbmVyIHN1ciBgLnBhbm5lYXVBaWRlIHBgLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmZhcUVuY2FkcmUge1xuICAgIG1hcmdpbjogMjBweCAwO1xuICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVJbnRlcm5lKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5mYXFFbmNhZHJlIC5mYXFFbmNhZHJlUXVlc3Rpb24ge1xuICAgIG1hcmdpbjogMCAwIDEwcHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNlN0cm9uZyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5mYXFFbmNhZHJlUmVwb25zZSA+IDpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbn1cblxuLmZhcUVuY2FkcmVSZXBvbnNlID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi8qIFVuIHNvdXMtdGl0cmUgZGUgcsOpcG9uc2UgbidhIHBhcyBsZXMgNDBweCBkZSBoYXV0IGQndW4gaDMgZGUgcGFubmVhdSA6IGlsIHZpdCBkYW5zIHVuXG4gICBjYWRyZSBkw6lqw6Agc2VycsOpLiAqL1xuLmZhcUVuY2FkcmUgLmZhcUVuY2FkcmVSZXBvbnNlIGgzIHtcbiAgICBtYXJnaW46IDE2cHggMCA2cHg7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVE9HR0xFIE1FTlUgLSBDbGFzc2UgZGUgYmFzZSByw6l1dGlsaXNhYmxlXG4gICBTY2VuZSBzbGlkZSBmbHVpZGUgZW50cmUgbGVzIG9uZ2xldHNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5kaXZPbmdsZXRNZW51IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xufVxuXG4vKiBJbmRpY2F0ZXVyIHF1aSBzbGlkZSDigJQgdG91am91cnMgbGEgY291bGV1ciBBY2NlbnQgZGUgbGEgcGFnZSAobGUgbW9kZSBkZSBsJ29uZ2xldFxuICAgcHJpbmNpcGFsIGxhIGZpeGUgcGFyIGxhIGNsYXNzZSBkdSA8Ym9keT4pIDogcGx1cyBkZSBjb3VsZXVyIHBhciB0eXBlIGQnb25nbGV0LiAqL1xuLmluZGljYXRldXJPbmdsZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYSk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgIHdpZHRoIDAuMzVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgYmFja2dyb3VuZCAwLjM1cyBlYXNlO1xuICAgIHotaW5kZXg6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qIFN3aXRjaCBDb25maWd1cmVyIC8gVGVzdGVyIC8gRGlmZnVzZXIgKi9cbiNkaXZPbmdsZXRNb2RlV3JhcHBlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4jZGl2T25nbGV0TW9kZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jTm9pcjEpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlIHtcbiAgICBwYWRkaW5nOiA4cHggMThweDtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuI2Rpdk9uZ2xldE1vZGUgLm9uZ2xldE1vZGUuYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4jZGl2T25nbGV0TW9kZSAub25nbGV0TW9kZS5kZXNhY3RpdmUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjUpO1xufVxuXG4vKiBPbmdsZXQgU3VwcHJpbWVyIDogcm91Z2UgKGFjdGlvbiBkZXN0cnVjdGl2ZSksIGNvbW1lIGxlIGxpZW4gU3VwcHJpbWVyIGRlIGxhIGxpc3RlICovXG4jZGl2T25nbGV0TW9kZSAub25nbGV0TW9kZVtkYXRhLW1vZGU9XCJzdXBwcmltZXJcIl0uYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jUm91Z2U0KTtcbn1cblxuLyogUmFwcGVsIGRlIGwnaWPDtG5lIGVuZ3JlbmFnZSBkdSB0aXRyZSBkYW5zIGwnb25nbGV0IENvbmZpZ3VyZXIgKi9cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlW2RhdGEtbW9kZT1cImNvbmZpZ1wiXSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7IC8qIGFsaWduw6kgNyAtPiA4cHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlW2RhdGEtbW9kZT1cImNvbmZpZ1wiXSBzdmcge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbn1cblxuLyogQWxlcnRlIHJlZGlyZWN0aW9uICh0ZXN0L2RpZmZ1c2lvbiBlbiBjb3VycykgKi9cbi5hbGVydGVSZWRpcmVjdGlvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdlMyk7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBwYWRkaW5nOiAxMnB4IDMwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZVBvcnRlZSk7XG4gICAgei1pbmRleDogMTA7XG4gICAgYW5pbWF0aW9uOiBhbGVydGVBcHBhcml0aW9uIDAuM3MgZWFzZTtcbn1cblxuQGtleWZyYW1lcyBhbGVydGVBcHBhcml0aW9uIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgfVxufVxuXG4vKiBCb3V0b25zICovXG4ub25nbGV0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLyogw4l0b2lsZSBkZSByYXBwZWwgwqsgw6AgY29uZmlndXJlciDCuyAoY2xhc3NlIGTDqWZpbmllIGRhbnMgX2dyaWxsZS5jc3MpIDogaG9ycyBmbHV4IGNvbW1lIHN1clxuICAgbGEgYnJpcXVlLCBzaW5vbiBzZXMgMjBweCBncmFuZGlyYWllbnQgbGEgbGlnbmUgZGUgbCdvbmdsZXQsIHF1aSBlc3QgZW4gMTRweCDigJQgZXQgc2V1bHNcbiAgIGxlcyBvbmdsZXRzIMOpdG9pbMOpcyBkZXZpZW5kcmFpZW50IHBsdXMgaGF1dHMgcXVlIGxldXJzIHZvaXNpbnMuIEVsbGUgc2UgcG9zZSBkYW5zIGxlXG4gICBwYWRkaW5nIGRyb2l0IGRlIGwnb25nbGV0LCBqYW1haXMgcGFyLWRlc3N1cyBsZSBsaWJlbGzDqS4gKi9cbi5vbmdsZXQgLnBhc3RpbGxlUHJvdmlzb2lyZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogNnB4O1xufVxuXG4ub25nbGV0LmFjdGlmIC5wYXN0aWxsZVByb3Zpc29pcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBvcGFjaXR5OiAuNTtcbn1cblxuLm9uZ2xldDpob3Zlcjpub3QoLmFjdGlmKSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5vbmdsZXQuYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNSU5JLU1FTlUgREVTIFBBTk5FQVVYIEQnQUlERSDigJQgLm9uZ2xldE1lbnVBaWRlXG5cbiAgIExlIHNldWwgbWVudSBkJ29uZ2xldHMgcXVpIG5lIHByZW5kIHBhcyBsYSBjb3VsZXVyIGRlIHNhIGZhbWlsbGUuIElsIHZpdCBEQU5TIHVuIHRleHRlXG4gICBkJ2FpZGUsIG/DuSB0b3V0IGVzdCBub2lyIDogdW4gcGF2w6kgdmlvbGV0IG91IGJsZXUgYXUgbWlsaWV1IGR1IHRleHRlIG5lIGRpdCByaWVuLCBpbCBmYWl0XG4gICBqdXN0ZSB1bmUgdGFjaGUuIElsIHJlcHJlbmQgZG9uYywgw6AgbCdpZGVudGlxdWUsIGxlIHRvZ2dsZSBkZSBsYSBiYXJyZSBkJ2FjdGlvbnMgZCd1bmVcbiAgIHNjw6huZSAoLnRvZ2dsZVNjZW5lR3JvdXBlLCBfdG9nZ2xlU2NlbmUuY3NzKSA6IGZvbmQgZ3JpcywgcGF2w6kgYmxhbmMgYm9yZMOpIGRlIG5vaXIgcXVpXG4gICBnbGlzc2UsIGxpYmVsbMOpcyBlbiBub2lyLiBVbiBzZXVsIGRlc3NpbiBkZSDCqyBjaG9peCBlbnRyZSBkZXV4IG1vdHMgwrsgZGFucyBsZSBzdHVkaW8uXG5cbiAgIElsIHNlcnQgbGVzIHBhbm5lYXV4IGRlIHNjw6huZSAoX2FpZGVTY2VuZS50d2lnKSBjb21tZSBjZXV4IGRlcyBmb3JtdWxhaXJlc1xuICAgKF9haWRlTWFya2Rvd24udHdpZykgOiBwYXJ0aWNpcGFudHMsIGxvdHMsIGNvbmZpZ3VyYXRpb24uXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZGl2T25nbGV0TWVudS5vbmdsZXRNZW51QWlkZSB7XG4gICAgZ2FwOiAwOyAvKiBsZXMgZGV1eCBtb2l0acOpcyBzZSB0b3VjaGVudCwgY29tbWUgbGUgdG9nZ2xlIGRlIGxhIGJhcnJlIGQnYWN0aW9ucyAqL1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbn1cblxuLyogUGx1cyBmb3J0IHF1ZSBsYSBjb3VsZXVyIEFjY2VudCBkZSAuaW5kaWNhdGV1ck9uZ2xldCA6XG4gICBjZSBwYXbDqS1sw6AgcmVzdGUgYmxhbmMsIHF1ZWwgcXVlIHNvaXQgbGUgbW9kZSBkZSBsYSBwYWdlIHF1aSBsJ2FmZmljaGUuICovXG4uZGl2T25nbGV0TWVudS5vbmdsZXRNZW51QWlkZSAuaW5kaWNhdGV1ck9uZ2xldCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY05vaXIxKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgIHdpZHRoIDAuMzVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgYm9yZGVyLXJhZGl1cyAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xufVxuXG4vKiBMZSBwYXbDqSDDqXBvdXNlIGxlIGJvcmQgZHUgbWVudSBkdSBjw7R0w6kgb8O5IGlsIGVzdCBjb2xsw6ksIGV0IHJlc3RlIGNhcnLDqSBjw7R0w6kgaW50w6lyaWV1ciDigJRcbiAgIGNlIHF1ZSBsZSB0b2dnbGUgZGUgbGEgYmFycmUgZCdhY3Rpb25zIGNhbGN1bGUgZW4gSlMgKEJvdXRvbnNBY3Rpb25zLnRzKS4gSWNpIGxlIG1lbnUgbidhXG4gICBqYW1haXMgcXVlIGRldXggb25nbGV0cyA6IGxlIENTUyBzdWZmaXQgw6Agc2F2b2lyIGxlcXVlbCBlc3QgYWN0aWYsIHNhbnMgdG91Y2hlciBhdSBtb2R1bGVcbiAgIGQnaW5kaWNhdGV1ciBwYXJ0YWfDqSBwYXIgdG91cyBsZXMgYXV0cmVzIG1lbnVzIChvbmdsZXRJbmRpY2F0ZXVyLnRzKS4gKi9cbi5kaXZPbmdsZXRNZW51Lm9uZ2xldE1lbnVBaWRlOmhhcygub25nbGV0OmZpcnN0LW9mLXR5cGUuYWN0aWYpIC5pbmRpY2F0ZXVyT25nbGV0IHtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSkgMCAwIHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmRpdk9uZ2xldE1lbnUub25nbGV0TWVudUFpZGU6aGFzKC5vbmdsZXQ6bGFzdC1vZi10eXBlLmFjdGlmKSAuaW5kaWNhdGV1ck9uZ2xldCB7XG4gICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1ib3JkZXJSMSkgdmFyKC0tYm9yZGVyUjEpIDA7XG59XG5cbi8qIFNpbGhvdWV0dGUgZHUgYm91dG9uIGNvbXBhY3QsIGNlbGxlIGR1IHRvZ2dsZSBkZSBsYSBiYXJyZSBkJ2FjdGlvbnMuICovXG4uZGl2T25nbGV0TWVudS5vbmdsZXRNZW51QWlkZSAub25nbGV0IHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhMTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLyogQWN0aWYgOiBsZSBtb3QgcGFzc2UgYXUgbm9pciBwbGVpbiwgaWwgbmUgYmxhbmNoaXQgcGFzIOKAlCBjJ2VzdCBsZSBwYXbDqSBxdWkgZXN0IGJsYW5jLiAqL1xuLmRpdk9uZ2xldE1lbnUub25nbGV0TWVudUFpZGUgLm9uZ2xldC5hY3RpZiB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5kaXZPbmdsZXRNZW51Lm9uZ2xldE1lbnVBaWRlIC5vbmdsZXQuYWN0aWYgLnBhc3RpbGxlUHJvdmlzb2lyZSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi8qIE1hc3F1ZXIgbGVzIHRvZ2dsZXMgc2VjdGlvbiBub24gcGVydGluZW50cyAqL1xuLmRpdk9uZ2xldE1lbnUubWFzcXVlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBNYXNxdWVyIGxlcyBib3V0b25zIGluZGl2aWR1ZWxzIG5vbiBwZXJ0aW5lbnRzICovXG4ub25nbGV0Lm1hc3F1ZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogUmVzcG9uc2l2ZSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDk5OXB4KSB7XG4gICAgI2Rpdk9uZ2xldFNlY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgIC5vbmdsZXQge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTUVOVSBBSk9VVEVSIChDaG9peCBkJ8OpbMOpbWVudCDDoCBjcsOpZXIpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubWVudUFqb3V0ZXIgaDMge1xuICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xufVxuXG4ubGlnbmVTZWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiAwIDE4MnB4OyAvKiBWZXJ0aWNhbDogMCAoZ8OpcsOpIHBhciBtYXJnaW4tYm90dG9tKSB8IEhvcml6b250YWw6IGxhcmdldXIgZCd1bmUgYnJpcXVlICovXG59XG5cbi5saWduZVNlY3Rpb25zIC5zZWN0aW9uQWpvdXRlciB7XG4gICAgZmxleDogMCAwIGF1dG87IC8qIE5lIHBhcyDDqXRpcmVyLCBnYXJkZXIgbGEgdGFpbGxlIG5hdHVyZWxsZSAqL1xufVxuXG4uc2VjdGlvbkFqb3V0ZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XG59XG5cbi8qIE1hc3F1YWdlIGluaXRpYWwgcG91ciDDqXZpdGVyIGxlIGZsYXNoIChkZXNrdG9wIHVuaXF1ZW1lbnQpICovXG5AbWVkaWEgKG1pbi13aWR0aDogMTAwMHB4KSB7XG4gICAgLnNlY3Rpb25Bam91dGVyW2RhdGEtc2VjdGlvbl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5zZWN0aW9uQWpvdXRlcltkYXRhLXNlY3Rpb25dLnZpc2libGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG59XG5cbi5zZWN0aW9uQWpvdXRlciBoNCB7XG4gICAgbWFyZ2luOiAwIDAgMTBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xufVxuXG4uc2VjdGlvbkFqb3V0ZXIgaDQ6OmJlZm9yZSB7XG4gICAgY29udGVudDogXCIrIFwiO1xufVxuXG4uYnJpcXVlc0Fqb3V0ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi5icmlxdWVHcm91cGVzOjpiZWZvcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Mik7XG59XG5cbi5icmlxdWVEaXN0cmlidXRpb25zOjpiZWZvcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Mik7XG59XG5cbi5icmlxdWVDb25maWd1cmF0aW9uczo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDIpO1xufVxuXG4uYnJpcXVlQWZmaWNoYWdlczo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDIpO1xufVxuXG4uYnJpcXVlU2NlbmVzOjpiZWZvcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Mik7XG59XG5cbi5icmlxdWUuYnJpcXVlRGlzdHJpYnV0aW9ucyxcbi5icmlxdWUuYnJpcXVlR3JvdXBlcyB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBGaWx0cmUgcGFyIHRhZ3MgZXQgZW50csOpZXMgZGFucyBsYSBzZWN0aW9uIFNjZW5lcyA6XG4gICBsZSBkZXNpZ24gZHUgcGFubmVhdSB2aWVudCBkdSBjb21wb3NhbnQgY29tbXVuICg1NV9maWx0cmVzLmNzcykuICovXG5cbi5kaXZGaWx0cmVab25lIC5icmlxdWVzQWpvdXRlciB7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbi5icmlxdWVTY2VuZXMubWFzcXVlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uYnJpcXVlR3JvdXBlcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4uYnJpcXVlRGlzdHJpYnV0aW9ucyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4uYnJpcXVlQ29uZmlndXJhdGlvbnMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLmJyaXF1ZUFmZmljaGFnZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLmJyaXF1ZVNjZW5lcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJSSVFVRVMgRFUgU0PDiU5BUklPIFBBUiBUWVBFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBCcmlxdWUgQnJvdWlsbG9uIChlbiBjb3VycyBkZSBjcsOpYXRpb24pICovXG4uYnJpcXVlQnJvdWlsbG9uIHtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG59XG5cbi8qIENvdWxldXJzIGRlcyBicmlxdWVzIGR1IHNjw6luYXJpbyBwYXIgdHlwZSAqL1xuLmJyaXF1ZS5icmlxdWVHcm91cGVzIHsgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpOyB9XG4uYnJpcXVlLmJyaXF1ZURpc3RyaWJ1dGlvbnMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7IH1cbi5icmlxdWUuYnJpcXVlQ29uZmlndXJhdGlvbnMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7IH1cbi5icmlxdWUuYnJpcXVlQWZmaWNoYWdlcyB7IGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTsgfVxuLmJyaXF1ZS5icmlxdWVTY2VuZXMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7IH1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBEUkFHICYgRFJPUFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmhhbmRsZURyYWcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDZweDtcbiAgICByaWdodDogNnB4O1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMTJweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xufVxuXG4uaGFuZGxlRHJhZzpob3ZlciB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBjdXJzb3I6IGdyYWI7XG59XG5cbi5oYW5kbGVEcmFnOmFjdGl2ZSB7XG4gICAgY3Vyc29yOiBncmFiYmluZztcbn1cblxuLyogR3JpbGxlIHN0YXRpcXVlIChwYWdlIMKrIFZvaXIgbGEgY29uZmlnIMK7IGRlcyBhcGVyw6d1cykgOiBsYSBwb2lnbsOpZSByZXN0ZSB1biByZXDDqHJlIHZpc3VlbCwgc2FucyBhZmZvcmRhbmNlIGRlIGRyYWcgKi9cbi5zY2VuYXJpb0dyaWxsZVN0YXRpcXVlIC5oYW5kbGVEcmFnOmhvdmVyIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKiDDiXRhdCBwZW5kYW50IGxlIGRyYWcgKi9cbi5icmlxdWVEcmFnZ2FibGUuZHJhZ2dpbmcge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDtcbiAgICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG4vKiBab25lIGRlIGRyb3AgKi9cbiNzY2VuYXJpb0dyaWxsZS5mb3JtdWxhaXJlQWN0aWY6aG92ZXIgLmJyaXF1ZS5kcmFnT3Zlcixcbi5icmlxdWUuZHJhZ092ZXIge1xuICAgIGJveC1zaGFkb3c6IC00cHggLTRweCAwIHZhcigtLWNBY2NlbnQzKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg0cHgsIDRweCkgc2NhbGUoMSk7XG4gICAgdHJhbnNpdGlvbjogLjVzIGVhc2U7XG59XG5cbi8qIFNjZW5lIEZMSVAgYXUgZHJvcCAqL1xuLmJyaXF1ZS5hbmltZURyb3Age1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBlYXNlO1xufVxuXG4vKiBGYW50w7RtZSBwZW5kYW50IGxlIGRyYWcgKi9cbi5kcmFnRmFudG9tZSB7XG4gICAgb3BhY2l0eTogMC45O1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlUG9ydGVlKTtcbiAgICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJPVVRPTiBERSBGRVJNRVRVUkUgKC5tb2RhbGVDbG9zZSkg4oCUIHNvdXJjZSB1bmlxdWUgKGRvY3MvZGVzaWduU3lzdGVtL2JvdXRvbkZlcm1ldHVyZS5tZClcblxuICAgTGEgY3JvaXggZXN0IGRlc3NpbsOpZSBwYXIgOjpiZWZvcmUgKG1hc2sgU1ZHIGNpLWRlc3NvdXMpIDogZW4gSFRNTCBsZSBib3V0b24gcmVzdGUgVklERSDigJRcbiAgIG5lIEpBTUFJUyB5IG1ldHRyZSDDlyAvICZ0aW1lczsgLyB0ZXh0ZS4gUsOpdXRpbGlzYWJsZSA6IFZJREUgPSBjcm9peCBjZW50csOpZSA7IGF2ZWMgdW5cbiAgIGVuZmFudCAubW9kYWxlQ2xvc2VUZXh0ZSA9IGxhIG3Dqm1lIGJvw650ZSBzJ8OpbGFyZ2l0IGV0IHVuIGxpYmVsbMOpIHMnYWpvdXRlIMOgIEdBVUNIRSBkZSBsYVxuICAgY3JvaXggKGV4LiDCqyBQcmVuZHJlIGxhIG1haW4g4pyVIMK7KS4gUGFzIGRlIHBhZGRpbmcgaG9yaXpvbnRhbCA6IGxhIGNyb2l4IGEgZMOpasOgIH42cHggZGVcbiAgIG1hcmdlIGludGVybmUgw6AgZHJvaXRlIChtYXNrIDbihpIxOCBzdXIgdmlld0JveCAyNCksIGMnZXN0IC5tb2RhbGVDbG9zZVRleHRlIHF1aSByZWRvbm5lXG4gICBsZSBtw6ptZSBhaXIgw6AgZ2F1Y2hlIOKGkiDDqXF1aWxpYnLDqS5cblxuICAgSWNpIGxhIHNpbGhvdWV0dGUgR8OJTsOJUkFMRSAoYm/DrnRlIHNvdXBsZSwgY3JvaXggMjBweCDigJQgYmFycmUgZCdhcGVyw6d1IMOpY3JhbikuIExlc1xuICAgY29udGV4dGVzIG4nw6ljcml2ZW50IHF1ZSBsZXVycyDDqWNhcnRzLCBBUFLDiFMgbGV1ciBAaW1wb3J0IGRlIGNlIGZpY2hpZXIgOlxuICAgLSBtb2RhbGVzIFN0dWRpbyAoNTZfc2NlbmFyaW8vX21vZGFsZS5jc3MpIDogYm/DrnRlIGZpeGUgNDTDlzQ0LCBjcm9peCAyNCA7XG4gICAtIHN1cmNvdWNoZSBhcGVyw6d1IChjb21wb3NhbnRzL3N1cmNvdWNoZVByZXZpZXcuY3NzKSA6IGlkZW0gKyBtYXNxdWUgwqsgcGxlaW4gw6ljcmFuIMK7LlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm1vZGFsZUNsb3NlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiAyNXB4O1xuICAgIHBhZGRpbmc6IHZhcigtLWdhcERlZmF1dCkgdmFyKC0tZ2FwUmVkdWl0KTsgLyogdmVydGljYWwgYWxpZ27DqSBzdXIgLmN0YTE0IChtw6ptZSByeXRobWUgZGFucyBsYSBiYXJyZSBhcGVyw6d1KSAqL1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi5tb2RhbGVDbG9zZTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBvcmRlcjogMTsgLyogY3JvaXggw6AgZHJvaXRlIGQndW4gw6l2ZW50dWVsIC5tb2RhbGVDbG9zZVRleHRlIChzZXVsZSA9IGNlbnRyw6llLCBpbmNoYW5nw6kpICovXG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2xpbmUgeDE9JzE4JyB5MT0nNicgeDI9JzYnIHkyPScxOCcvJTNFJTNDbGluZSB4MT0nNicgeTE9JzYnIHgyPScxOCcgeTI9JzE4Jy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xuICAgIC13ZWJraXQtbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2xpbmUgeDE9JzE4JyB5MT0nNicgeDI9JzYnIHkyPScxOCcvJTNFJTNDbGluZSB4MT0nNicgeTE9JzYnIHgyPScxOCcgeTI9JzE4Jy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xufVxuXG4ubW9kYWxlQ2xvc2U6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLyogTGliZWxsw6kgb3B0aW9ubmVsIMOgIGdhdWNoZSBkZSBsYSBjcm9peCAoY2YuIGVuLXTDqnRlKS4gTGUgcGFkZGluZyBnYXVjaGUgZG9ubmUgYXUgdGV4dGVcbiAgIGxlIG3Dqm1lIGFpciAofjZweCkgcXVlIGxhIG1hcmdlIGludGVybmUgZGUgbGEgY3JvaXggw6AgZHJvaXRlIOKGkiB2aXN1ZWxsZW1lbnQgw6lxdWlsaWJyw6kuICovXG4ubW9kYWxlQ2xvc2VUZXh0ZSB7XG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1nYXBSZWR1aXQpO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpOyAvKiBtw6ptZSB0ZWludGUgcXVlIGxhIGNyb2l4ICovXG59XG4iLCIvKiBCb3V0b24gZGUgZmVybWV0dXJlICgubW9kYWxlQ2xvc2UpIDogc2lsaG91ZXR0ZSBldCBjcm9peCBkYW5zIGxlIGNvbXBvc2FudCDigJQgaWNpLFxuICAgcGx1cyBiYXMsIHVuaXF1ZW1lbnQgbCfDqWNhcnQgZGVzIG1vZGFsZXMgU3R1ZGlvIChib8OudGUgZml4ZSA0NMOXNDQsIGNyb2l4IDI0KS4gKi9cbkBpbXBvcnQgJy4uLy4uL2NvbXBvc2FudHMvYm91dG9uRmVybWV0dXJlLmNzcyc7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCT1VUT05TIEJSSVFVRSBBTklNQVRJT04gKGluZm8gKyBhcGVyw6d1KVxuICAgR3JvdXDDqXMgZW4gaGF1dCDDoCBkcm9pdGUsIGPDtHRlIMOgIGPDtHRlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYm91dG9uc0JyaXF1ZVNjZW5lIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAzcHg7XG4gICAgcmlnaHQ6IDNweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogMnB4O1xuICAgIHotaW5kZXg6IDI7XG59XG5cbi5ib3V0b25zQnJpcXVlU2NlbmUgYnV0dG9uIHtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgcGFkZGluZzogM3B4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggdmFyKC0tY09tYnJlKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMsIGJhY2tncm91bmQgMC4xNXM7XG59XG5cbi5ib3V0b25zQnJpcXVlU2NlbmUgYnV0dG9uOmhvdmVyIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHZhcigtLWNPbWJyZUZvcnRlKTtcbn1cblxuLmJvdXRvbnNCcmlxdWVTY2VuZSBidXR0b24gc3ZnIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgLSBTVFlMRVMgR8OJTsOJUklRVUVTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kYWxlIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgICB3aWR0aDogOTB2dztcbiAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlTW9kYWxlKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLm1vZGFsZTo6YmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPdmVybGF5KTtcbn1cblxuLm1vZGFsZUNvbnRlbnUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1heC1oZWlnaHQ6IDgwdmg7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgLSBWQVJJQU5URVMgUEFSIENPTlRFWFRFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBTY2VuZXMgOiBoZWFkZXIgamF1bmUsIHBsdXMgbGFyZ2UgKi9cbi5tb2RhbGVTY2VuZXMge1xuICAgIG1heC13aWR0aDogNjAwcHg7XG59XG5cbi5tb2RhbGVTY2VuZXMgLm1vZGFsZUhlYWRlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4vKiBQYXJ0aWNpcGFudHMgOiBoZWFkZXIgY3lhbiAqL1xuLm1vZGFsZVBhcnRpY2lwYW50cyAubW9kYWxlSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi8qIE1vZGUgdGVzdCA6IGhlYWRlciBsYXZhbmRlICovXG4ubW9kYWxlSGVhZGVyVGVzdCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpICFpbXBvcnRhbnQ7XG59XG5cbi8qIFLDqWNhcCBlcnJldXIgOiBoZWFkZXIgcm91Z2UsIHBsdXMgbGFyZ2UgcG91ciBsZSBzdGVwcGVyICovXG4ubW9kYWxlUmVjYXAge1xuICAgIG1heC13aWR0aDogNjAwcHg7XG59XG5cbi5tb2RhbGVSZWNhcCAubW9kYWxlSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLm1vZGFsZUhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLm1vZGFsZUhlYWRlciBoMyB7XG4gICAgZmxleDogMTtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLm1vZGFsZUljb25lIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbn1cblxuLyogQm91dG9uIGRlIGZlcm1ldHVyZSA6IHNpbGhvdWV0dGUgZXQgY3JvaXggZGFucyBjb21wb3NhbnRzL2JvdXRvbkZlcm1ldHVyZS5jc3MgKGltcG9ydMOpIGVuXG4gICB0w6p0ZSkuIEljaSBsJ8OpY2FydCBkZXMgbW9kYWxlcyBTdHVkaW8gOiBib8OudGUgZml4ZSA0NMOXNDQsIGNyb2l4IDI0LiAqL1xuLm1vZGFsZUNsb3NlIHtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLm1vZGFsZUNsb3NlOjpiZWZvcmUge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbn1cblxuLm1vZGFsZUNvcnBzIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgLyogU2Nyb2xsIGF1dG8gcXVhbmQgbGEgbW9kYWxlIGTDqXBhc3NlIDgwdmggOiBzYW5zIG1pbi1oZWlnaHQ6MCBsZSBjb3JwcyBuZSBzaHJpbmsgcGFzXG4gICAgICAgc291cyBzb24gY29udGVudSBldCBsZSBiYXMgc2VyYWl0IGNsaXBww6kuIExlIGhlYWRlciAoZmxleC1zaHJpbms6MCkgcmVzdGUgdmlzaWJsZS4gKi9cbiAgICBtaW4taGVpZ2h0OiAwO1xufVxuXG4vKiBCYXJyZSBkZSBzY3JvbGwgVklTSUJMRSAobm9uLW92ZXJsYXkpIDogbCd1dGlsaXNhdGV1ciBkb2l0IHZvaXIgcXUnaWwgcGV1dCBzY3JvbGxlciwgc2lub24gaWxcbiAgIG5lIGNvbXByZW5kIHBhcyBxdSdpbCBtYW5xdWUgZHUgY29udGVudS4gTcOqbWUgcGF0dGVybiBxdWUgbGEgcG9wLXVwIGRlIHNhaXNpZSAoc2Fpc2llLmNzcykuXG4gICBQYXMgZGUgc2Nyb2xsYmFyLWNvbG9yIDogc3VyIENocm9tZSDiiaUxMjEgaWwgZMOpc2FjdGl2ZXJhaXQgY2VzIHLDqGdsZXMgZXQgcmVtZXR0cmFpdCBsYSBiYXJyZVxuICAgb3ZlcmxheSBhdXRvLW1hc3F1w6llLiAqL1xuLm1vZGFsZUNvcnBzOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDEycHg7XG59XG5cbi5tb2RhbGVDb3Jwczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLm1vZGFsZUNvcnBzOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXI0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5tb2RhbGVDb3JwcyBoMSxcbi5tb2RhbGVDb3JwcyBoMixcbi5tb2RhbGVDb3JwcyBoMyB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4ubW9kYWxlQ29ycHMgaDE6Zmlyc3QtY2hpbGQsXG4ubW9kYWxlQ29ycHMgaDI6Zmlyc3QtY2hpbGQsXG4ubW9kYWxlQ29ycHMgaDM6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5tb2RhbGVDb3JwcyBwIHtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG59XG5cbi5tb2RhbGVFcnJldXIge1xuICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubW9kYWxlRXJyZXVyIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgLSBCQVJSRSBEJ09VVElMU1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm1vZGFsZUJhcnJlT3V0aWxzRmxleCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG59XG5cbi5tb2RhbGVDb21wdGV1ciB7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIEJPVVRPTlMgREUgVFJJIC8gQUNUSU9OU1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm1vZGFsZUJvdXRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4vKiBMZSBib3V0b24gZGlzY3JldCAoZXgtY3RhTW9kYWxlLCByZW5vbW3DqSAyMDI2LTA3LTE4IDogbsOpIGRhbnMgbGVzIG1vZGFsZXMsIGlsXG4gICB2aXQgcGFydG91dCDigJQgYmxvY3MgZCdvbmdsZXQsIGZvcm11bGFpcmVzLCBUUykuIE3Dqm1lIHBhZGRpbmcgcXVlIHRvdXMgbGVzXG4gICBib3V0b25zIGNvbXBhY3RzIDogLS1wYWRkaW5nQ3RhMTQgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4LCB1biAuY3RhRGlzY3JldCBjw7R0b2llXG4gICB1biAuY3RhMTQgZGFucyBsZXMgYmFycmVzIOKAlCBkZXV4IHBhZGRpbmdzIGRpZmbDqXJlbnRzLCBjJ2VzdCB1bHRyYSB2aXNpYmxlKS4gKi9cbi8qIOKaoO+4jyBMYSBiYXNlIC5jdGFEaXNjcmV0IChiYXNlICsgaG92ZXIgKyBkw6lzYWN0aXbDqSBjaS1kZXNzb3VzKSBlc3QgY29wacOpZSBkYW5zXG4gICBzdHVkaW9WaXRyaW5lL2Fzc2V0cy92aXRyaW5lL2Nzcy9jdGFEaXNjcmV0LmNzcyAoYm91dG9ucyBkZXMgY2FydGVzIGRlIGxhIHBhZ2UgYXBlcsOndSkuXG4gICBTaSB0dSBtb2RpZmllcyBjZXMgcsOoZ2xlcyDihpIgZGVtYW5kZXIgYXUgUE8gcydpbCBmYXV0IGxhIHLDqXBlcmN1dGVyIHN1ciBsYSBjb3BpZSB2aXRyaW5lLlxuICAgTGVzIHZhcmlhbnRlcyAuY3RhRGlzY3JldC5hY3RpZiBjb250ZXh0dWVsbGVzIChtb2RhbGVzKSByZXN0ZW50IHByb3ByZXMgYXUgc3R1ZGlvLiAqL1xuLmN0YURpc2NyZXRQcmltYWlyZSxcbi5jdGFEaXNjcmV0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIHVuIDxhPiBob3JzIGJhcnJlIGZsZXggcmVzdGUgdW4gYm91dG9uIChwYWRkaW5nIHZlcnRpY2FsIHLDqWVsKSDigJQgbcOqbWUgcsOoZ2xlIHF1ZSAuY3RhMTQgKi9cbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0N0YTE0KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhVGV4dGUpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMsIGNvbG9yIDAuMnMsIGJvcmRlci1jb2xvciAwLjJzO1xufVxuXG4uY3RhRGlzY3JldDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuLmN0YURpc2NyZXRQcmltYWlyZTpkaXNhYmxlZCxcbi5jdGFEaXNjcmV0OmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG4uY3RhRGlzY3JldFByaW1haXJlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50dCk7XG59XG5cbi5jdGFEaXNjcmV0UHJpbWFpcmU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50dCk7XG59XG5cbi8qIFZhcmlhbnRlIDxhPiBkw6lzYWN0aXbDqSAodW4gbGllbiBuZSBjb25uYcOudCBwYXMgOmRpc2FibGVkKSDigJQgbGUgYmxldSBjb21tZSBsZSBncmlzIDogw6AgbGFcbiAgIGxpbWl0ZSBkJ8OpdsOpbmVtZW50cywgbGUgYm91dG9uIGRlIGNyw6lhdGlvbiBkZSBsYSBsaXN0ZSBlc3QgdW4gPGE+IGx1aSBhdXNzaS4gKi9cbi5jdGFEaXNjcmV0LmRpc2FibGVkLFxuLmN0YURpc2NyZXRQcmltYWlyZS5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uY3RhRGlzY3JldDpkaXNhYmxlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbn1cblxuLmN0YURpc2NyZXQuYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4vKiBDb3VsZXVyIGR1IGJvdXRvbiBhY3RpZiBzZWxvbiBsZSBjb250ZXh0ZSAqL1xuLm1vZGFsZVBhcnRpY2lwYW50cyAuY3RhRGlzY3JldC5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0FjY2VudDIpO1xufVxuXG4ubW9kYWxlU2NlbmVzIC5jdGFEaXNjcmV0LmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Mik7XG59XG5cbi5tb2RhbGVEaXN0cmlidXRpb25zIC5jdGFEaXNjcmV0LmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Mik7XG59XG5cbi8qIE1vZGUgdGVzdCA6IGJvdXRvbiBhY3RpZiBsYXZhbmRlICovXG4ubW9kYWxlQ29ycHNUZXN0IC5jdGFEaXNjcmV0LmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi8qIExhYmVsIFwiRG9ubsOpZXMgZGUgdGVzdFwiIHNvdXMgbGUgY29tcHRldXIgKi9cbi5tb2RhbGVUZXN0TGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gVE9HR0xFIEFDVElGL0TDiVNBQ1RJVsOJXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4udG9nZ2xlQWN0aWYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDM4cHg7XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0IHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbn1cblxuLnRvZ2dsZVNsaWRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4udG9nZ2xlU2xpZGVyOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgbGVmdDogMnB4O1xuICAgIGJvdHRvbTogMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xufVxuXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQzKTtcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlU2xpZGVyOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcbn1cblxuLyogTGV0dHJlcyB0cm91dsOpZXMgcGFyIGxhIHJlY2hlcmNoZSAo4omlNCBjYXJhY3TDqHJlcykg4oCUIGNvdWxldXIgcGx1dMO0dCBxdWUgZ3Jhcy4gKi9cbi5yZWNoZXJjaGVNYXRjaCB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbn1cblxuLyogw4l0YXQgYmFubmkgKi9cbi5wYXJ0aWNpcGFudEJhbm5pIHtcbiAgICBvcGFjaXR5OiAwLjU7XG59XG5cbi5wYXJ0aWNpcGFudEJhbm5pIC5wYXJ0aWNpcGFudE5vbSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgLSBQUsOJVklTVUFMSVNBVElPTiBESVNUUklCVVRJT05cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5tb2RhbGVEaXN0cmlidXRpb25zIC5tb2RhbGVIZWFkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ubW9kYWxlQXZlcnRpc3NlbWVudCB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuKi9cblxuLmxpc3RlUHJldmlzdWFsaXNhdGlvbiB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMTJweCAwO1xufVxuXG4ubGlzdGVQcmV2aXN1YWxpc2F0aW9uIC5ibG9jSXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4ubGlzdGVQcmV2aXN1YWxpc2F0aW9uIC5ibG9jSXRlbTpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG4ucHJldmlzdWFsaXNlck51bWVybyB7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtaW4td2lkdGg6IDI4cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ucHJldmlzdWFsaXNlck1pbnV0ZSB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgbWluLXdpZHRoOiAzNnB4O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4ucHJldmlzdWFsaXNlclBlcmRhbnQge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG59XG5cbi5wcmV2aXN1YWxpc2VySW50ZXJ2YWxsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLnByZXZpc3VhbGlzZXJJbnRlcnZhbGxlTGFiZWwge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4ucHJldmlzdWFsaXNlclJhaXNvbiB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xuICAgIG1pbi13aWR0aDogMjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLnByZXZpc3VhbGlzZXJQaWVkIHtcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgLSBWT0NBQlVMQUlSRSBERSBMJ0FOSU1BVElPTlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogTGllbiBkaXNjcmV0IHNvdXMgbGVzIGNoYW1wcyBkZSBsJ2FuaW1hdGlvbiwgb3V2cmUgbGEgbW9kYWxlIGRlIHZvY2FidWxhaXJlLiAqL1xuLnZvY2FidWxhaXJlU2NlbmUge1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG59XG5cbi52b2NhYnVsYWlyZUxpZW4ge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4udm9jYWJ1bGFpcmVMaWVuOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDQpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4udm9jYWJ1bGFpcmVDaGFtcCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbn1cblxuLyogQm91dG9uIGFsaWduw6kgc3VyIGxlIGJvcmQgZ2F1Y2hlIGRlcyBjaGFtcHMgKHBhcyBkZSByw6ktaW5kZW50YXRpb24sIGNvbnRyYWlyZW1lbnQgw6AgLmZvcm1BY3Rpb25zKS4gKi9cbi52b2NhYnVsYWlyZUFjdGlvbnMge1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIG1lbnUgLyBtb3RzIDogZ2FwIGTDqWxpYsOpcsOpIGV0IMOpcXVpbGlicsOpIChsZSBociBnbG9iYWwgZXN0IMOgIDMwcHgsIHRyb3ApLiBMZSBjaGFtcFxuICAgYXUtZGVzc3VzIGEgZMOpasOgIDEycHggZGUgbWFyZ2UgYmFzc2Ug4oaSIDRweCBlbiBoYXV0ICsgMTZweCBlbiBiYXMgPSAxNnB4IGRlIGNoYXF1ZSBjw7R0w6kuICovXG4ubW9kYWxlVm9jYWJ1bGFpcmUgaHIge1xuICAgIG1hcmdpbjogNHB4IDAgMTZweDtcbn1cblxuLnZvY2FidWxhaXJlQ2hhbXAgbGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiBQYXMgZCdpY8O0bmUgaWNpIDogb24gYWxpZ25lIGxlIHRpdHJlIHN1ciBsZSBjb3JwcyAoY29tbWUgLm1vZGFsZVJlY2FwKS4gKi9cbi5tb2RhbGVWb2NhYnVsYWlyZSAubW9kYWxlSGVhZGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgwqsgQU5JTUFUSU9OUyBTSU1JTEFJUkVTIMK7XG4gICBKdW1lbGxlcyBkZSBmYW1pbGxlIGQndW5lIGFuaW1hdGlvbiBkdSBzY8OpbmFyaW9cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5tb2RhbGVTaW1pbGFpcmVzIHtcbiAgICBtYXgtd2lkdGg6IDUyMHB4O1xufVxuXG4vKiBQYXMgZCdpY8O0bmUgaWNpIG5vbiBwbHVzIDogdGl0cmUgYWxpZ27DqSBzdXIgbGUgY29ycHMgKGNvbW1lIC5tb2RhbGVSZWNhcCkuICovXG4ubW9kYWxlU2ltaWxhaXJlcyAubW9kYWxlSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLm1vZGFsZVNpbWlsYWlyZXMgLm1vZGFsZUNvcnBzIHtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG59XG5cbi5zaW1pbGFpcmVzSW50cm8ge1xuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5zaW1pbGFpcmVzTGlzdGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4uc2ltaWxhaXJlc0NhcnRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xufVxuXG4vKiBDYXJ0ZSBkZSBsJ2FuaW1hdGlvbiBlbiBwbGFjZSA6IGZvbmQgZGlzY3JldCwgcGFzIGRlIGJvdXRvbiAoanVzdGUgbGUgbGliZWxsw6kgZCfDqXRhdCkgKi9cbi5zaW1pbGFpcmVzQ2FydGVBY3R1ZWxsZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4vKiA1MnB4IGRlIGRlc3NpbiwgbGEgcGV0aXRlIGRlcyBkZXV4IHRhaWxsZXMgZHUgcHJvamV0ICg1NF9pY29uZXMuY3NzKSwgc2FucyBhaXIuICovXG4uc2ltaWxhaXJlc0ljb25lIHtcbiAgICB3aWR0aDogNTJweDtcbiAgICBoZWlnaHQ6IDUycHg7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnNpbWlsYWlyZXNJbmZvcyB7XG4gICAgZmxleDogMTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpOyAvKiBhbGlnbsOpIDYgLT4gOHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4uc2ltaWxhaXJlc0luZm9zIGg0IHtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5zaW1pbGFpcmVzQWN0dWVsbGUge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4uc2ltaWxhaXJlc0FjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRm9ybXVsYWlyZSBhY3RpZiA6IGF0dMOpbnVhdGlvbiBkZXMgYnJpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBBdHTDqW51YXRpb24gZGVzIGJyaXF1ZXMgbm9uIGFjdGl2ZXMgcXVhbmQgdW4gZm9ybXVsYWlyZSBlc3Qgb3V2ZXJ0ICovXG4jc2NlbmFyaW9HcmlsbGUuZm9ybXVsYWlyZUFjdGlmIC5icmlxdWU6bm90KC5icmlxdWVBY3RpdmUpOm5vdCg6aG92ZXIpLFxuLmJyaXF1ZXNBam91dGVyLmZvcm11bGFpcmVBY3RpZiAuYnJpcXVlOm5vdCguYnJpcXVlQWN0aXZlKTpub3QoOmhvdmVyKSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jTm9pcjUpO1xuICAgIG9wYWNpdHk6IC43O1xufVxuXG4vKiBBdHTDqW51YXRpb24gZGVzIGJyaXF1ZXMgcXVhbmQgbGUgbWVudSBkJ2Fqb3V0IGVzdCBvdXZlcnQgKHNhdWYgYnJpcXVlICspICovXG4jc2NlbmFyaW9HcmlsbGUubWVudUFqb3V0ZXJBY3RpZiAuYnJpcXVlOm5vdCguYnJpcXVlQWpvdXRlcikge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY05vaXI1KTtcbiAgICBvcGFjaXR5OiAuNztcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU2NlbmUgYXByw6hzIGNvbmZpcm1hdGlvblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5Aa2V5ZnJhbWVzIGJyaXF1ZVJldG91ciB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IC43O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbn1cblxuI3NjZW5hcmlvR3JpbGxlLmFwcmVzQ29uZmlybWF0aW9uIC5icmlxdWU6bm90KC5icmlxdWVNb2RpZmllZSkge1xuICAgIGFuaW1hdGlvbjogYnJpcXVlUmV0b3VyIDAuNHMgZWFzZSBmb3J3YXJkcztcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBBUEVSw4dVIERFUyBJTUFHRVMgKEZvcm11bGFpcmUgdXBsb2FkKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNoYW1wQXZlY1ZpZ25ldHRlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4vKiAudmlnbmV0dGVJbWFnZUV4aXN0YW50ZSB1dGlsaXNlIC5ibG9jRW5jYWRyZSAoZMOpZmluaSBkYW5zIF9mb3JtdWxhaXJlcy5jc3MpICovXG5cbi52aWduZXR0ZUltYWdlRXhpc3RhbnRlIGltZyB7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMTBweCAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgR0FMRVJJRSBQVUJMSVFVRSAobW9kYWxlIGRlIGNob2l4IGQnaW1hZ2UpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBSw6hnbGUgZCdhdXRvcml0w6kgOiBsZXMgw6l0YXRzIGR1IGNoYW1wIGltYWdlIHNvbnQgcGlsb3TDqXMgcGFyIGwnYXR0cmlidXQgaGlkZGVuXG4gICAoZ2FsZXJpZUltYWdlcy50cykuIFNhbnMgIWltcG9ydGFudCwgbGVzIGRpc3BsYXkgcG9zw6lzIGFpbGxldXJzIChleC4gbm95YXVcbiAgIGJ1dHRvbi5jdGFBbm51bGVyIHsgZGlzcGxheTogYmxvY2sgfSkgZ2FnbmVudCBzdXIgbGUgaGlkZGVuIGR1IG5hdmlnYXRldXIuICovXG4uY2hhbXBBdmVjVmlnbmV0dGUgW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogU8OpcGFyYXRldXIgZW50cmUgbGVzIGRldXggZmHDp29ucyBkZSBjaG9pc2lyICh1cGxvYWQgwqsgb3UgY2hhcmdlciBkZXB1aXMgOiDCuyBnYWxlcmllcykgKi9cbi5jaGFtcENob2l4SW1hZ2UgLmdhbGVyaWVPdSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAycHggMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG59XG4uY2hhbXBDaG9peEltYWdlIGxhYmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG5cbi8qIFJhbmfDqWUgZGVzIGJvdXRvbnMgZGUgZ2FsZXJpZXMgKHB1YmxpcXVlIC8gw6l2w6luZW1lbnQgLyB0b3V0ZXMgbWVzIGltYWdlcykgKi9cbi5nYWxlcmllQm91dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbn1cblxuLmdhbGVyaWVHcmlsbGUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTIwcHgsIDFmcikpO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG5cbi5nYWxlcmllVmlnbmV0dGUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmdhbGVyaWVWaWduZXR0ZSBpbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGFzcGVjdC1yYXRpbzogMTYgLyA5O1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uZ2FsZXJpZVZpZ25ldHRlOmhvdmVyIGltZyB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHZhcigtLWNPbWJyZUZvcnRlKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZPUk1VTEFJUkUgTE9UUyBEWU5BTUlRVUVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNkaXN0cmlidXRpb25zQ29udGFpbmVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4vKiAuZGlzdHJpYnV0aW9uSXRlbSB1dGlsaXNlIC5ibG9jRW5jYWRyZSAoZMOpZmluaSBkYW5zIF9mb3JtdWxhaXJlcy5jc3MpICovXG5cbi8qIExlIGJvdXRvbiBzdXBwcmltZXIgZGUgbG90IHV0aWxpc2UgLmN0YVN1cHByaW1lciAoZMOpZmluaSBkYW5zIF9mb3JtdWxhaXJlcy5jc3MpICovXG4uZGlzdHJpYnV0aW9uSXRlbSA+IC5jdGFTdXBwcmltZXIge1xuICAgIG1hcmdpbi10b3A6IDE1cHg7XG59XG5cbi5kaXN0cmlidXRpb25JdGVtUm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi5kaXN0cmlidXRpb25JdGVtTGFiZWwge1xuICAgIGZsZXg6IDE7XG59XG5cbi5kaXN0cmlidXRpb25JdGVtU3RvY2sge1xuICAgIHdpZHRoOiAxMDBweDtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uZGlzdHJpYnV0aW9uSXRlbSAuY2hhbXBGb3JtdWxhaXJlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuKi9cblxuQG1lZGlhIChtYXgtd2lkdGg6IDY1MHB4KSB7XG4gICAgLmRpc3RyaWJ1dGlvbkl0ZW1Sb3cge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIH1cbn1cblxuI2J0bkFqb3V0ZXJEaXN0cmlidXRpb24sICNidG5Bam91dGVyRXF1aXBlIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwIDIwcHggMjBweCAyMHB4O1xufVxuXG4jYnRuQWpvdXRlckRpc3RyaWJ1dGlvbiB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnQ0KTtcbn1cblxuLyogU291cmNlIMOJcXVpcGVzIDogY291bGV1ciBkZSBsYSBzZWN0aW9uIFBhcnRpY2lwYW50cyAqL1xuI2J0bkFqb3V0ZXJFcXVpcGUge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG59XG5cbiNidG5Bam91dGVyRGlzdHJpYnV0aW9uOmhvdmVyLCAjYnRuQWpvdXRlckVxdWlwZTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkxPQ1MgUsOJU0VBVVggU09DSUFVWCAtIFN0eWxlcyBjb21tdW5zXG4gICBGYWNlYm9vaywgSW5zdGFncmFtLCBMaW5rZWRJblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQmxvYyBjb25uZXhpb24gKHdyYXBwZXIpICovXG4uYmxvY0Nvbm5leGlvbiB7XG4gICAgbWFyZ2luOiAxMHB4IDAgMjBweDtcbn1cblxuLyogQm91dG9uIGRlIGNvbm5leGlvbiAtIGNsYXNzZSBjb21tdW5lICovXG4uYnRuQ29ubmV4aW9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmJ0bkNvbm5leGlvbjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xufVxuXG4vKiBWYXJpYW50ZXMgcGFyIHLDqXNlYXUgKi9cbi5idG5Db25uZXhpb24uZmFjZWJvb2sge1xuICAgIGJhY2tncm91bmQ6ICMxODc3RjI7IC8qIENvdWxldXIgb2ZmaWNpZWxsZSBkZSBsYSBtYXJxdWUgRmFjZWJvb2sgKi9cbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi5idG5Db25uZXhpb24uZmFjZWJvb2s6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICMxNjZGRTU7IC8qIENvdWxldXIgb2ZmaWNpZWxsZSBkZSBsYSBtYXJxdWUgRmFjZWJvb2sgKGhvdmVyKSAqL1xufVxuXG4uYnRuQ29ubmV4aW9uLmluc3RhZ3JhbSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjRkNBRjQ1LCAjRTEzMDZDLCAjODMzQUI0KTsgLyogR3JhZGllbnQgb2ZmaWNpZWwgZGUgbGEgbWFycXVlIEluc3RhZ3JhbSAqL1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcbn1cblxuLmJ0bkNvbm5leGlvbi5pbnN0YWdyYW06aG92ZXIge1xuICAgIG9wYWNpdHk6IDAuOTtcbn1cblxuLmJ0bkNvbm5leGlvbi5saW5rZWRpbiB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwNzdCNSwgIzBBNjZDMik7IC8qIEdyYWRpZW50IG9mZmljaWVsIGRlIGxhIG1hcnF1ZSBMaW5rZWRJbiAqL1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcbn1cblxuLmJ0bkNvbm5leGlvbi5saW5rZWRpbjpob3ZlciB7XG4gICAgb3BhY2l0eTogMC45O1xufVxuXG4vKiBJY8O0bmUgZGFucyBsZSBib3V0b24gKi9cbi5pY29uZVJlc2VhdSB7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgw4l0YXQgY29ubmVjdMOpICh1dGlsaXPDqSBwYXIgdG91cyBsZXMgcsOpc2VhdXgpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uY29ubmV4aW9uQWN0aXZlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1N1Y2NlczApO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNTdWNjZXMzKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5pY29uZUNvbm5lY3RlOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICfinJMnO1xuICAgIGNvbG9yOiB2YXIoLS1jU3VjY2VzMyk7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5wYWdlQ29ubmVjdGVlIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJ0bkRlY29ubmVjdGVyIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYnRuRGVjb25uZWN0ZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyNSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBBbGVydGVzIGV0IG1lc3NhZ2VzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBGb25kIHDDomxlLCB0ZXh0ZSBzb21icmUsIGxpZW4gcm91Z2UgZm9uY8OpIOKAlCBsZSBkZXNzaW4gZGUgLmVycmV1cnNRdWVzdGlvbnMgKF9mb3JtdWxhaXJlcy5jc3MpLlxuICAgQXZhbnQgOiBmb25kIC0tY1JvdWdlNCAocm91Z2UgZm9uY8OpKSBzb3VzIGR1IHRleHRlIC0tY05vaXIxLCBpbGxpc2libGUgKGJpbGFuIGR1IDIwMjYtMTAtMDQsIG7CsCAyMikuICovXG4uYWxlcnRlVG9rZW5FeHBpcmUge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgcGFkZGluZzogMTBweCAxNXB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTApO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNSb3VnZTIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmFsZXJ0ZVRva2VuRXhwaXJlIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U0KTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLm1lc3NhZ2VJbmZvIHtcbiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXI1KTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCbG9jIHB1YmxpY2F0aW9uL21lZGlhIChzw6lsZWN0aW9uIGRlIGNvbnRlbnUpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYmxvY1B1YmxpY2F0aW9uLFxuLmJsb2NNZWRpYSB7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG59XG5cbi5ibG9jUHVibGljYXRpb24gbGFiZWwsXG4uYmxvY01lZGlhIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5zZWxlY3RQdWJsaWNhdGlvbixcbi5zZWxlY3RNZWRpYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xufVxuXG4uc2VsZWN0UHVibGljYXRpb246ZGlzYWJsZWQsXG4uc2VsZWN0TWVkaWE6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyNSk7XG59XG5cbi5idG5SZWZyZXNoUHVibGljYXRpb25zLFxuLmJ0blJlZnJlc2hNZWRpYXMge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5idG5SZWZyZXNoUHVibGljYXRpb25zOmhvdmVyLFxuLmJ0blJlZnJlc2hNZWRpYXM6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyNSk7XG59XG5cbi5wdWJsaWNhdGlvblNlbGVjdGlvbm5lZSxcbi5tZWRpYVNlbGVjdGlvbm5lIHtcbiAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jU3VjY2VzMyk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCbG9jIGFjdHVhbGlzYXRpb25cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5pbmZvQWN0dWFsaXNhdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ubGFiZWxBY3R1YWxpc2F0aW9uIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLnRlbXBzUmVsYXRpZiB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLm5vbWJyZVBhcnRpY2lwYW50cyB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJ0bkFjdHVhbGlzZXIge1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4uYnRuQWN0dWFsaXNlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudF9haCk7XG59XG5cbi5idG5BY3R1YWxpc2VyOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG59XG5cbi5lcnJldXJUb2tlbiB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTMpO1xufVxuXG4uYmxvY0FjdHVhbGlzYXRpb24gLm1lc3NhZ2VBaWRlIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBPTkdMRVQgUEFSVElDSVBBTlRTIC0gU3R5bGVzIHNww6ljaWZpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgTGVzIHN0eWxlcyBjb21tdW5zIGRlcyBibG9jcyBzb250IGRhbnMgNTNfYmxvY3MuY3NzXG4gICBDZSBmaWNoaWVyIGNvbnRpZW50IHVuaXF1ZW1lbnQgbGVzIMOpbMOpbWVudHMgc3DDqWNpZmlxdWVzXG4gICDDoCBsJ29uZ2xldCBwYXJ0aWNpcGFudHMuXG5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIENvbnRlbmV1ciBkZXMgYmxvY3MgKGNvbW11biBwYXJ0aWNpcGFudHMgZXQgbG90cykgKi9cbi5ncm91cGVzTGlzdGUsXG4uZGlzdHJpYnV0aW9uc0xpc3RlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMaXN0ZSk7XG59XG5cbi8qIE1lc3NhZ2Ugc2kgdmlkZSAoY29tbXVuIHBhcnRpY2lwYW50cyBldCBsb3RzKSAqL1xuLmdyb3VwZXNWaWRlLFxuLmRpc3RyaWJ1dGlvbnNWaWRlIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBwYWRkaW5nOiA0MHB4IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG59XG5cbi8qIExpc3RlIGRlcyBwYXJ0aWNpcGFudHMgZGFucyBsYSBtb2RhbGUgKi9cbi5saXN0ZVBhcnRpY2lwYW50cyB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLmxpc3RlUGFydGljaXBhbnRzIGxpIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4ubGlzdGVQYXJ0aWNpcGFudHMgbGk6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLnBhcnRpY2lwYW50Tm9tIHtcbiAgICBmbGV4OiAxO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4ucGFydGljaXBhbnRDaGFuY2VzIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5tb2RhbGVWaWRlIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRPR0dMRSBNRU5VIFBBUlRJQ0lQQU5UU1xuICAgUsOpdXRpbGlzZSBsZXMgc3R5bGVzIGRlIF9vbmdsZXRNZW51LmNzc1xuICAgU2V1bGUgbGEgY291bGV1ciBkZSBsJ2luZGljYXRldXIgY2hhbmdlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBDb3VsZXVyIHNww6ljaWZpcXVlIHBvdXIgbCdpbmRpY2F0ZXVyIHBhcnRpY2lwYW50cyAqL1xuLmRpdk9uZ2xldE1lbnVHcm91cGVzIC5pbmRpY2F0ZXVyT25nbGV0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi8qIFNlY3Rpb25zIG1hc3F1w6llcyBwYXIgZMOpZmF1dCAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uc2VjdGlvbkdyb3VwZXMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zZWN0aW9uR3JvdXBlcy52aXNpYmxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBUT0dHTEUgTUVOVSBMT1RTXG4gICBSw6l1dGlsaXNlIGxlcyBzdHlsZXMgZGUgX29uZ2xldE1lbnUuY3NzXG4gICBTZXVsZSBsYSBjb3VsZXVyIGRlIGwnaW5kaWNhdGV1ciBjaGFuZ2VcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIENvdWxldXIgc3DDqWNpZmlxdWUgcG91ciBsJ2luZGljYXRldXIgbG90cyAqL1xuLmRpdk9uZ2xldE1lbnVEaXN0cmlidXRpb25zIC5pbmRpY2F0ZXVyT25nbGV0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi8qIFNlY3Rpb25zIG1hc3F1w6llcyBwYXIgZMOpZmF1dCAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uc2VjdGlvbkRpc3RyaWJ1dGlvbnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zZWN0aW9uRGlzdHJpYnV0aW9ucy52aXNpYmxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbiovXG5cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBPTkdMRVQgTE9UUyAtIFN0eWxlcyBzcMOpY2lmaXF1ZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIExlcyBzdHlsZXMgY29tbXVucyAoLmRpc3RyaWJ1dGlvbnNMaXN0ZSwgLmRpc3RyaWJ1dGlvbnNWaWRlKSBzb250XG4gICBkw6lmaW5pcyBkYW5zIF9vbmdsZXRHcm91cGVzLmNzcyAoc8OpbGVjdGV1cnMgZ3JvdXDDqXMpXG5cbiAgIENlIGZpY2hpZXIgY29udGllbnQgdW5pcXVlbWVudCBsZXMgw6lsw6ltZW50cyBzcMOpY2lmaXF1ZXNcbiAgIMOgIGwnb25nbGV0IGxvdHMgcXVpIGRpZmbDqHJlbnQgZGUgbCdvbmdsZXQgcGFydGljaXBhbnRzLlxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE9OR0xFVCBDQVJUT05TIChiaW5nbykgLSBTdHlsZXMgc3DDqWNpZmlxdWVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTW9kZXMgUHLDqXBhcmVyIGV0IERpZmZ1c2VyLiBMZSBwYW5uZWF1IGVzdCB1biAucGFubmVhdUZvcm11bGFpcmUgOiBjaGFxdWUgZm9ybXVsYWlyZVxuICAgZXN0IHVuZSBjYXJ0ZSBlbmNhZHLDqWUgYXUgY29udHJhdCBkZSBfZm9ybXVsYWlyZXMuY3NzICh0aXRyZSAudGl0cmVGb3JtdWxhaXJlLCBwYWRkaW5nXG4gICBkZXMgZm9ybSA+IGRpdikuIExvZ28gZW4gUHLDqXBhcmVyLCBxdWkgcGV1dCBzY2FubmVyIGVuIERpZmZ1c2VyLCBwdWlzIHVuIGZvcm11bGFpcmVcbiAgIMKrIENyw6llciB2b3MgY2FydG9ucyDCuyBwYXIgZm9ybWF0IDogbm9tYnJlICsgYWpvdXRlciwgbGEgbGlzdGUgcGFyIHPDqXJpZXMsIHRvdXRcbiAgIHTDqWzDqWNoYXJnZXIuIENvdWxldXIgZCdvbmdsZXQgOiBjZWxsZSBkZXMgTnVtw6lyb3MgKC5kaXZHcm91cGVzIHN1ciBsZSBwYW5uZWF1KS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jYXJ0b25zUGFubmVhdSAudGl0cmVGb3JtdWxhaXJlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4vKiBOb21icmUgZGUgY2FydG9ucyArIEFqb3V0ZXIgOiB1bmUgbGlnbmUgKi9cbi5jYXJ0b25zQWpvdXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xufVxuXG4uY2FydG9uc0Fqb3V0IGxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4uY2FydG9uc0Fqb3V0IGlucHV0IHtcbiAgICB3aWR0aDogOTBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5jYXJ0b25zTGlzdGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4uY2FydG9uc0xpc3RlIHRoIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4uY2FydG9uc0xpc3RlIHRkIHtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8qIFRyb2lzIGNvbG9ubmVzIHF1aSBzZSBwYXJ0YWdlbnQgdG91dGUgbGEgbGFyZ2V1ciBkZSBsYSBjYXJ0ZSwgYcOpcsOpZXMuICovXG4uY2FydG9uc0xpc3RlIHRoLFxuLmNhcnRvbnNMaXN0ZSB0ZCB7XG4gICAgcGFkZGluZzogMTBweCAyNHB4IDEwcHggMDtcbn1cblxuLmNhcnRvbnNMaXN0ZSB0aDpsYXN0LWNoaWxkLFxuLmNhcnRvbnNMaXN0ZSB0ZDpsYXN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuXG4uY2FydG9uc0xpc3RlIC5jb2xOdW1lcm8ge1xuICAgIHdpZHRoOiAyOCU7XG59XG5cbi8qIE51bcOpcm9zIMKrIDEtNTAgwrsgOiBkw6lidXQsIHRpcmV0IGV0IGZpbiBkYW5zIHRyb2lzIGNhc2VzIGRlIGxhcmdldXIgZml4ZSwgY2hpZmZyZXMgw6BcbiAgIGxhcmdldXIgZml4ZSBhbGlnbsOpcyDDoCBkcm9pdGUgOiBkJ3VuZSBsaWduZSDDoCBsJ2F1dHJlLCBsZXMgdW5pdMOpcyB0b21iZW50IHNvdXMgbGVzIHVuaXTDqXMuICovXG4uY2FydG9uc0xpc3RlIHRkLmNvbE51bWVybyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xufVxuXG4uY2FydG9uc0xpc3RlIC5udW1EZSxcbi5jYXJ0b25zTGlzdGUgLm51bUEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtaW4td2lkdGg6IDMuNWNoO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uY2FydG9uc0xpc3RlIC5udW1TZXAge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMS41Y2g7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uY2FydG9uc0NyZWVyIC5mb3JtQWN0aW9ucyB7XG4gICAgcGFkZGluZy1ib3R0b206IDIwcHg7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgT05HTEVUIFLDiVNVTFRBVFMgLSBTdHlsZXMgc3DDqWNpZmlxdWVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBMZXMgc3R5bGVzIGNvbW11bnMgZGVzIGJsb2NzIHNvbnQgZGFucyA1M19ibG9jcy5jc3NcbiAgIENlIGZpY2hpZXIgY29udGllbnQgdW5pcXVlbWVudCBsZXMgw6lsw6ltZW50cyBzcMOpY2lmaXF1ZXNcbiAgIMOgIGwnb25nbGV0IHLDqXN1bHRhdHMgKHNlY3Rpb25zLCBnYWduYW50cywgZXRjLilcblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogU2VjdGlvbiBkZSByw6lzdWx0YXRzICovXG4uc2VjdGlvblJlc3VsdGF0cyB7XG4gICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbn1cblxuLnNlY3Rpb25SZXN1bHRhdHNUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDEycHg7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogTGlzdGUgZGVzIGJsb2NzIGRlIHTDqWzDqWNoYXJnZW1lbnQgKi9cbi5saXN0ZVRlbGVjaGFyZ2VyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLyogQmxvYyByw6lzdWx0YXQgcGFyIGFuaW1hdGlvbiDigJQgYm94ICh0aXRyZSA9IG5vbSBkZSBsJ2FuaW1hdGlvbiwgZmluIHRyYWl0IGNvbW1lIGxlcyBib3ggcGFydGljaXBhbnRzKSAqL1xuLmJsb2NSZXN1bHRhdFNjZW5lIHtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgcGFkZGluZzogMTZweCAyMHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJGb3JtKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5ibG9jUmVzdWx0YXRTY2VuZTplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJsb2NSZXN1bHRhdFRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMCAwIDEycHggMDtcbn1cblxuLmJsb2NSZXN1bHRhdEJvdXRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogVMOpbMOpY2hhcmdlbWVudHMgcsOpc3VsdGF0cyA6IHVuZSBsaWduZSBwYXIgcm9uZGUvY2xhc3NlbWVudCwgcGV0aXRzIGxpZW5zIHBhciBmb3JtYXQuICovXG4ucmVzdWx0YXRMaWduZXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7IC8qIGFsaWduw6kgNiAtPiA4cHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi5yZXN1bHRhdExpZ25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLnJlc3VsdGF0TGFiZWwge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1pbi13aWR0aDogMTAwcHg7XG59XG5cbi5yZXN1bHRhdExpZW4ge1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucmVzdWx0YXRMaWVuOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDQpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuIiwiLyogT25nbGV0IFB1YmxpY2F0aW9uIOKAlCB1bmUgY2FydGUgcGFyIGFuaW1hdGlvbiA6IHRpdHJlLCBjYXNlIMKrIHB1YmxpZXIgwrssIGxpZW4gKyBRUi4gKi9cblxuLmJsb2NQdWJsaWNhdGlvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cblxuLnB1YmxpY2F0aW9uQ2FzZUxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnB1YmxpY2F0aW9uTGllbiB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSw4lDQVBJVFVMQVRJRiBTQ8OJTkFSSU8gKHN0ZXBwZXIgdmVydGljYWwpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBDb250YWluZXIgZHUgc3RlcHBlciAqL1xuLnJlY2FwU3RlcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMDtcbn1cbiNzY2VuYXJpb1Bhbm5lYXUgLnJlY2FwU3RlcHBlciA+IC5yZWNhcEFjdGlvbnMgKyAucmVjYXBCbG9jIHtcbiAgICBtYXJnaW4tdG9wOiAzMnB4O1xufVxuXG4vKiBDb25uZWN0ZXVyIHZlcnRpY2FsIGVudHJlIGxlcyBibG9jcyAqL1xuLnJlY2FwQ29ubmVjdGV1ciB7XG4gICAgd2lkdGg6IDNweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xufVxuXG4vKiBCbG9jIGluZGl2aWR1ZWwgZHUgc3RlcHBlciAqL1xuLnJlY2FwQmxvYyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBtaW4taGVpZ2h0OiA2NnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIFRpdHJlIGR1IGJsb2MgKGgzKSAqL1xuLnJlY2FwQmxvYyBoMyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ1JlY2FwKTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogw4l0aXF1ZXR0ZXMgZHUgcsOpY2FwIDogdW4gU0VVTCBzdHlsZSwgcXUnZWxsZXMgc29pZW50IGNsaXF1YWJsZXMgKDxhPi88YnV0dG9uPiBlbiBtb2RlXG4gICBQcsOpcGFyZXIgLyBwcm9ncmVzc2lvbikgb3Ugc3RhdGlxdWVzLiBGb25kIGNsYWlyIGRlIGNhdMOpZ29yaWUsIHRleHRlIG5vaXIsIGJvcmR1cmUgbMOpZ8OocmVcbiAgIChjaG9peCBQTyAyMDI2LTA3LTIwIDogcGx1cyBkZSBwYXN0aWxsZSBmb25jw6llIMOgIHRleHRlIGJsYW5jIOKAlCBsJ29uZ2xldCBEaWZmdXNlciBmYWl0IGZvaSkuXG4gICAucmVjYXBUYWdTb3J0aWUgPSBibGFuYywgbGEgY291bGV1ciBkdSDCqyBwcm9kdWl0IGQndW5lIHNjw6huZSDCuyAoY29uc2VydsOpZSBlbiBlbnRyw6llKS5cbiAgIC5yZWNhcFRhZ1NvcnRpZVNlY29uZGFpcmUgPSBzb3J0aWUgZMOpY2xhcsOpZSBgc2Vjb25kYWlyZWAgcGFyIGxlIGNvbnRyYXQgZCd1bmUgc2PDqG5lLCBlblxuICAgcmV0cmFpdCDigJQgcGFnZSBkJ3VuZSBzY8OobmUgc2V1bGVtZW50IChWaXRyaW5lKSA6IHVuIHNjw6luYXJpbyBuJ2FmZmljaGUgcGFzIHNlcyBzb3J0aWVzXG4gICBpbnV0aWxpc8OpZXMgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE2KS4gKi9cbi5yZWNhcFRhZ0dyb3VwZXMsXG4ucmVjYXBUYWdEaXN0cmlidXRpb25zLFxuLnJlY2FwVGFnU29ydGllLFxuLnJlY2FwVGFnU29ydGllU2Vjb25kYWlyZSxcbi5yZWNhcExpZW5Hcm91cGVzLFxuLnJlY2FwTGllbkRpc3RyaWJ1dGlvbnMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW46IDJweCAwO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdFdGlxdWV0dGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIwKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcFRhZ1NvcnRpZVNlY29uZGFpcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4ucmVjYXBUYWdHcm91cGVzLFxuLnJlY2FwTGllbkdyb3VwZXMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7IH1cblxuLnJlY2FwVGFnRGlzdHJpYnV0aW9ucyxcbi5yZWNhcExpZW5EaXN0cmlidXRpb25zIHsgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpOyB9XG5cbi8qIFRpdHJlIGQnYW5pbWF0aW9uL2FmZmljaGFnZSBjbGlxdWFibGUgKG1vZGUgUHLDqXBhcmVyKSA6IGxpZW4gc29icmUsIHNhbnMgcGFzdGlsbGUgY29sb3LDqWUsXG4gICBwb3VyIG5lIHBhcyBwZXJ0dXJiZXIgbGEgbGVjdHVyZSDigJQgbcOqbWUgc29icmnDqXTDqSBxdWUgbGUgdGl0cmUgbm9uIGNsaXF1YWJsZSBkZSBsYSBwcm9ncmVzc2lvbi4gKi9cbi5yZWNhcExpZW5TY2VuZXMsXG4ucmVjYXBMaWVuQWZmaWNoYWdlcyB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi8qIEFmZm9yZGFuY2UgwqsgY2xpcXVhYmxlIMK7IDogc291bGlnbmVtZW50IGF1IHN1cnZvbCAow6l0aXF1ZXR0ZXMgZCdlbnRyw6llICsgdGl0cmVzKSAqL1xuLnJlY2FwTGllbkdyb3VwZXM6aG92ZXIsXG4ucmVjYXBMaWVuRGlzdHJpYnV0aW9uczpob3Zlcixcbi5yZWNhcExpZW5TY2VuZXM6aG92ZXIsXG4ucmVjYXBMaWVuQWZmaWNoYWdlczpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIFNvdXMtdGl0cmUgZGFucyBsZSBibG9jIChoNCkg4oCUIMOpbGFyZ2kgw6AgbGEgY29sb25uZSByw6ljYXAgZGUgY29tcG9zaXRpb25cbiAgICg1NV9zY2VuYXJpb01vZGlmaWVyLmNzcyksIHF1aSByZXByZW5kIGxhIGdyYW1tYWlyZSBkdSByw6ljYXAgaG9ycyBwYW5uZWF1LiAqL1xuLnJlY2FwQmxvYyBoNCxcbi5yZWNhcENvbXBvc2l0aW9uIGg0IHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogTGlzdGVzIMOgIHB1Y2VzIGRhbnMgbGUgYmxvYyAqL1xuLnJlY2FwQmxvYyB1bCxcbi5yZWNhcENvbXBvc2l0aW9uIHVsIHtcbiAgICBtYXJnaW46IDRweCAwO1xuICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcmV0cmFpdExpc3RlQ291cnQpO1xufVxuXG4vKiBDb2xvbm5lIHLDqWNhcCBkZSBjb21wb3NpdGlvbiAobGFyZ2V1ciBmaXhlIMOpdHJvaXRlKSA6IHBhcyBkZSBwdWNlcyDigJQgY2hhcXVlIGxpZ25lXG4gICBlc3QgZMOpasOgIHVuIHRhZyDigJQgZXQgdW4gwqsgw4l0aXF1ZXR0ZSA6IExhYmVsIMK7IG5lIHNlIHBsaWUgSkFNQUlTIHN1ciBkZXV4IGxpZ25lc1xuICAgKGTDqWNpc2lvbiBQTyAyMDI2LTA4LTExKSA7IGF1LWRlbMOgIGRlIGxhIGNvbG9ubmUsIGVsbGlwc2UuICovXG4ucmVjYXBDb21wb3NpdGlvbiB1bCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG59XG5cbi5yZWNhcENvbXBvc2l0aW9uIC5yZWNhcFRhZ0dyb3VwZXMsXG4ucmVjYXBDb21wb3NpdGlvbiAucmVjYXBUYWdTb3J0aWUsXG4ucmVjYXBDb21wb3NpdGlvbiAucmVjYXBUYWdTb3J0aWVTZWNvbmRhaXJlIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5yZWNhcEJsb2MgbGksXG4ucmVjYXBDb21wb3NpdGlvbiBsaSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIETDqXRhaWxzIGR1IGJsb2MgKi9cbi5yZWNhcEJsb2NEZXRhaWwge1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdSZWNhcCk7XG4gICAgcGFkZGluZy10b3A6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcEJsb2NEZXRhaWwgcCB7XG4gICAgbWFyZ2luOiAycHggMDtcbn1cblxuLnJlY2FwQmxvY0RldGFpbCBociB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBtYXJnaW46IDIwcHggMDtcbn1cblxuLyogSWPDtG5lIGRlIGwnYW5pbWF0aW9uIGVuIHJhcHBlbCBkYW5zIGxlIGNvaW4gaGF1dC1kcm9pdCBkdSBibG9jLlxuICAgQ2FzZSA4MCBldCA4cHggZCdhaXIgOiBkZXNzaW4gNjQsIGxhIGdyYW5kZSBkZXMgZGV1eCB0YWlsbGVzIGR1IHByb2pldCAoNTRfaWNvbmVzLmNzcykuXG4gICBIb3JzIGZsdXggKGFic29sdXRlKSBwb3VyIG5lIHBhcyBnb25mbGVyIGxhIGhhdXRldXIgZHUgdGl0cmUg4oCUIGNhbMOpZSBzdXIgbGUgcGFkZGluZyBkdSBoMy4gKi9cbi5yZWNhcFRpdHJlSWNvbmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IDgwcHg7XG4gICAgaGVpZ2h0OiA4MHB4O1xuICAgIHBhZGRpbmc6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBDb2xvbm5lIGRlIGwnaWPDtG5lIChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0yMikgOiBsJ2ljw7RuZSB0aWVudCB0b3V0ZSBsYSBoYXV0ZXVyIGR1IGJsb2MsIMOgXG4gICBkcm9pdGUsIHPDqXBhcsOpZSBkdSBjb250ZW51IHBhciB1biBmaWxldCA7IGxlIGNvbnRlbnUgcydhcnLDqnRlIGF2YW50IGVsbGUsIHJpZW4gbmUgcGFzc2VcbiAgIGRlc3NvdXMuIExlIGRlc3NpbiByZXN0ZSBlbiBoYXV0IGRlIGxhIGNvbG9ubmUgKG9iamVjdC1maXQpLiBOZSB2YXV0IHF1ZSBwb3VyIGxlIGJsb2MgZHVcbiAgIHLDqWNhcGl0dWxhdGlmICgucmVjYXBCbG9jKSA6IGxhIGNvbXBvc2l0aW9uIGRlIHNjw6luYXJpbyBwb3J0ZSBhdXNzaSAucmVjYXBCbG9jU2NlbmUuICovXG4ucmVjYXBCbG9jLnJlY2FwQmxvY1NjZW5lIHtcbiAgICBtaW4taGVpZ2h0OiA4MHB4OyAvKiBsYSBjb2xvbm5lIG5lIGRlc2NlbmQgamFtYWlzIHNvdXMgbGEgY2FzZSBkZSBsJ2ljw7RuZSAqL1xuICAgIHBhZGRpbmctcmlnaHQ6IDgwcHg7XG59XG5cbi5yZWNhcEJsb2MucmVjYXBCbG9jU2NlbmUgLnJlY2FwVGl0cmVJY29uZSB7XG4gICAgYm90dG9tOiAwO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgIG9iamVjdC1wb3NpdGlvbjogdG9wO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLWxlZnQ6IHZhcigtLWJvcmRlckNhcnRlKTtcbn1cblxuLyogVmFyaWFudGVzIGNvdWxldXIgcGFyIHR5cGUgKi9cbi5yZWNhcEJsb2NHcm91cGVzIC8qIC5yZWNhcEJsb2NEaXN0cmlidXRpb25zIChpbnV0aWxpc8OpIDIwMjYtMDYtMTMpICovIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMxKTtcbn1cblxuLnJlY2FwQmxvY1NjZW5lIC5yZWNhcFRpdHJlSWNvbmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbn1cblxuLnJlY2FwQmxvY1NjZW5lLnJlY2FwQmxvY0FmZmljaGFnZSAucmVjYXBUaXRyZUljb25lIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi5yZWNhcEJsb2NDb25maWd1cmF0aW9ucyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5yZWNhcEJsb2NGaW5hbCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuKi9cblxuLyogTGllbiBcIk1vZGlmaWVyXCIgc291cyBsZSByw6ljYXAgKi9cbi5yZWNhcEFjdGlvbnMge1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdSZWNhcCk7XG59XG5cbi8qIE3Dqm1lIGNvdWxldXIgcXUnQW5udWxlciBkZXMgZm9ybXVsYWlyZXMgKG5veWF1IDMxX2N0YS5jc3MpIDogbGVzIGFjdGlvbnMgbmV1dHJlcyBzb250XG4gICBub2lyZXMsIGxlcyBjb3VsZXVycyByZXN0ZW50IHLDqXNlcnbDqWVzIGF1eCBhY3Rpb25zIG1hcnF1w6llcyAoU3VwcHJpbWVyKS4gKi9cbi5yZWNhcEFjdGlvbnMgYSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcEFjdGlvbnMgYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIEltYWdlIGRhbnMgdW4gYmxvYyByw6ljYXAgKi9cbi5yZWNhcEltYWdlIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBQYXN0aWxsZXMgY291bGV1cnMgZGFucyBsZSByw6ljYXAgKi9cbi5yZWNhcENvdWxldXJzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG59XG5cbi5yZWNhcENvdWxldXJQYXN0aWxsZSB7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG59XG5cbi8qIE1lc3NhZ2UgdmlkZSAqL1xuLnJlY2FwVmlkZSB7XG4gICAgZm9udDogdmFyKC0tZkl0YWxpYzE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nTGlnbmVMaXN0ZSk7XG59XG5cbi8qIFNvdXJjZSBsaXN0IGRhbnMgbGVzIGTDqXRhaWxzICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5yZWNhcFNvdXJjZXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDJweDtcbn1cbiovXG5cbi8qIEFsZXJ0ZSBpbnN1ZmZpc2FuY2UgKi9cbi5yZWNhcEFsZXJ0ZSB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTMpO1xuICAgIGZvbnQ6IHZhcigtLWZBbGVydGUxNik7XG59XG5cbi8qIEJyaXF1ZSByw6ljYXBpdHVsYXRpZiBkYW5zIGxhIGdyaWxsZSBkdSBzY8OpbmFyaW8gKi9cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmJyaXF1ZS5icmlxdWVSZWNhcCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0JsYW5jMDMpO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTE1IC0gY29uY2VwdCByZWNhcC5qcyByZXRpcsOpXG4ucmVjYXBBbmltQ29uZmlnOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuKi9cblxuLnJlY2FwRW5jYWRyZSB7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ1JlY2FwKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogI0ZGRjg7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xNSAtIGNvbmNlcHQgcmVjYXAuanMgcmV0aXLDqVxuLnJlY2FwQW5pbUNvbmZpZyBoNCB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBtYXJnaW46IDIwcHggMCA0cHg7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgaDQ6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgcCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAycHggMDtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyB1bCxcbi5yZWNhcEFuaW1Db25maWcgb2wge1xuICAgIG1hcmdpbjogNHB4IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIGxpIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyB0YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBtYXJnaW46IDZweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIHRoLFxuLnJlY2FwQW5pbUNvbmZpZyB0ZCB7XG4gICAgcGFkZGluZzogNHB4IDhweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlckNhcnRlKTtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyB0aCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyBociB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBtYXJnaW46IDhweCAwO1xufVxuKi9cblxuLyogQm91dG9ucyBwYXJ0aWNpcGFudHMgY2xpcXVhYmxlcyBkYW5zIGxhIHByb2dyZXNzaW9uIDogbcOqbWUgw6l0aXF1ZXR0ZSBxdWUgbGVzIGF1dHJlc1xuICAgKGNvbnRvdXIgY29tcHJpcywgY2YuIGJsb2MgZHUgaGF1dCksIG9uIG4nYWp1c3RlIHF1ZSBsJ2ludGVyYWN0aXZpdMOpLiAqL1xuYnV0dG9uLnJlY2FwVGFnR3JvdXBlcyB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQ6IGluaGVyaXQ7XG59XG5cbmJ1dHRvbi5yZWNhcFRhZ0dyb3VwZXM6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUFJPR1JFU1NJT04g4oCUIMOJdGF0cyBkZXMgYmxvY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIFNldWxlcyBsZXMgY3VlcyDDoCB2ZW5pciBzb250IGF0dMOpbnXDqWVzIDogY2VsbGVzIGTDqWrDoCBqb3XDqWVzIHJlc3RlbnQgcGxlaW5lcywgZWxsZXMgb250IMOpdMOpXG4gICBhY3RpdmVzIChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0yMikuICovXG4jcHJvZ3Jlc3Npb24gLnJlY2FwQmxvY1NjZW5lIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7XG59XG5cbiNwcm9ncmVzc2lvbiAucmVjYXBCbG9jU2NlbmUucmVjYXBCbG9jRnV0dXIge1xuICAgIG9wYWNpdHk6IC41O1xufVxuXG4vKiBOb21icmUgZCfDqWzDqW1lbnRzIGQndW5lIHBhc3RpbGxlIGQnZW50csOpZSBvdSBkZSBzb3J0aWUgKHBlaW50dXJlUHJvZ3Jlc3Npb24udHMpLCBzw6lwYXLDqSBkdVxuICAgbGliZWxsw6kgcGFyIHVuIGZpbGV0IGRlIGxhIGNvdWxldXIgZGUgbGEgcGFzdGlsbGUuIEFic2VudCB0YW50IHF1ZSBsZSBub21icmUgbidlc3QgcGFzIGNvbm51LiAqL1xuLnJlY2FwQ29tcHRlIHtcbiAgICBtYXJnaW4tbGVmdDogNnB4O1xuICAgIHBhZGRpbmctbGVmdDogNnB4O1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgY3VycmVudENvbG9yO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTZTdHJvbmcpO1xufVxuXG4vKiBTZWN0aW9uIMKrIFByb2dyZXNzaW9uIMK7IGRlIGxhIGN1ZSBhY3RpdmUgOiB1bmUgc2VjdGlvbiBkdSBibG9jIGNvbW1lIEVudHLDqWVzIGV0IFNvcnRpZXNcbiAgICgucmVjYXBCbG9jRGV0YWlsLCBtw6ptZSB0aXRyZSwgbcOqbWUgbWFyZ2UpLCBzZXJ2aWUgY2FjaMOpZSBwYXIgbGUgdGVtcGxhdGUuICovXG4ucHJvZ3Jlc3Npb25FdGF0W2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIExhIGJhcnJlIGV0IHNvbiBjb21wdGUgYXUgcmV0cmFpdCBkZXMgbGlzdGVzIGQnRW50csOpZXMgZXQgZGUgU29ydGllcy4gKi9cbi5wcm9ncmVzc2lvbkV0YXRCbG9jcyB7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXJldHJhaXRMaXN0ZUNvdXJ0KTtcbn1cblxuLyogQ3VlIMOgIHZlbmlyIChhcHLDqHMgbGEgY3VlIGFjdGl2ZSkgOiBzb24gdGl0cmUgZXQgc29uIGljw7RuZSBzZXVsZW1lbnQg4oCUIHNlcyBlbnRyw6llcyBldCBzZXNcbiAgIHNvcnRpZXMgbmUgZGlzZW50IHJpZW4gdGFudCBxdSdlbGxlIG4nYSBwYXMgY29tbWVuY8OpIChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0yMikuICovXG4jcHJvZ3Jlc3Npb24gLnJlY2FwQmxvY0Z1dHVyIC5wcm9ncmVzc2lvbkNvbnRlbnUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIEHDqXJhdGlvbiBkZSBzZWNvdXJzIHF1YW5kIGxlIGJsb2MgbidhIGF1Y3VuZSBzZWN0aW9uIHZpc2libGUgKi9cbi5wcm9ncmVzc2lvbkNvbnRlbnU6bm90KDpoYXMoPiA6bm90KFtoaWRkZW5dKSkpIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4vKiBCbG9jcyBkZSBwcm9ncmVzc2lvbiDDqW1pcyBwYXIgbCdhbmltYXRpb24gKG9idGVuaXJQcm9ncmVzc2lvbiDihpIgcmVuZHUgdW5pcXVlIHBlaW50dXJlUHJvZ3Jlc3Npb24udHMpICovXG4ucHJvZ3Jlc3Npb25CbG9jVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiA2cHggMCAycHg7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NUZXh0ZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAycHggMDtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0xpc3RlIHtcbiAgICBtYXJnaW46IDRweCAwO1xuICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcmV0cmFpdExpc3RlQ291cnQpO1xufVxuXG4ucHJvZ3Jlc3Npb25CbG9jTGlzdGUgbGkge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBCYXJyZSBzb2JyZSAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMjIpIDogbGEgY3VlIGFjdGl2ZSBzZSB2b2l0IGTDqWrDoCDDoCBsJ29wYWNpdMOpLCBsYSBiYXJyZVxuICAgbidhIHBhcyDDoCBjcmllci4gRmluZSwgYm91dHMgZHJvaXRzIGNvbW1lIGxhIHBvbGljZSwgbm9pcmUgc2FucyBjb3VsZXVyIGQnYWNjZW50LCBsYSBtb2l0acOpXG4gICBkdSBibG9jIDsgbGUgY29tcHRlIGVuIHBldGl0IGdyaXMgw6AgY8O0dMOpLiAqL1xuLnByb2dyZXNzaW9uQmxvY0JhcnJlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgbWFyZ2luOiA0cHggMDtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0JhcnJlUGlzdGUge1xuICAgIGZsZXg6IDAgMSA1MCU7XG4gICAgaGVpZ2h0OiA0cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NCYXJyZUphdWdlIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXIpO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDAuM3M7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NCYXJyZUxhYmVsIHtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIETDiVJPVUzDiSBEJ1VOIFNDw4lOQVJJTyDigJQgYnJpcXVlIG5veWF1IF9kZXJvdWxlU2NlbmFyaW8udHdpZ1xuXG4gICBMZSBkZXNzaW4gZGUgbGEgZ3JpbGxlIGRlIGwnb25nbGV0IFNjw6luYXJpbyAoYnJpcXVlIDE2MsOXMTAwLCBpY8O0bmUgNjQsIG5vbSBlbiBkZXNzb3VzLFxuICAgdHJhaXQgZXQgZmzDqGNoZSksIGRhbnMgdW4gY29kZSDDoCBwYXJ0IDogaWNpIG9uIGTDqWNvdXZyZSB1biBzY8OpbmFyaW8sIG9uIG5lIGxlIHLDqGdsZSBwYXNcbiAgIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xOCkuIEZldWlsbGUgQVVUT05PTUUgOiBlbGxlIG5lIGTDqXBlbmQgcGFzIGRlXG4gICBfZ3JpbGxlLmNzcywgcXVlIGxhIFZpdHJpbmUgbmUgY2hhcmdlIHBhcyBzdXIgc2VzIHBhZ2VzIOKAlCBsZXMgbWVzdXJlcyBzb250IHJlY29wacOpZXMsXG4gICBsZXMgcsOoZ2xlcyBkJ2ludGVyYWN0aW9uIChzdXJ2b2wsIGdsaXNzZXItZMOpcG9zZXIsIGZvcm11bGFpcmUgYWN0aWYpIG5lIGxlIHNvbnQgcGFzLlxuICAgQ2hhcmfDqWUgcGFyIDU2X3NjZW5hcmlvLmNzcyAoU3R1ZGlvKSBldCB2aXRyaW5lLmNzcyAoVml0cmluZSkuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBMZSBkw6lyb3Vsw6kgOiB1bmUgbWFyZ2UgZGUgMzJweCDDoCBEUk9JVEUgc2V1bGVtZW50LCBvw7kgdml0IGxhIGJhc2N1bGUgaWPDtG5lcyAvIHZpc3VlbHMsXG4gICBob3JzIGRlIGxhIGxpZ25lIGRlcyB0dWlsZXMgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE4IDogbCdpY8O0bmUgdmllbnQgZW4gcGx1cyxcbiAgIGzDqWdlciwgw6AgZHJvaXRlKS4gw4AgZ2F1Y2hlLCByaWVuIDogbGUgZMOpcm91bMOpIHNlIGNhbGUgYXUgYm9yZCBjb21tZSBsZSByZXN0ZSBkZSBsYSBwYWdlLlxuICAgTMOgIG/DuSBsYSBwYWdlIENFTlRSRSBsZSBkw6lyb3Vsw6kgKGxlIGJhbmRlYXUgZGVzIHBhZ2VzIHJ1YnJpcXVlcyDDoCBwYXJ0aXIgZGUgMTYwMHB4KSwgYydlc3RcbiAgIMOgIGxhIGZldWlsbGUgZGUgY2V0dGUgcGFnZSBkJ2Fqb3V0ZXIgbGEgbcOqbWUgbWFyZ2Ugw6AgZ2F1Y2hlLCBwb3VyIHF1ZSBsYSBsaWduZSBkZXMgdHVpbGVzXG4gICByZXN0ZSBjZW50csOpZSAoaWxvdFNjZW5hcmlvc0JhbmRlYXUuY3NzKSA6IGxhIGJyaXF1ZSBuZSBzYWl0IHBhcyBzaSBlbGxlIGVzdCBjZW50csOpZS4gKi9cbi5kZXJvdWxlU2NlbmFyaW8ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAzMnB4O1xufVxuXG4vKiBMYSBiYXNjdWxlIDogdW4gxZNpbCwgZGlzY3JldCwgY29sbMOpIMOgIGRyb2l0ZSBkZSBsYSBERVJOScOIUkUgdHVpbGUgKGRhbnMgc29uIGVtcGxhY2VtZW50LFxuICAgaG9ycyBkdSBmbHV4IDogaWwgbGEgc3VpdCBvw7kgcXUnZWxsZSBwYXNzZSDDoCBsYSBsaWduZSwgZXQgbmUgcHJlbmQgcGFzIGRlIHBsYWNlIGRhbnMgbGFcbiAgIHJhbmfDqWUg4oCUIGxhIG1hcmdlIGRyb2l0ZSBkdSBkw6lyb3Vsw6kgbHVpIGdhcmRlIGxlcyAzMnB4IHF1YW5kIGxhIHR1aWxlIGVzdCBhdSBib3JkKSwgYWxpZ27DqVxuICAgc3VyIGxlIGhhdXQgZGUgbGEgdHVpbGUsIE5PSVIgZW4gdG91dGUgY2lyY29uc3RhbmNlIOKAlCBuaSBzdXJ2b2wgbmkgw6l0YXQgZW5mb25jw6kgbmUgbGVcbiAgIGNvbG9yZW50IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xOCkgOiBjZSBzb250IGxlcyB0dWlsZXMgcXVpIG1vbnRyZW50IGxlIG1vZGUsXG4gICBwYXMgbCdpY8O0bmUuIGFyaWEtcHJlc3NlZD10cnVlID0gdmlzdWVscy4gKi9cbi5kZXJvdWxlQmFzY3VsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiBjYWxjKDEwMCUgKyA2cHgpO1xuICAgIHdpZHRoOiAyOHB4O1xuICAgIGhlaWdodDogMjhweDtcbiAgICBwYWRkaW5nOiA0cHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGVyb3VsZUJhc2N1bGUgc3ZnIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi8qIExlIGNvcnBzIGR1IGTDqXJvdWzDqSA6IGxhIGxpZ25lIGRlcyB0dWlsZXMgZXQsIHBhci1kZXNzdXMsIGxlIGNhbHF1ZSBkdSB0cmFpdC5cbiAgIGBwb3NpdGlvbjogcmVsYXRpdmVgIGVzdCBpY2kgZXQgbm9uIHNldWxlbWVudCBkYW5zIF9ncmlsbGUuY3NzIDogbGEgVml0cmluZSBuZSBjaGFyZ2UgcGFzXG4gICBjZXR0ZSBmZXVpbGxlLCBldCBzYW5zIGx1aSBsZSBjYWxxdWUgU1ZHIHMnYWJzb2x1dGlzYWl0IGNvbnRyZSBsYSBjYXJ0ZS4gKi9cbi5kZXJvdWxlQ29ycHMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLyogTGUgY2FscXVlIGRlcyB0cmFpdHMgKHNjZW5hcmlvTGlnbmVzLnRzKSA6IG3Dqm1lcyByw6hnbGVzIHF1ZSAuc2NlbmFyaW9MaWduZXNTdmcgZGFuc1xuICAgX2dyaWxsZS5jc3MsIHJlY29wacOpZXMgcGFyY2UgcXVlIGxhIFZpdHJpbmUgbmUgY2hhcmdlIHBhcyBfZ3JpbGxlLmNzcy4gU2FucyBlbGxlcyBsZSBTVkdcbiAgIHJlc3RhaXQgZGFucyBsZSBmbHV4LCBsYXJnZSBkZSAzMDBweCBwYXIgZMOpZmF1dCwgZXQgY291cGFpdCBsZSB0cmFpdCAoY29uc3RhdCBkdSBjaGVmIGRlXG4gICBwcm9qZXQgMjAyNi0wOS0xOCkuICovXG4uZGVyb3VsZVNjZW5hcmlvIC5zY2VuYXJpb0xpZ25lc1N2ZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHotaW5kZXg6IDA7XG59XG5cbi8qIFVORSBMSUdORSBUQU5UIFFVJ0VMTEUgVElFTlQsIFBMVVNJRVVSUyBTSU5PTiAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTggOiBvblxuICAgdm91bGFpdCDDqXZpdGVyIGxlIHJldG91ciDDoCBsYSBsaWduZSwgbWFpcyBzb3VzIDkwMHB4IHVuIHNjw6luYXJpbyBsb25nIHNlIGNvdXBhaXQsIGV0IHVuXG4gICBkw6lmaWxlbWVudCBob3Jpem9udGFsIGF1eCBiYXJyZXMgaW52aXNpYmxlcyBuJ2VzdCBwYXMgbGlzaWJsZSkuIExlIHRyYWl0IHN1aXQgOiBsZSBtb2R1bGVcbiAgIHNjZW5hcmlvTGlnbmVzLnRzIGRlc3NpbmUgdW5lIGxpZ25lIHBhciByYW5nw6llLCBhdmVjIGxlcyBwcm9sb25nZW1lbnRzIHF1aSBkaXNlbnQgwqsgw6dhXG4gICBjb250aW51ZSDCuywgZXhhY3RlbWVudCBjb21tZSBsYSBncmlsbGUgZHUgU3R1ZGlvLiBMJ8OpY2FydCBlbnRyZSByYW5nw6llcyBsYWlzc2UgbGEgcGxhY2VcbiAgIGR1IHRyYWl0IGV0IGRlIGxhIGJhcnJlIGRlIGNob2l4IHNvdXMgY2hhcXVlIHR1aWxlLiAqL1xuLmRlcm91bGVTY2VuYXJpb0xpZ25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKSB2YXIoLS1nYXBNb3llbik7XG59XG5cbi8qIEwnZW1wbGFjZW1lbnQsIGRlIGhhdXQgZW4gYmFzIDogbGEgYnJpcXVlLCBsZSB0cmFpdCwgbGEgYmFycmUgZGUgY2hvaXggKGTDqWNpc2lvbiBjaGVmIGRlXG4gICBwcm9qZXQgMjAyNi0wOS0xOCkuIExlIHRyYWl0IGVzdCBkZXNzaW7DqSAxMHB4IHNvdXMgbGEgYnJpcXVlIChzY2VuYXJpb0xpZ25lcy50cykgOiBsJ2FpclxuICAgZGUgMjRweCBlbnRyZSBsYSBicmlxdWUgZXQgbGEgYmFycmUgbHVpIGxhaXNzZSBsYSBwbGFjZSwgbGEgYmFycmUgY29tbWVuY2Ugc291cyBsdWkuICovXG4uZGVyb3VsZUVtcGxhY2VtZW50IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIGwnxZNpbCBkZSBsYSBkZXJuacOocmUgdHVpbGUgcyd5IGFjY3JvY2hlICovXG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMjRweDtcbiAgICB3aWR0aDogMTYycHg7XG59XG5cbi8qIEJyaXF1ZSA6IG3Dqm1lcyBtZXN1cmVzIHF1ZSAuYnJpcXVlIChfZ3JpbGxlLmNzcyksIHNhbnMgbWFpbiBuaSBvbWJyZSDigJQgcmllbiBuZSBzZVxuICAgY2xpcXVlIHN1ciBsYSBicmlxdWUgZWxsZS1tw6ptZSA7IGxlIGNob2l4IHNlIGZhaXQgZGFucyBsYSBiYXJyZSwgZGVzc291cy4gUmllbiBuZSBzJ3lcbiAgIFPDiUxFQ1RJT05ORSBub24gcGx1cyAobmkgbCfDqXRpcXVldHRlLCBuaSBsJ2ljw7RuZSwgbmkgbGUgdmlzdWVsIOKAlCBjb21tZSBgLmJyaXF1ZSAqYCBkYW5zXG4gICBfZ3JpbGxlLmNzcykgOiB1bmUgdHVpbGUgcXVpIHNlIHN1cmxpZ25lIGF1IHBhc3NhZ2UgZGUgbGEgc291cmlzIGZhaXQgdGV4dGUsIGVsbGUgbidlbiBlc3RcbiAgIHBhcyB1biAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTgpLiAqL1xuLmRlcm91bGVCcmlxdWUsXG4uZGVyb3VsZUJyaXF1ZSAqIHtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xufVxuXG4uZGVyb3VsZUJyaXF1ZSBpbWcsXG4uZGVyb3VsZUJyaXF1ZSBzdmcge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIC13ZWJraXQtdXNlci1kcmFnOiBub25lO1xufVxuXG4uZGVyb3VsZUJyaXF1ZSB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgd2lkdGg6IDE2MnB4O1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIExhIGZhY2UgOiBsJ2ljw7RuZSBvdSBsZSB2aXN1ZWwsIGV0IGwnw6l0aXF1ZXR0ZSDigJQgY2UgcXVlIGxlIHNjcmlwdCByZW1wbGFjZSDDoCBjaGFxdWUgY2hvaXguXG4gICBFbGxlIHJlbXBsaXQgVE9VVEUgbGEgdHVpbGUsIHBhcyBzZXVsZW1lbnQgbGEgaGF1dGV1ciBkZSBzb24gY29udGVudSA6IGMnZXN0IHN1ciBlbGxlIHF1ZVxuICAgbGUgdmlzdWVsIHByZW5kIHNlcyAxMDAgJSBkZSBoYXV0ZXVyIDsgw6AgOTBweCBkZSBjb250ZW51LCBsJ2ltYWdlIGxhaXNzYWl0IHVuZSBiYW5kZSBlblxuICAgYmFzIGRlIGxhIHR1aWxlIChjb25zdGF0IGR1IGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTgpLiAqL1xuLmRlcm91bGVCcmlxdWVGYWNlIHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cblxuLyogTU9ERSBWSVNVRUxTICguZGVyb3VsZVZpc3VlbHMsIHBvc8OpIHBhciBkZXJvdWxlU2NlbmFyaW8udHMgc3VyIHRvdXMgbGVzIGTDqXJvdWzDqXMgZGUgbGFcbiAgIHBhZ2UpIDogbGEgdHVpbGUgR0FSREUgU0EgRk9STUUsIDE2MsOXMTAwLCBldCBsJ2lsbHVzdHJhdGlvbiBsYSByZW1wbGl0IChyZWNhZHLDqWUsIGVsbGUgZXN0XG4gICBlbiAxNi85KSA7IGwnaWPDtG5lIGV0IGwnw6l0aXF1ZXR0ZSBkaXNwYXJhaXNzZW50IOKAlCB0YW50IHBpcyBwb3VyIGxlIG5vbSwgbGEgZm9ybWUgcHJpbWVcbiAgIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xOCA6IHBhcyBkZXMgdHVpbGVzIGNhcnLDqWVzIMOgIGPDtHTDqSBkZXMgcmVjdGFuZ3VsYWlyZXMpLlxuICAgTGEgY3JvaXggZXQgdW5lIHNjw6huZSBzYW5zIGlsbHVzdHJhdGlvbiBnYXJkZW50IGxldXIgZGVzc2luLiAqL1xuLmRlcm91bGVCcmlxdWVWaXN1ZWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5kZXJvdWxlVmlzdWVscyAuZGVyb3VsZUJyaXF1ZVZpc3VlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4uZGVyb3VsZVZpc3VlbHMgLmRlcm91bGVCcmlxdWVJY29uZTpub3QoLmRlcm91bGVCcmlxdWVJY29uZVNldWxlKSxcbi5kZXJvdWxlVmlzdWVscyAuZGVyb3VsZUJyaXF1ZUljb25lOm5vdCguZGVyb3VsZUJyaXF1ZUljb25lU2V1bGUpIH4gLmRlcm91bGVCcmlxdWVUaXRyZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogTGEgYmFycmUgZGUgY2hvaXggOiBmbMOoY2hlIMK3IHBvaW50cyDCtyBmbMOoY2hlIOKAlCBsZSBkZXNzaW4gZGUgbGEgZ2FsZXJpZSBkJ2lsbHVzdHJhdGlvbnMgZGVcbiAgIGxhIHBhZ2UgwqsgQ29uZmlndXJlciDCuyAoLmRpdkFjdGlvbkZpY2hlIHNvdXMgbCdpbWFnZSwgNTVfc2NlbmFyaW9Nb2RpZmllci5jc3MpLCBhdmVjIGxlc1xuICAgbcOqbWVzIC5jdGFEaXNjcmV0IGV0IC5yZWNhcElsbHVzdHJhdGlvblBvaW50LiBMZXMgZmzDqGNoZXMgc29udCByYW1lbsOpZXMgw6AgbGEgaGF1dGV1ciBkZXNcbiAgIHBvaW50cyA6IGxhIGJhcnJlIGVzdCBmaW5lLCBlbGxlIG5lIGZhaXQgcGFzIGJvdXRvbi4gR3JvdXDDqWUgYXUgQ0VOVFJFLCBmbMOoY2hlcyBjb250cmUgbGVzXG4gICBwb2ludHMsIGV0IG5vbiDDqXRhbMOpZSBzdXIgbGEgbGFyZ2V1ciA6IGRldXggcG9pbnRzIHNldWxzIGZhaXNhaWVudCB2aWRlLCBldCBsZSBncm91cGUgZGl0XG4gICBtaWV1eCDCqyBjJ2VzdCBsZSBjaG9peCBkZSBjZXR0ZSBjYXNlIMK7IDsgw6AgY2lucSBwb2ludHMgbGUgZ3JvdXBlIHByZW5kIGRlIGx1aS1tw6ptZSBwcmVzcXVlXG4gICB0b3V0ZSBsYSBsYXJnZXVyIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xOCkuICovXG4uZGVyb3VsZUJhcnJlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiA2cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xufVxuXG4vKiBQb2ludHMgcmVzc2VycsOpcyA6IGxhIHpvbmUgZGUgY2xpYyByZXN0ZSAyNHB4IGRlIGhhdXQsIG1haXMgMTZweCBkZSBsYXJnZSwgc2FucyDDqWNhcnQg4oCUXG4gICBhdSBkb2lndCBvbiBuZSBjbGlxdWUgcGFzIGljaSwgYydlc3QgdW4gc2l0ZSBkJ29yZGluYXRldXIuICovXG4uZGVyb3VsZUJhcnJlIC5yZWNhcElsbHVzdHJhdGlvblBvaW50cyB7XG4gICAgZ2FwOiAwO1xufVxuXG4uZGVyb3VsZUJhcnJlIC5yZWNhcElsbHVzdHJhdGlvblBvaW50IHtcbiAgICB3aWR0aDogMTZweDtcbn1cblxuLyogQXUtZGVsw6AgZGUgY2lucSBwb3NpdGlvbnMgOiDCqyAzLzYgwrsgw6AgbGEgcGxhY2UgZGVzIHBvaW50cy4gKi9cbi5kZXJvdWxlQ29tcHRldXIge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xuICAgIHBhZGRpbmc6IDAgNHB4O1xufVxuXG4uZGVyb3VsZUJhcnJlIC5jdGFEaXNjcmV0IHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIGhlaWdodDogMjRweDtcbiAgICBwYWRkaW5nOiAwIDhweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbn1cblxuLmRlcm91bGVCYXJyZSAuY3RhRGlzY3JldDpkaXNhYmxlZCB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jTm9pcjUpO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLyogSWPDtG5lIGRlIHNjw6huZSA6IGxhIGNhc2UgNjQgZGUgdG91dCBsZSBwcm9qZXQgKDU0X2ljb25lcy5jc3MpLCA2cHggZCdhaXIgPSBkZXNzaW4gNTIuXG4gICBMYSBjcm9peCBhIGxhIG3Dqm1lIGNhc2UsIGRhbnMgbGVzIGRldXggbW9kZXMuIFNBTlMgZm9uZCBwcm9wcmUgOiBsJ2ljw7RuZSBwcmVuZCBsYSBjb3VsZXVyXG4gICBkZSBzYSB0dWlsZSwgcXVlbGxlIHF1J2VsbGUgc29pdCAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTgsIHBvdXIgbGEgbWlzZSBlblxuICAgYXZhbnQgY2ktZGVzc291cykuICovXG4uZGVyb3VsZUJyaXF1ZUljb25lLFxuLmRlcm91bGVCcmlxdWVDcm9peCB7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiA2NHB4O1xuICAgIHBhZGRpbmc6IDZweDtcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiBNSVNFIEVOIEFWQU5UIEQnVU5FIFNDw4hORSAoLmRlcm91bGVBdmVjTWlzZUVuQXZhbnQsIHBhZ2UgZCd1bmUgc2PDqG5lKSA6IHNldWxlIGxhIHR1aWxlXG4gICBxdWkgcG9ydGUgbGEgc2PDqG5lIGRlIGxhIHBhZ2UgZ2FyZGUgbGEgY291bGV1ciwgbGVzIGF1dHJlcyBkZXZpZW5uZW50IFRSQU5TUEFSRU5URVMg4oCUIGxlXG4gICBmb25kIGRlIGxhIHBhZ2UgcGFzc2UgYXUgdHJhdmVycywgb24gdm9pdCBkJ3VuIGNvdXAgZCfFk2lsIG/DuSBsYSBzY8OobmUgam91ZSBkYW5zIGxlXG4gICBzY8OpbmFyaW8gKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE4KS4gUGFzIGRlIGJsYW5jIDogYmxhbmMgw6AgYm9yZCwgYydlc3QgbGVcbiAgIGRlc3NpbiBkZXMgYm91dG9ucywgZXQgdW5lIHR1aWxlIG4nZXN0IHBhcyBjbGlxdWFibGUuIExhIGNsYXNzZSBzdWl0IGxlIGNob2l4IGR1XG4gICB2aXNpdGV1ciAoZGVyb3VsZVNjZW5hcmlvLnRzKS4gKi9cbi5kZXJvdWxlQXZlY01pc2VFbkF2YW50IC5kZXJvdWxlQnJpcXVlIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLmRlcm91bGVBdmVjTWlzZUVuQXZhbnQgLmRlcm91bGVCcmlxdWUuZGVyb3VsZUJyaXF1ZU1pc2VFbkF2YW50IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbi5kZXJvdWxlQnJpcXVlVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHBhZGRpbmc6IDhweCAxMHB4IDAgMTBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLyogRW1wbGFjZW1lbnQgcmV0aXLDqSAoY3JvaXgpIDogbGEgYnJpcXVlIHJlc3RlIMOgIHNhIHBsYWNlLCDDqXRlaW50ZS4gKi9cbi5kZXJvdWxlQnJpcXVlUmV0aXJlZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDtcbn1cblxuLmRlcm91bGVCcmlxdWVSZXRpcmVlIC5kZXJvdWxlQnJpcXVlVGl0cmUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNDw4lOQVJJTyAtIEZpY2hpZXIgcHJpbmNpcGFsXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBDZSBmaWNoaWVyIGltcG9ydGUgbGVzIHBhcnRpYWxzIG9yZ2FuaXPDqXMgcGFyIHRow6htZS5cbiAgIENoYXF1ZSBwYXJ0aWFsIGfDqHJlIHVuIGFzcGVjdCBzcMOpY2lmaXF1ZSBkZSBsYSBzY2VuYXJpby5cblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2V0aXF1ZXR0ZXMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19ncmlsbGUuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19mb3JtdWxhaXJlcy5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2ZhcUVuY2FkcmUuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19vbmdsZXRNZW51LmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fbWVudUFqb3V0ZXIuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19icmlxdWVzQ291bGV1cnMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19kcmFnRHJvcC5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX21vZGFsZS5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2FsZXJ0ZXMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL191cGxvYWRzLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fYmxvY1Jlc2VhdVNvY2lhbC5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX29uZ2xldEdyb3VwZXMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19vbmdsZXREaXN0cmlidXRpb25zLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fb25nbGV0Q2FydG9ucy5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX29uZ2xldFJlc3VsdGF0cy5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX29uZ2xldFB1YmxpY2F0aW9uLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fcmVjYXBpdHVsYXRpZi5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2Rlcm91bGUuY3NzJztcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBPTkdMRVQgU1RVRElPIC0gTGFuY2V1ciAvIFBpbG90YWdlXG4gICBVdGlsaXNlIC5wYW5uZWF1V3JhcHBlciAvIC5wYW5uZWF1R2F1Y2hlIC8gLnBhbm5lYXVGb3JtdWxhaXJlXG4gICBkw6lmaW5pcyBkYW5zIDU2X3NjZW5hcmlvL19mb3JtdWxhaXJlcy5jc3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCTE9DIFNUVURJTyAoZGVzaWduIHNvYnJlLCBlbiBwcmVtaWVyKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJsb2NTdHVkaW8ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdDb3Jwcyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYmxvY1N0dWRpbyBoMyB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uYmxvY1N0dWRpbyAuY3RhU3VwcHJpbWVyIHtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG59XG5cbi8qIMOJY3JhbiBkZSBzdXBwcmVzc2lvbiA6IGF2ZXJ0aXNzZW1lbnQgYWNjZXB0w6kgKGNhc2UgwqsgSidhaSBjb21wcmlzIMK7KSDigJQgZm9uZCBub2lyIGVuIHN1cmNoYXJnZVxuICAgZHUgcm91Z2UgZCdhbGVydGUsIG1hcmdlcyBldCBwYWRkaW5nIGluY2hhbmfDqXMgcG91ciBuZSByaWVuIGTDqWNhbGVyLiAqL1xuLmFsZXJ0RXJyZXVyLmFjY2VwdGVBdmVydGlzc2VtZW50IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBVUkwgQk9YIChjb3BpZXIgbCdVUkwpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uc3R1ZGlvVXJsQm94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4uc3R1ZGlvVXJsIHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5zdHVkaW9Vcmw6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uYnRuQ29waWVyIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmJ0bkNvcGllcjpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIMOJdGF0IGFwcsOocyBjb3BpZSA6IHRleHRlIHZlcnQsIG5vbiBpbnRlcmFjdGlmICovXG4uYnRuQ29waWVyLmNvcGllIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBRUiBDT0RFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uc3R1ZGlvUXJDb2RlIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDE1MHB4O1xuICAgIGhlaWdodDogMTUwcHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xN3B4KTtcbn1cblxuLyogTCfDqXF1aXBlIHF1ZSBsZSBRUiBjb2RlIG5vdXJyaXQgKG5vbSBldCBibGFzb24pLCBldCBsZSBnZWwgcG9zw6kgcGFyIHVuZSBzY8OobmVcbiAgIGF1IGNvdXAgZCdlbnZvaSDigJQgX2Jsb2NRckNvZGUudHdpZy4gKi9cbi5xckNvZGVFcXVpcGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLnFyQ29kZUVxdWlwZUJsYXNvbiB7XG4gICAgd2lkdGg6IDMycHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi5xckNvZGVHZWxlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG59XG5cbi8qIE9uZ2xldCDDiXF1aXBlcyBkZSBEaWZmdXNlciA6IGNoYXF1ZSDDqXF1aXBlIGV0IHNlcyBpbnNjcml0cyAoZXF1aXBlcy50d2lnKS4gKi9cbi5ibG9jRXF1aXBlTGlnbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIG1hcmdpbjogMDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09ERSBEJ0FDQ8OIUyAoY2FjaMOpIHBhciBkw6lmYXV0KVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnN0dWRpb0NvZGVCb3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4uc3R1ZGlvQ29kZU1hc3F1ZSxcbi5zdHVkaW9Db2RlVmFsZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM2VtO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uc3R1ZGlvQ29kZU1hc3F1ZSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi5idG5EZWNvdXZyaXIge1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyRm9ybSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmJ0bkRlY291dnJpcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4uYnRuRGVjb3V2cmlyW2hpZGRlbl0ge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENIQU5HRVIgTUVTIENPREVTIChzdHlsZSBkaXNjcmV0IGNvbW1lIFN1cHByaW1lcilcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5idG5DaGFuZ2VyQ29kZXMge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbi5idG5DaGFuZ2VyQ29kZXM6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUExBQ0VIT0xERVIgKHJpZW4gZGUgY29uZmlndXLDqSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5zdHVkaW9QbGFjZWhvbGRlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDQ4cHggMjRweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPTVBURVVSIEdMT0JBTCAoZm9uZCBibGFuYywgYXUtZGVzc3VzIGR1IG1vZGUgdGVzdClcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNjb21wdGV1ckdsb2JhbCB7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4jY29tcHRldXJHbG9iYWwgPiBkaXYge1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICBtYXJnaW4tbGVmdDogNDBweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgI2NvbXB0ZXVyR2xvYmFsID4gZGl2IHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gICAgfVxufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5jb21wdGV1ckdsb2JhbExpbWl0ZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgbWFyZ2luOiAxMHB4IDAgNHB4O1xufVxuKi9cblxuLmNvbXB0ZXVyR2xvYmFsTGlnbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5jb21wdGV1ckdsb2JhbFRvdGFsIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgcGFkZGluZy10b3A6IDZweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY0FjY2VudDMpO1xufVxuXG4uY29tcHRldXJHbG9iYWxMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi5jb21wdGV1ckdsb2JhbFZhbGV1cixcbi5jb21wdGV1ckdsb2JhbFZhbGV1clJlZWxzLFxuLmNvbXB0ZXVyR2xvYmFsVmFsZXVyRmljdGlmcyB7XG4gICAgZm9udDogdmFyKC0tZk1vbm8yNGIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG1pbi13aWR0aDogNjBweDtcbn1cblxuLmNvbXB0ZXVyR2xvYmFsVG90YWwgLmNvbXB0ZXVyR2xvYmFsVmFsZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG59XG5cbiNjb21wdGV1ckdsb2JhbC5tb2RlVGVzdEFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50MSk7XG59XG5cbiNjb21wdGV1ckdsb2JhbC5saW1pdGVBdHRlaW50ZSAuY29tcHRldXJHbG9iYWxWYWxldXIge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJMT0MgTU9ERSBURVNUIChwYXJ0aWNpcGFudHMgZmljdGlmcylcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5maWN0aWZBY3RpZiAuYmxvY0ljb25lIGltZyxcbi5maWN0aWZBY3RpZiAuYmxvY0ljb25lIHN2ZyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDEpO1xufVxuXG4vKiBTZWN0aW9uIGZpY3RpZnMgKi9cbiNzZWN0aW9uRmljdGlmcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4jc2VjdGlvbkZpY3RpZnMuaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBPdmVycmlkZSBkdSBibG9jIGfDqW7DqXJpcXVlIHBvdXIgbGUgbW9kZSB0ZXN0ICovXG4uYmxvYy5ibG9jR3JvdXBlIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5ibG9jR3JvdXBlIC5ibG9jQ29ycHMge1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDE2cHg7XG59XG5cbi8qIExpZ25lIDIgOiBUb2dnbGUgLSByw6l1dGlsaXNlIC50b2dnbGVBdmVjTGFiZWwgZGUgX21vZGFsZS5jc3MgKi9cblxuLyogTGlnbmUgMyA6IENvbnRlbnUgY29uZGl0aW9ubmVsICovXG4uYmxvY0dyb3VwZUNvbnRlbnUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbn1cblxuLmJsb2NHcm91cGVSZWVscy5oaWRkZW4sXG4uYmxvY0dyb3VwZUZpY3RpZnMuaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBDb21wdGV1cnMgLSByw6l1dGlsaXNlIGxlcyBjbGFzc2VzIGRlIF9vbmdsZXRHcm91cGVzLmNzcyAqL1xuLmJsb2NHcm91cGVSZWVscyAvKiwgLmZpY3RpZnNDb21wdGV1ciAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi8qIExhYmVsIGF2YW50IGxlIGNvbXB0ZXVyICovXG4jYmxvY01vZGVUZXN0IC5jb21wdGV1ckxhYmVsIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogVmFsZXVyIHByaW5jaXBhbGUgKGdyb3MgY2hpZmZyZSkgKi9cbiNibG9jTW9kZVRlc3QgLmNvbXB0ZXVyVmFsZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIFwiL1wiICovXG4jYmxvY01vZGVUZXN0IC5jb21wdGV1clNlcGFyYXRldXIge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4vKiBUZXN0IGVuIGNvdXJzIDogZm9ybXVsYWlyZXMgZMOpc2FjdGl2w6lzICovXG4jYmxvY01vZGVUZXN0LnRlc3RFbkNvdXJzIC50b2dnbGVTbGlkZXIge1xuICAgIG9wYWNpdHk6IC41O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLyogRm9ybXVsYWlyZSBkJ2Fqb3V0IGZpY3RpZnMgKi9cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmZpY3RpZnNGb3JtdWxhaXJlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgZmxleC13cmFwOiB3cmFwO1xufVxuKi9cblxuLyogSW5wdXQgZXQgYm91dG9uIG3Dqm1lIGhhdXRldXIgKi9cbi5pbnB1dE5vbWJyZUZpY3RpZnMge1xuICAgIHdpZHRoOiA4MHB4O1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uaW5wdXROb21icmVGaWN0aWZzLmhpZGRlbiAvKiwgLmJ0bkFqb3V0ZXJGaWN0aWZzLmhpZGRlbiAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRBQkxFQVUgRE9OTsOJRVMgQ09MTEVDVMOJRVMgKGRhbnMgcmVjYXBCbG9jKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnRhYmxlYXVEb25uZWVzQ29sbGVjdGVlcyB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbn1cblxuLnRhYmxlYXVEb25uZWVzQ29sbGVjdGVlcyB0ZCB7XG4gICAgcGFkZGluZzogM3B4IDEycHggM3B4IDA7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIG1heC13aWR0aDogMzAwcHg7XG59XG5cbi50YWJsZWF1RG9ubmVlc0NvbGxlY3RlZXMgdGQ6Zmlyc3QtY2hpbGQge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi50YWJsZWF1RG9ubmVlc0NvbGxlY3RlZXMgdGQ6bGFzdC1jaGlsZCB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTUVOVSBERVMgU09VUy1SVUJSSVFVRVNcbiAgIEJhcnJlIGRlIG5hdmlnYXRpb24gZW50cmUgbGVzIHBhZ2VzIHPFk3VycyBkJ3VuZSBydWJyaXF1ZVxuICAgKEJpbmdvIDc1IC8gQmluZ28gOTDigKYpLlxuXG4gICBUcm9pcyDDqXRhdHMsIHRyb2lzIHLDtGxlcyBkaXN0aW5jdHMgOlxuICAgICAtIHNvdWxpZ27DqSBmaW4gZ3JpcyA6IHPDqXBhcmUgbGVzIHPFk3VycyBsZXMgdW5lcyBkZXMgYXV0cmVzIDtcbiAgICAgLSBzb3VsaWduw6kgw6lwYWlzICAgIDogbGEgc8WTdXIgb8O5IGwnb24gc2UgdHJvdXZlIDtcbiAgICAgLSBwYXbDqSBwbGVpbiAgICAgICAgOiBsYSBzxZN1ciBzdXJ2b2zDqWUsIGNvdXZlcnRlIGNvbW1lIHVuIGJvdXRvbi5cblxuICAgUEFSVEFHw4kgVml0cmluZSAvIFN0dWRpby4gTGUgYmFsaXNhZ2UgZGlmZsOocmUgZGVzIGRldXggY8O0dMOpcyAobGllbnMgcG9zw6lzXG4gICDDoCBsYSBtYWluIGPDtHTDqSBWaXRyaW5lLCBkw6lyaXbDqXMgZHUgdGFnIGRlIHNvdXMtcnVicmlxdWUgY8O0dMOpIFN0dWRpbyksIGxhXG4gICBnw6lvbcOpdHJpZSBlc3QgbGEgbcOqbWUsIGV0IGxhIGNvdWxldXIgZXN0IGwnQWNjZW50IGRlIGxhIHBhZ2UgKC0tY0FjY2VudDMsXG4gICB0ZXh0ZSAtLWNBY2NlbnR0KSA6IHZlcnRlIGVuIFZpdHJpbmUsIGJsZXVlIGVuIFN0dWRpbywgcGFyIGxhIGNsYXNzZSBkdSBib2R5LlxuXG4gICBUcmFuc2NyaXQgZHUgbWVudSBkZSB0aXJhZ2UtYXUtc29ydC5uZXQgKHLDqWbDqXJlbmNlIGNoZWYgZGUgcHJvamV0KS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNtZW51U291c1J1YnJpcXVlcyB7XG4gICAgcGFkZGluZzogdmFyKC0tZ2FwUmVkdWl0KTtcbn1cblxuI21lbnVTb3VzUnVicmlxdWVzIGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luOiA3cHggMCAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbiNtZW51U291c1J1YnJpcXVlcyBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLyogQ29udGllbnQgbGUgcGF2w6kgZGUgc3Vydm9sIDogc2FucyDDp2EsIHNvbiB6LWluZGV4IG7DqWdhdGlmIGxlIGZlcmFpdCBwYXNzZXJcbiAgICAgICBkZXJyacOocmUgbGUgZm9uZCBkZSBsYSBwYWdlIGF1IGxpZXUgZGUgcmVzdGVyIGRlcnJpw6hyZSBsZSB0ZXh0ZS4gKi9cbiAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgbWFyZ2luOiAwIDRweDtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhMTQpO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY0JsYW5jMyk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiAuM3M7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgICAvKiBMYSBzaWxob3VldHRlIG5lIGNoYW5nZSBwbHVzIGVuIGZlbsOqdHJlIMOpdHJvaXRlIDogc2V1bCBsZSBjb3JwcyBkdSB0ZXh0ZSBkZXNjZW5kLlxuICAgICAgIFVuIGJvdXRvbiBuZSBjaG9pc2l0IHBhcyBzb24gcGFkZGluZyAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiAqL1xuICAgICNtZW51U291c1J1YnJpcXVlcyBhIHtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgIH1cbn1cblxuLyogTGEgc8WTdXIgb8O5IGwnb24gc2UgdHJvdXZlLiAqL1xuI21lbnVTb3VzUnVicmlxdWVzIGEuYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi8qIExlIHBhdsOpIGRlIHN1cnZvbCA6IGF1IHJlcG9zIGlsIGVzdCByZW50csOpIMOgIGwnaW50w6lyaWV1ciBkdSB0ZXh0ZSwgZXQgdHJhbnNwYXJlbnQuICovXG4jbWVudVNvdXNSdWJyaXF1ZXMgYTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDRweDtcbiAgICByaWdodDogOHB4O1xuICAgIGJvdHRvbTogLTJweDtcbiAgICBsZWZ0OiA4cHg7XG4gICAgei1pbmRleDogLTEwMDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogLjNzO1xufVxuXG4vKiBGb2N1cyBjbGF2aWVyIDogYW5uZWF1IGludMOpcmlldXIsIHBhcyBkJ291dGxpbmUg4oCUIGxlIGxpZW4gbidhIHBhcyBkZSBzb3VsaWduZW1lbnRcbiAgIHF1aSBzaWduYWxlcmFpdCBsZSBwYXJjb3VycyBhdSBjbGF2aWVyLiAqL1xuI21lbnVTb3VzUnVicmlxdWVzIGE6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWNGb3JtRm9jdXMpIGluc2V0O1xufVxuXG4jbWVudVNvdXNSdWJyaXF1ZXMgYTpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLyogQXUgc3Vydm9sIGlsIGTDqWJvcmRlIGR1IHRleHRlIGV0IHNlIHJlbXBsaXQgOiBjJ2VzdCBjZSBkw6lib3JkZW1lbnQgcXVpIGZhaXQgbGUgem9vbS4gKi9cbiNtZW51U291c1J1YnJpcXVlcyBhOmhvdmVyOjpiZWZvcmUge1xuICAgIHRvcDogLTJweDtcbiAgICByaWdodDogLThweDtcbiAgICBib3R0b206IC0ycHg7XG4gICAgbGVmdDogLThweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTUVOVSBERVMgU09VUy1SVUJSSVFVRVMgLSBTdHVkaW9cbiAgIEltcG9ydCBkZSBsYSBzdHJ1Y3R1cmUgbm95YXUuIExhIGNvdWxldXIgZHUgbWVudSBlc3QgbCdBY2NlbnQgZGUgbGEgcGFnZSAoY2xhc3NlIGR1IGJvZHkpLFxuICAgcmllbiDDoCBkw6ljbGFyZXIgaWNpLiBKdW1lYXUgOiB2aXRyaW5lL2Nzcy9tZW51U291c1J1YnJpcXVlcy5jc3MuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5AaW1wb3J0ICcuLi9jb21wb3NhbnRzL21lbnVTb3VzUnVicmlxdWVzLmNzcyc7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUEFHRSBBQ0PDiFMgU1RVRElPIChzYWlzaWUgY29kZSA1IGxldHRyZXMpXG4gICBMYXlvdXQgY29tbXVuIGRhbnMgbm95YXUvY3NzL2NvbXBvc2FudHMvZm9ybUFjY2VzQ29kZS5jc3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIExpZW4gY29ubmV4aW9uIOKAlCBzcMOpY2lmaXF1ZSBhdSBzdHVkaW8gdW5pcXVlbWVudCAqL1xuLm5vdGVDb25uZXhpb24ge1xuICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubm90ZUNvbm5leGlvbiBhIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDMpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ubm90ZUNvbm5leGlvbiBhOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0FjY2VudDQpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIERvbm5lciB2b3RyZSBhdmlzIChzcmMvU3R1ZGlvL1NlcnZpY2UvTm90ZXIvQ0xBVURFLm1kKSDigJQgU3R1ZGlvIHNldWxlbWVudC5cbiAgIExlIGNvbnRlbnUgZGUgbCdvbmdsZXQgwqsgRG9ubmVyIHZvdHJlIGF2aXMgwrsgKG9uZ2xldC9fYXZpcy50d2lnKSA6IGxlIHJhbmcgZGVzIG9uemVcbiAgIGNoaWZmcmVzIGRhbnMgbGUgZm9ybXVsYWlyZSBkZSBjb25maWd1cmF0aW9uLCBldCBsZSByw6ljYXBpdHVsYXRpZiBkYW5zIHNhIGNhcnRlLlxuICAgVG91dCBsZSByZXN0ZSB2aWVudCBkdSBtb3VsZSBjb21tdW4gKGZvcm0uY3NzLCA1Nl9zY2VuYXJpby9fZm9ybXVsYWlyZXMuY3NzLCA1N19vbmdsZXRTdHVkaW8uY3NzKS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIExlcyBvbnplIGNoaWZmcmVzIDogdW4gcmFuZyBkZSBib3V0b25zIHJhZGlvLCBsZSBib3V0b24gbmF0aWYgY2FjaMOpLCBsZSBsaWJlbGzDqSBmYWl0IGxlIGJvdXRvbiAqL1xuLyogT256ZSBjYXNlcywgVE9VSk9VUlMgc3VyIHVuZSBsaWduZSA6IGVsbGVzIHNlIHBhcnRhZ2VudCBsYSBsYXJnZXVyIGR1IHBhbm5lYXUgKi9cbi5ub3RlclJhbmcge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xufVxuXG4ubm90ZXJDaGlmZnJlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxIDEgMDtcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbi5ub3RlckNoaWZmcmUgaW5wdXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbn1cblxuLm5vdGVyQ2hpZmZyZSBzcGFuIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVySW5wdXQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5ub3RlckNoaWZmcmU6aG92ZXIgc3BhbiB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi5ub3RlckNoaWZmcmU6aGFzKGlucHV0OmNoZWNrZWQpIHNwYW4ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQxKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNBY2NlbnQzKTtcbn1cblxuLm5vdGVyQ2hpZmZyZTpoYXMoaW5wdXQ6Zm9jdXMtdmlzaWJsZSkgc3BhbiB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNGb3JtRm9jdXMpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cblxuLyogTGUgZMOpZ3JhZMOpIGRlcyBjaGlmZnJlcyAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMjIpIDogbGUgMTAgw6AgMTAwICUsIHF1YXRyZSBwb2ludHNcbiAgIGRlIG1vaW5zIHBhciBjcmFuIGp1c3F1J2F1IDAgw6AgNjAgJS4gU3VyIGxlIHRleHRlIHNldWwsIGxhIGNhc2UgcmVzdGUgZW50acOocmUuICovXG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCgxKSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDYwJSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCgyKSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDY0JSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCgzKSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDY4JSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCg0KSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDcyJSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCg1KSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDc2JSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCg2KSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDgwJSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCg3KSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDg0JSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCg4KSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDg4JSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCg5KSBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jTm9pcjEpIDkyJSwgdHJhbnNwYXJlbnQpOyB9XG4ubm90ZXJDaGlmZnJlOm50aC1jaGlsZCgxMCkgc3BhbiB7IGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY05vaXIxKSA5NiUsIHRyYW5zcGFyZW50KTsgfVxuLm5vdGVyQ2hpZmZyZTpudGgtY2hpbGQoMTEpIHNwYW4geyBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNOb2lyMSkgMTAwJSwgdHJhbnNwYXJlbnQpOyB9XG5cbi8qIExlIHLDqWNhcGl0dWxhdGlmLCBkYW5zIHVuZSBjYXJ0ZSAuYmxvY1N0dWRpbyAqL1xuLm5vdGVyUmVjYXBOb3RlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4ubm90ZXJSZWNhcE1vdCB7XG4gICAgZm9udDogdmFyKC0tZkl0YWxpYzE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cbiIsIi8qKlxuICogS2l0IENTUyDigJQgRWZmZXRzIHZpc3VlbHMgKGNhcnRlKVxuICpcbiAqIEFwcGxpcXVlIHZpYSBkYXRhLWVmZmV0IHN1ciAjc2FsbGVFY3Jhbi5cbiAqIEFqb3V0ZXIgLnZ1ZUNhcnRlIHN1ciB0b3V0IGJsb2MgYSBzdHlsaXNlci5cbiAqL1xuXG4vKiDilIDilIAgVmFyaWFibGUgYm9yZHVyZSBkw6lyaXbDqWUgKHVuZSBzZXVsZSBzb3VyY2UpIOKUgOKUgCAqL1xuI3NhbGxlRWNyYW4ge1xuICAgIC0taWxvdEJvcmR1cmU6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clByaW1haXJlKSAzMCUsIHRyYW5zcGFyZW50KTtcbn1cblxuLyog4pSA4pSAIENsYXNzZXMgcGFydGFnw6llcyDilIDilIAgKi9cblxuLnZ1ZVRpdHJlQ2VudHJlIHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTEpO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mZkVjcmFuKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuLyogU2NlbmUgZCdlbnRyZWUgY29tbXVuZSAqL1xuQGtleWZyYW1lcyB2dWVBcHBhcml0aW9uIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNzVlbSk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIH1cbn1cblxuLnZ1ZUFuaW1lciB7XG4gICAgYW5pbWF0aW9uOiB2dWVBcHBhcml0aW9uIDE1MG1zIGVhc2Utb3V0IGZvcndhcmRzO1xufVxuXG4vKiBDYXJ0ZSBkZSBiYXNlLiBTb24gY2FkcmUgZXN0IGwnZXNwYWNlIGRlcyBjYXJ0ZXMgZGUgdG91dCBsJ8OpY3JhbiAoRGltZW5zaW9ubmV1ci5lc3BhY2VDYXJ0ZSkgOlxuICAgbGUgbcOqbWUgc3VyIHRvdXRlcyBsZXMgY2FydGVzLCBxdWkgbmUgc3VpdCBuaSBsYSBwb2xpY2UgbmkgbGUgem9vbS4gKi9cbi52dWVDYXJ0ZSB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taWxvdFJheW9uKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1pbG90UGFkZGluZyk7XG59XG5cbi8qIEwnw65sb3QgZmFpdCBtYWluIGQndW5lIGNhcnRlICh1biBibG9jLCBwYXMgdW4gdGFibGVhdSBkdSBraXQpIGxhIHJlbXBsaXQgOiBhdWN1biB2aWRlIG5lXG4gICBzJ2Fqb3V0ZSBhdSBjYWRyZSBkJ3VuIGPDtHTDqS4gTGVzIHRhYmxlYXV4IGR1IGtpdCwgZXV4LCBvbnQgbGEgbGFyZ2V1ciBxdWUgbGUga2l0IGNhbGN1bGUsIGV0IGxhXG4gICBjYXJ0ZSBsZXMgZW52ZWxvcHBlLiAqL1xuLnZ1ZUNhcnRlIGRpdi52dWVUYWJsZWF1IHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICBmbGV4LWdyb3c6IDE7XG59XG5cbi8qIEdsYWNpcyAqL1xuW2RhdGEtZWZmZXQ9XCIxXCJdIC52dWVDYXJ0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJGb25kKSAzMCUsIHRyYW5zcGFyZW50KTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggdmFyKC0tY05vaXIpO1xufVxuXG4vKiBUcmFuc3BhcmVudCAqL1xuW2RhdGEtZWZmZXQ9XCIyXCJdIC52dWVDYXJ0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJGb25kKSA3MCUsIHRyYW5zcGFyZW50KTtcbn1cblxuLyogVm9pbGUgKi9cbltkYXRhLWVmZmV0PVwiM1wiXSAudnVlQ2FydGUge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNjVkZWcsXG4gICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyRm9uZCkgOTUlLCB0cmFuc3BhcmVudCksXG4gICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyRm9uZCkgNDAlLCB0cmFuc3BhcmVudCkpO1xufVxuXG4vKiBFbmNhZHJlICovXG5bZGF0YS1lZmZldD1cIjRcIl0gLnZ1ZUNhcnRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb3VsZXVyRm9uZCk7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuLyogT21icmUgKi9cbltkYXRhLWVmZmV0PVwiNVwiXSAudnVlQ2FydGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAyMHB4IHZhcigtLWNPbWJyZUZvcnRlKTtcbn1cblxuLyogUG9wdXAgOiBvbWJyZSBwb3J0ZWUgcG91ciBkZXRhY2hlciBkdSBmb25kICovXG4udnVlUG9wdXAge1xuICAgIGJveC1zaGFkb3c6IDAgMCAyMHB4IDEwcHggdmFyKC0tY05vaXIpO2JveC1zaGFkb3c6IDAgMCA1MHB4IDUwcHggdmFyKC0tY05vaXIpO1xufVxuXG4vKiBJbG90cyBpbnRlcm5lcyA6IGJvcmR1cmUgc3VidGlsZSBkYW5zIGxhIGNhcnRlICovXG5bZGF0YS1lZmZldF0gLnZ1ZUNhcnRlIC52dWVUYWJsZWF1LFxuW2RhdGEtZWZmZXRdIC52dWVDYXJ0ZSAudnVlTWF0Y2hMaWduZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWlsb3RSYXlvbkludGVybmUpO1xuICAgIGJvcmRlcjogdmFyKC0taWxvdEJvcmR1cmUpO1xufVxuXG4vKiBDYXJ0ZSDCqyBiYW5kZSDCuyA6IGxhIGNhcnRlIHNhbnMgc29uIGNhZHJlLCBwb3VyIHVuZSBib8OudGUgdHJvcCBiYXNzZSBvw7kgbGUgY2FkcmUgcHJlbmRyYWl0IHBsdXNcbiAgIGRlIHBsYWNlIHF1ZSBsZSBjb250ZW51IChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0yNikuIElsIG5lIHJlc3RlIHF1ZSBsJ8OubG90LCBxdWkgcHJlbmRcbiAgIGxhIGZvcm1lIGRlIGxhIGNhcnRlIGV0IGdhcmRlIHNhIHNpbGhvdWV0dGUgc2Vsb24gbCdlZmZldCDigJQgbCdvbWJyZSBkdSBnbGFjaXMgZXQgZGUgbCdvbWJyw6ksIGxlXG4gICBsaXNlcsOpIGRlIGwnZW5jYWRyw6kgOyBsZSB0cmFuc3BhcmVudCBldCBsZSB2b2lsZSBuJ29udCBxdWUgbGV1ciBjYWRyZSwgcXVpIGRpc3BhcmHDrnQuIEMnZXN0IGxhXG4gICBzY8OobmUgcXVpIGxhIGNob2lzaXQgKGB2dWVDYXJ0ZSB2dWVCYW5kZWApLCBqYW1haXMgdW4gY2FsY3VsLiAqL1xuLnZ1ZUNhcnRlLnZ1ZUJhbmRlLFxuW2RhdGEtZWZmZXRdIC52dWVDYXJ0ZS52dWVCYW5kZSB7XG4gICAgcGFkZGluZzogMDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuW2RhdGEtZWZmZXRdIC52dWVDYXJ0ZS52dWVCYW5kZSAudnVlVGFibGVhdSB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taWxvdFJheW9uKTtcbn1cblxuW2RhdGEtZWZmZXQ9XCIxXCJdIC52dWVDYXJ0ZS52dWVCYW5kZSAudnVlVGFibGVhdSB7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMjBweCB2YXIoLS1jTm9pcik7XG59XG5cbltkYXRhLWVmZmV0PVwiNFwiXSAudnVlQ2FydGUudnVlQmFuZGUgLnZ1ZVRhYmxlYXUge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG59XG5cbltkYXRhLWVmZmV0PVwiNVwiXSAudnVlQ2FydGUudnVlQmFuZGUgLnZ1ZVRhYmxlYXUge1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggdmFyKC0tY09tYnJlRm9ydGUpO1xufVxuXG4vKiBDYXJ0ZSBzYW5zIG9tYnJlIDogc2V1bGUgbCdvbWJyZSBkaXNwYXJhw650LCBsZSBmb25kIGV0IGxlIGNhZHJlIGRlIGwnZWZmZXQgcmVzdGVudC4gQydlc3QgbGFcbiAgIHNjw6huZSAob3UgbGUga2l0KSBxdWkgbGEgZGVtYW5kZSwgcG91ciB1biBhZmZpY2hhZ2UgZGUgYmFzZSBxdWkgbmUgZG9pdCBwYXMgZG9taW5lclxuICAgKGB2dWVDYXJ0ZSB2dWVTYW5zT21icmVgKS4gKi9cbltkYXRhLWVmZmV0XSAudnVlQ2FydGUudnVlU2Fuc09tYnJlIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4vKiBDYXJ0ZSDCqyBwYXN0aWxsZSDCuyA6IGxlIGRlc3NpbiBkZSBsYSBjYXJ0ZSDDoCBsYSB0YWlsbGUgZCd1bmUgbWVudGlvbiAodW4gcmFuZyDDoCBjw7R0w6kgZCd1blxuICAgcsOpc3VsdGF0KS4gU29uIGNhZHJlIHN1aXQgc29uIHByb3ByZSB0ZXh0ZSwgcGFzIGwnZXNwYWNlIGRlIGwnw6ljcmFuLCBxdWkgbGEgcmVuZHJhaXQgcGx1c1xuICAgZ3Jvc3NlIHF1ZSBjZSBxdSdlbGxlIGFjY29tcGFnbmUuIEMnZXN0IGxlIGtpdCBxdWkgbGEgZGVtYW5kZSAoYHZ1ZUNhcnRlIHZ1ZVBhc3RpbGxlYCkuICovXG4udnVlQ2FydGUudnVlUGFzdGlsbGUge1xuICAgIHBhZGRpbmc6IDAuM2VtIDAuNWVtO1xufVxuXG4vKiBHYWduYW50IC8gUGVyZGFudCAoZ2VuZXJpcXVlKSAqL1xuLnZ1ZUdhZ25hbnQge1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xufVxuXG4udnVlUGVyZGFudCB7XG4gICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICBvcGFjaXR5OiAwLjQ7XG59XG5cbi8qIFBhZ2luYXRpb24gKi9cbi52dWVQYWdpbmF0aW9uIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIExvdCBkaXNwbGF5ICovXG4udnVlTG90IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnZ1ZUxvdEltYWdlV3JhcCB7XG4gICAgZmxleDogMTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLWhlaWdodDogMDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLnZ1ZUxvdEltYWdlIHtcbiAgICBtYXgtd2lkdGg6IG1pbig4MCUsIGNhbGMoMTAwdncgKiAxMiAvIDQ4KSk7XG4gICAgbWF4LWhlaWdodDogbWluKDkwJSwgY2FsYygxMDB2aCAqIDggLyAyNCkpO1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIEJhZGdlIHLDqXN1bHRhdCDigJQgcGFydGljaXBhbnQgbm9tbcOpIG91IG51bcOpcm8gdG9tYm9sYSAqL1xuXG5Aa2V5ZnJhbWVzIHZ1ZUJhZGdlUmVzdWx0YXRQb3Age1xuICAgIDAlICAgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuMikgcm90YXRlKC02ZGVnKTsgfVxuICAgIDYwJSAgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEuMSkgcm90YXRlKDFkZWcpOyB9XG4gICAgODAlICB7IHRyYW5zZm9ybTogc2NhbGUoMC45Nik7IH1cbiAgICAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxKSByb3RhdGUoMGRlZyk7IH1cbn1cblxuQGtleWZyYW1lcyB2dWVCYWRnZVJlc3VsdGF0Rmxhc2gge1xuICAgIDAlICAge1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgIDZweCAgNnB4IDE4cHggMThweCAjRkZCM0MxODgsXG4gICAgICAgICAgICBpbnNldCAtNnB4ICA2cHggMThweCAxOHB4ICNCM0Q5RkY4OCxcbiAgICAgICAgICAgIGluc2V0ICA2cHggLTZweCAxOHB4IDE4cHggI0IzRkZCMzg4LFxuICAgICAgICAgICAgaW5zZXQgLTZweCAtNnB4IDE4cHggMThweCAjRkZGM0IzODg7XG4gICAgfVxuICAgIDEwMCUgeyBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAwIHRyYW5zcGFyZW50OyB9XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0LnZ1ZUFuaW1lciB7XG4gICAgLyogTGUgcG9wIGdhcmRlIGBmb3J3YXJkc2AgKGlsIGZpZ2UgbCfDqWNoZWxsZSBldCBsJ29wYWNpdMOpIGQnYXJyaXbDqWUpLCBsZSBmbGFzaCBOT04g4oCUIGV0XG4gICAgICAgYydlc3Qgdm9sb250YWlyZS4gTGUgZmxhc2ggcGlsb3RlIGBib3gtc2hhZG93YCA7IGF2ZWMgYGZvcndhcmRzYCwgc2EgZGVybmnDqHJlIGltYWdlXG4gICAgICAgcmVzdGFpdCBmaWfDqWUgdGFudCBxdWUgYC52dWVBbmltZXJgIMOpdGFpdCBwb3PDqWUsIGV0IGxhIGNsYXNzZSByZXN0ZSBzdXIgbGUgZGVybmllclxuICAgICAgIHLDqXN1bHRhdCBzb3J0aSAobGVzIGtpdHMgbmUgbGEgcmV0aXJlbnQgcXUnw6AgbCdhcnJpdsOpZSBkdSBzdWl2YW50LCBwYXJmb2lzIGphbWFpcykuXG4gICAgICAgTGUgZmxhc2ggbmUgZG9pdCBkb25jIHJpZW4gbGFpc3NlciBkZXJyacOocmUgbHVpIDogaWwgcmVuZCBgYm94LXNoYWRvd2AgYXUgYmFkZ2Ugw6AgbGFcbiAgICAgICBmaW4gZGVzIDcwMCBtcywgbGEgc3luY2hyb25pc2F0aW9uIGVzdCBwb3J0w6llIHBhciBsJ2FuaW1hdGlvbiBldCBub24gcGFyIGxlXG4gICAgICAgSmF2YVNjcmlwdCwgZXQgdW4gb3VibGkgZGUgcmV0cmFpdCBkZSBjbGFzc2UgbidhIHBsdXMgYXVjdW4gZWZmZXQgdmlzaWJsZS4gKi9cbiAgICBhbmltYXRpb246IHZ1ZUJhZGdlUmVzdWx0YXRQb3AgNTUwbXMgY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpIGZvcndhcmRzLFxuICAgICAgICAgICAgICAgdnVlQmFkZ2VSZXN1bHRhdEZsYXNoIDcwMG1zIGVhc2Utb3V0O1xufVxuXG4udnVlQmFkZ2VSZXN1bHRhdCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1wb2xpY2UxKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC8qIEFjY3JvY2hlcyBkJ2hhYmlsbGFnZSAoZG9jcy9hcmNoaXRlY3R1cmUvaGFiaWxsYWdlLm1kKSA6IGNoYXF1ZSBmYWxsYmFjayBlc3QgbGVcbiAgICAgICBkw6lmYXV0IGhpc3RvcmlxdWUgOyAtLWhhYkNvdWxldXJSZXN1bHRhdCBlc3QgcHVibGnDqWUgZW4gaW5saW5lIHBhciBWdWVLaXQuICovXG4gICAgcGFkZGluZzogdmFyKC0taGFiUGFkZGluZywgMC41ZW0gMWVtKTtcbiAgICBib3JkZXI6IHZhcigtLWhhYkJvcmR1cmUsIDFweCBzb2xpZCB0cmFuc3BhcmVudCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taGFiRm9ybWUsIHZhcigtLWlsb3RSYXlvbkludGVybmUpKTtcbiAgICAvKiBQQVMgZCdvbWJyZSA6IGxlIGJhZGdlIHLDqXN1bHRhdCBuJ2VuZG9zc2UgcGFzIC0taGFiT21icmUgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldFxuICAgICAgIDIwMjYtMDktMDQpLiBMJ29tYnJlIG5lIHZlbmFpdCBxdWUgZCd1biBoYWJpbGxhZ2UsIGxlIGZsYXAsIG/DuSBlbGxlIHNlcnRpc3NhaXQgbGVcbiAgICAgICBwYW5uZWF1IDsgZWxsZSBjb8O7dGFpdCBwbHVzIHF1J2VsbGUgbmUgcmVuZGFpdCDigJQgbGUgZmxhc2ggZCdhcHBhcml0aW9uIHBpbG90ZSBsdWlcbiAgICAgICBhdXNzaSBgYm94LXNoYWRvd2AsIGV0IHRvdXRlIG9tYnJlIGRlIGZvbmQgZGV2ZW5haXQgdW5lIHZhbGV1ciDDoCByZXN0aXR1ZXIgw6AgbGEgZmluXG4gICAgICAgZGUgbCdhbmltYXRpb24sIGRvbmMgdW5lIHN5bmNocm9uaXNhdGlvbiBkZSBwbHVzIMOgIHRlbmlyLiBMZSBiYWRnZSBlc3QgcGxhdCwgcG9zw6kgc3VyXG4gICAgICAgbGUgZm9uZCA6IHNhIHNpbGhvdWV0dGUgdGllbnQgw6AgbGEgYm9yZHVyZSwgw6AgbGEgZm9ybWUgZXQgw6AgbCdvdXRsaW5lLiAqL1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1oYWJQb2xpY2UsIGluaGVyaXQpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWhhYkNvdWxldXJSZXN1bHRhdCwgdmFyKC0taGFiRm9uZCwgdmFyKC0tY291bGV1ckZvbmQpKSk7XG4gICAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWNOb2lyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcbiAgICAvKiBQQVMgZGUgYG92ZXJmbG93OiBoaWRkZW5gIDogdW4gcsOpc3VsdGF0IGFtcHV0w6kgZXN0IHBpcmUgcXUndW4gcsOpc3VsdGF0IHF1aSBkw6lwYXNzZVxuICAgICAgIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOC0yOCkuIExlIGNhbGlicmFnZSBkZSBwb2xpY2UgZXN0IGzDoCBwb3VyIHF1ZSBsZSB0ZXh0ZVxuICAgICAgIHRpZW5uZSA7IHMnaWwgc2UgdHJvbXBlIGRlIHF1ZWxxdWVzIHBvdXIgY2VudCwgb24gdmV1dCBsZSB2b2lyIGTDqWJvcmRlciwgcGFzXG4gICAgICAgZGlzcGFyYcOudHJlLiBMZSB0cmFpdCBldCBsZSBsYWJlbCBkZSBsJ2FuaW1hdGlvbiDCqyBBbm51bMOpIMK7IHNvbnQgcG9zw6lzIGVuIGluc2V0OiAwLFxuICAgICAgIGlscyBuJ29udCBqYW1haXMgZXUgYmVzb2luIGR1IGNsaXBwaW5nLiAqL1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAyLjJlbTtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICAvKiBBbmNyZSBkZXMgw6l0YXRzIHBvc8OpcyBEQU5TIGxlIGJhZGdlIChyYW5nLCB0YW1wb24g4oCUIGtpdFBsdWdpbi9DTEFVREUubWQsIMKrIEtpdHMgZCdhZmZpY2hhZ2UgwrspLlxuICAgICAgIFNhbnMgZMOpY2FsYWdlLCBkb25jIHNhbnMgZWZmZXQgc3VyIGxhIG1pc2UgZW4gcGFnZSA7IHVuIGtpdCBxdWkgcG9zaXRpb25uZSBzZXMgYmFkZ2VzXG4gICAgICAgZW4gYWJzb2x1IChHYWduYW50S2l0KSBjb250aW51ZSBkZSBsZSBmYWlyZSBlbiBpbmxpbmUsIHF1aSBwcmltZS4gKi9cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0VmlkZSB7XG4gICAgLyogRnV0dXIgcsOpc3VsdGF0IDogbCdoYWJpbGxhZ2UgbmUgcydhcHBsaXF1ZSBxdSdhdSB0aXLDqS4gVW4gYmFkZ2UgdmlkZSBuZSBwb3J0ZSBuaSBmb25kIG5pXG4gICAgICAgYm9yZHVyZSBkJ2hhYmlsbGFnZSwgc2V1bGUgbGEgZm9ybWUgcmVzdGUgcG91ciBhbm5vbmNlciBsYSBzaWxob3VldHRlIOKAlCBldCBzb24gY29udG91ciBlc3RcbiAgICAgICBDRUxVSSBkZXMgYmFkZ2VzIHBsZWlucywgcGFzIHVuIHRyYWl0IHDDomxlIDogdW5lIHBsYWNlIMOgIHByZW5kcmUgc2Ugdm9pdCBjb21tZSB1bmUgcGxhY2VcbiAgICAgICBwcmlzZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDktMTEsIHF1aSByZW1wbGFjZSBsZSB0cmFpdCBkaXNjcmV0IGR1IDIwMjYtMDgtMjUpLiBMYSBib3JkdXJlXG4gICAgICAgZ2FyZGUgc2EgbGFyZ2V1ciBlbiB0cmFuc3BhcmVudCBwb3VyIHF1ZSBsZSBiYWRnZSBuZSBjaGFuZ2UgcGFzIGRlIHRhaWxsZSBlbiBzZVxuICAgICAgIHJlbXBsaXNzYW50LiBSaWVuIMOgIGFubnVsZXIgY8O0dMOpIG9tYnJlIDogbGUgYmFkZ2UgcsOpc3VsdGF0IG4nZW4gcG9ydGUgcGx1cyBkdSB0b3V0LiAqL1xuICAgIGJhY2tncm91bmQ6ICMwMDAwMDAwNTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vKiBQbGFjZSBvdXZlcnRlIDogY2UgcXVpIHZpZW50IFBFVVQgYXJyaXZlciBpY2kuIExlIGJhZGdlIHZpZGUgcydhbGx1bWUsIHNvdXMgdG91dCBoYWJpbGxhZ2Ug4oCUXG4gICBjJ2VzdCB1bmUgaW5mb3JtYXRpb24gZGUgamV1LCBwYXMgdW4gZMOpY29yIDogbGEgcXVlc3Rpb24gwqsgb8O5IHB1aXMtamUgYWxsZXIgPyDCuyBzZSBsaXQgc3VyIGxlc1xuICAgY2FydGVzIChkw6ljaXNpb24gUE8gMjAyNi0wOS0xMCwgcsOpcGFydGl0aW9uIGVuIMOpcXVpcGVzKS4gRGFucyBsYSBjb3VsZXVyIGRlIGxhIGNhcnRlIHF1YW5kXG4gICBlbGxlIGVuIGEgdW5lIChjZWxsZSBkZSBsJ8OpcXVpcGUgOiBsYSBwbGFjZSBhIGTDqWrDoCBsYSBjb3VsZXVyIHF1ZSBsZSBub20gcHJlbmRyYSksIGVuIGJsYW5jIHVuaVxuICAgc2lub24uIFBvc8OpIHBhciBsZSBraXQgw6AgbGlzdGUgc3VyIHNhIHByZW1pw6hyZSBwbGFjZSBsaWJyZSwgb3B0aW9uIGBvdXZlcnRgIGRlIGBtZXR0cmVBSm91cmAuICovXG4udnVlQmFkZ2VSZXN1bHRhdFZpZGUudnVlQmFkZ2VSZXN1bHRhdE91dmVydCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0taGFiQ291bGV1clJlc3VsdGF0LCB2YXIoLS1jQmxhbmMpKTtcbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXROb20ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIC8qIFNhbnMgZWZmZXQgw6AgbGFyZ2V1ciBuYXR1cmVsbGUgOyB1biB0ZXh0ZSBhanVzdMOpIGRhbnMgc2EgaGF1dGV1ciAoYXUtZGVsw6AgZHUgcGxhZm9uZCBkZVxuICAgICAgIHNpZ25lcywga2l0UGx1Z2luL0NMQVVERS5tZCwgwqsgS2l0cyBkJ2FmZmljaGFnZSDCuykgcHJlbmQgdG91dGUgbGEgbGFyZ2V1ciBldCBkb2l0IHJlc3RlciBjZW50csOpLiAqL1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAvKiBOaSBgbWF4LXdpZHRoOiAxMDAlYCwgbmkgYG92ZXJmbG93OiBoaWRkZW5gLCBuaSBgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXNgLlxuICAgICAgIEwnZWxsaXBzaXMgY2/Du3RhaXQgQkVBVUNPVVAgcGx1cyBxdWUgbGUgZMOpYm9yZGVtZW50IHF1J2VsbGUgcHLDqXRlbmRhaXQgbWFzcXVlciA6XG4gICAgICAgcG91ciBjYWNoZXIgNSAlIGRlIHRyb3AtcGxlaW4sIGxlIG5hdmlnYXRldXIgZG9pdCByZXRpcmVyIGFzc2V6IGRlIGNhcmFjdMOocmVzIHBvdXJcbiAgICAgICBsb2dlciBsZSDCqyDigKYgwrsgbHVpLW3Dqm1lIOKAlCBzdXIgdW4gbnVtw6lybyBtb25vc3BhY8OpIGVzcGFjw6kgKDAuM2VtKSwgY2VsYSBmYWlzYWl0XG4gICAgICAgwqsgQUYtMDgyIMK7IOKGkiDCqyBBRi0w4oCmIMK7LCB1biB0aWVycyBkdSByw6lzdWx0YXQgcGVyZHUuIExlIHRleHRlIGdhcmRlIGRvbmMgc2EgbGFyZ2V1clxuICAgICAgIG5hdHVyZWxsZSBldCByZXN0ZSBjZW50csOpIHBhciBsZSBmbGV4IHBhcmVudCA6IHMnaWwgZMOpYm9yZGUsIGlsIGTDqWJvcmRlIGRlcyBkZXV4XG4gICAgICAgY8O0dMOpcywgbGlzaWJsZW1lbnQgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA4LTI4KS4gKi9cbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGNvbG9yOiB2YXIoLS1oYWJDb3VsZXVyUmVzdWx0YXRUZXh0ZSwgdmFyKC0taGFiVGV4dGUsIHZhcigtLWNOb2lyKSkpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG5Aa2V5ZnJhbWVzIHZ1ZUJhZGdlUmVzdWx0YXRFY2FydGVyIHtcbiAgICAwJSAgIHsgbGV0dGVyLXNwYWNpbmc6IDA7IHRleHQtaW5kZW50OiAwOyB9XG4gICAgMTAwJSB7IGxldHRlci1zcGFjaW5nOiB2YXIoLS1oYWJJbnRlcmxldHRyYWdlQ2hpZmZyZXMsIDAuMmVtKTsgdGV4dC1pbmRlbnQ6IHZhcigtLWhhYkludGVybGV0dHJhZ2VDaGlmZnJlcywgMC4yZW0pOyB9XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0Tm9tQ2hpZmZyZXMge1xuICAgIC8qIHRleHQtaW5kZW50ID0gbGV0dGVyLXNwYWNpbmcgOiBsJ2VzcGFjZW1lbnQgcydhcHBsaXF1ZSBhdXNzaSBBUFLDiFMgbGUgZGVybmllclxuICAgICAgIGNoaWZmcmUgZXQgZMOpY2FsZSBsZSBjZW50cmFnZSB2ZXJzIGxhIGdhdWNoZSA7IGwnaW5kZW50IHJham91dGUgbCfDqXF1aXZhbGVudFxuICAgICAgIGRldmFudCBwb3VyIHLDqcOpcXVpbGlicmVyIChtw6ptZSBwYXJhZGUgcXVlIGxlcyB2b2xldHMgZHUgZmxhcCkuXG4gICAgICAgdGV4dC1pbmRlbnQgZXQgTk9OIHBhZGRpbmctbGVmdCA6IHVuIGhhYmlsbGFnZSBwZXV0IHBvc2VyIGxhIG3Dqm1lIGNvbXBlbnNhdGlvbiBzdXJcbiAgICAgICBsZSBiYWRnZSAoYC5oYWJGbGFwIC5oYWJFbGVtZW50IHsgdGV4dC1pbmRlbnQ6IDAuM2VtIH1gKSwgZXQgbGUgc3BhbiBlbiBow6lyaXRlLiBBdmVjXG4gICAgICAgZGV1eCBwcm9wcmnDqXTDqXMgZGlmZsOpcmVudGVzIGxlcyBkZXV4IHMnYWRkaXRpb25uYWllbnQg4oCUIDAuNmVtIGRlIGTDqWNhbGFnZSBwb3VyIDAuM2VtXG4gICAgICAgZCdlc3BhY2VtZW50IGVuIHRyb3AsIGxlIHRleHRlIHBvdXNzw6kgw6AgZHJvaXRlIGV0IGNvdXDDqS4gQXZlYyBsYSBtw6ptZSBwcm9wcmnDqXTDqSwgbGFcbiAgICAgICBkw6ljbGFyYXRpb24gZHUgc3BhbiBSRU1QTEFDRSBsYSB2YWxldXIgaMOpcml0w6llIDogbGEgY29tcGVuc2F0aW9uIHZhdXQgbCdlc3BhY2VtZW50LCB1bmVcbiAgICAgICBzZXVsZSBmb2lzLCBhdmVjIG91IHNhbnMgaGFiaWxsYWdlLlxuICAgICAgIEwnZXNwYWNlbWVudCBsdWktbcOqbWUgZXN0IHVuIGF4ZSBkdSBjb250cmF0IGQnaGFiaWxsYWdlICgtLWhhYkludGVybGV0dHJhZ2VDaGlmZnJlcyxcbiAgICAgICBkb2NzL2FyY2hpdGVjdHVyZS9oYWJpbGxhZ2UubWQpIDogMC4yZW0gc2FucyBoYWJpbGxhZ2UsIGxhIHJvdWUgZXQgbGEgcm91bGV0dGUgbGVcbiAgICAgICByZXNzZXJyZW50LCBsZSBmbGFwIGwnYWxpZ25lIHN1ciBzZXMgdm9sZXRzLiBEw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0wNiA6XG4gICAgICAgbGVzIGNoaWZmcmVzIHMnw6ljYXJ0ZW50IHBhcnRvdXQsIGNoYXF1ZSBoYWJpbGxhZ2UgcsOoZ2xlIGRlIGNvbWJpZW4uICovXG4gICAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWhhYkludGVybGV0dHJhZ2VDaGlmZnJlcywgMC4yZW0pO1xuICAgIHRleHQtaW5kZW50OiB2YXIoLS1oYWJJbnRlcmxldHRyYWdlQ2hpZmZyZXMsIDAuMmVtKTtcbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXQudnVlQW5pbWVyIC52dWVCYWRnZVJlc3VsdGF0Tm9tQ2hpZmZyZXMge1xuICAgIGFuaW1hdGlvbjogdnVlQmFkZ2VSZXN1bHRhdEVjYXJ0ZXIgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpIDEwMG1zIGJvdGg7XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0TnVtZXJvIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBmb250LXNpemU6IDAuNzVlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGNvbG9yOiB2YXIoLS1oYWJDb3VsZXVyUmVzdWx0YXRUZXh0ZSwgdmFyKC0taGFiVGV4dGUsIHZhcigtLWNOb2lyKSkpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIOKUgOKUgCDDiXRhdHMgZHUgYmFkZ2UgcG9zw6lzIHBhciBsZXMga2l0cyAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTAsXG4gICBraXRQbHVnaW4vQ0xBVURFLm1kLCDCqyBLaXRzIGQnYWZmaWNoYWdlIMK7KS4gTGUgcmFuZyBldCBsZSB0YW1wb24gc29udCBkZXMgw6l0YXRzIGR1IGJhZGdlLCBkYW5zIGxlXG4gICBzb2NsZSwgw6AgY8O0dMOpIGRlIGx1aSA6IHBsdXMgZGUgY29waWUgcGFyIGtpdC4gUG9zw6lzIHBhciBWdWVLaXQucG9zZXJSYW5nQmFkZ2VSZXN1bHRhdCBldFxuICAgVnVlS2l0LnRhbXBvbm5lckJhZGdlUmVzdWx0YXQuIExlIHNvY2xlIHBvcnRlIGxlIGNvbXBvcnRlbWVudCBwYXIgZMOpZmF1dCA7IHVuIGtpdCBxdWkgZW5cbiAgIHZldXQgdW4gYXV0cmUgcG9zZSBzYSBwcm9wcmUgY2xhc3NlIHBhci1kZXNzdXMuIOKUgOKUgCAqL1xuXG4vKiBSYW5nIGR1IHRpcmFnZSAoI04pLCBjb2luIGhhdXQtZ2F1Y2hlIGR1IGJhZGdlLiBMYSBtb2l0acOpIGRlIGxhIHBvbGljZSBkdSBiYWRnZSwgc2FucyBwbGFuY2hlclxuICAgZW4gcGl4ZWxzIOKAlCBsZSByYW5nIHN1aXQgbGEgcG9saWNlLCBjb21tZSBsZSBub20sIGV0IHJpZW4gZCdhdXRyZSDigJQsIGV0IHVuZSBwYXN0aWxsZSBxdWkgc3VpdCBsYVxuICAgcG9saWNlIGF1c3NpIChkw6ljaXNpb24gUE8gMjAyNi0wOS0xMSDigJQgw6AgMjUgJSBldCAxMSBweCBkZSBwbGFuY2hlciwgaWwgbmUgc2UgbGlzYWl0IHBhcykuICovXG4udnVlQmFkZ2VSZXN1bHRhdFJhbmcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGZvbnQtc2l6ZTogNTAlO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIHRleHQtaW5kZW50OiAwO1xuICAgIHBhZGRpbmc6IDAuMTVlbSAwLjM1ZW07XG4gICAgYm9yZGVyLXJhZGl1czogMCAwIDAuNGVtO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi52dWVCYWRnZVJlc3VsdGF0UmFuZyA+IHNwYW4ge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4vKiBUYW1wb24gKGFubnVsYXRpb24pIOKAlCA4IHMgYXUgdG90YWwsIGR1csOpZSByZXByaXNlIHBhciBWdWVLaXQudGFtcG9ubmVyQmFkZ2VSZXN1bHRhdC5cbiAgIFBSSU5DSVBFIDogbGUgcsOpc3VsdGF0IHJlc3RlIDEwMCAlIGxpc2libGUsIGF1Y3VuIG92ZXJsYXkgbmUgbGUgY291dnJlLiBVbiB0cmFpdCBvYmxpcXVlIHNlXG4gICBkZXNzaW5lIHN1ciBsZSBiYWRnZSwgdW5lIMOpdGlxdWV0dGUgcGFyYcOudCBkYW5zIGxlIGNvaW4sIGxlIGJhZGdlIHNvcnQgZW4gZ2xpc3NhbnQuXG4gICBUaW1lbGluZSA6IDAg4oaSIDAuMiBzIGTDqWxhaSA7IDAuMiDihpIgMSBzIGxlIHRyYWl0IHNlIGRlc3NpbmUgZGUgZ2F1Y2hlIMOgIGRyb2l0ZSA7XG4gICAxIOKGkiAxLjQgcyBsJ8OpdGlxdWV0dGUgcGFyYcOudCAocmVzc29ydCkgOyAxLjQg4oaSIDYuNSBzIHRlbnVlIDsgNi41IOKGkiA4IHMgc29ydGllIGdsaXNzw6llICsgZm9uZHUuXG4gICBMZSB0ZXh0ZSBkZSBsJ8OpdGlxdWV0dGUgdmllbnQgZGUgLS12dWVCYWRnZVRhbXBvblRleHRlIChyZW5kdSB2aWEgYGNvbnRlbnQ6YCkgOiBhdXRyZSBjaG9zZVxuICAgcXUnwqsgQW5udWzDqSDCuyBlc3QgcG9zc2libGUuIFRyYWl0IChpbnNldDogMCkgZXQgw6l0aXF1ZXR0ZSAodG9wL3JpZ2h0KSBzb250IHBvc8OpcyBEQU5TIGxlXG4gICBiYWRnZSA6IGlscyBuJ29udCBqYW1haXMgZXUgYmVzb2luIGQndW4gb3ZlcmZsb3c6IGhpZGRlbiwgcXVpIGF1cmFpdCByZWNvdXDDqSBsZSByw6lzdWx0YXQuXG4gICBTw6lsZWN0ZXVyIMOgIHVuZSBjbGFzc2UsIGNvbW1lIGxlcyBhbmNpZW5zIC5nYUtpdEJhZGdlQW5udWxlIC8gLmxnS2l0QmFkZ2VBbm51bGUgOiB1biBiYWRnZVxuICAgcXVpIHBvcnRlIGVuY29yZSAudnVlQW5pbWVyIGdhcmRlIGwnYW5pbWF0aW9uIGQnYXBwYXJpdGlvbiAocGx1cyBzcMOpY2lmaXF1ZSkgZXQgbmUgam91ZSBwYXNcbiAgIGxhIHNvcnRpZSDigJQgY29tcG9ydGVtZW50IGNvbnN0YW50LCBzaWduYWzDqSBhdSBjaGVmIGRlIHByb2pldCDDoCBsJ8OpdGFwZSAwLiAqL1xuLnZ1ZUJhZGdlUmVzdWx0YXRUYW1wb24ge1xuICAgIGFuaW1hdGlvbjogdnVlQmFkZ2VSZXN1bHRhdFRhbXBvblNvcnRpZSAxLjVzIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjQ1LCAxKSA2LjVzIGZvcndhcmRzO1xufVxuLyogVHJhaXQgb2JsaXF1ZSBkJ3VuIGNvaW4gw6AgbCdhdXRyZSwgcXVlbCBxdWUgc29pdCBsZSByYXRpbyA6IFNWRyBpbmxpbmUgw6l0aXLDqSBwYXJcbiAgIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCIsIHRyYWl0IGdhcmTDqSDDoCA0cHggcGFyIHZlY3Rvci1lZmZlY3Q9XCJub24tc2NhbGluZy1zdHJva2VcIixcbiAgIMKrIGRlc3NpbsOpIMK7IHBhciB1biBjbGlwLXBhdGggcXVpIHMnb3V2cmUgZGUgZ2F1Y2hlIMOgIGRyb2l0ZS4gKi9cbi52dWVCYWRnZVJlc3VsdGF0VGFtcG9uOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgcHJlc2VydmVBc3BlY3RSYXRpbz0nbm9uZScgdmlld0JveD0nMCAwIDEgMSc+PGxpbmUgeDE9JzAnIHkxPScxJyB4Mj0nMScgeTI9JzAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nNCcgc3Ryb2tlLW9wYWNpdHk9JzAuNScgdmVjdG9yLWVmZmVjdD0nbm9uLXNjYWxpbmctc3Ryb2tlJy8+PC9zdmc+XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgY2xpcC1wYXRoOiBpbnNldCgwIDEwMCUgMCAwKTtcbiAgICBhbmltYXRpb246IHZ1ZUJhZGdlUmVzdWx0YXRUYW1wb25SYXllciAwLjhzIGN1YmljLWJlemllcigwLjY1LCAwLCAwLjM1LCAxKSAwLjJzIGZvcndhcmRzO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDU7XG59XG4udnVlQmFkZ2VSZXN1bHRhdFRhbXBvbjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IHZhcigtLXZ1ZUJhZGdlVGFtcG9uVGV4dGUpO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDRweDtcbiAgICByaWdodDogNHB4O1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIGZvbnQ6IDcwMCBtYXgoMTFweCwgMjUlKSB2YXIoLS1mZkVjcmFuKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcik7XG4gICAgcGFkZGluZzogMnB4IDZweDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggdmFyKC0tY09tYnJlKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApIHJvdGF0ZSg4ZGVnKTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7XG4gICAgYW5pbWF0aW9uOiB2dWVCYWRnZVJlc3VsdGF0VGFtcG9uRXRpcXVldHRlIDAuNXMgY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpIDFzIGZvcndhcmRzO1xuICAgIHotaW5kZXg6IDY7XG59XG5Aa2V5ZnJhbWVzIHZ1ZUJhZGdlUmVzdWx0YXRUYW1wb25SYXllciB7XG4gICAgdG8geyBjbGlwLXBhdGg6IGluc2V0KDAgMCAwIDApOyB9XG59XG5Aa2V5ZnJhbWVzIHZ1ZUJhZGdlUmVzdWx0YXRUYW1wb25FdGlxdWV0dGUge1xuICAgIDAlICAgeyB0cmFuc2Zvcm06IHNjYWxlKDApICAgIHJvdGF0ZSg4ZGVnKTsgIG9wYWNpdHk6IDA7IH1cbiAgICA2MCUgIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjE1KSByb3RhdGUoLTNkZWcpOyBvcGFjaXR5OiAxOyB9XG4gICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSkgICAgcm90YXRlKDBkZWcpOyAgb3BhY2l0eTogMTsgfVxufVxuQGtleWZyYW1lcyB2dWVCYWRnZVJlc3VsdGF0VGFtcG9uU29ydGllIHtcbiAgICAwJSAgIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApICAgIHNjYWxlKDEpOyB9XG4gICAgMTAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KSBzY2FsZSgwLjk1KTsgZmlsdGVyOiBibHVyKDFweCk7IH1cbn1cblxuLyogU8OpcGFyYXRldXJzIGRpcmVjdGlvbm5lbHMgKi9cbi52dWVTZXBhcmF0ZXVySCxcbi52dWVTZXBhcmF0ZXVyViB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJTZWNvbmRhaXJlKSAxNSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLnZ1ZVNlcGFyYXRldXJIIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMXB4OyB9XG4udnVlU2VwYXJhdGV1clYgeyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxcHg7IH1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGT1JNVUxBSVJFIEFDQ8OIUyBDT0RFIChwYXJ0YWfDqSBzdHVkaW8gKyBib3JuZSlcbiAgIFN0eWxlcyBjb21tdW5zIHBvdXIgbGEgc2Fpc2llIGR1IGNvZGUgNSBsZXR0cmVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUEFHRSBEJ0FDQ8OIUyBDT0RFIOKAlCBMYXlvdXQgcGFydGFnw6lcbiAgIFV0aWxpc8OpIHBhciBzdHVkaW9BY2Nlcy50d2lnIGV0IGJvcm5lQWNjZXMudHdpZ1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnBhZ2VBY2Nlc0NvZGUge1xuICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAgIG1pbi1oZWlnaHQ6IDEwMGR2aDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcGFkZGluZzogMjBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi5jb250ZW51QWNjZXNDb2RlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0MHB4IDMycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xufVxuXG4uY29udGVudUFjY2VzQ29kZSBoMSB7XG4gICAgZm9udDogdmFyKC0tZkgyKTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4uYWNjZXNDb2RlSW5zdHJ1Y3Rpb24ge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG59XG5cbi5jb250ZW51QWNjZXNDb2RlIC5hbGVydEVycmV1ciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdldCk7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTQpO1xuICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLmNvbnRlbnVBY2Nlc0NvZGUgLmFsZXJ0QmxvY2FnZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY09yMCk7XG4gICAgY29sb3I6IHZhcigtLWNPcjQpO1xuICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4uY29udGVudUFjY2VzQ29kZSAuYWxlcnRCbG9jYWdlIHAge1xuICAgIG1hcmdpbjogMCAwIDhweDtcbn1cblxuLmNvbnRlbnVBY2Nlc0NvZGUgLmFsZXJ0QmxvY2FnZSBwOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5mb3JtQWNjZXNDb2RlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDSEFNUCBDT0RFIOKAlCBTYWlzaWUgNSBsZXR0cmVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uY2hhbXBDb2RlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4uaW5wdXRDb2RlQWNjZXMge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMjQwcHg7XG4gICAgcGFkZGluZzogMjBweDtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mZk1vbm8pO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjNlbTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbn1cblxuLmlucHV0Q29kZUFjY2VzOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNSk7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM2VtO1xufVxuXG4uaW5wdXRDb2RlQWNjZXM6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9ybUZvY3VzKTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tY0Zvcm1Gb2N1c0hhbG8pO1xufVxuXG4uYnRuQWNjZWRlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMThweCAyNHB4O1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgY29sb3I6IHZhcigtLWNBY2NlbnR0KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50Myk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cztcbn1cblxuLmJ0bkFjY2VkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQ0KTtcbn1cblxuLyogQm91dG9uIHRvZ2dsZSB2aXNpYmlsaXTDqSBkdSBjb2RlICovXG4uYnRuVG9nZ2xlUGFzc3dvcmQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogNTVweDtcbiAgICB0b3A6IDQ1JTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIHBhZGRpbmc6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzO1xufVxuXG4uYnRuVG9nZ2xlUGFzc3dvcmQ6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4uYnRuVG9nZ2xlUGFzc3dvcmQgc3ZnIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi8qIMOJdGF0IHBhciBkw6lmYXV0IDogxZNpbCBiYXJyw6kgdmlzaWJsZSAoY29kZSBtYXNxdcOpKSAqL1xuLmJ0blRvZ2dsZVBhc3N3b3JkIC5pY29uZU9laWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5idG5Ub2dnbGVQYXNzd29yZCAuaWNvbmVPZWlsQmFycmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiDDiXRhdCB2aXNpYmxlIDogxZNpbCBub3JtYWwgdmlzaWJsZSAoY29kZSBhZmZpY2jDqSkgKi9cbi5idG5Ub2dnbGVQYXNzd29yZC52aXNpYmxlIC5pY29uZU9laWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uYnRuVG9nZ2xlUGFzc3dvcmQudmlzaWJsZSAuaWNvbmVPZWlsQmFycmUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG4iLCIvKipcbiAqIENvbXBvc2FudCBDaGFtcCBkZSBjb2RlIMOgIDYgY2hpZmZyZXNcbiAqXG4gKiBTaXggY2FzZXMgZGVzc2luw6llcyAoLmNoYW1wQ29kZTZDYXNlKSwgdW4gc2V1bCB2cmFpIGNoYW1wIHBvc8OpIHBhci1kZXNzdXMsIHRyYW5zcGFyZW50IDpcbiAqIHZvaXIgdHMvY29tcG9zYW50cy9jaGFtcENvZGU2LnRzLiBMZSBjaGFtcCBuJ2VzdCBwYXMgbWFzcXXDqSAob3BhY2l0eSkgbWFpcyByZW5kdVxuICogdHJhbnNwYXJlbnQgOiBzdXIgaVBob25lLCB1biBjaGFtcCBtYXNxdcOpIG5lIHByb3Bvc2UgcGx1cyDCqyBDb2xsZXIgwrsgw6AgbCdhcHB1aSBsb25nLlxuICovXG5cbi5jaGFtcENvZGU2Q2FzZXMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDYsIDFmcik7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4uY2hhbXBDb2RlNkNhc2Uge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhc3BlY3QtcmF0aW86IDQgLyA1O1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyRm9ybSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgZm9udDogdmFyKC0tZk1vbm8yNGIpO1xufVxuXG4uY2hhbXBDb2RlNkNhc2UuY2FzZUFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9ybUZvY3VzKTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tY0Zvcm1Gb2N1c0hhbG8pO1xufVxuXG4vKiBMZSB2cmFpIGNoYW1wIGNvdXZyZSBsZXMgc2l4IGNhc2VzIDogdW4gdG91Y2hlciBuJ2ltcG9ydGUgb8O5IGwnYWN0aXZlLCBsJ2FwcHVpIGxvbmcgeSBjb2xsZS5cbiAgIDE2cHggOiBlbiBkZXNzb3VzLCBpT1Mgem9vbWUgc3VyIGxlIGNoYW1wIMOgIGxhIHNhaXNpZS4gKi9cbi5jaGFtcENvZGU2Q2FzZXMgaW5wdXQuY2hhbXBDb2RlNiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGNhcmV0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjdXJzb3I6IHRleHQ7XG59XG5cbi5jaGFtcENvZGU2Q2FzZXMgaW5wdXQuY2hhbXBDb2RlNjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLmNoYW1wQ29kZTZDYXNlcyBpbnB1dC5jaGFtcENvZGU2OmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi8qIMKrIENvbGxlciBsZSBjb2RlIMK7IDogY2VudHLDqSBzb3VzIGxlcyBjYXNlcyAqL1xuYnV0dG9uLmNoYW1wQ29kZTZDb2xsZXI6bm90KFtoaWRkZW5dKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiB2YXIoLS1nYXBNb3llbikgYXV0byAwO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNVUkNPVUNIRSBBUEVSw4dVIOKAlCBwb3AtdXAgaWZyYW1lIChjb21wb3NhbnQgbm95YXUpXG5cbiAgIE91dnJlIHVuIGFwZXLDp3UgKGFuaW1hdGlvbiBvdSBzY8OpbmFyaW8pIGRhbnMgbGEgcGFnZSBxdWFuZCBsYSBmZW7DqnRyZSBlc3RcbiAgIGFzc2V6IGdyYW5kZSwgYXUgbGlldSBkJ3VuIG5vdXZlbCBvbmdsZXQuIFVuIHNldWwgc3lzdMOobWUgcG91ciB0b3VzIGxlc1xuICAgYXBlcsOndXMsIFN0dWRpbyBjb21tZSBWaXRyaW5lIChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkuXG5cbiAgIEJvdXRvbnMgOiBiYXNlIC5tb2RhbGVDbG9zZSAoY29tcG9zYW50cy9ib3V0b25GZXJtZXR1cmUuY3NzLCBzb3VyY2UgdW5pcXVlIGRlIGxhIGNyb2l4KSxcbiAgIHN1cmNvdWNoZSA9IHVuaXF1ZW1lbnQgbCfDqWNhcnQgZGUgdGFpbGxlIGNpLWRlc3NvdXMuXG5cbiAgIE1hcmt1cCBnw6luw6lyw6kgcGFyIHN1cmNvdWNoZVByZXZpZXcudHMgKG5veWF1KSBzdXIgbGVzIGTDqWNsZW5jaGV1cnMgW2RhdGEtcHJldmlld11cbiAgIChsaWVucyBocmVmIG91IGJvdXRvbnMgZGF0YS11cmwpLCBhdWN1biB0ZW1wbGF0ZSA6XG4gICAuc3VyY291Y2hlID4gLnN1cmNvdWNoZUNvbnRlbnUgPiAuc3VyY291Y2hlQmFycmUgKHBsZWluIMOpY3JhbiArIGNyb2l4KSArIC5zdXJjb3VjaGVJZnJhbWVcblxuICAgTGVzIHNldWlscyBkJ291dmVydHVyZSAoaWZyYW1lIDE2LzkgZCdhdSBtb2lucyA5NjDDlzU0MCArIG1hcmdlcyA4MC8xMjApXG4gICB2aXZlbnQgZGFucyBzdXJjb3VjaGVQcmV2aWV3LnRzIOKAlCBnYXJkZXIgVFMgZXQgZGltZW5zaW9ubmVtZW50IENTUyBhbGlnbsOpcy5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIEJvdXRvbnMgZGUgbGEgYmFycmUgOiBiYXNlIC5tb2RhbGVDbG9zZSAoY29tcG9zYW50LCBjcm9peCBjb21wcmlzZSkg4oCUIHBvc8OpZSBwYXIgbGUgVFMgc3VyXG4gICBsZXMgZGV1eCBib3V0b25zLiBJY2kgdW5pcXVlbWVudCBsJ8OpY2FydCBzdXJjb3VjaGUgKDQ0w5c0NCwgaWPDtG5lcyAyNCkgKyBsZSBtYXNxdWUgcGxlaW4gw6ljcmFuLiAqL1xuQGltcG9ydCAnLi9ib3V0b25GZXJtZXR1cmUuY3NzJztcblxuLnN1cmNvdWNoZSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlTW9kYWxlKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLnN1cmNvdWNoZTo6YmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPdmVybGF5KTtcbn1cblxuLnN1cmNvdWNoZUNvbnRlbnUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4uc3VyY291Y2hlQmFycmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogbGVzIG9uZ2xldHMgc2UgY2VudHJlbnQgc3VyIGVsbGUgKi9cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAvKiBQYXMgZGUgdHJhaXQgc291cyBsYSBiYXJyZSA6IGlsIHJlc3NvcnRhaXQgc3VyIGxhIGJ1bGxlIGRlIGwnYXBlcsOndSBjb2xsw6llIGRlc3NvdXNcbiAgICAgICAoY2hlZiBkZSBwcm9qZXQsIDIwMjYtMDktMTcpLiAqL1xufVxuXG4vKiBQT0MgKGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTE2KSA6IGxlcyBvbmdsZXRzIGRlIGwnYXBlcsOndSBkYW5zIGxhIGJhcnJlIGRlIHRpdHJlLCDDoCBnYXVjaGVcbiAgIChzdXJjb3VjaGVQcmV2aWV3LnRzLCBhbGltZW50w6lzIHBhciBsJ2FwZXLDp3UpLiBNw6ptZSBhaXIgcXVlIGxhIGJhcnJlIGRlIGwnYXBlcsOndSA6IG1hcmdlIGRlXG4gICA4LCDDqWNhcnQgZGUgOC4gU29icmVzLCBjJ2VzdCB1bmUgYmFycmUgZGUgdGl0cmUgOiBhdWN1biBmb25kLCBsZSBncmlzIGR1IHRleHRlIHRlcnRpYWlyZVxuICAgKGNOb2lyMykgYXUgcmVwb3MsIHVuIGNvbnRvdXIgZGUgY2V0dGUgY291bGV1ciA7IGwnb25nbGV0IGRvbnQgbGEgdnVlIGVzdCBvdXZlcnRlIHByZW5kIGxhXG4gICBjb3VsZXVyIGRlcyBpY8O0bmVzIGRlIGxhIGJhcnJlLCBsZSBub2lyIGRlIGxhIGNyb2l4IChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0xNikuICovXG4vKiBDRU5UUsOJUyBzdXIgbGEgYmFycmUgZGUgdGl0cmUsIHBhcyBjYWzDqXMgw6AgZ2F1Y2hlIChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0xNikgOiBjZW50csOpcyxcbiAgIG9uIGxlcyB2b2l0IDsgZXQgcXVhbmQgdW4gb25nbGV0IHMnYWpvdXRlIMOgIGxhIGZpbiBkZSBsJ2FwZXLDp3UsIGxlIGdyb3VwZSBzZSByZWNlbnRyZSBldFxuICAgYm91Z2Ug4oCUIGMnZXN0IHZvdWx1LCBsZSBtb3V2ZW1lbnQgZGl0IHF1J2lsIHNlIHBhc3NlIHF1ZWxxdWUgY2hvc2UgbMOgLWhhdXQuIEhvcnMgZmx1eCBwb3VyXG4gICBxdWUgbGVzIGRldXggaWPDtG5lcyBkZSBkcm9pdGUgbmUgcMOoc2VudCBwYXMgZGFucyBsZSBjZW50cmFnZS4gKi9cbi5zdXJjb3VjaGVPbmdsZXRzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4vKiBTYW5zIGNvbnRvdXIgYXUgcmVwb3MgOyBsZSBjb250b3VyIHBhcmHDrnQgYXUgc3Vydm9sIGV0IHJlc3RlIHN1ciBsJ29uZ2xldCBhY3RpZiDigJQgYydlc3RcbiAgIGx1aSBxdWkgZGl0IGxlcXVlbCBlc3Qgb3V2ZXJ0IChjaGVmIGRlIHByb2pldCwgMjAyNi0wOS0xNikuIExhIGJvcmR1cmUgZXN0IGzDoCBkw6hzIGxlXG4gICByZXBvcywgdHJhbnNwYXJlbnRlIDogZWxsZSBnYXJkZSBzb24gw6lwYWlzc2V1ciwgcmllbiBuZSBib3VnZSBldCByaWVuIG5lIHNlIHRyb3VlLiAqL1xuLnN1cmNvdWNoZU9uZ2xldCB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi5zdXJjb3VjaGVPbmdsZXQ6aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogY3VycmVudENvbG9yO1xufVxuXG4uc3VyY291Y2hlT25nbGV0QWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIGJvcmRlci1jb2xvcjogY3VycmVudENvbG9yO1xufVxuXG4vKiBMZXMgZGV1eCBib3V0b25zIHBvcnRlbnQgbGEgY2xhc3NlIC5tb2RhbGVDbG9zZSAocG9zw6llIHBhciBsZSBUUykgOiBzaWxob3VldHRlLCBjcm9peCBldFxuICAgaG92ZXIgdmllbm5lbnQgZHUgY29tcG9zYW50LiBJY2kgbCfDqWNhcnQgc3VyY291Y2hlIDogYm/DrnRlIGZpeGUgNDTDlzQ0LCBpY8O0bmVzIDI0LiAqL1xuLnN1cmNvdWNoZUNsb3NlLFxuLnN1cmNvdWNoZVBsZWluRWNyYW4ge1xuICAgIHdpZHRoOiA0NHB4O1xuICAgIGhlaWdodDogNDRweDtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4uc3VyY291Y2hlQ2xvc2U6OmJlZm9yZSxcbi5zdXJjb3VjaGVQbGVpbkVjcmFuOjpiZWZvcmUge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbn1cblxuLnN1cmNvdWNoZVBsZWluRWNyYW46OmJlZm9yZSB7XG4gICAgbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTggM0g1YTIgMiAwIDAgMC0yIDJ2MycvJTNFJTNDcGF0aCBkPSdNMjEgOFY1YTIgMiAwIDAgMC0yLTJoLTMnLyUzRSUzQ3BhdGggZD0nTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDMnLyUzRSUzQ3BhdGggZD0nTTE2IDIxaDNhMiAyIDAgMCAwIDItMnYtMycvJTNFJTNDL3N2ZyUzRVwiKSBjZW50ZXIgLyBjb250YWluIG5vLXJlcGVhdDtcbiAgICAtd2Via2l0LW1hc2s6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J004IDNINWEyIDIgMCAwIDAtMiAydjMnLyUzRSUzQ3BhdGggZD0nTTIxIDhWNWEyIDIgMCAwIDAtMi0yaC0zJy8lM0UlM0NwYXRoIGQ9J00zIDE2djNhMiAyIDAgMCAwIDIgMmgzJy8lM0UlM0NwYXRoIGQ9J00xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMnLyUzRSUzQy9zdmclM0VcIikgY2VudGVyIC8gY29udGFpbiBuby1yZXBlYXQ7XG59XG5cbi8qIDE2LzksIGF1c3NpIGdyYW5kIHF1ZSBsYSBmZW7DqnRyZSBsZSBwZXJtZXQgKG1hcmdlcyA6IDgwIGVuIGxhcmdldXIsIDEyMCBlblxuICAgaGF1dGV1ciDigJQgbGEgYmFycmUgZGUgbGEgc3VyY291Y2hlICsgbCdhaXIgYXV0b3VyKS4gKi9cbi5zdXJjb3VjaGVJZnJhbWUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICB3aWR0aDogbWluKGNhbGMoMTAwdncgLSA4MHB4KSwgY2FsYygoMTAwdmggLSAxMjBweCkgKiAxNiAvIDkpKTtcbiAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBMRSBDxZJVUiDCqyBKJ0FJTUUgwrsgRVQgU09OIENPTVBURVVSIOKAlCBicmlxdWUgbm95YXUgX2phaW1lLnR3aWcsIFZpdHJpbmUgY29tbWUgU3R1ZGlvXG4gICAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0IDIwMjYtMDktMTIpXG5cbiAgIFF1YXRyZSDDqXRhdHMsIGZhw6dvbiBYLCB0b3VzIGljaSBldCBudWxsZSBwYXJ0IGFpbGxldXJzIDpcbiAgICAgMS4gw6l0ZWludCAgICAgICAgICAgIOKAlCBjb250b3VyIGdyaXMsIGNoaWZmcmUgZ3JpcyA7XG4gICAgIDIuIHN1cnZvbCAoYWN0aWYpICAgIOKAlCBjxZN1ciBldCBjaGlmZnJlIGVuIHJvdWdlLCB1biBkaXNxdWUgcMOibGUgZGVycmnDqHJlIGxlIGPFk3VyIDtcbiAgICAgMy4gYWxsdW3DqSAgICAgICAgICAgIOKAlCBjxZN1ciBQTEVJTiwgcm91Z2UsIHVuIHBldSBwbHVzIGdyYW5kIOKAlCB1biBwZXUgc2V1bGVtZW50LCDDp2Egc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3VlIMOgIHRyw6hzIHBldSAoY2hlZiBkZSBwcm9qZXQpIDtcbiAgICAgNC4gYWxsdW3DqSBhdSBzdXJ2b2wgIOKAlCBsZSBtw6ptZSwgYXZlYyBsZSBkaXNxdWUgcMOibGUuXG4gICBQbHVzIGwnaW5hY3RpZiAoYGRpc2FibGVkYCkgOiBsZSB2aXNpdGV1ciBub24gY29ubmVjdMOpIHZvaXQgbGUgY8WTdXIgZXQgbGUgbm9tYnJlLCBpbCBuZVxuICAgcGV1dCBwYXMgeSB0b3VjaGVyLiBOaSBzdXJ2b2wsIG5pIGN1cnNldXIsIGV0IMOAIE1PSVRJw4kgRVNUT01Qw4kgKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldFxuICAgMjAyNi0wOS0xNiwgcXVpIGTDqWZhaXQgbGUgwqsgcGFzIGdyaXPDqSDCuyBkdSAyMDI2LTA5LTEyKSA6IHVuIGPFk3VyIHBsZWluIGV0IG5ldCBzZSBsaXQgY29tbWVcbiAgIHVuZSBjb21tYW5kZSwgZXQgbGUgdmlzaXRldXIgZMOpY29ubmVjdMOpIGNsaXF1YWl0IGRlc3N1cyBzYW5zIGNvbXByZW5kcmUgcG91cnF1b2kgcmllbiBuZVxuICAgc2UgcGFzc2FpdC5cblxuICAgTGUgcm91Z2UgZXN0IGNlbHVpIGR1IGPFk3VyICgtLWNDb2V1cjMsIC0tY0NvZXVyMCBwb3VyIGxlIHN1cnZvbCwgMTBfZm9udC5jc3MpIDogdW4gcm91Z2VcbiAgIHNhbmcsIGJvcmRlYXV4IGZvbmPDqSwgw6AgbHVpIOKAlCBsZSByb3VnZSBkZSBsYSBmYW1pbGxlIC0tY1JvdWdlIGRpdCBsJ2FsZXJ0ZSBldCBsZSBkYW5nZXIsXG4gICBwYXMgbCdhZmZlY3Rpb24gKGTDqWNpc2lvbiBjaGVmIGRlIHByb2pldCAyMDI2LTA5LTE2LCBxdWkgcmVtcGxhY2UgbGUgLS1jUm91Z2UzIGR1IDEyKS5cbiAgIEF1Y3VuZSBjb3VsZXVyIGVuIGR1ciAoZG9jcy9kZXNpZ25TeXN0ZW0vY291bGV1cnMubWQpLlxuXG4gICBMZSBib3V0b24gbmUgcG9zZSBuaSBib3JkdXJlIG5pIGZvbmQgOiBjJ2VzdCB1bmUgaWPDtG5lIGV0IHVuIGNoaWZmcmUgcG9zw6lzIMOgIG3Dqm1lIGxhIHBhZ2UsXG4gICBjb21tZSBsZSBsaWVuIMKrIEVuIHNhdm9pciBwbHVzIMK7IGQndW5lIHR1aWxlICgubGllblNjZW5lUGx1cykuIFBhZGRpbmcgOiAtLWdhcFJlZHVpdCwgbGFcbiAgIG3Dqm1lIHZhcmlhYmxlIHF1ZSBjZSBsaWVuIOKAlCB1bmUgdmFsZXVyIG5vbW3DqWUsIGphbWFpcyB1biBjaGlmZnJlIChhc3NldHMvdml0cmluZS9jc3MvQ0xBVURFLm1kKS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4udG9nZ2xlSmFpbWUge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xuICAgIHBhZGRpbmc6IHZhcigtLWdhcFJlZHVpdCkgMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLyogYG9wYWNpdHlgIDogbGUgcGFzc2FnZSBkZSAyNSAlIMOgIDUwICUgb3Ugw6AgMTAwICUsIHF1YW5kIGxhIHLDqXBvbnNlIGRlIGZpbiBkZSBwYWdlXG4gICAgICAgYXJyaXZlLCBzZSBmYWl0IGVuIGZvbmR1IGV0IG5vbiBkJ3VuIGNvdXAg4oCUIGxlIGPFk3VyIG5lIGNsaWdub3RlIHBsdXMgKGTDqWNpc2lvbiBjaGVmIGRlXG4gICAgICAgcHJvamV0IDIwMjYtMDktMTYpLiBgY29sb3JgIDogbGUgc3Vydm9sLCBjb21tZSBhdmFudC4gKi9cbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzLCBvcGFjaXR5IDAuNHM7XG59XG5cbi8qIExlIGRpc3F1ZSBww6JsZSBkdSBzdXJ2b2wgZXN0IHVuIHBzZXVkby3DqWzDqW1lbnQgZGVycmnDqHJlIGxlIGPFk3VyIDogbGUgY8WTdXIgcmVzdGUgw6Agc2FcbiAgIHBsYWNlLCBzZXVsIGxlIGZvbmQgYXBwYXJhw650LiBgaXNvbGF0aW9uYCArIGB6LWluZGV4YCBwb3VyIHF1J2lsIHBhc3NlIERFUlJJw4hSRSBsZSB0cmFjw6lcbiAgIGR1IGPFk3VyIHNhbnMgc29ydGlyIGR1IGJvdXRvbi4gKi9cbi50b2dnbGVKYWltZUNvZXVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICAgIGZsZXg6IG5vbmU7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGZpbGw6IG5vbmU7XG4gICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMsIGZpbGwgMC4ycywgc3Ryb2tlIDAuMnM7XG59XG5cbi50b2dnbGVKYWltZUNvZXVyOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAtMTtcbiAgICBpbnNldDogLThweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0NvZXVyMCk7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XG59XG5cbi8qIExlIGNoaWZmcmUgbmUgcsOpc2VydmUgYXVjdW5lIGxhcmdldXIgOiDDoCB6w6lybyBpbCBlc3QgdmlkZSwgbGUgY8WTdXIgZXN0IHNldWwuICovXG4udG9nZ2xlSmFpbWVOb21icmUge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG59XG5cbi8qIDIg4oCUIHN1cnZvbCwgYm91dG9uIEFDVElGIHNldWxlbWVudCAqL1xuLnRvZ2dsZUphaW1lOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0NvZXVyMyk7XG59XG5cbi50b2dnbGVKYWltZTpub3QoOmRpc2FibGVkKTpob3ZlciAudG9nZ2xlSmFpbWVDb2V1cjo6YmVmb3JlIHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4vKiAzIOKAlCBhbGx1bcOpIDogY8WTdXIgcGxlaW4sIMOgIHBlaW5lIHBsdXMgZ3JhbmQgKi9cbi50b2dnbGVKYWltZVthcmlhLXByZXNzZWQ9XCJ0cnVlXCJdIHtcbiAgICBjb2xvcjogdmFyKC0tY0NvZXVyMyk7XG59XG5cbi50b2dnbGVKYWltZVthcmlhLXByZXNzZWQ9XCJ0cnVlXCJdIC50b2dnbGVKYWltZUNvZXVyIHtcbiAgICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA4KTtcbn1cblxuLyogTGUgcGV0aXQgcmVib25kIHF1YW5kIG9uIGNsaXF1ZSA6IGxlIGPFk3VyIGdyb3NzaXQgcHVpcyByZXZpZW50LiBQb3PDqSBwYXIgbGUgSmF2YVNjcmlwdFxuICAgYXUgbW9tZW50IGR1IGdlc3RlLCByZXRpcsOpIMOgIGxhIGZpbiBkZSBsJ2FuaW1hdGlvbiDigJQgamFtYWlzIGF1IGNoYXJnZW1lbnQsIHNpbm9uIHRyZW50ZVxuICAgY8WTdXJzIHJlYm9uZGlyYWllbnQgZW4gY2jFk3VyIMOgIGwnb3V2ZXJ0dXJlIGRlIGxhIHBhZ2UuICovXG4udG9nZ2xlSmFpbWVBbmltZSAudG9nZ2xlSmFpbWVDb2V1ciB7XG4gICAgYW5pbWF0aW9uOiB0b2dnbGVKYWltZVJlYm9uZCAwLjM1cyBlYXNlLW91dDtcbn1cblxuQGtleWZyYW1lcyB0b2dnbGVKYWltZVJlYm9uZCB7XG4gICAgMCUgICB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbiAgICA0MCUgIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjM1KTsgfVxuICAgIDEwMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpOyB9XG59XG5cbi8qIEluYWN0aWYgOiBwYXMgZGUgc3Vydm9sLCBwYXMgZGUgY3Vyc2V1ciwgZXQgRVNUT01Qw4kgw4AgNTAgJSAoZMOpY2lzaW9uIGNoZWYgZGUgcHJvamV0XG4gICAyMDI2LTA5LTE2KS4gTGUgdmlzaXRldXIgZG9pdCBWT0lSIHF1J2lsIG5lIHBldXQgcGFzIGNsaXF1ZXIgOiBzYW5zIGwnZXN0b21wZSwgdW4gY8WTdXJcbiAgIGluYWN0aWYgcmVzc2VtYmxhaXQgdHJhaXQgcG91ciB0cmFpdCDDoCB1biBjxZN1ciBhY3RpZiBhdSByZXBvcy5cbiAgIExlIDIwMjYtMDktMTIgYXZhaXQgdHJhbmNow6kgbCdpbnZlcnNlICjCqyBwYXMgZ3Jpc8OpLCBjJ2VzdCB1bmUgaW5mb3JtYXRpb24gwrspIDogbGUgY2hpZmZyZVxuICAgcmVzdGUgbGlzaWJsZSDDoCA1MCAlLCBsJ2luZm9ybWF0aW9uIGVzdCB0b3Vqb3VycyBsw6AuXG4gICBTdXIgbGUgU3R1ZGlvLCBsJ3V0aWxpc2F0ZXVyIGVzdCB0b3Vqb3VycyBjb25uZWN0w6kgOiBjZXQgw6l0YXQgbid5IGFwcGFyYcOudCBwYXMuICovXG4udG9nZ2xlSmFpbWU6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBvcGFjaXR5OiAwLjU7XG59XG5cbi8qIEVOIEFUVEVOVEUgOiAyNSAlIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0wOS0xNikuIExlIGPFk3VyIHRlbCBxdWUgbGUgc2VydmV1clxuICAgbCfDqWNyaXQsIGF2YW50IHF1ZSBsYSByZXF1w6p0ZSBkZSBmaW4gZGUgcGFnZSBhaXQgcsOpcG9uZHUuIExlIEphdmFTY3JpcHQgcmV0aXJlIGxhIGNsYXNzZVxuICAgZMOocyBsYSByw6lwb25zZSA6IGxlIGPFk3VyIHBhc3NlIGFsb3JzIMOgIDUwICUgKGTDqWNvbm5lY3TDqSwgYGRpc2FibGVkYCBjaS1kZXNzdXMpIG91IMOgIDEwMCAlXG4gICAoY29ubmVjdMOpKS4gVHJvaXMgcGFsaWVycywgcG91ciBxdSdhdWN1biBuZSBzZSBjb25mb25kZSBhdmVjIHVuIGF1dHJlLlxuICAg4pqg77iPIE3Dqm1lIHBvaWRzIHF1ZSBgLnRvZ2dsZUphaW1lOmRpc2FibGVkYCAodW5lIGNsYXNzZSArIHVuZSBjbGFzc2UsIHVuZSBjbGFzc2UgKyB1bmVcbiAgIHBzZXVkby1jbGFzc2UpIDogYydlc3QgbCdPUkRSRSBxdWkgdHJhbmNoZS4gQ2V0dGUgcsOoZ2xlIGRvaXQgcmVzdGVyIEFQUsOIUyBjZWxsZS1sw6AuICovXG4udG9nZ2xlSmFpbWUudG9nZ2xlSmFpbWVBdHRlbnRlIHtcbiAgICBvcGFjaXR5OiAwLjI1O1xufVxuXG4vKiBMZSBtw6ptZSBoYWxvIGRlIGZvY3VzIHF1ZSBsZXMgbGllbnMgZXQgYm91dG9ucyBkdSBzaXRlICgzMV9jdGEuY3NzKS4gKi9cbi50b2dnbGVKYWltZTpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuLnRvZ2dsZUphaW1lOmZvY3VzLXZpc2libGUge1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1jRm9ybUZvY3VzKTtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbn1cblxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAudG9nZ2xlSmFpbWUsXG4gICAgLnRvZ2dsZUphaW1lQ29ldXIsXG4gICAgLnRvZ2dsZUphaW1lQ29ldXI6OmJlZm9yZSB7XG4gICAgICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgfVxuXG4gICAgLnRvZ2dsZUphaW1lQW5pbWUgLnRvZ2dsZUphaW1lQ29ldXIge1xuICAgICAgICBhbmltYXRpb246IG5vbmU7XG4gICAgfVxufVxuIiwiZmllbGRzZXQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBwYWRkaW5nOiAyMHB4O1xufVxuXG5maWVsZHNldCBoMyB7XG4gICAgbWFyZ2luOiAwIDAgMC45Mzc1cmVtO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbmhyIHtcbiAgICBtYXJnaW46IDMwcHggMDtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbmhyLm1pbmkge1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jaW1nRm9ybSB7XG4gICAgbWF4LXdpZHRoOiA2OTBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDE1cHggMDtcbn1cblxuI2ltZ0Zvcm0gPiBkaXY6bGFzdC1jaGlsZCB7XG4gICAgYXNwZWN0LXJhdGlvOiAxMTAwLzQ0OTtcbiAgICBtYXgtd2lkdGg6IDY5MHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi10b3A6IDYwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjAwcHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4jZGl2Rm9ybSB7XG4gICAgbWF4LXdpZHRoOiA2OTBweDtcbiAgICBwYWRkaW5nOiAwIDVweDtcbn1cblxuI2Rpdkdsb2JhbEZvcm0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZ2FwOiAxMHB4O1xufVxuKi9cblxuXG5AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAxNTAwcHgpIHtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAjZGl2R2xvYmFsRm9ybSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDMwcHg7XG4gICAgfVxuXG4gICAgI2RpdkZvcm0gZGl2Omxhc3QtY2hpbGQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAjZGl2Rm9ybSB7XG4gICAgICAgIHBhZGRpbmc6IDAgMzBweDtcbiAgICB9XG5cbiAgICAjaW1nRm9ybSBkaXY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAqL1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbmlucHV0LnBoTm9pcjo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcik7XG59XG4qL1xuXG5sYWJlbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBtYXJnaW46IDAgMCAycHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLyogTGFiZWwgZmFjdWx0YXRpZiA6IGNvdWxldXIgYXR0w6ludcOpZSAqL1xubGFiZWw6aGFzKC5mYWN1bHRhdGlmKSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIENvbnRlbmV1ciBkw6lzYWN0aXbDqSAoY2hhbXAgZGlzYWJsZWQpICovXG4uZGlzYWJsZWREaXYge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVySW5wdXQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBwYWRkaW5nOiA3cHggOHB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIElucHV0cyBzcMOpY2lhdXggOiBwYXMgZGUgd2lkdGggMTAwJSAqL1xuaW5wdXRbdHlwZT1cImNvbG9yXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cInJhbmdlXCJdIHtcbiAgICB3aWR0aDogYXV0bztcbn1cblxuLyogVW4gbm9tYnJlIHRpZW50IGVuIGh1aXQgY2hpZmZyZXMgOiBzb24gY2hhbXAgYSBsYSBtw6ptZSBsYXJnZXVyIHBhcnRvdXQgZXQgc2UgbGl0IGNvbW1lIHVuIHBldGl0XG4gICBub21icmUgKGNoZWYgZGUgcHJvamV0LCAyMDI2LTA5LTI3KS4gTGEgbGFyZ2V1ciBham91dGUgYXV4IGNoaWZmcmVzIGxlIHJldHJhaXQgKDhweCBkZSBjaGFxdWVcbiAgIGPDtHTDqSkgZXQgbGVzIGZsw6hjaGVzLiAqL1xuaW5wdXRbdHlwZT1cIm51bWJlclwiXSB7XG4gICAgd2lkdGg6IGNhbGMoOGNoICsgNDBweCk7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4vKiBVbiBtZW51IGTDqXJvdWxhbnQgcHJlbmQgbGEgbGFyZ2V1ciBkZSBzb24gcGx1cyBsb25nIGNob2l4LCBwYXMgY2VsbGUgZGUgbGEgbGlnbmUuXG4gICBmaXQtY29udGVudCBldCBub24gYXV0byA6IGRhbnMgdW4gY29udGVuZXVyIGZsZXgsIGF1dG8gbGFpc3NlIGxlIG1lbnUgcyfDqXRpcmVyLiAqL1xuc2VsZWN0IHtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4vKiBJbnB1dCBjb3VsZXVyICovXG5pbnB1dFt0eXBlPVwiY29sb3JcIl0ge1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgbWluLXdpZHRoOiA2MHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLyogQ2hhbXAgZMOpc2FjdGl2w6kg4oCUIGV0IGNoYW1wIGJydXQgZCd1biBmb3JtdWxhaXJlIGZpZ8OpIDogbGVzIHNlY3Rpb25zIGVudHLDqWVzIGV0IGxvdHMgZGVcbiAgIGxhIHBhZ2UgwqsgQ29uZmlndXJhdGlvbiDCuyBkJ3VuIGFwZXLDp3Ugc29udCBkdSBIVE1MIGJydXQsIHNhbnMgYXR0cmlidXQgYGRpc2FibGVkYC4gTcOqbWVcbiAgIHRyYWl0IHBvaW50aWxsw6kgc3VyIGZvbmQgcmV0aXLDqSA6IG9uIGxpdCBsYSB2YWxldXIsIG9uIHZvaXQgcXUnb24gbmUgbGEgc2Fpc2l0IHBhcy4gKi9cbmlucHV0OmRpc2FibGVkLFxuc2VsZWN0OmRpc2FibGVkLFxudGV4dGFyZWE6ZGlzYWJsZWQsXG4uZm9ybXVsYWlyZUZpZ2UgaW5wdXQ6bm90KFt0eXBlPVwiY2hlY2tib3hcIl0pOm5vdChbdHlwZT1cInJhZGlvXCJdKSxcbi5mb3JtdWxhaXJlRmlnZSBzZWxlY3QsXG4uZm9ybXVsYWlyZUZpZ2UgdGV4dGFyZWEge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNCbGFuYzUpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gICAgcGFkZGluZzogNXB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnQzKTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0FjY2VudDQpO1xufVxuXG5pbnB1dDo6cGxhY2Vob2xkZXIsXG50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjUpO1xufVxuXG50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuXG5sYWJlbCAuZmFjdWx0YXRpZiAvKiwgbGFiZWwgLmZhY3VsdGF0aWZTcGFuLCBsYWJlbCAubW9kaWZpYWJsZSAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50NCk7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIHBhZGRpbmctbGVmdDogMTBweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlO1xufVxuXG4vKiBDYWNoZXIgXCJGYWN1bHRhdGlmXCIgc3VyIGxlcyBjaGFtcHMgY29uZGl0aW9ubmVscyAqL1xubGFiZWwuc2Fuc0ZhY3VsdGF0aWYgLmZhY3VsdGF0aWYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIFRleHRlcyBkJ2FpZGUgKi9cbmZvcm0gc21hbGwsXG5mb3JtIHNtYWxsIGEsXG4uaGVscC10ZXh0IHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gODVweCk7XG4gICAgcGFkZGluZzogMnB4IDA7XG59XG5cbi5oZWxwLXRleHQuaGVscC1hbGVydGUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U0KTtcbn1cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuZGl2LmNiRm9ybSBpbnB1dCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbmRpdi5jYkZvcm0gbGFiZWwge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O1xufVxuKi9cblxuZm9ybSB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgbWluLXdpZHRoOiBhdXRvO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4vKiBMZSBmb3JtdWxhaXJlIGR1IGJvdXRvbiBkJ2FjdGlvbiAoX2JvdXRvbkFjdGlvbi50d2lnKSBuJ2VzdCBxdSd1biBtb3llbiBkJ2Vudm95ZXIgdW4gUE9TVCA6XG4gICBpbCBuZSBwcmVuZCBhdWN1bmUgcGxhY2UuIFNhbnMgw6dhLCBpbCByZWNldmFpdCBsYSBtaXNlIGVuIHBhZ2UgZGVzIGZvcm11bGFpcmVzIGRlIHNhaXNpZVxuICAgKDYwMHB4IGF1IHBsdXMsIGNlbnRyw6kpIGV0IGxlIGJvdXRvbiBuZSBzZSBkZXNzaW5haXQgcGFzIGNvbW1lIGxlIG3Dqm1lIGJvdXRvbiBlbiBsaWVuIDogc3VyXG4gICB1bmUgY2FydGUgZCdvZmZyZSBlbiB1bmUgY29sb25uZSwgwqsgQWNjw6lkZXIgYXV4IHNlcnZpY2VzIMK7ICh1biA8YnV0dG9uPiBkYW5zIGNlIGZvcm11bGFpcmUpXG4gICBmYWlzYWl0IDYwMHB4IHF1YW5kIMKrIFBhc3NlciDDoCBFc3NlbnRpYWwgwrsgKHVuIGxpZW4pIHByZW5haXQgdG91dGUgbGEgY2FydGUgKHZ1IHBhciBsZSBjaGVmXG4gICBkZSBwcm9qZXQgMjAyNi0xMC0xNSkuIExlIGJvdXRvbiBzZSBwbGFjZSBkw6lzb3JtYWlzIGNvbW1lIGxlIGZlcmFpdCB1biBsaWVuIGF1IG3Dqm1lIGVuZHJvaXQuICovXG5mb3JtLmZvcm1Cb3V0b25BY3Rpb24ge1xuICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbmZvcm0gPiBkaXYgPiBkaXYucm93Rm9ybSBkaXYge1xuICAgIG1hcmdpbjogNXB4IDA7XG59XG5cbmZvcm0gPiBkaXYucm93Rm9ybSB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG5mb3JtID4gZGl2LnJvd0Zvcm0gZGl2LnJvd0Zvcm1Eb3duVHh0IHtcbiAgICBtYXJnaW46IDAgMjBweDtcbn1cblxuZm9ybSA+IGRpdi5yb3dGb3JtIGRpdi5yb3dGb3JtRG93blR4dCA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQmxhbmMpO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uaW5mb0xpZ2h0IHtcbiAgICBvcGFjaXR5OiAuODtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2Zvcm1HYWluSW1nIHtcbiAgICBncmlkLWNvbHVtbjogMSAvIDI7XG59XG5cbiNmb3JtRm9ybXVsYWlyZSB7XG4gICAgZ3JpZC1jb2x1bW46IDIgLyAzO1xuICAgIG1heC13aWR0aDogMzIwcHg7XG59XG5cbnAjcE1MIHtcbiAgICBtYXJnaW46IDAgMTAlIDAgMzglO1xuICAgIGdyaWQtY29sdW1uOiAxLzM7XG59XG4qL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5yb3dGb3JtIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwJSAwJTtcbn1cblxuLnJvd0Zvcm0gdWwge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UzKTtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDNweDtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiAzcHg7XG4gICAgcGFkZGluZzogMTBweCAwIDA7XG59XG4qL1xuXG4vKiBDaGVja2JveCAoLmRpdkNiKSAtIFN0cnVjdHVyZSA6IC5kaXZDYiA+IGlucHV0ICsgbGFiZWwgPiAuc3ZnQ2IgKyB0ZXh0ZSAqL1xuLmRpdkNiIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiA1cHggMDtcbn1cblxuLmRpdkNiIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbn1cblxuLmRpdkNiIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW46IDA7XG59XG5cbi8qIENhc2Ugw6AgY29jaGVyIG91IGJvdXRvbiByYWRpbyBkw6lzYWN0aXbDqSA6IG3Dqm1lIGF0dMOpbnVhdGlvbiBkdSBsYWJlbCAoU1ZHICsgdGV4dGUpIOKAlFxuICAgc8OpbGVjdGV1ciDDqWxhcmdpIGF1IHJhZGlvICguZGl2UmIpLCBxdWkgbidhdmFpdCBhdWN1bmUgbWFycXVlIGRlIGTDqXNhY3RpdmF0aW9uLiAqL1xuLmRpdkNiIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpkaXNhYmxlZCB+IGxhYmVsLFxuLmRpdlJiIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpkaXNhYmxlZCB+IGxhYmVsIHtcbiAgICBvcGFjaXR5OiAwLjY1O1xufVxuXG4uc3ZnQ2Ige1xuICAgIHdpZHRoOiAyMnB4O1xuICAgIGhlaWdodDogMjJweDtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnN2Z0NiIC5jaGVja2VkIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uc3ZnQ2IgLmNoZWNrZWQgcGF0aCB7XG4gICAgZmlsbDogdmFyKC0tY05vaXIxKTtcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQgfiBsYWJlbCAuc3ZnQ2IgLmNoZWNrZWQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDgtMDkg4oCUIHBsdXMgYXVjdW4gX2NoZWNrYm94LnN2ZyAoU3R1ZGlvIG5pIFZpdHJpbmUpIG5lIHBvcnRlIGRlIC5mb25kQ2JcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gbGFiZWwgLnN2Z0NiIC5mb25kQ2Ige1xuICAgIGZpbGw6IHZhcigtLWNGb3JtKTtcbn1cbiovXG5cbi5kaXZDYlN1cHAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQgfiBsYWJlbCAuc3ZnQ2Igc3ZnIC5jaGVja2VkIHBhdGgge1xuICAgIGZpbGw6IHZhcigtLWNSb3VnZTMpO1xufVxuXG4vKiBSYWRpbyBidXR0b24gKC5kaXZSYikgLSBTdHJ1Y3R1cmUgOiAuZGl2UmIgPiBpbnB1dCArIGxhYmVsID4gLnN2Z1JiICsgdGV4dGUgKi9cbi5kaXZSYiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogOHB4IDAgNXB4O1xufVxuXG4uZGl2UmIgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xufVxuXG4uZGl2UmIgbGFiZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnN2Z1JiIHtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5zdmdSYiAuY2hlY2tlZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmNoZWNrZWQgfiBsYWJlbCAuc3ZnUmIgLmNoZWNrZWQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCB+IGxhYmVsIC5zdmdSYiAuZm9uZENiIHtcbiAgICBmaWxsOiB2YXIoLS1jRm9ybSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGT1JNVUxBSVJFIEZJR8OJIOKAlCBsYSBwYWdlIMKrIENvbmZpZ3VyYXRpb24gwrsgZCd1biBhcGVyw6d1IChwcmV2aWV3U2NlbmVDb25maWcudHdpZylcbiAgIG1vbnRyZSBsZSBmb3JtdWxhaXJlIGQndW5lIHNjw6huZSBzYW5zIGxlIHJlbmRyZSBzYWlzaXNzYWJsZS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5mb3JtdWxhaXJlRmlnZSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgb3BhY2l0eTogMC44NTtcbn1cblxuLyogVG9nZ2xlcyAoc291cmNlcyBkZSBwYXJ0aWNpcGFudHMpIGV0IHBpbHVsZXMgKHNsb3RzIGRlIGxvdHMpIDogSFRNTCBicnV0LCBzYW5zIGF0dHJpYnV0XG4gICBgZGlzYWJsZWRgIOKAlCBzYW5zIGNldHRlIGF0dMOpbnVhdGlvbiBpbHMgZ2FyZGVudCBsJ2FwcGFyZW5jZSBkJ3VuIGNvbnRyw7RsZSBhY3RpZi4gTcOqbWVcbiAgIHZhbGV1ciBxdWUgbGVzIGNhc2VzIMOgIGNvY2hlciBldCBsZXMgYm91dG9ucyByYWRpbyBkw6lzYWN0aXbDqXMuICovXG4uZm9ybXVsYWlyZUZpZ2UgLnRvZ2dsZUF2ZWNMYWJlbCB7XG4gICAgb3BhY2l0eTogMC42NTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jdXBsb2FkQnRuMTpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWNGb3JtKTtcbn1cbiovXG5cbmlucHV0OmZvY3VzLFxuc2VsZWN0OmZvY3VzLFxudGV4dGFyZWE6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0Zvcm1Gb2N1cyk7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNGb3JtRm9jdXMpO1xufVxuXG5sYWJlbCBzbWFsbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucm93Rm9ybURvd25UeHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG4qL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNob21lRGl2SGF1dCB7XG4gICAgcGFkZGluZzogMTVweCAxNXB4IDFweDtcbn1cblxuI2hvbWVEaXYgYnV0dG9uLmJ0biB7XG4gICAgYm90dG9tOiA0N3B4O1xufVxuXG4uZm9ybXVsYWlyZSAjYWNjcm9jaGVQYWdlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAtNjBweDtcbn1cblxuI2hvbWVEaXZCYXMge1xuICAgIHBhZGRpbmc6IDFweDtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgd2lkdGg6IDgwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4qL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5yb3dPcHRpbjEsXG4ucm93T3B0aW4yLFxuLnJvd09wdGluMyxcbi5yb3dPcHRpbjQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDVweCAwO1xufVxuXG4ucm93T3B0aW4xIGxhYmVsIGEge1xuICAgIHBhZGRpbmc6IDA7XG59XG4qL1xuXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2RpdkZvcm0gZGl2ICNsb2FkaW5nQmFyU3Bpbm5lciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtYXJnaW46IDIwcHg7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY1RleHRlMSk7XG4gICAgcGFkZGluZzogMTVweCAzMHB4O1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jc3Bpbm5lckljb24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgIGJvcmRlcjogc29saWQgMnB4IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLWNUZXh0ZTEpO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1jVGV4dGUxKTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYW5pbWF0aW9uOiBhbmltZVNwaW5uZXJJY29uIDEwMDBtcyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgYW5pbWVTcGlubmVySWNvbiB7XG4gICAgMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgfVxufVxuKi9cblxuLmN0YVN1cHByaW1lcixcbi5jdGFTZWNvbmRhaXJlLFxuLmN0YVZhbGlkZXIgLyosIC5jdGFWYWxpZGVyMiAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLyogSGF1dGV1ciBtaW5pbWFsZSwgcGFzIGZpeGUgOiB1biBsaWJlbGzDqSBzdXIgZGV1eCBsaWduZXMgKMKrIENoYW5nZXIgbW9uIG1vdCBkZSBwYXNzZSDCuylcbiAgICAgICBzZSBmYWlzYWl0IGNvdXBlciBlbiBiYXMgKHZ1IGVuIHByb2R1Y3Rpb24gbGUgMjAyNi0xMC0xMykuICovXG4gICAgbWluLWhlaWdodDogNTBweDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uY3RhU2Vjb25kYWlyZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNBY2NlbnQzKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50Myk7XG59XG5cbi5jdGFWYWxpZGVyIC8qLCAuY3RhVmFsaWRlcjIgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQWNjZW50X2EpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50dCk7XG59XG5cbi8qIFVuIGxpZW4gaGFiaWxsw6kgZW4gYm91dG9uIGRlIHZhbGlkYXRpb24gKMKrIEFsbGVyIMOgIG1vbiBzdHVkaW8gwrspIDogdW4gPGJ1dHRvbj4gY2VudHJlIHNvblxuICAgbGliZWxsw6kgdG91dCBzZXVsLCB1biA8YT4gbm9uIOKAlCBsZSB0ZXh0ZSByZXN0YWl0IGVuIGhhdXQgw6AgZ2F1Y2hlIGRlIGxhIHpvbmUgYmxldWVcbiAgIChkw6ljaXNpb24gY2hlZiBkZSBwcm9qZXQgMjAyNi0xMC0xNCkuICovXG5hLmN0YVZhbGlkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jdGFTdXBwcmltZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlNCk7XG59XG5cbi5jdGFWYWxpZGVyOmhvdmVyIC8qLCAuY3RhVmFsaWRlcjI6aG92ZXIgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNBY2NlbnRfYWgpO1xuICAgIGNvbG9yOiB2YXIoLS1jQWNjZW50dCk7XG59XG5cbi5jdGFWYWxpZGVyOmRpc2FibGVkLFxuLyogLmN0YVZhbGlkZXIyOmRpc2FibGVkLCAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqL1xuLmN0YVNlY29uZGFpcmU6ZGlzYWJsZWQsXG4uY3RhU3VwcHJpbWVyOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiB3YWl0O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1xufVxuXG4uZm9ybXVsYWlyZSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG87XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NTBweCkge1xuXG4gICAgLmZvcm11bGFpcmUge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0bztcbiAgICAgICAgZ2FwOiAwIHZhcigtLWdhcExpc3RlKTsgLyogYWxpZ27DqSAzMCAtPiAzMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIH1cblxuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuICAgIC5mb3JtdWxhaXJlQm9ybmUge1xuICAgICAgICBncmlkLWNvbHVtbjogMSAvIDI7XG4gICAgICAgIGdyaWQtcm93OiAxIC8gMjtcbiAgICB9XG5cbiAgICAuZm9ybXVsYWlyZURhdGUge1xuICAgICAgICBncmlkLWNvbHVtbjogMSAvIDI7XG4gICAgICAgIGdyaWQtcm93OiAyIC8gMztcbiAgICB9XG5cbiAgICAuZm9ybXVsYWlyZUNvbW1lcmNpYWwge1xuICAgICAgICBncmlkLWNvbHVtbjogMSAvIDI7XG4gICAgICAgIGdyaWQtcm93OiAzIC8gNDtcbiAgICB9XG5cbiAgICAuZm9ybXVsYWlyZU1hZ2FzaW4ge1xuICAgICAgICBncmlkLWNvbHVtbjogMiAvIDM7XG4gICAgICAgIGdyaWQtcm93OiAxIC8gNTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICB9XG4gICAgKi9cblxufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbnAjbWVzc2FnZURhdGUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxucCNtZXNzYWdlRGF0ZS5lcnJldXJEYXRlLFxucCNtZXNzYWdlRGF0ZTIuZXJyZXVyRGF0ZSB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTMpO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbiovXG5cbmZpZWxkc2V0IHVsIHtcbiAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG59XG5cbmZpZWxkc2V0IHVsIGxpIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlMyk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmltZ0Jvcm5lIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuKi9cblxubGFiZWwucmVxdWlyZWQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG59XG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbmxhYmVsLnJlcXVpcmVkMjphZnRlciB7XG4gICAgY29udGVudDogXCIqXCI7XG4gICAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cbiovXG5cbnRleHRhcmVhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIHJlc2l6ZTogdmVydGljYWw7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/