@charset "UTF-8";
/* index.scss → index.css  ·  served at /code/2027/index.css
   Clean shell (no Bootstrap, no au- prefix). Load order: tokens →
   base → layout/card → components. Recompile after any edit:
   npx sass index.scss index.css --no-source-map
   NOTE: the CMS only rebuilds index.css when THIS file is saved — editing a
   partial under css/ alone does not trigger it. Re-save this file after any
   partial edit. */
/* ════════════════════════════════════════════════════════════
   au-tokens.css  ·  AU Design System custom properties
   The single source of truth for all design tokens.
   Every other partial references these via var().
   If your master already defines :root, omit this file.
   ════════════════════════════════════════════════════════════ */
:root {
	/* ─── COLOR: Primary ─── */
	--au-navy: #003366;
	--au-navy-deep: #001a33;
	--au-navy-mid: #002a48; /* between deep and navy; matches theme-color */
	--au-navy-light: #004080;
	--au-gold: #C6952B;
	--au-gold-light: #E8B84B;
	--au-gold-pale: #FDF5E6;
	/* ─── COLOR: Neutral ─── */
	--au-cream: #FAF8F5;
	--au-stone: #ECEAE4; /* warm light-gray band, a step deeper than cream */
	--au-white: #FFFFFF;
	--au-warm-gray: #6B6560;
	--au-gray-200: #E8E4DF;
	--au-gray-300: #D1CBC4;
	--au-gray-400: #B5AFA8;
	--au-text: #2A2522;
	/* ─── COLOR: Semantic ─── */
	--au-success: #2D7D46;
	--au-warning: #C6952B;
	--au-error: #B83232;
	--au-info: #2868A6;
	/* ─── TYPOGRAPHY ─── */
	--font-display: "IBM Plex Serif", Georgia, "Times New Roman", serif;
	--font-body: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, sans-serif;
	--font-mono: "IBM Plex Mono", "Courier New", monospace;
	/* ─── TYPE SCALE (Major Third — 1.25) ─── */
	--text-xs: 0.75rem; /* 12px */
	--text-sm: 0.875rem; /* 14px */
	--text-base: 1rem; /* 16px */
	--text-md: 1.125rem; /* 18px */
	--text-lg: 1.25rem; /* 20px */
	--text-xl: 1.563rem; /* 25px */
	--text-2xl: 1.953rem; /* ~31px */
	--text-3xl: 2.441rem; /* ~39px */
	--text-4xl: 3.052rem; /* ~49px */
	/* ─── SPACING (8px base) ─── */
	--space-1: 0.25rem; /* 4px */
	--space-2: 0.5rem; /* 8px */
	--space-3: 0.75rem; /* 12px */
	--space-4: 1rem; /* 16px */
	--space-5: 1.5rem; /* 24px */
	--space-6: 2rem; /* 32px */
	--space-8: 3rem; /* 48px */
	--space-10: 4rem; /* 64px */
	--space-12: 5rem; /* 80px */
	--space-16: 6.25rem; /* 100px */
	/* ─── LAYOUT ─── */
	--max-width: 1200px;
	--max-width-narrow: 900px;
	--max-width-text: 700px;
	--gutter: 2.5rem;
	--header-height: 6.75rem; /* approx sticky header height; sticky offsets reference it */
	/* ─── BORDERS & RADII ─── */
	--radius-sm: 4px;
	--radius-md: 8px;
	--radius-lg: 12px;
	--radius-full: 9999px;
	/* ─── SHADOWS ─── */
	--shadow-sm: 0 1px 4px rgba(0,0,0,0.06);
	--shadow-md: 0 4px 16px rgba(0,0,0,0.08);
	--shadow-lg: 0 8px 32px rgba(0,0,0,0.10);
	--shadow-xl: 0 16px 48px rgba(0,0,0,0.14);
	/* ─── TRANSITIONS ─── */
	--ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
	--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
	--duration-fast: 150ms;
	--duration-base: 300ms;
	--duration-slow: 500ms;
}

/* ════════════════════════════════════════════════════════════
   fonts.css  ·  self-hosted IBM Plex  (woff2 in /code/2027/fonts/)
   Family names match the --font-* tokens. Only the weights/styles the
   system actually uses are declared (Sans 400/600/700 + italic, Serif
   400/600 + italic, Mono 400). font-display: swap to avoid FOIT.
   ════════════════════════════════════════════════════════════ */
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-400.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: italic;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-400-italic.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-600.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Sans";
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-sans-700.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-400.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: italic;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-400-italic.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Serif";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-serif-600.woff2") format("woff2");
}
@font-face {
	font-family: "IBM Plex Mono";
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url("/code/2027/fonts/ibm-plex-mono-400.woff2") format("woff2");
}
/* ════════════════════════════════════════════════════════════
   base.css  ·  reset + bare-element typography
   Depends on: tokens.css
   GLOBAL (clean shell — no Bootstrap to coexist with, so no .au
   scope). On-brand defaults for raw HTML so CKEditor content reads
   correctly with no extra classes. Component classes layer on top.
   ════════════════════════════════════════════════════════════ */
*, *::before, *::after {
	box-sizing: border-box;
}

* {
	margin: 0;
}

html {
	-webkit-text-size-adjust: 100%;
	scroll-behavior: smooth;
}

img, picture, svg, video {
	display: block;
	max-width: 100%;
	height: auto;
}

/* several images authored side by side in one paragraph or heading (badges,
   social icons, logos -- /ceis/leadership_school/) stay on one line, as they did
   before the block reset above; a lone image keeps display:block */
:is(p, h2, h3, h4, h5, h6):has(> img, > a > img):has(> img + img, > img + a, > a + img, > a + a) img {
	display: inline-block;
	vertical-align: middle;
}

input, button, textarea, select {
	font: inherit;
	color: inherit;
}

body {
	font-family: var(--font-body);
	font-size: var(--text-base);
	line-height: 1.6;
	color: var(--au-text);
	background: var(--au-white);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	/* sticky footer: the page is a full-viewport-tall column so that on short
	   pages the footers (dept pre-footer + global site footer) settle at the
	   bottom of the screen instead of floating mid-viewport. The <main> content
	   grows to absorb the slack; header/footers keep their natural height.
	   Works with the sticky header (sticky positioning is unaffected by the
	   column flex context). */
	display: flex;
	flex-direction: column;
	min-height: 100vh;
	min-height: 100dvh; /* progressive: exclude mobile browser chrome where supported */
}

/* the content area is the only flex child that grows; everything else
   (header, dept-footer, site-footer, 0-height scripts) keeps its size. */
body > main {
	flex: 1 0 auto;
}

h1, h2, h3, h4, h5, h6 {
	font-family: var(--font-display);
	color: var(--au-navy);
	line-height: 1.2;
	font-weight: 400;
	text-wrap: balance;
}

/* one weight across all levels — hierarchy comes from size (+ the serif/navy
   vs sans/gray contrast against body), not weight. Keeping every heading at the
   light display weight avoids a smaller heading (h4) reading as bolder than a
   larger one (h3). Components that want a heavier label (.card-title,
   .footer-col h3, .mega-col h4) set their own font-weight. */
h1 {
	font-size: var(--text-4xl);
}

h2 {
	font-size: var(--text-3xl);
}

h3 {
	font-size: var(--text-2xl);
}

h4 {
	font-size: var(--text-xl);
}

h5 {
	font-size: var(--text-lg);
}

h6 {
	font-size: var(--text-base);
	letter-spacing: 0.5px;
}

p {
	line-height: 1.7;
}

p + p {
	margin-top: var(--space-4);
}

a {
	color: var(--band-link, var(--au-navy-light));
	text-decoration: underline;
	text-underline-offset: 2px;
	text-decoration-thickness: 1px;
	transition: color var(--duration-fast) var(--ease-out);
}

/* buttons manage their own hover colors — exclude them so the link-hover gold
   doesn't wash out .btn labels (esp. .btn-primary on its gold background). */
a:not(.btn):hover {
	color: var(--band-link-hover, var(--au-gold));
}

strong, b {
	font-weight: 700;
}

em, i {
	font-style: italic;
}

small {
	font-size: var(--text-sm);
}

ul, ol {
	padding-left: var(--space-5);
	line-height: 1.7;
}

li + li {
	margin-top: var(--space-2);
}

blockquote {
	border-left: 3px solid var(--au-gold);
	padding-left: var(--space-5);
	margin: var(--space-6) 0;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-style: italic;
}

hr {
	border: 0;
	border-top: 1px solid var(--au-gray-200);
	margin: var(--space-8) 0;
}

code, kbd, samp {
	font-family: var(--font-mono);
	font-size: 0.9em;
	background: var(--au-cream);
	padding: 0.15em 0.4em;
	border-radius: var(--radius-sm);
}

pre {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.88);
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	overflow-x: auto;
	font-family: var(--font-mono);
	font-size: var(--text-sm);
	line-height: 1.6;
	margin: var(--space-5) 0;
}

pre code {
	background: none;
	padding: 0;
	border-radius: 0;
	font-size: inherit;
	color: inherit;
}

/* visually-hidden (screen-reader only) */
.sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* ─── icon link list ───
   A tidy, self-columning list of icon + link rows for rich-text bodies
   (accordion panels, page content). Authors add class="link-list" to a <ul>;
   each <li> holds a FontAwesome <i> + an <a>. The icon takes the band accent
   (gold on dark / light bands); the link colour comes from the surrounding
   context (e.g. gold inside a dark-band accordion). Collapses to one column
   on narrow widths. Items without an icon still align cleanly. */
.link-list {
	list-style: none;
	margin: var(--space-4) 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
	gap: var(--space-3) var(--space-6);
}

.link-list li {
	margin: 0;
	display: flex;
	align-items: baseline;
	gap: var(--space-3);
}

.link-list li > i {
	flex: none;
	width: 1.15em;
	text-align: center;
	color: var(--band-accent, var(--au-gold));
}

/* ════════════════════════════════════════════════════════════
   layout.css  ·  section bands + the flexible grid
   Depends on: tokens.css

   .section   full-bleed band (vertical rhythm + bg variant)
   .section-inner   centered max-width column
   .grid      flex-wrap; any number of children flow and fill —
              the renderers never compute a column count.
   ════════════════════════════════════════════════════════════ */
/* ─── SECTION ─── */
.section {
	padding: var(--space-12) var(--gutter);
}

/* Same-color bands abut: collapse the doubled seam to a single, continuous
   gap (not zero — content must not collide). Both sides trim to --space-6,
   so a same-color seam reads as one band with ~64px between its content. */
.section--flush-top {
	padding-top: var(--space-6);
}

.section--flush-bottom {
	padding-bottom: var(--space-6);
}

.section-inner {
	max-width: var(--max-width);
	margin-inline: auto;
}

.section-head {
	margin-bottom: var(--space-4);
}

.section-label {
	font-size: var(--text-xs);
	letter-spacing: 3px;
	text-transform: uppercase;
	color: var(--band-eyebrow, var(--au-gold));
	font-weight: 600;
	margin-bottom: var(--space-3);
}

.section-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.5vw, var(--text-3xl));
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
}

.section-desc {
	font-size: var(--text-md);
	color: var(--band-body, var(--au-warm-gray));
	max-width: var(--max-width-text);
	line-height: 1.7;
	margin-top: var(--space-4);
}

/* ─── BACKGROUND BANDS ───────────────────────────────────────────
   The CMS background_color field supplies the modifier name → the author
   picks from this palette. Light bands set only a background; DARK bands
   also publish a set of `--band-*` CONTEXT TOKENS that components read
   (headings, body, cards, hairlines, …). That's the whole point: a
   component styles a dark band once, through the tokens, so adding a new
   band is a single definition here — not an edit in every component.

   Palette:
     light  →  (white default) · cream · stone(gray) · gold
     dark   →  navy(deep) · navy-mid · navy-bright
   Legacy .ct values are aliased onto the nearest new band (delete the
   alias selectors once the .ct dropdowns are trimmed to the names above). */
/* light bands */
.section--cream,
.section--ecru-white {
	background: var(--au-cream);
}

.section--stone,
.section--gray,
.section--seashell-gray,
.section--cararra-gray,
.section--cararra-gray-textured {
	background: var(--au-stone);
}

.section--gold {
	background: var(--au-gold-pale);
}

/* dark bands — background + the shared context tokens */
.section--navy {
	background: var(--au-navy-deep);
}

.section--navy-mid {
	background: var(--au-navy-mid);
}

.section--navy-bright {
	background: var(--au-navy);
}

.section--nile-blue {
	background: var(--au-navy-deep);
}

/* chathams-blue was the LIGHTER legacy blue (#143E6E) — keep it lighter (maps to
   --au-navy #003366) rather than collapsing it into the darkest band. */
.section--chathams-blue {
	background: var(--au-navy);
}

.section--fiord-blue,
.section--fiord-blue-textured {
	background: var(--au-navy-deep);
}

.section--navy,
.section--navy-mid,
.section--navy-bright,
.section--nile-blue,
.section--chathams-blue,
.section--fiord-blue,
.section--fiord-blue-textured {
	color: rgba(255, 255, 255, 0.85);
	--band-heading: var(--au-white);
	--band-body: rgba(255, 255, 255, 0.66);
	--band-eyebrow: var(--au-gold-light);
	--band-accent: var(--au-gold-light);
	/* hover/expanded surface (accordion header): a subtle translucent-white lift.
	   (A gold wash muddied against the blue band.) */
	--band-link: var(--au-gold-light);
	--band-link-hover: var(--au-white);
	--band-raised: rgba(255, 255, 255, 0.09);
	--band-hairline: rgba(255, 255, 255, 0.12);
	--band-quote: rgba(255, 255, 255, 0.82);
	--band-card-bg: rgba(255, 255, 255, 0.04);
	--band-card-border: rgba(255, 255, 255, 0.1);
	--band-card-border-w: 0;
	--band-card-shadow: 0 2px 6px rgba(0, 0, 0, 0.25), 0 14px 32px rgba(0, 0, 0, 0.28);
	--band-card-shadow-hover: 0 6px 16px rgba(0, 0, 0, 0.3), 0 22px 48px rgba(0, 0, 0, 0.36);
	--band-icon-bg: rgba(255, 255, 255, 0.08);
	--band-icon-fg: var(--au-gold-light);
}

/* ─── GRID — flexible flex (unknown item counts) ─── */
.grid {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-5);
}

.grid > * {
	flex: 1 1 280px;
	min-width: 0;
} /* min-width: a wide table/iframe inside scrolls in its .table-wrap instead of stretching the column */
/* compact variant — a tighter flex min so cards pack closer and 3-up holds
   across a sidebar content column, resizing smoothly (the default 280px only
   fits two). Works as a section-level token (Custom Class "compact") or
   directly on the grid (class="grid grid--compact"). */
.grid--compact > * {
	flex: 1 1 200px;
}

.compact .grid > * {
	flex: 1 1 200px;
}

/* ─── SPLIT — asymmetric two-column feature rows ─────────────────
   For image-on-one-side / text-on-the-other rows the flex grid can't do,
   because it sizes every child equally. A SECTION token (typed in the section's
   Custom Class field) swaps the grid to a fixed two-track layout with a wide +
   narrow split:
     split-2-3   → 2fr 3fr   (left narrower, right wider)
     split-3-2   → 3fr 2fr   (left wider,   right narrower)
   Which side is the image is just the ORDER of the two cards — put the image
   card first for image-left, second for image-right; pick the token that makes
   the image the size you want. Rows are vertically centered so a short text
   block sits centered against a taller image. Built for TWO cards; a third
   would wrap to a new row. Collapses to a single stacked column on narrow
   screens. The token also lands as a class on the section (via custom_class). */
.split-2-3 .grid,
.split-3-2 .grid {
	display: grid;
	gap: var(--space-8);
	align-items: center;
}

.split-2-3 .grid {
	grid-template-columns: 2fr 3fr;
}

.split-3-2 .grid {
	grid-template-columns: 3fr 2fr;
}

/* an image-only card defaults to align-self:start (top-pinned); in a split we
   want it centered in the row like everything else */
.split-2-3 .card--media,
.split-3-2 .card--media {
	align-self: center;
}

/* pin both columns to the top instead of centering — combine with the split
   token when the text is longer than the image (e.g. split-3-2 split-top) */
.split-top .grid {
	align-items: start;
}

.split-top .card--media {
	align-self: start;
}

@media (max-width: 760px) {
	.split-2-3 .grid,
	.split-3-2 .grid {
		grid-template-columns: 1fr;
	}
	.split-2-3 .card--media,
	.split-3-2 .card--media {
		max-width: 400px;
		width: 100%;
		margin-inline: auto;
	}
}
/* ─── TEXT SIZE — section-level overrides ─────────────────────
   Drop into a section's Custom Class field to bump the text in
   that row above the card-text default (14px).
     standard  → 16px body text (comfortable reading for full-width prose)
     lead      → 20px body, 31px titles, 1.7 line-height (intro/welcome) */
.standard .card-text {
	font-size: var(--text-base);
	line-height: 1.7;
}

/* the card heading scale tops out at 18px — barely above 16px body, so
   step headings up with the text or the hierarchy flattens */
.standard .card-text :is(h1, h2) {
	font-size: var(--text-xl);
}

.standard .card-text h3 {
	font-size: var(--text-md);
}

.lead .card-title {
	font-size: var(--text-2xl);
	line-height: 1.2;
	margin-bottom: var(--space-3);
}

.lead .card-text {
	font-size: var(--text-lg);
	line-height: 1.7;
}

.lead .card-text :is(h1, h2, h3) {
	font-size: var(--text-xl);
}

.lead .card-text :is(h4, h5, h6) {
	font-size: var(--text-md);
}

.page-main p.lead {
	font-size: var(--text-lg);
	line-height: 1.7;
}

/* ════════════════════════════════════════════════════════════
   card.css  ·  the card  (image / eyebrow / title / text / cta)
   Depends on: tokens.css
   The single card primitive used by columns, bios, feeds, etc.
   ════════════════════════════════════════════════════════════ */
.card {
	display: flex;
	flex-direction: column;
	background: var(--au-white);
	/* border + shadow come from the band's context tokens: on a dark band the
	   border width collapses to 0 (reclaims the 1px strip that leaked the white
	   card bg around the image) and the shadow deepens. Light bands fall back to
	   the hairline + soft shadow. */
	border: var(--band-card-border-w, 1px) solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	box-shadow: var(--band-card-shadow, var(--shadow-sm));
	overflow: hidden;
	transition: box-shadow var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out);
	/* White-surface cards reset band link tokens; plain cards (transparent,
	   band-colored) inherit the section's tokens instead — see below. */
}

.card:hover {
	box-shadow: var(--band-card-shadow-hover, var(--shadow-md));
	border-color: var(--band-card-border, var(--au-gray-300));
	transform: translateY(-2px);
}

.card:not(.card--plain) {
	--band-link: var(--au-navy-light);
	--band-link-hover: var(--au-gold);
}

/* ...and the band's text colors too: a table or accordion inside a white card
   on a dark band was taking the band's white body text and vanishing
   (/chhs/speech/services/ fees). A `plain` section's cards are transparent,
   so they keep the band's colors. */
.section:not(.plain) .card:not(.card--plain) {
	--band-body: initial;
	--band-heading: initial;
}

.card-img-link {
	display: block;
	cursor: pointer;
}

.card-img {
	width: 100%;
	aspect-ratio: 16/9;
	overflow: hidden;
	-o-object-fit: cover;
	   object-fit: cover;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	/* a linked image is a button, not text — stop Safari showing the text-select
	   I-beam (and dragging) when the image has words baked into it. */
	-webkit-user-select: none;
	-moz-user-select: none;
	     user-select: none;
	-webkit-user-drag: none;
}

/* icon lead — icon-led cards (services / features) in place of a photo */
.card-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3.25rem;
	height: 3.25rem;
	border-radius: var(--radius-md);
	background: var(--au-gold-pale);
	color: var(--au-gold);
	font-size: var(--text-xl);
}

.card-body {
	display: flex;
	flex-direction: column;
	gap: var(--space-3);
	padding: var(--space-6);
	flex: 1;
}

.card-eyebrow {
	font-size: var(--text-xs);
	letter-spacing: 1px;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	font-style: italic;
}

.card-title {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-weight: 600;
	line-height: 1.25;
}

.card-title a {
	color: inherit;
	text-decoration: none;
}

.card-title a:hover {
	color: var(--au-navy-light);
}

.card-text {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.7;
}

/* Authored rich text — the CKEditor `content` field lands whole inside
   .card-text, and base.css resets every margin to 0. Without rhythm here an
   authored <h3> sits flush against the paragraph above it and the block reads
   as one lump (.page-main re-establishes the same rhythm for page content;
   these are the card-scale equivalents — tighter, because a card is a much
   narrower measure).

   Heading SIZE matters too: base.css gives h3 --text-2xl, which is larger than
   the card's own .card-title (--text-lg), so an authored heading was
   out-shouting the title it sits under. Stepped down so the hierarchy reads
   card-title > authored heading > body.

   First child sits flush to the top — .card-body's flex gap already spaces it
   from the title above. */
.card-text > :first-child {
	margin-top: 0;
}

.card-text :is(p, ul, ol, table, blockquote, figure) {
	margin-top: var(--space-3);
}

.card-text :is(h1, h2, h3, h4, h5, h6) {
	margin-top: var(--space-5);
	font-family: var(--font-display);
	font-weight: 600;
	line-height: 1.25;
	color: var(--au-navy);
}

/* Heading scale for authored card text. base.css sizes headings for a full
   page (h3 is --text-2xl / 31px), which inside a card out-shouts the
   .card-title above it. Rescaled to sit between the card title (--text-lg /
   20px) and the body copy (--text-sm / 14px) — but each level still steps, so
   choosing h2 vs h3 vs h4 continues to mean something. h5/h6 run out of room
   on size alone in a 14–20px band, so they separate by weight and letterform
   instead, the same trick base.css uses for h6. */
.card-text h1 {
	font-size: var(--text-lg);
}

.card-text h2 {
	font-size: var(--text-md);
}

.card-text h3 {
	font-size: var(--text-base);
}

.card-text h4 {
	font-size: var(--text-sm);
	font-weight: 700;
}

.card-text h5 {
	font-size: var(--text-sm);
}

.card-text h6 {
	font-size: var(--text-xs);
	text-transform: uppercase;
	letter-spacing: 0.5px;
}

/* a heading belongs with the text under it — keep that gap tighter */
.card-text :is(h1, h2, h3, h4, h5, h6) + :is(p, ul, ol) {
	margin-top: var(--space-2);
}

.card-cta {
	margin-top: auto;
	align-self: flex-start;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	text-decoration: none;
}

.card-cta:hover {
	color: var(--au-gold);
}

/* linked card — the whole card is the click target (a "stretched link"), so you
   don't have to hit the link text exactly. The card's link stretches to cover
   it; the pointer cursor follows. (Text selection inside is traded for the full
   click area — expected for a card-as-a-link.) */
.card--linked {
	position: relative;
}

.card--linked :is(.card-img-link, .card-title a, .card-cta)::after {
	content: "";
	position: absolute;
	inset: 0;
}

/* media-only card (image, no body): show the image at its natural ratio with all
   four corners rounded, and don't stretch to a taller sibling (which would leave
   an un-rounded strip of card below the image). */
.card--media {
	align-self: start;
}

/* no placeholder gradient here — image-only cards are usually transparent logos
   or graphics, and the navy fill would show through and box them in. Let the
   card/band behind show instead. (Photo cards keep the gradient as a loading/
   fallback backdrop.) */
.card--media .card-img {
	aspect-ratio: auto;
	height: auto;
	background: none;
}

/* portrait section token (Custom Class "portrait") — for rows of people: the
   default 16:9 crop slices a headshot through the face, so crop to 4:5 and
   anchor to the top to keep heads in frame. Also works on a single card. */
.portrait .card-img,
.card--portrait .card-img {
	aspect-ratio: 4/5;
	-o-object-position: top;
	   object-position: top;
}

/* rows of people get equal columns: in a section that wraps, the short last
   row keeps the card width instead of stretching two photos across the band;
   a section with a single row still fills it (auto-fit collapses empty tracks) */
.portrait .grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr));
}

/* with `compact`: at most four columns (each at least 200px), so a row of
   four fits at laptop widths, and a short row (2 or 3 people) keeps the same
   card width instead of stretching across the band (/chhs/publichealth/faculty/) */
.portrait.compact .grid {
	grid-template-columns: repeat(auto-fill, minmax(min(100%, max(200px, (100% - 3 * var(--space-5)) / 4)), 1fr));
}

/* natural section token (Custom Class "natural") — each card image at its own
   shape, uncropped: for a row of square (or otherwise matching) photos that a
   16:9 strip would slice through the heads (/cas/math/ "Why Study Math") */
.natural .card-img {
	aspect-ratio: auto;
}

/* faces section token (Custom Class "faces") — tall photos of people in a row
   of wide cards (/cas/agriculture/): a 16:9 slice through the middle of a
   portrait photo cuts off the heads, so crop 4:3 and keep the upper part */
.faces .card-img {
	aspect-ratio: 4/3;
	-o-object-position: 50% 15%;
	   object-position: 50% 15%;
}

/* plain variant — no fill (e.g. on a colored band). overflow:visible because the
   card has no fill/border to clip, the image rounds itself, and the rounded-corner
   clip was cutting descenders (the "g") off a caption sitting flush to the bottom. */
.card--plain {
	background: transparent;
	box-shadow: none;
	border: 0;
	overflow: visible;
}

.card--plain:hover {
	transform: none;
	box-shadow: none;
	border: 0;
}

/* on a plain card (no fill / no outline) the image is a standalone tile — round
   ALL four corners (the card's clip only rounds the top, since the body sits
   below), and pull the caption flush-left under it with tight top padding. */
/* child combinators: a .card authored INSIDE a plain card's rich text (a nested
   grid of cards) keeps its own padding and image corners. */
.card--plain > .card-img, .card--plain > .card-img-link .card-img {
	border-radius: var(--radius-lg);
}

/* a .card-img authored in the rich text (image placed above a title in the
   content, e.g. /undergrad) is a standalone tile too — round it the same way. */
.card-text .card-img {
	border-radius: var(--radius-lg);
}

.card--plain > .card-body {
	padding: var(--space-3) 0 0;
}

/* plain cards sit directly on the band, so their text follows the band tokens */
.card--plain .card-title {
	color: var(--band-heading, var(--au-navy));
}

.card--plain .card-text {
	color: var(--band-body, var(--au-warm-gray));
}

/* headings authored inside the rich-text content follow the band too — otherwise
   an <h2> in a plain card stays navy and disappears on a dark band. */
.card--plain .card-text :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* `plain` section token (Custom Class): every card in the section drops its
   chrome and reads as text on the band -- for intro / statement rows built as
   one text-only columns card, which otherwise sit in a bordered box. Same look
   as each card's own "transparent" switch, set once for the section. */
.section.plain .grid > .card {
	background: transparent;
	box-shadow: none;
	border: 0;
	overflow: visible;
}

.section.plain .grid > .card:hover {
	transform: none;
	box-shadow: none;
	border: 0;
}

.section.plain .grid > .card > .card-body {
	padding: 0;
}

.section.plain .grid > .card .card-text {
	color: var(--band-body, var(--au-warm-gray));
}

/* ─── byline: a small round portrait + name/title under authored text
   (e.g. a dean's message). <div class="byline"><img …><p><strong>Name</strong><br>Title</p></div> */
.byline {
	display: flex;
	align-items: center;
	gap: var(--space-4);
	margin-top: var(--space-5);
}

.byline img {
	width: 88px;
	height: 88px;
	flex: none;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
	border-radius: 50%;
}

.card-text .byline p {
	margin: 0;
}

/* ─── logo-tile: one sponsor/partner per columns card — a logo (optionally linked)
   or, when there's no logo, the name — centered in a box of even height so a row
   of mixed logos lines up. <div class="logo-tile"><a href…><img …></a></div> */
.logo-tile {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 120px;
	padding: var(--space-4);
	text-align: center;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-navy);
}

.logo-tile img {
	max-height: 96px;
	width: auto;
	max-width: 100%;
	-o-object-fit: contain;
	   object-fit: contain;
}

.logo-tile a {
	display: inline-flex;
}

/* a row of logos authored in one rich-text area (/cas/stem/invent/ sponsors):
   <div class="logo-grid"><div class="logo-tile"><img …></div>…</div> — equal
   columns that fit five across, each logo framed in a light tile */
.logo-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 150px), 1fr));
	gap: var(--space-4);
}

.logo-grid > .logo-tile {
	min-height: 128px;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
}

.logo-grid > .logo-tile img {
	max-height: 80px;
}

/* ════════════════════════════════════════════════════════════
   feature.css  ·  full-bleed feature blocks — page hero + cover band
   Depends on: tokens.css, layout.css (.section / .section-inner)
   ════════════════════════════════════════════════════════════ */
/* ─── HERO — page-top banner (image or background video) ─── */
.hero {
	position: relative;
	/* was 70vh — grew unbounded on tall desktops. Cap it: a sensible floor, a
	   modest viewport-relative preference, and a ceiling so big screens don't get
	   a huge band of empty image. Content still expands it if it needs to. */
	min-height: clamp(320px, 46vh, 460px);
	display: flex;
	align-items: flex-end;
	background: var(--au-navy-deep) center/cover no-repeat;
	color: var(--au-white);
	overflow: hidden;
}

.hero::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(transparent 20%, rgba(0, 26, 51, 0.75) 70%, rgba(0, 26, 51, 0.9));
}

.hero-inner {
	position: relative;
	z-index: 2;
	width: 100%;
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-12) var(--gutter);
}

.hero-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-3xl), 6vw, var(--text-4xl));
	color: var(--au-white);
	line-height: 1.1;
	max-width: 18ch;
	text-shadow: 0 2px 12px rgba(0, 20, 40, 0.6);
}

.hero-caption {
	margin-top: var(--space-5);
	max-width: var(--max-width-text);
	font-size: var(--text-md);
	color: rgba(255, 255, 255, 0.8);
	line-height: 1.7;
}

/* links in the caption read light on the photo (the base link navy disappears) */
.hero-caption a {
	color: var(--au-gold-light);
}

.hero-contact {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.7);
}

.hero-contact a {
	color: var(--au-gold-light);
}

/* ─── HERO ABOVE — shorter banner for interior pages with sidebar below ─── */
.hero--above {
	min-height: clamp(200px, 30vh, 340px);
}

.hero--above .hero-title {
	font-size: clamp(var(--text-2xl), 5vw, var(--text-3xl));
}

/* ─── HERO GRAPHIC — campaign art that carries its own headline ───
   props.style.hero = "graphic". The band takes the art's 5:2 proportions so
   cover-cropping can't cut the lettering, drops the darkening gradient, and
   keeps the page <h1> for screen readers/SEO but visually hidden so it can't
   collide with the words baked into the image. */
.hero--graphic {
	min-height: 0;
	aspect-ratio: 5/2;
}

.hero--graphic::after,
.hero--bare::after {
	display: none;
}

.hero--graphic .hero-inner {
	padding: 0;
}

/* hero--bare (set by hero.tt): nothing is written over the photo, so it loses the
   gradient too and its title is screen-reader only, at the band's usual height */
.hero--graphic .hero-title,
.hero--bare .hero-title {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
}

/* ─── HERO RATIO — the whole photo, at the legacy homepage hero's 5:2 ───
   props.style.hero = "ratio". Like "graphic" the band takes the image's 5:2
   proportions instead of a fixed height, so a 2400x960 hero is never
   cover-cropped (no cut-off heads), but the title, caption and darkening
   gradient stay. On phones it falls back to the default height so the title
   still fits over the image. */
.hero--ratio {
	min-height: 0;
	aspect-ratio: 5/2;
}

.hero--ratio .hero-inner {
	padding-block: var(--space-6);
}

@media (max-width: 640px) {
	.hero--ratio {
		aspect-ratio: auto;
		min-height: 260px;
	}
}
/* ─── HERO CROP — props.style.hero_crop = "top": keep the upper part of the
   photo. Separate from props.style.hero so it combines with "ratio" (a 3:2
   photo in the 5:2 band, people high in the frame; /cas/agriculture/agcenter/) */
.hero--crop-top {
	background-position: center 15%;
}

/* "bottom": people low in the frame (a group photo standing in front of a
   building; /chhs/nursing/apply/) */
.hero--crop-bottom {
	background-position: center 80%;
}

/* ─── HERO SPLIT — text left, photo card right, solid navy ─── */
.hero--split {
	background-image: none !important;
	min-height: auto;
}

.hero--split::after {
	display: none;
}

.hero--split .hero-inner {
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: center;
	gap: var(--space-10);
}

.hero--split .hero-title {
	text-shadow: none;
}

.hero--split .hero-media img {
	width: 100%;
	aspect-ratio: 4/3;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-lg);
}

@media (max-width: 760px) {
	.hero--split .hero-inner {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
	.hero--split .hero-media {
		order: -1;
	}
	.hero--split .hero-media img {
		aspect-ratio: 16/9;
	}
}
/* ─── COVER — full-bleed photo/video band with a content panel ─── */
.section--cover {
	position: relative;
	display: flex;
	align-items: center;
	min-height: 60vh;
	padding-block: var(--space-12);
	background: var(--au-navy) center/cover no-repeat;
	color: var(--au-white);
	overflow: hidden;
}

.section--cover::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, rgba(0, 26, 51, 0.8), rgba(0, 26, 51, 0.2));
}

/* No content panel → no overlay; let the photo show unobscured. */
.section--cover:not(:has(.cover-panel))::after {
	display: none;
}

/* width:100% stops the flex band from collapsing .section-inner down to the
   panel's width (which is what centres it) — instead it fills the content column
   (max-width, centred), giving the panel room to shift left/right within it and
   aligning those edges with the rest of the page. */
.section--cover > .section-inner {
	position: relative;
	z-index: 2;
	width: 100%;
}

.cover-panel {
	max-width: 540px;
	margin-inline: auto;
}

.cover-panel :is(h1, h2, h3, h4, h5, h6) {
	color: var(--au-white);
}

/* content links on the cover's dark ground — light gold, no default underline
   (the navy + underline default is unreadable on the image). This is the happy
   default, so authors don't need to hand-color every link. */
.cover-panel a {
	color: var(--au-gold-light);
	text-decoration: none;
}

.cover-panel a:hover {
	text-decoration: underline;
}

.cover-panel .card-cta {
	display: inline-block;
	margin-top: var(--space-4);
}

/* ── Feature-link pattern: <a><strong>Heading</strong><em>Sub-CTA</em></a>
   Works in both the hero caption (.hero-caption) and the cover panel (.cover-panel).
   Styled to match the homepage feature link: dark navy box, serif headline, white sub-line.
   Authors use Bold + Italic in CKEditor and wrap both in a link. */
.hero-caption a:has(> strong),
.cover-panel a:has(> strong) {
	display: inline-block;
	background: rgba(0, 26, 51, 0.82);
	border-left: 3px solid var(--au-gold);
	padding: var(--space-4) var(--space-6);
	color: var(--au-white);
	text-decoration: none;
}

.hero-caption a:has(> strong) > strong,
.cover-panel a:has(> strong) > strong {
	display: block;
	font-family: var(--font-serif);
	font-size: var(--text-xl);
	font-weight: 700;
	line-height: 1.2;
	color: var(--au-white);
}

.hero-caption a:has(> strong) > span,
.hero-caption a:has(> strong) > em,
.cover-panel a:has(> strong) > span,
.cover-panel a:has(> strong) > em {
	display: block;
	margin-top: var(--space-1);
	font-size: var(--text-md);
	font-style: normal;
	color: var(--au-white);
}

.hero-caption a:has(> strong):hover,
.cover-panel a:has(> strong):hover {
	text-decoration: none;
}

.hero-caption a:has(> strong):hover > strong,
.cover-panel a:has(> strong):hover > strong {
	color: var(--au-gold-light);
}

.hero-caption a:has(> strong):hover > span,
.hero-caption a:has(> strong):hover > em,
.cover-panel a:has(> strong):hover > span,
.cover-panel a:has(> strong):hover > em {
	text-decoration: underline;
}

/* CKEditor inserts a <br> between the <strong> and <em>; suppress it since
   both are already display:block. */
.hero-caption a:has(> strong) > br,
.cover-panel a:has(> strong) > br {
	display: none;
}

/* ─── cover overlay alignment ───
   The panel is CENTERED by default. Drop a token into the section's Custom Class
   to shift it to the page's content-column edge; the gradient's dark side follows
   so the overlay text stays legible over it:
     cover-left   → panel on the LEFT  (gradient already darkens the left)
     cover-right  → panel on the RIGHT (gradient flips to darken the right)
   Panel width, vertical centering and text-alignment are unchanged — only the
   horizontal placement (and, for the right, the gradient direction) switch. */
.section--cover.cover-left .cover-panel {
	margin-inline: 0 auto;
}

.section--cover.cover-right .cover-panel {
	margin-inline: auto 0;
}

.section--cover.cover-right::after {
	background: linear-gradient(270deg, rgba(0, 26, 51, 0.8), rgba(0, 26, 51, 0.2));
}

/* cover-title (Custom Class): a photo band that carries one short headline --
   the legacy "creative-text" title bands (/cas/vacd/ "Student Work"). Shorter
   band, an even wash instead of the side gradient, big centred serif title. */
.section--cover.cover-title {
	min-height: 40vh;
}

.section--cover.cover-title::after {
	background: rgba(0, 26, 51, 0.4);
}

.section--cover.cover-title .cover-panel {
	max-width: none;
	text-align: center;
	font-family: var(--font-display);
	font-size: clamp(2.25rem, 6vw, 4.5rem);
	line-height: 1.1;
}

.section--cover.cover-title .cover-panel strong {
	font-weight: 600;
}

/* ─── cover gradient backgrounds ─────────────────────────────
   Drop a gradient token into Custom Class to give the cover a rich
   background without needing a photo. If the author ALSO uploads a
   photo, the inline background-image overrides the CSS gradient
   naturally — no !important, no renderer change.
     cover-navy    → deep diagonal navy sweep (brand default)
     cover-ocean   → navy-to-teal, cooler and more dynamic
     cover-forest  → deep green
     cover-gold    → navy-to-gold, warm and inviting
     cover-earth   → navy-to-brown, grounded
     cover-sunset  → navy-to-orange, bold and energetic
   The scrim overlay is suppressed for gradient covers — the gradient
   itself provides enough contrast for white text. */
.section--cover.cover-navy,
.section--cover.cover-ocean,
.section--cover.cover-forest,
.section--cover.cover-gold,
.section--cover.cover-earth,
.section--cover.cover-sunset {
	background-color: var(--au-navy-deep);
}

.section--cover.cover-navy::after,
.section--cover.cover-ocean::after,
.section--cover.cover-forest::after,
.section--cover.cover-gold::after,
.section--cover.cover-earth::after,
.section--cover.cover-sunset::after {
	background: none;
}

.section--cover.cover-navy {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 50%, #004a6e 100%);
}

.section--cover.cover-ocean {
	background-image: linear-gradient(135deg, #001a33 0%, #0a3d62 40%, #1e5f74 100%);
}

.section--cover.cover-forest {
	background-image: linear-gradient(135deg, #0a1f15 0%, #1b4332 50%, #2d6a4f 100%);
}

.section--cover.cover-gold {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 40%, #C6952B 100%);
}

.section--cover.cover-earth {
	background-image: linear-gradient(135deg, #001a33 0%, #4a3728 50%, #8B4513 100%);
}

.section--cover.cover-sunset {
	background-image: linear-gradient(135deg, #001a33 0%, #003366 35%, #c45e1a 100%);
}

/* ─── COVER HERO SPLIT — angled hero with floating links card ────
   Token: "cover-hero-split" in the section's Custom Class field.
   Turns a photo_wide cover into a full-bleed hero with a diagonal-
   edged navy text panel on the left (badge overflows into the photo)
   and a floating rounded navy links card on the right. The background
   image fills the entire section; the diagonal is a clipped ::before
   on .cover-text so content (especially the badge) can overflow it.
   Stacks on mobile with the text overlaying the photo. */
/* --- section overrides --- */
.cover-hero-split.section--cover {
	padding: 0;
	min-height: auto;
	align-items: stretch;
}

.cover-hero-split.section--cover::after {
	display: none;
}

.cover-hero-split > .section-inner {
	max-width: none;
	padding: 0;
}

/* --- grid --- */
.cover-hero-split .cover-panel {
	max-width: none;
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: stretch;
	min-height: 420px;
}

/* --- left panel: angled light background via ::before --- */
.cover-hero-split .cover-text {
	position: relative;
	padding: var(--space-10) 16% var(--space-10) clamp(var(--space-8), 5vw, var(--space-16));
	display: flex;
	flex-direction: column;
	justify-content: center;
	color: var(--au-navy-deep);
	z-index: 2;
}

.cover-hero-split .cover-text::before {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--au-cream);
	clip-path: polygon(0 0, 100% 0, 82% 100%, 0 100%);
	z-index: -1;
}

/* --- right panel: floating card --- */
.cover-hero-split .cover-links {
	align-self: center;
	justify-self: end;
	background: rgba(0, 20, 46, 0.92);
	border-radius: 6px;
	padding: var(--space-8) var(--space-6);
	max-width: 380px;
	margin: var(--space-6) clamp(var(--space-6), 3vw, var(--space-12));
	color: var(--au-white);
	z-index: 2;
}

/* --- eyebrow --- */
.cover-hero-split .cover-hero-eyebrow {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--au-navy);
	margin-bottom: var(--space-5);
}

.cover-hero-split .cover-hero-eyebrow::before {
	content: "";
	display: block;
	width: 48px;
	height: 3px;
	background: var(--au-gold);
	margin-bottom: var(--space-3);
}

/* --- heading + badge row --- */
.cover-hero-split .cover-hero-heading {
	display: flex;
	align-items: center;
	gap: var(--space-5);
}

.cover-hero-split .cover-hero-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.5vw, 3.5rem);
	color: var(--au-navy-deep);
	line-height: 1.1;
	margin: 0;
}

.cover-hero-split .cover-hero-subtitle {
	font-size: var(--text-xs);
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--au-navy);
	margin-top: var(--space-2);
}

.cover-hero-split .cover-hero-badge {
	width: clamp(100px, 12vw, 170px);
	height: auto;
	flex-shrink: 0;
}

/* --- tagline --- */
.cover-hero-split .cover-hero-tagline {
	font-family: var(--font-serif);
	font-size: var(--text-lg);
	font-style: italic;
	color: var(--au-warm-gray);
	line-height: 1.6;
	margin-top: var(--space-5);
}

/* --- links card content --- */
.cover-hero-split .cover-links h2 {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-white);
	margin-bottom: var(--space-5);
	padding-bottom: var(--space-3);
	border-bottom: 2px solid var(--au-gold);
}

.cover-hero-split .cover-hero-nav {
	list-style: none;
	padding: 0;
	margin: 0;
}

.cover-hero-split .cover-hero-nav li + li {
	border-top: 1px solid rgba(255, 255, 255, 0.12);
}

.cover-hero-split .cover-hero-nav a {
	display: flex;
	align-items: center;
	padding: var(--space-3) var(--space-2);
	color: var(--au-white);
	text-decoration: none;
	font-size: var(--text-sm);
	transition: background 0.2s;
}

.cover-hero-split .cover-hero-nav a:hover {
	background: rgba(255, 255, 255, 0.06);
	text-decoration: none;
}

.cover-hero-split .cover-hero-nav a::before {
	content: "";
	width: 7px;
	height: 7px;
	border-right: 2px solid var(--au-gold);
	border-top: 2px solid var(--au-gold);
	transform: rotate(45deg);
	flex-shrink: 0;
	margin-right: var(--space-3);
}

/* --- tablet --- */
@media (max-width: 980px) {
	.cover-hero-split .cover-panel {
		min-height: 360px;
	}
	.cover-hero-split .cover-text {
		padding-right: 20%;
	}
	.cover-hero-split .cover-text::before {
		clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%);
	}
	.cover-hero-split .cover-links {
		max-width: 320px;
		padding: var(--space-6) var(--space-5);
	}
	.cover-hero-split .cover-hero-badge {
		width: clamp(80px, 10vw, 120px);
	}
}
/* --- mobile: text over photo, angled reveal, links below --- */
@media (max-width: 760px) {
	.cover-hero-split .cover-panel {
		grid-template-columns: 1fr;
		min-height: auto;
	}
	.cover-hero-split .cover-text {
		padding: var(--space-8) var(--gutter) var(--space-16) var(--gutter);
	}
	.cover-hero-split .cover-text::before {
		background: rgba(255, 253, 247, 0.94);
		clip-path: polygon(0 0, 100% 0, 100% 82%, 0 100%);
	}
	.cover-hero-split .cover-links {
		max-width: none;
		margin: 0;
		margin-top: var(--space-10);
		border-radius: 0;
		justify-self: stretch;
		align-self: stretch;
		padding: var(--space-8) var(--gutter);
	}
	.cover-hero-split .cover-hero-heading {
		gap: var(--space-4);
	}
	.cover-hero-split .cover-hero-badge {
		width: 90px;
	}
}
/* shared full-bleed background video (hero + cover) */
.feature-video {
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
}

.feature-video iframe {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 177.78vh;
	min-width: 100%;
	height: 56.25vw;
	min-height: 100%;
	border: 0;
}

/* ─── optional hero extras (var-gated in components/hero.tt) ───
   Used by the department template: a gold eyebrow above the title and a
   CTA pair below the lead. Absent on pages that don't set them, so the
   main-site hero is unchanged. */
.hero-eye {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	margin-bottom: var(--space-3);
}

.hero-ctas {
	display: flex;
	gap: var(--space-4);
	flex-wrap: wrap;
	margin-top: var(--space-8);
}

/* Ghost button on the hero's dark ground — the demo's refined treatment:
   quiet by default (translucent border, dimmed text), and on hover it lifts
   with a faint fill and a full gold outline. Scoped to .hero-ctas so it
   overrides the light-ground base .btn-ghost (gold text) without touching it
   elsewhere. */
.hero-ctas .btn-ghost {
	background: transparent;
	color: rgba(255, 255, 255, 0.75);
	border-color: rgba(255, 255, 255, 0.3);
}

.hero-ctas .btn-ghost:hover {
	background: rgba(255, 255, 255, 0.08);
	border-color: var(--au-gold);
	color: var(--au-white);
}

/* ════════════════════════════════════════════════════════════
   page.css  ·  interior page layout — side nav + content
   Depends on: tokens.css (and chrome.css for .nav-tree styling)
   Used by department content pages: a sticky side-nav column beside
   the main CKEditor body. Stacks to one column on narrow screens.
   ════════════════════════════════════════════════════════════ */
.page-layout {
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-10) var(--gutter);
	display: grid;
	grid-template-columns: 240px minmax(0, 1fr);
	gap: var(--space-10);
	align-items: start;
}

/* Sticky under the header, but capped to the viewport so a tall menu scrolls
   inside itself instead of hiding its lower items below the fold (a sticky box
   doesn't scroll on its own — without this cap you'd have to scroll the whole
   page to reach the bottom links). */
.page-sidebar {
	position: sticky;
	top: calc(var(--header-height) + var(--space-3));
	max-height: calc(100vh - var(--header-height) - var(--space-6));
	overflow-y: auto;
	overscroll-behavior: contain;
	/* hidden until hover so a tall nav doesn't show a scrollbar on load */
	scrollbar-width: none; /* Firefox */
	scrollbar-color: var(--au-gray-300) transparent;
}

.page-sidebar:hover {
	scrollbar-width: thin;
}

.page-sidebar::-webkit-scrollbar {
	width: 0;
}

.page-sidebar:hover::-webkit-scrollbar {
	width: 6px;
}

.page-sidebar::-webkit-scrollbar-track {
	background: transparent;
}

.page-sidebar::-webkit-scrollbar-thumb {
	background: var(--au-gray-300);
	border-radius: 3px;
}

.page-sidebar::-webkit-scrollbar-thumb:hover {
	background: var(--au-gray-400);
}

/* optional "« Parent unit" link above the dept name (sidebar_backlink hook) */
.sidebar-back {
	display: block;
	padding: 0 var(--space-3) var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	text-decoration: none;
}

.sidebar-back:hover,
.sidebar-back:focus-visible {
	color: var(--au-navy);
	text-decoration: underline;
}

/* optional button row under the hero on full-width pages (au_main.wrap page_links hook) */
.page-links {
	padding: var(--space-6) var(--gutter) 0;
}

.page-links-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2) var(--space-3);
}

.page-dept {
	font-family: var(--font-display);
	font-size: var(--text-md);
	color: var(--au-navy);
	font-weight: 600;
	line-height: 1.3;
	padding: 0 var(--space-3) var(--space-4);
	margin-bottom: var(--space-3);
	border-bottom: 1px solid var(--au-gray-200);
}

/* ─── page content rhythm (the column holds raw CKEditor body) ─── */
.page-main {
	min-width: 0;
}

/* page title — a short gold accent rule marks it as the page header */
.page-main h1 {
	font-size: var(--text-4xl);
	line-height: 1.1;
	position: relative;
	padding-bottom: var(--space-4);
	margin-bottom: var(--space-5);
}

.page-main h1::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 2.5rem;
	height: 3px;
	background: var(--au-gold);
	border-radius: 2px;
}

/* content headings — stepped down one level from the display scale so they
   read as inline section dividers, not banner-sized titles */
.page-main h2 {
	font-size: var(--text-2xl);
	margin-top: var(--space-10);
}

.page-main h3 {
	font-size: var(--text-xl);
	margin-top: var(--space-8);
}

.page-main h4 {
	font-size: var(--text-lg);
	margin-top: var(--space-6);
}

.page-main h5, .page-main h6 {
	margin-top: var(--space-6);
}

.page-main p, .page-main ul, .page-main ol, .page-main table, .page-main blockquote, .page-main figure, .page-main pre {
	margin-top: var(--space-4);
}

/* Two separate concerns, don't conflate them:
   · the GRID is a self-contained block, so it takes its top gap from the rule
     above like an accordion or a callout does — that is what separates it from
     the paragraph/image/title before it;
   · a grid CELL starts its own column, so whatever leads a cell must sit flush
     at its top. Without this an <h2> drags its 64px page-section margin into
     the cell and drops the heading far below the top of its column.
   Getting only the second half right is what made the headings collide with the
   image above them on a contact page with text_position "above". */
.page-main .grid > * > :first-child {
	margin-top: 0;
}

/* the lead line right under the title reads as a subtitle — keep it close */
.page-main h1 + h2 {
	margin-top: var(--space-5);
	color: var(--au-navy-light);
}

/* a heading targeted by an in-page anchor (e.g. an "on this page" jump-nav)
   clears the sticky header when scrolled to, instead of hiding under it. */
.page-main :is(h1, h2, h3, h4, h5, h6)[id] {
	scroll-margin-top: calc(var(--header-height) + var(--space-4));
}

/* self-contained blocks that sit in the body copy but aren't in the base rhythm
   list — give them the same top gap after a heading/paragraph. */
.page-main .accordion, .page-main .callout, .page-main .cta-callout, .page-main .table-wrap, .page-main .grid, .page-main .video {
	margin-top: var(--space-5);
}

/* first element in the column never adds a top gap (title or feature image) */
.page-main > :first-child, .page-feature + * {
	margin-top: 0;
}

/* self-contained components (cards) manage their own internal spacing via
   .card-body's gap — exempt their children from the page-content rhythm so a
   .card-title (h2) or .card-text (p) doesn't inherit the big section margins */
.page-main .card-body > * {
	margin-top: 0;
}

/* an authored h2/h3.card-title keeps the card scale, not the .page-main heading scale */
.page-main .card-title {
	font-size: var(--text-lg);
}

.page-main .sidenote > :first-child {
	margin-top: 0;
}

/* page feature image (the `pageimage` field) — sits above the content */
.page-feature {
	width: 100%;
	height: auto;
	border-radius: var(--radius-lg);
	margin-bottom: var(--space-8);
}

/* inline carousel in page body — shorter than the base 3/2 default */
.page-main > .carousel {
	aspect-ratio: 16/9;
	margin-bottom: var(--space-8);
}

.page-feature-wrap {
	position: relative;
	border-radius: var(--radius-lg);
	overflow: hidden;
	margin-bottom: var(--space-8);
}

.page-feature-wrap .page-feature {
	margin-bottom: 0;
	border-radius: 0;
}

.page-feature-caption {
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	padding: var(--space-4) var(--space-5);
	background: linear-gradient(transparent, rgba(0, 31, 63, 0.85));
	color: var(--au-white);
	display: flex;
	align-items: baseline;
	gap: var(--space-3);
	flex-wrap: wrap;
}

.page-feature-caption strong {
	font-family: var(--font-display);
	font-size: var(--text-md);
	font-weight: 600;
}

.page-feature-caption span {
	font-size: var(--text-sm);
	opacity: 0.85;
}

[data-dialog-open].page-feature-wrap {
	cursor: pointer;
}

[data-dialog-open].page-feature-wrap:hover .page-feature-caption {
	background: linear-gradient(transparent, rgba(0, 31, 63, 0.95));
}

/* page-feature-top — carousel or hero image above the sidebar grid,
   constrained to the content max-width (not full-bleed). */
.page-feature-top {
	max-width: var(--max-width);
	margin-inline: auto;
	padding: var(--space-6) var(--gutter) 0;
}

.page-feature-top .carousel-feature {
	border-radius: var(--radius-lg);
	aspect-ratio: 16/9;
}

.page-feature-top .carousel-feature .carousel-slide img {
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.page-feature-banner {
	width: 100%;
	display: block;
	border-radius: var(--radius-lg);
	-o-object-fit: cover;
	   object-fit: cover;
	aspect-ratio: 16/9;
}

/* ─── content-advanced: sections inside the content column ───
   When content_advanced.dt renders sections in .page-main the full-bleed
   section bands live inside the content column — backgrounds span the
   column width, .section-inner handles inner padding. Vertical padding is
   tightened from the full-width --space-12 (80px) to --space-8 (40px) so
   the bands don't overwhelm the narrower column. */
.page-main > .carousel {
	margin-bottom: var(--space-6);
}

.page-main > .section {
	padding-block: var(--space-8);
	padding-inline: 0;
}

.page-main > .section .section-inner {
	max-width: none;
}

.page-main > .section--flush-top {
	padding-top: var(--space-4);
}

.page-main > .section--flush-bottom {
	padding-bottom: var(--space-4);
}

.page-main > .section:first-child,
.page-main > .carousel + .section,
.page-main > .page-feature + .section,
.page-main > h1 + .section {
	padding-top: 0;
}

.page-main > .section:last-child {
	padding-bottom: var(--space-6);
}

/* ─── breadcrumb-dropdown nav (solo layout; chrome/crumbs.tt · js/crumbs.js) ─── */
.crumbs {
	margin-bottom: var(--space-8);
}

.crumbs-list {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	list-style: none;
	margin: 0;
	padding: 0;
	font-size: var(--text-sm);
}

.crumb {
	position: relative;
}

.crumb + .crumb::before {
	content: "›";
	color: var(--au-gray-400);
	margin: 0 var(--space-2);
}

.crumb-link {
	background: none;
	border: 0;
	cursor: pointer;
	font: inherit;
	color: var(--au-navy-light);
	padding: 0;
	text-decoration: none;
}

.crumb-link:hover {
	color: var(--au-gold);
}

.crumb-link[aria-expanded=true] {
	color: var(--au-navy);
	font-weight: 600;
}

.crumb.is-current > .crumb-link, .crumb-static {
	color: var(--au-warm-gray);
}

.crumb-x {
	display: none;
	margin-left: var(--space-2);
	color: var(--au-gray-400);
	font-weight: 400;
}

.crumb-link[aria-expanded=true] .crumb-x {
	display: inline;
}

/* the dropdown */
.crumb-menu {
	position: absolute;
	top: 100%;
	left: 0;
	min-width: 220px;
	list-style: none;
	margin: var(--space-2) 0 0;
	padding: var(--space-2);
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-6px);
	transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), visibility var(--duration-base);
	z-index: 50;
}

.crumb.open > .crumb-menu {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.crumb-menu li {
	margin: 0;
}

.crumb-menu li + li {
	margin-top: 0;
}

.crumb-menu a {
	display: block;
	padding: var(--space-2) var(--space-3);
	color: var(--au-text);
	text-decoration: none;
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	white-space: nowrap;
}

.crumb-menu a:hover {
	background: var(--au-cream);
	color: var(--au-navy);
}

.crumb-menu a.is-onpath {
	color: var(--au-navy);
	font-weight: 600;
}

.crumb-menu a[aria-current=page] {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
}

.crumb-menu .crumb-self {
	margin-bottom: var(--space-1);
	padding-bottom: var(--space-1);
	border-bottom: 1px solid var(--au-gray-200);
}

/* no-sidebar variant (sidenav == "off") — breadcrumb sits at the top, so it
   needs less headroom than the sidebar layout */
.page-layout--solo {
	grid-template-columns: minmax(0, 1fr);
	max-width: var(--max-width-narrow);
	padding-top: var(--space-5);
}

/* page_wide = 1 (set by a folder wrapper): a solo page at full site width, for
   multi-column directory pages like /academics/ */
.page-layout--wide {
	max-width: var(--max-width);
}

/* sidebar calls-to-action (academics-default) */
.sidebar-cta {
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	margin-top: var(--space-6);
}

.sidebar-cta .btn {
	width: 100%;
	justify-content: flex-start;
	padding: var(--space-2) var(--space-3);
	font-size: var(--text-xs);
	letter-spacing: 1px;
	border: 0;
	background: var(--au-gray-100);
	color: var(--au-navy);
}

.sidebar-cta .btn:hover {
	background: var(--au-gray-200);
	color: var(--au-navy);
	transform: none;
	box-shadow: none;
}

.sidebar-cta .btn i {
	width: 1.25rem;
	text-align: center;
	color: var(--au-gray-400);
	font-size: var(--text-sm);
}

.sidebar-cta .btn-primary {
	background: var(--au-gold-pale);
	color: var(--au-navy);
}

.sidebar-cta .btn-primary:hover {
	background: var(--au-gold-light);
	color: var(--au-navy);
	box-shadow: none;
}

.sidebar-cta .btn-primary i {
	color: var(--au-gold);
}

/* sidebar link lists (interior.wrap `sidebar_links`) */
.sidebar-links {
	margin-top: var(--space-6);
}

.sidebar-links-title {
	margin: 0 0 var(--space-2);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--au-gold);
}

.sidebar-links ul {
	list-style: none;
	margin: 0;
	padding: 0;
	border-left: 2px solid var(--au-gray-200);
}

.sidebar-links a {
	display: block;
	padding: 5px var(--space-3);
	font-size: var(--text-sm);
	line-height: 1.35;
	color: var(--au-navy);
	text-decoration: none;
}

.sidebar-links a:hover {
	color: var(--au-navy-light);
	background: var(--au-gray-100);
}

.sidebar-cta .btn-primary:hover i {
	color: var(--au-navy);
}

/* ─── mobile section-nav disclosure ───
   Desktop: the toggle is hidden and the tree shows as a normal sticky column.
   Mobile: the whole menu collapses behind the toggle so content leads. */
.sidebar-toggle {
	display: none;
}

@media (max-width: 820px) {
	.page-layout {
		grid-template-columns: 1fr;
		gap: var(--space-6);
		padding-block: var(--space-8);
	}
	.page-sidebar {
		position: static;
		max-height: none;
		overflow: visible;
	}
	.sidebar-toggle {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: var(--space-3);
		width: 100%;
		padding: var(--space-3) var(--space-4);
		background: var(--au-cream);
		border: 1px solid var(--au-gray-200);
		border-radius: var(--radius-md);
		font-size: var(--text-base);
		font-weight: 600;
		color: var(--au-navy);
		cursor: pointer;
	}
	.sidebar-caret {
		width: 9px;
		height: 9px;
		flex-shrink: 0;
		border-right: 2px solid currentColor;
		border-bottom: 2px solid currentColor;
		transform: rotate(45deg);
		transition: transform var(--duration-base) var(--ease-out);
	}
	.sidebar-toggle[aria-expanded=true] .sidebar-caret {
		transform: rotate(-135deg);
	}
	.sidebar-nav {
		display: none;
		margin-top: var(--space-3);
	}
	.page-sidebar.open .sidebar-nav {
		display: block;
	}
	.page-sidebar.open .page-dept {
		display: none;
	} /* dept name already in the toggle */
}
/* ─── A-Z directory (services/index.html) ─── */
.az-bar {
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	border-bottom: 1px solid var(--au-gray-200);
	margin-bottom: var(--space-5);
}

.az-bar .tab-btn {
	padding: var(--space-2) var(--space-3);
	min-width: 2em;
	text-align: center;
}

.az-bar .tab-btn.active {
	background: transparent;
}

.az-list {
	-moz-columns: 2;
	     columns: 2;
	-moz-column-gap: var(--space-8);
	     column-gap: var(--space-8);
	list-style: none;
	padding: 0;
	margin: 0;
}

.az-list li {
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
	padding: var(--space-1) 0;
}

.az-list a {
	color: var(--au-navy);
	text-decoration: none;
}

.az-list a:hover {
	text-decoration: underline;
}

.az-sub {
	padding-left: var(--space-5);
}

.az-suggest {
	margin-top: var(--space-8);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	text-align: center;
}

@media (max-width: 600px) {
	.az-list {
		-moz-columns: 1;
		     columns: 1;
	}
}
/* Blog / newsletter feed posts (templates/blog.dt): one .card per post, stacked */
.blog-posts {
	display: grid;
	gap: var(--space-6);
	margin-top: var(--space-6);
}

/* ════════════════════════════════════════════════════════════
   chrome.css  ·  site footer + subpage nav tree
   (the header lives in header.css / chrome/header.tt)
   Depends on: tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── FOOTER ─── */
.site-footer {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.75);
	padding: var(--space-12) var(--gutter) var(--space-6);
}

.site-footer a {
	color: rgba(255, 255, 255, 0.75);
	text-decoration: none;
}

.site-footer a:hover {
	color: var(--au-gold-light);
}

/* "Privacy choices" reopens the consent preferences (code/consent.tt) - a button dressed as a footer link */
.footer-consent {
	padding: 0;
	border: 0;
	background: none;
	font: inherit;
	color: rgba(255, 255, 255, 0.75);
	cursor: pointer;
}

.footer-consent:hover {
	color: var(--au-gold-light);
}

.site-footer-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1.6fr 1fr 1fr 1fr;
	gap: var(--space-8);
}

.footer-brand img {
	width: 160px;
	margin-bottom: var(--space-4);
}

.footer-tagline {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-white);
	line-height: 1.3;
}

.footer-meta {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.footer-col h3 {
	font-size: var(--text-xs);
	letter-spacing: 2px;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: var(--space-3);
	font-weight: 600;
}

.footer-col ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-sm);
}

.site-footer-bottom {
	max-width: var(--max-width);
	margin: var(--space-8) auto 0;
	padding-top: var(--space-5);
	border-top: 1px solid rgba(255, 255, 255, 0.12);
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: center;
	justify-content: space-between;
	font-size: var(--text-sm);
}

.footer-legal {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: center;
}

.footer-social {
	display: flex;
	gap: var(--space-4);
}

.footer-social a {
	display: inline-flex;
	color: rgba(255, 255, 255, 0.75);
}

.footer-social svg {
	width: 22px;
	height: 22px;
	fill: currentColor;
}

@media (max-width: 920px) {
	.site-footer-inner {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 560px) {
	.site-footer-inner {
		grid-template-columns: 1fr;
	}
}
/* ─── DEPARTMENT PRE-FOOTER BAND (chrome/dept_footer.tt) ─── */
.dept-footer {
	background: var(--au-cream);
	border-top: 1px solid var(--au-gray-200);
	padding: var(--space-8) var(--gutter);
}

.dept-footer-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-6) var(--space-10);
}

.dept-footer-logo img {
	max-height: 56px;
	width: auto;
}

.dept-footer-block {
	display: flex;
	align-items: center;
	gap: var(--space-5);
}

.dept-social {
	display: flex;
	align-items: center;
	gap: var(--space-4);
	list-style: none;
	margin: 0;
	padding: 0;
}

/* reset the global `li + li { margin-top }` reading-rhythm rule (base.css) — it
   leaks in and pushes every icon but the first down 8px, so with the centered
   flex line the first icon rides high. */
.dept-social li {
	margin: 0;
}

.dept-social a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.5em;
	height: 1.5em;
	line-height: 1;
	color: var(--au-navy);
	font-size: var(--text-xl);
	text-decoration: none;
	transition: color var(--duration-base);
}

.dept-social i {
	line-height: 1;
}

/* Flickr has no FontAwesome badge glyph (only bare dots), so draw the matching
   navy tile ourselves: a small square chip with the dots knocked out in cream,
   sized to sit alongside the square-badge glyphs of the other networks. */
.dept-social .fa-flickr {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 0.82em;
	height: 0.82em;
	background: var(--au-navy);
	color: var(--au-cream);
	border-radius: 0.14em;
}

.dept-social .fa-flickr::before {
	font-size: 0.62em;
	line-height: 1;
}

.dept-social a:hover .fa-flickr {
	background: var(--au-gold);
}

.dept-social a:hover {
	color: var(--au-gold);
}

.dept-contact {
	list-style: none;
	margin: 0;
	padding: 0;
	font-size: var(--text-sm);
	color: var(--au-text);
	display: flex;
	flex-direction: column;
	gap: var(--space-1);
}

.dept-contact a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.dept-contact a:hover {
	color: var(--au-gold);
}

.dept-label {
	font-weight: 600;
	font-size: var(--text-base);
	color: var(--au-navy);
	margin-bottom: var(--space-2);
}

.dept-address {
	font-size: var(--text-sm);
	color: var(--au-text);
	line-height: 1.5;
}

.dept-address strong {
	font-size: var(--text-base);
	color: var(--au-navy);
}

@media (max-width: 700px) {
	.dept-footer-inner {
		flex-direction: column;
		align-items: flex-start;
		gap: var(--space-5);
	}
}
/* ─── SUBPAGE NAV TREE (chrome/nav.tt) — collapsible accordion ─── */
.nav-tree {
	list-style: none;
	margin: 0;
	padding: 0;
}

.nav-tree li {
	position: relative;
}

.nav-tree li + li {
	margin-top: 0;
} /* neutralize base.css li+li inside the tree */
.nav-tree a {
	display: block;
	padding: var(--space-1) var(--space-3);
	line-height: 1.35;
	color: var(--au-text);
	text-decoration: none;
	border-left: 2px solid transparent;
	font-size: var(--text-sm);
}

.nav-tree a:hover {
	color: var(--au-navy);
	border-left-color: var(--au-gray-300);
}

.nav-tree .nav-tree {
	padding-left: var(--space-4);
}

/* active trail parent (a branch on the path) = paler gold bar; scoped to
   .has-children so a spuriously-active leaf (e.g. site-root "Home") stays plain */
.nav-tree .is-active.has-children > .nav-tree-row > a {
	border-left-color: var(--au-gold-light);
}

/* current page = full gold bar + bold (after the trail rule so it wins) */
.nav-tree .is-current > a,
.nav-tree .is-current > .nav-tree-row > a {
	color: var(--au-navy);
	font-weight: 600;
	border-left-color: var(--au-gold);
}

/* branch row: link + collapse toggle */
.nav-tree-row {
	display: flex;
	align-items: center;
}

.nav-tree-row > a {
	flex: 1;
}

.nav-tree-toggle {
	flex-shrink: 0;
	width: 36px;
	align-self: stretch;
	display: flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--au-warm-gray);
}

.nav-tree-toggle::before {
	content: "";
	width: 7px;
	height: 7px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	transition: transform var(--duration-base) var(--ease-out);
}

.nav-tree-toggle:hover {
	color: var(--au-navy);
}

.nav-tree li.is-open > .nav-tree-row .nav-tree-toggle::before {
	transform: rotate(-135deg);
}

/* collapse children unless the branch is open (active trail is pre-opened) */
.nav-tree li.has-children > .nav-tree {
	display: none;
}

.nav-tree li.has-children.is-open > .nav-tree {
	display: block;
}

/* mobile: comfortable, finger-friendly rows (desktop stays tight) */
@media (max-width: 820px) {
	.nav-tree a {
		padding-block: var(--space-3);
		line-height: 1.4;
	}
}
/* ─── section-nav · a department's sibling sub-sites (chrome/section_nav.tt) ───
   A slim full-width bar under the main header. Leads with the department NAME
   (the site identity — links home, styled as a title, not a tab), then the
   sub-sites (ITS: Client Services / AV / Network / …). Current sub-site marked
   with a gold tab-underline; the strip scrolls horizontally if it overflows.
   Alignment: the gutter lives on the full-bleed bar (like .section), and the
   inner is a pure max-width column, so the bar's content shares ONE left edge
   with the header and the page content (header.css applies the same model). */
.section-nav {
	background: var(--au-white);
	border-bottom: 1px solid var(--au-gray-200);
	box-shadow: var(--shadow-sm);
	padding-inline: var(--gutter);
}

.section-nav-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	align-items: stretch;
	gap: var(--space-8);
}

/* site identity — the department name; links home; reads as a title. A hairline
   divides it from the sub-site tabs. */
.section-nav-title {
	display: flex;
	align-items: center;
	flex: none; /* don't shrink — the tab strip absorbs overflow */
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-md);
	color: var(--au-navy);
	text-decoration: none;
	white-space: nowrap;
	padding-right: var(--space-8);
	margin-right: var(--space-2);
	border-right: 1px solid var(--au-gray-200);
}

.section-nav-title:hover {
	color: var(--au-gold);
}

.section-nav-links {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	gap: var(--space-6);
	/* min-width:0 keeps the strip shrinkable so js/section-nav.js can detect
	   overflow (scrollWidth > clientWidth) and move tabs to More; overflow stays
	   visible so a tab's pages dropdown can escape the bar. (overflow-x:auto would
	   force overflow-y to auto and clip the dropdown.) */
	min-width: 0;
	overflow: visible;
}

/* margin-top:0 undoes the global base.css `li + li { margin-top }`, which was
   dropping every tab after the first below the top (the first looked raised). */
.section-nav-links li {
	flex: none;
	margin-top: 0;
}

.section-nav-links a {
	display: block;
	padding: var(--space-4) 0;
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 2px solid transparent;
	transition: color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);
}

.section-nav-links a:hover {
	color: var(--au-gold);
}

.section-nav-links a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	border-bottom-color: var(--au-gold);
}

/* highlighted tab (e.g. Donate) — gold text, semibold; no fill so it doesn't
   compete with the Give/Visit/Apply buttons in the utility bar */
.section-nav-links a.is-highlight {
	color: var(--au-gold);
	font-weight: 600;
}

.section-nav-links a.is-highlight:hover {
	color: var(--au-gold-dark, var(--au-gold));
}

/* the toggle is hidden in strip mode; JS reveals it when collapsed */
.section-nav-toggle {
	display: none;
}

/* ── collapsed mode — the tab strip becomes a dropdown, in TWO stages ──
   js/section-nav.js collapses as width tightens, so it never clips and never
   jumps straight to a full-width sheet:
     .is-collapsed            → SIDE-BY-SIDE: the title stays left, a compact
                                dropdown pill sits to its right. Kicks in as soon
                                as the full tab strip would overflow — keeps wide
                                views looking intentional.
     .is-collapsed.is-stacked → STACKED: the title becomes a small gold eyebrow
                                with a full-width pill beneath it. Only when even
                                title + pill can't sit side-by-side (narrow/phone).
   The open list is an anchored floating menu (under the pill in side-by-side,
   full-width in stacked). Content-aware, not a guessed breakpoint. Without JS
   the strip just scrolls — the dropdown needs JS to open anyway. */
.section-nav.is-collapsed {
	background: transparent;
	border-bottom: 0;
	box-shadow: none;
}

.section-nav.is-collapsed .section-nav-inner {
	position: relative; /* anchor for the floating list */
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-3);
	padding-block: var(--space-3);
}

/* no inline tabs follow the title now, so drop its divider */
.section-nav.is-collapsed .section-nav-title {
	border-right: 0;
	padding-right: 0;
	margin-right: 0;
}

/* the dropdown pill — current page + caret */
.section-nav.is-collapsed .section-nav-toggle {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-4);
	min-width: 11rem;
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	font-family: inherit;
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy);
	cursor: pointer;
}

/* side-by-side (default): pill hugs the right end of the title's row */
.section-nav.is-collapsed:not(.is-stacked) .section-nav-toggle {
	margin-left: auto;
}

/* stacked: title → eyebrow, pill → full width beneath it */
.section-nav.is-collapsed.is-stacked .section-nav-inner {
	flex-direction: column;
	align-items: stretch;
	gap: var(--space-2);
}

.section-nav.is-collapsed.is-stacked .section-nav-title {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--au-gold);
	white-space: normal;
}

.section-nav.is-collapsed.is-stacked .section-nav-toggle {
	width: 100%;
}

.section-nav-caret {
	width: 9px;
	height: 9px;
	flex-shrink: 0;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	transition: transform var(--duration-base) var(--ease-out);
}

.section-nav-toggle[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

/* the sibling list — a floating menu below the bar, anchored to the inner */
.section-nav.is-collapsed .section-nav-links {
	display: none;
	position: absolute;
	top: 100%;
	z-index: 50;
	flex-direction: column;
	gap: 0;
	overflow: hidden;
	margin-top: var(--space-1);
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	max-height: 70vh;
	overflow-y: auto;
}

/* side-by-side: compact menu under the right-hand pill */
.section-nav.is-collapsed:not(.is-stacked) .section-nav-links {
	right: 0;
	width: -moz-max-content;
	width: max-content;
	max-width: 100%;
	min-width: 14rem;
}

/* stacked: full-width menu */
.section-nav.is-collapsed.is-stacked .section-nav-links {
	left: 0;
	right: 0;
}

.section-nav.is-collapsed.open .section-nav-links {
	display: flex;
}

.section-nav.is-collapsed .section-nav-links li {
	flex: none;
	margin-top: 0;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav.is-collapsed .section-nav-links li:last-child {
	border-bottom: 0;
}

.section-nav.is-collapsed .section-nav-links a {
	padding: var(--space-3) var(--space-4);
	white-space: normal;
	border-bottom: 0; /* the tab-underline is a desktop treatment */
}

/* current row: gold left accent + pale wash instead of the tab underline */
.section-nav.is-collapsed .section-nav-links a.is-current {
	border-bottom: 0;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* ── priority+ overflow — a "More ▾" at the end of the strip ──
   When the strip almost fits, js/section-nav.js keeps the tabs that fit inline
   and tucks the rest under this button (rather than collapsing the whole thing
   to a pill). So wide views stay a real tab row. JS hides overflow tabs
   (li.is-hidden) and clones them into the menu; it toggles `hidden` on the
   whole control when nothing overflows, and hides it entirely once the nav
   collapses to the pill. */
.section-nav-links li.is-hidden {
	display: none;
}

.section-nav-more {
	position: relative;
	flex: none;
	display: flex;
	align-items: center;
}

.section-nav-more[hidden] {
	display: none;
}

.section-nav.is-collapsed .section-nav-more {
	display: none;
}

.section-nav-more-btn {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	padding: var(--space-4) 0;
	margin-left: var(--space-6);
	font-family: inherit;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	background: none;
	border: 0;
	border-bottom: 2px solid transparent;
	white-space: nowrap;
	cursor: pointer;
}

.section-nav-more-btn:hover {
	color: var(--au-gold);
}

.section-nav-more-btn[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

.section-nav-more-menu {
	display: none;
	position: absolute;
	top: 100%;
	right: 0;
	z-index: 50;
	margin: 0;
	padding: 0;
	list-style: none;
	min-width: 14rem;
	max-width: 80vw;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	overflow: hidden;
	max-height: 70vh;
	overflow-y: auto;
}

.section-nav-more.is-open .section-nav-more-menu {
	display: block;
}

.section-nav-more-menu li {
	margin-top: 0;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav-more-menu li:last-child {
	border-bottom: 0;
}

.section-nav-more-menu a {
	display: block;
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 0;
}

.section-nav-more-menu a:hover {
	color: var(--au-gold);
	background: var(--au-cream);
}

.section-nav-more-menu a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* ── sub-site dropdowns · one level of a sub-site's pages per tab ──
   A tab with child pages gets a caret button; clicking it opens a menu of that
   sub-site's pages, so subpages are reachable from the bar (the section-nav only
   appears on pages that have no sidebar). js/section-nav.js toggles .is-open on
   the .section-nav-item. In the STRIP the menu is an absolute dropdown; in the
   collapsed pill and the More menu it drops inline as an indented accordion. */
.section-nav-item {
	position: relative;
	display: flex;
	align-items: center;
}

.section-nav-sub-toggle {
	display: inline-flex;
	align-items: center;
	align-self: stretch;
	padding: 0 var(--space-2);
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--au-navy-light);
}

.section-nav-sub-toggle:hover {
	color: var(--au-gold);
}

.section-nav-sub-toggle .section-nav-caret {
	width: 6px;
	height: 6px;
}

.section-nav-sub-toggle[aria-expanded=true] .section-nav-caret {
	transform: rotate(-135deg);
}

/* the pages menu — a floating dropdown in the strip */
.section-nav-menu {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 50;
	margin: 0;
	padding: 0;
	list-style: none;
	min-width: 13rem;
	max-width: 22rem;
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-md);
	overflow: hidden;
	max-height: 70vh;
	overflow-y: auto;
}

.section-nav-item.is-open > .section-nav-menu {
	display: block;
}

/* desktop strip: also reveal a tab's pages on hover / keyboard focus, so the
   tab's own click stays free to navigate to its home page (the caret click
   remains the touch fallback). Scoped to the strip — the collapsed pill and the
   More menu keep their click accordion. */
.section-nav:not(.is-collapsed) .section-nav-links > .section-nav-item:focus-within > .section-nav-menu {
	display: block;
}

@media (hover: hover) {
	.section-nav:not(.is-collapsed) .section-nav-links > .section-nav-item:hover > .section-nav-menu {
		display: block;
	}
}
.section-nav-menu li {
	margin: 0;
	flex: none;
	border-bottom: 1px solid var(--au-gray-100);
}

.section-nav-menu li:last-child {
	border-bottom: 0;
}

.section-nav-menu a {
	display: block;
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-navy-light);
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 0;
}

.section-nav-menu a:hover {
	color: var(--au-gold);
	background: var(--au-cream);
}

.section-nav-menu a.is-current {
	color: var(--au-navy);
	font-weight: 600;
	background: var(--au-gold-pale);
	box-shadow: inset 3px 0 0 var(--au-gold);
}

/* nested (accordion) form — in the collapsed pill and inside the More menu the
   pages menu drops inline below its tab instead of floating. */
.section-nav.is-collapsed .section-nav-item,
.section-nav-more-menu .section-nav-item {
	flex-wrap: wrap;
}

/* link takes the row (min-width:0 so it can shrink), caret sits inline beside it
   (not stretched — stretch was dropping it onto its own line), menu wraps below */
.section-nav.is-collapsed .section-nav-item > a,
.section-nav-more-menu .section-nav-item > a {
	flex: 1;
	min-width: 0;
}

.section-nav.is-collapsed .section-nav-item > .section-nav-sub-toggle,
.section-nav-more-menu .section-nav-item > .section-nav-sub-toggle {
	flex: none;
	align-self: center;
}

.section-nav.is-collapsed .section-nav-menu,
.section-nav-more-menu .section-nav-menu {
	position: static;
	flex: 0 0 100%;
	min-width: 0;
	max-width: none;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	background: transparent;
	margin: 0;
	max-height: none;
}

.section-nav.is-collapsed .section-nav-menu a,
.section-nav-more-menu .section-nav-menu a {
	padding-left: var(--space-8);
}

/* ─── CMS edit shortcut (shell.wrap) ───
   Rendered only for a signed-in user with modify permission on the page. A small
   translucent gold pill pinned to the top-centre that brightens on hover and
   links to the CMS editor. `margin-bottom: -1lh` cancels its own height so it
   floats over the header instead of pushing content down. Admin affordance —
   never shown to normal visitors. */
.cms-edit-bar {
	position: sticky;
	top: 0;
	z-index: 1000;
	display: block;
	width: -moz-max-content;
	width: max-content;
	max-width: 100%;
	margin: 0 auto -1lh var(--gutter); /* left-aligned (right margin auto) */
	padding: 0 var(--space-4);
	background: var(--au-gold);
	color: var(--au-navy-deep);
	font-size: var(--text-sm);
	font-weight: 600;
	line-height: 2;
	text-decoration: none;
	white-space: nowrap;
	border-radius: 0 0 var(--radius-md) var(--radius-md);
	box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);
	opacity: 0.5;
	transition: opacity var(--duration-base) var(--ease-out);
}

/* `a.` prefix beats base.css `a:not(.btn):hover` so the label stays navy (readable
   on the gold), not gold-on-gold */
a.cms-edit-bar:hover,
a.cms-edit-bar:focus-visible {
	opacity: 1;
	color: var(--au-navy-deep);
}

/* ════════════════════════════════════════════════════════════
   header.css  ·  site header — utility bar + full-width mega-menu
   Depends on: tokens.css · buttons/forms come from their own partials.
   Behaviour : js/header.js (self-inits on [data-header]).
   Markup    : templates/chrome/header.tt.

   Responsive stages:
     ≥980  all six section links in the bar
     ≤980  Research + About fold into the "Menu" panel (overflow only)
     ≤768  core sections fold in too; Menu is the whole nav (columns
           stack; section titles become collapsible)
     ≤600  utility bar hides; Give/Apply ride in the bar beside Menu
   ════════════════════════════════════════════════════════════ */
/* header-scoped resets. :where() holds specificity at 0-0-1 (like a bare
   element selector) so component rules such as .nav-link — which set their own
   color/background — always win over these instead of being overridden. */
:where(.au-header) a {
	text-decoration: none;
	color: inherit;
}

:where(.au-header) button {
	background: none;
	border: 0;
	cursor: pointer;
	color: inherit;
	font-family: inherit;
	line-height: inherit;
}

/* base.css styles bare lists globally (`li + li` top-margin, `ul` padding-left);
   the header's lists use flex + gap, so neutralize that here. */
.au-header ul {
	margin: 0;
	padding: 0;
}

.au-header li + li {
	margin-top: 0;
}

/* the whole header sticks — sticky on `.main-nav` alone can't work because its
   parent `.au-header` is only header-tall, so it has no room to stick within */
.au-header {
	position: sticky;
	top: 0;
	z-index: 100;
}

/* ─── UTILITY BAR (audience + give/apply + search) ─── */
.util-nav {
	position: relative;
	z-index: 100;
	background: var(--au-navy-deep);
	border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}

/* content container: max-width with a gutter floor, in ONE property so the bar
   itself stays padding-free (the mega dropdown is absolutely positioned inside
   .main-nav and must stay full-bleed). Puts header content on the same left
   edge as .section content — see css/chrome.css .section-nav. */
.util-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	justify-content: flex-end;
	align-items: center;
	gap: var(--space-1);
}

.util-inner a {
	font-size: var(--text-xs);
	color: rgba(255, 255, 255, 0.55);
	padding: var(--space-2) var(--space-3);
	letter-spacing: 0.3px;
	transition: color 0.15s;
	white-space: nowrap;
}

.util-inner a:hover {
	color: var(--au-white);
}

.util-inner .util-accent {
	color: var(--au-gold-light);
	font-weight: 600;
} /* Give, Visit */
.util-inner .util-accent:hover {
	color: var(--au-gold);
}

.util-inner .util-cta {
	color: var(--au-navy-deep);
	font-weight: 700;
	background: var(--au-gold);
	border-radius: var(--radius-full);
	padding: var(--space-1) var(--space-4);
	margin-left: var(--space-1);
	transition: background var(--duration-base) var(--ease-out);
} /* Apply — primary */
.util-inner .util-cta:hover {
	color: var(--au-navy-deep);
	background: var(--au-gold-light);
}

/* ─── MAIN BAR (logo + section nav) ─── */
.main-nav {
	position: relative;
	z-index: 100;
	background: var(--au-navy);
	box-shadow: 0 2px 20px rgba(0, 0, 0, 0.15);
}

.main-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	align-items: center;
	gap: var(--space-6);
}

.nav-logo {
	display: flex;
	align-items: center;
	padding-block: var(--space-3);
	margin-right: auto;
	flex-shrink: 0;
	-webkit-user-select: none;
	-moz-user-select: none;
	     user-select: none;
}

.nav-logo img {
	display: block;
	height: 40px;
	width: auto;
	-webkit-user-drag: none;
} /* Safari: don't let the logo image be selected/dragged */
.main-links {
	display: flex;
	list-style: none;
}

.nav-item {
	position: static;
}

.nav-link {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.78);
	padding: var(--space-5) var(--space-4);
	border-bottom: 3px solid transparent;
	transition: all var(--duration-base);
	white-space: nowrap;
}

.nav-link:hover, .nav-link[aria-expanded=true] {
	color: var(--au-white);
	border-bottom-color: var(--au-gold);
	background: rgba(255, 255, 255, 0.05);
}

.nav-link .caret {
	width: 8px;
	height: 8px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	margin-top: -3px;
	transition: transform var(--duration-base);
}

.nav-link[aria-expanded=true] .caret {
	transform: rotate(-135deg);
	margin-top: 2px;
}

/* ─── FULL-WIDTH MEGA PANEL ─── */
.mega {
	position: absolute;
	left: 0;
	right: 0;
	top: 100%;
	background: var(--au-white);
	border-top: 3px solid var(--au-gold);
	box-shadow: var(--shadow-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-8px);
	transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), visibility var(--duration-base);
	z-index: 90;
}

.mega.open {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.mega-inner {
	width: min(100% - 2 * var(--gutter), var(--max-width));
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	padding-block: var(--space-8);
}

.mega-col {
	flex: 1 1 190px;
	min-width: 170px;
}

.mega-col h4 {
	font-family: var(--font-body);
	font-size: var(--text-xs);
	letter-spacing: 1.5px;
	text-transform: uppercase;
	color: var(--au-gold);
	font-weight: 600;
	margin-bottom: var(--space-4);
	padding-bottom: var(--space-2);
	border-bottom: 1px solid var(--au-gray-200);
}

.mega-col h4 a {
	color: var(--au-navy);
}

.mega-col ul {
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.mega-col a {
	font-size: var(--text-sm);
	color: var(--au-text);
	transition: color 0.15s;
}

.mega-col a:hover {
	color: var(--au-gold);
}

.mega-cta {
	margin-top: var(--space-4);
	display: inline-block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
}

.mega-cta:hover {
	color: var(--au-gold);
}

.mega-feature {
	flex: 1 1 260px;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	border-radius: var(--radius-lg);
	padding: var(--space-6);
	color: var(--au-white);
	align-self: stretch;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
}

.mega-feature .fk {
	font-size: var(--text-xs);
	letter-spacing: 2px;
	text-transform: uppercase;
	color: var(--au-gold-light);
	font-weight: 600;
	margin-bottom: var(--space-2);
}

.mega-feature h3 {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	margin-bottom: var(--space-3);
	line-height: 1.25;
}

.mega-feature a {
	color: var(--au-gold-light);
	font-weight: 600;
	font-size: var(--text-sm);
}

/* scrim behind an open panel */
.nav-scrim {
	position: fixed;
	inset: 0;
	background: rgba(0, 26, 51, 0.45);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--duration-base), visibility var(--duration-base);
	z-index: 80;
}

body.mega-open .nav-scrim {
	opacity: 1;
	visibility: visible;
}

/* focus the open menu: recede the other bar items, keep the active one lit */
body.mega-open .nav-link {
	opacity: 0.45;
}

body.mega-open .nav-link[aria-expanded=true] {
	opacity: 1;
}

/* ─── SEARCH (icon in the bar → full-width panel) ─── */
.search-item {
	display: flex;
} /* stretch the button to full bar height so the icon centers */
.nav-search-btn {
	padding-inline: var(--space-4);
}

.nav-search-btn svg {
	width: 18px;
	height: 18px;
}

.mega-search-inner {
	flex-direction: column;
	align-items: stretch;
	padding-block: var(--space-8);
}

.site-search {
	width: 100%;
	max-width: 760px;
	margin-inline: auto;
}

.search-label {
	display: block;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	margin-bottom: var(--space-5);
}

.search-field {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	padding: var(--space-1) var(--space-2) var(--space-1) var(--space-5);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-full);
	transition: border-color var(--duration-base) var(--ease-out);
}

.search-field:focus-within {
	border-color: var(--au-gold);
}

.search-field > svg {
	width: 22px;
	height: 22px;
	color: var(--au-gray-400);
	flex-shrink: 0;
}

.search-field input {
	flex: 1;
	min-width: 0;
	border: 0;
	outline: 0;
	background: none;
	color: var(--au-text);
	font-size: var(--text-md);
	padding: var(--space-3) 0;
}

.search-go {
	flex-shrink: 0;
	background: var(--au-navy);
	color: var(--au-white);
	border-radius: var(--radius-full);
	padding: var(--space-3) var(--space-6);
	font-size: var(--text-sm);
	font-weight: 600;
	transition: all var(--duration-base) var(--ease-out);
}

.search-go:hover {
	background: var(--au-gold);
	color: var(--au-navy-deep);
}

.search-hint {
	margin-top: var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-gray-400);
}

.search-hint a {
	color: var(--au-navy-light);
	font-weight: 600;
}

.search-hint a:hover {
	color: var(--au-gold);
}

/* ─── "MENU" TRIGGER (overflow) + compact Give/Apply ─── */
.menu-item {
	display: none;
}

.nav-menu-btn {
	gap: var(--space-2);
}

.nav-menu-btn .ham {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 4px;
	width: 20px;
	height: 1.6em;
}

.nav-menu-btn .ham span {
	height: 2px;
	background: currentColor;
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-base);
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(1) {
	transform: translateY(6px) rotate(45deg);
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(2) {
	opacity: 0;
}

.nav-menu-btn[aria-expanded=true] .ham span:nth-child(3) {
	transform: translateY(-6px) rotate(-45deg);
}

.mega-col-info {
	margin-left: auto;
	background: var(--au-cream);
	border-radius: var(--radius-md);
	padding: var(--space-5);
}

.mega-col-info h4 {
	color: var(--au-navy);
}

.menu-actions {
	display: flex;
	gap: var(--space-2);
	margin-top: var(--space-4);
}

.menu-actions .nc-btn {
	flex: 1;
	text-align: center;
	padding: var(--space-3);
	border: 2px solid transparent;
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	font-weight: 600;
	transition: all var(--duration-base) var(--ease-out);
}

.menu-actions .nc-give, .menu-actions .nc-visit {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.menu-actions .nc-give:hover, .menu-actions .nc-visit:hover {
	background: var(--au-navy);
	color: var(--au-white);
	transform: translateY(-2px);
	box-shadow: var(--shadow-md);
}

.menu-actions .nc-apply {
	background: var(--au-gold);
	color: var(--au-white);
	border-color: var(--au-gold);
}

.menu-actions .nc-apply:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-white);
	transform: translateY(-2px);
	box-shadow: 0 6px 20px rgba(198, 149, 43, 0.3);
}

/* Menu panel = overflow only: hide columns for sections still in the bar */
#mega-menu .mcol-core, #mega-menu .mcol-info {
	display: none;
}

.nav-compact {
	display: none;
	align-items: center;
	gap: var(--space-2);
}

.nav-compact .nc-btn {
	font-size: var(--text-sm);
	font-weight: 600;
	padding: var(--space-2) var(--space-4);
	border: 2px solid transparent;
	border-radius: var(--radius-sm);
	white-space: nowrap;
	transition: all var(--duration-base) var(--ease-out);
}

.nav-compact .nc-give, .nav-compact .nc-visit {
	color: var(--au-gold-light);
	border-color: rgba(255, 255, 255, 0.35);
}

.nav-compact .nc-give:hover, .nav-compact .nc-visit:hover {
	background: rgba(255, 255, 255, 0.1);
	border-color: var(--au-gold-light);
	color: var(--au-white);
	transform: translateY(-2px);
}

.nav-compact .nc-apply {
	background: var(--au-gold);
	color: var(--au-white);
}

.nav-compact .nc-apply:hover {
	background: var(--au-gold-light);
	transform: translateY(-2px);
	box-shadow: 0 6px 20px rgba(198, 149, 43, 0.3);
}

@media (max-width: 1200px) {
	.nav-link {
		padding-inline: var(--space-3);
	}
	.main-inner {
		gap: var(--space-5);
	}
}
@media (max-width: 980px) {
	.util-inner a {
		padding-inline: var(--space-2);
	}
	.nav-link {
		padding-inline: var(--space-2);
	}
	.nav-item.secondary {
		display: none;
	}
	.menu-item {
		display: block;
	}
}
@media (max-width: 768px) {
	.nav-item:not(.menu-item):not(.search-item) {
		display: none;
	}
	.mega {
		max-height: calc(100vh - 130px);
		overflow: auto;
	}
	.search-label {
		font-size: var(--text-lg);
	}
	.mega-inner {
		flex-direction: column;
		gap: var(--space-2);
	}
	.mega-col {
		flex: none;
	}
	.mega-col-info {
		margin-left: 0;
	}
	.mega-feature {
		display: none;
	}
	#mega-menu .mcol-core {
		display: block;
	}
	/* collapsible section titles in the mobile Menu */
	#mega-menu .mega-col:not(.mcol-info) {
		border-bottom: 1px solid var(--au-gray-200);
		padding-bottom: var(--space-3);
	}
	#mega-menu .mega-col:not(.mcol-info) > h4 {
		display: flex;
		justify-content: space-between;
		align-items: center;
		cursor: pointer;
		margin-bottom: 0;
		border-bottom: 0;
		padding-bottom: 0;
	}
	#mega-menu .mega-col:not(.mcol-info) > h4 a {
		pointer-events: none;
		color: inherit;
	}
	#mega-menu .mega-col:not(.mcol-info) > h4::after {
		content: "";
		width: 8px;
		height: 8px;
		border-right: 2px solid currentColor;
		border-bottom: 2px solid currentColor;
		transform: rotate(45deg);
		transition: transform var(--duration-base);
	}
	#mega-menu .mega-col:not(.mcol-info).open > h4::after {
		transform: rotate(-135deg);
	}
	#mega-menu .mega-col:not(.mcol-info) > ul {
		display: none;
		padding-top: var(--space-3);
	}
	#mega-menu .mega-col:not(.mcol-info).open > ul {
		display: block;
	}
}
@media (max-width: 600px) {
	.util-nav {
		display: none;
	}
	.nav-compact {
		display: flex;
	}
	#mega-menu .mcol-info {
		display: block;
	}
	/* reclaim room: tighter side padding + gaps on the compact bar */
	.main-inner {
		gap: var(--space-3);
		padding-inline: var(--space-4);
	}
	.nav-search-btn {
		padding-inline: var(--space-3);
	}
	.nav-logo img {
		height: 34px;
	}
}
@media (max-width: 480px) {
	/* three CTAs won't fit with the logo + search + Menu — shed from the left */
	.nav-compact .nc-give {
		display: none;
	}
}
@media (max-width: 400px) {
	/* only Apply remains on the bar; Give/Visit stay in the Menu panel */
	.nav-compact .nc-visit {
		display: none;
	}
	.main-inner {
		gap: var(--space-2);
	}
}
/* ════════════════════════════════════════════════════════════
   au-buttons.css  ·  Button & CTA styles
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--space-2);
	font-family: var(--font-body);
	font-weight: 700;
	font-size: var(--text-sm);
	letter-spacing: 1.5px;
	text-transform: uppercase;
	text-decoration: none;
	text-align: center; /* a label that wraps stays centred in the button */
	padding: var(--space-4) var(--space-6);
	border-radius: var(--radius-sm);
	border: 2px solid transparent;
	cursor: pointer;
	transition: all var(--duration-base) var(--ease-out);
}

.btn:hover {
	transform: translateY(-1px);
}

.btn:active {
	transform: translateY(0);
}

/* Primary — Gold */
.btn-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

/* lighten the gold on hover while KEEPING the navy label — navy on the lighter
   gold reads with more contrast, not less (the old wash-out was the gold text,
   now fixed via a:not(.btn):hover in base.css). */
.btn-primary:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
	box-shadow: 0 4px 16px rgba(198, 149, 43, 0.35);
}

/* Secondary — Navy */
.btn-secondary {
	background: var(--au-navy);
	color: var(--au-white);
	border-color: var(--au-navy);
}

.btn-secondary:hover {
	background: var(--au-navy-deep);
	box-shadow: 0 4px 16px rgba(0, 51, 102, 0.3);
}

/* Outline */
.btn-outline {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.btn-outline:hover {
	background: var(--au-navy);
	color: var(--au-white);
}

/* on the dark bands an outline button turns white (navy-on-navy otherwise) */
:is(.section--navy, .section--navy-mid, .section--navy-bright, .section--nile-blue,
.section--chathams-blue, .section--fiord-blue, .section--fiord-blue-textured) .btn-outline {
	color: var(--au-white);
	border-color: rgba(255, 255, 255, 0.7);
}

:is(.section--navy, .section--navy-mid, .section--navy-bright, .section--nile-blue,
.section--chathams-blue, .section--fiord-blue, .section--fiord-blue-textured) .btn-outline:hover {
	background: var(--au-white);
	border-color: var(--au-white);
	color: var(--au-navy);
}

/* buttons on a photo band's panel: .cover-panel a colors every link light gold
   and underlines it on hover, which would wash out a button's label */
.cover-panel .btn,
.cover-panel .btn:hover {
	text-decoration: none;
}

.cover-panel .btn-primary,
.cover-panel .btn-primary:hover {
	color: var(--au-navy-deep);
}

.cover-panel .btn-outline {
	color: var(--au-white);
	border-color: rgba(255, 255, 255, 0.7);
}

.cover-panel .btn-outline:hover {
	background: var(--au-white);
	border-color: var(--au-white);
	color: var(--au-navy);
}

/* Ghost */
.btn-ghost {
	background: transparent;
	color: var(--au-gold);
	border-color: transparent;
}

.btn-ghost:hover {
	background: var(--au-gold-pale);
}

/* Sizes */
.btn-sm {
	padding: var(--space-2) var(--space-4);
	font-size: var(--text-xs);
}

.btn-lg {
	padding: var(--space-5) var(--space-8);
	font-size: var(--text-base);
}

/* Button row — a group of CTAs in authored content: <p class="btn-row">.
   Even gaps; each button grows to share its line, so a narrow column stacks
   them full-width and a wide one lines them up. */
.btn-row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3);
}

.btn-row > .btn {
	flex: 1 1 auto;
}

/* ════════════════════════════════════════════════════════════
   au-forms.css  ·  Form controls
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* Labels */
.label {
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
}

.label-required::after {
	content: " *";
	color: var(--au-error);
}

.helper {
	font-size: var(--text-xs);
	color: var(--au-gray-400);
	margin-top: var(--space-1);
}

.error-msg {
	font-size: var(--text-xs);
	color: var(--au-error);
	margin-top: var(--space-1);
	font-weight: 500;
}

/* Text Input */
.input {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
}

.input::-moz-placeholder {
	color: var(--au-gray-400);
}

.input::placeholder {
	color: var(--au-gray-400);
}

.input:focus {
	border-color: var(--au-gold);
}

.input-error {
	border-color: var(--au-error) !important;
}

/* Dark variant */
.input-dark {
	background: rgba(255, 255, 255, 0.06);
	border-color: rgba(255, 255, 255, 0.15);
	color: var(--au-white);
}

.input-dark:focus {
	border-color: var(--au-gold);
}

/* Select */
.select {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-8) var(--space-3) var(--space-4);
	outline: none;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	background-image: url("data:image/svg+xml,...chevron...");
	background-repeat: no-repeat;
	background-position: right 16px center;
	cursor: pointer;
}

.select:focus {
	border-color: var(--au-gold);
}

/* Textarea */
.textarea {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	resize: vertical;
	min-height: 100px;
}

.textarea:focus {
	border-color: var(--au-gold);
}

/* Checkbox & Radio */
.check-group {
	display: flex;
	flex-direction: column;
	gap: var(--space-3);
}

.check-label {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	cursor: pointer;
	font-size: var(--text-base);
}

.checkbox, .radio {
	width: 20px;
	height: 20px;
	accent-color: var(--au-gold);
}

.radio {
	accent-color: var(--au-navy);
}

/* Toggle Switch */
.toggle {
	position: relative;
	width: 48px;
	height: 26px;
}

.toggle input {
	opacity: 0;
	width: 0;
	height: 0;
	position: absolute;
}

.toggle-track {
	position: absolute;
	inset: 0;
	background: var(--au-gray-300);
	border-radius: var(--radius-full);
	transition: background var(--duration-base);
}

.toggle-track::after {
	content: "";
	position: absolute;
	width: 20px;
	height: 20px;
	background: var(--au-white);
	border-radius: 50%;
	top: 3px;
	left: 3px;
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
	transition: transform var(--duration-base) var(--ease-out);
}

.toggle input:checked + .toggle-track {
	background: var(--au-navy);
}

.toggle input:checked + .toggle-track::after {
	transform: translateX(22px);
}

/* Range Slider */
.range {
	width: 100%;
	height: 6px;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	background: var(--au-gray-200);
	border-radius: var(--radius-full);
}

.range::-webkit-slider-thumb {
	-webkit-appearance: none;
	        appearance: none;
	width: 22px;
	height: 22px;
	background: var(--au-navy);
	border-radius: 50%;
	border: 3px solid var(--au-white);
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
}

/* File Upload */
.file-upload {
	border: 2px dashed var(--au-gray-300);
	border-radius: var(--radius-md);
	padding: var(--space-6) var(--space-5);
	text-align: center;
	cursor: pointer;
	transition: all var(--duration-base);
}

.file-upload:hover {
	border-color: var(--au-gold);
	background: var(--au-gold-pale);
}

/* Layout helpers */
.form-group {
	margin-bottom: var(--space-5);
}

.form-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-4);
}

@media (max-width: 600px) {
	.form-row {
		grid-template-columns: 1fr;
	}
}
/* multi-column checkbox/radio list for long option sets (e.g. 16 project types).
   Boxes align to the first line so wrapping labels stay tidy. */
.check-group--cols {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--space-3) var(--space-6);
}

.check-group--cols .check-label {
	align-items: flex-start;
}

.check-group--cols .checkbox, .check-group--cols .radio {
	flex-shrink: 0;
	margin-top: 2px;
}

@media (max-width: 560px) {
	.check-group--cols {
		grid-template-columns: 1fr;
	}
}
/* form scaffold — constrain width, reset the fieldset chrome, style the legend */
.form {
	max-width: 680px;
}

.form fieldset {
	border: 0;
	margin: 0;
	padding: 0;
}

.form legend {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	line-height: 1.2;
	margin-bottom: var(--space-6);
}

/* ─── Legacy CMS forms (.auform) ───
   The sitewide form macros (templates/forms/*) emit bare elements with
   class="auform" on the <form> and class="generic_element" wrappers.
   The form template also injects the legacy /css/forms.css AFTER index.css,
   so we scope under .page-main to win by specificity. */
.page-main .auform {
	max-width: 680px;
}

.page-main .auform .generic_element {
	margin-bottom: var(--space-3);
	clear: none;
}

.page-main .auform .help_message {
	min-height: 0;
}

.page-main .auform label {
	display: block;
	float: none;
	width: auto;
	text-align: left;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
	margin-right: 0;
}

.page-main .auform input[type=text],
.page-main .auform input[type=email],
.page-main .auform input[type=tel],
.page-main .auform input[type=url],
.page-main .auform input[type=search],
.page-main .auform input[type=number] {
	width: 100%;
	float: none;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
}

.page-main .auform input[type=text]:focus,
.page-main .auform input[type=email]:focus,
.page-main .auform input[type=tel]:focus {
	border-color: var(--au-gold);
	background: var(--au-white);
}

.page-main .auform textarea {
	width: 100%;
	float: none;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	resize: vertical;
	min-height: 100px;
	outline: none;
}

.page-main .auform textarea:focus {
	border-color: var(--au-gold);
	background: var(--au-white);
}

.page-main .auform select {
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-2) var(--space-3);
	outline: none;
}

.page-main .auform select:focus {
	border-color: var(--au-gold);
}

.page-main .auform input[type=submit] {
	-webkit-appearance: none;
	-moz-appearance: none;
	     appearance: none;
	font-family: var(--font-display);
	font-size: var(--text-sm);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--au-navy);
	background-color: var(--au-gold);
	background-image: none;
	border: 0;
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-6);
	margin: var(--space-5) 0 0;
	cursor: pointer;
	transition: background-color var(--duration-base), transform var(--duration-base);
}

.page-main .auform input[type=submit]:hover {
	background-color: var(--au-gold-light);
	transform: translateY(-1px);
}

/* phone macro: three small inputs in a row */
.page-main .auform .phone {
	display: flex;
	align-items: center;
	gap: var(--space-2);
	flex-wrap: wrap;
}

.page-main .auform .phone label {
	width: 100%;
	float: none;
}

.page-main .auform .phone select {
	flex: 0 0 auto;
}

.page-main .auform .phone input.fluid {
	width: auto;
	flex: 1;
	min-width: 60px;
}

.page-main .auform .phone span {
	color: var(--au-gray-400);
}

/* ════════════════════════════════════════════════════════════
   au-tables.css  ·  Data tables
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* Band-aware: cell text, borders and stripes read the section's --band-* context
   tokens (set on dark bands in layout.css), so a table dropped on a dark band —
   e.g. inside a dark accordion — adapts instead of rendering dark-on-dark. Falls
   back to the light-table look off a band. */
.table-wrap {
	overflow-x: auto;
	border-radius: var(--radius-lg);
	border: 2px solid var(--band-card-border, var(--au-gray-200));
}

.table {
	width: 100%;
	border-collapse: collapse;
	font-size: var(--text-sm);
}

/* inside a wrap, the wrap owns the outer spacing and the table sits flush to the
   rounded border. Without this, the page-content rhythm's top margin on <table>
   opens a blank strip between the border and the header row (the wrap is its own
   block-formatting context, so the margin can't collapse away). */
.table-wrap > .table {
	margin: 0;
}

.table thead {
	background: var(--au-navy);
}

.table th {
	color: var(--au-white);
	font-weight: 600;
	font-size: var(--text-xs);
	letter-spacing: 1px;
	text-transform: uppercase;
	text-align: left;
	padding: var(--space-3) var(--space-4);
}

/* Two-row (grouped) headers: a heading spanning several columns centres over
   them with a faint rule beneath, and a heading spanning both rows sits on the
   bottom line, level with the column names (exam schedule: "If your class
   meets at" beside Monday..Thursday under "Your examination is scheduled for"). */
.table thead th[colspan] {
	text-align: center;
	border-bottom: 1px solid rgba(255, 255, 255, 0.25);
}

.table thead th[rowspan] {
	vertical-align: bottom;
}

.table td,
.table tbody th {
	padding: var(--space-3) var(--space-4);
	border-bottom: 1px solid var(--band-card-border, var(--au-gray-200));
	color: var(--band-body, var(--au-text));
}

.table tbody th {
	font-weight: 700;
	background: var(--band-card-bg, var(--au-cream));
	vertical-align: top;
}

/* Striped rows */
.table-striped tbody tr:nth-child(even) td {
	background: var(--band-card-bg, rgba(0, 51, 102, 0.02));
}

/* Grouped rows — band alternate row GROUPS, not alternate rows.
   Use one <tbody> per group (that is what tbody is for) and give the table
   .table--grouped: alternate groups get a tinted band and a heavier rule
   above it. This is the variant for tables whose first column is a rowspan
   category label — row-level .table-striped would stripe straight across those
   groups and fight them. Replaces the legacy flat-grey `background-color` fills
   that CKEditor/Word pastes used for the same purpose. */
.table--grouped tbody:nth-of-type(odd) td {
	background: var(--band-card-bg, var(--au-cream));
}

.table--grouped tbody + tbody td {
	border-top: 2px solid var(--band-card-border, var(--au-gray-200));
}

/* Row hover — last so it wins over both banding variants (equal specificity).
   Opt out with .table--nohover. Row highlighting misreads on tables that use
   rowspan: hovering a row cannot light up the spanning category/contact cells
   (those belong to the group's FIRST <tr>), so the highlight comes out ragged
   and half-applied. The :not() keeps the banding intact — it simply never arms
   the hover — rather than trying to repaint the cell back to its band colour. */
.table:not(.table--nohover) tbody tr:hover td {
	background: var(--band-raised, var(--au-gold-pale));
}

/* No-wrap cells — for grids of short values (times, codes, amounts) that
   otherwise break at the hyphen in a narrow column ("10:30-" / "12:30"). The
   table grows instead and scrolls inside its .table-wrap; authored <br>s still
   break. First used on /academics/exam_schedule.html. */
.table--nowrap td {
	white-space: nowrap;
}

/* Compact variant */
.table-compact th,
.table-compact td {
	padding: var(--space-2) var(--space-3);
	font-size: var(--text-xs);
}

/* ─── Responsive: table → cards on mobile ─── */
@media (max-width: 600px) {
	.table-responsive thead {
		display: none;
	}
	.table-responsive tbody tr {
		display: block;
		margin-bottom: var(--space-3);
		border: 1px solid var(--band-card-border, var(--au-gray-200));
		border-radius: var(--radius-md);
	}
	.table-responsive tbody td {
		display: flex;
		justify-content: space-between;
		padding: var(--space-2) var(--space-3);
	}
	/* Label from data-label attribute */
	.table-responsive tbody td::before {
		content: attr(data-label);
		font-weight: 600;
		font-size: var(--text-xs);
		text-transform: uppercase;
		color: var(--band-heading, var(--au-navy));
	}
}
/* ════════════════════════════════════════════════════════════
   au-feedback.css  ·  Callouts & progress
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Callouts / alerts ─── */
.callout {
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	font-size: var(--text-sm);
	display: flex;
	align-items: flex-start;
	gap: var(--space-3);
	line-height: 1.6;
}

/* [hidden] alone can't hide a display:flex box — make the attribute win */
.callout[hidden] {
	display: none;
}

.callout-info {
	background: #EBF3FA;
	color: var(--au-info);
	border-left: 3px solid var(--au-info);
}

.callout-warning {
	background: var(--au-gold-pale);
	color: #8A6A1E;
	border-left: 3px solid var(--au-gold);
}

.callout-success {
	background: #EBF5EE;
	color: var(--au-success);
	border-left: 3px solid var(--au-success);
}

.callout-error {
	background: #FBECEC;
	color: var(--au-error);
	border-left: 3px solid var(--au-error);
}

/* ─── CTA callout — a set-apart panel: a message beside an action button.
   The clean replacement for the old <table> "excerpt + button" pattern; wraps
   to stacked (text over button) on narrow widths. Text is a <div>, not <p>, so
   it doesn't inherit the .page-main paragraph rhythm. ─── */
.cta-callout {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-4) var(--space-6);
	margin: var(--space-8) 0;
	padding: var(--space-6) var(--space-8);
	background: var(--au-gold-pale);
	border-left: 4px solid var(--au-gold);
	border-radius: var(--radius-md);
}

.cta-callout-text {
	flex: 1 1 320px;
	font-size: var(--text-md);
	color: var(--au-navy);
	line-height: 1.6;
}

.cta-callout .btn {
	flex-shrink: 0;
}

/* ─── sidenote — a boxed aside that floats beside the body on wide screens
   (e.g. "how to submit a request"); the surrounding text wraps around it.
   Unfloats to a full-width block on narrow screens. ─── */
.sidenote {
	float: right;
	width: 300px;
	max-width: 42%;
	margin: var(--space-1) 0 var(--space-5) var(--space-8);
	padding: var(--space-5) var(--space-6);
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-md);
	font-size: var(--text-sm);
	line-height: 1.6;
}

.sidenote-title {
	font-family: var(--font-display);
	font-size: var(--text-md);
	font-weight: 600;
	color: var(--au-navy);
	line-height: 1.25;
}

@media (max-width: 640px) {
	.sidenote {
		float: none;
		width: auto;
		max-width: none;
		margin-left: 0;
	}
}
/* ─── Progress bar ─── */
.progress-wrap {
	background: var(--au-gray-200);
	border-radius: var(--radius-lg);
	height: 36px;
	overflow: hidden;
	box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.06);
}

.progress-fill {
	height: 100%;
	border-radius: var(--radius-lg);
	background: linear-gradient(90deg, var(--au-navy) 0%, var(--au-navy-light) 100%);
	display: flex;
	align-items: center;
	justify-content: flex-end;
	padding-right: var(--space-4);
	transition: width 2s var(--ease-out);
	position: relative;
}

/* Gold accent edge */
.progress-fill::after {
	content: "";
	position: absolute;
	right: 0;
	top: 0;
	bottom: 0;
	width: 50px;
	background: linear-gradient(90deg, transparent, rgba(198, 149, 43, 0.5));
	border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
}

.progress-label {
	color: var(--au-white);
	font-weight: 700;
	font-size: var(--text-sm);
	position: relative;
	z-index: 2;
}

/* ════════════════════════════════════════════════════════════
   steps.css  ·  numbered step-by-step (how-to guides)
   Depends on: tokens.css
   An ordered list of procedure steps — a gold number badge per step,
   joined by a vertical connector line, with the instruction and an
   (optionally framed) screenshot indented in the step column.

   Authoring (CKEditor-safe — no icons, no manual "Step N", no numbers):
     <ol class="steps">
       <li>
         <p>Do the thing.</p>                     (lead instruction)
         <figure><img src="…" alt="…"></figure>  (optional screenshot)
       </li>
       …
     </ol>
   The numbers and connector line are generated with CSS counters +
   ::before/::after, so the markup stays a clean ordered list. The number
   badge IS the step label, so no "Step 1" text is needed.
   ════════════════════════════════════════════════════════════ */
.steps {
	list-style: none;
	counter-reset: step;
	margin: var(--space-8) 0;
	padding: 0;
}

.steps > li {
	counter-increment: step;
	position: relative;
	margin: 0; /* cancel the global `li + li` gap */
	padding-left: 4rem; /* the badge column */
	padding-bottom: var(--space-10); /* room for the connector to the next step */
}

.steps > li:last-child {
	padding-bottom: 0;
}

/* the number badge */
.steps > li::before {
	content: counter(step);
	position: absolute;
	left: 0;
	top: 0;
	width: 2.5rem;
	height: 2.5rem;
	border-radius: 50%;
	background: var(--au-gold);
	color: var(--au-navy-deep);
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-lg);
	z-index: 1; /* sit above the connector line */
}

/* the connector line linking a step to the next (not after the last step) */
.steps > li:not(:last-child)::after {
	content: "";
	position: absolute;
	left: 1.25rem; /* centred under the 2.5rem badge */
	top: 3rem; /* just below the badge */
	bottom: 0;
	width: 2px;
	background: var(--au-gray-200);
	transform: translateX(-1px);
}

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

/* the lead instruction — slightly larger, and nudged down ~0.4rem so its first
   line sits vertically centered against the number badge (the number does the
   "Step N" labelling, so no eyebrow is needed). */
.steps > li > p:first-child {
	font-size: var(--text-md);
	line-height: 1.6;
	margin: 0.4rem 0 0;
}

/* any following text in a step */
.steps p {
	margin: var(--space-2) 0 0;
	line-height: 1.6;
}

/* framed screenshot: hairline border, rounded corners, soft lift; capped so a
   large capture doesn't fill the whole column. Left edge lines up with the text. */
.steps figure {
	margin: var(--space-4) 0 0;
}

.steps figure img {
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-sm);
	max-width: 440px;
	width: 100%;
}

.steps figcaption {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
}

/* tighten the badge column on small screens */
@media (max-width: 560px) {
	.steps > li {
		padding-left: 3.25rem;
	}
	.steps > li::before {
		width: 2.1rem;
		height: 2.1rem;
		font-size: var(--text-md);
	}
	.steps > li:not(:last-child)::after {
		left: 1.05rem;
		top: 2.5rem;
	}
}
/* ════════════════════════════════════════════════════════════
   au-disclosure.css  ·  Accordion & tabbed panels
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Accordion ─── */
/* Band-aware: reads the section's --band-* context tokens (set on dark bands in
   layout.css) so the accordion adapts automatically — light triggers + dark text
   on light bands, translucent triggers + light text on dark bands — with no
   variant class to remember. Falls back to the light look off a band. */
.accordion {
	border: 2px solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.accordion-item {
	border-bottom: 1px solid var(--band-card-border, var(--au-gray-200));
	/* when deep-linked (js/accordion.js opens the panel and scrolls here), clear
	   the sticky header so the question isn't hidden underneath it. */
	scroll-margin-top: calc(var(--header-height) + var(--space-3));
}

.accordion-item:last-child {
	border-bottom: none;
}

.accordion-item > :is(h1, h2, h3, h4, h5, h6) {
	margin: 0;
	font-size: inherit;
}

.accordion-trigger {
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: var(--space-4) var(--space-5);
	background: var(--band-card-bg, var(--au-white));
	border: none;
	cursor: pointer;
	font-family: var(--font-body);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	text-align: left;
	transition: background var(--duration-fast);
}

.accordion-trigger:hover,
.accordion-trigger[aria-expanded=true] {
	background: var(--band-raised, var(--au-gold-pale));
}

/* a CMS-authored title is sometimes wrapped in a heading (e.g. <h3>). The global
   base.css `h1..h6 { color: navy }` would then paint it dark — invisible on a
   dark band. Tie any heading inside the trigger to the trigger's own band-aware
   colour, and strip the heading's page margins so it sits in the button. */
.accordion-trigger :is(h1, h2, h3, h4, h5, h6) {
	color: inherit;
	margin: 0;
}

.accordion-trigger a {
	color: inherit;
	text-decoration: none;
	pointer-events: none;
}

/* Secondary text on a trigger — a qualifier that belongs with the title rather
   than inside the panel (e.g. "2025-2026 Verification Forms · for classes
   between August 2025 & July 2026"). Legacy Bootstrap panels put this in a
   <span> beside the toggle inside .panel-heading; it has nowhere else to go
   once the heading becomes a button. Lighter and lower-contrast than the
   title, and it wraps rather than squeezing the icon. */
.accordion-note {
	display: block;
	margin-top: var(--space-1);
	font-weight: 400;
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-gray-600));
}

/* the title + note stack on the left; the icon stays pinned right */
.accordion-trigger > :not(.accordion-icon) {
	flex: 1 1 auto;
}

.accordion-trigger .accordion-icon {
	flex: 0 0 auto;
}

/* Plus/minus icon via pseudo-elements */
.accordion-icon {
	width: 20px;
	height: 20px;
	position: relative;
}

.accordion-icon::before,
.accordion-icon::after {
	content: "";
	position: absolute;
	background: var(--band-accent, var(--au-navy));
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out);
}

.accordion-icon::before {
	width: 14px;
	height: 2px;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

.accordion-icon::after {
	width: 2px;
	height: 14px;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

/* Rotate vertical bar to form minus */
.accordion-trigger[aria-expanded=true] .accordion-icon::after {
	transform: translate(-50%, -50%) rotate(90deg);
	opacity: 0;
}

/* Auto-icon: triggers without an explicit .accordion-icon span get +/− via
   ::after (common in content converted from Bootstrap panels). */
.accordion-trigger:not(:has(.accordion-icon))::after {
	content: "";
	flex: 0 0 20px;
	width: 20px;
	height: 20px;
	margin-left: var(--space-3);
	background: linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/14px 2px no-repeat, linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/2px 14px no-repeat;
	transition: var(--duration-base) var(--ease-out);
}

.accordion-trigger[aria-expanded=true]:not(:has(.accordion-icon))::after {
	background: linear-gradient(var(--band-accent, var(--au-navy)), var(--band-accent, var(--au-navy))) 50%/14px 2px no-repeat;
}

/* Anchor remnants from Bootstrap collapse toggles: strip link styling so the
   trigger text looks like normal text, not a hyperlink. */
.accordion-trigger a {
	color: inherit;
	text-decoration: none;
}

/* Flag/icon images inside triggers: override base.css block display,
   size to text, and vertically center with the label. */
.accordion-trigger img {
	display: inline;
	height: 1.2em;
	width: auto;
	vertical-align: middle;
	margin-right: var(--space-2);
}

.accordion-panel {
	max-height: 0;
	overflow: hidden;
	transition: max-height var(--duration-slow) var(--ease-out);
}

/* the open height is set inline by js/accordion.js from the panel's real content
   (no fixed cap here — a hardcoded max-height clipped long panels and hid the
   body's bottom padding). */
.accordion-body {
	padding: var(--space-4) var(--space-5) var(--space-6);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

/* links inside the panel follow the band: normal link blue on light, gold on a
   dark band (where navy-blue would vanish). Hover stays gold on both. */
.accordion-body a {
	color: var(--band-accent, var(--au-navy-light));
}

/* headings authored in the rich-text panel follow the band heading colour too,
   so an <h3>/<strong> block stays legible on a dark band. */
.accordion-body :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* Fallback: panels whose content sits in a plain <div> (no .accordion-body class)
   still get body padding and typography. Common in Bootstrap-converted panels. */
.accordion-panel > div:not([class]) {
	padding: var(--space-4) var(--space-5) var(--space-6);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

.accordion-panel > div:not([class]) a {
	color: var(--band-accent, var(--au-navy-light));
}

.accordion-panel > div:not([class]) :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* ─── Tabbed panels ─── */
/* Boxed Tabs */
.tabs {
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.tab-list {
	display: flex;
	background: var(--au-cream);
	border-bottom: 2px solid var(--au-gray-200);
	overflow-x: auto;
}

.tab-btn {
	font-family: var(--font-body);
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-warm-gray);
	background: transparent;
	border: none;
	padding: var(--space-4) var(--space-5);
	cursor: pointer;
	white-space: nowrap;
	position: relative;
}

.tab-btn:hover {
	color: var(--au-navy);
}

.tab-btn.active {
	color: var(--au-navy);
	background: var(--au-white);
}

/* Gold underline on active tab */
.tab-btn.active::after {
	content: "";
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	height: 3px;
	background: var(--au-gold);
}

.tab-panel {
	display: none;
	padding: var(--space-5);
}

.tab-panel.active {
	display: block;
}

/* ─── Pill-Style Filter Tabs ─── */
.tab-list-pills {
	display: flex;
	gap: var(--space-2);
	flex-wrap: wrap;
	margin-bottom: var(--space-5);
}

.tab-pill {
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--au-warm-gray);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-sm);
	padding: var(--space-2) var(--space-4);
	cursor: pointer;
}

.tab-pill:hover {
	border-color: var(--au-navy);
	color: var(--au-navy);
}

.tab-pill.active {
	background: var(--au-navy);
	border-color: var(--au-navy);
	color: var(--au-white);
}

/* dialog.css · native <dialog> modal
   Trigger: [data-dialog-open="<id>"] opens <dialog id="<id>">
   JS: js/dialog.js (self-inits via init.js) */
.dialog {
	border: 0;
	border-radius: var(--radius-md);
	padding: 0;
	margin: auto;
	max-width: min(640px, 100vw - var(--space-8));
	max-height: calc(100vh - var(--space-10));
	width: 100%;
	box-shadow: var(--shadow-lg);
	overflow: hidden;
}

.dialog[open] {
	display: flex;
	flex-direction: column;
}

.dialog::backdrop {
	background: rgba(0, 31, 63, 0.55);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
}

.dialog-header {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-4);
	border-bottom: 1px solid var(--au-gray-200);
}

.dialog .dialog-title {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-navy);
	margin: 0;
	line-height: 1.3;
}

.dialog-close {
	flex-shrink: 0;
	background: none;
	border: 0;
	cursor: pointer;
	font-size: 1.25rem;
	line-height: 1;
	color: var(--au-gray-400);
	padding: 0;
	transition: color var(--duration-base);
}

.dialog-close:focus {
	outline: none;
}

.dialog-close:focus-visible {
	outline: 2px solid var(--au-gold);
	outline-offset: 2px;
	border-radius: var(--radius-sm);
}

.dialog-close:hover {
	color: var(--au-navy);
}

.dialog-body {
	padding: var(--space-4) var(--space-5);
	overflow-y: auto;
	overscroll-behavior: contain;
	font-size: var(--text-base);
	line-height: 1.6;
	color: var(--au-text);
}

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

.dialog-body p + p {
	margin-top: var(--space-4);
}

.dialog-body img {
	max-width: 100%;
	height: auto;
	border-radius: var(--radius-md);
	margin-top: var(--space-4);
}

.dialog-img {
	width: 100%;
	aspect-ratio: 16/9;
	-o-object-fit: cover;
	   object-fit: cover;
	display: block;
}

@media (max-width: 600px) {
	.dialog[open] {
		max-width: 100vw;
		max-height: 100vh;
		border-radius: 0;
		margin: 0;
	}
	.dialog-header {
		padding: var(--space-2) var(--space-3);
	}
	.dialog-body {
		padding: var(--space-4);
	}
}
/* clickable triggers */
[data-dialog-open] {
	cursor: pointer;
}

.card[data-dialog-open]:hover {
	box-shadow: var(--shadow-md);
	transition: box-shadow var(--duration-base);
}

/* ════════════════════════════════════════════════════════════
   au-media.css  ·  Carousel, gallery & video
   Depends on: au-tokens.css
   ════════════════════════════════════════════════════════════ */
/* ─── Carousel ─── */
.carousel {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-lg);
	/* set --carousel-ratio on the element for photos of another shape (e.g.
	   style="--carousel-ratio: 720 / 325"); the phone caption layout below reads it */
	aspect-ratio: var(--carousel-ratio, 3/2);
}

.carousel-track {
	display: flex;
	height: 100%;
	transition: transform 0.5s var(--ease-out);
}

.carousel-slide {
	flex: 0 0 100%;
	height: 100%;
	position: relative;
}

.carousel-slide img {
	width: 100%;
	height: 100%;
	display: block;
	-o-object-fit: cover;
	   object-fit: cover;
}

/* Size variants override the default aspect ratio */
.carousel-compact {
	aspect-ratio: unset;
}

.carousel-compact .carousel-slide img {
	height: 320px;
}

.carousel-hero {
	aspect-ratio: unset;
	border-radius: 0;
}

.carousel-hero .carousel-slide img {
	height: 480px;
}

/* ── Peek variant ──
   Film-strip carousel: all images scaled to the same height, each slide
   is as wide as its image's natural proportions. Clicking centers the next
   image; narrower images show more of the neighboring slides on each side.
   The .carousel--peek has overflow:visible; .carousel-peek-wrap clips it. */
.carousel-peek-wrap {
	overflow: hidden;
}

.carousel--peek {
	overflow: visible;
	max-width: 850px;
	margin: 0 auto;
	aspect-ratio: 2/1; /* panoramic; overrides 3/2 from .carousel */
}

.carousel--peek .carousel-slide {
	flex: 0 0 auto; /* natural width per image, not 100% */
	height: 100%;
}

.carousel--peek .carousel-slide img {
	height: 100%;
	width: auto;
	display: block;
	-o-object-fit: initial;
	   object-fit: initial;
}

/* Caption overlay */
.carousel-caption {
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
	padding: var(--space-8) var(--space-6) var(--space-5);
	background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
	color: var(--au-white);
}

/* Prev/Next buttons */
.carousel-btn {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.9);
	border: none;
	cursor: pointer;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
	z-index: 2;
	font-size: 18px;
	color: var(--au-navy);
}

.carousel-prev {
	left: var(--space-3);
}

.carousel-next {
	right: var(--space-3);
}

/* Dot indicators */
.carousel-dots {
	position: absolute;
	bottom: var(--space-3);
	left: 50%;
	transform: translateX(-50%);
	display: flex;
	gap: 8px;
	z-index: 2;
}

.carousel-dot {
	width: 10px;
	height: 10px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.5);
	border: none;
	cursor: pointer;
}

.carousel-dot.active {
	background: var(--au-white);
	transform: scale(1.2);
}

/* ── Captions on phones ──
   The caption is an overlay, which suits a line on a tall photo; on a phone a
   sentence or two covers most of the picture, faces included
   (/services/research/communityengagement/). Up to 640px a carousel with
   captions puts each caption BELOW its photo on a navy panel: the photo keeps
   the carousel's ratio, the slides stretch to the longest caption, and the
   arrows and dots stay on the photo (container units: 100cqi is the carousel's
   width, so width / ratio is the photo's height). Peek carousels are left alone. */
@media (max-width: 640px) {
	.carousel:not(.carousel--peek):has(.carousel-caption) {
		aspect-ratio: auto;
		container-type: inline-size;
		background: var(--au-navy-deep);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-track,
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-slide {
		height: auto;
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-slide {
		display: flex;
		flex-direction: column;
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-slide img {
		height: auto;
		aspect-ratio: var(--carousel-ratio, 3/2);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-caption {
		position: static;
		flex: 1;
		background: var(--au-navy-deep);
		padding: var(--space-4) var(--space-4) var(--space-5);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-btn {
		top: calc(100cqi / (var(--carousel-ratio, 3/2)) / 2);
	}
	.carousel:not(.carousel--peek):has(.carousel-caption) .carousel-dots {
		bottom: auto;
		top: calc(100cqi / (var(--carousel-ratio, 3/2)) - var(--space-3) - 12px);
	}
}
/* ─── Photo gallery + lightbox ─── */
.gallery {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: var(--space-3);
}

.gallery-item {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-md);
	cursor: pointer;
	aspect-ratio: 4/3;
}

.gallery-item img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	transition: transform var(--duration-base);
}

.gallery-item:hover img {
	transform: scale(1.05);
}

/* Gallery orientation variants — add the modifier to the .gallery element in CKEditor source:
   .gallery--portrait  → tall/phone shots (headshots, portraits)
   .gallery--square    → square thumbnails
   .gallery--natural   → each image shows at its own natural proportions (masonry columns) */
.gallery--portrait .gallery-item {
	aspect-ratio: 3/4;
}

.gallery--square .gallery-item {
	aspect-ratio: 1;
}

.gallery--natural {
	display: block;
	-moz-columns: 3;
	     columns: 3;
	-moz-column-gap: var(--space-3);
	     column-gap: var(--space-3);
}

.gallery--natural .gallery-item {
	aspect-ratio: unset;
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
	margin-bottom: var(--space-3);
}

.gallery--natural .gallery-item img {
	width: 100%;
	height: auto;
	-o-object-fit: unset;
	   object-fit: unset;
}

@media (max-width: 600px) {
	.gallery--natural {
		-moz-columns: 2;
		     columns: 2;
	}
}
/* Lightbox overlay */
.lightbox {
	position: fixed;
	inset: 0;
	background: rgba(0, 10, 20, 0.92);
	z-index: 1100;
	display: flex;
	align-items: center;
	justify-content: center;
	opacity: 0;
	visibility: hidden;
	transition: all var(--duration-base);
}

.lightbox.open {
	opacity: 1;
	visibility: visible;
}

.lightbox-img {
	max-width: 90vw;
	max-height: 85vh;
	-o-object-fit: contain;
	   object-fit: contain;
	border-radius: var(--radius-md);
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}

.lightbox-close,
.lightbox-nav {
	position: absolute;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.1);
	border: none;
	color: var(--au-white);
	cursor: pointer;
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
}

.lightbox-close {
	top: var(--space-5);
	right: var(--space-5);
}

.lightbox-prev {
	top: 50%;
	left: var(--space-5);
}

.lightbox-next {
	top: 50%;
	right: var(--space-5);
}

/* ─── Video embeds ─── */
.video {
	position: relative;
	border-radius: var(--radius-lg);
	overflow: hidden;
	background: #000;
	align-self: start;
	aspect-ratio: 16/9;
}

.video iframe,
.video video {
	display: block;
	width: 100%;
	height: 100%;
	border: none;
}

/* text beside a video (video.tt content_position left/right) — centred on it */
.video-side {
	align-self: center;
}

.video-side :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

/* 16:9 responsive wrapper */
.video-responsive {
	position: relative;
	aspect-ratio: 16/9;
}

.video-responsive iframe,
.video-responsive video {
	display: block;
	width: 100%;
	height: 100%;
	border: none;
}

/* Poster thumbnail + play button */
.video-poster {
	position: relative;
	cursor: pointer;
}

.video-poster img {
	width: 100%;
	display: block;
	aspect-ratio: 16/9;
	-o-object-fit: cover;
	   object-fit: cover;
}

.video-play {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 72px;
	height: 72px;
	border-radius: 50%;
	background: rgba(0, 51, 102, 0.85);
	border: 3px solid rgba(255, 255, 255, 0.3);
	display: flex;
	align-items: center;
	justify-content: center;
}

/* CSS triangle play icon */
.video-play::after {
	content: "";
	border-style: solid;
	border-width: 12px 0 12px 22px;
	border-color: transparent transparent transparent var(--au-white);
	margin-left: 4px;
}

.video-poster:hover .video-play {
	background: var(--au-navy);
	border-color: var(--au-gold);
	transform: translate(-50%, -50%) scale(1.1);
}

.video-caption {
	padding: var(--space-3) var(--space-4);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	background: var(--au-cream);
}

/* ════════════════════════════════════════════════════════════
   team.css  ·  staff / "meet the team" grid  (deptstaffindex.dt)
   Depends on: tokens.css
   A responsive grid of people — portrait photo, name, role, contact.
   Photos lead (they get the space); the old Photo/Name/Contact table is gone.
   ════════════════════════════════════════════════════════════ */
.team {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: var(--space-10) var(--space-6);
}

/* intro content above the grid (the index page's above_content) — space it off
   the photos instead of relying on authored blank paragraphs. */
.page-main > :not(h1) + .team {
	margin-top: var(--space-8);
}

.team-photo {
	position: relative;
	display: block;
	overflow: hidden;
	aspect-ratio: 3/4;
	border-radius: var(--radius-md);
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	text-decoration: none;
}

/* no photo (or a broken one): initials on one of eight brand gradients (from the design guide's image
   placeholders), picked from the person's initials and name lengths.
   The photo sits on top of the initials, so they only show when there is no photo. */
.team-photo--g1 {
	background: linear-gradient(150deg, var(--au-navy-light), var(--au-gold));
}

.team-photo--g2 {
	background: linear-gradient(120deg, var(--au-navy-deep), var(--au-navy));
}

.team-photo--g3 {
	background: linear-gradient(165deg, var(--au-navy), var(--au-gold-light));
}

.team-photo--g4 {
	background: linear-gradient(210deg, var(--au-gold), var(--au-navy));
}

.team-photo--g5 {
	background: linear-gradient(45deg, var(--au-navy-deep), var(--au-navy-light));
}

.team-photo--g6 {
	background: linear-gradient(20deg, var(--au-navy-light), var(--au-gold-light));
}

.team-photo--g7 {
	background: radial-gradient(circle at 80% 15%, rgba(232, 184, 75, 0.55), transparent 55%), linear-gradient(180deg, var(--au-navy), var(--au-navy-deep));
}

/* flowing mesh gradient (js/team.js): one pattern flows across every photo tile of a grid; the script
   shifts each tile's background by its offset in the grid, so the tiles read as windows onto one surface.
   The pattern is a Colorffy-style "mesh gradient": 8 broad brand-colour points (navy, light/deep navy,
   gold, light gold) with very wide falloff, in a 1300px 1500px unit that repeats. Every point that
   crosses the unit's edge is copied to the opposite side, so the repeat has no seams. */
.team--flow .team-photo {
	background-image: radial-gradient(442px 510px at -104px -45px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(442px 510px at -104px 1455px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(442px 510px at 1196px -45px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(442px 510px at 1196px 1455px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 260px -420px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 260px 1080px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 1560px -420px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 1560px 1080px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(520px 600px at -182px 869px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(520px 600px at 1118px 869px, rgba(198, 149, 43, 0.95) 0%, rgba(198, 149, 43, 0.55) 35%, rgba(198, 149, 43, 0.15) 70%, rgba(198, 149, 43, 0) 100%), radial-gradient(546px 630px at 286px 240px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 286px 1740px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 1586px 240px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(546px 630px at 1586px 1740px, rgba(232, 184, 75, 0.95) 0%, rgba(232, 184, 75, 0.55) 35%, rgba(232, 184, 75, 0.15) 70%, rgba(232, 184, 75, 0) 100%), radial-gradient(585px 675px at 130px 630px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(585px 675px at 130px 2130px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(585px 675px at 1430px 630px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(585px 675px at 1430px 2130px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(780px 900px at -584px -210px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at -584px 1290px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 715px -210px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 715px 1290px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 2015px -210px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(780px 900px at 2015px 1290px, rgba(0, 51, 102, 0.95) 0%, rgba(0, 51, 102, 0.55) 35%, rgba(0, 51, 102, 0.15) 70%, rgba(0, 51, 102, 0) 100%), radial-gradient(715px 825px at -624px -750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at -624px 750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at -624px 2250px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 676px -750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 676px 750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 676px 2250px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 1976px -750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 1976px 750px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(715px 825px at 1976px 2250px, rgba(0, 64, 128, 0.95) 0%, rgba(0, 64, 128, 0.55) 35%, rgba(0, 64, 128, 0.15) 70%, rgba(0, 64, 128, 0) 100%), radial-gradient(780px 900px at -364px 330px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), radial-gradient(780px 900px at -364px 1830px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), radial-gradient(780px 900px at 936px 330px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), radial-gradient(780px 900px at 936px 1830px, rgba(0, 26, 51, 0.95) 0%, rgba(0, 26, 51, 0.55) 35%, rgba(0, 26, 51, 0.15) 70%, rgba(0, 26, 51, 0) 100%), linear-gradient(var(--au-navy), var(--au-navy));
	background-size: 1300px 1500px;
	background-repeat: repeat;
}

.team-initials {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-display);
	font-size: clamp(2.5rem, 6vw, 3.5rem);
	font-weight: 600;
	letter-spacing: 0.02em;
	color: rgba(255, 255, 255, 0.92);
	text-shadow: 0 1px 3px rgba(0, 26, 51, 0.35); /* keeps white initials legible on the gold end */
	text-transform: uppercase;
}

.team-photo img {
	position: relative;
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	object-fit: cover;
	transition: transform var(--duration-base) var(--ease-out);
}

.team-photo:hover img {
	transform: scale(1.04);
}

.team-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	line-height: 1.2;
	margin-top: var(--space-4);
}

.team-name a {
	color: var(--au-navy);
	text-decoration: none;
}

.team-name a:hover {
	color: var(--au-gold);
}

.team-role {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.4;
	margin-top: var(--space-1);
	/* long titles stop at three lines; the full one is in the title attribute and on the profile */
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	overflow: hidden;
}

/* a heading between several team grids on one page (e.g. /chhs/faculty/: one grid per school) */
.page-main .team-group {
	margin: var(--space-12) 0 var(--space-6);
	padding-top: var(--space-6);
	border-top: 1px solid var(--au-gray-200);
}

.page-main h1 + .team-group {
	margin-top: var(--space-6);
	padding-top: 0;
	border-top: 0;
}

.team-contact {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	font-size: var(--text-sm);
	color: var(--au-text);
	display: flex;
	flex-direction: column;
	gap: var(--space-1);
}

.team-contact a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.team-contact a:hover {
	color: var(--au-gold);
}

.team-contact .team-appt {
	font-weight: 600;
}

/* ════════════════════════════════════════════════════════════
   individual staff profile  (deptstaffitem.dt) — renders inside .page-main.
   FOUR selectable layouts, chosen per section (index CT) or per person
   (item CT): .staff--feature · .staff--card · .staff--centered · .staff--split.
   Shared pieces first, then per-layout blocks.
   ════════════════════════════════════════════════════════════ */
/* ─── shared: portrait, name, role, facts, links, contact chips, body ─── */
.staff-portrait img {
	display: block;
	width: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	background: var(--au-gray-200);
}

.page-main h1.staff-name {
	margin: 0;
	padding-bottom: 0;
	font-size: var(--text-3xl);
	line-height: 1.05;
	letter-spacing: -0.01em;
	color: var(--au-navy);
}

.page-main h1.staff-name::after {
	display: none;
} /* no page-header gold rule here */
.page-main .staff-role {
	margin: var(--space-2) 0 0;
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	font-size: var(--text-lg);
	line-height: 1.35;
	color: var(--au-navy-light);
}

.page-main .staff-facts {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-base);
}

.staff-facts li {
	display: flex;
	gap: var(--space-4);
}

.staff-facts li > span:last-child {
	min-width: 0;
	overflow-wrap: break-word;
}

.staff-facts .fact-label {
	flex: 0 0 4.5rem;
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--au-warm-gray);
	padding-top: 0.25em;
}

.staff-facts a {
	color: var(--au-navy-light);
	text-decoration: none;
}

.staff-facts a:hover {
	color: var(--au-gold);
}

.page-main .staff-links {
	list-style: none;
	margin: var(--space-4) 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	font-size: var(--text-sm);
}

.staff-links a {
	color: var(--au-navy-light);
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
}

.staff-links a:hover {
	color: var(--au-gold);
}

.staff-links i {
	color: var(--au-gold);
	font-size: 0.85em;
	width: 1em;
	text-align: center;
}

/* contact chips/pills (feature + centered) */
.staff-contact {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3);
}

.staff-contact a {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	font-size: var(--text-sm);
	text-decoration: none;
	padding: var(--space-2) var(--space-4);
	border-radius: var(--radius-full);
	transition: background var(--duration-fast) var(--ease-out);
}

.staff-contact svg {
	width: 15px;
	height: 15px;
	fill: none;
	stroke-width: 1.8;
	flex-shrink: 0;
}

/* appointment button (card + split reuse .btn) */
.staff-appt {
	margin-top: var(--space-6);
}

/* shared prose body — gold Plex-Mono eyebrows on the section headings */
.staff-body {
	margin-top: var(--space-10);
	overflow-wrap: break-word;
}

.page-main .staff-body h2 {
	font-family: var(--font-mono);
	font-weight: 600;
	font-size: var(--text-xs);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--au-gold);
	margin-top: var(--space-8);
	margin-bottom: var(--space-3);
}

.page-main .staff-body > h2:first-child {
	margin-top: 0;
}

.staff-body p {
	line-height: 1.72;
}

/* ─── A · Editorial Feature — navy hero band, gold-framed portrait ─── */
.staff--feature .staff-hero {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-lg);
	padding: var(--space-8);
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-deep));
	color: #fff;
}

.staff--feature .staff-hero::before {
	content: "";
	position: absolute;
	right: -80px;
	top: -80px;
	width: 260px;
	height: 260px;
	border-radius: 50%;
	background: radial-gradient(circle, rgba(232, 184, 75, 0.14), transparent 68%);
}

.staff--feature .staff-hero-inner {
	position: relative;
	display: grid;
	grid-template-columns: 180px 1fr;
	gap: var(--space-8);
	align-items: center;
}

.staff--feature .staff-portrait {
	width: 180px;
}

.staff--feature .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-md);
	border: 3px solid rgba(232, 184, 75, 0.85);
	box-shadow: 0 14px 34px rgba(0, 0, 0, 0.4);
}

.page-main .staff--feature h1.staff-name {
	color: #fff;
	font-size: var(--text-4xl);
	line-height: 1.02;
}

.staff--feature .staff-role {
	color: #e7ddc9;
}

.staff--feature .staff-contact {
	margin-top: var(--space-5);
}

.staff--feature .staff-contact a {
	color: #fff;
	background: rgba(255, 255, 255, 0.09);
	border: 1px solid rgba(255, 255, 255, 0.16);
}

.staff--feature .staff-contact a:hover {
	background: rgba(255, 255, 255, 0.16);
}

.staff--feature .staff-contact svg {
	stroke: var(--au-gold-light);
}

.staff--feature .staff-contact a.is-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
	font-weight: 600;
}

.staff--feature .staff-contact a.is-primary svg {
	stroke: var(--au-navy-deep);
}

.staff--feature .staff-links {
	margin-top: var(--space-6);
}

.staff--feature .staff-body {
	max-width: 70ch;
}

@media (max-width: 560px) {
	.staff--feature .staff-hero-inner {
		grid-template-columns: 1fr;
		justify-items: start;
	}
}
/* ─── B · Contact Card Rail — sticky cream card + scrolling bio ─── */
.staff--card .staff-cols {
	display: grid;
	grid-template-columns: 280px 1fr;
	gap: var(--space-8);
	align-items: start;
	min-width: 0;
}

.staff--card .staff-card {
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-top: 3px solid var(--au-gold);
	border-radius: var(--radius-lg);
	padding: var(--space-5);
	box-shadow: var(--shadow-md);
	position: sticky;
	top: calc(var(--header-height) + var(--space-3));
}

.staff--card .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-md);
	margin-bottom: var(--space-4);
}

.page-main .staff--card h1.staff-name {
	font-size: var(--text-2xl);
}

.staff--card .staff-role {
	font-size: var(--text-md);
}

.staff--card .staff-facts {
	border-top: 1px solid var(--au-gray-200);
	margin-top: var(--space-4);
	padding-top: var(--space-4);
	font-size: var(--text-sm);
}

.staff--card .fact-label {
	flex: 0 0 3.5rem;
}

.staff--card .staff-appt {
	display: flex;
	width: 100%;
	margin-top: var(--space-4);
}

.staff--card .staff-body {
	margin-top: 0;
	min-width: 0;
}

@media (max-width: 720px) {
	.staff--card .staff-cols {
		grid-template-columns: 1fr;
	}
	.staff--card .staff-card {
		position: static;
	}
}
/* ─── C · Centered Portrait — symmetrical, gold corner + flourish ─── */
.staff--centered {
	max-width: 760px;
	margin-inline: auto;
	text-align: center;
}

.staff--centered .staff-portrait {
	position: relative;
	width: 210px;
	margin: 0 auto var(--space-5);
}

.staff--centered .staff-portrait img {
	aspect-ratio: 4/5;
	border-radius: var(--radius-lg);
}

.staff--centered .staff-portrait::after {
	content: "";
	position: absolute;
	right: -12px;
	bottom: -12px;
	width: 64px;
	height: 64px;
	border-right: 3px solid var(--au-gold);
	border-bottom: 3px solid var(--au-gold);
	border-radius: 0 0 var(--radius-lg) 0;
}

.staff--centered .staff-rule {
	width: 44px;
	height: 3px;
	margin: var(--space-4) auto;
	background: var(--au-gold);
	border-radius: 2px;
}

.staff--centered .staff-role {
	color: var(--au-warm-gray);
}

.staff--centered .staff-contact {
	justify-content: center;
	margin-top: var(--space-5);
}

.staff--centered .staff-contact a {
	color: var(--au-navy);
	background: var(--au-gold-pale);
	border: 1px solid #f0e2c4;
}

.staff--centered .staff-contact a:hover {
	background: #fbeecf;
}

.staff--centered .staff-contact svg {
	stroke: var(--au-gold);
}

.staff--centered .staff-contact a.is-primary {
	background: var(--au-navy);
	color: #fff;
	border-color: var(--au-navy);
}

.staff--centered .staff-contact a.is-primary svg {
	stroke: var(--au-gold-light);
}

.staff--centered .staff-body {
	max-width: 62ch;
	margin: var(--space-8) auto 0;
	padding-top: var(--space-8);
	border-top: 1px solid var(--au-gray-200);
	text-align: left;
}

/* ─── D · Split Feature — full-height portrait + cream panel ─── */
.staff--split .staff-top {
	display: grid;
	grid-template-columns: 42% 1fr;
	border-radius: var(--radius-lg);
	overflow: hidden;
}

.staff--split .staff-portrait {
	height: 100%;
}

.staff--split .staff-portrait img {
	height: 100%;
	min-height: 360px;
	border-radius: 0;
}

.staff--split .staff-panel {
	background: var(--au-cream);
	padding: var(--space-8);
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.page-main .staff--split h1.staff-name {
	font-size: var(--text-3xl);
}

.staff--split .staff-role {
	color: var(--au-navy-light);
}

.staff--split .staff-facts {
	margin-top: var(--space-5);
}

.staff--split .staff-appt {
	align-self: start;
}

.staff--split .staff-body {
	max-width: 74ch;
}

@media (max-width: 640px) {
	.staff--split .staff-top {
		grid-template-columns: 1fr;
	}
	.staff--split .staff-portrait img {
		min-height: 300px;
	}
}
/* ════════════════════════════════════════════════════════════
   bio directory — portrait grid  (components/bio.tt)
   Photo-forward people cards: a portrait headshot on top, then name +
   blurb. Auto-fills across the section and reflows down (…→3→2→1) as the
   viewport narrows — no breakpoints needed. Reads as a faculty directory,
   distinct from the columns card grid and the Meet-the-Team portrait grid.
   ════════════════════════════════════════════════════════════ */
/* standalone rich-text intro above the directory (the section's "text" area).
   Band-aware so it reads on dark bands; a readable measure for plain copy. */
.bio-intro {
	max-width: var(--max-width-text);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
	margin-bottom: var(--space-10);
}

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

.bio-intro :is(h1, h2, h3, h4, h5, h6) {
	color: var(--band-heading, var(--au-navy));
}

.bio-intro a {
	color: var(--band-accent, var(--au-navy-light));
}

.bio-intro p + p {
	margin-top: var(--space-4);
}

.bio-directory {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
	gap: var(--space-8) var(--space-6);
}

.bio-entry {
	display: flex;
	flex-direction: column;
}

.bio-photo img {
	display: block;
	width: 100%;
	aspect-ratio: 4/5;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: var(--radius-md);
	background: var(--au-gray-200);
}

.bio-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
	margin-top: var(--space-4);
}

.bio-blurb {
	margin-top: var(--space-2);
	color: var(--band-body, var(--au-warm-gray));
	font-size: var(--text-sm);
	line-height: 1.6;
	overflow-wrap: break-word;
}

.bio-blurb p + p {
	margin-top: var(--space-2);
}

/* single-person bio — horizontal card instead of the portrait-grid column */
.bio-entry:only-child {
	grid-column: 1/-1;
	background: var(--au-cream);
	border-radius: var(--radius-lg);
	padding: var(--space-6);
	max-width: 640px;
}

.bio-entry:only-child .bio-photo img {
	aspect-ratio: 3/4;
}

@media (min-width: 601px) {
	.bio-entry:only-child {
		flex-direction: row;
		gap: var(--space-6);
	}
	.bio-entry:only-child .bio-photo {
		flex: 0 0 200px;
	}
	.bio-entry:only-child .bio-detail {
		min-width: 0;
	}
	.bio-entry:only-child .bio-name {
		margin-top: 0;
	}
}
@media (max-width: 600px) {
	.bio-entry:only-child .bio-photo {
		max-width: 200px;
	}
}
/* bio + split token (Custom Class "split-3-2" / "split-2-3", the same tokens the
   columns grid uses): the people on one side as horizontal cards, the section's
   intro text beside them, as the legacy homepage bio feature laid them out. */
@media (min-width: 761px) {
	:is(.split-3-2, .split-2-3) > .section-inner:has(> .bio-directory) {
		display: grid;
		-moz-column-gap: var(--space-10);
		     column-gap: var(--space-10);
		align-items: start;
	}
	.split-3-2 > .section-inner:has(> .bio-directory) {
		grid-template-columns: 3fr 2fr;
	}
	.split-2-3 > .section-inner:has(> .bio-directory) {
		grid-template-columns: 2fr 3fr;
	}
	:is(.split-3-2, .split-2-3) > .section-inner > .section-head {
		grid-column: 1/-1;
	}
	:is(.split-3-2, .split-2-3) > .section-inner > .bio-directory {
		grid-column: 1;
		grid-row: 2;
	}
	:is(.split-3-2, .split-2-3) > .section-inner > .bio-intro {
		grid-column: 2;
		grid-row: 2;
		margin-bottom: 0;
	}
}
:is(.split-3-2, .split-2-3) .bio-directory {
	grid-template-columns: 1fr;
	gap: var(--space-5);
}

:is(.split-3-2, .split-2-3) .bio-entry {
	flex-direction: row;
	gap: var(--space-5);
	background: var(--au-white);
	border-radius: var(--radius-md);
	padding: var(--space-5);
	max-width: none;
}

:is(.split-3-2, .split-2-3) .bio-photo {
	flex: 0 0 160px;
}

:is(.split-3-2, .split-2-3) .bio-detail {
	min-width: 0;
}

:is(.split-3-2, .split-2-3) .bio-name {
	margin-top: 0;
}

@media (max-width: 480px) {
	:is(.split-3-2, .split-2-3) .bio-photo {
		flex-basis: 110px;
	}
}
/* decorative image-only rows span the whole grid width */
.bio-figure {
	grid-column: 1/-1;
}

.bio-figure img {
	width: 100%;
	border-radius: var(--radius-lg);
}

/* ════════════════════════════════════════════════════════════
   dept.css  ·  department section-page template (dept_main.wrap)
   Depends on: tokens.css, layout.css (.section bands)

   A department variant of the homepage-advanced display: a sticky dark
   navy rail (department identity + section jump-nav + CTAs) beside the
   normal page.dt section stack. Same sections, same content types —
   only the surround differs.

   ONE rail, two states (the demo's separate sidebar + icon-strip are
   merged so there's a single set of markup to maintain):
     ≥1080   full rail, labels visible
     <1080   collapses to a slim dot strip; the toggle opens it as an
             overlay panel over a backdrop
   ════════════════════════════════════════════════════════════ */
:root {
	--dept-rail-w: 250px; /* expanded rail */
	--dept-strip-w: 60px; /* collapsed dot strip */
}

/* ─── LAYOUT ─── */
.dept-layout {
	display: flex;
	align-items: flex-start;
}

.dept-main {
	flex: 1;
	min-width: 0;
}

/* Sections inside the dept column keep the band system but sit in a
   narrower measure, so the inner max-width rarely binds — pull the
   horizontal padding in a little so content isn't crowded to the rail. */
.dept-main .section {
	padding-inline: var(--space-8);
}

.dept-main .section-inner {
	max-width: 1000px;
	margin-inline: 0;
}

/* ─── RAIL ─── */
.dept-rail {
	width: var(--dept-rail-w);
	flex-shrink: 0;
	position: sticky;
	top: var(--header-height);
	height: calc(100vh - var(--header-height));
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.85);
	border-right: 1px solid rgba(255, 255, 255, 0.07);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	z-index: 60;
	transition: width var(--duration-base) var(--ease-out);
}

.dept-rail-scroll {
	flex: 1;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: var(--space-6) 0 var(--space-4);
	scrollbar-width: thin;
	scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
}

.dept-rail-scroll::-webkit-scrollbar {
	width: 6px;
}

.dept-rail-scroll::-webkit-scrollbar-thumb {
	background: rgba(255, 255, 255, 0.2);
	border-radius: 3px;
}

/* department identity */
.dept-id {
	padding: 0 var(--space-5) var(--space-5);
}

.dept-id-eye {
	display: block;
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: var(--space-1);
}

.dept-id-name {
	display: block;
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	line-height: 1.25;
	color: var(--au-white);
}

/* jump-nav */
.dept-nav-title {
	padding: 0 var(--space-5) var(--space-3);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
}

.dept-link {
	display: flex;
	align-items: center;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-5);
	font-size: var(--text-sm);
	line-height: 1.35;
	color: rgba(255, 255, 255, 0.72);
	text-decoration: none;
	border-left: 2px solid transparent;
	transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
}

.dept-link:hover {
	background: rgba(255, 255, 255, 0.06);
	color: var(--au-white);
}

.dept-link.is-current {
	color: var(--au-white);
	font-weight: 600;
	border-left-color: var(--au-gold);
	background: rgba(255, 255, 255, 0.05);
}

/* wayfinding dot — the demo used six hues; kept on-palette here, with the
   active state (gold, filled) carrying the signal instead of colour count */
.dept-dot {
	flex-shrink: 0;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.28);
	transition: background var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);
}

.dept-link.is-current .dept-dot {
	background: var(--au-gold);
	transform: scale(1.25);
}

.dept-link-label {
	min-width: 0;
}

/* rail footer — CTAs + dept mark */
.dept-rail-bottom {
	flex-shrink: 0;
	padding: var(--space-4) var(--space-5) var(--space-5);
	border-top: 1px solid rgba(255, 255, 255, 0.08);
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
}

.dept-cta {
	display: block;
	text-align: center;
	padding: var(--space-3) var(--space-4);
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
	font-weight: 600;
	text-decoration: none;
	border: 2px solid transparent;
	transition: all var(--duration-base) var(--ease-out);
}

.dept-cta-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

.dept-cta-primary:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
}

.dept-cta-ghost {
	color: var(--au-gold-light);
	border-color: rgba(255, 255, 255, 0.3);
}

.dept-cta-ghost:hover {
	background: rgba(255, 255, 255, 0.08);
	border-color: var(--au-gold-light);
	color: var(--au-white);
}

/* institutional lockup at the foot of the rail */
.dept-mark {
	margin-top: var(--space-4);
	opacity: 0.75;
}

.dept-mark img {
	height: 26px;
	width: auto;
}

.dept-mark a:hover {
	opacity: 1;
}

/* toggle — hidden on desktop, becomes the strip control below 1080 */
.dept-rail-toggle {
	display: none;
	align-items: center;
	gap: var(--space-3);
	width: 100%;
	padding: var(--space-4) var(--space-5);
	background: none;
	border: 0;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);
	color: var(--au-white);
	cursor: pointer;
	text-align: left;
}

.dept-ham {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 4px;
	width: 18px;
	flex-shrink: 0;
}

.dept-ham span {
	height: 2px;
	background: currentColor;
	border-radius: 2px;
	transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-base);
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(1) {
	transform: translateY(6px) rotate(45deg);
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(2) {
	opacity: 0;
}

.dept-rail-toggle[aria-expanded=true] .dept-ham span:nth-child(3) {
	transform: translateY(-6px) rotate(-45deg);
}

.dept-toggle-label {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.14em;
	text-transform: uppercase;
}

.dept-backdrop {
	display: none;
	position: fixed;
	inset: 0;
	background: rgba(0, 26, 51, 0.45);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--duration-base), visibility var(--duration-base);
	z-index: 55;
}

body.dept-rail-open .dept-backdrop {
	opacity: 1;
	visibility: visible;
}

/* ─── COLLAPSED STRIP (<1080) ─── */
@media (max-width: 1080px) {
	.dept-rail {
		width: var(--dept-strip-w);
	}
	.dept-rail-toggle {
		display: flex;
	}
	.dept-backdrop {
		display: block;
	}
	/* strip state: dots only */
	.dept-rail .dept-id,
	.dept-rail .dept-nav-title,
	.dept-rail .dept-rail-bottom,
	.dept-rail .dept-link-label,
	.dept-rail .dept-toggle-label {
		display: none;
	}
	.dept-link {
		justify-content: center;
		padding-inline: 0;
	}
	/* expanded overlay */
	.dept-rail.is-open {
		width: var(--dept-rail-w);
		box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
	}
	.dept-rail.is-open .dept-id,
	.dept-rail.is-open .dept-nav-title,
	.dept-rail.is-open .dept-rail-bottom,
	.dept-rail.is-open .dept-link-label,
	.dept-rail.is-open .dept-toggle-label {
		display: block;
	}
	.dept-rail.is-open .dept-rail-bottom {
		display: flex;
	}
	.dept-rail.is-open .dept-link {
		justify-content: flex-start;
		padding-inline: var(--space-5);
	}
	.dept-main .section {
		padding-inline: var(--space-6);
	}
}
/* below the strip's usefulness: rail goes horizontal-free, content leads */
/* Very narrow: the rail STAYS a vertical side strip — it never becomes a
   full-width bar across the top (that's how the demo's icon strip behaves,
   and it keeps the page nav reachable without scrolling back up). Only the
   strip width and the content gutters tighten. */
@media (max-width: 700px) {
	:root {
		--dept-strip-w: 48px;
	}
	.dept-main .section {
		padding-inline: var(--space-5);
	}
	.dept-stats, .dept-enroll {
		padding-inline: var(--space-5);
	}
	/* the expanded overlay leaves a sliver of content + backdrop visible */
	.dept-rail.is-open {
		width: min(var(--dept-rail-w), 78vw);
	}
	.dept-link {
		padding-block: var(--space-3);
	} /* finger-friendly dots */
}
/* ════════════════════════════════════════════════════════════
   stats band  (components/stats.tt · content type `stats`)
   ════════════════════════════════════════════════════════════ */
.stats-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
	gap: var(--space-6);
}

.stat {
	text-align: center;
}

.stat-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3rem;
	height: 3rem;
	margin-bottom: var(--space-3);
	border-radius: var(--radius-full);
	background: var(--band-icon-bg, var(--au-gold-pale));
	color: var(--band-icon-fg, var(--au-gold));
	font-size: var(--text-lg);
}

.stat-num {
	font-family: var(--font-display);
	font-size: var(--text-3xl);
	font-weight: 600;
	line-height: 1;
	color: var(--band-heading, var(--au-navy));
}

.stat-label {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.4;
}

/* on a dark band */
/* ════════════════════════════════════════════════════════════
   CTA bar  (components/cta-bar.tt · content type `cta_bar`)
   A slim full-width band: a message beside an action button.
   ════════════════════════════════════════════════════════════ */
.cta-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-4) var(--space-8);
}

.cta-bar-text {
	flex: 1 1 320px;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	line-height: 1.3;
	color: var(--band-heading, var(--au-navy));
}

.cta-bar .btn {
	flex-shrink: 0;
}

/* ════════════════════════════════════════════════════════════
   TOP CHROME BANDS (dept_main.wrap) — compact strips between the
   hero and the rail, matching the department demo. These are NOT
   .section bands: the demo's are slim (a navy stats strip and a gold
   enrolment bar), where a full .section's 80px rhythm reads far too
   heavy directly under the hero.

   They re-skin the shared .stat* / cta pieces rather than duplicating
   markup, so components/stats.tt keeps its roomier in-flow treatment.
   ════════════════════════════════════════════════════════════ */
/* stats strip — navy, light-on-dark, hairline dividers between cells */
.dept-stats {
	background: var(--au-navy);
	padding: var(--space-5) var(--gutter);
}

.dept-stats-inner {
	max-width: var(--max-width);
	margin-inline: auto;
}

.dept-stats .stats-grid {
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0;
}

.dept-stats .stat {
	padding: var(--space-3) var(--space-5);
	position: relative;
}

.dept-stats .stat + .stat::before {
	content: "";
	position: absolute;
	left: 0;
	top: 18%;
	bottom: 18%;
	width: 1px;
	background: rgba(255, 255, 255, 0.14);
}

/* bare gold glyph — no pale circle chip at this size */
.dept-stats .stat-icon {
	width: auto;
	height: auto;
	margin: 0 auto var(--space-2);
	background: none;
	border-radius: 0;
	color: var(--au-gold);
	font-size: var(--text-lg);
}

.dept-stats .stat-num {
	font-size: var(--text-lg);
	color: var(--au-white);
	margin-bottom: var(--space-1);
}

.dept-stats .stat-label {
	font-size: var(--text-xs);
	color: rgba(255, 255, 255, 0.5);
	line-height: 1.5;
	margin-top: 0;
}

@media (max-width: 760px) {
	.dept-stats .stats-grid {
		grid-template-columns: 1fr;
	}
	.dept-stats .stat + .stat::before {
		left: 18%;
		right: 18%;
		top: 0;
		bottom: auto;
		width: auto;
		height: 1px;
	}
}
/* enrolment bar — slim gold strip, serif message + dark button */
.dept-enroll {
	background: var(--au-gold);
	padding: var(--space-3) var(--gutter);
}

.dept-enroll-inner {
	max-width: var(--max-width);
	margin-inline: auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3) var(--space-5);
}

.dept-enroll-text {
	font-family: var(--font-display);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy-deep);
	line-height: 1.35;
}

.dept-enroll-text small {
	display: block;
	font-family: var(--font-body);
	font-weight: 400;
	font-size: var(--text-xs);
	color: rgba(0, 26, 51, 0.72);
	margin-top: 2px;
}

.dept-enroll .btn {
	flex-shrink: 0;
}

/* ════════════════════════════════════════════════════════════
   variants.css  ·  section style variants
   Depends on: tokens.css, layout.css (.section bands + --band-* tokens)

   Alternate looks for existing content types, selected by a `col-<name>`
   token in a section's custom_class and dispatched by the content type's
   renderer (see components/columns.tt → components/columns/*.tt). One
   content type + one CMS form drives many displays; this file holds their
   markup styling. Add a variant: a components/columns/<name>.tt renderer,
   an entry in columns.tt's variant_map, and a block here.

   Band adaptation is via the --band-* CONTEXT TOKENS layout.css sets on dark
   bands — there are NO per-band selector lists here. The rule of thumb:
     · content sitting on a WHITE card (programs) keeps light-mode colours;
       only the card chrome (border width, shadow) reads the band tokens.
     · content directly on the band, or on a translucent card (careers,
       intro, quote, profile) reads the band tokens for its text too.
   ════════════════════════════════════════════════════════════ */
/* ─── col-programs · program cards (white card; only chrome tracks the band) ───
   Two modes from one renderer: a PHOTO card (badge over image + whole-card
   link) when a photo is uploaded, and a flat TEXT card (gold top rule) when
   it isn't. auto-fit so N items fill the row rather than leaving empty tracks. */
.programs-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: var(--space-6);
}

.program-card {
	display: flex;
	flex-direction: column;
	background: var(--au-white);
	border: var(--band-card-border-w, 1px) solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	overflow: hidden;
	box-shadow: var(--band-card-shadow, none);
	text-decoration: none;
	transition: box-shadow var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out);
}

.program-card:hover {
	box-shadow: var(--band-card-shadow-hover, var(--shadow-md));
	transform: translateY(-2px);
}

/* text card: gold top rule + padded body (media card pads .program-body instead) */
.program-card:not(.program-card--media) {
	border-top: 3px solid var(--au-gold);
	padding: var(--space-6);
}

/* photo header */
.program-img {
	position: relative;
	aspect-ratio: 4/3;
	background: var(--au-gray-200);
}

.program-img img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
	display: block;
}

.program-overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 26, 51, 0.4), transparent 45%);
}

.program-badge {
	position: absolute;
	left: var(--space-4);
	bottom: var(--space-4);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	background: rgba(0, 26, 51, 0.82);
	padding: var(--space-1) var(--space-3);
	border-radius: var(--radius-full);
}

.program-body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: var(--space-6);
}

.program-kicker {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold);
	margin-bottom: var(--space-2);
}

.program-name {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--au-navy);
	line-height: 1.2;
}

.program-name a {
	color: inherit;
	text-decoration: none;
}

.program-name a:hover {
	color: var(--au-navy-light);
}

.program-card--media:hover .program-name {
	color: var(--au-navy-light);
}

.program-desc {
	margin-top: var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.6;
	flex: 1;
}

.program-link {
	margin-top: var(--space-4);
	align-self: flex-start;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-navy-light);
	text-decoration: none;
}

.program-link:hover {
	color: var(--au-gold);
}

/* optional section-header CTA button (leading header card's link) */
.section-head-cta {
	margin-top: var(--space-6);
}

/* media-card CTA — gold mono cue with a nudging chevron */
.program-cta {
	margin-top: var(--space-4);
	display: inline-flex;
	align-items: center;
	gap: var(--space-2);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--au-gold);
}

.program-cta svg {
	width: 13px;
	height: 13px;
	fill: none;
	stroke: currentColor;
	stroke-width: 2.5;
	transition: transform var(--duration-base) var(--ease-out);
}

.program-card--media:hover .program-cta svg {
	transform: translateX(3px);
}

/* ─── col-quote · impact pull-quote (on the band) ─── */
.impact-quote {
	max-width: 760px;
	margin-inline: auto;
	text-align: center;
}

.impact-quote blockquote {
	border: 0;
	margin: 0;
	padding: 0;
	font-family: var(--font-display);
	font-style: italic;
	font-size: clamp(var(--text-xl), 3.5vw, var(--text-3xl));
	line-height: 1.35;
	color: var(--band-heading, var(--au-navy));
}

.impact-quote blockquote p {
	margin: 0;
}

.impact-quote blockquote p + p {
	margin-top: var(--space-3);
}

.impact-quote blockquote::before {
	content: "“";
	display: block;
	font-size: 3rem;
	line-height: 0.6;
	color: var(--au-gold);
	margin-bottom: var(--space-3);
}

.impact-quote figcaption {
	margin-top: var(--space-5);
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
}

.impact-cite-name {
	font-weight: 700;
	color: var(--band-heading, var(--au-navy));
}

.impact-cite-role {
	display: block;
	font-size: var(--text-xs);
	color: var(--band-body, var(--au-warm-gray));
	margin-top: 2px;
}

/* ─── col-intro · split copy + image collage (on the band) ─── */
.intro-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-10);
	align-items: center;
}

.intro-split > .intro-copy:only-child {
	grid-column: 1/-1;
} /* no images → copy spans full width */
.intro-title {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 3.2vw, var(--text-3xl));
	line-height: 1.15;
	color: var(--band-accent, var(--au-navy));
	font-weight: 400;
}

/* muted white eyebrow so the gold headline leads (overrides the band's gold) */
.intro-copy .section-label {
	margin-bottom: var(--space-3);
	color: rgba(255, 255, 255, 0.7);
}

.intro-body {
	margin-top: var(--space-4);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.8;
}

.intro-body p + p {
	margin-top: var(--space-4);
}

.intro-ctas {
	margin-top: var(--space-6);
	display: flex;
	gap: var(--space-4);
	flex-wrap: wrap;
}

/* ghost button on the (dark) intro band: translucent outline, gold on hover */
.intro-ctas .btn-ghost {
	background: transparent;
	color: rgba(255, 255, 255, 0.82);
	border-color: rgba(255, 255, 255, 0.32);
}

.intro-ctas .btn-ghost:hover {
	background: rgba(255, 255, 255, 0.06);
	border-color: var(--au-gold);
	color: var(--au-white);
}

.intro-media {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-3);
}

.intro-img {
	margin: 0;
	border-radius: var(--radius-md);
	overflow: hidden;
	aspect-ratio: 4/3;
	background: var(--au-gray-200);
}

.intro-img img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.intro-img-wide {
	grid-column: span 2;
	aspect-ratio: 16/7;
}

@media (max-width: 820px) {
	.intro-split {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
}
/* ─── col-careers · salary cards (translucent on dark → text tracks the band) ─── */
.career-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: var(--space-5);
}

/* each card is a 2-row subgrid (head / body) sharing the grid's row tracks, so
   the title row sizes to the tallest title in the row — titles collapse to one
   line together when none wrap, and align when one does. The row GAP between
   head and body is the grid's own gap (space-5). */
.career-card {
	display: grid;
	grid-template-rows: subgrid;
	grid-row: span 2;
	background: var(--band-card-bg, var(--au-white));
	border: 1px solid var(--band-card-border, var(--au-gray-200));
	border-radius: var(--radius-lg);
	padding: var(--space-6);
}

.career-deg {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--band-eyebrow, var(--au-gold));
	margin-bottom: var(--space-2);
}

.career-title {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--band-heading, var(--au-navy));
	line-height: 1.2;
}

/* One text area holds salary + source + blurb; the editor marks them up and the
   card styles them to the mockup:
     <strong> (its own line)  → the salary figure: big gold display number
     <em>      (its own line) → the source line: uppercase caps + a hairline under it
     plain paragraph(s)       → the description
   The big-salary treatment is scoped to the FIRST line, so an inline bold inside
   the description stays normal. */
.career-desc {
	font-size: var(--text-sm);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.7;
}

.career-desc p {
	margin: 0;
}

.career-desc p + p {
	margin-top: var(--space-3);
}

.career-desc p:first-child strong, .career-desc p:first-child b {
	display: block;
	font-family: var(--font-display);
	font-weight: 400;
	font-size: var(--text-2xl);
	line-height: 1.1;
	color: var(--band-accent, var(--au-gold));
}

.career-desc em, .career-desc i {
	font-style: normal;
	font-size: var(--text-xs);
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--band-body, var(--au-warm-gray));
}

.career-desc p:has(em), .career-desc p:has(i) {
	border-bottom: 1px solid var(--band-hairline, var(--au-gray-200));
	padding-bottom: var(--space-4);
	margin-bottom: var(--space-4);
}

/* ─── col-media · overlay cards, hover-reveal (self-contained; band-agnostic) ─── */
.col-media .section-head {
	margin-bottom: var(--space-8);
} /* tighter head→cards gap than the 64px default */
.media-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: var(--space-5);
}

.media-card {
	position: relative;
	display: block;
	overflow: hidden;
	border-radius: var(--radius-lg);
	aspect-ratio: 4/3;
	background: linear-gradient(135deg, var(--au-navy), var(--au-navy-light));
	text-decoration: none;
}

.media-card img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.media-overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 26, 51, 0.9) 0%, rgba(0, 26, 51, 0.1) 60%);
}

.media-content {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	padding: var(--space-5);
}

.media-eye {
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--au-gold-light);
	margin-bottom: 2px;
}

.media-name {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	font-weight: 600;
	color: var(--au-white);
}

.media-desc {
	margin-top: var(--space-1);
	font-size: var(--text-sm);
	color: rgba(255, 255, 255, 0.72);
	line-height: 1.55;
	max-height: 0;
	opacity: 0;
	overflow: hidden;
	transition: max-height var(--duration-slow) var(--ease-out), opacity var(--duration-base) var(--ease-out);
}

.media-card:hover .media-desc, .media-card:focus-visible .media-desc {
	max-height: 8rem;
	opacity: 1;
}

@media (hover: none) {
	.media-desc {
		max-height: 8rem;
		opacity: 1;
	}
}
/* ─── col-profile · featured person split (on the band) ─── */
.profile-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--space-10);
	align-items: center;
}

.col-profile.flip .profile-media {
	order: 2;
} /* image to the right */
.profile-media {
	border-radius: var(--radius-lg);
	overflow: hidden;
	aspect-ratio: 4/5;
	background: var(--au-gray-200);
}

.profile-media img {
	width: 100%;
	height: 100%;
	-o-object-fit: cover;
	   object-fit: cover;
}

.profile-copy .section-label {
	margin-bottom: var(--space-3);
}

.profile-name {
	font-family: var(--font-display);
	font-size: clamp(var(--text-2xl), 4vw, var(--text-3xl));
	font-weight: 600;
	line-height: 1.15;
	color: var(--band-heading, var(--au-navy));
}

.profile-cred {
	margin-top: var(--space-1);
	font-size: var(--text-sm);
	letter-spacing: 0.04em;
	color: var(--band-body, var(--au-warm-gray));
}

.profile-bio {
	margin-top: var(--space-4);
	color: var(--band-body, var(--au-warm-gray));
	line-height: 1.8;
}

.profile-bio p + p {
	margin-top: var(--space-4);
}

/* credential sub-line — an italic first line in the bio content (careers-style
   markup): renders small, light and upright, hugging the name. */
.profile-bio:has(> p:first-child em) {
	margin-top: var(--space-2);
}

.profile-bio > p:first-child em {
	font-style: normal;
	font-size: var(--text-sm);
	letter-spacing: 0.04em;
	color: var(--band-body, var(--au-warm-gray));
}

.profile-bio blockquote {
	color: var(--band-quote, var(--au-navy));
}

@media (max-width: 820px) {
	.profile-split {
		grid-template-columns: 1fr;
		gap: var(--space-6);
	}
	.col-profile.flip .profile-media {
		order: 0;
	}
}
/* ════════════════════════════════════════════════════════════
   programs.css  ·  program explorer (search + filters + show-all)
   Depends on: tokens.css, layout.css (--band-* tokens), variants.css
   (.programs-grid / .program-card — the cards are the col-programs cards)
   Markup: components/programs_explorer.tt · behaviour: js/programs.js
   Reads the band tokens, so it works on white, cream or navy bands.
   ════════════════════════════════════════════════════════════ */
.programs-tools {
	display: flex;
	flex-direction: column;
	gap: var(--space-4);
	margin-bottom: var(--space-5);
}

/* search — icon inside the field */
.programs-search {
	position: relative;
	max-width: 560px;
}

.programs-search svg {
	position: absolute;
	left: var(--space-4);
	top: 50%;
	width: 18px;
	height: 18px;
	transform: translateY(-50%);
	fill: none;
	stroke: var(--au-warm-gray);
	stroke-width: 2.5;
	stroke-linecap: round;
	pointer-events: none;
}

.programs-search .input {
	padding-left: calc(var(--space-4) + 28px);
	border-color: var(--band-hairline, var(--au-gray-200));
}

.programs-search .input:focus {
	border-color: var(--au-gold);
}

/* filter chips + area-of-study select share one look */
.programs-filters {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
}

.programs-chip,
.programs-field {
	font-family: var(--font-body);
	font-size: var(--text-xs);
	font-weight: 600;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--band-heading, var(--au-navy));
	background: transparent;
	border: 2px solid var(--band-hairline, var(--au-gray-300));
	border-radius: var(--radius-full);
	padding: var(--space-2) var(--space-4);
	cursor: pointer;
	transition: border-color var(--duration-fast), background var(--duration-fast), color var(--duration-fast);
}

.programs-chip:hover,
.programs-field:hover {
	border-color: var(--band-accent, var(--au-navy));
}

.programs-chip[aria-pressed=true],
.programs-field.is-active {
	background: var(--au-gold);
	border-color: var(--au-gold);
	color: var(--au-navy-deep);
}

.programs-chip:focus-visible,
.programs-field:focus-visible {
	outline: 2px solid var(--au-gold-light);
	outline-offset: 2px;
}

.programs-field {
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	padding-right: calc(var(--space-4) + 16px);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C6952B' stroke-width='3'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right var(--space-3) center;
	background-size: 12px;
}

.programs-field option {
	color: var(--au-text);
	background: var(--au-white);
	text-transform: none;
}

.programs-status {
	min-height: 1.5em;
	margin-bottom: var(--space-4);
	font-family: var(--font-mono);
	font-size: var(--text-xs);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--band-body, var(--au-warm-gray));
}

/* the sheet's images are wide banners — a wider crop than col-programs' 4:3 */
.programs-explorer .program-img {
	aspect-ratio: 16/9;
	overflow: hidden;
}

/* out of flow so a portrait photo (the grad pages' tall_image) can't stretch the frame */
.programs-explorer .program-img img {
	position: absolute;
	inset: 0;
}

/* portrait sources: a centred 16:9 slice lands on chests — favour the upper
   part of the frame, where the faces are */
.programs-explorer .program-img--tall img {
	-o-object-position: 50% 22%;
	   object-position: 50% 22%;
}

.programs-explorer .program-badge {
	max-width: calc(100% - 2 * var(--space-4));
}

.programs-explorer .program-card[hidden] {
	display: none;
}

.program-tags {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
}

.program-tag {
	font-size: var(--text-xs);
	font-weight: 600;
	color: var(--au-navy);
	background: var(--au-cream);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-full);
	padding: 2px var(--space-3);
}

.program-tag--accel {
	color: var(--au-navy-deep);
	background: var(--au-gold-pale);
	border-color: rgba(198, 149, 43, 0.35);
}

.programs-explorer .program-body {
	padding: var(--space-5);
}

.programs-explorer .program-cta {
	margin-top: auto;
	padding-top: var(--space-4);
}

.programs-empty {
	padding: var(--space-6) 0;
	text-align: center;
	color: var(--band-body, var(--au-warm-gray));
}

.programs-empty a {
	color: var(--band-link, var(--au-navy-light));
}

.programs-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--space-4);
	margin-top: var(--space-8);
}

/* outline button that reads on a dark band too */
.programs-explorer .programs-all-link {
	color: var(--band-heading, var(--au-navy));
	border-color: currentColor;
}

.programs-explorer .programs-all-link:hover {
	background: var(--au-navy);
	border-color: var(--au-navy);
	color: var(--au-white);
}

.programs-explorer[class*=section--navy] .programs-all-link:hover {
	background: var(--au-white);
	border-color: var(--au-white);
	color: var(--au-navy-deep);
}

@media (max-width: 600px) {
	/* chips scroll sideways instead of stacking four rows deep */
	.programs-filters {
		flex-wrap: nowrap;
		overflow-x: auto;
		padding: 2px 0;
		scrollbar-width: none;
	}
	.programs-filters::-webkit-scrollbar {
		display: none;
	}
	.programs-chip, .programs-field {
		flex: 0 0 auto;
	}
}
/* ════════════════════════════════════════════════════════════
   program pages  ·  templates/undergrad_program.dt
   (/undergrad/academics/programs/<name>/)
   ════════════════════════════════════════════════════════════ */
.program-lead {
	max-width: 52rem;
	font-family: var(--font-display);
	font-size: clamp(var(--text-lg), 1rem + 1.6vw, var(--text-2xl));
	line-height: 1.4;
	color: var(--au-navy);
}

.program-video {
	margin-top: var(--space-6);
	max-width: 60rem;
}

.program-why .btn-row {
	margin-top: var(--space-6);
}

/* one main CTA mid-page: centered, its natural width */
.program-apply {
	justify-content: center;
}

.program-apply > .btn {
	flex: 0 0 auto;
}

/* subheadings sit a clear step below the section titles */
.program-page .section-inner h3 {
	font-size: var(--text-lg);
	margin-top: var(--space-5);
	margin-bottom: var(--space-2);
}

.program-page .program-alumni h3 {
	margin-top: 0;
}

/* learn-more links: their natural width, side by side */
.program-learn-links > .btn {
	flex: 0 0 auto;
}

.program-learn-links {
	margin-top: var(--space-5);
}

.program-learn .section-title {
	margin-bottom: var(--space-4);
}

/* alumni: a gold rule over each name */
.program-alumni .card {
	border-top: 3px solid var(--au-gold);
	border-radius: 0;
}

.program-alumni .card > .card-body {
	padding-top: var(--space-4);
}

/* salary bars: --w is set inline from the salary's share of the largest */
.salary-bars {
	list-style: none;
	margin: var(--space-3) 0 0;
	padding: 0;
	display: grid;
	gap: var(--space-2);
}

.salary-bars li {
	width: var(--w, 100%);
	display: flex;
	justify-content: space-between;
	gap: var(--space-3);
	padding: var(--space-2) var(--space-3);
	background: var(--au-navy);
	color: var(--au-white);
	border-radius: var(--radius-sm);
	font-size: var(--text-sm);
}

.salary-amount {
	font-weight: 600;
	color: var(--au-gold-light);
	white-space: nowrap;
}

.salary-note {
	margin-top: var(--space-3);
	font-size: var(--text-xs);
	color: var(--au-warm-gray);
}

.salary-note p {
	margin: 0;
}

/* career word cloud: jquery.awesomecloud draws into this box */
.program-wordcloud {
	height: 320px;
}

/* facts: a text carousel, one fact at a time */
.carousel--text {
	aspect-ratio: auto;
	border-radius: 0;
}

.carousel--text .carousel-slide {
	display: flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	padding: 0 var(--space-12) var(--space-8);
}

.program-fact {
	max-width: 46rem;
	text-align: center;
	font-family: var(--font-display);
	font-size: var(--text-xl);
	line-height: 1.5;
	color: var(--au-navy);
}

.program-fact p {
	margin: 0;
}

.carousel--text .carousel-btn {
	box-shadow: none;
	border: 1px solid var(--au-navy);
	background: transparent;
}

.carousel--text .carousel-btn:hover {
	background: var(--au-navy);
	color: var(--au-white);
}

.carousel--text .carousel-dots {
	bottom: 0;
}

.carousel--text .carousel-dot {
	background: rgba(0, 51, 102, 0.25);
}

.carousel--text .carousel-dot.active {
	background: var(--au-navy);
}

@media (max-width: 640px) {
	.carousel--text .carousel-slide {
		padding-inline: 0;
	}
	.carousel--text .carousel-btn {
		display: none;
	}
}
.program-creative-img,
.program-learn-img {
	width: 100%;
	border-radius: var(--radius-lg);
}

.program-creative .video,
.program-creative .carousel,
.program-creative-img {
	max-width: 60rem;
	margin-inline: auto;
}

.program-creative-caption {
	max-width: 46rem;
	margin: var(--space-4) auto 0;
	text-align: center;
}

.program-creative-caption h3 {
	margin-bottom: var(--space-2);
}

/* a list in a centered caption (premed's medical schools) — balanced columns
   without bullets, which would sit stranded at the left of centered text */
.program-creative-caption ul {
	-moz-columns: 3 12rem;
	     columns: 3 12rem;
	-moz-column-gap: var(--space-6);
	     column-gap: var(--space-6);
	list-style: none;
	padding: 0;
	margin-top: var(--space-4);
}

.program-creative-caption li {
	-moz-column-break-inside: avoid;
	     break-inside: avoid;
}

/* phones and small tablets: the program banners are 5:2 photos composed for a
   wide band (subjects off to the sides, a few with a "More For Less" badge in the
   corner). Cover-cropping them to a near-square hero kept only the middle 40%,
   so show the whole photo across the top and put the title on navy below it.
   Wider screens get .hero--ratio (set in undergrad_program.dt): a 5:2 band, the
   whole photo, title over it. (body.program-page = bodyclass in the dt) */
@media (max-width: 760px) {
	body.program-page .hero {
		display: block;
		min-height: 0;
		aspect-ratio: auto; /* undo .hero--ratio's 5:2 box, which would clip the title */
		padding-top: 40%;
		background-size: 100% auto;
		background-position: top center;
	}
	body.program-page .hero::after {
		display: none;
	}
	body.program-page .hero-inner {
		padding: var(--space-5) var(--gutter) var(--space-6);
	}
	body.program-page .hero-title {
		text-shadow: none;
	}
}
/* audio.css · custom audio player styled to the AU design system
   Markup: [data-audio] wrapping an <audio> element
   JS: js/audio.js builds the UI and self-inits via init.js */
.audio-player {
	background: var(--au-navy);
	border-radius: var(--radius-lg);
	color: var(--au-white);
	max-width: 540px;
	margin: var(--space-5) auto;
	box-shadow: var(--shadow-md);
	padding: var(--space-3) var(--space-4);
}

.audio-player-controls {
	display: flex;
	align-items: center;
	gap: var(--space-3);
}

.audio-player-btn {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: var(--radius-full);
	border: 2px solid var(--au-gold);
	background: transparent;
	color: var(--au-gold);
	cursor: pointer;
	transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
	padding: 0;
}

.audio-player-btn:hover,
.audio-player-btn:focus-visible {
	background: var(--au-gold);
	color: var(--au-navy);
	outline: none;
}

.audio-player-btn svg {
	width: 18px;
	height: 18px;
	fill: currentColor;
}

.audio-player-track {
	flex: 1 1 auto;
	min-width: 0;
}

.audio-player-title {
	font-family: var(--font-display);
	font-size: 10px;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
	text-align: center;
	padding-bottom: 4px;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

.audio-player-bar {
	position: relative;
	height: 6px;
	background: rgba(255, 255, 255, 0.2);
	border-radius: var(--radius-full);
	cursor: pointer;
	overflow: hidden;
}

.audio-player-bar:hover {
	height: 8px;
}

.audio-player-fill {
	position: absolute;
	top: 0;
	left: 0;
	height: 100%;
	width: 0%;
	background: var(--au-gold);
	border-radius: var(--radius-full);
	transition: width 80ms linear;
	pointer-events: none;
}

.audio-player-time {
	display: flex;
	justify-content: space-between;
	font-family: var(--font-mono);
	font-size: 11px;
	color: rgba(255, 255, 255, 0.5);
	-webkit-user-select: none;
	   -moz-user-select: none;
	        user-select: none;
	padding-top: 3px;
	line-height: 1;
}

.audio-player-vol {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
}

.audio-player-vol button {
	background: none;
	border: none;
	color: rgba(255, 255, 255, 0.7);
	cursor: pointer;
	padding: 0;
	display: flex;
}

.audio-player-vol button:hover {
	color: var(--au-gold-light);
}

.audio-player-vol svg {
	width: 18px;
	height: 18px;
	fill: currentColor;
}

@media (max-width: 380px) {
	.audio-player {
		padding: var(--space-2) var(--space-3);
	}
	.audio-player-controls {
		gap: var(--space-2);
	}
	.audio-player-btn {
		width: 36px;
		height: 36px;
	}
	.audio-player-vol {
		display: none;
	}
}
/* ════════════════════════════════════════════════════════════
   compat.css  ·  legacy content patterns in authored section bodies
   Depends on: tokens.css
   Covers the CTA bar, Bootstrap grid columns in card bodies, and
   legacy font references. These patterns appear in homepage-advanced
   bodies that can't be safely round-tripped through cms_edit.
   ════════════════════════════════════════════════════════════ */
/* ── Bootstrap grid → flex ──
   Authored card bodies using .row + .col-* get a simple flex layout.
   Covers the Welcome intro (8/4 text+image split) and any similar
   legacy two- or three-column body. */
.card-text > .row,
.card-text > div > .row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	align-items: center; /* text beside an image sits centred on it, like the split tokens */
}

.card-text [class*=col-md-8],
.card-text [class*=col-md-7] {
	flex: 2 1 400px;
	min-width: 0;
}

.card-text [class*=col-md-4],
.card-text [class*=col-md-5] {
	flex: 1 1 240px;
	min-width: 0;
}

.card-text [class*=col-md-6] {
	flex: 1 1 300px;
	min-width: 0;
}

.card-text [class*=col-md-12] {
	flex: 1 1 100%;
}

/* 4-across grid (CTA bar): card-text with col-lg-3 children */
.card-text:has(> [class*=col-lg-3]) {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4);
	align-items: stretch;
}

.card-text > [class*=col-lg-3] {
	flex: 1 1 200px;
	min-width: 0;
	display: flex;
}

/* ── CTA widget ──
   4-across icon+label action blocks on homepages. Legacy markup uses
   .cta + .cta-* with IconSweets-Deluxe icons; restyled for 2027 with
   FA7 icon substitution. Uses !important to win over /css/cta.css,
   which cta-row.tt loads as a <link> after index.css. */
.cta {
	position: relative;
	display: flex !important;
	align-items: center !important;
	justify-content: flex-start !important;
	gap: var(--space-4);
	padding: var(--space-4) var(--space-5) !important;
	background: var(--au-white) !important;
	border-left: 4px solid var(--au-gold) !important;
	border-radius: var(--radius-sm);
	color: var(--au-navy) !important;
	cursor: pointer;
	transition: background var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out);
}

.cta:hover {
	background: var(--au-cream) !important;
	transform: translateY(-2px);
	box-shadow: var(--shadow-sm);
}

/* cta-row.tt wraps everything in ONE <a>; admissions markup uses separate <a>s.
   Handle both: a direct-child <a> that wraps .icon + .cta-title is the content
   wrapper, not a stretched-link anchor — make it flex and strip underline.
   cta-row-buttons.tt adds class="btn btn-gray" to the same <a>; neutralize
   that button styling so the card look wins. */
.cta > a {
	display: flex !important;
	align-items: center;
	gap: var(--space-3);
	text-decoration: none !important;
	color: inherit !important;
	width: 100%;
}

/* admissions markup: separate <a> inside .cta-title → keep pointer-events normal */
.cta > a:only-child {
	flex: 1;
}

/* cta-row-buttons.tt adds .btn.btn-gray to the anchor — strip it back to plain */
.cta > a.btn {
	border: none !important;
	border-radius: 0 !important;
	padding: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
	font-size: inherit !important;
	font-weight: inherit !important;
	letter-spacing: inherit !important;
	text-transform: none !important;
	justify-content: flex-start !important;
}

.cta > a.btn:hover {
	background: transparent !important;
	box-shadow: none !important;
	transform: none !important;
	color: inherit !important;
}

/* icon replacement: IconSweets-Deluxe → FA7 Pro */
.cta .icon {
	display: flex !important;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	float: none !important;
	margin: 0 !important;
}

.cta .icon span {
	display: inline-flex;
	width: 1.5em;
	height: 1.5em;
	align-items: center;
	justify-content: center;
	font-size: var(--text-xl);
	color: transparent !important;
	overflow: hidden;
}

.cta .icon span::before {
	font-family: "Font Awesome 7 Pro";
	font-weight: 900;
	font-size: var(--text-xl);
	line-height: 1;
	color: var(--au-gold) !important;
	-moz-osx-font-smoothing: grayscale;
	-webkit-font-smoothing: antialiased;
}

.cta .icon .icon-safari::before {
	content: "\f14e";
}

.cta .icon .icon-globe2::before {
	content: "\f0ac";
}

.cta .icon .icon-airplane::before {
	content: "\f072";
}

.cta .icon .icon-write::before {
	content: "\f044";
}

.cta .icon .icon-info::before {
	content: "\f05a";
}

.cta .icon .icon-calendar-day::before {
	content: "\f783";
}

.cta .icon a {
	display: contents;
}

/* label — strip cta.css colored backgrounds */
.cta .cta-title {
	font-family: var(--font-display);
	font-weight: 600;
	font-size: var(--text-md);
	line-height: 1.3;
	float: none !important;
	margin-left: 0 !important;
	text-transform: none !important;
	color: var(--au-navy) !important;
}

/* admissions markup has <a> inside .cta-title; cta-row.tt has it outside */
.cta .cta-title a {
	color: var(--au-navy);
	text-decoration: none;
}

.cta .cta-title a:hover {
	color: var(--au-navy-light);
}

.cta .title {
	display: inline !important;
	background: transparent !important;
	color: inherit !important;
	padding: 0 !important;
	margin: 0 !important;
	line-height: 1.3 !important;
	font-weight: 600;
}

/* ── .btn inside .grid: keep natural size, don't stretch as a grid cell ──
   Authored content sometimes wraps sibling buttons in a <div class="grid">.
   .grid > * normally gets flex:1 1 280px (card width), which stretches each
   button to a full row. Override so they size to their own content and can
   sit side-by-side. */
.card-text .grid > .btn,
.card-body .grid > .btn {
	flex: 1 1 0 !important;
	width: 0 !important;
	min-width: 0 !important;
	align-self: flex-start;
}

/* ── pull-left: neutralize in flex contexts ── */
.cta .pull-left,
.card-text .pull-left {
	float: none;
}

/* ── Legacy cta-row.tt: section.columns + Bootstrap container/row ──
   The shared cta-row.tt emits <section class="columns background_color_*">
   with a Bootstrap .container > .row > .col-sm-N grid. Give the band
   the right padding/background and make the row flex. */
section.columns {
	padding: var(--space-12) var(--gutter);
}

section.columns[class*=background_color_cararra-gray],
section.columns[class*=background_color_seashell-gray],
section.columns[class*=background_color_stone] {
	background: var(--au-stone);
}

section.columns[class*=background_color_ecru-white],
section.columns[class*=background_color_cream] {
	background: var(--au-cream);
}

section.columns[class*=background_color_nile-blue],
section.columns[class*=background_color_fiord-blue],
section.columns[class*=background_color_chathams-blue] {
	background: var(--au-navy-deep);
}

section.columns .container {
	max-width: var(--max-width);
	margin-inline: auto;
}

section.columns .container > .row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-6);
	justify-content: center;
}

section.columns .container > .row > [class*=col-] {
	flex: 1 1 200px;
	min-width: 0;
}

/* ── Legacy thread.tt: the programs carousels (/undergrad/academics/) ──
   code/templates/thread.tt is shared with the live site and brings its own
   carousel CSS/JS (thread-style.css, programs-thread.js); it emits
   <section class="programs-thread-section background_color_*"> + a Bootstrap
   .container/.row. Restore the legacy band around it: the darkest navy, gold
   sans headings, the close-top/close-bottom seams between stacked threads. */
section.programs-thread-section {
	background: var(--au-navy-deep);
	color: rgba(255, 255, 255, 0.85);
	padding: var(--space-10) var(--gutter);
	--band-heading: var(--au-white);
	--band-body: rgba(255, 255, 255, 0.66);
}

section.programs-thread-section.close-top {
	padding-top: var(--space-5);
}

section.programs-thread-section.close-bottom {
	padding-bottom: var(--space-5);
}

section.programs-thread-section .container {
	max-width: var(--max-width);
	margin-inline: auto;
}

section.programs-thread-section h2 {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-3) var(--space-4);
	font-family: var(--font-sans);
	font-size: var(--text-2xl);
	font-weight: 600;
	color: var(--au-gold);
	margin-bottom: var(--space-4);
}

/* keep the legacy carousel's own small outline buttons and tile type (the 2027
   .btn is larger, uppercase and filled) */
section.programs-thread-section .btn {
	padding: 6px 12px;
	font-size: 14px;
	text-transform: none;
	letter-spacing: 0;
	border-width: 1px;
	min-height: 0;
}

section.programs-thread-section .thread-expand-button {
	background: transparent;
	color: var(--au-gold);
	border-color: var(--au-gold);
}

section.programs-thread-section .thread-expand-button:hover {
	background: var(--au-gold);
	color: var(--au-navy-deep);
}

section.programs-thread-section .programs-tile-body h4 {
	font-family: var(--font-sans);
	font-size: 18px;
	color: #fff;
}

/* ── Inline disclosure embed (replaces Bootstrap modals for iframes) ── */
.transfer-embed {
	max-height: 0;
	overflow: hidden;
	transition: max-height 0.4s ease;
}

.transfer-embed.is-open {
	max-height: 500px;
}

/* ── Bootstrap .modal → 2027 overlay ──
   Legacy pages use .modal divs with data-toggle/data-dismiss.
   modal.js adds/removes .is-open; CSS controls visibility. */
.modal {
	display: none;
	position: fixed;
	inset: 0;
	z-index: 2000;
	overflow-y: auto;
	overscroll-behavior: contain;
	background: rgba(0, 31, 63, 0.6);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
	padding: var(--space-8) var(--gutter);
}

.modal.is-open {
	display: flex;
	align-items: flex-start;
	justify-content: center;
}

.modal-dialog {
	background: var(--au-white);
	border-radius: var(--radius-lg);
	max-width: 720px;
	width: 100%;
	margin: auto;
	box-shadow: var(--shadow-xl);
	overflow: hidden;
}

.modal-content {
	padding: var(--space-6) !important;
}

/* header: manually-authored photo + name div (legacy profiles page markup) —
   only applies when the first child is NOT the auto-injected header */
.modal-content > div:first-child:not(.modal-auto-header) {
	display: flex;
	gap: var(--space-5);
	align-items: flex-start;
	margin-bottom: var(--space-5);
}

.modal-content > div:first-child:not(.modal-auto-header) > div:first-child img {
	width: 100px;
	height: 100px;
	-o-object-fit: cover;
	   object-fit: cover;
	border-radius: 50%;
	display: block;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child {
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child h2 {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	color: var(--au-navy);
	margin: 0 0 var(--space-2);
	font-weight: 600;
}

.modal-content > div:first-child:not(.modal-auto-header) > div:last-child p {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	line-height: 1.5;
}

/* .card-subtitle — a plain muted line under the card title (program, year, role).
   No gold/uppercase treatment; pulled into the modal header as the subtitle. */
.card-subtitle {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	line-height: 1.4;
}

/* auto-header injected by modal.js — photo circle + name + subtitle row */
.modal-auto-header {
	display: flex;
	gap: var(--space-5);
	align-items: flex-start;
	padding-bottom: var(--space-5);
	margin-bottom: var(--space-5);
	border-bottom: 1px solid var(--au-gray-200);
}

.modal-auto-photo {
	width: 100px;
	height: 100px;
	border-radius: 50%;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
	flex-shrink: 0;
	display: block;
}

.modal-auto-text {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: var(--space-1);
}

.modal-auto-name {
	font-family: var(--font-display);
	font-size: var(--text-xl);
	font-weight: 600;
	color: var(--au-navy);
	margin: 0;
	line-height: 1.2;
}

.modal-auto-subtitle {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	margin: 0;
	font-style: italic;
	line-height: 1.4;
}

/* strip &nbsp; spacer divs used as horizontal rules */
.modal-content [style*=border-top] {
	border: none !important;
	border-top: 1px solid var(--au-gray-200) !important;
	margin: var(--space-5) 0 !important;
	height: 0 !important;
}

/* story body */
.modal-body {
	font-size: var(--text-sm);
	line-height: 1.75;
	color: var(--au-text);
}

.modal-body p {
	margin-top: var(--space-3);
}

.modal-body p:first-child {
	margin-top: 0;
}

/* h3 section headings get a divider line above them automatically —
   no need for manual <hr> or border-top divs in the modal markup */
.modal-body h3 {
	font-family: var(--font-display);
	font-size: var(--text-base);
	font-weight: 600;
	color: var(--au-navy);
	margin: var(--space-6) 0 var(--space-2);
	padding-top: var(--space-6);
	border-top: 1px solid var(--au-gray-200);
}

/* first h3 in the body — no divider above it whether the h3 is a direct child
   or wrapped in a plain div (the original markup wrapped each section in <div>) */
.modal-body h3:first-child,
.modal-body > div:first-child > h3:first-child {
	margin-top: 0;
	padding-top: 0;
	border-top: none;
}

/* standard close row — .modal-footer (preferred) or legacy [align="right"] */
.modal-footer {
	display: flex;
	justify-content: flex-end;
	padding-top: var(--space-5);
	margin-top: var(--space-5);
	border-top: 1px solid var(--au-gray-200);
}

.modal-content [align=right] {
	margin-top: var(--space-5);
	text-align: right;
}

[data-dismiss=modal] {
	cursor: pointer;
}

/* X close button — injected by modal.js into .modal-content top-right */
.modal-content {
	position: relative;
}

.modal-close-x {
	position: absolute;
	top: var(--space-4);
	right: var(--space-4);
	background: none;
	border: none;
	color: var(--au-warm-gray);
	cursor: pointer;
	font-size: var(--text-lg);
	padding: var(--space-2);
	line-height: 1;
	z-index: 1;
}

.modal-close-x:hover {
	color: var(--au-navy);
}

/* ── Profile portrait + button grid ──
   .feature-inner wraps alternating portrait rows and button rows in authored
   profile pages. layout.css uses literal 280px, so override flex directly.
   150px fits 3 per row at 500px wide sidebar content (3×150 + 2×24gap = 498px).
   Selector covers both portrait grids and adjacent button-row grids. */
.page-main .feature-inner .grid > div {
	flex: 1 1 150px !important;
	min-width: 0;
}

.page-main .grid:has(> div > img) > div {
	flex: 1 1 150px !important;
}

.page-main .grid > div:has(> img) {
	background: var(--au-white);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
	display: flex;
	flex-direction: column;
}

.page-main .grid > div:has(> img) > img {
	width: 100%;
	aspect-ratio: 1/1;
	-o-object-fit: cover;
	   object-fit: cover;
	-o-object-position: top;
	   object-position: top;
}

.page-main .grid > div:has(> img) > h2 {
	font-family: var(--font-display);
	font-size: var(--text-lg);
	color: var(--au-navy);
	font-weight: 600;
	margin: 0;
	padding: var(--space-4) var(--space-4) var(--space-1);
}

.page-main .grid > div:has(> img) > p.description {
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
	line-height: 1.5;
	margin: 0;
	padding: 0 var(--space-4) var(--space-4);
}

/* profile "read story" button rows: full-width buttons, text wraps */
.page-main .grid > div > p > button.btn-lg {
	width: 100%;
	justify-content: center;
	white-space: normal;
	text-align: center;
	line-height: 1.3;
	min-height: 3.5rem;
}

@media (max-width: 600px) {
	.modal {
		padding: var(--space-4) var(--space-3);
	}
	.modal-content {
		padding: var(--space-5) !important;
	}
	.modal-content > div:first-child {
		flex-direction: column;
	}
	.modal-content > div:first-child > div:first-child img {
		width: 80px;
		height: 80px;
	}
}
/* ── Bootstrap form classes → 2027 styles ──
   Forms authored with Bootstrap .form-group / .form-control / .checkbox.
   Maps to the same visual result as forms.css .input/.select/.label. */
.form-group {
	margin-bottom: var(--space-5);
}

.form-group > label {
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-2);
}

.form-control {
	width: 100%;
	font-family: var(--font-body);
	font-size: var(--text-base);
	color: var(--au-text);
	background: var(--au-white);
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-3) var(--space-4);
	outline: none;
	transition: border-color var(--duration-base);
	box-sizing: border-box;
}

.form-control:focus {
	border-color: var(--au-gold);
}

select.form-control {
	cursor: pointer;
}

textarea.form-control {
	resize: vertical;
	min-height: 120px;
}

/* Bootstrap .checkbox: div.checkbox > label > input[type=checkbox] + text.
   forms.css treats .checkbox as a 20×20px custom input, but Bootstrap uses it
   as a wrapper DIV. Override size on div.checkbox so the label can be full height. */
div.checkbox {
	width: auto !important;
	height: auto !important;
	margin: var(--space-2) 0;
}

div.checkbox label {
	display: flex !important;
	align-items: flex-start;
	gap: var(--space-3);
	font-weight: 400;
	cursor: pointer;
	padding-left: 0 !important;
}

.checkbox input[type=checkbox] {
	position: static !important;
	margin: 2px 0 0 !important;
	flex-shrink: 0;
	width: 1rem;
	height: 1rem;
	accent-color: var(--au-gold);
	cursor: pointer;
}

/* scrollable checkbox container */
.programs-wrapper {
	border: 2px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	padding: var(--space-4);
	max-height: 280px;
	overflow-y: auto;
}

.programs-wrapper strong {
	display: block;
	font-size: var(--text-xs);
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--au-navy);
	margin: var(--space-3) 0 var(--space-2);
}

.programs-wrapper strong:first-child {
	margin-top: 0;
}

.programs-wrapper hr {
	border: none;
	border-top: 1px solid var(--au-gray-200);
	margin: var(--space-3) 0;
}

/* helper text + required asterisk */
.text-danger {
	color: var(--au-error);
}

.text-muted {
	color: var(--au-warm-gray);
	font-size: var(--text-xs);
	font-weight: 400;
}

/* ── CKEditor text-align:center on <p> containing an img ──
   CKEditor centers images by setting text-align:center on the wrapping <p>.
   base.css makes img display:block, which ignores text-align — translate to
   margin:auto so the author's intent is honored. */
p[style*="text-align: center"] > img,
p[style*="text-align:center"] > img {
	margin-inline: auto;
}

/* ── Legacy font references ──
   AkkuratLight was the old site's body font, not loaded in 2027. Override
   to the design-system stack so the text doesn't fall to a random serif. */
[style*=AkkuratLight],
[style*=Akkurat] {
	font-family: var(--font-body) !important;
}

/* ── Bootstrap responsive embed (.embed-responsive) ──
   Legacy content wraps YouTube/Vimeo iframes in this; Bootstrap's CSS
   isn't loaded on the 2027 chain so the iframe collapses. */
.embed-responsive {
	position: relative;
	display: block;
	width: 100%;
	padding: 0;
	overflow: hidden;
}

.embed-responsive::before {
	content: "";
	display: block;
}

.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

.embed-responsive-16by9::before {
	padding-top: 56.25%;
}

.embed-responsive-4by3::before {
	padding-top: 75%;
}

.embed-responsive-1by1::before {
	padding-top: 100%;
}

/* ── img-responsive (Bootstrap) ── */
.card-text .img-responsive {
	max-width: 100%;
	height: auto !important;
}

/* ── responsive ── */
@media (max-width: 760px) {
	.card-text > .row,
	.card-text > div > .row {
		gap: var(--space-4);
	}
	.card-text:has(> [class*=col-lg-3]) {
		gap: var(--space-3);
	}
	.card-text > [class*=col-lg-3] {
		flex-basis: calc(50% - var(--space-3));
	}
	section.columns .container > .row {
		gap: var(--space-3);
	}
	section.columns .container > .row > [class*=col-] {
		flex-basis: calc(50% - var(--space-3));
	}
}
@media (max-width: 480px) {
	.card-text > [class*=col-lg-3] {
		flex-basis: 100%;
	}
	section.columns .container > .row > [class*=col-] {
		flex-basis: 100%;
	}
}
/* ── Hand-built breadcrumbs ──
   Legacy section pages carry a "Breadcrumbs" columns section (Custom Class
   "breadcrumbs") whose card body is a .breadcrumb-container of .crumb divs
   separated by .delimiter divs ("&gt;") and Bootstrap .mobile-delimiter spacers.
   Unstyled they stack as a list of links; lay them out as one compact trail
   in the 2027 crumb look and slim the band to fit. */
.section.breadcrumbs {
	padding-block: var(--space-4);
}

.section.breadcrumbs .card,
.section.breadcrumbs .card-body {
	padding: 0;
}

.breadcrumb-container {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: var(--space-1) var(--space-2);
	font-size: var(--text-sm);
	color: var(--au-warm-gray);
}

.breadcrumb-container .mobile-delimiter {
	display: none;
}

.breadcrumb-container .delimiter {
	font-size: 0;
}

.breadcrumb-container .delimiter::before {
	content: "›";
	font-size: var(--text-sm);
	color: var(--au-gray-400);
}

.breadcrumb-container .crumb a {
	color: var(--au-navy-light);
}

.breadcrumb-container .crumb-leaf {
	color: var(--au-navy);
	font-weight: 600;
}

/* ── Bootstrap 3 bits authored inside section bodies ──
   Hand-written section content (e.g. /life/housing/timberridge/) still uses
   Bootstrap's buttons, alerts, panels and responsive embeds. Map them onto the
   2027 look so they don't fall back to bare text or zero-height iframes. */
.card-text .btn-blue,
.card-text .btn-primary {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

.card-text .btn-blue:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
}

.card-text .btn-default {
	background: transparent;
	color: var(--au-navy);
	border-color: var(--au-navy);
}

.card-text .btn-default:hover {
	background: var(--au-navy);
	color: var(--au-white);
}

.card-text p:not(.btn-row) > .btn + .btn {
	margin-left: var(--space-3);
}

.card-text .alert {
	margin-block: var(--space-4);
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	background: var(--au-cream);
	border-left: 3px solid var(--au-gold);
}

.card-text .alert-warning {
	background: var(--au-gold-pale);
	color: #6e5418;
}

.card-text .alert-info {
	background: var(--au-cream);
}

.card-text .alert :is(h2, h3, h4) {
	color: inherit;
	margin-top: 0;
}

.card-text .panel {
	margin-block: var(--space-3);
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-md);
	background: var(--au-white);
}

.card-text .panel-body {
	padding: var(--space-4) var(--space-5);
}

.card-text .embed-responsive {
	position: relative;
	width: 100%;
	aspect-ratio: 16/9;
	overflow: hidden;
	border-radius: var(--radius-md);
}

.card-text .embed-responsive-4by3 {
	aspect-ratio: 4/3;
}

.card-text .embed-responsive-item {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

.card-text .small {
	font-size: var(--text-xs);
}

.card-text .text-muted {
	color: var(--au-warm-gray);
}

/* legacy `btn-gold` (CKEditor-authored, e.g. the /faith/missions/ "Apply Here")
   -- the 2027 gold button. Without it the link renders as bare gold text. */
.btn.btn-gold {
	background: var(--au-gold);
	color: var(--au-navy-deep);
	border-color: var(--au-gold);
}

.btn.btn-gold:hover {
	background: var(--au-gold-light);
	border-color: var(--au-gold-light);
	color: var(--au-navy-deep);
}

/* legacy blog-blocks-rule.dt (agenda feed as a post list, e.g. /faith/events.html):
   the thumbnail sat in a Bootstrap col-md-3 floated beside the post. Restore the
   float so the photo stays a thumbnail instead of a full-width centred poster. */
.agenda-feed-blog .post-image {
	margin-bottom: var(--space-4);
}

.agenda-feed-blog .post-image img {
	max-height: none;
}

.agenda-feed-blog h3 {
	margin-top: 0;
}

.agenda-feed-blog h3 a {
	text-decoration: none;
}

.agenda-feed-blog h5 {
	margin: var(--space-1) 0 var(--space-3);
	font-family: var(--font-body);
	font-size: var(--text-sm);
	font-weight: 400;
	color: var(--au-gold);
}

.agenda-feed-blog .clearfix {
	clear: both;
}

.agenda-feed-blog .clearfix hr {
	margin: var(--space-5) 0;
}

@media (min-width: 768px) {
	.agenda-feed-blog .post-image {
		float: left;
		width: 25%;
		padding-right: var(--space-5);
	}
}
/* legacy `.top-button-menu` (CKEditor-authored program menu on the School of
   Leadership pages, styled by a folder specific.css the 2027 chain doesn't load):
   a row of navy tiles that wraps on narrow screens. The &nbsp;s between the
   links collapse into the flex gap. */
.top-button-menu {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2);
	margin-block: var(--space-4);
	font-size: 0;
}

.top-button-menu a {
	flex: 1 1 110px;
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 60px;
	padding: var(--space-2) var(--space-3);
	border-radius: var(--radius-md);
	background: var(--au-navy);
	color: var(--au-white);
	font-size: var(--text-sm);
	font-weight: 600;
	letter-spacing: 0.04em;
	line-height: 1.2;
	text-align: center;
	text-decoration: none;
}

.top-button-menu a:hover {
	background: var(--au-navy-deep);
	color: var(--au-white);
}

/* ════════════════════════════════════════════════════════════
   clickdimensions.css  ·  ClickDimensions forms in the 2027 look
   A ClickDimensions form (`data-cd-widget-container="form"`) is drawn
   client-side by SurveyJS: root `.sd-root-modern`, themed by `--sjs-*`
   custom properties the embed writes as INLINE styles on that root. Inline
   beats any stylesheet rule, so the variable overrides need !important.
   The embed itself stays untouched -- this only restyles what it draws.
   First used on /apply/request/.
   ════════════════════════════════════════════════════════════ */
[data-cd-widget-container] .sd-root-modern {
	--sjs-font-family: var(--font-body) !important;
	--sjs-font-size: 16px !important;
	--sjs-corner-radius: var(--radius-md) !important;
	--sjs-base-unit: 8px !important;
	--sjs-general-backcolor: var(--au-white) !important;
	--sjs-general-backcolor-dark: var(--au-cream) !important;
	--sjs-general-backcolor-dim: transparent !important;
	--sjs-general-backcolor-dim-light: var(--au-white) !important;
	--sjs-general-backcolor-dim-dark: var(--au-cream) !important;
	--sjs-general-forecolor: var(--au-text) !important;
	--sjs-general-forecolor-light: var(--au-warm-gray) !important;
	--sjs-general-dim-forecolor: var(--au-text) !important;
	--sjs-general-dim-forecolor-light: var(--au-warm-gray) !important;
	--sjs-primary-backcolor: var(--au-navy) !important;
	--sjs-primary-backcolor-dark: var(--au-navy-deep) !important;
	--sjs-primary-backcolor-light: rgba(198,149,43,0.15) !important;
	--sjs-primary-forecolor: var(--au-white) !important;
	--sjs-secondary-backcolor: var(--au-gold) !important;
	--sjs-secondary-backcolor-light: rgba(198,149,43,0.25) !important;
	--sjs-secondary-backcolor-semi-light: rgba(198,149,43,0.1) !important;
	--sjs-special-yellow: var(--au-gold) !important;
	--sjs-special-yellow-light: var(--au-gold-pale) !important;
	--sjs-special-red: var(--au-error) !important;
	--sjs-special-red-light: rgba(184,50,50,0.08) !important;
	--sjs-border-default: var(--au-gray-300) !important;
	--sjs-border-light: var(--au-gray-200) !important;
	--sjs-border-inside: var(--au-gray-200) !important;
	--sjs-shadow-small: none !important;
	--sjs-shadow-medium: var(--shadow-md) !important;
	--sjs-shadow-inner: none !important;
	--sjs-shadow-inner-reset: none !important;
	--sjs-font-questiontitle-size: var(--text-sm) !important;
	--sjs-font-questiontitle-color: var(--au-text) !important;
	--sjs-font-questiondescription-size: var(--text-sm) !important;
	--sjs-font-questiondescription-color: var(--au-warm-gray) !important;
	--sjs-font-editorfont-size: var(--text-base) !important;
	--sjs-font-editorfont-color: var(--au-text) !important;
	--sjs-font-editorfont-placeholdercolor: var(--au-warm-gray) !important;
	--sjs-font-surveytitle-family: var(--font-display) !important;
	--sjs-font-headertitle-family: var(--font-display) !important;
	--sjs-font-headertitle-color: var(--au-navy) !important;
	--sjs-font-headerdescription-color: var(--au-warm-gray) !important;
	--sjs-font-headerdescription-weight: 400 !important;
	--sjs-font-pagedescription-color: var(--au-warm-gray) !important;
	font-family: var(--font-body);
	background: var(--au-cream) !important;
	border: 1px solid var(--au-gray-200);
	border-radius: var(--radius-lg);
	overflow: hidden;
}

/* header: the embed's faint campus-sketch tile and centered display type
   become a plain 2027 card header */
[data-cd-widget-container] .sd-root-modern .sv-header__background-image {
	display: none;
}

[data-cd-widget-container] .sd-root-modern .sv-header {
	background: transparent !important;
}

/* the header is a 3x3 grid with the text in the centre cell: drop the empty
   cells and let the text run the card's full width, left-aligned */
[data-cd-widget-container] .sd-root-modern .sv-header__content {
	display: block !important;
	padding: var(--space-6) var(--space-6) 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__cell--empty {
	display: none !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__cell {
	width: auto !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__cell-content {
	align-items: flex-start !important;
	text-align: left !important;
	max-width: none !important;
	padding: 0 !important;
	gap: var(--space-2) !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__title,
[data-cd-widget-container] .sd-root-modern .sv-header__title .sv-string-viewer {
	font-family: var(--font-display) !important;
	font-size: var(--text-2xl) !important;
	font-weight: 400 !important;
	line-height: 1.2 !important;
	color: var(--au-navy) !important;
	text-align: left !important;
}

[data-cd-widget-container] .sd-root-modern .sv-header__description,
[data-cd-widget-container] .sd-root-modern .sv-header__description .sv-string-viewer {
	font-family: var(--font-body) !important;
	font-size: var(--text-base) !important;
	font-weight: 400 !important;
	line-height: 1.5 !important;
	color: var(--au-warm-gray) !important;
	text-align: left !important;
}

/* body: no per-question white frames -- fields sit straight on the card */
[data-cd-widget-container] .sd-root-modern .sd-body,
[data-cd-widget-container] .sd-root-modern .sd-body.sd-body--responsive {
	padding: var(--space-5) var(--space-6) var(--space-6) !important;
	max-width: none !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--with-frame {
	background: transparent !important;
	box-shadow: none !important;
	border: 0 !important;
	padding: 0 !important;
	margin: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-page {
	padding: 0 !important;
}

/* a row's cells are SurveyJS wrappers sized flex: 1 1 50% with their own
   padding-left gutter, so no column-gap here (it would wrap every pair) */
[data-cd-widget-container] .sd-root-modern .sd-row {
	margin-top: var(--space-4) !important;
	row-gap: var(--space-4);
}

[data-cd-widget-container] .sd-root-modern .sd-row:first-child {
	margin-top: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-row > .sd-row__question {
	margin-left: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-question__title {
	font-weight: 600;
}

/* a composite field whose title the form hides (the phone panel) would
   otherwise be two bare boxes: label it with the question's own name */
[data-cd-widget-container] .sd-root-modern .sd-element--complex[data-name]:not(:has(> .sd-question__header))::before {
	content: attr(data-name);
	display: block;
	font-size: var(--text-sm);
	font-weight: 600;
	color: var(--au-text);
	margin-bottom: var(--space-1);
}

[data-cd-widget-container] .sd-root-modern .sd-element--complex,
[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-panel__content {
	padding: 0 !important;
}

/* the embed's own nested !important rule pads the composite's top with this
   var; zero the var, since its selector outranks ours */
[data-cd-widget-container] .sd-root-modern .sd-element--complex.sd-element--with-frame {
	--sd-base-vertical-padding: 0px !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-row {
	flex-wrap: nowrap !important;
	margin-top: 0 !important;
}

/* country code fixed and narrow, number takes the rest (the cells are the
   SurveyJS wrapper divs with inline flex/max-width) */
[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-row > div:first-child {
	flex: 0 0 calc(var(--cd-code-width, 9.5rem) + 40px) !important;
	max-width: none !important;
	min-width: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--complex .sd-row > div + div {
	flex: 1 1 auto !important;
	max-width: none !important;
	min-width: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-element--nested {
	padding: 0 !important;
	margin: 0 !important;
}

/* side-by-side fields line up on their inputs when only one has a label */
[data-cd-widget-container] .sd-root-modern .sd-page > .sd-row {
	align-items: flex-end;
}

/* inputs = .input from forms.css */
[data-cd-widget-container] .sd-root-modern .sd-input {
	font-family: var(--font-body) !important;
	font-size: var(--text-base) !important;
	color: var(--au-text);
	background: var(--au-white) !important;
	border: 2px solid var(--au-gray-200) !important;
	border-radius: var(--radius-md) !important;
	box-shadow: none !important;
	padding: var(--space-3) var(--space-4) !important;
	box-sizing: border-box !important;
	width: 100% !important;
	height: 3.25rem !important;
	min-height: 0 !important;
	line-height: 1.5 !important;
	transition: border-color var(--duration-base);
}

[data-cd-widget-container] .sd-root-modern textarea.sd-input,
[data-cd-widget-container] .sd-root-modern .sd-comment {
	height: auto !important;
	min-height: 7rem !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown {
	display: flex !important;
	align-items: center;
}

[data-cd-widget-container] .sd-root-modern .sd-input::-moz-placeholder, [data-cd-widget-container] .sd-root-modern .sd-dropdown__filter-string-input::-moz-placeholder {
	color: var(--au-warm-gray);
	opacity: 1;
}

[data-cd-widget-container] .sd-root-modern .sd-input::placeholder,
[data-cd-widget-container] .sd-root-modern .sd-dropdown__filter-string-input::placeholder {
	color: var(--au-warm-gray);
	opacity: 1;
}

[data-cd-widget-container] .sd-root-modern .sd-input:focus,
[data-cd-widget-container] .sd-root-modern .sd-input:focus-within,
[data-cd-widget-container] .sd-root-modern .sd-input.sd-input--focused {
	border-color: var(--au-gold) !important;
	box-shadow: none !important;
	outline: none;
}

[data-cd-widget-container] .sd-root-modern .sd-input.sd-input--error,
[data-cd-widget-container] .sd-root-modern .sd-question--error .sd-input {
	border-color: var(--au-error) !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown {
	padding-right: var(--space-6) !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown > * {
	min-height: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-dropdown__value {
	font-size: var(--text-base) !important;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

[data-cd-widget-container] .sd-root-modern .sd-question__erbox {
	font-size: var(--text-sm);
	color: var(--au-error);
	background: transparent !important;
	padding: var(--space-1) 0 0 !important;
	margin: 0 !important;
}

/* footer: the submit is the gold .btn-primary */
[data-cd-widget-container] .sd-root-modern .sd-footer,
[data-cd-widget-container] .sd-root-modern .sd-body__navigation {
	padding: var(--space-5) 0 0 !important;
	margin: 0 !important;
}

[data-cd-widget-container] .sd-root-modern .sd-btn,
[data-cd-widget-container] .sd-root-modern .sd-navigation__next-btn,
[data-cd-widget-container] .sd-root-modern .sd-navigation__complete-btn {
	font-family: var(--font-body) !important;
	font-weight: 700 !important;
	font-size: var(--text-sm) !important;
	letter-spacing: 1.5px;
	text-transform: uppercase;
	line-height: 1.2 !important;
	color: var(--au-navy-deep) !important;
	background: var(--au-gold) !important;
	border: 2px solid var(--au-gold) !important;
	border-radius: var(--radius-md) !important;
	box-shadow: none !important;
	padding: var(--space-4) var(--space-6) !important;
	min-width: 0 !important;
	width: auto;
	max-width: 100%;
	box-sizing: border-box !important;
	white-space: normal !important;
	transition: background var(--duration-fast), box-shadow var(--duration-fast);
}

[data-cd-widget-container] .sd-root-modern .sd-btn:hover {
	background: var(--au-gold-light) !important;
	border-color: var(--au-gold-light) !important;
	box-shadow: 0 4px 16px rgba(198, 149, 43, 0.35) !important;
}

[data-cd-widget-container] .sd-root-modern .sd-btn:focus-visible {
	outline: 2px solid var(--au-navy);
	outline-offset: 2px;
}

/* the "thank you" panel after submit */
[data-cd-widget-container] .sd-root-modern .sd-completedpage {
	font-family: var(--font-body) !important;
	color: var(--au-text) !important;
	padding: var(--space-6) !important;
}

@media (max-width: 600px) {
	[data-cd-widget-container] .sd-root-modern .sv-header__content {
		padding: var(--space-5) var(--space-4) 0 !important;
	}
	[data-cd-widget-container] .sd-root-modern .sd-body,
	[data-cd-widget-container] .sd-root-modern .sd-body.sd-body--responsive {
		padding: var(--space-4) var(--space-4) var(--space-5) !important;
	}
	[data-cd-widget-container] .sd-root-modern .sv-header__title,
	[data-cd-widget-container] .sd-root-modern .sv-header__title .sv-string-viewer {
		font-size: var(--text-xl) !important;
	}
	[data-cd-widget-container] .sd-root-modern .sd-btn {
		width: 100% !important;
	}
	[data-cd-widget-container] .sd-root-modern {
		--cd-code-width: 6.5rem;
	}
}
/*# sourceMappingURL=data:application/json;base64,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O0NBQ3RDLGdCQUFnQjtDQUNoQix1QkFBdUI7Q0FDdkIsbUJBQW1CO0FBQ3BCOztBQUVBO0NBQ0MseUJBQXlCO0NBQ3pCLHNCQUFzQjtDQUN0QixrQ0FBa0M7Q0FDbEMsc0NBQXNDO0NBQ3RDLG9CQUFvQjtBQUNyQjs7QUFFQSxnREFBZ0Q7QUFDaEQ7O0NBRUMsc0NBQXNDO0NBQ3RDLG9CQUFvQjtBQUNyQjs7QUFFQTs7O0NBR0Msd0NBQXdDO0NBQ3hDLDJCQUEyQjtDQUMzQixvQ0FBb0M7Q0FDcEMscUJBQXFCO0NBQ3JCLHlCQUF5QjtDQUN6QiwyQkFBMkI7Q0FDM0IscUNBQXFDO0NBQ3JDLHFDQUFxQztDQUNyQywyQ0FBMkM7Q0FDM0MsMENBQTBDO0NBQzFDLDJCQUEyQjtDQUMzQixpREFBaUQ7Q0FDakQsdUJBQXVCO0NBQ3ZCLFdBQVc7Q0FDWCxlQUFlO0NBQ2YsaUNBQWlDO0NBQ2pDLDhCQUE4QjtDQUM5Qiw0RUFBNEU7QUFDN0U7O0FBRUE7Q0FDQywyQ0FBMkM7Q0FDM0MsNkNBQTZDO0NBQzdDLDBEQUEwRDtBQUMzRDs7QUFFQTtDQUNDLGlDQUFpQztDQUNqQyxtQkFBbUI7QUFDcEI7O0FBRUEsdUNBQXVDO0FBQ3ZDO0NBQ0Msd0NBQXdDO0NBQ3hDLGdDQUFnQztDQUNoQyxrQ0FBa0M7QUFDbkM7O0FBRUE7Q0FDQztFQUNDLG1EQUFtRDtDQUNwRDtDQUNBOztFQUVDLGdFQUFnRTtDQUNqRTtDQUNBOztFQUVDLG9DQUFvQztDQUNyQztDQUNBO0VBQ0Msc0JBQXNCO0NBQ3ZCO0NBQ0E7RUFDQyx1QkFBdUI7Q0FDeEI7QUFDRCIsImZpbGUiOiJpbmRleC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKiBpbmRleC5zY3NzIOKGkiBpbmRleC5jc3MgIMK3ICBzZXJ2ZWQgYXQgL2NvZGUvMjAyNy9pbmRleC5jc3NcbiAgIENsZWFuIHNoZWxsIChubyBCb290c3RyYXAsIG5vIGF1LSBwcmVmaXgpLiBMb2FkIG9yZGVyOiB0b2tlbnMg4oaSXG4gICBiYXNlIOKGkiBsYXlvdXQvY2FyZCDihpIgY29tcG9uZW50cy4gUmVjb21waWxlIGFmdGVyIGFueSBlZGl0OlxuICAgbnB4IHNhc3MgaW5kZXguc2NzcyBpbmRleC5jc3MgLS1uby1zb3VyY2UtbWFwXG4gICBOT1RFOiB0aGUgQ01TIG9ubHkgcmVidWlsZHMgaW5kZXguY3NzIHdoZW4gVEhJUyBmaWxlIGlzIHNhdmVkIOKAlCBlZGl0aW5nIGFcbiAgIHBhcnRpYWwgdW5kZXIgY3NzLyBhbG9uZSBkb2VzIG5vdCB0cmlnZ2VyIGl0LiBSZS1zYXZlIHRoaXMgZmlsZSBhZnRlciBhbnlcbiAgIHBhcnRpYWwgZWRpdC4gKi9cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtdG9rZW5zLmNzcyAgwrcgIEFVIERlc2lnbiBTeXN0ZW0gY3VzdG9tIHByb3BlcnRpZXNcbiAgIFRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBhbGwgZGVzaWduIHRva2Vucy5cbiAgIEV2ZXJ5IG90aGVyIHBhcnRpYWwgcmVmZXJlbmNlcyB0aGVzZSB2aWEgdmFyKCkuXG4gICBJZiB5b3VyIG1hc3RlciBhbHJlYWR5IGRlZmluZXMgOnJvb3QsIG9taXQgdGhpcyBmaWxlLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG46cm9vdCB7XG5cdC8qIOKUgOKUgOKUgCBDT0xPUjogUHJpbWFyeSDilIDilIDilIAgKi9cblx0LS1hdS1uYXZ5OiAjMDAzMzY2O1xuXHQtLWF1LW5hdnktZGVlcDogIzAwMWEzMztcblx0LS1hdS1uYXZ5LW1pZDogIzAwMmE0ODsgLyogYmV0d2VlbiBkZWVwIGFuZCBuYXZ5OyBtYXRjaGVzIHRoZW1lLWNvbG9yICovXG5cdC0tYXUtbmF2eS1saWdodDogIzAwNDA4MDtcblx0LS1hdS1nb2xkOiAjQzY5NTJCO1xuXHQtLWF1LWdvbGQtbGlnaHQ6ICNFOEI4NEI7XG5cdC0tYXUtZ29sZC1wYWxlOiAjRkRGNUU2O1xuXHQvKiDilIDilIDilIAgQ09MT1I6IE5ldXRyYWwg4pSA4pSA4pSAICovXG5cdC0tYXUtY3JlYW06ICNGQUY4RjU7XG5cdC0tYXUtc3RvbmU6ICNFQ0VBRTQ7IC8qIHdhcm0gbGlnaHQtZ3JheSBiYW5kLCBhIHN0ZXAgZGVlcGVyIHRoYW4gY3JlYW0gKi9cblx0LS1hdS13aGl0ZTogI0ZGRkZGRjtcblx0LS1hdS13YXJtLWdyYXk6ICM2QjY1NjA7XG5cdC0tYXUtZ3JheS0yMDA6ICNFOEU0REY7XG5cdC0tYXUtZ3JheS0zMDA6ICNEMUNCQzQ7XG5cdC0tYXUtZ3JheS00MDA6ICNCNUFGQTg7XG5cdC0tYXUtdGV4dDogIzJBMjUyMjtcblx0Lyog4pSA4pSA4pSAIENPTE9SOiBTZW1hbnRpYyDilIDilIDilIAgKi9cblx0LS1hdS1zdWNjZXNzOiAjMkQ3RDQ2O1xuXHQtLWF1LXdhcm5pbmc6ICNDNjk1MkI7XG5cdC0tYXUtZXJyb3I6ICNCODMyMzI7XG5cdC0tYXUtaW5mbzogIzI4NjhBNjtcblx0Lyog4pSA4pSA4pSAIFRZUE9HUkFQSFkg4pSA4pSA4pSAICovXG5cdC0tZm9udC1kaXNwbGF5OiBcIklCTSBQbGV4IFNlcmlmXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmO1xuXHQtLWZvbnQtYm9keTogXCJJQk0gUGxleCBTYW5zXCIsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgc2Fucy1zZXJpZjtcblx0LS1mb250LW1vbm86IFwiSUJNIFBsZXggTW9ub1wiLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcblx0Lyog4pSA4pSA4pSAIFRZUEUgU0NBTEUgKE1ham9yIFRoaXJkIOKAlCAxLjI1KSDilIDilIDilIAgKi9cblx0LS10ZXh0LXhzOiAwLjc1cmVtOyAvKiAxMnB4ICovXG5cdC0tdGV4dC1zbTogMC44NzVyZW07IC8qIDE0cHggKi9cblx0LS10ZXh0LWJhc2U6IDFyZW07IC8qIDE2cHggKi9cblx0LS10ZXh0LW1kOiAxLjEyNXJlbTsgLyogMThweCAqL1xuXHQtLXRleHQtbGc6IDEuMjVyZW07IC8qIDIwcHggKi9cblx0LS10ZXh0LXhsOiAxLjU2M3JlbTsgLyogMjVweCAqL1xuXHQtLXRleHQtMnhsOiAxLjk1M3JlbTsgLyogfjMxcHggKi9cblx0LS10ZXh0LTN4bDogMi40NDFyZW07IC8qIH4zOXB4ICovXG5cdC0tdGV4dC00eGw6IDMuMDUycmVtOyAvKiB+NDlweCAqL1xuXHQvKiDilIDilIDilIAgU1BBQ0lORyAoOHB4IGJhc2UpIOKUgOKUgOKUgCAqL1xuXHQtLXNwYWNlLTE6IDAuMjVyZW07IC8qIDRweCAqL1xuXHQtLXNwYWNlLTI6IDAuNXJlbTsgLyogOHB4ICovXG5cdC0tc3BhY2UtMzogMC43NXJlbTsgLyogMTJweCAqL1xuXHQtLXNwYWNlLTQ6IDFyZW07IC8qIDE2cHggKi9cblx0LS1zcGFjZS01OiAxLjVyZW07IC8qIDI0cHggKi9cblx0LS1zcGFjZS02OiAycmVtOyAvKiAzMnB4ICovXG5cdC0tc3BhY2UtODogM3JlbTsgLyogNDhweCAqL1xuXHQtLXNwYWNlLTEwOiA0cmVtOyAvKiA2NHB4ICovXG5cdC0tc3BhY2UtMTI6IDVyZW07IC8qIDgwcHggKi9cblx0LS1zcGFjZS0xNjogNi4yNXJlbTsgLyogMTAwcHggKi9cblx0Lyog4pSA4pSA4pSAIExBWU9VVCDilIDilIDilIAgKi9cblx0LS1tYXgtd2lkdGg6IDEyMDBweDtcblx0LS1tYXgtd2lkdGgtbmFycm93OiA5MDBweDtcblx0LS1tYXgtd2lkdGgtdGV4dDogNzAwcHg7XG5cdC0tZ3V0dGVyOiAyLjVyZW07XG5cdC0taGVhZGVyLWhlaWdodDogNi43NXJlbTsgLyogYXBwcm94IHN0aWNreSBoZWFkZXIgaGVpZ2h0OyBzdGlja3kgb2Zmc2V0cyByZWZlcmVuY2UgaXQgKi9cblx0Lyog4pSA4pSA4pSAIEJPUkRFUlMgJiBSQURJSSDilIDilIDilIAgKi9cblx0LS1yYWRpdXMtc206IDRweDtcblx0LS1yYWRpdXMtbWQ6IDhweDtcblx0LS1yYWRpdXMtbGc6IDEycHg7XG5cdC0tcmFkaXVzLWZ1bGw6IDk5OTlweDtcblx0Lyog4pSA4pSA4pSAIFNIQURPV1Mg4pSA4pSA4pSAICovXG5cdC0tc2hhZG93LXNtOiAwIDFweCA0cHggcmdiYSgwLDAsMCwwLjA2KTtcblx0LS1zaGFkb3ctbWQ6IDAgNHB4IDE2cHggcmdiYSgwLDAsMCwwLjA4KTtcblx0LS1zaGFkb3ctbGc6IDAgOHB4IDMycHggcmdiYSgwLDAsMCwwLjEwKTtcblx0LS1zaGFkb3cteGw6IDAgMTZweCA0OHB4IHJnYmEoMCwwLDAsMC4xNCk7XG5cdC8qIOKUgOKUgOKUgCBUUkFOU0lUSU9OUyDilIDilIDilIAgKi9cblx0LS1lYXNlLW91dDogY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xuXHQtLWVhc2Utc3ByaW5nOiBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSk7XG5cdC0tZHVyYXRpb24tZmFzdDogMTUwbXM7XG5cdC0tZHVyYXRpb24tYmFzZTogMzAwbXM7XG5cdC0tZHVyYXRpb24tc2xvdzogNTAwbXM7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgZm9udHMuY3NzICDCtyAgc2VsZi1ob3N0ZWQgSUJNIFBsZXggICh3b2ZmMiBpbiAvY29kZS8yMDI3L2ZvbnRzLylcbiAgIEZhbWlseSBuYW1lcyBtYXRjaCB0aGUgLS1mb250LSogdG9rZW5zLiBPbmx5IHRoZSB3ZWlnaHRzL3N0eWxlcyB0aGVcbiAgIHN5c3RlbSBhY3R1YWxseSB1c2VzIGFyZSBkZWNsYXJlZCAoU2FucyA0MDAvNjAwLzcwMCArIGl0YWxpYywgU2VyaWZcbiAgIDQwMC82MDAgKyBpdGFsaWMsIE1vbm8gNDAwKS4gZm9udC1kaXNwbGF5OiBzd2FwIHRvIGF2b2lkIEZPSVQuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBTYW5zXCI7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtc2Fucy00MDAud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LXNhbnMtNDAwLWl0YWxpYy53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBTYW5zXCI7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtc2Fucy02MDAud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LXNhbnMtNzAwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IFNlcmlmXCI7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtc2VyaWYtNDAwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpO1xufVxuQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcIklCTSBQbGV4IFNlcmlmXCI7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtc2VyaWYtNDAwLWl0YWxpYy53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBTZXJpZlwiO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtZGlzcGxheTogc3dhcDtcblx0c3JjOiB1cmwoXCIvY29kZS8yMDI3L2ZvbnRzL2libS1wbGV4LXNlcmlmLTYwMC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKTtcbn1cbkBmb250LWZhY2Uge1xuXHRmb250LWZhbWlseTogXCJJQk0gUGxleCBNb25vXCI7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1kaXNwbGF5OiBzd2FwO1xuXHRzcmM6IHVybChcIi9jb2RlLzIwMjcvZm9udHMvaWJtLXBsZXgtbW9uby00MDAud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGJhc2UuY3NzICDCtyAgcmVzZXQgKyBiYXJlLWVsZW1lbnQgdHlwb2dyYXBoeVxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzc1xuICAgR0xPQkFMIChjbGVhbiBzaGVsbCDigJQgbm8gQm9vdHN0cmFwIHRvIGNvZXhpc3Qgd2l0aCwgc28gbm8gLmF1XG4gICBzY29wZSkuIE9uLWJyYW5kIGRlZmF1bHRzIGZvciByYXcgSFRNTCBzbyBDS0VkaXRvciBjb250ZW50IHJlYWRzXG4gICBjb3JyZWN0bHkgd2l0aCBubyBleHRyYSBjbGFzc2VzLiBDb21wb25lbnQgY2xhc3NlcyBsYXllciBvbiB0b3AuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbiosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4qIHtcblx0bWFyZ2luOiAwO1xufVxuXG5odG1sIHtcblx0LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuXHRzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbn1cblxuaW1nLCBwaWN0dXJlLCBzdmcsIHZpZGVvIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG1heC13aWR0aDogMTAwJTtcblx0aGVpZ2h0OiBhdXRvO1xufVxuXG4vKiBzZXZlcmFsIGltYWdlcyBhdXRob3JlZCBzaWRlIGJ5IHNpZGUgaW4gb25lIHBhcmFncmFwaCBvciBoZWFkaW5nIChiYWRnZXMsXG4gICBzb2NpYWwgaWNvbnMsIGxvZ29zIC0tIC9jZWlzL2xlYWRlcnNoaXBfc2Nob29sLykgc3RheSBvbiBvbmUgbGluZSwgYXMgdGhleSBkaWRcbiAgIGJlZm9yZSB0aGUgYmxvY2sgcmVzZXQgYWJvdmU7IGEgbG9uZSBpbWFnZSBrZWVwcyBkaXNwbGF5OmJsb2NrICovXG46aXMocCwgaDIsIGgzLCBoNCwgaDUsIGg2KTpoYXMoPiBpbWcsID4gYSA+IGltZyk6aGFzKD4gaW1nICsgaW1nLCA+IGltZyArIGEsID4gYSArIGltZywgPiBhICsgYSkgaW1nIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG5pbnB1dCwgYnV0dG9uLCB0ZXh0YXJlYSwgc2VsZWN0IHtcblx0Zm9udDogaW5oZXJpdDtcblx0Y29sb3I6IGluaGVyaXQ7XG59XG5cbmJvZHkge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cdC8qIHN0aWNreSBmb290ZXI6IHRoZSBwYWdlIGlzIGEgZnVsbC12aWV3cG9ydC10YWxsIGNvbHVtbiBzbyB0aGF0IG9uIHNob3J0XG5cdCAgIHBhZ2VzIHRoZSBmb290ZXJzIChkZXB0IHByZS1mb290ZXIgKyBnbG9iYWwgc2l0ZSBmb290ZXIpIHNldHRsZSBhdCB0aGVcblx0ICAgYm90dG9tIG9mIHRoZSBzY3JlZW4gaW5zdGVhZCBvZiBmbG9hdGluZyBtaWQtdmlld3BvcnQuIFRoZSA8bWFpbj4gY29udGVudFxuXHQgICBncm93cyB0byBhYnNvcmIgdGhlIHNsYWNrOyBoZWFkZXIvZm9vdGVycyBrZWVwIHRoZWlyIG5hdHVyYWwgaGVpZ2h0LlxuXHQgICBXb3JrcyB3aXRoIHRoZSBzdGlja3kgaGVhZGVyIChzdGlja3kgcG9zaXRpb25pbmcgaXMgdW5hZmZlY3RlZCBieSB0aGVcblx0ICAgY29sdW1uIGZsZXggY29udGV4dCkuICovXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdG1pbi1oZWlnaHQ6IDEwMHZoO1xuXHRtaW4taGVpZ2h0OiAxMDBkdmg7IC8qIHByb2dyZXNzaXZlOiBleGNsdWRlIG1vYmlsZSBicm93c2VyIGNocm9tZSB3aGVyZSBzdXBwb3J0ZWQgKi9cbn1cblxuLyogdGhlIGNvbnRlbnQgYXJlYSBpcyB0aGUgb25seSBmbGV4IGNoaWxkIHRoYXQgZ3Jvd3M7IGV2ZXJ5dGhpbmcgZWxzZVxuICAgKGhlYWRlciwgZGVwdC1mb290ZXIsIHNpdGUtZm9vdGVyLCAwLWhlaWdodCBzY3JpcHRzKSBrZWVwcyBpdHMgc2l6ZS4gKi9cbmJvZHkgPiBtYWluIHtcblx0ZmxleDogMSAwIGF1dG87XG59XG5cbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHR0ZXh0LXdyYXA6IGJhbGFuY2U7XG59XG5cbi8qIG9uZSB3ZWlnaHQgYWNyb3NzIGFsbCBsZXZlbHMg4oCUIGhpZXJhcmNoeSBjb21lcyBmcm9tIHNpemUgKCsgdGhlIHNlcmlmL25hdnlcbiAgIHZzIHNhbnMvZ3JheSBjb250cmFzdCBhZ2FpbnN0IGJvZHkpLCBub3Qgd2VpZ2h0LiBLZWVwaW5nIGV2ZXJ5IGhlYWRpbmcgYXQgdGhlXG4gICBsaWdodCBkaXNwbGF5IHdlaWdodCBhdm9pZHMgYSBzbWFsbGVyIGhlYWRpbmcgKGg0KSByZWFkaW5nIGFzIGJvbGRlciB0aGFuIGFcbiAgIGxhcmdlciBvbmUgKGgzKS4gQ29tcG9uZW50cyB0aGF0IHdhbnQgYSBoZWF2aWVyIGxhYmVsICguY2FyZC10aXRsZSxcbiAgIC5mb290ZXItY29sIGgzLCAubWVnYS1jb2wgaDQpIHNldCB0aGVpciBvd24gZm9udC13ZWlnaHQuICovXG5oMSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC00eGwpO1xufVxuXG5oMiB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0zeGwpO1xufVxuXG5oMyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0yeGwpO1xufVxuXG5oNCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG59XG5cbmg1IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcbn1cblxuaDYge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjVweDtcbn1cblxucCB7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbnAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbmEge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1saW5rLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuXHR0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcblx0dGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMXB4O1xuXHR0cmFuc2l0aW9uOiBjb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi8qIGJ1dHRvbnMgbWFuYWdlIHRoZWlyIG93biBob3ZlciBjb2xvcnMg4oCUIGV4Y2x1ZGUgdGhlbSBzbyB0aGUgbGluay1ob3ZlciBnb2xkXG4gICBkb2Vzbid0IHdhc2ggb3V0IC5idG4gbGFiZWxzIChlc3AuIC5idG4tcHJpbWFyeSBvbiBpdHMgZ29sZCBiYWNrZ3JvdW5kKS4gKi9cbmE6bm90KC5idG4pOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtbGluay1ob3ZlciwgdmFyKC0tYXUtZ29sZCkpO1xufVxuXG5zdHJvbmcsIGIge1xuXHRmb250LXdlaWdodDogNzAwO1xufVxuXG5lbSwgaSB7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuc21hbGwge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG51bCwgb2wge1xuXHRwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTUpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG5saSArIGxpIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbmJsb2NrcXVvdGUge1xuXHRib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLTUpO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTYpIDA7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuaHIge1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtOCkgMDtcbn1cblxuY29kZSwga2JkLCBzYW1wIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogMC45ZW07XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0cGFkZGluZzogMC4xNWVtIDAuNGVtO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xufVxuXG5wcmUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg4KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdG92ZXJmbG93LXg6IGF1dG87XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTUpIDA7XG59XG5cbnByZSBjb2RlIHtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0cGFkZGluZzogMDtcblx0Ym9yZGVyLXJhZGl1czogMDtcblx0Zm9udC1zaXplOiBpbmhlcml0O1xuXHRjb2xvcjogaW5oZXJpdDtcbn1cblxuLyogdmlzdWFsbHktaGlkZGVuIChzY3JlZW4tcmVhZGVyIG9ubHkpICovXG4uc3Itb25seSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0d2lkdGg6IDFweDtcblx0aGVpZ2h0OiAxcHg7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogLTFweDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Y2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0Ym9yZGVyOiAwO1xufVxuXG4vKiDilIDilIDilIAgaWNvbiBsaW5rIGxpc3Qg4pSA4pSA4pSAXG4gICBBIHRpZHksIHNlbGYtY29sdW1uaW5nIGxpc3Qgb2YgaWNvbiArIGxpbmsgcm93cyBmb3IgcmljaC10ZXh0IGJvZGllc1xuICAgKGFjY29yZGlvbiBwYW5lbHMsIHBhZ2UgY29udGVudCkuIEF1dGhvcnMgYWRkIGNsYXNzPVwibGluay1saXN0XCIgdG8gYSA8dWw+O1xuICAgZWFjaCA8bGk+IGhvbGRzIGEgRm9udEF3ZXNvbWUgPGk+ICsgYW4gPGE+LiBUaGUgaWNvbiB0YWtlcyB0aGUgYmFuZCBhY2NlbnRcbiAgIChnb2xkIG9uIGRhcmsgLyBsaWdodCBiYW5kcyk7IHRoZSBsaW5rIGNvbG91ciBjb21lcyBmcm9tIHRoZSBzdXJyb3VuZGluZ1xuICAgY29udGV4dCAoZS5nLiBnb2xkIGluc2lkZSBhIGRhcmstYmFuZCBhY2NvcmRpb24pLiBDb2xsYXBzZXMgdG8gb25lIGNvbHVtblxuICAgb24gbmFycm93IHdpZHRocy4gSXRlbXMgd2l0aG91dCBhbiBpY29uIHN0aWxsIGFsaWduIGNsZWFubHkuICovXG4ubGluay1saXN0IHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS00KSAwO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyNjBweCwgMWZyKSk7XG5cdGdhcDogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNik7XG59XG5cbi5saW5rLWxpc3QgbGkge1xuXHRtYXJnaW46IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmxpbmstbGlzdCBsaSA+IGkge1xuXHRmbGV4OiBub25lO1xuXHR3aWR0aDogMS4xNWVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtZ29sZCkpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGxheW91dC5jc3MgIMK3ICBzZWN0aW9uIGJhbmRzICsgdGhlIGZsZXhpYmxlIGdyaWRcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcblxuICAgLnNlY3Rpb24gICBmdWxsLWJsZWVkIGJhbmQgKHZlcnRpY2FsIHJoeXRobSArIGJnIHZhcmlhbnQpXG4gICAuc2VjdGlvbi1pbm5lciAgIGNlbnRlcmVkIG1heC13aWR0aCBjb2x1bW5cbiAgIC5ncmlkICAgICAgZmxleC13cmFwOyBhbnkgbnVtYmVyIG9mIGNoaWxkcmVuIGZsb3cgYW5kIGZpbGwg4oCUXG4gICAgICAgICAgICAgIHRoZSByZW5kZXJlcnMgbmV2ZXIgY29tcHV0ZSBhIGNvbHVtbiBjb3VudC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIFNFQ1RJT04g4pSA4pSA4pSAICovXG4uc2VjdGlvbiB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEyKSB2YXIoLS1ndXR0ZXIpO1xufVxuXG4vKiBTYW1lLWNvbG9yIGJhbmRzIGFidXQ6IGNvbGxhcHNlIHRoZSBkb3VibGVkIHNlYW0gdG8gYSBzaW5nbGUsIGNvbnRpbnVvdXNcbiAgIGdhcCAobm90IHplcm8g4oCUIGNvbnRlbnQgbXVzdCBub3QgY29sbGlkZSkuIEJvdGggc2lkZXMgdHJpbSB0byAtLXNwYWNlLTYsXG4gICBzbyBhIHNhbWUtY29sb3Igc2VhbSByZWFkcyBhcyBvbmUgYmFuZCB3aXRoIH42NHB4IGJldHdlZW4gaXRzIGNvbnRlbnQuICovXG4uc2VjdGlvbi0tZmx1c2gtdG9wIHtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4uc2VjdGlvbi0tZmx1c2gtYm90dG9tIHtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTYpO1xufVxuXG4uc2VjdGlvbi1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLnNlY3Rpb24taGVhZCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uc2VjdGlvbi1sYWJlbCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAzcHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWV5ZWJyb3csIHZhcigtLWF1LWdvbGQpKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5zZWN0aW9uLXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tdGV4dC0yeGwpLCAzLjV2dywgdmFyKC0tdGV4dC0zeGwpKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHRsaW5lLWhlaWdodDogMS4yO1xufVxuXG4uc2VjdGlvbi1kZXNjIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoLXRleHQpO1xuXHRsaW5lLWhlaWdodDogMS43O1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyog4pSA4pSA4pSAIEJBQ0tHUk9VTkQgQkFORFMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBUaGUgQ01TIGJhY2tncm91bmRfY29sb3IgZmllbGQgc3VwcGxpZXMgdGhlIG1vZGlmaWVyIG5hbWUg4oaSIHRoZSBhdXRob3JcbiAgIHBpY2tzIGZyb20gdGhpcyBwYWxldHRlLiBMaWdodCBiYW5kcyBzZXQgb25seSBhIGJhY2tncm91bmQ7IERBUksgYmFuZHNcbiAgIGFsc28gcHVibGlzaCBhIHNldCBvZiBgLS1iYW5kLSpgIENPTlRFWFQgVE9LRU5TIHRoYXQgY29tcG9uZW50cyByZWFkXG4gICAoaGVhZGluZ3MsIGJvZHksIGNhcmRzLCBoYWlybGluZXMsIOKApikuIFRoYXQncyB0aGUgd2hvbGUgcG9pbnQ6IGFcbiAgIGNvbXBvbmVudCBzdHlsZXMgYSBkYXJrIGJhbmQgb25jZSwgdGhyb3VnaCB0aGUgdG9rZW5zLCBzbyBhZGRpbmcgYSBuZXdcbiAgIGJhbmQgaXMgYSBzaW5nbGUgZGVmaW5pdGlvbiBoZXJlIOKAlCBub3QgYW4gZWRpdCBpbiBldmVyeSBjb21wb25lbnQuXG5cbiAgIFBhbGV0dGU6XG4gICAgIGxpZ2h0ICDihpIgICh3aGl0ZSBkZWZhdWx0KSDCtyBjcmVhbSDCtyBzdG9uZShncmF5KSDCtyBnb2xkXG4gICAgIGRhcmsgICDihpIgIG5hdnkoZGVlcCkgwrcgbmF2eS1taWQgwrcgbmF2eS1icmlnaHRcbiAgIExlZ2FjeSAuY3QgdmFsdWVzIGFyZSBhbGlhc2VkIG9udG8gdGhlIG5lYXJlc3QgbmV3IGJhbmQgKGRlbGV0ZSB0aGVcbiAgIGFsaWFzIHNlbGVjdG9ycyBvbmNlIHRoZSAuY3QgZHJvcGRvd25zIGFyZSB0cmltbWVkIHRvIHRoZSBuYW1lcyBhYm92ZSkuICovXG4vKiBsaWdodCBiYW5kcyAqL1xuLnNlY3Rpb24tLWNyZWFtLFxuLnNlY3Rpb24tLWVjcnUtd2hpdGUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG59XG5cbi5zZWN0aW9uLS1zdG9uZSxcbi5zZWN0aW9uLS1ncmF5LFxuLnNlY3Rpb24tLXNlYXNoZWxsLWdyYXksXG4uc2VjdGlvbi0tY2FyYXJyYS1ncmF5LFxuLnNlY3Rpb24tLWNhcmFycmEtZ3JheS10ZXh0dXJlZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXN0b25lKTtcbn1cblxuLnNlY3Rpb24tLWdvbGQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xufVxuXG4vKiBkYXJrIGJhbmRzIOKAlCBiYWNrZ3JvdW5kICsgdGhlIHNoYXJlZCBjb250ZXh0IHRva2VucyAqL1xuLnNlY3Rpb24tLW5hdnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uc2VjdGlvbi0tbmF2eS1taWQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LW1pZCk7XG59XG5cbi5zZWN0aW9uLS1uYXZ5LWJyaWdodCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uc2VjdGlvbi0tbmlsZS1ibHVlIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLyogY2hhdGhhbXMtYmx1ZSB3YXMgdGhlIExJR0hURVIgbGVnYWN5IGJsdWUgKCMxNDNFNkUpIOKAlCBrZWVwIGl0IGxpZ2h0ZXIgKG1hcHMgdG9cbiAgIC0tYXUtbmF2eSAjMDAzMzY2KSByYXRoZXIgdGhhbiBjb2xsYXBzaW5nIGl0IGludG8gdGhlIGRhcmtlc3QgYmFuZC4gKi9cbi5zZWN0aW9uLS1jaGF0aGFtcy1ibHVlIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5zZWN0aW9uLS1maW9yZC1ibHVlLFxuLnNlY3Rpb24tLWZpb3JkLWJsdWUtdGV4dHVyZWQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uc2VjdGlvbi0tbmF2eSxcbi5zZWN0aW9uLS1uYXZ5LW1pZCxcbi5zZWN0aW9uLS1uYXZ5LWJyaWdodCxcbi5zZWN0aW9uLS1uaWxlLWJsdWUsXG4uc2VjdGlvbi0tY2hhdGhhbXMtYmx1ZSxcbi5zZWN0aW9uLS1maW9yZC1ibHVlLFxuLnNlY3Rpb24tLWZpb3JkLWJsdWUtdGV4dHVyZWQge1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTtcblx0LS1iYW5kLWhlYWRpbmc6IHZhcigtLWF1LXdoaXRlKTtcblx0LS1iYW5kLWJvZHk6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42Nik7XG5cdC0tYmFuZC1leWVicm93OiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0LS1iYW5kLWFjY2VudDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdC8qIGhvdmVyL2V4cGFuZGVkIHN1cmZhY2UgKGFjY29yZGlvbiBoZWFkZXIpOiBhIHN1YnRsZSB0cmFuc2x1Y2VudC13aGl0ZSBsaWZ0LlxuXHQgICAoQSBnb2xkIHdhc2ggbXVkZGllZCBhZ2FpbnN0IHRoZSBibHVlIGJhbmQuKSAqL1xuXHQtLWJhbmQtbGluazogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdC0tYmFuZC1saW5rLWhvdmVyOiB2YXIoLS1hdS13aGl0ZSk7XG5cdC0tYmFuZC1yYWlzZWQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSk7XG5cdC0tYmFuZC1oYWlybGluZTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcblx0LS1iYW5kLXF1b3RlOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpO1xuXHQtLWJhbmQtY2FyZC1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTtcblx0LS1iYW5kLWNhcmQtYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG5cdC0tYmFuZC1jYXJkLWJvcmRlci13OiAwO1xuXHQtLWJhbmQtY2FyZC1zaGFkb3c6IDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMjUpLCAwIDE0cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMjgpO1xuXHQtLWJhbmQtY2FyZC1zaGFkb3ctaG92ZXI6IDAgNnB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjMpLCAwIDIycHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMzYpO1xuXHQtLWJhbmQtaWNvbi1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcblx0LS1iYW5kLWljb24tZmc6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4vKiDilIDilIDilIAgR1JJRCDigJQgZmxleGlibGUgZmxleCAodW5rbm93biBpdGVtIGNvdW50cykg4pSA4pSA4pSAICovXG4uZ3JpZCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmdyaWQgPiAqIHtcblx0ZmxleDogMSAxIDI4MHB4O1xuXHRtaW4td2lkdGg6IDA7XG59IC8qIG1pbi13aWR0aDogYSB3aWRlIHRhYmxlL2lmcmFtZSBpbnNpZGUgc2Nyb2xscyBpbiBpdHMgLnRhYmxlLXdyYXAgaW5zdGVhZCBvZiBzdHJldGNoaW5nIHRoZSBjb2x1bW4gKi9cbi8qIGNvbXBhY3QgdmFyaWFudCDigJQgYSB0aWdodGVyIGZsZXggbWluIHNvIGNhcmRzIHBhY2sgY2xvc2VyIGFuZCAzLXVwIGhvbGRzXG4gICBhY3Jvc3MgYSBzaWRlYmFyIGNvbnRlbnQgY29sdW1uLCByZXNpemluZyBzbW9vdGhseSAodGhlIGRlZmF1bHQgMjgwcHggb25seVxuICAgZml0cyB0d28pLiBXb3JrcyBhcyBhIHNlY3Rpb24tbGV2ZWwgdG9rZW4gKEN1c3RvbSBDbGFzcyBcImNvbXBhY3RcIikgb3JcbiAgIGRpcmVjdGx5IG9uIHRoZSBncmlkIChjbGFzcz1cImdyaWQgZ3JpZC0tY29tcGFjdFwiKS4gKi9cbi5ncmlkLS1jb21wYWN0ID4gKiB7XG5cdGZsZXg6IDEgMSAyMDBweDtcbn1cblxuLmNvbXBhY3QgLmdyaWQgPiAqIHtcblx0ZmxleDogMSAxIDIwMHB4O1xufVxuXG4vKiDilIDilIDilIAgU1BMSVQg4oCUIGFzeW1tZXRyaWMgdHdvLWNvbHVtbiBmZWF0dXJlIHJvd3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBGb3IgaW1hZ2Utb24tb25lLXNpZGUgLyB0ZXh0LW9uLXRoZS1vdGhlciByb3dzIHRoZSBmbGV4IGdyaWQgY2FuJ3QgZG8sXG4gICBiZWNhdXNlIGl0IHNpemVzIGV2ZXJ5IGNoaWxkIGVxdWFsbHkuIEEgU0VDVElPTiB0b2tlbiAodHlwZWQgaW4gdGhlIHNlY3Rpb24nc1xuICAgQ3VzdG9tIENsYXNzIGZpZWxkKSBzd2FwcyB0aGUgZ3JpZCB0byBhIGZpeGVkIHR3by10cmFjayBsYXlvdXQgd2l0aCBhIHdpZGUgK1xuICAgbmFycm93IHNwbGl0OlxuICAgICBzcGxpdC0yLTMgICDihpIgMmZyIDNmciAgIChsZWZ0IG5hcnJvd2VyLCByaWdodCB3aWRlcilcbiAgICAgc3BsaXQtMy0yICAg4oaSIDNmciAyZnIgICAobGVmdCB3aWRlciwgICByaWdodCBuYXJyb3dlcilcbiAgIFdoaWNoIHNpZGUgaXMgdGhlIGltYWdlIGlzIGp1c3QgdGhlIE9SREVSIG9mIHRoZSB0d28gY2FyZHMg4oCUIHB1dCB0aGUgaW1hZ2VcbiAgIGNhcmQgZmlyc3QgZm9yIGltYWdlLWxlZnQsIHNlY29uZCBmb3IgaW1hZ2UtcmlnaHQ7IHBpY2sgdGhlIHRva2VuIHRoYXQgbWFrZXNcbiAgIHRoZSBpbWFnZSB0aGUgc2l6ZSB5b3Ugd2FudC4gUm93cyBhcmUgdmVydGljYWxseSBjZW50ZXJlZCBzbyBhIHNob3J0IHRleHRcbiAgIGJsb2NrIHNpdHMgY2VudGVyZWQgYWdhaW5zdCBhIHRhbGxlciBpbWFnZS4gQnVpbHQgZm9yIFRXTyBjYXJkczsgYSB0aGlyZFxuICAgd291bGQgd3JhcCB0byBhIG5ldyByb3cuIENvbGxhcHNlcyB0byBhIHNpbmdsZSBzdGFja2VkIGNvbHVtbiBvbiBuYXJyb3dcbiAgIHNjcmVlbnMuIFRoZSB0b2tlbiBhbHNvIGxhbmRzIGFzIGEgY2xhc3Mgb24gdGhlIHNlY3Rpb24gKHZpYSBjdXN0b21fY2xhc3MpLiAqL1xuLnNwbGl0LTItMyAuZ3JpZCxcbi5zcGxpdC0zLTIgLmdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRnYXA6IHZhcigtLXNwYWNlLTgpO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc3BsaXQtMi0zIC5ncmlkIHtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyZnIgM2ZyO1xufVxuXG4uc3BsaXQtMy0yIC5ncmlkIHtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzZnIgMmZyO1xufVxuXG4vKiBhbiBpbWFnZS1vbmx5IGNhcmQgZGVmYXVsdHMgdG8gYWxpZ24tc2VsZjpzdGFydCAodG9wLXBpbm5lZCk7IGluIGEgc3BsaXQgd2VcbiAgIHdhbnQgaXQgY2VudGVyZWQgaW4gdGhlIHJvdyBsaWtlIGV2ZXJ5dGhpbmcgZWxzZSAqL1xuLnNwbGl0LTItMyAuY2FyZC0tbWVkaWEsXG4uc3BsaXQtMy0yIC5jYXJkLS1tZWRpYSB7XG5cdGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLyogcGluIGJvdGggY29sdW1ucyB0byB0aGUgdG9wIGluc3RlYWQgb2YgY2VudGVyaW5nIOKAlCBjb21iaW5lIHdpdGggdGhlIHNwbGl0XG4gICB0b2tlbiB3aGVuIHRoZSB0ZXh0IGlzIGxvbmdlciB0aGFuIHRoZSBpbWFnZSAoZS5nLiBzcGxpdC0zLTIgc3BsaXQtdG9wKSAqL1xuLnNwbGl0LXRvcCAuZ3JpZCB7XG5cdGFsaWduLWl0ZW1zOiBzdGFydDtcbn1cblxuLnNwbGl0LXRvcCAuY2FyZC0tbWVkaWEge1xuXHRhbGlnbi1zZWxmOiBzdGFydDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdC5zcGxpdC0yLTMgLmdyaWQsXG5cdC5zcGxpdC0zLTIgLmdyaWQge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHR9XG5cdC5zcGxpdC0yLTMgLmNhcmQtLW1lZGlhLFxuXHQuc3BsaXQtMy0yIC5jYXJkLS1tZWRpYSB7XG5cdFx0bWF4LXdpZHRoOiA0MDBweDtcblx0XHR3aWR0aDogMTAwJTtcblx0XHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHR9XG59XG4vKiDilIDilIDilIAgVEVYVCBTSVpFIOKAlCBzZWN0aW9uLWxldmVsIG92ZXJyaWRlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIERyb3AgaW50byBhIHNlY3Rpb24ncyBDdXN0b20gQ2xhc3MgZmllbGQgdG8gYnVtcCB0aGUgdGV4dCBpblxuICAgdGhhdCByb3cgYWJvdmUgdGhlIGNhcmQtdGV4dCBkZWZhdWx0ICgxNHB4KS5cbiAgICAgc3RhbmRhcmQgIOKGkiAxNnB4IGJvZHkgdGV4dCAoY29tZm9ydGFibGUgcmVhZGluZyBmb3IgZnVsbC13aWR0aCBwcm9zZSlcbiAgICAgbGVhZCAgICAgIOKGkiAyMHB4IGJvZHksIDMxcHggdGl0bGVzLCAxLjcgbGluZS1oZWlnaHQgKGludHJvL3dlbGNvbWUpICovXG4uc3RhbmRhcmQgLmNhcmQtdGV4dCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLyogdGhlIGNhcmQgaGVhZGluZyBzY2FsZSB0b3BzIG91dCBhdCAxOHB4IOKAlCBiYXJlbHkgYWJvdmUgMTZweCBib2R5LCBzb1xuICAgc3RlcCBoZWFkaW5ncyB1cCB3aXRoIHRoZSB0ZXh0IG9yIHRoZSBoaWVyYXJjaHkgZmxhdHRlbnMgKi9cbi5zdGFuZGFyZCAuY2FyZC10ZXh0IDppcyhoMSwgaDIpIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcbn1cblxuLnN0YW5kYXJkIC5jYXJkLXRleHQgaDMge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xufVxuXG4ubGVhZCAuY2FyZC10aXRsZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0yeGwpO1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmxlYWQgLmNhcmQtdGV4dCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi5sZWFkIC5jYXJkLXRleHQgOmlzKGgxLCBoMiwgaDMpIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcbn1cblxuLmxlYWQgLmNhcmQtdGV4dCA6aXMoaDQsIGg1LCBoNikge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xufVxuXG4ucGFnZS1tYWluIHAubGVhZCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgY2FyZC5jc3MgIMK3ICB0aGUgY2FyZCAgKGltYWdlIC8gZXllYnJvdyAvIHRpdGxlIC8gdGV4dCAvIGN0YSlcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcbiAgIFRoZSBzaW5nbGUgY2FyZCBwcmltaXRpdmUgdXNlZCBieSBjb2x1bW5zLCBiaW9zLCBmZWVkcywgZXRjLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4uY2FyZCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0LyogYm9yZGVyICsgc2hhZG93IGNvbWUgZnJvbSB0aGUgYmFuZCdzIGNvbnRleHQgdG9rZW5zOiBvbiBhIGRhcmsgYmFuZCB0aGVcblx0ICAgYm9yZGVyIHdpZHRoIGNvbGxhcHNlcyB0byAwIChyZWNsYWltcyB0aGUgMXB4IHN0cmlwIHRoYXQgbGVha2VkIHRoZSB3aGl0ZVxuXHQgICBjYXJkIGJnIGFyb3VuZCB0aGUgaW1hZ2UpIGFuZCB0aGUgc2hhZG93IGRlZXBlbnMuIExpZ2h0IGJhbmRzIGZhbGwgYmFjayB0b1xuXHQgICB0aGUgaGFpcmxpbmUgKyBzb2Z0IHNoYWRvdy4gKi9cblx0Ym9yZGVyOiB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLXcsIDFweCkgc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tYmFuZC1jYXJkLXNoYWRvdywgdmFyKC0tc2hhZG93LXNtKSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHRyYW5zaXRpb246IGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xuXHQvKiBXaGl0ZS1zdXJmYWNlIGNhcmRzIHJlc2V0IGJhbmQgbGluayB0b2tlbnM7IHBsYWluIGNhcmRzICh0cmFuc3BhcmVudCxcblx0ICAgYmFuZC1jb2xvcmVkKSBpbmhlcml0IHRoZSBzZWN0aW9uJ3MgdG9rZW5zIGluc3RlYWQg4oCUIHNlZSBiZWxvdy4gKi9cbn1cblxuLmNhcmQ6aG92ZXIge1xuXHRib3gtc2hhZG93OiB2YXIoLS1iYW5kLWNhcmQtc2hhZG93LWhvdmVyLCB2YXIoLS1zaGFkb3ctbWQpKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTMwMCkpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5jYXJkOm5vdCguY2FyZC0tcGxhaW4pIHtcblx0LS1iYW5kLWxpbms6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHQtLWJhbmQtbGluay1ob3ZlcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIC4uLmFuZCB0aGUgYmFuZCdzIHRleHQgY29sb3JzIHRvbzogYSB0YWJsZSBvciBhY2NvcmRpb24gaW5zaWRlIGEgd2hpdGUgY2FyZFxuICAgb24gYSBkYXJrIGJhbmQgd2FzIHRha2luZyB0aGUgYmFuZCdzIHdoaXRlIGJvZHkgdGV4dCBhbmQgdmFuaXNoaW5nXG4gICAoL2NoaHMvc3BlZWNoL3NlcnZpY2VzLyBmZWVzKS4gQSBgcGxhaW5gIHNlY3Rpb24ncyBjYXJkcyBhcmUgdHJhbnNwYXJlbnQsXG4gICBzbyB0aGV5IGtlZXAgdGhlIGJhbmQncyBjb2xvcnMuICovXG4uc2VjdGlvbjpub3QoLnBsYWluKSAuY2FyZDpub3QoLmNhcmQtLXBsYWluKSB7XG5cdC0tYmFuZC1ib2R5OiBpbml0aWFsO1xuXHQtLWJhbmQtaGVhZGluZzogaW5pdGlhbDtcbn1cblxuLmNhcmQtaW1nLWxpbmsge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY2FyZC1pbWcge1xuXHR3aWR0aDogMTAwJTtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYXUtbmF2eSksIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcblx0LyogYSBsaW5rZWQgaW1hZ2UgaXMgYSBidXR0b24sIG5vdCB0ZXh0IOKAlCBzdG9wIFNhZmFyaSBzaG93aW5nIHRoZSB0ZXh0LXNlbGVjdFxuXHQgICBJLWJlYW0gKGFuZCBkcmFnZ2luZykgd2hlbiB0aGUgaW1hZ2UgaGFzIHdvcmRzIGJha2VkIGludG8gaXQuICovXG5cdC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG5cdHVzZXItc2VsZWN0OiBub25lO1xuXHQtd2Via2l0LXVzZXItZHJhZzogbm9uZTtcbn1cblxuLyogaWNvbiBsZWFkIOKAlCBpY29uLWxlZCBjYXJkcyAoc2VydmljZXMgLyBmZWF0dXJlcykgaW4gcGxhY2Ugb2YgYSBwaG90byAqL1xuLmNhcmQtaWNvbiB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0d2lkdGg6IDMuMjVyZW07XG5cdGhlaWdodDogMy4yNXJlbTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xufVxuXG4uY2FyZC1ib2R5IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG5cdGZsZXg6IDE7XG59XG5cbi5jYXJkLWV5ZWJyb3cge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMXB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmNhcmQtdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMS4yNTtcbn1cblxuLmNhcmQtdGl0bGUgYSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jYXJkLXRpdGxlIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG59XG5cbi5jYXJkLXRleHQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLyogQXV0aG9yZWQgcmljaCB0ZXh0IOKAlCB0aGUgQ0tFZGl0b3IgYGNvbnRlbnRgIGZpZWxkIGxhbmRzIHdob2xlIGluc2lkZVxuICAgLmNhcmQtdGV4dCwgYW5kIGJhc2UuY3NzIHJlc2V0cyBldmVyeSBtYXJnaW4gdG8gMC4gV2l0aG91dCByaHl0aG0gaGVyZSBhblxuICAgYXV0aG9yZWQgPGgzPiBzaXRzIGZsdXNoIGFnYWluc3QgdGhlIHBhcmFncmFwaCBhYm92ZSBpdCBhbmQgdGhlIGJsb2NrIHJlYWRzXG4gICBhcyBvbmUgbHVtcCAoLnBhZ2UtbWFpbiByZS1lc3RhYmxpc2hlcyB0aGUgc2FtZSByaHl0aG0gZm9yIHBhZ2UgY29udGVudDtcbiAgIHRoZXNlIGFyZSB0aGUgY2FyZC1zY2FsZSBlcXVpdmFsZW50cyDigJQgdGlnaHRlciwgYmVjYXVzZSBhIGNhcmQgaXMgYSBtdWNoXG4gICBuYXJyb3dlciBtZWFzdXJlKS5cblxuICAgSGVhZGluZyBTSVpFIG1hdHRlcnMgdG9vOiBiYXNlLmNzcyBnaXZlcyBoMyAtLXRleHQtMnhsLCB3aGljaCBpcyBsYXJnZXIgdGhhblxuICAgdGhlIGNhcmQncyBvd24gLmNhcmQtdGl0bGUgKC0tdGV4dC1sZyksIHNvIGFuIGF1dGhvcmVkIGhlYWRpbmcgd2FzXG4gICBvdXQtc2hvdXRpbmcgdGhlIHRpdGxlIGl0IHNpdHMgdW5kZXIuIFN0ZXBwZWQgZG93biBzbyB0aGUgaGllcmFyY2h5IHJlYWRzXG4gICBjYXJkLXRpdGxlID4gYXV0aG9yZWQgaGVhZGluZyA+IGJvZHkuXG5cbiAgIEZpcnN0IGNoaWxkIHNpdHMgZmx1c2ggdG8gdGhlIHRvcCDigJQgLmNhcmQtYm9keSdzIGZsZXggZ2FwIGFscmVhZHkgc3BhY2VzIGl0XG4gICBmcm9tIHRoZSB0aXRsZSBhYm92ZS4gKi9cbi5jYXJkLXRleHQgPiA6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uY2FyZC10ZXh0IDppcyhwLCB1bCwgb2wsIHRhYmxlLCBibG9ja3F1b3RlLCBmaWd1cmUpIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5jYXJkLXRleHQgOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMS4yNTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4vKiBIZWFkaW5nIHNjYWxlIGZvciBhdXRob3JlZCBjYXJkIHRleHQuIGJhc2UuY3NzIHNpemVzIGhlYWRpbmdzIGZvciBhIGZ1bGxcbiAgIHBhZ2UgKGgzIGlzIC0tdGV4dC0yeGwgLyAzMXB4KSwgd2hpY2ggaW5zaWRlIGEgY2FyZCBvdXQtc2hvdXRzIHRoZVxuICAgLmNhcmQtdGl0bGUgYWJvdmUgaXQuIFJlc2NhbGVkIHRvIHNpdCBiZXR3ZWVuIHRoZSBjYXJkIHRpdGxlICgtLXRleHQtbGcgL1xuICAgMjBweCkgYW5kIHRoZSBib2R5IGNvcHkgKC0tdGV4dC1zbSAvIDE0cHgpIOKAlCBidXQgZWFjaCBsZXZlbCBzdGlsbCBzdGVwcywgc29cbiAgIGNob29zaW5nIGgyIHZzIGgzIHZzIGg0IGNvbnRpbnVlcyB0byBtZWFuIHNvbWV0aGluZy4gaDUvaDYgcnVuIG91dCBvZiByb29tXG4gICBvbiBzaXplIGFsb25lIGluIGEgMTTigJMyMHB4IGJhbmQsIHNvIHRoZXkgc2VwYXJhdGUgYnkgd2VpZ2h0IGFuZCBsZXR0ZXJmb3JtXG4gICBpbnN0ZWFkLCB0aGUgc2FtZSB0cmljayBiYXNlLmNzcyB1c2VzIGZvciBoNi4gKi9cbi5jYXJkLXRleHQgaDEge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xufVxuXG4uY2FyZC10ZXh0IGgyIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcbn1cblxuLmNhcmQtdGV4dCBoMyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcbn1cblxuLmNhcmQtdGV4dCBoNCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5jYXJkLXRleHQgaDUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uY2FyZC10ZXh0IGg2IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xufVxuXG4vKiBhIGhlYWRpbmcgYmVsb25ncyB3aXRoIHRoZSB0ZXh0IHVuZGVyIGl0IOKAlCBrZWVwIHRoYXQgZ2FwIHRpZ2h0ZXIgKi9cbi5jYXJkLXRleHQgOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpICsgOmlzKHAsIHVsLCBvbCkge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmNhcmQtY3RhIHtcblx0bWFyZ2luLXRvcDogYXV0bztcblx0YWxpZ24tc2VsZjogZmxleC1zdGFydDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5jYXJkLWN0YTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogbGlua2VkIGNhcmQg4oCUIHRoZSB3aG9sZSBjYXJkIGlzIHRoZSBjbGljayB0YXJnZXQgKGEgXCJzdHJldGNoZWQgbGlua1wiKSwgc28geW91XG4gICBkb24ndCBoYXZlIHRvIGhpdCB0aGUgbGluayB0ZXh0IGV4YWN0bHkuIFRoZSBjYXJkJ3MgbGluayBzdHJldGNoZXMgdG8gY292ZXJcbiAgIGl0OyB0aGUgcG9pbnRlciBjdXJzb3IgZm9sbG93cy4gKFRleHQgc2VsZWN0aW9uIGluc2lkZSBpcyB0cmFkZWQgZm9yIHRoZSBmdWxsXG4gICBjbGljayBhcmVhIOKAlCBleHBlY3RlZCBmb3IgYSBjYXJkLWFzLWEtbGluay4pICovXG4uY2FyZC0tbGlua2VkIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY2FyZC0tbGlua2VkIDppcyguY2FyZC1pbWctbGluaywgLmNhcmQtdGl0bGUgYSwgLmNhcmQtY3RhKTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xufVxuXG4vKiBtZWRpYS1vbmx5IGNhcmQgKGltYWdlLCBubyBib2R5KTogc2hvdyB0aGUgaW1hZ2UgYXQgaXRzIG5hdHVyYWwgcmF0aW8gd2l0aCBhbGxcbiAgIGZvdXIgY29ybmVycyByb3VuZGVkLCBhbmQgZG9uJ3Qgc3RyZXRjaCB0byBhIHRhbGxlciBzaWJsaW5nICh3aGljaCB3b3VsZCBsZWF2ZVxuICAgYW4gdW4tcm91bmRlZCBzdHJpcCBvZiBjYXJkIGJlbG93IHRoZSBpbWFnZSkuICovXG4uY2FyZC0tbWVkaWEge1xuXHRhbGlnbi1zZWxmOiBzdGFydDtcbn1cblxuLyogbm8gcGxhY2Vob2xkZXIgZ3JhZGllbnQgaGVyZSDigJQgaW1hZ2Utb25seSBjYXJkcyBhcmUgdXN1YWxseSB0cmFuc3BhcmVudCBsb2dvc1xuICAgb3IgZ3JhcGhpY3MsIGFuZCB0aGUgbmF2eSBmaWxsIHdvdWxkIHNob3cgdGhyb3VnaCBhbmQgYm94IHRoZW0gaW4uIExldCB0aGVcbiAgIGNhcmQvYmFuZCBiZWhpbmQgc2hvdyBpbnN0ZWFkLiAoUGhvdG8gY2FyZHMga2VlcCB0aGUgZ3JhZGllbnQgYXMgYSBsb2FkaW5nL1xuICAgZmFsbGJhY2sgYmFja2Ryb3AuKSAqL1xuLmNhcmQtLW1lZGlhIC5jYXJkLWltZyB7XG5cdGFzcGVjdC1yYXRpbzogYXV0bztcblx0aGVpZ2h0OiBhdXRvO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xufVxuXG4vKiBwb3J0cmFpdCBzZWN0aW9uIHRva2VuIChDdXN0b20gQ2xhc3MgXCJwb3J0cmFpdFwiKSDigJQgZm9yIHJvd3Mgb2YgcGVvcGxlOiB0aGVcbiAgIGRlZmF1bHQgMTY6OSBjcm9wIHNsaWNlcyBhIGhlYWRzaG90IHRocm91Z2ggdGhlIGZhY2UsIHNvIGNyb3AgdG8gNDo1IGFuZFxuICAgYW5jaG9yIHRvIHRoZSB0b3AgdG8ga2VlcCBoZWFkcyBpbiBmcmFtZS4gQWxzbyB3b3JrcyBvbiBhIHNpbmdsZSBjYXJkLiAqL1xuLnBvcnRyYWl0IC5jYXJkLWltZyxcbi5jYXJkLS1wb3J0cmFpdCAuY2FyZC1pbWcge1xuXHRhc3BlY3QtcmF0aW86IDQvNTtcblx0b2JqZWN0LXBvc2l0aW9uOiB0b3A7XG59XG5cbi8qIHJvd3Mgb2YgcGVvcGxlIGdldCBlcXVhbCBjb2x1bW5zOiBpbiBhIHNlY3Rpb24gdGhhdCB3cmFwcywgdGhlIHNob3J0IGxhc3RcbiAgIHJvdyBrZWVwcyB0aGUgY2FyZCB3aWR0aCBpbnN0ZWFkIG9mIHN0cmV0Y2hpbmcgdHdvIHBob3RvcyBhY3Jvc3MgdGhlIGJhbmQ7XG4gICBhIHNlY3Rpb24gd2l0aCBhIHNpbmdsZSByb3cgc3RpbGwgZmlsbHMgaXQgKGF1dG8tZml0IGNvbGxhcHNlcyBlbXB0eSB0cmFja3MpICovXG4ucG9ydHJhaXQgLmdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KG1pbigxMDAlLCAyMzBweCksIDFmcikpO1xufVxuXG4vKiB3aXRoIGBjb21wYWN0YDogYXQgbW9zdCBmb3VyIGNvbHVtbnMgKGVhY2ggYXQgbGVhc3QgMjAwcHgpLCBzbyBhIHJvdyBvZlxuICAgZm91ciBmaXRzIGF0IGxhcHRvcCB3aWR0aHMsIGFuZCBhIHNob3J0IHJvdyAoMiBvciAzIHBlb3BsZSkga2VlcHMgdGhlIHNhbWVcbiAgIGNhcmQgd2lkdGggaW5zdGVhZCBvZiBzdHJldGNoaW5nIGFjcm9zcyB0aGUgYmFuZCAoL2NoaHMvcHVibGljaGVhbHRoL2ZhY3VsdHkvKSAqL1xuLnBvcnRyYWl0LmNvbXBhY3QgLmdyaWQge1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgbWF4KDIwMHB4LCAoMTAwJSAtIDMgKiB2YXIoLS1zcGFjZS01KSkgLyA0KSksIDFmcikpO1xufVxuXG4vKiBuYXR1cmFsIHNlY3Rpb24gdG9rZW4gKEN1c3RvbSBDbGFzcyBcIm5hdHVyYWxcIikg4oCUIGVhY2ggY2FyZCBpbWFnZSBhdCBpdHMgb3duXG4gICBzaGFwZSwgdW5jcm9wcGVkOiBmb3IgYSByb3cgb2Ygc3F1YXJlIChvciBvdGhlcndpc2UgbWF0Y2hpbmcpIHBob3RvcyB0aGF0IGFcbiAgIDE2Ojkgc3RyaXAgd291bGQgc2xpY2UgdGhyb3VnaCB0aGUgaGVhZHMgKC9jYXMvbWF0aC8gXCJXaHkgU3R1ZHkgTWF0aFwiKSAqL1xuLm5hdHVyYWwgLmNhcmQtaW1nIHtcblx0YXNwZWN0LXJhdGlvOiBhdXRvO1xufVxuXG4vKiBmYWNlcyBzZWN0aW9uIHRva2VuIChDdXN0b20gQ2xhc3MgXCJmYWNlc1wiKSDigJQgdGFsbCBwaG90b3Mgb2YgcGVvcGxlIGluIGEgcm93XG4gICBvZiB3aWRlIGNhcmRzICgvY2FzL2FncmljdWx0dXJlLyk6IGEgMTY6OSBzbGljZSB0aHJvdWdoIHRoZSBtaWRkbGUgb2YgYVxuICAgcG9ydHJhaXQgcGhvdG8gY3V0cyBvZmYgdGhlIGhlYWRzLCBzbyBjcm9wIDQ6MyBhbmQga2VlcCB0aGUgdXBwZXIgcGFydCAqL1xuLmZhY2VzIC5jYXJkLWltZyB7XG5cdGFzcGVjdC1yYXRpbzogNC8zO1xuXHRvYmplY3QtcG9zaXRpb246IDUwJSAxNSU7XG59XG5cbi8qIHBsYWluIHZhcmlhbnQg4oCUIG5vIGZpbGwgKGUuZy4gb24gYSBjb2xvcmVkIGJhbmQpLiBvdmVyZmxvdzp2aXNpYmxlIGJlY2F1c2UgdGhlXG4gICBjYXJkIGhhcyBubyBmaWxsL2JvcmRlciB0byBjbGlwLCB0aGUgaW1hZ2Ugcm91bmRzIGl0c2VsZiwgYW5kIHRoZSByb3VuZGVkLWNvcm5lclxuICAgY2xpcCB3YXMgY3V0dGluZyBkZXNjZW5kZXJzICh0aGUgXCJnXCIpIG9mZiBhIGNhcHRpb24gc2l0dGluZyBmbHVzaCB0byB0aGUgYm90dG9tLiAqL1xuLmNhcmQtLXBsYWluIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0b3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi5jYXJkLS1wbGFpbjpob3ZlciB7XG5cdHRyYW5zZm9ybTogbm9uZTtcblx0Ym94LXNoYWRvdzogbm9uZTtcblx0Ym9yZGVyOiAwO1xufVxuXG4vKiBvbiBhIHBsYWluIGNhcmQgKG5vIGZpbGwgLyBubyBvdXRsaW5lKSB0aGUgaW1hZ2UgaXMgYSBzdGFuZGFsb25lIHRpbGUg4oCUIHJvdW5kXG4gICBBTEwgZm91ciBjb3JuZXJzICh0aGUgY2FyZCdzIGNsaXAgb25seSByb3VuZHMgdGhlIHRvcCwgc2luY2UgdGhlIGJvZHkgc2l0c1xuICAgYmVsb3cpLCBhbmQgcHVsbCB0aGUgY2FwdGlvbiBmbHVzaC1sZWZ0IHVuZGVyIGl0IHdpdGggdGlnaHQgdG9wIHBhZGRpbmcuICovXG4vKiBjaGlsZCBjb21iaW5hdG9yczogYSAuY2FyZCBhdXRob3JlZCBJTlNJREUgYSBwbGFpbiBjYXJkJ3MgcmljaCB0ZXh0IChhIG5lc3RlZFxuICAgZ3JpZCBvZiBjYXJkcykga2VlcHMgaXRzIG93biBwYWRkaW5nIGFuZCBpbWFnZSBjb3JuZXJzLiAqL1xuLmNhcmQtLXBsYWluID4gLmNhcmQtaW1nLCAuY2FyZC0tcGxhaW4gPiAuY2FyZC1pbWctbGluayAuY2FyZC1pbWcge1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xufVxuXG4vKiBhIC5jYXJkLWltZyBhdXRob3JlZCBpbiB0aGUgcmljaCB0ZXh0IChpbWFnZSBwbGFjZWQgYWJvdmUgYSB0aXRsZSBpbiB0aGVcbiAgIGNvbnRlbnQsIGUuZy4gL3VuZGVyZ3JhZCkgaXMgYSBzdGFuZGFsb25lIHRpbGUgdG9vIOKAlCByb3VuZCBpdCB0aGUgc2FtZSB3YXkuICovXG4uY2FyZC10ZXh0IC5jYXJkLWltZyB7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG59XG5cbi5jYXJkLS1wbGFpbiA+IC5jYXJkLWJvZHkge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSAwIDA7XG59XG5cbi8qIHBsYWluIGNhcmRzIHNpdCBkaXJlY3RseSBvbiB0aGUgYmFuZCwgc28gdGhlaXIgdGV4dCBmb2xsb3dzIHRoZSBiYW5kIHRva2VucyAqL1xuLmNhcmQtLXBsYWluIC5jYXJkLXRpdGxlIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uY2FyZC0tcGxhaW4gLmNhcmQtdGV4dCB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xufVxuXG4vKiBoZWFkaW5ncyBhdXRob3JlZCBpbnNpZGUgdGhlIHJpY2gtdGV4dCBjb250ZW50IGZvbGxvdyB0aGUgYmFuZCB0b28g4oCUIG90aGVyd2lzZVxuICAgYW4gPGgyPiBpbiBhIHBsYWluIGNhcmQgc3RheXMgbmF2eSBhbmQgZGlzYXBwZWFycyBvbiBhIGRhcmsgYmFuZC4gKi9cbi5jYXJkLS1wbGFpbiAuY2FyZC10ZXh0IDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLyogYHBsYWluYCBzZWN0aW9uIHRva2VuIChDdXN0b20gQ2xhc3MpOiBldmVyeSBjYXJkIGluIHRoZSBzZWN0aW9uIGRyb3BzIGl0c1xuICAgY2hyb21lIGFuZCByZWFkcyBhcyB0ZXh0IG9uIHRoZSBiYW5kIC0tIGZvciBpbnRybyAvIHN0YXRlbWVudCByb3dzIGJ1aWx0IGFzXG4gICBvbmUgdGV4dC1vbmx5IGNvbHVtbnMgY2FyZCwgd2hpY2ggb3RoZXJ3aXNlIHNpdCBpbiBhIGJvcmRlcmVkIGJveC4gU2FtZSBsb29rXG4gICBhcyBlYWNoIGNhcmQncyBvd24gXCJ0cmFuc3BhcmVudFwiIHN3aXRjaCwgc2V0IG9uY2UgZm9yIHRoZSBzZWN0aW9uLiAqL1xuLnNlY3Rpb24ucGxhaW4gLmdyaWQgPiAuY2FyZCB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRib3gtc2hhZG93OiBub25lO1xuXHRib3JkZXI6IDA7XG5cdG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4uc2VjdGlvbi5wbGFpbiAuZ3JpZCA+IC5jYXJkOmhvdmVyIHtcblx0dHJhbnNmb3JtOiBub25lO1xuXHRib3gtc2hhZG93OiBub25lO1xuXHRib3JkZXI6IDA7XG59XG5cbi5zZWN0aW9uLnBsYWluIC5ncmlkID4gLmNhcmQgPiAuY2FyZC1ib2R5IHtcblx0cGFkZGluZzogMDtcbn1cblxuLnNlY3Rpb24ucGxhaW4gLmdyaWQgPiAuY2FyZCAuY2FyZC10ZXh0IHtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi8qIOKUgOKUgOKUgCBieWxpbmU6IGEgc21hbGwgcm91bmQgcG9ydHJhaXQgKyBuYW1lL3RpdGxlIHVuZGVyIGF1dGhvcmVkIHRleHRcbiAgIChlLmcuIGEgZGVhbidzIG1lc3NhZ2UpLiA8ZGl2IGNsYXNzPVwiYnlsaW5lXCI+PGltZyDigKY+PHA+PHN0cm9uZz5OYW1lPC9zdHJvbmc+PGJyPlRpdGxlPC9wPjwvZGl2PiAqL1xuLmJ5bGluZSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uYnlsaW5lIGltZyB7XG5cdHdpZHRoOiA4OHB4O1xuXHRoZWlnaHQ6IDg4cHg7XG5cdGZsZXg6IG5vbmU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRvYmplY3QtcG9zaXRpb246IHRvcDtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4uY2FyZC10ZXh0IC5ieWxpbmUgcCB7XG5cdG1hcmdpbjogMDtcbn1cblxuLyog4pSA4pSA4pSAIGxvZ28tdGlsZTogb25lIHNwb25zb3IvcGFydG5lciBwZXIgY29sdW1ucyBjYXJkIOKAlCBhIGxvZ28gKG9wdGlvbmFsbHkgbGlua2VkKVxuICAgb3IsIHdoZW4gdGhlcmUncyBubyBsb2dvLCB0aGUgbmFtZSDigJQgY2VudGVyZWQgaW4gYSBib3ggb2YgZXZlbiBoZWlnaHQgc28gYSByb3dcbiAgIG9mIG1peGVkIGxvZ29zIGxpbmVzIHVwLiA8ZGl2IGNsYXNzPVwibG9nby10aWxlXCI+PGEgaHJlZuKApj48aW1nIOKApj48L2E+PC9kaXY+ICovXG4ubG9nby10aWxlIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdG1pbi1oZWlnaHQ6IDEyMHB4O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ubG9nby10aWxlIGltZyB7XG5cdG1heC1oZWlnaHQ6IDk2cHg7XG5cdHdpZHRoOiBhdXRvO1xuXHRtYXgtd2lkdGg6IDEwMCU7XG5cdG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi5sb2dvLXRpbGUgYSB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuXG4vKiBhIHJvdyBvZiBsb2dvcyBhdXRob3JlZCBpbiBvbmUgcmljaC10ZXh0IGFyZWEgKC9jYXMvc3RlbS9pbnZlbnQvIHNwb25zb3JzKTpcbiAgIDxkaXYgY2xhc3M9XCJsb2dvLWdyaWRcIj48ZGl2IGNsYXNzPVwibG9nby10aWxlXCI+PGltZyDigKY+PC9kaXY+4oCmPC9kaXY+IOKAlCBlcXVhbFxuICAgY29sdW1ucyB0aGF0IGZpdCBmaXZlIGFjcm9zcywgZWFjaCBsb2dvIGZyYW1lZCBpbiBhIGxpZ2h0IHRpbGUgKi9cbi5sb2dvLWdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KG1pbigxMDAlLCAxNTBweCksIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4ubG9nby1ncmlkID4gLmxvZ28tdGlsZSB7XG5cdG1pbi1oZWlnaHQ6IDEyOHB4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbn1cblxuLmxvZ28tZ3JpZCA+IC5sb2dvLXRpbGUgaW1nIHtcblx0bWF4LWhlaWdodDogODBweDtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBmZWF0dXJlLmNzcyAgwrcgIGZ1bGwtYmxlZWQgZmVhdHVyZSBibG9ja3Mg4oCUIHBhZ2UgaGVybyArIGNvdmVyIGJhbmRcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MsIGxheW91dC5jc3MgKC5zZWN0aW9uIC8gLnNlY3Rpb24taW5uZXIpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBIRVJPIOKAlCBwYWdlLXRvcCBiYW5uZXIgKGltYWdlIG9yIGJhY2tncm91bmQgdmlkZW8pIOKUgOKUgOKUgCAqL1xuLmhlcm8ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdC8qIHdhcyA3MHZoIOKAlCBncmV3IHVuYm91bmRlZCBvbiB0YWxsIGRlc2t0b3BzLiBDYXAgaXQ6IGEgc2Vuc2libGUgZmxvb3IsIGFcblx0ICAgbW9kZXN0IHZpZXdwb3J0LXJlbGF0aXZlIHByZWZlcmVuY2UsIGFuZCBhIGNlaWxpbmcgc28gYmlnIHNjcmVlbnMgZG9uJ3QgZ2V0XG5cdCAgIGEgaHVnZSBiYW5kIG9mIGVtcHR5IGltYWdlLiBDb250ZW50IHN0aWxsIGV4cGFuZHMgaXQgaWYgaXQgbmVlZHMgdG8uICovXG5cdG1pbi1oZWlnaHQ6IGNsYW1wKDMyMHB4LCA0NnZoLCA0NjBweCk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKSBjZW50ZXIvY292ZXIgbm8tcmVwZWF0O1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uaGVybzo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQgMjAlLCByZ2JhKDAsIDI2LCA1MSwgMC43NSkgNzAlLCByZ2JhKDAsIDI2LCA1MSwgMC45KSk7XG59XG5cbi5oZXJvLWlubmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR6LWluZGV4OiAyO1xuXHR3aWR0aDogMTAwJTtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMikgdmFyKC0tZ3V0dGVyKTtcbn1cblxuLmhlcm8tdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LTN4bCksIDZ2dywgdmFyKC0tdGV4dC00eGwpKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0bWF4LXdpZHRoOiAxOGNoO1xuXHR0ZXh0LXNoYWRvdzogMCAycHggMTJweCByZ2JhKDAsIDIwLCA0MCwgMC42KTtcbn1cblxuLmhlcm8tY2FwdGlvbiB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aC10ZXh0KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLyogbGlua3MgaW4gdGhlIGNhcHRpb24gcmVhZCBsaWdodCBvbiB0aGUgcGhvdG8gKHRoZSBiYXNlIGxpbmsgbmF2eSBkaXNhcHBlYXJzKSAqL1xuLmhlcm8tY2FwdGlvbiBhIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4uaGVyby1jb250YWN0IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG59XG5cbi5oZXJvLWNvbnRhY3QgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLyog4pSA4pSA4pSAIEhFUk8gQUJPVkUg4oCUIHNob3J0ZXIgYmFubmVyIGZvciBpbnRlcmlvciBwYWdlcyB3aXRoIHNpZGViYXIgYmVsb3cg4pSA4pSA4pSAICovXG4uaGVyby0tYWJvdmUge1xuXHRtaW4taGVpZ2h0OiBjbGFtcCgyMDBweCwgMzB2aCwgMzQwcHgpO1xufVxuXG4uaGVyby0tYWJvdmUgLmhlcm8tdGl0bGUge1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtMnhsKSwgNXZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xufVxuXG4vKiDilIDilIDilIAgSEVSTyBHUkFQSElDIOKAlCBjYW1wYWlnbiBhcnQgdGhhdCBjYXJyaWVzIGl0cyBvd24gaGVhZGxpbmUg4pSA4pSA4pSAXG4gICBwcm9wcy5zdHlsZS5oZXJvID0gXCJncmFwaGljXCIuIFRoZSBiYW5kIHRha2VzIHRoZSBhcnQncyA1OjIgcHJvcG9ydGlvbnMgc29cbiAgIGNvdmVyLWNyb3BwaW5nIGNhbid0IGN1dCB0aGUgbGV0dGVyaW5nLCBkcm9wcyB0aGUgZGFya2VuaW5nIGdyYWRpZW50LCBhbmRcbiAgIGtlZXBzIHRoZSBwYWdlIDxoMT4gZm9yIHNjcmVlbiByZWFkZXJzL1NFTyBidXQgdmlzdWFsbHkgaGlkZGVuIHNvIGl0IGNhbid0XG4gICBjb2xsaWRlIHdpdGggdGhlIHdvcmRzIGJha2VkIGludG8gdGhlIGltYWdlLiAqL1xuLmhlcm8tLWdyYXBoaWMge1xuXHRtaW4taGVpZ2h0OiAwO1xuXHRhc3BlY3QtcmF0aW86IDUvMjtcbn1cblxuLmhlcm8tLWdyYXBoaWM6OmFmdGVyLFxuLmhlcm8tLWJhcmU6OmFmdGVyIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLmhlcm8tLWdyYXBoaWMgLmhlcm8taW5uZXIge1xuXHRwYWRkaW5nOiAwO1xufVxuXG4vKiBoZXJvLS1iYXJlIChzZXQgYnkgaGVyby50dCk6IG5vdGhpbmcgaXMgd3JpdHRlbiBvdmVyIHRoZSBwaG90bywgc28gaXQgbG9zZXMgdGhlXG4gICBncmFkaWVudCB0b28gYW5kIGl0cyB0aXRsZSBpcyBzY3JlZW4tcmVhZGVyIG9ubHksIGF0IHRoZSBiYW5kJ3MgdXN1YWwgaGVpZ2h0ICovXG4uaGVyby0tZ3JhcGhpYyAuaGVyby10aXRsZSxcbi5oZXJvLS1iYXJlIC5oZXJvLXRpdGxlIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR3aWR0aDogMXB4O1xuXHRoZWlnaHQ6IDFweDtcblx0bWFyZ2luOiAtMXB4O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKiDilIDilIDilIAgSEVSTyBSQVRJTyDigJQgdGhlIHdob2xlIHBob3RvLCBhdCB0aGUgbGVnYWN5IGhvbWVwYWdlIGhlcm8ncyA1OjIg4pSA4pSA4pSAXG4gICBwcm9wcy5zdHlsZS5oZXJvID0gXCJyYXRpb1wiLiBMaWtlIFwiZ3JhcGhpY1wiIHRoZSBiYW5kIHRha2VzIHRoZSBpbWFnZSdzIDU6MlxuICAgcHJvcG9ydGlvbnMgaW5zdGVhZCBvZiBhIGZpeGVkIGhlaWdodCwgc28gYSAyNDAweDk2MCBoZXJvIGlzIG5ldmVyXG4gICBjb3Zlci1jcm9wcGVkIChubyBjdXQtb2ZmIGhlYWRzKSwgYnV0IHRoZSB0aXRsZSwgY2FwdGlvbiBhbmQgZGFya2VuaW5nXG4gICBncmFkaWVudCBzdGF5LiBPbiBwaG9uZXMgaXQgZmFsbHMgYmFjayB0byB0aGUgZGVmYXVsdCBoZWlnaHQgc28gdGhlIHRpdGxlXG4gICBzdGlsbCBmaXRzIG92ZXIgdGhlIGltYWdlLiAqL1xuLmhlcm8tLXJhdGlvIHtcblx0bWluLWhlaWdodDogMDtcblx0YXNwZWN0LXJhdGlvOiA1LzI7XG59XG5cbi5oZXJvLS1yYXRpbyAuaGVyby1pbm5lciB7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTYpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcblx0Lmhlcm8tLXJhdGlvIHtcblx0XHRhc3BlY3QtcmF0aW86IGF1dG87XG5cdFx0bWluLWhlaWdodDogMjYwcHg7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBIRVJPIENST1Ag4oCUIHByb3BzLnN0eWxlLmhlcm9fY3JvcCA9IFwidG9wXCI6IGtlZXAgdGhlIHVwcGVyIHBhcnQgb2YgdGhlXG4gICBwaG90by4gU2VwYXJhdGUgZnJvbSBwcm9wcy5zdHlsZS5oZXJvIHNvIGl0IGNvbWJpbmVzIHdpdGggXCJyYXRpb1wiIChhIDM6MlxuICAgcGhvdG8gaW4gdGhlIDU6MiBiYW5kLCBwZW9wbGUgaGlnaCBpbiB0aGUgZnJhbWU7IC9jYXMvYWdyaWN1bHR1cmUvYWdjZW50ZXIvKSAqL1xuLmhlcm8tLWNyb3AtdG9wIHtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDE1JTtcbn1cblxuLyogXCJib3R0b21cIjogcGVvcGxlIGxvdyBpbiB0aGUgZnJhbWUgKGEgZ3JvdXAgcGhvdG8gc3RhbmRpbmcgaW4gZnJvbnQgb2YgYVxuICAgYnVpbGRpbmc7IC9jaGhzL251cnNpbmcvYXBwbHkvKSAqL1xuLmhlcm8tLWNyb3AtYm90dG9tIHtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDgwJTtcbn1cblxuLyog4pSA4pSA4pSAIEhFUk8gU1BMSVQg4oCUIHRleHQgbGVmdCwgcGhvdG8gY2FyZCByaWdodCwgc29saWQgbmF2eSDilIDilIDilIAgKi9cbi5oZXJvLS1zcGxpdCB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDtcblx0bWluLWhlaWdodDogYXV0bztcbn1cblxuLmhlcm8tLXNwbGl0OjphZnRlciB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5oZXJvLS1zcGxpdCAuaGVyby1pbm5lciB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xMCk7XG59XG5cbi5oZXJvLS1zcGxpdCAuaGVyby10aXRsZSB7XG5cdHRleHQtc2hhZG93OiBub25lO1xufVxuXG4uaGVyby0tc3BsaXQgLmhlcm8tbWVkaWEgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGFzcGVjdC1yYXRpbzogNC8zO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdC5oZXJvLS1zcGxpdCAuaGVyby1pbm5lciB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0fVxuXHQuaGVyby0tc3BsaXQgLmhlcm8tbWVkaWEge1xuXHRcdG9yZGVyOiAtMTtcblx0fVxuXHQuaGVyby0tc3BsaXQgLmhlcm8tbWVkaWEgaW1nIHtcblx0XHRhc3BlY3QtcmF0aW86IDE2Lzk7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBDT1ZFUiDigJQgZnVsbC1ibGVlZCBwaG90by92aWRlbyBiYW5kIHdpdGggYSBjb250ZW50IHBhbmVsIOKUgOKUgOKUgCAqL1xuLnNlY3Rpb24tLWNvdmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRtaW4taGVpZ2h0OiA2MHZoO1xuXHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS0xMik7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpIGNlbnRlci9jb3ZlciBuby1yZXBlYXQ7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5zZWN0aW9uLS1jb3Zlcjo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMCwgMjYsIDUxLCAwLjgpLCByZ2JhKDAsIDI2LCA1MSwgMC4yKSk7XG59XG5cbi8qIE5vIGNvbnRlbnQgcGFuZWwg4oaSIG5vIG92ZXJsYXk7IGxldCB0aGUgcGhvdG8gc2hvdyB1bm9ic2N1cmVkLiAqL1xuLnNlY3Rpb24tLWNvdmVyOm5vdCg6aGFzKC5jb3Zlci1wYW5lbCkpOjphZnRlciB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIHdpZHRoOjEwMCUgc3RvcHMgdGhlIGZsZXggYmFuZCBmcm9tIGNvbGxhcHNpbmcgLnNlY3Rpb24taW5uZXIgZG93biB0byB0aGVcbiAgIHBhbmVsJ3Mgd2lkdGggKHdoaWNoIGlzIHdoYXQgY2VudHJlcyBpdCkg4oCUIGluc3RlYWQgaXQgZmlsbHMgdGhlIGNvbnRlbnQgY29sdW1uXG4gICAobWF4LXdpZHRoLCBjZW50cmVkKSwgZ2l2aW5nIHRoZSBwYW5lbCByb29tIHRvIHNoaWZ0IGxlZnQvcmlnaHQgd2l0aGluIGl0IGFuZFxuICAgYWxpZ25pbmcgdGhvc2UgZWRnZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcGFnZS4gKi9cbi5zZWN0aW9uLS1jb3ZlciA+IC5zZWN0aW9uLWlubmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR6LWluZGV4OiAyO1xuXHR3aWR0aDogMTAwJTtcbn1cblxuLmNvdmVyLXBhbmVsIHtcblx0bWF4LXdpZHRoOiA1NDBweDtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLmNvdmVyLXBhbmVsIDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi8qIGNvbnRlbnQgbGlua3Mgb24gdGhlIGNvdmVyJ3MgZGFyayBncm91bmQg4oCUIGxpZ2h0IGdvbGQsIG5vIGRlZmF1bHQgdW5kZXJsaW5lXG4gICAodGhlIG5hdnkgKyB1bmRlcmxpbmUgZGVmYXVsdCBpcyB1bnJlYWRhYmxlIG9uIHRoZSBpbWFnZSkuIFRoaXMgaXMgdGhlIGhhcHB5XG4gICBkZWZhdWx0LCBzbyBhdXRob3JzIGRvbid0IG5lZWQgdG8gaGFuZC1jb2xvciBldmVyeSBsaW5rLiAqL1xuLmNvdmVyLXBhbmVsIGEge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmNvdmVyLXBhbmVsIGE6aG92ZXIge1xuXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmNvdmVyLXBhbmVsIC5jYXJkLWN0YSB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIOKUgOKUgCBGZWF0dXJlLWxpbmsgcGF0dGVybjogPGE+PHN0cm9uZz5IZWFkaW5nPC9zdHJvbmc+PGVtPlN1Yi1DVEE8L2VtPjwvYT5cbiAgIFdvcmtzIGluIGJvdGggdGhlIGhlcm8gY2FwdGlvbiAoLmhlcm8tY2FwdGlvbikgYW5kIHRoZSBjb3ZlciBwYW5lbCAoLmNvdmVyLXBhbmVsKS5cbiAgIFN0eWxlZCB0byBtYXRjaCB0aGUgaG9tZXBhZ2UgZmVhdHVyZSBsaW5rOiBkYXJrIG5hdnkgYm94LCBzZXJpZiBoZWFkbGluZSwgd2hpdGUgc3ViLWxpbmUuXG4gICBBdXRob3JzIHVzZSBCb2xkICsgSXRhbGljIGluIENLRWRpdG9yIGFuZCB3cmFwIGJvdGggaW4gYSBsaW5rLiAqL1xuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZyksXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDI2LCA1MSwgMC44Mik7XG5cdGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5oZXJvLWNhcHRpb24gYTpoYXMoPiBzdHJvbmcpID4gc3Ryb25nLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKSA+IHN0cm9uZyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1zZXJpZik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5oZXJvLWNhcHRpb24gYTpoYXMoPiBzdHJvbmcpID4gc3Bhbixcbi5oZXJvLWNhcHRpb24gYTpoYXMoPiBzdHJvbmcpID4gZW0sXG4uY292ZXItcGFuZWwgYTpoYXMoPiBzdHJvbmcpID4gc3Bhbixcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZykgPiBlbSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uaGVyby1jYXB0aW9uIGE6aGFzKD4gc3Ryb25nKTpob3Zlcixcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZyk6aG92ZXIge1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5oZXJvLWNhcHRpb24gYTpoYXMoPiBzdHJvbmcpOmhvdmVyID4gc3Ryb25nLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IHN0cm9uZyB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcbn1cblxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZyk6aG92ZXIgPiBzcGFuLFxuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZyk6aG92ZXIgPiBlbSxcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZyk6aG92ZXIgPiBzcGFuLFxuLmNvdmVyLXBhbmVsIGE6aGFzKD4gc3Ryb25nKTpob3ZlciA+IGVtIHtcblx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIENLRWRpdG9yIGluc2VydHMgYSA8YnI+IGJldHdlZW4gdGhlIDxzdHJvbmc+IGFuZCA8ZW0+OyBzdXBwcmVzcyBpdCBzaW5jZVxuICAgYm90aCBhcmUgYWxyZWFkeSBkaXNwbGF5OmJsb2NrLiAqL1xuLmhlcm8tY2FwdGlvbiBhOmhhcyg+IHN0cm9uZykgPiBicixcbi5jb3Zlci1wYW5lbCBhOmhhcyg+IHN0cm9uZykgPiBiciB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIOKUgOKUgOKUgCBjb3ZlciBvdmVybGF5IGFsaWdubWVudCDilIDilIDilIBcbiAgIFRoZSBwYW5lbCBpcyBDRU5URVJFRCBieSBkZWZhdWx0LiBEcm9wIGEgdG9rZW4gaW50byB0aGUgc2VjdGlvbidzIEN1c3RvbSBDbGFzc1xuICAgdG8gc2hpZnQgaXQgdG8gdGhlIHBhZ2UncyBjb250ZW50LWNvbHVtbiBlZGdlOyB0aGUgZ3JhZGllbnQncyBkYXJrIHNpZGUgZm9sbG93c1xuICAgc28gdGhlIG92ZXJsYXkgdGV4dCBzdGF5cyBsZWdpYmxlIG92ZXIgaXQ6XG4gICAgIGNvdmVyLWxlZnQgICDihpIgcGFuZWwgb24gdGhlIExFRlQgIChncmFkaWVudCBhbHJlYWR5IGRhcmtlbnMgdGhlIGxlZnQpXG4gICAgIGNvdmVyLXJpZ2h0ICDihpIgcGFuZWwgb24gdGhlIFJJR0hUIChncmFkaWVudCBmbGlwcyB0byBkYXJrZW4gdGhlIHJpZ2h0KVxuICAgUGFuZWwgd2lkdGgsIHZlcnRpY2FsIGNlbnRlcmluZyBhbmQgdGV4dC1hbGlnbm1lbnQgYXJlIHVuY2hhbmdlZCDigJQgb25seSB0aGVcbiAgIGhvcml6b250YWwgcGxhY2VtZW50IChhbmQsIGZvciB0aGUgcmlnaHQsIHRoZSBncmFkaWVudCBkaXJlY3Rpb24pIHN3aXRjaC4gKi9cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1sZWZ0IC5jb3Zlci1wYW5lbCB7XG5cdG1hcmdpbi1pbmxpbmU6IDAgYXV0bztcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXJpZ2h0IC5jb3Zlci1wYW5lbCB7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG8gMDtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXJpZ2h0OjphZnRlciB7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgyNzBkZWcsIHJnYmEoMCwgMjYsIDUxLCAwLjgpLCByZ2JhKDAsIDI2LCA1MSwgMC4yKSk7XG59XG5cbi8qIGNvdmVyLXRpdGxlIChDdXN0b20gQ2xhc3MpOiBhIHBob3RvIGJhbmQgdGhhdCBjYXJyaWVzIG9uZSBzaG9ydCBoZWFkbGluZSAtLVxuICAgdGhlIGxlZ2FjeSBcImNyZWF0aXZlLXRleHRcIiB0aXRsZSBiYW5kcyAoL2Nhcy92YWNkLyBcIlN0dWRlbnQgV29ya1wiKS4gU2hvcnRlclxuICAgYmFuZCwgYW4gZXZlbiB3YXNoIGluc3RlYWQgb2YgdGhlIHNpZGUgZ3JhZGllbnQsIGJpZyBjZW50cmVkIHNlcmlmIHRpdGxlLiAqL1xuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXRpdGxlIHtcblx0bWluLWhlaWdodDogNDB2aDtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXRpdGxlOjphZnRlciB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMjYsIDUxLCAwLjQpO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItdGl0bGUgLmNvdmVyLXBhbmVsIHtcblx0bWF4LXdpZHRoOiBub25lO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IGNsYW1wKDIuMjVyZW0sIDZ2dywgNC41cmVtKTtcblx0bGluZS1oZWlnaHQ6IDEuMTtcbn1cblxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXRpdGxlIC5jb3Zlci1wYW5lbCBzdHJvbmcge1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4vKiDilIDilIDilIAgY292ZXIgZ3JhZGllbnQgYmFja2dyb3VuZHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBEcm9wIGEgZ3JhZGllbnQgdG9rZW4gaW50byBDdXN0b20gQ2xhc3MgdG8gZ2l2ZSB0aGUgY292ZXIgYSByaWNoXG4gICBiYWNrZ3JvdW5kIHdpdGhvdXQgbmVlZGluZyBhIHBob3RvLiBJZiB0aGUgYXV0aG9yIEFMU08gdXBsb2FkcyBhXG4gICBwaG90bywgdGhlIGlubGluZSBiYWNrZ3JvdW5kLWltYWdlIG92ZXJyaWRlcyB0aGUgQ1NTIGdyYWRpZW50XG4gICBuYXR1cmFsbHkg4oCUIG5vICFpbXBvcnRhbnQsIG5vIHJlbmRlcmVyIGNoYW5nZS5cbiAgICAgY292ZXItbmF2eSAgICDihpIgZGVlcCBkaWFnb25hbCBuYXZ5IHN3ZWVwIChicmFuZCBkZWZhdWx0KVxuICAgICBjb3Zlci1vY2VhbiAgIOKGkiBuYXZ5LXRvLXRlYWwsIGNvb2xlciBhbmQgbW9yZSBkeW5hbWljXG4gICAgIGNvdmVyLWZvcmVzdCAg4oaSIGRlZXAgZ3JlZW5cbiAgICAgY292ZXItZ29sZCAgICDihpIgbmF2eS10by1nb2xkLCB3YXJtIGFuZCBpbnZpdGluZ1xuICAgICBjb3Zlci1lYXJ0aCAgIOKGkiBuYXZ5LXRvLWJyb3duLCBncm91bmRlZFxuICAgICBjb3Zlci1zdW5zZXQgIOKGkiBuYXZ5LXRvLW9yYW5nZSwgYm9sZCBhbmQgZW5lcmdldGljXG4gICBUaGUgc2NyaW0gb3ZlcmxheSBpcyBzdXBwcmVzc2VkIGZvciBncmFkaWVudCBjb3ZlcnMg4oCUIHRoZSBncmFkaWVudFxuICAgaXRzZWxmIHByb3ZpZGVzIGVub3VnaCBjb250cmFzdCBmb3Igd2hpdGUgdGV4dC4gKi9cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1uYXZ5LFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLW9jZWFuLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWZvcmVzdCxcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1nb2xkLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLWVhcnRoLFxuLnNlY3Rpb24tLWNvdmVyLmNvdmVyLXN1bnNldCB7XG5cdGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1uYXZ5OjphZnRlcixcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1vY2Vhbjo6YWZ0ZXIsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZm9yZXN0OjphZnRlcixcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1nb2xkOjphZnRlcixcbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1lYXJ0aDo6YWZ0ZXIsXG4uc2VjdGlvbi0tY292ZXIuY292ZXItc3Vuc2V0OjphZnRlciB7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1uYXZ5IHtcblx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwMWEzMyAwJSwgIzAwMzM2NiA1MCUsICMwMDRhNmUgMTAwJSk7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1vY2VhbiB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDFhMzMgMCUsICMwYTNkNjIgNDAlLCAjMWU1Zjc0IDEwMCUpO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItZm9yZXN0IHtcblx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBhMWYxNSAwJSwgIzFiNDMzMiA1MCUsICMyZDZhNGYgMTAwJSk7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1nb2xkIHtcblx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwMWEzMyAwJSwgIzAwMzM2NiA0MCUsICNDNjk1MkIgMTAwJSk7XG59XG5cbi5zZWN0aW9uLS1jb3Zlci5jb3Zlci1lYXJ0aCB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDFhMzMgMCUsICM0YTM3MjggNTAlLCAjOEI0NTEzIDEwMCUpO1xufVxuXG4uc2VjdGlvbi0tY292ZXIuY292ZXItc3Vuc2V0IHtcblx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwMWEzMyAwJSwgIzAwMzM2NiAzNSUsICNjNDVlMWEgMTAwJSk7XG59XG5cbi8qIOKUgOKUgOKUgCBDT1ZFUiBIRVJPIFNQTElUIOKAlCBhbmdsZWQgaGVybyB3aXRoIGZsb2F0aW5nIGxpbmtzIGNhcmQg4pSA4pSA4pSA4pSAXG4gICBUb2tlbjogXCJjb3Zlci1oZXJvLXNwbGl0XCIgaW4gdGhlIHNlY3Rpb24ncyBDdXN0b20gQ2xhc3MgZmllbGQuXG4gICBUdXJucyBhIHBob3RvX3dpZGUgY292ZXIgaW50byBhIGZ1bGwtYmxlZWQgaGVybyB3aXRoIGEgZGlhZ29uYWwtXG4gICBlZGdlZCBuYXZ5IHRleHQgcGFuZWwgb24gdGhlIGxlZnQgKGJhZGdlIG92ZXJmbG93cyBpbnRvIHRoZSBwaG90bylcbiAgIGFuZCBhIGZsb2F0aW5nIHJvdW5kZWQgbmF2eSBsaW5rcyBjYXJkIG9uIHRoZSByaWdodC4gVGhlIGJhY2tncm91bmRcbiAgIGltYWdlIGZpbGxzIHRoZSBlbnRpcmUgc2VjdGlvbjsgdGhlIGRpYWdvbmFsIGlzIGEgY2xpcHBlZCA6OmJlZm9yZVxuICAgb24gLmNvdmVyLXRleHQgc28gY29udGVudCAoZXNwZWNpYWxseSB0aGUgYmFkZ2UpIGNhbiBvdmVyZmxvdyBpdC5cbiAgIFN0YWNrcyBvbiBtb2JpbGUgd2l0aCB0aGUgdGV4dCBvdmVybGF5aW5nIHRoZSBwaG90by4gKi9cbi8qIC0tLSBzZWN0aW9uIG92ZXJyaWRlcyAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0LnNlY3Rpb24tLWNvdmVyIHtcblx0cGFkZGluZzogMDtcblx0bWluLWhlaWdodDogYXV0bztcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0LnNlY3Rpb24tLWNvdmVyOjphZnRlciB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0ID4gLnNlY3Rpb24taW5uZXIge1xuXHRtYXgtd2lkdGg6IG5vbmU7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi8qIC0tLSBncmlkIC0tLSAqL1xuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXBhbmVsIHtcblx0bWF4LXdpZHRoOiBub25lO1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG5cdGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuXHRtaW4taGVpZ2h0OiA0MjBweDtcbn1cblxuLyogLS0tIGxlZnQgcGFuZWw6IGFuZ2xlZCBsaWdodCBiYWNrZ3JvdW5kIHZpYSA6OmJlZm9yZSAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci10ZXh0IHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMCkgMTYlIHZhcigtLXNwYWNlLTEwKSBjbGFtcCh2YXIoLS1zcGFjZS04KSwgNXZ3LCB2YXIoLS1zcGFjZS0xNikpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdHotaW5kZXg6IDI7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci10ZXh0OjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgODIlIDEwMCUsIDAgMTAwJSk7XG5cdHotaW5kZXg6IC0xO1xufVxuXG4vKiAtLS0gcmlnaHQgcGFuZWw6IGZsb2F0aW5nIGNhcmQgLS0tICovXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItbGlua3Mge1xuXHRhbGlnbi1zZWxmOiBjZW50ZXI7XG5cdGp1c3RpZnktc2VsZjogZW5kO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDIwLCA0NiwgMC45Mik7XG5cdGJvcmRlci1yYWRpdXM6IDZweDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCkgdmFyKC0tc3BhY2UtNik7XG5cdG1heC13aWR0aDogMzgwcHg7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNikgY2xhbXAodmFyKC0tc3BhY2UtNiksIDN2dywgdmFyKC0tc3BhY2UtMTIpKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0ei1pbmRleDogMjtcbn1cblxuLyogLS0tIGV5ZWJyb3cgLS0tICovXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1leWVicm93IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjJlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tZXllYnJvdzo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcIjtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiA0OHB4O1xuXHRoZWlnaHQ6IDNweDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4vKiAtLS0gaGVhZGluZyArIGJhZGdlIHJvdyAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLWhlYWRpbmcge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IGNsYW1wKHZhcigtLXRleHQtMnhsKSwgMy41dncsIDMuNXJlbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRtYXJnaW46IDA7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLXN1YnRpdGxlIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMThlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tYmFkZ2Uge1xuXHR3aWR0aDogY2xhbXAoMTAwcHgsIDEydncsIDE3MHB4KTtcblx0aGVpZ2h0OiBhdXRvO1xuXHRmbGV4LXNocmluazogMDtcbn1cblxuLyogLS0tIHRhZ2xpbmUgLS0tICovXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby10YWdsaW5lIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2VyaWYpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLyogLS0tIGxpbmtzIGNhcmQgY29udGVudCAtLS0gKi9cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1saW5rcyBoMiB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLW5hdiB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tbmF2IGxpICsgbGkge1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcbn1cblxuLmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8tbmF2IGEge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS0yKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLW5hdiBhOmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1uYXYgYTo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcIjtcblx0d2lkdGg6IDdweDtcblx0aGVpZ2h0OiA3cHg7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcblx0ZmxleC1zaHJpbms6IDA7XG5cdG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi8qIC0tLSB0YWJsZXQgLS0tICovXG5AbWVkaWEgKG1heC13aWR0aDogOTgwcHgpIHtcblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLXBhbmVsIHtcblx0XHRtaW4taGVpZ2h0OiAzNjBweDtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItdGV4dCB7XG5cdFx0cGFkZGluZy1yaWdodDogMjAlO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci10ZXh0OjpiZWZvcmUge1xuXHRcdGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgODUlIDEwMCUsIDAgMTAwJSk7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWxpbmtzIHtcblx0XHRtYXgtd2lkdGg6IDMyMHB4O1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTUpO1xuXHR9XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1oZXJvLWJhZGdlIHtcblx0XHR3aWR0aDogY2xhbXAoODBweCwgMTB2dywgMTIwcHgpO1xuXHR9XG59XG4vKiAtLS0gbW9iaWxlOiB0ZXh0IG92ZXIgcGhvdG8sIGFuZ2xlZCByZXZlYWwsIGxpbmtzIGJlbG93IC0tLSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG5cdC5jb3Zlci1oZXJvLXNwbGl0IC5jb3Zlci1wYW5lbCB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0bWluLWhlaWdodDogYXV0bztcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItdGV4dCB7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCkgdmFyKC0tZ3V0dGVyKSB2YXIoLS1zcGFjZS0xNikgdmFyKC0tZ3V0dGVyKTtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItdGV4dDo6YmVmb3JlIHtcblx0XHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjUzLCAyNDcsIDAuOTQpO1xuXHRcdGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgMTAwJSA4MiUsIDAgMTAwJSk7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWxpbmtzIHtcblx0XHRtYXgtd2lkdGg6IG5vbmU7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEwKTtcblx0XHRib3JkZXItcmFkaXVzOiAwO1xuXHRcdGp1c3RpZnktc2VsZjogc3RyZXRjaDtcblx0XHRhbGlnbi1zZWxmOiBzdHJldGNoO1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpIHZhcigtLWd1dHRlcik7XG5cdH1cblx0LmNvdmVyLWhlcm8tc3BsaXQgLmNvdmVyLWhlcm8taGVhZGluZyB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0fVxuXHQuY292ZXItaGVyby1zcGxpdCAuY292ZXItaGVyby1iYWRnZSB7XG5cdFx0d2lkdGg6IDkwcHg7XG5cdH1cbn1cbi8qIHNoYXJlZCBmdWxsLWJsZWVkIGJhY2tncm91bmQgdmlkZW8gKGhlcm8gKyBjb3ZlcikgKi9cbi5mZWF0dXJlLXZpZGVvIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0ei1pbmRleDogMDtcblx0cG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5mZWF0dXJlLXZpZGVvIGlmcmFtZSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiA1MCU7XG5cdGxlZnQ6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG5cdHdpZHRoOiAxNzcuNzh2aDtcblx0bWluLXdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDU2LjI1dnc7XG5cdG1pbi1oZWlnaHQ6IDEwMCU7XG5cdGJvcmRlcjogMDtcbn1cblxuLyog4pSA4pSA4pSAIG9wdGlvbmFsIGhlcm8gZXh0cmFzICh2YXItZ2F0ZWQgaW4gY29tcG9uZW50cy9oZXJvLnR0KSDilIDilIDilIBcbiAgIFVzZWQgYnkgdGhlIGRlcGFydG1lbnQgdGVtcGxhdGU6IGEgZ29sZCBleWVicm93IGFib3ZlIHRoZSB0aXRsZSBhbmQgYVxuICAgQ1RBIHBhaXIgYmVsb3cgdGhlIGxlYWQuIEFic2VudCBvbiBwYWdlcyB0aGF0IGRvbid0IHNldCB0aGVtLCBzbyB0aGVcbiAgIG1haW4tc2l0ZSBoZXJvIGlzIHVuY2hhbmdlZC4gKi9cbi5oZXJvLWV5ZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4yMmVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uaGVyby1jdGFzIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLyogR2hvc3QgYnV0dG9uIG9uIHRoZSBoZXJvJ3MgZGFyayBncm91bmQg4oCUIHRoZSBkZW1vJ3MgcmVmaW5lZCB0cmVhdG1lbnQ6XG4gICBxdWlldCBieSBkZWZhdWx0ICh0cmFuc2x1Y2VudCBib3JkZXIsIGRpbW1lZCB0ZXh0KSwgYW5kIG9uIGhvdmVyIGl0IGxpZnRzXG4gICB3aXRoIGEgZmFpbnQgZmlsbCBhbmQgYSBmdWxsIGdvbGQgb3V0bGluZS4gU2NvcGVkIHRvIC5oZXJvLWN0YXMgc28gaXRcbiAgIG92ZXJyaWRlcyB0aGUgbGlnaHQtZ3JvdW5kIGJhc2UgLmJ0bi1naG9zdCAoZ29sZCB0ZXh0KSB3aXRob3V0IHRvdWNoaW5nIGl0XG4gICBlbHNld2hlcmUuICovXG4uaGVyby1jdGFzIC5idG4tZ2hvc3Qge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG5cdGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xufVxuXG4uaGVyby1jdGFzIC5idG4tZ2hvc3Q6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHBhZ2UuY3NzICDCtyAgaW50ZXJpb3IgcGFnZSBsYXlvdXQg4oCUIHNpZGUgbmF2ICsgY29udGVudFxuICAgRGVwZW5kcyBvbjogdG9rZW5zLmNzcyAoYW5kIGNocm9tZS5jc3MgZm9yIC5uYXYtdHJlZSBzdHlsaW5nKVxuICAgVXNlZCBieSBkZXBhcnRtZW50IGNvbnRlbnQgcGFnZXM6IGEgc3RpY2t5IHNpZGUtbmF2IGNvbHVtbiBiZXNpZGVcbiAgIHRoZSBtYWluIENLRWRpdG9yIGJvZHkuIFN0YWNrcyB0byBvbmUgY29sdW1uIG9uIG5hcnJvdyBzY3JlZW5zLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4ucGFnZS1sYXlvdXQge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEwKSB2YXIoLS1ndXR0ZXIpO1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDI0MHB4IG1pbm1heCgwLCAxZnIpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEwKTtcblx0YWxpZ24taXRlbXM6IHN0YXJ0O1xufVxuXG4vKiBTdGlja3kgdW5kZXIgdGhlIGhlYWRlciwgYnV0IGNhcHBlZCB0byB0aGUgdmlld3BvcnQgc28gYSB0YWxsIG1lbnUgc2Nyb2xsc1xuICAgaW5zaWRlIGl0c2VsZiBpbnN0ZWFkIG9mIGhpZGluZyBpdHMgbG93ZXIgaXRlbXMgYmVsb3cgdGhlIGZvbGQgKGEgc3RpY2t5IGJveFxuICAgZG9lc24ndCBzY3JvbGwgb24gaXRzIG93biDigJQgd2l0aG91dCB0aGlzIGNhcCB5b3UnZCBoYXZlIHRvIHNjcm9sbCB0aGUgd2hvbGVcbiAgIHBhZ2UgdG8gcmVhY2ggdGhlIGJvdHRvbSBsaW5rcykuICovXG4ucGFnZS1zaWRlYmFyIHtcblx0cG9zaXRpb246IHN0aWNreTtcblx0dG9wOiBjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tc3BhY2UtMykpO1xuXHRtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgLSB2YXIoLS1zcGFjZS02KSk7XG5cdG92ZXJmbG93LXk6IGF1dG87XG5cdG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG5cdC8qIGhpZGRlbiB1bnRpbCBob3ZlciBzbyBhIHRhbGwgbmF2IGRvZXNuJ3Qgc2hvdyBhIHNjcm9sbGJhciBvbiBsb2FkICovXG5cdHNjcm9sbGJhci13aWR0aDogbm9uZTsgLyogRmlyZWZveCAqL1xuXHRzY3JvbGxiYXItY29sb3I6IHZhcigtLWF1LWdyYXktMzAwKSB0cmFuc3BhcmVudDtcbn1cblxuLnBhZ2Utc2lkZWJhcjpob3ZlciB7XG5cdHNjcm9sbGJhci13aWR0aDogdGhpbjtcbn1cblxuLnBhZ2Utc2lkZWJhcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHR3aWR0aDogMDtcbn1cblxuLnBhZ2Utc2lkZWJhcjpob3Zlcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHR3aWR0aDogNnB4O1xufVxuXG4ucGFnZS1zaWRlYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4ucGFnZS1zaWRlYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMzAwKTtcblx0Ym9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ucGFnZS1zaWRlYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktNDAwKTtcbn1cblxuLyogb3B0aW9uYWwgXCLCqyBQYXJlbnQgdW5pdFwiIGxpbmsgYWJvdmUgdGhlIGRlcHQgbmFtZSAoc2lkZWJhcl9iYWNrbGluayBob29rKSAqL1xuLnNpZGViYXItYmFjayB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uc2lkZWJhci1iYWNrOmhvdmVyLFxuLnNpZGViYXItYmFjazpmb2N1cy12aXNpYmxlIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogb3B0aW9uYWwgYnV0dG9uIHJvdyB1bmRlciB0aGUgaGVybyBvbiBmdWxsLXdpZHRoIHBhZ2VzIChhdV9tYWluLndyYXAgcGFnZV9saW5rcyBob29rKSAqL1xuLnBhZ2UtbGlua3Mge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1ndXR0ZXIpIDA7XG59XG5cbi5wYWdlLWxpbmtzLWlubmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5wYWdlLWRlcHQge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMS4zO1xuXHRwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLyog4pSA4pSA4pSAIHBhZ2UgY29udGVudCByaHl0aG0gKHRoZSBjb2x1bW4gaG9sZHMgcmF3IENLRWRpdG9yIGJvZHkpIOKUgOKUgOKUgCAqL1xuLnBhZ2UtbWFpbiB7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLyogcGFnZSB0aXRsZSDigJQgYSBzaG9ydCBnb2xkIGFjY2VudCBydWxlIG1hcmtzIGl0IGFzIHRoZSBwYWdlIGhlYWRlciAqL1xuLnBhZ2UtbWFpbiBoMSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC00eGwpO1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5wYWdlLW1haW4gaDE6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiAwO1xuXHRib3R0b206IDA7XG5cdHdpZHRoOiAyLjVyZW07XG5cdGhlaWdodDogM3B4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4vKiBjb250ZW50IGhlYWRpbmdzIOKAlCBzdGVwcGVkIGRvd24gb25lIGxldmVsIGZyb20gdGhlIGRpc3BsYXkgc2NhbGUgc28gdGhleVxuICAgcmVhZCBhcyBpbmxpbmUgc2VjdGlvbiBkaXZpZGVycywgbm90IGJhbm5lci1zaXplZCB0aXRsZXMgKi9cbi5wYWdlLW1haW4gaDIge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMTApO1xufVxuXG4ucGFnZS1tYWluIGgzIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5wYWdlLW1haW4gaDQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnBhZ2UtbWFpbiBoNSwgLnBhZ2UtbWFpbiBoNiB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4ucGFnZS1tYWluIHAsIC5wYWdlLW1haW4gdWwsIC5wYWdlLW1haW4gb2wsIC5wYWdlLW1haW4gdGFibGUsIC5wYWdlLW1haW4gYmxvY2txdW90ZSwgLnBhZ2UtbWFpbiBmaWd1cmUsIC5wYWdlLW1haW4gcHJlIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIFR3byBzZXBhcmF0ZSBjb25jZXJucywgZG9uJ3QgY29uZmxhdGUgdGhlbTpcbiAgIMK3IHRoZSBHUklEIGlzIGEgc2VsZi1jb250YWluZWQgYmxvY2ssIHNvIGl0IHRha2VzIGl0cyB0b3AgZ2FwIGZyb20gdGhlIHJ1bGVcbiAgICAgYWJvdmUgbGlrZSBhbiBhY2NvcmRpb24gb3IgYSBjYWxsb3V0IGRvZXMg4oCUIHRoYXQgaXMgd2hhdCBzZXBhcmF0ZXMgaXQgZnJvbVxuICAgICB0aGUgcGFyYWdyYXBoL2ltYWdlL3RpdGxlIGJlZm9yZSBpdDtcbiAgIMK3IGEgZ3JpZCBDRUxMIHN0YXJ0cyBpdHMgb3duIGNvbHVtbiwgc28gd2hhdGV2ZXIgbGVhZHMgYSBjZWxsIG11c3Qgc2l0IGZsdXNoXG4gICAgIGF0IGl0cyB0b3AuIFdpdGhvdXQgdGhpcyBhbiA8aDI+IGRyYWdzIGl0cyA2NHB4IHBhZ2Utc2VjdGlvbiBtYXJnaW4gaW50b1xuICAgICB0aGUgY2VsbCBhbmQgZHJvcHMgdGhlIGhlYWRpbmcgZmFyIGJlbG93IHRoZSB0b3Agb2YgaXRzIGNvbHVtbi5cbiAgIEdldHRpbmcgb25seSB0aGUgc2Vjb25kIGhhbGYgcmlnaHQgaXMgd2hhdCBtYWRlIHRoZSBoZWFkaW5ncyBjb2xsaWRlIHdpdGggdGhlXG4gICBpbWFnZSBhYm92ZSB0aGVtIG9uIGEgY29udGFjdCBwYWdlIHdpdGggdGV4dF9wb3NpdGlvbiBcImFib3ZlXCIuICovXG4ucGFnZS1tYWluIC5ncmlkID4gKiA+IDpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIHRoZSBsZWFkIGxpbmUgcmlnaHQgdW5kZXIgdGhlIHRpdGxlIHJlYWRzIGFzIGEgc3VidGl0bGUg4oCUIGtlZXAgaXQgY2xvc2UgKi9cbi5wYWdlLW1haW4gaDEgKyBoMiB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG59XG5cbi8qIGEgaGVhZGluZyB0YXJnZXRlZCBieSBhbiBpbi1wYWdlIGFuY2hvciAoZS5nLiBhbiBcIm9uIHRoaXMgcGFnZVwiIGp1bXAtbmF2KVxuICAgY2xlYXJzIHRoZSBzdGlja3kgaGVhZGVyIHdoZW4gc2Nyb2xsZWQgdG8sIGluc3RlYWQgb2YgaGlkaW5nIHVuZGVyIGl0LiAqL1xuLnBhZ2UtbWFpbiA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNilbaWRdIHtcblx0c2Nyb2xsLW1hcmdpbi10b3A6IGNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1zcGFjZS00KSk7XG59XG5cbi8qIHNlbGYtY29udGFpbmVkIGJsb2NrcyB0aGF0IHNpdCBpbiB0aGUgYm9keSBjb3B5IGJ1dCBhcmVuJ3QgaW4gdGhlIGJhc2Ugcmh5dGhtXG4gICBsaXN0IOKAlCBnaXZlIHRoZW0gdGhlIHNhbWUgdG9wIGdhcCBhZnRlciBhIGhlYWRpbmcvcGFyYWdyYXBoLiAqL1xuLnBhZ2UtbWFpbiAuYWNjb3JkaW9uLCAucGFnZS1tYWluIC5jYWxsb3V0LCAucGFnZS1tYWluIC5jdGEtY2FsbG91dCwgLnBhZ2UtbWFpbiAudGFibGUtd3JhcCwgLnBhZ2UtbWFpbiAuZ3JpZCwgLnBhZ2UtbWFpbiAudmlkZW8ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLyogZmlyc3QgZWxlbWVudCBpbiB0aGUgY29sdW1uIG5ldmVyIGFkZHMgYSB0b3AgZ2FwICh0aXRsZSBvciBmZWF0dXJlIGltYWdlKSAqL1xuLnBhZ2UtbWFpbiA+IDpmaXJzdC1jaGlsZCwgLnBhZ2UtZmVhdHVyZSArICoge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiBzZWxmLWNvbnRhaW5lZCBjb21wb25lbnRzIChjYXJkcykgbWFuYWdlIHRoZWlyIG93biBpbnRlcm5hbCBzcGFjaW5nIHZpYVxuICAgLmNhcmQtYm9keSdzIGdhcCDigJQgZXhlbXB0IHRoZWlyIGNoaWxkcmVuIGZyb20gdGhlIHBhZ2UtY29udGVudCByaHl0aG0gc28gYVxuICAgLmNhcmQtdGl0bGUgKGgyKSBvciAuY2FyZC10ZXh0IChwKSBkb2Vzbid0IGluaGVyaXQgdGhlIGJpZyBzZWN0aW9uIG1hcmdpbnMgKi9cbi5wYWdlLW1haW4gLmNhcmQtYm9keSA+ICoge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiBhbiBhdXRob3JlZCBoMi9oMy5jYXJkLXRpdGxlIGtlZXBzIHRoZSBjYXJkIHNjYWxlLCBub3QgdGhlIC5wYWdlLW1haW4gaGVhZGluZyBzY2FsZSAqL1xuLnBhZ2UtbWFpbiAuY2FyZC10aXRsZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG59XG5cbi5wYWdlLW1haW4gLnNpZGVub3RlID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogcGFnZSBmZWF0dXJlIGltYWdlICh0aGUgYHBhZ2VpbWFnZWAgZmllbGQpIOKAlCBzaXRzIGFib3ZlIHRoZSBjb250ZW50ICovXG4ucGFnZS1mZWF0dXJlIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogYXV0bztcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi8qIGlubGluZSBjYXJvdXNlbCBpbiBwYWdlIGJvZHkg4oCUIHNob3J0ZXIgdGhhbiB0aGUgYmFzZSAzLzIgZGVmYXVsdCAqL1xuLnBhZ2UtbWFpbiA+IC5jYXJvdXNlbCB7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5wYWdlLWZlYXR1cmUtd3JhcCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5wYWdlLWZlYXR1cmUtd3JhcCAucGFnZS1mZWF0dXJlIHtcblx0bWFyZ2luLWJvdHRvbTogMDtcblx0Ym9yZGVyLXJhZGl1czogMDtcbn1cblxuLnBhZ2UtZmVhdHVyZS1jYXB0aW9uIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRib3R0b206IDA7XG5cdGxlZnQ6IDA7XG5cdHJpZ2h0OiAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCByZ2JhKDAsIDMxLCA2MywgMC44NSkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogYmFzZWxpbmU7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLnBhZ2UtZmVhdHVyZS1jYXB0aW9uIHN0cm9uZyB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4ucGFnZS1mZWF0dXJlLWNhcHRpb24gc3BhbiB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdG9wYWNpdHk6IDAuODU7XG59XG5cbltkYXRhLWRpYWxvZy1vcGVuXS5wYWdlLWZlYXR1cmUtd3JhcCB7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuW2RhdGEtZGlhbG9nLW9wZW5dLnBhZ2UtZmVhdHVyZS13cmFwOmhvdmVyIC5wYWdlLWZlYXR1cmUtY2FwdGlvbiB7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgcmdiYSgwLCAzMSwgNjMsIDAuOTUpKTtcbn1cblxuLyogcGFnZS1mZWF0dXJlLXRvcCDigJQgY2Fyb3VzZWwgb3IgaGVybyBpbWFnZSBhYm92ZSB0aGUgc2lkZWJhciBncmlkLFxuICAgY29uc3RyYWluZWQgdG8gdGhlIGNvbnRlbnQgbWF4LXdpZHRoIChub3QgZnVsbC1ibGVlZCkuICovXG4ucGFnZS1mZWF0dXJlLXRvcCB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tZ3V0dGVyKSAwO1xufVxuXG4ucGFnZS1mZWF0dXJlLXRvcCAuY2Fyb3VzZWwtZmVhdHVyZSB7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcbn1cblxuLnBhZ2UtZmVhdHVyZS10b3AgLmNhcm91c2VsLWZlYXR1cmUgLmNhcm91c2VsLXNsaWRlIGltZyB7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5wYWdlLWZlYXR1cmUtYmFubmVyIHtcblx0d2lkdGg6IDEwMCU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvYmplY3QtZml0OiBjb3Zlcjtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xufVxuXG4vKiDilIDilIDilIAgY29udGVudC1hZHZhbmNlZDogc2VjdGlvbnMgaW5zaWRlIHRoZSBjb250ZW50IGNvbHVtbiDilIDilIDilIBcbiAgIFdoZW4gY29udGVudF9hZHZhbmNlZC5kdCByZW5kZXJzIHNlY3Rpb25zIGluIC5wYWdlLW1haW4gdGhlIGZ1bGwtYmxlZWRcbiAgIHNlY3Rpb24gYmFuZHMgbGl2ZSBpbnNpZGUgdGhlIGNvbnRlbnQgY29sdW1uIOKAlCBiYWNrZ3JvdW5kcyBzcGFuIHRoZVxuICAgY29sdW1uIHdpZHRoLCAuc2VjdGlvbi1pbm5lciBoYW5kbGVzIGlubmVyIHBhZGRpbmcuIFZlcnRpY2FsIHBhZGRpbmcgaXNcbiAgIHRpZ2h0ZW5lZCBmcm9tIHRoZSBmdWxsLXdpZHRoIC0tc3BhY2UtMTIgKDgwcHgpIHRvIC0tc3BhY2UtOCAoNDBweCkgc29cbiAgIHRoZSBiYW5kcyBkb24ndCBvdmVyd2hlbG0gdGhlIG5hcnJvd2VyIGNvbHVtbi4gKi9cbi5wYWdlLW1haW4gPiAuY2Fyb3VzZWwge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnBhZ2UtbWFpbiA+IC5zZWN0aW9uIHtcblx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtOCk7XG5cdHBhZGRpbmctaW5saW5lOiAwO1xufVxuXG4ucGFnZS1tYWluID4gLnNlY3Rpb24gLnNlY3Rpb24taW5uZXIge1xuXHRtYXgtd2lkdGg6IG5vbmU7XG59XG5cbi5wYWdlLW1haW4gPiAuc2VjdGlvbi0tZmx1c2gtdG9wIHtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4ucGFnZS1tYWluID4gLnNlY3Rpb24tLWZsdXNoLWJvdHRvbSB7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLnBhZ2UtbWFpbiA+IC5zZWN0aW9uOmZpcnN0LWNoaWxkLFxuLnBhZ2UtbWFpbiA+IC5jYXJvdXNlbCArIC5zZWN0aW9uLFxuLnBhZ2UtbWFpbiA+IC5wYWdlLWZlYXR1cmUgKyAuc2VjdGlvbixcbi5wYWdlLW1haW4gPiBoMSArIC5zZWN0aW9uIHtcblx0cGFkZGluZy10b3A6IDA7XG59XG5cbi5wYWdlLW1haW4gPiAuc2VjdGlvbjpsYXN0LWNoaWxkIHtcblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiDilIDilIDilIAgYnJlYWRjcnVtYi1kcm9wZG93biBuYXYgKHNvbG8gbGF5b3V0OyBjaHJvbWUvY3J1bWJzLnR0IMK3IGpzL2NydW1icy5qcykg4pSA4pSA4pSAICovXG4uY3J1bWJzIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5jcnVtYnMtbGlzdCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0YWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5jcnVtYiB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNydW1iICsgLmNydW1iOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIuKAulwiO1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xuXHRtYXJnaW46IDAgdmFyKC0tc3BhY2UtMik7XG59XG5cbi5jcnVtYi1saW5rIHtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGZvbnQ6IGluaGVyaXQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0cGFkZGluZzogMDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY3J1bWItbGluazpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmNydW1iLWxpbmtbYXJpYS1leHBhbmRlZD10cnVlXSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLmNydW1iLmlzLWN1cnJlbnQgPiAuY3J1bWItbGluaywgLmNydW1iLXN0YXRpYyB7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xufVxuXG4uY3J1bWIteCB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS0yKTtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcbn1cblxuLmNydW1iLWxpbmtbYXJpYS1leHBhbmRlZD10cnVlXSAuY3J1bWIteCB7XG5cdGRpc3BsYXk6IGlubGluZTtcbn1cblxuLyogdGhlIGRyb3Bkb3duICovXG4uY3J1bWItbWVudSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAxMDAlO1xuXHRsZWZ0OiAwO1xuXHRtaW4td2lkdGg6IDIyMHB4O1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTIpIDAgMDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMik7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG5cdG9wYWNpdHk6IDA7XG5cdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpO1xuXHR0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdmlzaWJpbGl0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0ei1pbmRleDogNTA7XG59XG5cbi5jcnVtYi5vcGVuID4gLmNydW1iLW1lbnUge1xuXHRvcGFjaXR5OiAxO1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5jcnVtYi1tZW51IGxpIHtcblx0bWFyZ2luOiAwO1xufVxuXG4uY3J1bWItbWVudSBsaSArIGxpIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLmNydW1iLW1lbnUgYSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5jcnVtYi1tZW51IGE6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLmNydW1iLW1lbnUgYS5pcy1vbnBhdGgge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5jcnVtYi1tZW51IGFbYXJpYS1jdXJyZW50PXBhZ2VdIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xufVxuXG4uY3J1bWItbWVudSAuY3J1bWItc2VsZiB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi8qIG5vLXNpZGViYXIgdmFyaWFudCAoc2lkZW5hdiA9PSBcIm9mZlwiKSDigJQgYnJlYWRjcnVtYiBzaXRzIGF0IHRoZSB0b3AsIHNvIGl0XG4gICBuZWVkcyBsZXNzIGhlYWRyb29tIHRoYW4gdGhlIHNpZGViYXIgbGF5b3V0ICovXG4ucGFnZS1sYXlvdXQtLXNvbG8ge1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpO1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aC1uYXJyb3cpO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi8qIHBhZ2Vfd2lkZSA9IDEgKHNldCBieSBhIGZvbGRlciB3cmFwcGVyKTogYSBzb2xvIHBhZ2UgYXQgZnVsbCBzaXRlIHdpZHRoLCBmb3JcbiAgIG11bHRpLWNvbHVtbiBkaXJlY3RvcnkgcGFnZXMgbGlrZSAvYWNhZGVtaWNzLyAqL1xuLnBhZ2UtbGF5b3V0LS13aWRlIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xufVxuXG4vKiBzaWRlYmFyIGNhbGxzLXRvLWFjdGlvbiAoYWNhZGVtaWNzLWRlZmF1bHQpICovXG4uc2lkZWJhci1jdGEge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnNpZGViYXItY3RhIC5idG4ge1xuXHR3aWR0aDogMTAwJTtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDFweDtcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTEwMCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnNpZGViYXItY3RhIC5idG46aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0dHJhbnNmb3JtOiBub25lO1xuXHRib3gtc2hhZG93OiBub25lO1xufVxuXG4uc2lkZWJhci1jdGEgLmJ0biBpIHtcblx0d2lkdGg6IDEuMjVyZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLnNpZGViYXItY3RhIC5idG4tcHJpbWFyeSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnNpZGViYXItY3RhIC5idG4tcHJpbWFyeTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5zaWRlYmFyLWN0YSAuYnRuLXByaW1hcnkgaSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogc2lkZWJhciBsaW5rIGxpc3RzIChpbnRlcmlvci53cmFwIGBzaWRlYmFyX2xpbmtzYCkgKi9cbi5zaWRlYmFyLWxpbmtzIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5zaWRlYmFyLWxpbmtzLXRpdGxlIHtcblx0bWFyZ2luOiAwIDAgdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zaWRlYmFyLWxpbmtzIHVsIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLnNpZGViYXItbGlua3MgYSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiA1cHggdmFyKC0tc3BhY2UtMyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM1O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnNpZGViYXItbGlua3MgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0xMDApO1xufVxuXG4uc2lkZWJhci1jdGEgLmJ0bi1wcmltYXJ5OmhvdmVyIGkge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi8qIOKUgOKUgOKUgCBtb2JpbGUgc2VjdGlvbi1uYXYgZGlzY2xvc3VyZSDilIDilIDilIBcbiAgIERlc2t0b3A6IHRoZSB0b2dnbGUgaXMgaGlkZGVuIGFuZCB0aGUgdHJlZSBzaG93cyBhcyBhIG5vcm1hbCBzdGlja3kgY29sdW1uLlxuICAgTW9iaWxlOiB0aGUgd2hvbGUgbWVudSBjb2xsYXBzZXMgYmVoaW5kIHRoZSB0b2dnbGUgc28gY29udGVudCBsZWFkcy4gKi9cbi5zaWRlYmFyLXRvZ2dsZSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA4MjBweCkge1xuXHQucGFnZS1sYXlvdXQge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdFx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtOCk7XG5cdH1cblx0LnBhZ2Utc2lkZWJhciB7XG5cdFx0cG9zaXRpb246IHN0YXRpYztcblx0XHRtYXgtaGVpZ2h0OiBub25lO1xuXHRcdG92ZXJmbG93OiB2aXNpYmxlO1xuXHR9XG5cdC5zaWRlYmFyLXRvZ2dsZSB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRcdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0XHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0XHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHR9XG5cdC5zaWRlYmFyLWNhcmV0IHtcblx0XHR3aWR0aDogOXB4O1xuXHRcdGhlaWdodDogOXB4O1xuXHRcdGZsZXgtc2hyaW5rOiAwO1xuXHRcdGJvcmRlci1yaWdodDogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0XHRib3JkZXItYm90dG9tOiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRcdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcblx0XHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xuXHR9XG5cdC5zaWRlYmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdIC5zaWRlYmFyLWNhcmV0IHtcblx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcblx0fVxuXHQuc2lkZWJhci1uYXYge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0LnBhZ2Utc2lkZWJhci5vcGVuIC5zaWRlYmFyLW5hdiB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblx0LnBhZ2Utc2lkZWJhci5vcGVuIC5wYWdlLWRlcHQge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH0gLyogZGVwdCBuYW1lIGFscmVhZHkgaW4gdGhlIHRvZ2dsZSAqL1xufVxuLyog4pSA4pSA4pSAIEEtWiBkaXJlY3RvcnkgKHNlcnZpY2VzL2luZGV4Lmh0bWwpIOKUgOKUgOKUgCAqL1xuLmF6LWJhciB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uYXotYmFyIC50YWItYnRuIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdG1pbi13aWR0aDogMmVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5hei1iYXIgLnRhYi1idG4uYWN0aXZlIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5hei1saXN0IHtcblx0Y29sdW1uczogMjtcblx0Y29sdW1uLWdhcDogdmFyKC0tc3BhY2UtOCk7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcbn1cblxuLmF6LWxpc3QgbGkge1xuXHRicmVhay1pbnNpZGU6IGF2b2lkO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xKSAwO1xufVxuXG4uYXotbGlzdCBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5hei1saXN0IGE6aG92ZXIge1xuXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmF6LXN1YiB7XG5cdHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5hei1zdWdnZXN0IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtOCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQuYXotbGlzdCB7XG5cdFx0Y29sdW1uczogMTtcblx0fVxufVxuLyogQmxvZyAvIG5ld3NsZXR0ZXIgZmVlZCBwb3N0cyAodGVtcGxhdGVzL2Jsb2cuZHQpOiBvbmUgLmNhcmQgcGVyIHBvc3QsIHN0YWNrZWQgKi9cbi5ibG9nLXBvc3RzIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgY2hyb21lLmNzcyAgwrcgIHNpdGUgZm9vdGVyICsgc3VicGFnZSBuYXYgdHJlZVxuICAgKHRoZSBoZWFkZXIgbGl2ZXMgaW4gaGVhZGVyLmNzcyAvIGNocm9tZS9oZWFkZXIudHQpXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBGT09URVIg4pSA4pSA4pSAICovXG4uc2l0ZS1mb290ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMTIpIHZhcigtLWd1dHRlcikgdmFyKC0tc3BhY2UtNik7XG59XG5cbi5zaXRlLWZvb3RlciBhIHtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnNpdGUtZm9vdGVyIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi8qIFwiUHJpdmFjeSBjaG9pY2VzXCIgcmVvcGVucyB0aGUgY29uc2VudCBwcmVmZXJlbmNlcyAoY29kZS9jb25zZW50LnR0KSAtIGEgYnV0dG9uIGRyZXNzZWQgYXMgYSBmb290ZXIgbGluayAqL1xuLmZvb3Rlci1jb25zZW50IHtcblx0cGFkZGluZzogMDtcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRmb250OiBpbmhlcml0O1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZm9vdGVyLWNvbnNlbnQ6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi5zaXRlLWZvb3Rlci1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxLjZmciAxZnIgMWZyIDFmcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLmZvb3Rlci1icmFuZCBpbWcge1xuXHR3aWR0aDogMTYwcHg7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uZm9vdGVyLXRhZ2xpbmUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0bGluZS1oZWlnaHQ6IDEuMztcbn1cblxuLmZvb3Rlci1tZXRhIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5mb290ZXItY29sIGgzIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDJweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLmZvb3Rlci1jb2wgdWwge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5zaXRlLWZvb3Rlci1ib3R0b20ge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aCk7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtOCkgYXV0byAwO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLmZvb3Rlci1sZWdhbCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS00KTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZvb3Rlci1zb2NpYWwge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uZm9vdGVyLXNvY2lhbCBhIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xufVxuXG4uZm9vdGVyLXNvY2lhbCBzdmcge1xuXHR3aWR0aDogMjJweDtcblx0aGVpZ2h0OiAyMnB4O1xuXHRmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5MjBweCkge1xuXHQuc2l0ZS1mb290ZXItaW5uZXIge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcblx0fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7XG5cdC5zaXRlLWZvb3Rlci1pbm5lciB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBERVBBUlRNRU5UIFBSRS1GT09URVIgQkFORCAoY2hyb21lL2RlcHRfZm9vdGVyLnR0KSDilIDilIDilIAgKi9cbi5kZXB0LWZvb3RlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCkgdmFyKC0tZ3V0dGVyKTtcbn1cblxuLmRlcHQtZm9vdGVyLWlubmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS0xMCk7XG59XG5cbi5kZXB0LWZvb3Rlci1sb2dvIGltZyB7XG5cdG1heC1oZWlnaHQ6IDU2cHg7XG5cdHdpZHRoOiBhdXRvO1xufVxuXG4uZGVwdC1mb290ZXItYmxvY2sge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uZGVwdC1zb2NpYWwge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi8qIHJlc2V0IHRoZSBnbG9iYWwgYGxpICsgbGkgeyBtYXJnaW4tdG9wIH1gIHJlYWRpbmctcmh5dGhtIHJ1bGUgKGJhc2UuY3NzKSDigJQgaXRcbiAgIGxlYWtzIGluIGFuZCBwdXNoZXMgZXZlcnkgaWNvbiBidXQgdGhlIGZpcnN0IGRvd24gOHB4LCBzbyB3aXRoIHRoZSBjZW50ZXJlZFxuICAgZmxleCBsaW5lIHRoZSBmaXJzdCBpY29uIHJpZGVzIGhpZ2guICovXG4uZGVwdC1zb2NpYWwgbGkge1xuXHRtYXJnaW46IDA7XG59XG5cbi5kZXB0LXNvY2lhbCBhIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aWR0aDogMS41ZW07XG5cdGhlaWdodDogMS41ZW07XG5cdGxpbmUtaGVpZ2h0OiAxO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0dHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5kZXB0LXNvY2lhbCBpIHtcblx0bGluZS1oZWlnaHQ6IDE7XG59XG5cbi8qIEZsaWNrciBoYXMgbm8gRm9udEF3ZXNvbWUgYmFkZ2UgZ2x5cGggKG9ubHkgYmFyZSBkb3RzKSwgc28gZHJhdyB0aGUgbWF0Y2hpbmdcbiAgIG5hdnkgdGlsZSBvdXJzZWx2ZXM6IGEgc21hbGwgc3F1YXJlIGNoaXAgd2l0aCB0aGUgZG90cyBrbm9ja2VkIG91dCBpbiBjcmVhbSxcbiAgIHNpemVkIHRvIHNpdCBhbG9uZ3NpZGUgdGhlIHNxdWFyZS1iYWRnZSBnbHlwaHMgb2YgdGhlIG90aGVyIG5ldHdvcmtzLiAqL1xuLmRlcHQtc29jaWFsIC5mYS1mbGlja3Ige1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdpZHRoOiAwLjgyZW07XG5cdGhlaWdodDogMC44MmVtO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyLXJhZGl1czogMC4xNGVtO1xufVxuXG4uZGVwdC1zb2NpYWwgLmZhLWZsaWNrcjo6YmVmb3JlIHtcblx0Zm9udC1zaXplOiAwLjYyZW07XG5cdGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4uZGVwdC1zb2NpYWwgYTpob3ZlciAuZmEtZmxpY2tyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5kZXB0LXNvY2lhbCBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uZGVwdC1jb250YWN0IHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi5kZXB0LWNvbnRhY3QgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uZGVwdC1jb250YWN0IGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5kZXB0LWxhYmVsIHtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uZGVwdC1hZGRyZXNzIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRsaW5lLWhlaWdodDogMS41O1xufVxuXG4uZGVwdC1hZGRyZXNzIHN0cm9uZyB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzAwcHgpIHtcblx0LmRlcHQtZm9vdGVyLWlubmVyIHtcblx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRcdGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNSk7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBTVUJQQUdFIE5BViBUUkVFIChjaHJvbWUvbmF2LnR0KSDigJQgY29sbGFwc2libGUgYWNjb3JkaW9uIOKUgOKUgOKUgCAqL1xuLm5hdi10cmVlIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xufVxuXG4ubmF2LXRyZWUgbGkge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5uYXYtdHJlZSBsaSArIGxpIHtcblx0bWFyZ2luLXRvcDogMDtcbn0gLyogbmV1dHJhbGl6ZSBiYXNlLmNzcyBsaStsaSBpbnNpZGUgdGhlIHRyZWUgKi9cbi5uYXYtdHJlZSBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTMpO1xuXHRsaW5lLWhlaWdodDogMS4zNTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG59XG5cbi5uYXYtdHJlZSBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tYXUtZ3JheS0zMDApO1xufVxuXG4ubmF2LXRyZWUgLm5hdi10cmVlIHtcblx0cGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogYWN0aXZlIHRyYWlsIHBhcmVudCAoYSBicmFuY2ggb24gdGhlIHBhdGgpID0gcGFsZXIgZ29sZCBiYXI7IHNjb3BlZCB0b1xuICAgLmhhcy1jaGlsZHJlbiBzbyBhIHNwdXJpb3VzbHktYWN0aXZlIGxlYWYgKGUuZy4gc2l0ZS1yb290IFwiSG9tZVwiKSBzdGF5cyBwbGFpbiAqL1xuLm5hdi10cmVlIC5pcy1hY3RpdmUuaGFzLWNoaWxkcmVuID4gLm5hdi10cmVlLXJvdyA+IGEge1xuXHRib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi8qIGN1cnJlbnQgcGFnZSA9IGZ1bGwgZ29sZCBiYXIgKyBib2xkIChhZnRlciB0aGUgdHJhaWwgcnVsZSBzbyBpdCB3aW5zKSAqL1xuLm5hdi10cmVlIC5pcy1jdXJyZW50ID4gYSxcbi5uYXYtdHJlZSAuaXMtY3VycmVudCA+IC5uYXYtdHJlZS1yb3cgPiBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIGJyYW5jaCByb3c6IGxpbmsgKyBjb2xsYXBzZSB0b2dnbGUgKi9cbi5uYXYtdHJlZS1yb3cge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ubmF2LXRyZWUtcm93ID4gYSB7XG5cdGZsZXg6IDE7XG59XG5cbi5uYXYtdHJlZS10b2dnbGUge1xuXHRmbGV4LXNocmluazogMDtcblx0d2lkdGg6IDM2cHg7XG5cdGFsaWduLXNlbGY6IHN0cmV0Y2g7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG59XG5cbi5uYXYtdHJlZS10b2dnbGU6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHdpZHRoOiA3cHg7XG5cdGhlaWdodDogN3B4O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLm5hdi10cmVlLXRvZ2dsZTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLm5hdi10cmVlIGxpLmlzLW9wZW4gPiAubmF2LXRyZWUtcm93IC5uYXYtdHJlZS10b2dnbGU6OmJlZm9yZSB7XG5cdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xufVxuXG4vKiBjb2xsYXBzZSBjaGlsZHJlbiB1bmxlc3MgdGhlIGJyYW5jaCBpcyBvcGVuIChhY3RpdmUgdHJhaWwgaXMgcHJlLW9wZW5lZCkgKi9cbi5uYXYtdHJlZSBsaS5oYXMtY2hpbGRyZW4gPiAubmF2LXRyZWUge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4ubmF2LXRyZWUgbGkuaGFzLWNoaWxkcmVuLmlzLW9wZW4gPiAubmF2LXRyZWUge1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLyogbW9iaWxlOiBjb21mb3J0YWJsZSwgZmluZ2VyLWZyaWVuZGx5IHJvd3MgKGRlc2t0b3Agc3RheXMgdGlnaHQpICovXG5AbWVkaWEgKG1heC13aWR0aDogODIwcHgpIHtcblx0Lm5hdi10cmVlIGEge1xuXHRcdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTMpO1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjQ7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBzZWN0aW9uLW5hdiDCtyBhIGRlcGFydG1lbnQncyBzaWJsaW5nIHN1Yi1zaXRlcyAoY2hyb21lL3NlY3Rpb25fbmF2LnR0KSDilIDilIDilIBcbiAgIEEgc2xpbSBmdWxsLXdpZHRoIGJhciB1bmRlciB0aGUgbWFpbiBoZWFkZXIuIExlYWRzIHdpdGggdGhlIGRlcGFydG1lbnQgTkFNRVxuICAgKHRoZSBzaXRlIGlkZW50aXR5IOKAlCBsaW5rcyBob21lLCBzdHlsZWQgYXMgYSB0aXRsZSwgbm90IGEgdGFiKSwgdGhlbiB0aGVcbiAgIHN1Yi1zaXRlcyAoSVRTOiBDbGllbnQgU2VydmljZXMgLyBBViAvIE5ldHdvcmsgLyDigKYpLiBDdXJyZW50IHN1Yi1zaXRlIG1hcmtlZFxuICAgd2l0aCBhIGdvbGQgdGFiLXVuZGVybGluZTsgdGhlIHN0cmlwIHNjcm9sbHMgaG9yaXpvbnRhbGx5IGlmIGl0IG92ZXJmbG93cy5cbiAgIEFsaWdubWVudDogdGhlIGd1dHRlciBsaXZlcyBvbiB0aGUgZnVsbC1ibGVlZCBiYXIgKGxpa2UgLnNlY3Rpb24pLCBhbmQgdGhlXG4gICBpbm5lciBpcyBhIHB1cmUgbWF4LXdpZHRoIGNvbHVtbiwgc28gdGhlIGJhcidzIGNvbnRlbnQgc2hhcmVzIE9ORSBsZWZ0IGVkZ2VcbiAgIHdpdGggdGhlIGhlYWRlciBhbmQgdGhlIHBhZ2UgY29udGVudCAoaGVhZGVyLmNzcyBhcHBsaWVzIHRoZSBzYW1lIG1vZGVsKS4gKi9cbi5zZWN0aW9uLW5hdiB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtKTtcblx0cGFkZGluZy1pbmxpbmU6IHZhcigtLWd1dHRlcik7XG59XG5cbi5zZWN0aW9uLW5hdi1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cdGdhcDogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi8qIHNpdGUgaWRlbnRpdHkg4oCUIHRoZSBkZXBhcnRtZW50IG5hbWU7IGxpbmtzIGhvbWU7IHJlYWRzIGFzIGEgdGl0bGUuIEEgaGFpcmxpbmVcbiAgIGRpdmlkZXMgaXQgZnJvbSB0aGUgc3ViLXNpdGUgdGFicy4gKi9cbi5zZWN0aW9uLW5hdi10aXRsZSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGZsZXg6IG5vbmU7IC8qIGRvbid0IHNocmluayDigJQgdGhlIHRhYiBzdHJpcCBhYnNvcmJzIG92ZXJmbG93ICovXG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0cGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2UtOCk7XG5cdG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2UtMik7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLnNlY3Rpb24tbmF2LXRpdGxlOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uc2VjdGlvbi1uYXYtbGlua3Mge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdC8qIG1pbi13aWR0aDowIGtlZXBzIHRoZSBzdHJpcCBzaHJpbmthYmxlIHNvIGpzL3NlY3Rpb24tbmF2LmpzIGNhbiBkZXRlY3Rcblx0ICAgb3ZlcmZsb3cgKHNjcm9sbFdpZHRoID4gY2xpZW50V2lkdGgpIGFuZCBtb3ZlIHRhYnMgdG8gTW9yZTsgb3ZlcmZsb3cgc3RheXNcblx0ICAgdmlzaWJsZSBzbyBhIHRhYidzIHBhZ2VzIGRyb3Bkb3duIGNhbiBlc2NhcGUgdGhlIGJhci4gKG92ZXJmbG93LXg6YXV0byB3b3VsZFxuXHQgICBmb3JjZSBvdmVyZmxvdy15IHRvIGF1dG8gYW5kIGNsaXAgdGhlIGRyb3Bkb3duLikgKi9cblx0bWluLXdpZHRoOiAwO1xuXHRvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLyogbWFyZ2luLXRvcDowIHVuZG9lcyB0aGUgZ2xvYmFsIGJhc2UuY3NzIGBsaSArIGxpIHsgbWFyZ2luLXRvcCB9YCwgd2hpY2ggd2FzXG4gICBkcm9wcGluZyBldmVyeSB0YWIgYWZ0ZXIgdGhlIGZpcnN0IGJlbG93IHRoZSB0b3AgKHRoZSBmaXJzdCBsb29rZWQgcmFpc2VkKS4gKi9cbi5zZWN0aW9uLW5hdi1saW5rcyBsaSB7XG5cdGZsZXg6IG5vbmU7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi5zZWN0aW9uLW5hdi1saW5rcyBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KSwgYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnNlY3Rpb24tbmF2LWxpbmtzIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zZWN0aW9uLW5hdi1saW5rcyBhLmlzLWN1cnJlbnQge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBoaWdobGlnaHRlZCB0YWIgKGUuZy4gRG9uYXRlKSDigJQgZ29sZCB0ZXh0LCBzZW1pYm9sZDsgbm8gZmlsbCBzbyBpdCBkb2Vzbid0XG4gICBjb21wZXRlIHdpdGggdGhlIEdpdmUvVmlzaXQvQXBwbHkgYnV0dG9ucyBpbiB0aGUgdXRpbGl0eSBiYXIgKi9cbi5zZWN0aW9uLW5hdi1saW5rcyBhLmlzLWhpZ2hsaWdodCB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnNlY3Rpb24tbmF2LWxpbmtzIGEuaXMtaGlnaGxpZ2h0OmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtZGFyaywgdmFyKC0tYXUtZ29sZCkpO1xufVxuXG4vKiB0aGUgdG9nZ2xlIGlzIGhpZGRlbiBpbiBzdHJpcCBtb2RlOyBKUyByZXZlYWxzIGl0IHdoZW4gY29sbGFwc2VkICovXG4uc2VjdGlvbi1uYXYtdG9nZ2xlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLyog4pSA4pSAIGNvbGxhcHNlZCBtb2RlIOKAlCB0aGUgdGFiIHN0cmlwIGJlY29tZXMgYSBkcm9wZG93biwgaW4gVFdPIHN0YWdlcyDilIDilIBcbiAgIGpzL3NlY3Rpb24tbmF2LmpzIGNvbGxhcHNlcyBhcyB3aWR0aCB0aWdodGVucywgc28gaXQgbmV2ZXIgY2xpcHMgYW5kIG5ldmVyXG4gICBqdW1wcyBzdHJhaWdodCB0byBhIGZ1bGwtd2lkdGggc2hlZXQ6XG4gICAgIC5pcy1jb2xsYXBzZWQgICAgICAgICAgICDihpIgU0lERS1CWS1TSURFOiB0aGUgdGl0bGUgc3RheXMgbGVmdCwgYSBjb21wYWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duIHBpbGwgc2l0cyB0byBpdHMgcmlnaHQuIEtpY2tzIGluIGFzIHNvb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIGZ1bGwgdGFiIHN0cmlwIHdvdWxkIG92ZXJmbG93IOKAlCBrZWVwcyB3aWRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdzIGxvb2tpbmcgaW50ZW50aW9uYWwuXG4gICAgIC5pcy1jb2xsYXBzZWQuaXMtc3RhY2tlZCDihpIgU1RBQ0tFRDogdGhlIHRpdGxlIGJlY29tZXMgYSBzbWFsbCBnb2xkIGV5ZWJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGZ1bGwtd2lkdGggcGlsbCBiZW5lYXRoIGl0LiBPbmx5IHdoZW4gZXZlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArIHBpbGwgY2FuJ3Qgc2l0IHNpZGUtYnktc2lkZSAobmFycm93L3Bob25lKS5cbiAgIFRoZSBvcGVuIGxpc3QgaXMgYW4gYW5jaG9yZWQgZmxvYXRpbmcgbWVudSAodW5kZXIgdGhlIHBpbGwgaW4gc2lkZS1ieS1zaWRlLFxuICAgZnVsbC13aWR0aCBpbiBzdGFja2VkKS4gQ29udGVudC1hd2FyZSwgbm90IGEgZ3Vlc3NlZCBicmVha3BvaW50LiBXaXRob3V0IEpTXG4gICB0aGUgc3RyaXAganVzdCBzY3JvbGxzIOKAlCB0aGUgZHJvcGRvd24gbmVlZHMgSlMgdG8gb3BlbiBhbnl3YXkuICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci1ib3R0b206IDA7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWlubmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlOyAvKiBhbmNob3IgZm9yIHRoZSBmbG9hdGluZyBsaXN0ICovXG5cdGZsZXgtd3JhcDogd3JhcDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi8qIG5vIGlubGluZSB0YWJzIGZvbGxvdyB0aGUgdGl0bGUgbm93LCBzbyBkcm9wIGl0cyBkaXZpZGVyICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi10aXRsZSB7XG5cdGJvcmRlci1yaWdodDogMDtcblx0cGFkZGluZy1yaWdodDogMDtcblx0bWFyZ2luLXJpZ2h0OiAwO1xufVxuXG4vKiB0aGUgZHJvcGRvd24gcGlsbCDigJQgY3VycmVudCBwYWdlICsgY2FyZXQgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LXRvZ2dsZSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7XG5cdG1pbi13aWR0aDogMTFyZW07XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRmb250LWZhbWlseTogaW5oZXJpdDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLyogc2lkZS1ieS1zaWRlIChkZWZhdWx0KTogcGlsbCBodWdzIHRoZSByaWdodCBlbmQgb2YgdGhlIHRpdGxlJ3Mgcm93ICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkOm5vdCguaXMtc3RhY2tlZCkgLnNlY3Rpb24tbmF2LXRvZ2dsZSB7XG5cdG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4vKiBzdGFja2VkOiB0aXRsZSDihpIgZXllYnJvdywgcGlsbCDihpIgZnVsbCB3aWR0aCBiZW5lYXRoIGl0ICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkLmlzLXN0YWNrZWQgLnNlY3Rpb24tbmF2LWlubmVyIHtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQuaXMtc3RhY2tlZCAuc2VjdGlvbi1uYXYtdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkLmlzLXN0YWNrZWQgLnNlY3Rpb24tbmF2LXRvZ2dsZSB7XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4uc2VjdGlvbi1uYXYtY2FyZXQge1xuXHR3aWR0aDogOXB4O1xuXHRoZWlnaHQ6IDlweDtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uc2VjdGlvbi1uYXYtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnNlY3Rpb24tbmF2LWNhcmV0IHtcblx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG59XG5cbi8qIHRoZSBzaWJsaW5nIGxpc3Qg4oCUIGEgZmxvYXRpbmcgbWVudSBiZWxvdyB0aGUgYmFyLCBhbmNob3JlZCB0byB0aGUgaW5uZXIgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWxpbmtzIHtcblx0ZGlzcGxheTogbm9uZTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDEwMCU7XG5cdHotaW5kZXg6IDUwO1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IDA7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcblx0bWF4LWhlaWdodDogNzB2aDtcblx0b3ZlcmZsb3cteTogYXV0bztcbn1cblxuLyogc2lkZS1ieS1zaWRlOiBjb21wYWN0IG1lbnUgdW5kZXIgdGhlIHJpZ2h0LWhhbmQgcGlsbCAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZDpub3QoLmlzLXN0YWNrZWQpIC5zZWN0aW9uLW5hdi1saW5rcyB7XG5cdHJpZ2h0OiAwO1xuXHR3aWR0aDogbWF4LWNvbnRlbnQ7XG5cdG1heC13aWR0aDogMTAwJTtcblx0bWluLXdpZHRoOiAxNHJlbTtcbn1cblxuLyogc3RhY2tlZDogZnVsbC13aWR0aCBtZW51ICovXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkLmlzLXN0YWNrZWQgLnNlY3Rpb24tbmF2LWxpbmtzIHtcblx0bGVmdDogMDtcblx0cmlnaHQ6IDA7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQub3BlbiAuc2VjdGlvbi1uYXYtbGlua3Mge1xuXHRkaXNwbGF5OiBmbGV4O1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1saW5rcyBsaSB7XG5cdGZsZXg6IG5vbmU7XG5cdG1hcmdpbi10b3A6IDA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTEwMCk7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWxpbmtzIGxpOmxhc3QtY2hpbGQge1xuXHRib3JkZXItYm90dG9tOiAwO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1saW5rcyBhIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdHdoaXRlLXNwYWNlOiBub3JtYWw7XG5cdGJvcmRlci1ib3R0b206IDA7IC8qIHRoZSB0YWItdW5kZXJsaW5lIGlzIGEgZGVza3RvcCB0cmVhdG1lbnQgKi9cbn1cblxuLyogY3VycmVudCByb3c6IGdvbGQgbGVmdCBhY2NlbnQgKyBwYWxlIHdhc2ggaW5zdGVhZCBvZiB0aGUgdGFiIHVuZGVybGluZSAqL1xuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbGlua3MgYS5pcy1jdXJyZW50IHtcblx0Ym9yZGVyLWJvdHRvbTogMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Ym94LXNoYWRvdzogaW5zZXQgM3B4IDAgMCB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyog4pSA4pSAIHByaW9yaXR5KyBvdmVyZmxvdyDigJQgYSBcIk1vcmUg4pa+XCIgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaXAg4pSA4pSAXG4gICBXaGVuIHRoZSBzdHJpcCBhbG1vc3QgZml0cywganMvc2VjdGlvbi1uYXYuanMga2VlcHMgdGhlIHRhYnMgdGhhdCBmaXQgaW5saW5lXG4gICBhbmQgdHVja3MgdGhlIHJlc3QgdW5kZXIgdGhpcyBidXR0b24gKHJhdGhlciB0aGFuIGNvbGxhcHNpbmcgdGhlIHdob2xlIHRoaW5nXG4gICB0byBhIHBpbGwpLiBTbyB3aWRlIHZpZXdzIHN0YXkgYSByZWFsIHRhYiByb3cuIEpTIGhpZGVzIG92ZXJmbG93IHRhYnNcbiAgIChsaS5pcy1oaWRkZW4pIGFuZCBjbG9uZXMgdGhlbSBpbnRvIHRoZSBtZW51OyBpdCB0b2dnbGVzIGBoaWRkZW5gIG9uIHRoZVxuICAgd2hvbGUgY29udHJvbCB3aGVuIG5vdGhpbmcgb3ZlcmZsb3dzLCBhbmQgaGlkZXMgaXQgZW50aXJlbHkgb25jZSB0aGUgbmF2XG4gICBjb2xsYXBzZXMgdG8gdGhlIHBpbGwuICovXG4uc2VjdGlvbi1uYXYtbGlua3MgbGkuaXMtaGlkZGVuIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGZsZXg6IG5vbmU7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlW2hpZGRlbl0ge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4uc2VjdGlvbi1uYXYuaXMtY29sbGFwc2VkIC5zZWN0aW9uLW5hdi1tb3JlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtYnRuIHtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIDA7XG5cdG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS02KTtcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtYnRuOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1idG5bYXJpYS1leHBhbmRlZD10cnVlXSAuc2VjdGlvbi1uYXYtY2FyZXQge1xuXHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAxMDAlO1xuXHRyaWdodDogMDtcblx0ei1pbmRleDogNTA7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWluLXdpZHRoOiAxNHJlbTtcblx0bWF4LXdpZHRoOiA4MHZ3O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0bWF4LWhlaWdodDogNzB2aDtcblx0b3ZlcmZsb3cteTogYXV0bztcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUuaXMtb3BlbiAuc2VjdGlvbi1uYXYtbW9yZS1tZW51IHtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgbGkge1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0xMDApO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IGxpOmxhc3QtY2hpbGQge1xuXHRib3JkZXItYm90dG9tOiAwO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IGEge1xuXHRkaXNwbGF5OiBibG9jaztcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRib3JkZXItYm90dG9tOiAwO1xufVxuXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcbn1cblxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSBhLmlzLWN1cnJlbnQge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGJveC1zaGFkb3c6IGluc2V0IDNweCAwIDAgdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIOKUgOKUgCBzdWItc2l0ZSBkcm9wZG93bnMgwrcgb25lIGxldmVsIG9mIGEgc3ViLXNpdGUncyBwYWdlcyBwZXIgdGFiIOKUgOKUgFxuICAgQSB0YWIgd2l0aCBjaGlsZCBwYWdlcyBnZXRzIGEgY2FyZXQgYnV0dG9uOyBjbGlja2luZyBpdCBvcGVucyBhIG1lbnUgb2YgdGhhdFxuICAgc3ViLXNpdGUncyBwYWdlcywgc28gc3VicGFnZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBiYXIgKHRoZSBzZWN0aW9uLW5hdiBvbmx5XG4gICBhcHBlYXJzIG9uIHBhZ2VzIHRoYXQgaGF2ZSBubyBzaWRlYmFyKS4ganMvc2VjdGlvbi1uYXYuanMgdG9nZ2xlcyAuaXMtb3BlbiBvblxuICAgdGhlIC5zZWN0aW9uLW5hdi1pdGVtLiBJbiB0aGUgU1RSSVAgdGhlIG1lbnUgaXMgYW4gYWJzb2x1dGUgZHJvcGRvd247IGluIHRoZVxuICAgY29sbGFwc2VkIHBpbGwgYW5kIHRoZSBNb3JlIG1lbnUgaXQgZHJvcHMgaW5saW5lIGFzIGFuIGluZGVudGVkIGFjY29yZGlvbi4gKi9cbi5zZWN0aW9uLW5hdi1pdGVtIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uc2VjdGlvbi1uYXYtc3ViLXRvZ2dsZSB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRhbGlnbi1zZWxmOiBzdHJldGNoO1xuXHRwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTIpO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4uc2VjdGlvbi1uYXYtc3ViLXRvZ2dsZTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnNlY3Rpb24tbmF2LXN1Yi10b2dnbGUgLnNlY3Rpb24tbmF2LWNhcmV0IHtcblx0d2lkdGg6IDZweDtcblx0aGVpZ2h0OiA2cHg7XG59XG5cbi5zZWN0aW9uLW5hdi1zdWItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnNlY3Rpb24tbmF2LWNhcmV0IHtcblx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG59XG5cbi8qIHRoZSBwYWdlcyBtZW51IOKAlCBhIGZsb2F0aW5nIGRyb3Bkb3duIGluIHRoZSBzdHJpcCAqL1xuLnNlY3Rpb24tbmF2LW1lbnUge1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMTAwJTtcblx0bGVmdDogMDtcblx0ei1pbmRleDogNTA7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWluLXdpZHRoOiAxM3JlbTtcblx0bWF4LXdpZHRoOiAyMnJlbTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdG1heC1oZWlnaHQ6IDcwdmg7XG5cdG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5zZWN0aW9uLW5hdi1pdGVtLmlzLW9wZW4gPiAuc2VjdGlvbi1uYXYtbWVudSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBkZXNrdG9wIHN0cmlwOiBhbHNvIHJldmVhbCBhIHRhYidzIHBhZ2VzIG9uIGhvdmVyIC8ga2V5Ym9hcmQgZm9jdXMsIHNvIHRoZVxuICAgdGFiJ3Mgb3duIGNsaWNrIHN0YXlzIGZyZWUgdG8gbmF2aWdhdGUgdG8gaXRzIGhvbWUgcGFnZSAodGhlIGNhcmV0IGNsaWNrXG4gICByZW1haW5zIHRoZSB0b3VjaCBmYWxsYmFjaykuIFNjb3BlZCB0byB0aGUgc3RyaXAg4oCUIHRoZSBjb2xsYXBzZWQgcGlsbCBhbmQgdGhlXG4gICBNb3JlIG1lbnUga2VlcCB0aGVpciBjbGljayBhY2NvcmRpb24uICovXG4uc2VjdGlvbi1uYXY6bm90KC5pcy1jb2xsYXBzZWQpIC5zZWN0aW9uLW5hdi1saW5rcyA+IC5zZWN0aW9uLW5hdi1pdGVtOmZvY3VzLXdpdGhpbiA+IC5zZWN0aW9uLW5hdi1tZW51IHtcblx0ZGlzcGxheTogYmxvY2s7XG59XG5cbkBtZWRpYSAoaG92ZXI6IGhvdmVyKSB7XG5cdC5zZWN0aW9uLW5hdjpub3QoLmlzLWNvbGxhcHNlZCkgLnNlY3Rpb24tbmF2LWxpbmtzID4gLnNlY3Rpb24tbmF2LWl0ZW06aG92ZXIgPiAuc2VjdGlvbi1uYXYtbWVudSB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cbn1cbi5zZWN0aW9uLW5hdi1tZW51IGxpIHtcblx0bWFyZ2luOiAwO1xuXHRmbGV4OiBub25lO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0xMDApO1xufVxuXG4uc2VjdGlvbi1uYXYtbWVudSBsaTpsYXN0LWNoaWxkIHtcblx0Ym9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnNlY3Rpb24tbmF2LW1lbnUgYSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5zZWN0aW9uLW5hdi1tZW51IGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcbn1cblxuLnNlY3Rpb24tbmF2LW1lbnUgYS5pcy1jdXJyZW50IHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xuXHRib3gtc2hhZG93OiBpbnNldCAzcHggMCAwIHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBuZXN0ZWQgKGFjY29yZGlvbikgZm9ybSDigJQgaW4gdGhlIGNvbGxhcHNlZCBwaWxsIGFuZCBpbnNpZGUgdGhlIE1vcmUgbWVudSB0aGVcbiAgIHBhZ2VzIG1lbnUgZHJvcHMgaW5saW5lIGJlbG93IGl0cyB0YWIgaW5zdGVhZCBvZiBmbG9hdGluZy4gKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWl0ZW0sXG4uc2VjdGlvbi1uYXYtbW9yZS1tZW51IC5zZWN0aW9uLW5hdi1pdGVtIHtcblx0ZmxleC13cmFwOiB3cmFwO1xufVxuXG4vKiBsaW5rIHRha2VzIHRoZSByb3cgKG1pbi13aWR0aDowIHNvIGl0IGNhbiBzaHJpbmspLCBjYXJldCBzaXRzIGlubGluZSBiZXNpZGUgaXRcbiAgIChub3Qgc3RyZXRjaGVkIOKAlCBzdHJldGNoIHdhcyBkcm9wcGluZyBpdCBvbnRvIGl0cyBvd24gbGluZSksIG1lbnUgd3JhcHMgYmVsb3cgKi9cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWl0ZW0gPiBhLFxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSAuc2VjdGlvbi1uYXYtaXRlbSA+IGEge1xuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi5zZWN0aW9uLW5hdi5pcy1jb2xsYXBzZWQgLnNlY3Rpb24tbmF2LWl0ZW0gPiAuc2VjdGlvbi1uYXYtc3ViLXRvZ2dsZSxcbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgLnNlY3Rpb24tbmF2LWl0ZW0gPiAuc2VjdGlvbi1uYXYtc3ViLXRvZ2dsZSB7XG5cdGZsZXg6IG5vbmU7XG5cdGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbWVudSxcbi5zZWN0aW9uLW5hdi1tb3JlLW1lbnUgLnNlY3Rpb24tbmF2LW1lbnUge1xuXHRwb3NpdGlvbjogc3RhdGljO1xuXHRmbGV4OiAwIDAgMTAwJTtcblx0bWluLXdpZHRoOiAwO1xuXHRtYXgtd2lkdGg6IG5vbmU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXJhZGl1czogMDtcblx0Ym94LXNoYWRvdzogbm9uZTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdG1hcmdpbjogMDtcblx0bWF4LWhlaWdodDogbm9uZTtcbn1cblxuLnNlY3Rpb24tbmF2LmlzLWNvbGxhcHNlZCAuc2VjdGlvbi1uYXYtbWVudSBhLFxuLnNlY3Rpb24tbmF2LW1vcmUtbWVudSAuc2VjdGlvbi1uYXYtbWVudSBhIHtcblx0cGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLyog4pSA4pSA4pSAIENNUyBlZGl0IHNob3J0Y3V0IChzaGVsbC53cmFwKSDilIDilIDilIBcbiAgIFJlbmRlcmVkIG9ubHkgZm9yIGEgc2lnbmVkLWluIHVzZXIgd2l0aCBtb2RpZnkgcGVybWlzc2lvbiBvbiB0aGUgcGFnZS4gQSBzbWFsbFxuICAgdHJhbnNsdWNlbnQgZ29sZCBwaWxsIHBpbm5lZCB0byB0aGUgdG9wLWNlbnRyZSB0aGF0IGJyaWdodGVucyBvbiBob3ZlciBhbmRcbiAgIGxpbmtzIHRvIHRoZSBDTVMgZWRpdG9yLiBgbWFyZ2luLWJvdHRvbTogLTFsaGAgY2FuY2VscyBpdHMgb3duIGhlaWdodCBzbyBpdFxuICAgZmxvYXRzIG92ZXIgdGhlIGhlYWRlciBpbnN0ZWFkIG9mIHB1c2hpbmcgY29udGVudCBkb3duLiBBZG1pbiBhZmZvcmRhbmNlIOKAlFxuICAgbmV2ZXIgc2hvd24gdG8gbm9ybWFsIHZpc2l0b3JzLiAqL1xuLmNtcy1lZGl0LWJhciB7XG5cdHBvc2l0aW9uOiBzdGlja3k7XG5cdHRvcDogMDtcblx0ei1pbmRleDogMTAwMDtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiBtYXgtY29udGVudDtcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRtYXJnaW46IDAgYXV0byAtMWxoIHZhcigtLWd1dHRlcik7IC8qIGxlZnQtYWxpZ25lZCAocmlnaHQgbWFyZ2luIGF1dG8pICovXG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDI7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIHZhcigtLXJhZGl1cy1tZCkgdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuXHRvcGFjaXR5OiAwLjU7XG5cdHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4vKiBgYS5gIHByZWZpeCBiZWF0cyBiYXNlLmNzcyBgYTpub3QoLmJ0bik6aG92ZXJgIHNvIHRoZSBsYWJlbCBzdGF5cyBuYXZ5IChyZWFkYWJsZVxuICAgb24gdGhlIGdvbGQpLCBub3QgZ29sZC1vbi1nb2xkICovXG5hLmNtcy1lZGl0LWJhcjpob3ZlcixcbmEuY21zLWVkaXQtYmFyOmZvY3VzLXZpc2libGUge1xuXHRvcGFjaXR5OiAxO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBoZWFkZXIuY3NzICDCtyAgc2l0ZSBoZWFkZXIg4oCUIHV0aWxpdHkgYmFyICsgZnVsbC13aWR0aCBtZWdhLW1lbnVcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MgwrcgYnV0dG9ucy9mb3JtcyBjb21lIGZyb20gdGhlaXIgb3duIHBhcnRpYWxzLlxuICAgQmVoYXZpb3VyIDoganMvaGVhZGVyLmpzIChzZWxmLWluaXRzIG9uIFtkYXRhLWhlYWRlcl0pLlxuICAgTWFya3VwICAgIDogdGVtcGxhdGVzL2Nocm9tZS9oZWFkZXIudHQuXG5cbiAgIFJlc3BvbnNpdmUgc3RhZ2VzOlxuICAgICDiiaU5ODAgIGFsbCBzaXggc2VjdGlvbiBsaW5rcyBpbiB0aGUgYmFyXG4gICAgIOKJpDk4MCAgUmVzZWFyY2ggKyBBYm91dCBmb2xkIGludG8gdGhlIFwiTWVudVwiIHBhbmVsIChvdmVyZmxvdyBvbmx5KVxuICAgICDiiaQ3NjggIGNvcmUgc2VjdGlvbnMgZm9sZCBpbiB0b287IE1lbnUgaXMgdGhlIHdob2xlIG5hdiAoY29sdW1uc1xuICAgICAgICAgICBzdGFjazsgc2VjdGlvbiB0aXRsZXMgYmVjb21lIGNvbGxhcHNpYmxlKVxuICAgICDiiaQ2MDAgIHV0aWxpdHkgYmFyIGhpZGVzOyBHaXZlL0FwcGx5IHJpZGUgaW4gdGhlIGJhciBiZXNpZGUgTWVudVxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiBoZWFkZXItc2NvcGVkIHJlc2V0cy4gOndoZXJlKCkgaG9sZHMgc3BlY2lmaWNpdHkgYXQgMC0wLTEgKGxpa2UgYSBiYXJlXG4gICBlbGVtZW50IHNlbGVjdG9yKSBzbyBjb21wb25lbnQgcnVsZXMgc3VjaCBhcyAubmF2LWxpbmsg4oCUIHdoaWNoIHNldCB0aGVpciBvd25cbiAgIGNvbG9yL2JhY2tncm91bmQg4oCUIGFsd2F5cyB3aW4gb3ZlciB0aGVzZSBpbnN0ZWFkIG9mIGJlaW5nIG92ZXJyaWRkZW4uICovXG46d2hlcmUoLmF1LWhlYWRlcikgYSB7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Y29sb3I6IGluaGVyaXQ7XG59XG5cbjp3aGVyZSguYXUtaGVhZGVyKSBidXR0b24ge1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXHRsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxuLyogYmFzZS5jc3Mgc3R5bGVzIGJhcmUgbGlzdHMgZ2xvYmFsbHkgKGBsaSArIGxpYCB0b3AtbWFyZ2luLCBgdWxgIHBhZGRpbmctbGVmdCk7XG4gICB0aGUgaGVhZGVyJ3MgbGlzdHMgdXNlIGZsZXggKyBnYXAsIHNvIG5ldXRyYWxpemUgdGhhdCBoZXJlLiAqL1xuLmF1LWhlYWRlciB1bCB7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcbn1cblxuLmF1LWhlYWRlciBsaSArIGxpIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogdGhlIHdob2xlIGhlYWRlciBzdGlja3Mg4oCUIHN0aWNreSBvbiBgLm1haW4tbmF2YCBhbG9uZSBjYW4ndCB3b3JrIGJlY2F1c2UgaXRzXG4gICBwYXJlbnQgYC5hdS1oZWFkZXJgIGlzIG9ubHkgaGVhZGVyLXRhbGwsIHNvIGl0IGhhcyBubyByb29tIHRvIHN0aWNrIHdpdGhpbiAqL1xuLmF1LWhlYWRlciB7XG5cdHBvc2l0aW9uOiBzdGlja3k7XG5cdHRvcDogMDtcblx0ei1pbmRleDogMTAwO1xufVxuXG4vKiDilIDilIDilIAgVVRJTElUWSBCQVIgKGF1ZGllbmNlICsgZ2l2ZS9hcHBseSArIHNlYXJjaCkg4pSA4pSA4pSAICovXG4udXRpbC1uYXYge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHotaW5kZXg6IDEwMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7XG59XG5cbi8qIGNvbnRlbnQgY29udGFpbmVyOiBtYXgtd2lkdGggd2l0aCBhIGd1dHRlciBmbG9vciwgaW4gT05FIHByb3BlcnR5IHNvIHRoZSBiYXJcbiAgIGl0c2VsZiBzdGF5cyBwYWRkaW5nLWZyZWUgKHRoZSBtZWdhIGRyb3Bkb3duIGlzIGFic29sdXRlbHkgcG9zaXRpb25lZCBpbnNpZGVcbiAgIC5tYWluLW5hdiBhbmQgbXVzdCBzdGF5IGZ1bGwtYmxlZWQpLiBQdXRzIGhlYWRlciBjb250ZW50IG9uIHRoZSBzYW1lIGxlZnRcbiAgIGVkZ2UgYXMgLnNlY3Rpb24gY29udGVudCDigJQgc2VlIGNzcy9jaHJvbWUuY3NzIC5zZWN0aW9uLW5hdi4gKi9cbi51dGlsLWlubmVyIHtcblx0d2lkdGg6IG1pbigxMDAlIC0gMiAqIHZhcigtLWd1dHRlciksIHZhcigtLW1heC13aWR0aCkpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEpO1xufVxuXG4udXRpbC1pbm5lciBhIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4zcHg7XG5cdHRyYW5zaXRpb246IGNvbG9yIDAuMTVzO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udXRpbC1pbm5lciBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLnV0aWwtaW5uZXIgLnV0aWwtYWNjZW50IHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRmb250LXdlaWdodDogNjAwO1xufSAvKiBHaXZlLCBWaXNpdCAqL1xuLnV0aWwtaW5uZXIgLnV0aWwtYWNjZW50OmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4udXRpbC1pbm5lciAudXRpbC1jdGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS0xKTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59IC8qIEFwcGx5IOKAlCBwcmltYXJ5ICovXG4udXRpbC1pbm5lciAudXRpbC1jdGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi8qIOKUgOKUgOKUgCBNQUlOIEJBUiAobG9nbyArIHNlY3Rpb24gbmF2KSDilIDilIDilIAgKi9cbi5tYWluLW5hdiB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ei1pbmRleDogMTAwO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym94LXNoYWRvdzogMCAycHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuXG4ubWFpbi1pbm5lciB7XG5cdHdpZHRoOiBtaW4oMTAwJSAtIDIgKiB2YXIoLS1ndXR0ZXIpLCB2YXIoLS1tYXgtd2lkdGgpKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLm5hdi1sb2dvIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtMyk7XG5cdG1hcmdpbi1yaWdodDogYXV0bztcblx0ZmxleC1zaHJpbms6IDA7XG5cdC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG5cdHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ubmF2LWxvZ28gaW1nIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGhlaWdodDogNDBweDtcblx0d2lkdGg6IGF1dG87XG5cdC13ZWJraXQtdXNlci1kcmFnOiBub25lO1xufSAvKiBTYWZhcmk6IGRvbid0IGxldCB0aGUgbG9nbyBpbWFnZSBiZSBzZWxlY3RlZC9kcmFnZ2VkICovXG4ubWFpbi1saW5rcyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi5uYXYtaXRlbSB7XG5cdHBvc2l0aW9uOiBzdGF0aWM7XG59XG5cbi5uYXYtbGluayB7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43OCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTQpO1xuXHRib3JkZXItYm90dG9tOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLm5hdi1saW5rOmhvdmVyLCAubmF2LWxpbmtbYXJpYS1leHBhbmRlZD10cnVlXSB7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xufVxuXG4ubmF2LWxpbmsgLmNhcmV0IHtcblx0d2lkdGg6IDhweDtcblx0aGVpZ2h0OiA4cHg7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcblx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuXHRtYXJnaW4tdG9wOiAtM3B4O1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5uYXYtbGlua1thcmlhLWV4cGFuZGVkPXRydWVdIC5jYXJldCB7XG5cdHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpO1xuXHRtYXJnaW4tdG9wOiAycHg7XG59XG5cbi8qIOKUgOKUgOKUgCBGVUxMLVdJRFRIIE1FR0EgUEFORUwg4pSA4pSA4pSAICovXG4ubWVnYSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogMDtcblx0cmlnaHQ6IDA7XG5cdHRvcDogMTAwJTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG5cdG9wYWNpdHk6IDA7XG5cdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpO1xuXHR0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgdmlzaWJpbGl0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0ei1pbmRleDogOTA7XG59XG5cbi5tZWdhLm9wZW4ge1xuXHRvcGFjaXR5OiAxO1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5tZWdhLWlubmVyIHtcblx0d2lkdGg6IG1pbigxMDAlIC0gMiAqIHZhcigtLWd1dHRlciksIHZhcigtLW1heC13aWR0aCkpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4ubWVnYS1jb2wge1xuXHRmbGV4OiAxIDEgMTkwcHg7XG5cdG1pbi13aWR0aDogMTcwcHg7XG59XG5cbi5tZWdhLWNvbCBoNCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMS41cHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLm1lZ2EtY29sIGg0IGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5tZWdhLWNvbCB1bCB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5tZWdhLWNvbCBhIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHR0cmFuc2l0aW9uOiBjb2xvciAwLjE1cztcbn1cblxuLm1lZ2EtY29sIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5tZWdhLWN0YSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLm1lZ2EtY3RhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ubWVnYS1mZWF0dXJlIHtcblx0ZmxleDogMSAxIDI2MHB4O1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1hdS1uYXZ5KSwgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0YWxpZ24tc2VsZjogc3RyZXRjaDtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cblxuLm1lZ2EtZmVhdHVyZSAuZmsge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMnB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ubWVnYS1mZWF0dXJlIGgzIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRsaW5lLWhlaWdodDogMS4yNTtcbn1cblxuLm1lZ2EtZmVhdHVyZSBhIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4vKiBzY3JpbSBiZWhpbmQgYW4gb3BlbiBwYW5lbCAqL1xuLm5hdi1zY3JpbSB7XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0aW5zZXQ6IDA7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMjYsIDUxLCAwLjQ1KTtcblx0b3BhY2l0eTogMDtcblx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpLCB2aXNpYmlsaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpO1xuXHR6LWluZGV4OiA4MDtcbn1cblxuYm9keS5tZWdhLW9wZW4gLm5hdi1zY3JpbSB7XG5cdG9wYWNpdHk6IDE7XG5cdHZpc2liaWxpdHk6IHZpc2libGU7XG59XG5cbi8qIGZvY3VzIHRoZSBvcGVuIG1lbnU6IHJlY2VkZSB0aGUgb3RoZXIgYmFyIGl0ZW1zLCBrZWVwIHRoZSBhY3RpdmUgb25lIGxpdCAqL1xuYm9keS5tZWdhLW9wZW4gLm5hdi1saW5rIHtcblx0b3BhY2l0eTogMC40NTtcbn1cblxuYm9keS5tZWdhLW9wZW4gLm5hdi1saW5rW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0ge1xuXHRvcGFjaXR5OiAxO1xufVxuXG4vKiDilIDilIDilIAgU0VBUkNIIChpY29uIGluIHRoZSBiYXIg4oaSIGZ1bGwtd2lkdGggcGFuZWwpIOKUgOKUgOKUgCAqL1xuLnNlYXJjaC1pdGVtIHtcblx0ZGlzcGxheTogZmxleDtcbn0gLyogc3RyZXRjaCB0aGUgYnV0dG9uIHRvIGZ1bGwgYmFyIGhlaWdodCBzbyB0aGUgaWNvbiBjZW50ZXJzICovXG4ubmF2LXNlYXJjaC1idG4ge1xuXHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5uYXYtc2VhcmNoLWJ0biBzdmcge1xuXHR3aWR0aDogMThweDtcblx0aGVpZ2h0OiAxOHB4O1xufVxuXG4ubWVnYS1zZWFyY2gtaW5uZXIge1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRhbGlnbi1pdGVtczogc3RyZXRjaDtcblx0cGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2UtOCk7XG59XG5cbi5zaXRlLXNlYXJjaCB7XG5cdHdpZHRoOiAxMDAlO1xuXHRtYXgtd2lkdGg6IDc2MHB4O1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4uc2VhcmNoLWxhYmVsIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uc2VhcmNoLWZpZWxkIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMSkgdmFyKC0tc3BhY2UtNSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHR0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uc2VhcmNoLWZpZWxkOmZvY3VzLXdpdGhpbiB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zZWFyY2gtZmllbGQgPiBzdmcge1xuXHR3aWR0aDogMjJweDtcblx0aGVpZ2h0OiAyMnB4O1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xuXHRmbGV4LXNocmluazogMDtcbn1cblxuLnNlYXJjaC1maWVsZCBpbnB1dCB7XG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiAwO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIDA7XG59XG5cbi5zZWFyY2gtZ28ge1xuXHRmbGV4LXNocmluazogMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5zZWFyY2gtZ286aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5zZWFyY2gtaGludCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xufVxuXG4uc2VhcmNoLWhpbnQgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnNlYXJjaC1oaW50IGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIOKUgOKUgOKUgCBcIk1FTlVcIiBUUklHR0VSIChvdmVyZmxvdykgKyBjb21wYWN0IEdpdmUvQXBwbHkg4pSA4pSA4pSAICovXG4ubWVudS1pdGVtIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLm5hdi1tZW51LWJ0biB7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5uYXYtbWVudS1idG4gLmhhbSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRnYXA6IDRweDtcblx0d2lkdGg6IDIwcHg7XG5cdGhlaWdodDogMS42ZW07XG59XG5cbi5uYXYtbWVudS1idG4gLmhhbSBzcGFuIHtcblx0aGVpZ2h0OiAycHg7XG5cdGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcblx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4ubmF2LW1lbnUtYnRuW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmhhbSBzcGFuOm50aC1jaGlsZCgxKSB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpIHJvdGF0ZSg0NWRlZyk7XG59XG5cbi5uYXYtbWVudS1idG5bYXJpYS1leHBhbmRlZD10cnVlXSAuaGFtIHNwYW46bnRoLWNoaWxkKDIpIHtcblx0b3BhY2l0eTogMDtcbn1cblxuLm5hdi1tZW51LWJ0blthcmlhLWV4cGFuZGVkPXRydWVdIC5oYW0gc3BhbjpudGgtY2hpbGQoMykge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCkgcm90YXRlKC00NWRlZyk7XG59XG5cbi5tZWdhLWNvbC1pbmZvIHtcblx0bWFyZ2luLWxlZnQ6IGF1dG87XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5tZWdhLWNvbC1pbmZvIGg0IHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ubWVudS1hY3Rpb25zIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5tZW51LWFjdGlvbnMgLm5jLWJ0biB7XG5cdGZsZXg6IDE7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMyk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4ubWVudS1hY3Rpb25zIC5uYy1naXZlLCAubWVudS1hY3Rpb25zIC5uYy12aXNpdCB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5tZW51LWFjdGlvbnMgLm5jLWdpdmU6aG92ZXIsIC5tZW51LWFjdGlvbnMgLm5jLXZpc2l0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcbn1cblxuLm1lbnUtYWN0aW9ucyAubmMtYXBwbHkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLm1lbnUtYWN0aW9ucyAubmMtYXBwbHk6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuXHRib3gtc2hhZG93OiAwIDZweCAyMHB4IHJnYmEoMTk4LCAxNDksIDQzLCAwLjMpO1xufVxuXG4vKiBNZW51IHBhbmVsID0gb3ZlcmZsb3cgb25seTogaGlkZSBjb2x1bW5zIGZvciBzZWN0aW9ucyBzdGlsbCBpbiB0aGUgYmFyICovXG4jbWVnYS1tZW51IC5tY29sLWNvcmUsICNtZWdhLW1lbnUgLm1jb2wtaW5mbyB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5uYXYtY29tcGFjdCB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5uYXYtY29tcGFjdCAubmMtYnRuIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4ubmF2LWNvbXBhY3QgLm5jLWdpdmUsIC5uYXYtY29tcGFjdCAubmMtdmlzaXQge1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTtcbn1cblxuLm5hdi1jb21wYWN0IC5uYy1naXZlOmhvdmVyLCAubmF2LWNvbXBhY3QgLm5jLXZpc2l0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5uYXYtY29tcGFjdCAubmMtYXBwbHkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLm5hdi1jb21wYWN0IC5uYy1hcHBseTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG5cdGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgxOTgsIDE0OSwgNDMsIDAuMyk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMjAwcHgpIHtcblx0Lm5hdi1saW5rIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0Lm1haW4taW5uZXIge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNSk7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkge1xuXHQudXRpbC1pbm5lciBhIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtMik7XG5cdH1cblx0Lm5hdi1saW5rIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtMik7XG5cdH1cblx0Lm5hdi1pdGVtLnNlY29uZGFyeSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQubWVudS1pdGVtIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG5cdC5uYXYtaXRlbTpub3QoLm1lbnUtaXRlbSk6bm90KC5zZWFyY2gtaXRlbSkge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0Lm1lZ2Ege1xuXHRcdG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxMzBweCk7XG5cdFx0b3ZlcmZsb3c6IGF1dG87XG5cdH1cblx0LnNlYXJjaC1sYWJlbCB7XG5cdFx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0fVxuXHQubWVnYS1pbm5lciB7XG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHR9XG5cdC5tZWdhLWNvbCB7XG5cdFx0ZmxleDogbm9uZTtcblx0fVxuXHQubWVnYS1jb2wtaW5mbyB7XG5cdFx0bWFyZ2luLWxlZnQ6IDA7XG5cdH1cblx0Lm1lZ2EtZmVhdHVyZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQjbWVnYS1tZW51IC5tY29sLWNvcmUge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cdC8qIGNvbGxhcHNpYmxlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBtb2JpbGUgTWVudSAqL1xuXHQjbWVnYS1tZW51IC5tZWdhLWNvbDpub3QoLm1jb2wtaW5mbykge1xuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdFx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1lZ2EtY29sOm5vdCgubWNvbC1pbmZvKSA+IGg0IHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0cGFkZGluZy1ib3R0b206IDA7XG5cdH1cblx0I21lZ2EtbWVudSAubWVnYS1jb2w6bm90KC5tY29sLWluZm8pID4gaDQgYSB7XG5cdFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XG5cdFx0Y29sb3I6IGluaGVyaXQ7XG5cdH1cblx0I21lZ2EtbWVudSAubWVnYS1jb2w6bm90KC5tY29sLWluZm8pID4gaDQ6OmFmdGVyIHtcblx0XHRjb250ZW50OiBcIlwiO1xuXHRcdHdpZHRoOiA4cHg7XG5cdFx0aGVpZ2h0OiA4cHg7XG5cdFx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgY3VycmVudENvbG9yO1xuXHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG5cdFx0dHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuXHRcdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0fVxuXHQjbWVnYS1tZW51IC5tZWdhLWNvbDpub3QoLm1jb2wtaW5mbykub3BlbiA+IGg0OjphZnRlciB7XG5cdFx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG5cdH1cblx0I21lZ2EtbWVudSAubWVnYS1jb2w6bm90KC5tY29sLWluZm8pID4gdWwge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdCNtZWdhLW1lbnUgLm1lZ2EtY29sOm5vdCgubWNvbC1pbmZvKS5vcGVuID4gdWwge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0LnV0aWwtbmF2IHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdC5uYXYtY29tcGFjdCB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0fVxuXHQjbWVnYS1tZW51IC5tY29sLWluZm8ge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cdC8qIHJlY2xhaW0gcm9vbTogdGlnaHRlciBzaWRlIHBhZGRpbmcgKyBnYXBzIG9uIHRoZSBjb21wYWN0IGJhciAqL1xuXHQubWFpbi1pbm5lciB7XG5cdFx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNCk7XG5cdH1cblx0Lm5hdi1zZWFyY2gtYnRuIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtMyk7XG5cdH1cblx0Lm5hdi1sb2dvIGltZyB7XG5cdFx0aGVpZ2h0OiAzNHB4O1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcblx0LyogdGhyZWUgQ1RBcyB3b24ndCBmaXQgd2l0aCB0aGUgbG9nbyArIHNlYXJjaCArIE1lbnUg4oCUIHNoZWQgZnJvbSB0aGUgbGVmdCAqL1xuXHQubmF2LWNvbXBhY3QgLm5jLWdpdmUge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkge1xuXHQvKiBvbmx5IEFwcGx5IHJlbWFpbnMgb24gdGhlIGJhcjsgR2l2ZS9WaXNpdCBzdGF5IGluIHRoZSBNZW51IHBhbmVsICovXG5cdC5uYXYtY29tcGFjdCAubmMtdmlzaXQge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0Lm1haW4taW5uZXIge1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtYnV0dG9ucy5jc3MgIMK3ICBCdXR0b24gJiBDVEEgc3R5bGVzXG4gICBEZXBlbmRzIG9uOiBhdS10b2tlbnMuY3NzXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5idG4ge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXdlaWdodDogNzAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsZXR0ZXItc3BhY2luZzogMS41cHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0dGV4dC1hbGlnbjogY2VudGVyOyAvKiBhIGxhYmVsIHRoYXQgd3JhcHMgc3RheXMgY2VudHJlZCBpbiB0aGUgYnV0dG9uICovXG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTYpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHRib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uYnRuOmhvdmVyIHtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xufVxuXG4uYnRuOmFjdGl2ZSB7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLyogUHJpbWFyeSDigJQgR29sZCAqL1xuLmJ0bi1wcmltYXJ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBsaWdodGVuIHRoZSBnb2xkIG9uIGhvdmVyIHdoaWxlIEtFRVBJTkcgdGhlIG5hdnkgbGFiZWwg4oCUIG5hdnkgb24gdGhlIGxpZ2h0ZXJcbiAgIGdvbGQgcmVhZHMgd2l0aCBtb3JlIGNvbnRyYXN0LCBub3QgbGVzcyAodGhlIG9sZCB3YXNoLW91dCB3YXMgdGhlIGdvbGQgdGV4dCxcbiAgIG5vdyBmaXhlZCB2aWEgYTpub3QoLmJ0bik6aG92ZXIgaW4gYmFzZS5jc3MpLiAqL1xuLmJ0bi1wcmltYXJ5OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMTk4LCAxNDksIDQzLCAwLjM1KTtcbn1cblxuLyogU2Vjb25kYXJ5IOKAlCBOYXZ5ICovXG4uYnRuLXNlY29uZGFyeSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uYnRuLXNlY29uZGFyeTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCA1MSwgMTAyLCAwLjMpO1xufVxuXG4vKiBPdXRsaW5lICovXG4uYnRuLW91dGxpbmUge1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uYnRuLW91dGxpbmU6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogb24gdGhlIGRhcmsgYmFuZHMgYW4gb3V0bGluZSBidXR0b24gdHVybnMgd2hpdGUgKG5hdnktb24tbmF2eSBvdGhlcndpc2UpICovXG46aXMoLnNlY3Rpb24tLW5hdnksIC5zZWN0aW9uLS1uYXZ5LW1pZCwgLnNlY3Rpb24tLW5hdnktYnJpZ2h0LCAuc2VjdGlvbi0tbmlsZS1ibHVlLFxuLnNlY3Rpb24tLWNoYXRoYW1zLWJsdWUsIC5zZWN0aW9uLS1maW9yZC1ibHVlLCAuc2VjdGlvbi0tZmlvcmQtYmx1ZS10ZXh0dXJlZCkgLmJ0bi1vdXRsaW5lIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG59XG5cbjppcyguc2VjdGlvbi0tbmF2eSwgLnNlY3Rpb24tLW5hdnktbWlkLCAuc2VjdGlvbi0tbmF2eS1icmlnaHQsIC5zZWN0aW9uLS1uaWxlLWJsdWUsXG4uc2VjdGlvbi0tY2hhdGhhbXMtYmx1ZSwgLnNlY3Rpb24tLWZpb3JkLWJsdWUsIC5zZWN0aW9uLS1maW9yZC1ibHVlLXRleHR1cmVkKSAuYnRuLW91dGxpbmU6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi8qIGJ1dHRvbnMgb24gYSBwaG90byBiYW5kJ3MgcGFuZWw6IC5jb3Zlci1wYW5lbCBhIGNvbG9ycyBldmVyeSBsaW5rIGxpZ2h0IGdvbGRcbiAgIGFuZCB1bmRlcmxpbmVzIGl0IG9uIGhvdmVyLCB3aGljaCB3b3VsZCB3YXNoIG91dCBhIGJ1dHRvbidzIGxhYmVsICovXG4uY292ZXItcGFuZWwgLmJ0bixcbi5jb3Zlci1wYW5lbCAuYnRuOmhvdmVyIHtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uY292ZXItcGFuZWwgLmJ0bi1wcmltYXJ5LFxuLmNvdmVyLXBhbmVsIC5idG4tcHJpbWFyeTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uY292ZXItcGFuZWwgLmJ0bi1vdXRsaW5lIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG59XG5cbi5jb3Zlci1wYW5lbCAuYnRuLW91dGxpbmU6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi8qIEdob3N0ICovXG4uYnRuLWdob3N0IHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLmJ0bi1naG9zdDpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG59XG5cbi8qIFNpemVzICovXG4uYnRuLXNtIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG59XG5cbi5idG4tbGcge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS04KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xufVxuXG4vKiBCdXR0b24gcm93IOKAlCBhIGdyb3VwIG9mIENUQXMgaW4gYXV0aG9yZWQgY29udGVudDogPHAgY2xhc3M9XCJidG4tcm93XCI+LlxuICAgRXZlbiBnYXBzOyBlYWNoIGJ1dHRvbiBncm93cyB0byBzaGFyZSBpdHMgbGluZSwgc28gYSBuYXJyb3cgY29sdW1uIHN0YWNrc1xuICAgdGhlbSBmdWxsLXdpZHRoIGFuZCBhIHdpZGUgb25lIGxpbmVzIHRoZW0gdXAuICovXG4uYnRuLXJvdyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmJ0bi1yb3cgPiAuYnRuIHtcblx0ZmxleDogMSAxIGF1dG87XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtZm9ybXMuY3NzICDCtyAgRm9ybSBjb250cm9sc1xuICAgRGVwZW5kcyBvbjogYXUtdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiBMYWJlbHMgKi9cbi5sYWJlbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xufVxuXG4ubGFiZWwtcmVxdWlyZWQ6OmFmdGVyIHtcblx0Y29udGVudDogXCIgKlwiO1xuXHRjb2xvcjogdmFyKC0tYXUtZXJyb3IpO1xufVxuXG4uaGVscGVyIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi5lcnJvci1tc2cge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRjb2xvcjogdmFyKC0tYXUtZXJyb3IpO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xKTtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLyogVGV4dCBJbnB1dCAqL1xuLmlucHV0IHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRvdXRsaW5lOiBub25lO1xuXHR0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5pbnB1dDo6cGxhY2Vob2xkZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtZ3JheS00MDApO1xufVxuXG4uaW5wdXQ6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uaW5wdXQtZXJyb3Ige1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWVycm9yKSAhaW1wb3J0YW50O1xufVxuXG4vKiBEYXJrIHZhcmlhbnQgKi9cbi5pbnB1dC1kYXJrIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uaW5wdXQtZGFyazpmb2N1cyB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi8qIFNlbGVjdCAqL1xuLnNlbGVjdCB7XG5cdHdpZHRoOiAxMDAlO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS00KTtcblx0b3V0bGluZTogbm9uZTtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLC4uLmNoZXZyb24uLi5cIik7XG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IDE2cHggY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zZWxlY3Q6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBUZXh0YXJlYSAqL1xuLnRleHRhcmVhIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdHJlc2l6ZTogdmVydGljYWw7XG5cdG1pbi1oZWlnaHQ6IDEwMHB4O1xufVxuXG4udGV4dGFyZWE6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4vKiBDaGVja2JveCAmIFJhZGlvICovXG4uY2hlY2stZ3JvdXAge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uY2hlY2stbGFiZWwge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcbn1cblxuLmNoZWNrYm94LCAucmFkaW8ge1xuXHR3aWR0aDogMjBweDtcblx0aGVpZ2h0OiAyMHB4O1xuXHRhY2NlbnQtY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ucmFkaW8ge1xuXHRhY2NlbnQtY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4vKiBUb2dnbGUgU3dpdGNoICovXG4udG9nZ2xlIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR3aWR0aDogNDhweDtcblx0aGVpZ2h0OiAyNnB4O1xufVxuXG4udG9nZ2xlIGlucHV0IHtcblx0b3BhY2l0eTogMDtcblx0d2lkdGg6IDA7XG5cdGhlaWdodDogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xufVxuXG4udG9nZ2xlLXRyYWNrIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0zMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi50b2dnbGUtdHJhY2s6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR3aWR0aDogMjBweDtcblx0aGVpZ2h0OiAyMHB4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0dG9wOiAzcHg7XG5cdGxlZnQ6IDNweDtcblx0Ym94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi50b2dnbGUgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGUtdHJhY2sge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnRvZ2dsZSBpbnB1dDpjaGVja2VkICsgLnRvZ2dsZS10cmFjazo6YWZ0ZXIge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjJweCk7XG59XG5cbi8qIFJhbmdlIFNsaWRlciAqL1xuLnJhbmdlIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogNnB4O1xuXHRhcHBlYXJhbmNlOiBub25lO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbn1cblxuLnJhbmdlOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG5cdGFwcGVhcmFuY2U6IG5vbmU7XG5cdHdpZHRoOiAyMnB4O1xuXHRoZWlnaHQ6IDIycHg7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJvcmRlcjogM3B4IHNvbGlkIHZhcigtLWF1LXdoaXRlKTtcblx0Ym94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cblxuLyogRmlsZSBVcGxvYWQgKi9cbi5maWxlLXVwbG9hZCB7XG5cdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1hdS1ncmF5LTMwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTUpO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4uZmlsZS11cGxvYWQ6aG92ZXIge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xufVxuXG4vKiBMYXlvdXQgaGVscGVycyAqL1xuLmZvcm0tZ3JvdXAge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmZvcm0tcm93IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0LmZvcm0tcm93IHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxufVxuLyogbXVsdGktY29sdW1uIGNoZWNrYm94L3JhZGlvIGxpc3QgZm9yIGxvbmcgb3B0aW9uIHNldHMgKGUuZy4gMTYgcHJvamVjdCB0eXBlcykuXG4gICBCb3hlcyBhbGlnbiB0byB0aGUgZmlyc3QgbGluZSBzbyB3cmFwcGluZyBsYWJlbHMgc3RheSB0aWR5LiAqL1xuLmNoZWNrLWdyb3VwLS1jb2xzIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTYpO1xufVxuXG4uY2hlY2stZ3JvdXAtLWNvbHMgLmNoZWNrLWxhYmVsIHtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5jaGVjay1ncm91cC0tY29scyAuY2hlY2tib3gsIC5jaGVjay1ncm91cC0tY29scyAucmFkaW8ge1xuXHRmbGV4LXNocmluazogMDtcblx0bWFyZ2luLXRvcDogMnB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcblx0LmNoZWNrLWdyb3VwLS1jb2xzIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxufVxuLyogZm9ybSBzY2FmZm9sZCDigJQgY29uc3RyYWluIHdpZHRoLCByZXNldCB0aGUgZmllbGRzZXQgY2hyb21lLCBzdHlsZSB0aGUgbGVnZW5kICovXG4uZm9ybSB7XG5cdG1heC13aWR0aDogNjgwcHg7XG59XG5cbi5mb3JtIGZpZWxkc2V0IHtcblx0Ym9yZGVyOiAwO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG59XG5cbi5mb3JtIGxlZ2VuZCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiDilIDilIDilIAgTGVnYWN5IENNUyBmb3JtcyAoLmF1Zm9ybSkg4pSA4pSA4pSAXG4gICBUaGUgc2l0ZXdpZGUgZm9ybSBtYWNyb3MgKHRlbXBsYXRlcy9mb3Jtcy8qKSBlbWl0IGJhcmUgZWxlbWVudHMgd2l0aFxuICAgY2xhc3M9XCJhdWZvcm1cIiBvbiB0aGUgPGZvcm0+IGFuZCBjbGFzcz1cImdlbmVyaWNfZWxlbWVudFwiIHdyYXBwZXJzLlxuICAgVGhlIGZvcm0gdGVtcGxhdGUgYWxzbyBpbmplY3RzIHRoZSBsZWdhY3kgL2Nzcy9mb3Jtcy5jc3MgQUZURVIgaW5kZXguY3NzLFxuICAgc28gd2Ugc2NvcGUgdW5kZXIgLnBhZ2UtbWFpbiB0byB3aW4gYnkgc3BlY2lmaWNpdHkuICovXG4ucGFnZS1tYWluIC5hdWZvcm0ge1xuXHRtYXgtd2lkdGg6IDY4MHB4O1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLmdlbmVyaWNfZWxlbWVudCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRjbGVhcjogbm9uZTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIC5oZWxwX21lc3NhZ2Uge1xuXHRtaW4taGVpZ2h0OiAwO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gbGFiZWwge1xuXHRkaXNwbGF5OiBibG9jaztcblx0ZmxvYXQ6IG5vbmU7XG5cdHdpZHRoOiBhdXRvO1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xuXHRtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXRleHRdLFxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9ZW1haWxdLFxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9dGVsXSxcbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXVybF0sXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdLFxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9bnVtYmVyXSB7XG5cdHdpZHRoOiAxMDAlO1xuXHRmbG9hdDogbm9uZTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdG91dGxpbmU6IG5vbmU7XG5cdHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1lbWFpbF06Zm9jdXMsXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT10ZWxdOmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gdGV4dGFyZWEge1xuXHR3aWR0aDogMTAwJTtcblx0ZmxvYXQ6IG5vbmU7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRyZXNpemU6IHZlcnRpY2FsO1xuXHRtaW4taGVpZ2h0OiAxMDBweDtcblx0b3V0bGluZTogbm9uZTtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIHRleHRhcmVhOmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gc2VsZWN0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdG91dGxpbmU6IG5vbmU7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBzZWxlY3Q6Zm9jdXMge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gaW5wdXRbdHlwZT1zdWJtaXRdIHtcblx0LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuXHRhcHBlYXJhbmNlOiBub25lO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTYpO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTUpIDAgMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5wYWdlLW1haW4gLmF1Zm9ybSBpbnB1dFt0eXBlPXN1Ym1pdF06aG92ZXIge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xufVxuXG4vKiBwaG9uZSBtYWNybzogdGhyZWUgc21hbGwgaW5wdXRzIGluIGEgcm93ICovXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0ZmxleC13cmFwOiB3cmFwO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIGxhYmVsIHtcblx0d2lkdGg6IDEwMCU7XG5cdGZsb2F0OiBub25lO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIHNlbGVjdCB7XG5cdGZsZXg6IDAgMCBhdXRvO1xufVxuXG4ucGFnZS1tYWluIC5hdWZvcm0gLnBob25lIGlucHV0LmZsdWlkIHtcblx0d2lkdGg6IGF1dG87XG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogNjBweDtcbn1cblxuLnBhZ2UtbWFpbiAuYXVmb3JtIC5waG9uZSBzcGFuIHtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBhdS10YWJsZXMuY3NzICDCtyAgRGF0YSB0YWJsZXNcbiAgIERlcGVuZHMgb246IGF1LXRva2Vucy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyogQmFuZC1hd2FyZTogY2VsbCB0ZXh0LCBib3JkZXJzIGFuZCBzdHJpcGVzIHJlYWQgdGhlIHNlY3Rpb24ncyAtLWJhbmQtKiBjb250ZXh0XG4gICB0b2tlbnMgKHNldCBvbiBkYXJrIGJhbmRzIGluIGxheW91dC5jc3MpLCBzbyBhIHRhYmxlIGRyb3BwZWQgb24gYSBkYXJrIGJhbmQg4oCUXG4gICBlLmcuIGluc2lkZSBhIGRhcmsgYWNjb3JkaW9uIOKAlCBhZGFwdHMgaW5zdGVhZCBvZiByZW5kZXJpbmcgZGFyay1vbi1kYXJrLiBGYWxsc1xuICAgYmFjayB0byB0aGUgbGlnaHQtdGFibGUgbG9vayBvZmYgYSBiYW5kLiAqL1xuLnRhYmxlLXdyYXAge1xuXHRvdmVyZmxvdy14OiBhdXRvO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xufVxuXG4udGFibGUge1xuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLyogaW5zaWRlIGEgd3JhcCwgdGhlIHdyYXAgb3ducyB0aGUgb3V0ZXIgc3BhY2luZyBhbmQgdGhlIHRhYmxlIHNpdHMgZmx1c2ggdG8gdGhlXG4gICByb3VuZGVkIGJvcmRlci4gV2l0aG91dCB0aGlzLCB0aGUgcGFnZS1jb250ZW50IHJoeXRobSdzIHRvcCBtYXJnaW4gb24gPHRhYmxlPlxuICAgb3BlbnMgYSBibGFuayBzdHJpcCBiZXR3ZWVuIHRoZSBib3JkZXIgYW5kIHRoZSBoZWFkZXIgcm93ICh0aGUgd3JhcCBpcyBpdHMgb3duXG4gICBibG9jay1mb3JtYXR0aW5nIGNvbnRleHQsIHNvIHRoZSBtYXJnaW4gY2FuJ3QgY29sbGFwc2UgYXdheSkuICovXG4udGFibGUtd3JhcCA+IC50YWJsZSB7XG5cdG1hcmdpbjogMDtcbn1cblxuLnRhYmxlIHRoZWFkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi50YWJsZSB0aCB7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAxcHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiBUd28tcm93IChncm91cGVkKSBoZWFkZXJzOiBhIGhlYWRpbmcgc3Bhbm5pbmcgc2V2ZXJhbCBjb2x1bW5zIGNlbnRyZXMgb3ZlclxuICAgdGhlbSB3aXRoIGEgZmFpbnQgcnVsZSBiZW5lYXRoLCBhbmQgYSBoZWFkaW5nIHNwYW5uaW5nIGJvdGggcm93cyBzaXRzIG9uIHRoZVxuICAgYm90dG9tIGxpbmUsIGxldmVsIHdpdGggdGhlIGNvbHVtbiBuYW1lcyAoZXhhbSBzY2hlZHVsZTogXCJJZiB5b3VyIGNsYXNzXG4gICBtZWV0cyBhdFwiIGJlc2lkZSBNb25kYXkuLlRodXJzZGF5IHVuZGVyIFwiWW91ciBleGFtaW5hdGlvbiBpcyBzY2hlZHVsZWQgZm9yXCIpLiAqL1xuLnRhYmxlIHRoZWFkIHRoW2NvbHNwYW5dIHtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTtcbn1cblxuLnRhYmxlIHRoZWFkIHRoW3Jvd3NwYW5dIHtcblx0dmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cblxuLnRhYmxlIHRkLFxuLnRhYmxlIHRib2R5IHRoIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS10ZXh0KSk7XG59XG5cbi50YWJsZSB0Ym9keSB0aCB7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtY2FyZC1iZywgdmFyKC0tYXUtY3JlYW0pKTtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLyogU3RyaXBlZCByb3dzICovXG4udGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtY2hpbGQoZXZlbikgdGQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1iYW5kLWNhcmQtYmcsIHJnYmEoMCwgNTEsIDEwMiwgMC4wMikpO1xufVxuXG4vKiBHcm91cGVkIHJvd3Mg4oCUIGJhbmQgYWx0ZXJuYXRlIHJvdyBHUk9VUFMsIG5vdCBhbHRlcm5hdGUgcm93cy5cbiAgIFVzZSBvbmUgPHRib2R5PiBwZXIgZ3JvdXAgKHRoYXQgaXMgd2hhdCB0Ym9keSBpcyBmb3IpIGFuZCBnaXZlIHRoZSB0YWJsZVxuICAgLnRhYmxlLS1ncm91cGVkOiBhbHRlcm5hdGUgZ3JvdXBzIGdldCBhIHRpbnRlZCBiYW5kIGFuZCBhIGhlYXZpZXIgcnVsZVxuICAgYWJvdmUgaXQuIFRoaXMgaXMgdGhlIHZhcmlhbnQgZm9yIHRhYmxlcyB3aG9zZSBmaXJzdCBjb2x1bW4gaXMgYSByb3dzcGFuXG4gICBjYXRlZ29yeSBsYWJlbCDigJQgcm93LWxldmVsIC50YWJsZS1zdHJpcGVkIHdvdWxkIHN0cmlwZSBzdHJhaWdodCBhY3Jvc3MgdGhvc2VcbiAgIGdyb3VwcyBhbmQgZmlnaHQgdGhlbS4gUmVwbGFjZXMgdGhlIGxlZ2FjeSBmbGF0LWdyZXkgYGJhY2tncm91bmQtY29sb3JgIGZpbGxzXG4gICB0aGF0IENLRWRpdG9yL1dvcmQgcGFzdGVzIHVzZWQgZm9yIHRoZSBzYW1lIHB1cnBvc2UuICovXG4udGFibGUtLWdyb3VwZWQgdGJvZHk6bnRoLW9mLXR5cGUob2RkKSB0ZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtY2FyZC1iZywgdmFyKC0tYXUtY3JlYW0pKTtcbn1cblxuLnRhYmxlLS1ncm91cGVkIHRib2R5ICsgdGJvZHkgdGQge1xuXHRib3JkZXItdG9wOiAycHggc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcbn1cblxuLyogUm93IGhvdmVyIOKAlCBsYXN0IHNvIGl0IHdpbnMgb3ZlciBib3RoIGJhbmRpbmcgdmFyaWFudHMgKGVxdWFsIHNwZWNpZmljaXR5KS5cbiAgIE9wdCBvdXQgd2l0aCAudGFibGUtLW5vaG92ZXIuIFJvdyBoaWdobGlnaHRpbmcgbWlzcmVhZHMgb24gdGFibGVzIHRoYXQgdXNlXG4gICByb3dzcGFuOiBob3ZlcmluZyBhIHJvdyBjYW5ub3QgbGlnaHQgdXAgdGhlIHNwYW5uaW5nIGNhdGVnb3J5L2NvbnRhY3QgY2VsbHNcbiAgICh0aG9zZSBiZWxvbmcgdG8gdGhlIGdyb3VwJ3MgRklSU1QgPHRyPiksIHNvIHRoZSBoaWdobGlnaHQgY29tZXMgb3V0IHJhZ2dlZFxuICAgYW5kIGhhbGYtYXBwbGllZC4gVGhlIDpub3QoKSBrZWVwcyB0aGUgYmFuZGluZyBpbnRhY3Qg4oCUIGl0IHNpbXBseSBuZXZlciBhcm1zXG4gICB0aGUgaG92ZXIg4oCUIHJhdGhlciB0aGFuIHRyeWluZyB0byByZXBhaW50IHRoZSBjZWxsIGJhY2sgdG8gaXRzIGJhbmQgY29sb3VyLiAqL1xuLnRhYmxlOm5vdCgudGFibGUtLW5vaG92ZXIpIHRib2R5IHRyOmhvdmVyIHRkIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1yYWlzZWQsIHZhcigtLWF1LWdvbGQtcGFsZSkpO1xufVxuXG4vKiBOby13cmFwIGNlbGxzIOKAlCBmb3IgZ3JpZHMgb2Ygc2hvcnQgdmFsdWVzICh0aW1lcywgY29kZXMsIGFtb3VudHMpIHRoYXRcbiAgIG90aGVyd2lzZSBicmVhayBhdCB0aGUgaHlwaGVuIGluIGEgbmFycm93IGNvbHVtbiAoXCIxMDozMC1cIiAvIFwiMTI6MzBcIikuIFRoZVxuICAgdGFibGUgZ3Jvd3MgaW5zdGVhZCBhbmQgc2Nyb2xscyBpbnNpZGUgaXRzIC50YWJsZS13cmFwOyBhdXRob3JlZCA8YnI+cyBzdGlsbFxuICAgYnJlYWsuIEZpcnN0IHVzZWQgb24gL2FjYWRlbWljcy9leGFtX3NjaGVkdWxlLmh0bWwuICovXG4udGFibGUtLW5vd3JhcCB0ZCB7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi8qIENvbXBhY3QgdmFyaWFudCAqL1xuLnRhYmxlLWNvbXBhY3QgdGgsXG4udGFibGUtY29tcGFjdCB0ZCB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xufVxuXG4vKiDilIDilIDilIAgUmVzcG9uc2l2ZTogdGFibGUg4oaSIGNhcmRzIG9uIG1vYmlsZSDilIDilIDilIAgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuXHQudGFibGUtcmVzcG9uc2l2ZSB0aGVhZCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXHQudGFibGUtcmVzcG9uc2l2ZSB0Ym9keSB0ciB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHR9XG5cdC50YWJsZS1yZXNwb25zaXZlIHRib2R5IHRkIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQvKiBMYWJlbCBmcm9tIGRhdGEtbGFiZWwgYXR0cmlidXRlICovXG5cdC50YWJsZS1yZXNwb25zaXZlIHRib2R5IHRkOjpiZWZvcmUge1xuXHRcdGNvbnRlbnQ6IGF0dHIoZGF0YS1sYWJlbCk7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRcdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdFx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGF1LWZlZWRiYWNrLmNzcyAgwrcgIENhbGxvdXRzICYgcHJvZ3Jlc3NcbiAgIERlcGVuZHMgb246IGF1LXRva2Vucy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIENhbGxvdXRzIC8gYWxlcnRzIOKUgOKUgOKUgCAqL1xuLmNhbGxvdXQge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi8qIFtoaWRkZW5dIGFsb25lIGNhbid0IGhpZGUgYSBkaXNwbGF5OmZsZXggYm94IOKAlCBtYWtlIHRoZSBhdHRyaWJ1dGUgd2luICovXG4uY2FsbG91dFtoaWRkZW5dIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuLmNhbGxvdXQtaW5mbyB7XG5cdGJhY2tncm91bmQ6ICNFQkYzRkE7XG5cdGNvbG9yOiB2YXIoLS1hdS1pbmZvKTtcblx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hdS1pbmZvKTtcbn1cblxuLmNhbGxvdXQtd2FybmluZyB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGNvbG9yOiAjOEE2QTFFO1xuXHRib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xufVxuXG4uY2FsbG91dC1zdWNjZXNzIHtcblx0YmFja2dyb3VuZDogI0VCRjVFRTtcblx0Y29sb3I6IHZhcigtLWF1LXN1Y2Nlc3MpO1xuXHRib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWF1LXN1Y2Nlc3MpO1xufVxuXG4uY2FsbG91dC1lcnJvciB7XG5cdGJhY2tncm91bmQ6ICNGQkVDRUM7XG5cdGNvbG9yOiB2YXIoLS1hdS1lcnJvcik7XG5cdGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYXUtZXJyb3IpO1xufVxuXG4vKiDilIDilIDilIAgQ1RBIGNhbGxvdXQg4oCUIGEgc2V0LWFwYXJ0IHBhbmVsOiBhIG1lc3NhZ2UgYmVzaWRlIGFuIGFjdGlvbiBidXR0b24uXG4gICBUaGUgY2xlYW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGQgPHRhYmxlPiBcImV4Y2VycHQgKyBidXR0b25cIiBwYXR0ZXJuOyB3cmFwc1xuICAgdG8gc3RhY2tlZCAodGV4dCBvdmVyIGJ1dHRvbikgb24gbmFycm93IHdpZHRocy4gVGV4dCBpcyBhIDxkaXY+LCBub3QgPHA+LCBzb1xuICAgaXQgZG9lc24ndCBpbmhlcml0IHRoZSAucGFnZS1tYWluIHBhcmFncmFwaCByaHl0aG0uIOKUgOKUgOKUgCAqL1xuLmN0YS1jYWxsb3V0IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNik7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtOCkgMDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtOCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG59XG5cbi5jdGEtY2FsbG91dC10ZXh0IHtcblx0ZmxleDogMSAxIDMyMHB4O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi5jdGEtY2FsbG91dCAuYnRuIHtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIOKUgOKUgOKUgCBzaWRlbm90ZSDigJQgYSBib3hlZCBhc2lkZSB0aGF0IGZsb2F0cyBiZXNpZGUgdGhlIGJvZHkgb24gd2lkZSBzY3JlZW5zXG4gICAoZS5nLiBcImhvdyB0byBzdWJtaXQgYSByZXF1ZXN0XCIpOyB0aGUgc3Vycm91bmRpbmcgdGV4dCB3cmFwcyBhcm91bmQgaXQuXG4gICBVbmZsb2F0cyB0byBhIGZ1bGwtd2lkdGggYmxvY2sgb24gbmFycm93IHNjcmVlbnMuIOKUgOKUgOKUgCAqL1xuLnNpZGVub3RlIHtcblx0ZmxvYXQ6IHJpZ2h0O1xuXHR3aWR0aDogMzAwcHg7XG5cdG1heC13aWR0aDogNDIlO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTEpIDAgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtOCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTYpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsaW5lLWhlaWdodDogMS42O1xufVxuXG4uc2lkZW5vdGUtdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LW1kKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRsaW5lLWhlaWdodDogMS4yNTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7XG5cdC5zaWRlbm90ZSB7XG5cdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0d2lkdGg6IGF1dG87XG5cdFx0bWF4LXdpZHRoOiBub25lO1xuXHRcdG1hcmdpbi1sZWZ0OiAwO1xuXHR9XG59XG4vKiDilIDilIDilIAgUHJvZ3Jlc3MgYmFyIOKUgOKUgOKUgCAqL1xuLnByb2dyZXNzLXdyYXAge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGhlaWdodDogMzZweDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym94LXNoYWRvdzogaW5zZXQgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7XG59XG5cbi5wcm9ncmVzcy1maWxsIHtcblx0aGVpZ2h0OiAxMDAlO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWF1LW5hdnkpIDAlLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSAxMDAlKTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcblx0cGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2UtNCk7XG5cdHRyYW5zaXRpb246IHdpZHRoIDJzIHZhcigtLWVhc2Utb3V0KTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4vKiBHb2xkIGFjY2VudCBlZGdlICovXG4ucHJvZ3Jlc3MtZmlsbDo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAwO1xuXHR0b3A6IDA7XG5cdGJvdHRvbTogMDtcblx0d2lkdGg6IDUwcHg7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjUpKTtcblx0Ym9yZGVyLXJhZGl1czogMCB2YXIoLS1yYWRpdXMtbGcpIHZhcigtLXJhZGl1cy1sZykgMDtcbn1cblxuLnByb2dyZXNzLWxhYmVsIHtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR6LWluZGV4OiAyO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHN0ZXBzLmNzcyAgwrcgIG51bWJlcmVkIHN0ZXAtYnktc3RlcCAoaG93LXRvIGd1aWRlcylcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3NcbiAgIEFuIG9yZGVyZWQgbGlzdCBvZiBwcm9jZWR1cmUgc3RlcHMg4oCUIGEgZ29sZCBudW1iZXIgYmFkZ2UgcGVyIHN0ZXAsXG4gICBqb2luZWQgYnkgYSB2ZXJ0aWNhbCBjb25uZWN0b3IgbGluZSwgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gYW5kIGFuXG4gICAob3B0aW9uYWxseSBmcmFtZWQpIHNjcmVlbnNob3QgaW5kZW50ZWQgaW4gdGhlIHN0ZXAgY29sdW1uLlxuXG4gICBBdXRob3JpbmcgKENLRWRpdG9yLXNhZmUg4oCUIG5vIGljb25zLCBubyBtYW51YWwgXCJTdGVwIE5cIiwgbm8gbnVtYmVycyk6XG4gICAgIDxvbCBjbGFzcz1cInN0ZXBzXCI+XG4gICAgICAgPGxpPlxuICAgICAgICAgPHA+RG8gdGhlIHRoaW5nLjwvcD4gICAgICAgICAgICAgICAgICAgICAobGVhZCBpbnN0cnVjdGlvbilcbiAgICAgICAgIDxmaWd1cmU+PGltZyBzcmM9XCLigKZcIiBhbHQ9XCLigKZcIj48L2ZpZ3VyZT4gIChvcHRpb25hbCBzY3JlZW5zaG90KVxuICAgICAgIDwvbGk+XG4gICAgICAg4oCmXG4gICAgIDwvb2w+XG4gICBUaGUgbnVtYmVycyBhbmQgY29ubmVjdG9yIGxpbmUgYXJlIGdlbmVyYXRlZCB3aXRoIENTUyBjb3VudGVycyArXG4gICA6OmJlZm9yZS86OmFmdGVyLCBzbyB0aGUgbWFya3VwIHN0YXlzIGEgY2xlYW4gb3JkZXJlZCBsaXN0LiBUaGUgbnVtYmVyXG4gICBiYWRnZSBJUyB0aGUgc3RlcCBsYWJlbCwgc28gbm8gXCJTdGVwIDFcIiB0ZXh0IGlzIG5lZWRlZC5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnN0ZXBzIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0Y291bnRlci1yZXNldDogc3RlcDtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS04KSAwO1xuXHRwYWRkaW5nOiAwO1xufVxuXG4uc3RlcHMgPiBsaSB7XG5cdGNvdW50ZXItaW5jcmVtZW50OiBzdGVwO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1hcmdpbjogMDsgLyogY2FuY2VsIHRoZSBnbG9iYWwgYGxpICsgbGlgIGdhcCAqL1xuXHRwYWRkaW5nLWxlZnQ6IDRyZW07IC8qIHRoZSBiYWRnZSBjb2x1bW4gKi9cblx0cGFkZGluZy1ib3R0b206IHZhcigtLXNwYWNlLTEwKTsgLyogcm9vbSBmb3IgdGhlIGNvbm5lY3RvciB0byB0aGUgbmV4dCBzdGVwICovXG59XG5cbi5zdGVwcyA+IGxpOmxhc3QtY2hpbGQge1xuXHRwYWRkaW5nLWJvdHRvbTogMDtcbn1cblxuLyogdGhlIG51bWJlciBiYWRnZSAqL1xuLnN0ZXBzID4gbGk6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IGNvdW50ZXIoc3RlcCk7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogMDtcblx0dG9wOiAwO1xuXHR3aWR0aDogMi41cmVtO1xuXHRoZWlnaHQ6IDIuNXJlbTtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0ei1pbmRleDogMTsgLyogc2l0IGFib3ZlIHRoZSBjb25uZWN0b3IgbGluZSAqL1xufVxuXG4vKiB0aGUgY29ubmVjdG9yIGxpbmUgbGlua2luZyBhIHN0ZXAgdG8gdGhlIG5leHQgKG5vdCBhZnRlciB0aGUgbGFzdCBzdGVwKSAqL1xuLnN0ZXBzID4gbGk6bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDEuMjVyZW07IC8qIGNlbnRyZWQgdW5kZXIgdGhlIDIuNXJlbSBiYWRnZSAqL1xuXHR0b3A6IDNyZW07IC8qIGp1c3QgYmVsb3cgdGhlIGJhZGdlICovXG5cdGJvdHRvbTogMDtcblx0d2lkdGg6IDJweDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTFweCk7XG59XG5cbi5zdGVwcyA+IGxpID4gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLyogdGhlIGxlYWQgaW5zdHJ1Y3Rpb24g4oCUIHNsaWdodGx5IGxhcmdlciwgYW5kIG51ZGdlZCBkb3duIH4wLjRyZW0gc28gaXRzIGZpcnN0XG4gICBsaW5lIHNpdHMgdmVydGljYWxseSBjZW50ZXJlZCBhZ2FpbnN0IHRoZSBudW1iZXIgYmFkZ2UgKHRoZSBudW1iZXIgZG9lcyB0aGVcbiAgIFwiU3RlcCBOXCIgbGFiZWxsaW5nLCBzbyBubyBleWVicm93IGlzIG5lZWRlZCkuICovXG4uc3RlcHMgPiBsaSA+IHA6Zmlyc3QtY2hpbGQge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRtYXJnaW46IDAuNHJlbSAwIDA7XG59XG5cbi8qIGFueSBmb2xsb3dpbmcgdGV4dCBpbiBhIHN0ZXAgKi9cbi5zdGVwcyBwIHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0yKSAwIDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi8qIGZyYW1lZCBzY3JlZW5zaG90OiBoYWlybGluZSBib3JkZXIsIHJvdW5kZWQgY29ybmVycywgc29mdCBsaWZ0OyBjYXBwZWQgc28gYVxuICAgbGFyZ2UgY2FwdHVyZSBkb2Vzbid0IGZpbGwgdGhlIHdob2xlIGNvbHVtbi4gTGVmdCBlZGdlIGxpbmVzIHVwIHdpdGggdGhlIHRleHQuICovXG4uc3RlcHMgZmlndXJlIHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS00KSAwIDA7XG59XG5cbi5zdGVwcyBmaWd1cmUgaW1nIHtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc20pO1xuXHRtYXgtd2lkdGg6IDQ0MHB4O1xuXHR3aWR0aDogMTAwJTtcbn1cblxuLnN0ZXBzIGZpZ2NhcHRpb24ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG59XG5cbi8qIHRpZ2h0ZW4gdGhlIGJhZGdlIGNvbHVtbiBvbiBzbWFsbCBzY3JlZW5zICovXG5AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcblx0LnN0ZXBzID4gbGkge1xuXHRcdHBhZGRpbmctbGVmdDogMy4yNXJlbTtcblx0fVxuXHQuc3RlcHMgPiBsaTo6YmVmb3JlIHtcblx0XHR3aWR0aDogMi4xcmVtO1xuXHRcdGhlaWdodDogMi4xcmVtO1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG5cdH1cblx0LnN0ZXBzID4gbGk6bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIge1xuXHRcdGxlZnQ6IDEuMDVyZW07XG5cdFx0dG9wOiAyLjVyZW07XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtZGlzY2xvc3VyZS5jc3MgIMK3ICBBY2NvcmRpb24gJiB0YWJiZWQgcGFuZWxzXG4gICBEZXBlbmRzIG9uOiBhdS10b2tlbnMuY3NzXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBBY2NvcmRpb24g4pSA4pSA4pSAICovXG4vKiBCYW5kLWF3YXJlOiByZWFkcyB0aGUgc2VjdGlvbidzIC0tYmFuZC0qIGNvbnRleHQgdG9rZW5zIChzZXQgb24gZGFyayBiYW5kcyBpblxuICAgbGF5b3V0LmNzcykgc28gdGhlIGFjY29yZGlvbiBhZGFwdHMgYXV0b21hdGljYWxseSDigJQgbGlnaHQgdHJpZ2dlcnMgKyBkYXJrIHRleHRcbiAgIG9uIGxpZ2h0IGJhbmRzLCB0cmFuc2x1Y2VudCB0cmlnZ2VycyArIGxpZ2h0IHRleHQgb24gZGFyayBiYW5kcyDigJQgd2l0aCBub1xuICAgdmFyaWFudCBjbGFzcyB0byByZW1lbWJlci4gRmFsbHMgYmFjayB0byB0aGUgbGlnaHQgbG9vayBvZmYgYSBiYW5kLiAqL1xuLmFjY29yZGlvbiB7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJhbmQtY2FyZC1ib3JkZXIsIHZhcigtLWF1LWdyYXktMjAwKSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5hY2NvcmRpb24taXRlbSB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHQvKiB3aGVuIGRlZXAtbGlua2VkIChqcy9hY2NvcmRpb24uanMgb3BlbnMgdGhlIHBhbmVsIGFuZCBzY3JvbGxzIGhlcmUpLCBjbGVhclxuXHQgICB0aGUgc3RpY2t5IGhlYWRlciBzbyB0aGUgcXVlc3Rpb24gaXNuJ3QgaGlkZGVuIHVuZGVybmVhdGggaXQuICovXG5cdHNjcm9sbC1tYXJnaW4tdG9wOiBjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tc3BhY2UtMykpO1xufVxuXG4uYWNjb3JkaW9uLWl0ZW06bGFzdC1jaGlsZCB7XG5cdGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5hY2NvcmRpb24taXRlbSA+IDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdG1hcmdpbjogMDtcblx0Zm9udC1zaXplOiBpbmhlcml0O1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXIge1xuXHR3aWR0aDogMTAwJTtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1jYXJkLWJnLCB2YXIoLS1hdS13aGl0ZSkpO1xuXHRib3JkZXI6IG5vbmU7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWZhc3QpO1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXI6aG92ZXIsXG4uYWNjb3JkaW9uLXRyaWdnZXJbYXJpYS1leHBhbmRlZD10cnVlXSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtcmFpc2VkLCB2YXIoLS1hdS1nb2xkLXBhbGUpKTtcbn1cblxuLyogYSBDTVMtYXV0aG9yZWQgdGl0bGUgaXMgc29tZXRpbWVzIHdyYXBwZWQgaW4gYSBoZWFkaW5nIChlLmcuIDxoMz4pLiBUaGUgZ2xvYmFsXG4gICBiYXNlLmNzcyBgaDEuLmg2IHsgY29sb3I6IG5hdnkgfWAgd291bGQgdGhlbiBwYWludCBpdCBkYXJrIOKAlCBpbnZpc2libGUgb24gYVxuICAgZGFyayBiYW5kLiBUaWUgYW55IGhlYWRpbmcgaW5zaWRlIHRoZSB0cmlnZ2VyIHRvIHRoZSB0cmlnZ2VyJ3Mgb3duIGJhbmQtYXdhcmVcbiAgIGNvbG91ciwgYW5kIHN0cmlwIHRoZSBoZWFkaW5nJ3MgcGFnZSBtYXJnaW5zIHNvIGl0IHNpdHMgaW4gdGhlIGJ1dHRvbi4gKi9cbi5hY2NvcmRpb24tdHJpZ2dlciA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRjb2xvcjogaW5oZXJpdDtcblx0bWFyZ2luOiAwO1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXIgYSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBTZWNvbmRhcnkgdGV4dCBvbiBhIHRyaWdnZXIg4oCUIGEgcXVhbGlmaWVyIHRoYXQgYmVsb25ncyB3aXRoIHRoZSB0aXRsZSByYXRoZXJcbiAgIHRoYW4gaW5zaWRlIHRoZSBwYW5lbCAoZS5nLiBcIjIwMjUtMjAyNiBWZXJpZmljYXRpb24gRm9ybXMgwrcgZm9yIGNsYXNzZXNcbiAgIGJldHdlZW4gQXVndXN0IDIwMjUgJiBKdWx5IDIwMjZcIikuIExlZ2FjeSBCb290c3RyYXAgcGFuZWxzIHB1dCB0aGlzIGluIGFcbiAgIDxzcGFuPiBiZXNpZGUgdGhlIHRvZ2dsZSBpbnNpZGUgLnBhbmVsLWhlYWRpbmc7IGl0IGhhcyBub3doZXJlIGVsc2UgdG8gZ29cbiAgIG9uY2UgdGhlIGhlYWRpbmcgYmVjb21lcyBhIGJ1dHRvbi4gTGlnaHRlciBhbmQgbG93ZXItY29udHJhc3QgdGhhbiB0aGVcbiAgIHRpdGxlLCBhbmQgaXQgd3JhcHMgcmF0aGVyIHRoYW4gc3F1ZWV6aW5nIHRoZSBpY29uLiAqL1xuLmFjY29yZGlvbi1ub3RlIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS1ncmF5LTYwMCkpO1xufVxuXG4vKiB0aGUgdGl0bGUgKyBub3RlIHN0YWNrIG9uIHRoZSBsZWZ0OyB0aGUgaWNvbiBzdGF5cyBwaW5uZWQgcmlnaHQgKi9cbi5hY2NvcmRpb24tdHJpZ2dlciA+IDpub3QoLmFjY29yZGlvbi1pY29uKSB7XG5cdGZsZXg6IDEgMSBhdXRvO1xufVxuXG4uYWNjb3JkaW9uLXRyaWdnZXIgLmFjY29yZGlvbi1pY29uIHtcblx0ZmxleDogMCAwIGF1dG87XG59XG5cbi8qIFBsdXMvbWludXMgaWNvbiB2aWEgcHNldWRvLWVsZW1lbnRzICovXG4uYWNjb3JkaW9uLWljb24ge1xuXHR3aWR0aDogMjBweDtcblx0aGVpZ2h0OiAyMHB4O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hY2NvcmRpb24taWNvbjo6YmVmb3JlLFxuLmFjY29yZGlvbi1pY29uOjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0YmFja2dyb3VuZDogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnkpKTtcblx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uYWNjb3JkaW9uLWljb246OmJlZm9yZSB7XG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDJweDtcblx0dG9wOiA1MCU7XG5cdGxlZnQ6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi5hY2NvcmRpb24taWNvbjo6YWZ0ZXIge1xuXHR3aWR0aDogMnB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdHRvcDogNTAlO1xuXHRsZWZ0OiA1MCU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vKiBSb3RhdGUgdmVydGljYWwgYmFyIHRvIGZvcm0gbWludXMgKi9cbi5hY2NvcmRpb24tdHJpZ2dlclthcmlhLWV4cGFuZGVkPXRydWVdIC5hY2NvcmRpb24taWNvbjo6YWZ0ZXIge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoOTBkZWcpO1xuXHRvcGFjaXR5OiAwO1xufVxuXG4vKiBBdXRvLWljb246IHRyaWdnZXJzIHdpdGhvdXQgYW4gZXhwbGljaXQgLmFjY29yZGlvbi1pY29uIHNwYW4gZ2V0ICsv4oiSIHZpYVxuICAgOjphZnRlciAoY29tbW9uIGluIGNvbnRlbnQgY29udmVydGVkIGZyb20gQm9vdHN0cmFwIHBhbmVscykuICovXG4uYWNjb3JkaW9uLXRyaWdnZXI6bm90KDpoYXMoLmFjY29yZGlvbi1pY29uKSk6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0ZmxleDogMCAwIDIwcHg7XG5cdHdpZHRoOiAyMHB4O1xuXHRoZWlnaHQ6IDIwcHg7XG5cdG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjZS0zKTtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSksIHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSkpIDUwJS8xNHB4IDJweCBuby1yZXBlYXQsIGxpbmVhci1ncmFkaWVudCh2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpLCB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpKSA1MCUvMnB4IDE0cHggbm8tcmVwZWF0O1xuXHR0cmFuc2l0aW9uOiB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5hY2NvcmRpb24tdHJpZ2dlclthcmlhLWV4cGFuZGVkPXRydWVdOm5vdCg6aGFzKC5hY2NvcmRpb24taWNvbikpOjphZnRlciB7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpLCB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpKSA1MCUvMTRweCAycHggbm8tcmVwZWF0O1xufVxuXG4vKiBBbmNob3IgcmVtbmFudHMgZnJvbSBCb290c3RyYXAgY29sbGFwc2UgdG9nZ2xlczogc3RyaXAgbGluayBzdHlsaW5nIHNvIHRoZVxuICAgdHJpZ2dlciB0ZXh0IGxvb2tzIGxpa2Ugbm9ybWFsIHRleHQsIG5vdCBhIGh5cGVybGluay4gKi9cbi5hY2NvcmRpb24tdHJpZ2dlciBhIHtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLyogRmxhZy9pY29uIGltYWdlcyBpbnNpZGUgdHJpZ2dlcnM6IG92ZXJyaWRlIGJhc2UuY3NzIGJsb2NrIGRpc3BsYXksXG4gICBzaXplIHRvIHRleHQsIGFuZCB2ZXJ0aWNhbGx5IGNlbnRlciB3aXRoIHRoZSBsYWJlbC4gKi9cbi5hY2NvcmRpb24tdHJpZ2dlciBpbWcge1xuXHRkaXNwbGF5OiBpbmxpbmU7XG5cdGhlaWdodDogMS4yZW07XG5cdHdpZHRoOiBhdXRvO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4uYWNjb3JkaW9uLXBhbmVsIHtcblx0bWF4LWhlaWdodDogMDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogbWF4LWhlaWdodCB2YXIoLS1kdXJhdGlvbi1zbG93KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi8qIHRoZSBvcGVuIGhlaWdodCBpcyBzZXQgaW5saW5lIGJ5IGpzL2FjY29yZGlvbi5qcyBmcm9tIHRoZSBwYW5lbCdzIHJlYWwgY29udGVudFxuICAgKG5vIGZpeGVkIGNhcCBoZXJlIOKAlCBhIGhhcmRjb2RlZCBtYXgtaGVpZ2h0IGNsaXBwZWQgbG9uZyBwYW5lbHMgYW5kIGhpZCB0aGVcbiAgIGJvZHkncyBib3R0b20gcGFkZGluZykuICovXG4uYWNjb3JkaW9uLWJvZHkge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS02KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG59XG5cbi8qIGxpbmtzIGluc2lkZSB0aGUgcGFuZWwgZm9sbG93IHRoZSBiYW5kOiBub3JtYWwgbGluayBibHVlIG9uIGxpZ2h0LCBnb2xkIG9uIGFcbiAgIGRhcmsgYmFuZCAod2hlcmUgbmF2eS1ibHVlIHdvdWxkIHZhbmlzaCkuIEhvdmVyIHN0YXlzIGdvbGQgb24gYm90aC4gKi9cbi5hY2NvcmRpb24tYm9keSBhIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG59XG5cbi8qIGhlYWRpbmdzIGF1dGhvcmVkIGluIHRoZSByaWNoLXRleHQgcGFuZWwgZm9sbG93IHRoZSBiYW5kIGhlYWRpbmcgY29sb3VyIHRvbyxcbiAgIHNvIGFuIDxoMz4vPHN0cm9uZz4gYmxvY2sgc3RheXMgbGVnaWJsZSBvbiBhIGRhcmsgYmFuZC4gKi9cbi5hY2NvcmRpb24tYm9keSA6aXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNikge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1oZWFkaW5nLCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi8qIEZhbGxiYWNrOiBwYW5lbHMgd2hvc2UgY29udGVudCBzaXRzIGluIGEgcGxhaW4gPGRpdj4gKG5vIC5hY2NvcmRpb24tYm9keSBjbGFzcylcbiAgIHN0aWxsIGdldCBib2R5IHBhZGRpbmcgYW5kIHR5cG9ncmFwaHkuIENvbW1vbiBpbiBCb290c3RyYXAtY29udmVydGVkIHBhbmVscy4gKi9cbi5hY2NvcmRpb24tcGFuZWwgPiBkaXY6bm90KFtjbGFzc10pIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNik7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xuXHRsaW5lLWhlaWdodDogMS43O1xufVxuXG4uYWNjb3JkaW9uLXBhbmVsID4gZGl2Om5vdChbY2xhc3NdKSBhIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG59XG5cbi5hY2NvcmRpb24tcGFuZWwgPiBkaXY6bm90KFtjbGFzc10pIDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLyog4pSA4pSA4pSAIFRhYmJlZCBwYW5lbHMg4pSA4pSA4pSAICovXG4vKiBCb3hlZCBUYWJzICovXG4udGFicyB7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnRhYi1saXN0IHtcblx0ZGlzcGxheTogZmxleDtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRvdmVyZmxvdy14OiBhdXRvO1xufVxuXG4udGFiLWJ0biB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGJvcmRlcjogbm9uZTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udGFiLWJ0bjpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnRhYi1idG4uYWN0aXZlIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi8qIEdvbGQgdW5kZXJsaW5lIG9uIGFjdGl2ZSB0YWIgKi9cbi50YWItYnRuLmFjdGl2ZTo6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJvdHRvbTogMDtcblx0bGVmdDogMDtcblx0cmlnaHQ6IDA7XG5cdGhlaWdodDogM3B4O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnRhYi1wYW5lbCB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4udGFiLXBhbmVsLmFjdGl2ZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiDilIDilIDilIAgUGlsbC1TdHlsZSBGaWx0ZXIgVGFicyDilIDilIDilIAgKi9cbi50YWItbGlzdC1waWxscyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi50YWItcGlsbCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjVweDtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAycHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4udGFiLXBpbGw6aG92ZXIge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi50YWItcGlsbC5hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogZGlhbG9nLmNzcyDCtyBuYXRpdmUgPGRpYWxvZz4gbW9kYWxcbiAgIFRyaWdnZXI6IFtkYXRhLWRpYWxvZy1vcGVuPVwiPGlkPlwiXSBvcGVucyA8ZGlhbG9nIGlkPVwiPGlkPlwiPlxuICAgSlM6IGpzL2RpYWxvZy5qcyAoc2VsZi1pbml0cyB2aWEgaW5pdC5qcykgKi9cbi5kaWFsb2cge1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogYXV0bztcblx0bWF4LXdpZHRoOiBtaW4oNjQwcHgsIDEwMHZ3IC0gdmFyKC0tc3BhY2UtOCkpO1xuXHRtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0tc3BhY2UtMTApKTtcblx0d2lkdGg6IDEwMCU7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaWFsb2dbb3Blbl0ge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4uZGlhbG9nOjpiYWNrZHJvcCB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMzEsIDYzLCAwLjU1KTtcblx0YmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XG5cdC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XG59XG5cbi5kaWFsb2ctaGVhZGVyIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTQpO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uZGlhbG9nIC5kaWFsb2ctdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW46IDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjM7XG59XG5cbi5kaWFsb2ctY2xvc2Uge1xuXHRmbGV4LXNocmluazogMDtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGZvbnQtc2l6ZTogMS4yNXJlbTtcblx0bGluZS1oZWlnaHQ6IDE7XG5cdGNvbG9yOiB2YXIoLS1hdS1ncmF5LTQwMCk7XG5cdHBhZGRpbmc6IDA7XG5cdHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4uZGlhbG9nLWNsb3NlOmZvY3VzIHtcblx0b3V0bGluZTogbm9uZTtcbn1cblxuLmRpYWxvZy1jbG9zZTpmb2N1cy12aXNpYmxlIHtcblx0b3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRvdXRsaW5lLW9mZnNldDogMnB4O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pO1xufVxuXG4uZGlhbG9nLWNsb3NlOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uZGlhbG9nLWJvZHkge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KTtcblx0b3ZlcmZsb3cteTogYXV0bztcblx0b3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpO1xuXHRsaW5lLWhlaWdodDogMS42O1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG59XG5cbi5kaWFsb2ctYm9keSA+IDpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi5kaWFsb2ctYm9keSBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uZGlhbG9nLWJvZHkgaW1nIHtcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IGF1dG87XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uZGlhbG9nLWltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC5kaWFsb2dbb3Blbl0ge1xuXHRcdG1heC13aWR0aDogMTAwdnc7XG5cdFx0bWF4LWhlaWdodDogMTAwdmg7XG5cdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRtYXJnaW46IDA7XG5cdH1cblx0LmRpYWxvZy1oZWFkZXIge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC5kaWFsb2ctYm9keSB7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCk7XG5cdH1cbn1cbi8qIGNsaWNrYWJsZSB0cmlnZ2VycyAqL1xuW2RhdGEtZGlhbG9nLW9wZW5dIHtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4uY2FyZFtkYXRhLWRpYWxvZy1vcGVuXTpob3ZlciB7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZCk7XG5cdHRyYW5zaXRpb246IGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgYXUtbWVkaWEuY3NzICDCtyAgQ2Fyb3VzZWwsIGdhbGxlcnkgJiB2aWRlb1xuICAgRGVwZW5kcyBvbjogYXUtdG9rZW5zLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIDilIAgQ2Fyb3VzZWwg4pSA4pSA4pSAICovXG4uY2Fyb3VzZWwge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdC8qIHNldCAtLWNhcm91c2VsLXJhdGlvIG9uIHRoZSBlbGVtZW50IGZvciBwaG90b3Mgb2YgYW5vdGhlciBzaGFwZSAoZS5nLlxuXHQgICBzdHlsZT1cIi0tY2Fyb3VzZWwtcmF0aW86IDcyMCAvIDMyNVwiKTsgdGhlIHBob25lIGNhcHRpb24gbGF5b3V0IGJlbG93IHJlYWRzIGl0ICovXG5cdGFzcGVjdC1yYXRpbzogdmFyKC0tY2Fyb3VzZWwtcmF0aW8sIDMvMik7XG59XG5cbi5jYXJvdXNlbC10cmFjayB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGhlaWdodDogMTAwJTtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uY2Fyb3VzZWwtc2xpZGUge1xuXHRmbGV4OiAwIDAgMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5jYXJvdXNlbC1zbGlkZSBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRkaXNwbGF5OiBibG9jaztcblx0b2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi8qIFNpemUgdmFyaWFudHMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYXNwZWN0IHJhdGlvICovXG4uY2Fyb3VzZWwtY29tcGFjdCB7XG5cdGFzcGVjdC1yYXRpbzogdW5zZXQ7XG59XG5cbi5jYXJvdXNlbC1jb21wYWN0IC5jYXJvdXNlbC1zbGlkZSBpbWcge1xuXHRoZWlnaHQ6IDMyMHB4O1xufVxuXG4uY2Fyb3VzZWwtaGVybyB7XG5cdGFzcGVjdC1yYXRpbzogdW5zZXQ7XG5cdGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5jYXJvdXNlbC1oZXJvIC5jYXJvdXNlbC1zbGlkZSBpbWcge1xuXHRoZWlnaHQ6IDQ4MHB4O1xufVxuXG4vKiDilIDilIAgUGVlayB2YXJpYW50IOKUgOKUgFxuICAgRmlsbS1zdHJpcCBjYXJvdXNlbDogYWxsIGltYWdlcyBzY2FsZWQgdG8gdGhlIHNhbWUgaGVpZ2h0LCBlYWNoIHNsaWRlXG4gICBpcyBhcyB3aWRlIGFzIGl0cyBpbWFnZSdzIG5hdHVyYWwgcHJvcG9ydGlvbnMuIENsaWNraW5nIGNlbnRlcnMgdGhlIG5leHRcbiAgIGltYWdlOyBuYXJyb3dlciBpbWFnZXMgc2hvdyBtb3JlIG9mIHRoZSBuZWlnaGJvcmluZyBzbGlkZXMgb24gZWFjaCBzaWRlLlxuICAgVGhlIC5jYXJvdXNlbC0tcGVlayBoYXMgb3ZlcmZsb3c6dmlzaWJsZTsgLmNhcm91c2VsLXBlZWstd3JhcCBjbGlwcyBpdC4gKi9cbi5jYXJvdXNlbC1wZWVrLXdyYXAge1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uY2Fyb3VzZWwtLXBlZWsge1xuXHRvdmVyZmxvdzogdmlzaWJsZTtcblx0bWF4LXdpZHRoOiA4NTBweDtcblx0bWFyZ2luOiAwIGF1dG87XG5cdGFzcGVjdC1yYXRpbzogMi8xOyAvKiBwYW5vcmFtaWM7IG92ZXJyaWRlcyAzLzIgZnJvbSAuY2Fyb3VzZWwgKi9cbn1cblxuLmNhcm91c2VsLS1wZWVrIC5jYXJvdXNlbC1zbGlkZSB7XG5cdGZsZXg6IDAgMCBhdXRvOyAvKiBuYXR1cmFsIHdpZHRoIHBlciBpbWFnZSwgbm90IDEwMCUgKi9cblx0aGVpZ2h0OiAxMDAlO1xufVxuXG4uY2Fyb3VzZWwtLXBlZWsgLmNhcm91c2VsLXNsaWRlIGltZyB7XG5cdGhlaWdodDogMTAwJTtcblx0d2lkdGg6IGF1dG87XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRvYmplY3QtZml0OiBpbml0aWFsO1xufVxuXG4vKiBDYXB0aW9uIG92ZXJsYXkgKi9cbi5jYXJvdXNlbC1jYXB0aW9uIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRib3R0b206IDA7XG5cdGxlZnQ6IDA7XG5cdHJpZ2h0OiAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS01KTtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCByZ2JhKDAsIDAsIDAsIDAuNykpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4vKiBQcmV2L05leHQgYnV0dG9ucyAqL1xuLmNhcm91c2VsLWJ0biB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiA1MCU7XG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0d2lkdGg6IDQwcHg7XG5cdGhlaWdodDogNDBweDtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG5cdGJvcmRlcjogbm9uZTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcblx0ei1pbmRleDogMjtcblx0Zm9udC1zaXplOiAxOHB4O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5jYXJvdXNlbC1wcmV2IHtcblx0bGVmdDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5jYXJvdXNlbC1uZXh0IHtcblx0cmlnaHQ6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4vKiBEb3QgaW5kaWNhdG9ycyAqL1xuLmNhcm91c2VsLWRvdHMge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG5cdGxlZnQ6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRnYXA6IDhweDtcblx0ei1pbmRleDogMjtcbn1cblxuLmNhcm91c2VsLWRvdCB7XG5cdHdpZHRoOiAxMHB4O1xuXHRoZWlnaHQ6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuXHRib3JkZXI6IG5vbmU7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmNhcm91c2VsLWRvdC5hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcbn1cblxuLyog4pSA4pSAIENhcHRpb25zIG9uIHBob25lcyDilIDilIBcbiAgIFRoZSBjYXB0aW9uIGlzIGFuIG92ZXJsYXksIHdoaWNoIHN1aXRzIGEgbGluZSBvbiBhIHRhbGwgcGhvdG87IG9uIGEgcGhvbmUgYVxuICAgc2VudGVuY2Ugb3IgdHdvIGNvdmVycyBtb3N0IG9mIHRoZSBwaWN0dXJlLCBmYWNlcyBpbmNsdWRlZFxuICAgKC9zZXJ2aWNlcy9yZXNlYXJjaC9jb21tdW5pdHllbmdhZ2VtZW50LykuIFVwIHRvIDY0MHB4IGEgY2Fyb3VzZWwgd2l0aFxuICAgY2FwdGlvbnMgcHV0cyBlYWNoIGNhcHRpb24gQkVMT1cgaXRzIHBob3RvIG9uIGEgbmF2eSBwYW5lbDogdGhlIHBob3RvIGtlZXBzXG4gICB0aGUgY2Fyb3VzZWwncyByYXRpbywgdGhlIHNsaWRlcyBzdHJldGNoIHRvIHRoZSBsb25nZXN0IGNhcHRpb24sIGFuZCB0aGVcbiAgIGFycm93cyBhbmQgZG90cyBzdGF5IG9uIHRoZSBwaG90byAoY29udGFpbmVyIHVuaXRzOiAxMDBjcWkgaXMgdGhlIGNhcm91c2VsJ3NcbiAgIHdpZHRoLCBzbyB3aWR0aCAvIHJhdGlvIGlzIHRoZSBwaG90bydzIGhlaWdodCkuIFBlZWsgY2Fyb3VzZWxzIGFyZSBsZWZ0IGFsb25lLiAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7XG5cdC5jYXJvdXNlbDpub3QoLmNhcm91c2VsLS1wZWVrKTpoYXMoLmNhcm91c2VsLWNhcHRpb24pIHtcblx0XHRhc3BlY3QtcmF0aW86IGF1dG87XG5cdFx0Y29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplO1xuXHRcdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdH1cblx0LmNhcm91c2VsOm5vdCguY2Fyb3VzZWwtLXBlZWspOmhhcyguY2Fyb3VzZWwtY2FwdGlvbikgLmNhcm91c2VsLXRyYWNrLFxuXHQuY2Fyb3VzZWw6bm90KC5jYXJvdXNlbC0tcGVlayk6aGFzKC5jYXJvdXNlbC1jYXB0aW9uKSAuY2Fyb3VzZWwtc2xpZGUge1xuXHRcdGhlaWdodDogYXV0bztcblx0fVxuXHQuY2Fyb3VzZWw6bm90KC5jYXJvdXNlbC0tcGVlayk6aGFzKC5jYXJvdXNlbC1jYXB0aW9uKSAuY2Fyb3VzZWwtc2xpZGUge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0fVxuXHQuY2Fyb3VzZWw6bm90KC5jYXJvdXNlbC0tcGVlayk6aGFzKC5jYXJvdXNlbC1jYXB0aW9uKSAuY2Fyb3VzZWwtc2xpZGUgaW1nIHtcblx0XHRoZWlnaHQ6IGF1dG87XG5cdFx0YXNwZWN0LXJhdGlvOiB2YXIoLS1jYXJvdXNlbC1yYXRpbywgMy8yKTtcblx0fVxuXHQuY2Fyb3VzZWw6bm90KC5jYXJvdXNlbC0tcGVlayk6aGFzKC5jYXJvdXNlbC1jYXB0aW9uKSAuY2Fyb3VzZWwtY2FwdGlvbiB7XG5cdFx0cG9zaXRpb246IHN0YXRpYztcblx0XHRmbGV4OiAxO1xuXHRcdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7XG5cdH1cblx0LmNhcm91c2VsOm5vdCguY2Fyb3VzZWwtLXBlZWspOmhhcyguY2Fyb3VzZWwtY2FwdGlvbikgLmNhcm91c2VsLWJ0biB7XG5cdFx0dG9wOiBjYWxjKDEwMGNxaSAvICh2YXIoLS1jYXJvdXNlbC1yYXRpbywgMy8yKSkgLyAyKTtcblx0fVxuXHQuY2Fyb3VzZWw6bm90KC5jYXJvdXNlbC0tcGVlayk6aGFzKC5jYXJvdXNlbC1jYXB0aW9uKSAuY2Fyb3VzZWwtZG90cyB7XG5cdFx0Ym90dG9tOiBhdXRvO1xuXHRcdHRvcDogY2FsYygxMDBjcWkgLyAodmFyKC0tY2Fyb3VzZWwtcmF0aW8sIDMvMikpIC0gdmFyKC0tc3BhY2UtMykgLSAxMnB4KTtcblx0fVxufVxuLyog4pSA4pSA4pSAIFBob3RvIGdhbGxlcnkgKyBsaWdodGJveCDilIDilIDilIAgKi9cbi5nYWxsZXJ5IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjAwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uZ2FsbGVyeS1pdGVtIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGFzcGVjdC1yYXRpbzogNC8zO1xufVxuXG4uZ2FsbGVyeS1pdGVtIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbi5nYWxsZXJ5LWl0ZW06aG92ZXIgaW1nIHtcblx0dHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcbn1cblxuLyogR2FsbGVyeSBvcmllbnRhdGlvbiB2YXJpYW50cyDigJQgYWRkIHRoZSBtb2RpZmllciB0byB0aGUgLmdhbGxlcnkgZWxlbWVudCBpbiBDS0VkaXRvciBzb3VyY2U6XG4gICAuZ2FsbGVyeS0tcG9ydHJhaXQgIOKGkiB0YWxsL3Bob25lIHNob3RzIChoZWFkc2hvdHMsIHBvcnRyYWl0cylcbiAgIC5nYWxsZXJ5LS1zcXVhcmUgICAg4oaSIHNxdWFyZSB0aHVtYm5haWxzXG4gICAuZ2FsbGVyeS0tbmF0dXJhbCAgIOKGkiBlYWNoIGltYWdlIHNob3dzIGF0IGl0cyBvd24gbmF0dXJhbCBwcm9wb3J0aW9ucyAobWFzb25yeSBjb2x1bW5zKSAqL1xuLmdhbGxlcnktLXBvcnRyYWl0IC5nYWxsZXJ5LWl0ZW0ge1xuXHRhc3BlY3QtcmF0aW86IDMvNDtcbn1cblxuLmdhbGxlcnktLXNxdWFyZSAuZ2FsbGVyeS1pdGVtIHtcblx0YXNwZWN0LXJhdGlvOiAxO1xufVxuXG4uZ2FsbGVyeS0tbmF0dXJhbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRjb2x1bW5zOiAzO1xuXHRjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmdhbGxlcnktLW5hdHVyYWwgLmdhbGxlcnktaXRlbSB7XG5cdGFzcGVjdC1yYXRpbzogdW5zZXQ7XG5cdGJyZWFrLWluc2lkZTogYXZvaWQ7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uZ2FsbGVyeS0tbmF0dXJhbCAuZ2FsbGVyeS1pdGVtIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IGF1dG87XG5cdG9iamVjdC1maXQ6IHVuc2V0O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0LmdhbGxlcnktLW5hdHVyYWwge1xuXHRcdGNvbHVtbnM6IDI7XG5cdH1cbn1cbi8qIExpZ2h0Ym94IG92ZXJsYXkgKi9cbi5saWdodGJveCB7XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0aW5zZXQ6IDA7XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMTAsIDIwLCAwLjkyKTtcblx0ei1pbmRleDogMTEwMDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdG9wYWNpdHk6IDA7XG5cdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogYWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpO1xufVxuXG4ubGlnaHRib3gub3BlbiB7XG5cdG9wYWNpdHk6IDE7XG5cdHZpc2liaWxpdHk6IHZpc2libGU7XG59XG5cbi5saWdodGJveC1pbWcge1xuXHRtYXgtd2lkdGg6IDkwdnc7XG5cdG1heC1oZWlnaHQ6IDg1dmg7XG5cdG9iamVjdC1maXQ6IGNvbnRhaW47XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cblxuLmxpZ2h0Ym94LWNsb3NlLFxuLmxpZ2h0Ym94LW5hdiB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG5cdGJvcmRlcjogbm9uZTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR3aWR0aDogNDRweDtcblx0aGVpZ2h0OiA0NHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmxpZ2h0Ym94LWNsb3NlIHtcblx0dG9wOiB2YXIoLS1zcGFjZS01KTtcblx0cmlnaHQ6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4ubGlnaHRib3gtcHJldiB7XG5cdHRvcDogNTAlO1xuXHRsZWZ0OiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLmxpZ2h0Ym94LW5leHQge1xuXHR0b3A6IDUwJTtcblx0cmlnaHQ6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4vKiDilIDilIDilIAgVmlkZW8gZW1iZWRzIOKUgOKUgOKUgCAqL1xuLnZpZGVvIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRiYWNrZ3JvdW5kOiAjMDAwO1xuXHRhbGlnbi1zZWxmOiBzdGFydDtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xufVxuXG4udmlkZW8gaWZyYW1lLFxuLnZpZGVvIHZpZGVvIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGJvcmRlcjogbm9uZTtcbn1cblxuLyogdGV4dCBiZXNpZGUgYSB2aWRlbyAodmlkZW8udHQgY29udGVudF9wb3NpdGlvbiBsZWZ0L3JpZ2h0KSDigJQgY2VudHJlZCBvbiBpdCAqL1xuLnZpZGVvLXNpZGUge1xuXHRhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi52aWRlby1zaWRlIDppcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KSB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLyogMTY6OSByZXNwb25zaXZlIHdyYXBwZXIgKi9cbi52aWRlby1yZXNwb25zaXZlIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG59XG5cbi52aWRlby1yZXNwb25zaXZlIGlmcmFtZSxcbi52aWRlby1yZXNwb25zaXZlIHZpZGVvIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGJvcmRlcjogbm9uZTtcbn1cblxuLyogUG9zdGVyIHRodW1ibmFpbCArIHBsYXkgYnV0dG9uICovXG4udmlkZW8tcG9zdGVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi52aWRlby1wb3N0ZXIgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzk7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4udmlkZW8tcGxheSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiA1MCU7XG5cdGxlZnQ6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG5cdHdpZHRoOiA3MnB4O1xuXHRoZWlnaHQ6IDcycHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmdiYSgwLCA1MSwgMTAyLCAwLjg1KTtcblx0Ym9yZGVyOiAzcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyogQ1NTIHRyaWFuZ2xlIHBsYXkgaWNvbiAqL1xuLnZpZGVvLXBsYXk6OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0Ym9yZGVyLXdpZHRoOiAxMnB4IDAgMTJweCAyMnB4O1xuXHRib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWF1LXdoaXRlKTtcblx0bWFyZ2luLWxlZnQ6IDRweDtcbn1cblxuLnZpZGVvLXBvc3Rlcjpob3ZlciAudmlkZW8tcGxheSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxLjEpO1xufVxuXG4udmlkZW8tY2FwdGlvbiB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHRlYW0uY3NzICDCtyAgc3RhZmYgLyBcIm1lZXQgdGhlIHRlYW1cIiBncmlkICAoZGVwdHN0YWZmaW5kZXguZHQpXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzXG4gICBBIHJlc3BvbnNpdmUgZ3JpZCBvZiBwZW9wbGUg4oCUIHBvcnRyYWl0IHBob3RvLCBuYW1lLCByb2xlLCBjb250YWN0LlxuICAgUGhvdG9zIGxlYWQgKHRoZXkgZ2V0IHRoZSBzcGFjZSk7IHRoZSBvbGQgUGhvdG8vTmFtZS9Db250YWN0IHRhYmxlIGlzIGdvbmUuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi50ZWFtIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjAwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEwKSB2YXIoLS1zcGFjZS02KTtcbn1cblxuLyogaW50cm8gY29udGVudCBhYm92ZSB0aGUgZ3JpZCAodGhlIGluZGV4IHBhZ2UncyBhYm92ZV9jb250ZW50KSDigJQgc3BhY2UgaXQgb2ZmXG4gICB0aGUgcGhvdG9zIGluc3RlYWQgb2YgcmVseWluZyBvbiBhdXRob3JlZCBibGFuayBwYXJhZ3JhcGhzLiAqL1xuLnBhZ2UtbWFpbiA+IDpub3QoaDEpICsgLnRlYW0ge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLnRlYW0tcGhvdG8ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRhc3BlY3QtcmF0aW86IDMvNDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYXUtbmF2eSksIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4vKiBubyBwaG90byAob3IgYSBicm9rZW4gb25lKTogaW5pdGlhbHMgb24gb25lIG9mIGVpZ2h0IGJyYW5kIGdyYWRpZW50cyAoZnJvbSB0aGUgZGVzaWduIGd1aWRlJ3MgaW1hZ2VcbiAgIHBsYWNlaG9sZGVycyksIHBpY2tlZCBmcm9tIHRoZSBwZXJzb24ncyBpbml0aWFscyBhbmQgbmFtZSBsZW5ndGhzLlxuICAgVGhlIHBob3RvIHNpdHMgb24gdG9wIG9mIHRoZSBpbml0aWFscywgc28gdGhleSBvbmx5IHNob3cgd2hlbiB0aGVyZSBpcyBubyBwaG90by4gKi9cbi50ZWFtLXBob3RvLS1nMSB7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNTBkZWcsIHZhcigtLWF1LW5hdnktbGlnaHQpLCB2YXIoLS1hdS1nb2xkKSk7XG59XG5cbi50ZWFtLXBob3RvLS1nMiB7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMjBkZWcsIHZhcigtLWF1LW5hdnktZGVlcCksIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLnRlYW0tcGhvdG8tLWczIHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE2NWRlZywgdmFyKC0tYXUtbmF2eSksIHZhcigtLWF1LWdvbGQtbGlnaHQpKTtcbn1cblxuLnRlYW0tcGhvdG8tLWc0IHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDIxMGRlZywgdmFyKC0tYXUtZ29sZCksIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLnRlYW0tcGhvdG8tLWc1IHtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCB2YXIoLS1hdS1uYXZ5LWRlZXApLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG59XG5cbi50ZWFtLXBob3RvLS1nNiB7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgyMGRlZywgdmFyKC0tYXUtbmF2eS1saWdodCksIHZhcigtLWF1LWdvbGQtbGlnaHQpKTtcbn1cblxuLnRlYW0tcGhvdG8tLWc3IHtcblx0YmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMTUlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC41NSksIHRyYW5zcGFyZW50IDU1JSksIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHZhcigtLWF1LW5hdnkpLCB2YXIoLS1hdS1uYXZ5LWRlZXApKTtcbn1cblxuLyogZmxvd2luZyBtZXNoIGdyYWRpZW50IChqcy90ZWFtLmpzKTogb25lIHBhdHRlcm4gZmxvd3MgYWNyb3NzIGV2ZXJ5IHBob3RvIHRpbGUgb2YgYSBncmlkOyB0aGUgc2NyaXB0XG4gICBzaGlmdHMgZWFjaCB0aWxlJ3MgYmFja2dyb3VuZCBieSBpdHMgb2Zmc2V0IGluIHRoZSBncmlkLCBzbyB0aGUgdGlsZXMgcmVhZCBhcyB3aW5kb3dzIG9udG8gb25lIHN1cmZhY2UuXG4gICBUaGUgcGF0dGVybiBpcyBhIENvbG9yZmZ5LXN0eWxlIFwibWVzaCBncmFkaWVudFwiOiA4IGJyb2FkIGJyYW5kLWNvbG91ciBwb2ludHMgKG5hdnksIGxpZ2h0L2RlZXAgbmF2eSxcbiAgIGdvbGQsIGxpZ2h0IGdvbGQpIHdpdGggdmVyeSB3aWRlIGZhbGxvZmYsIGluIGEgMTMwMHB4IDE1MDBweCB1bml0IHRoYXQgcmVwZWF0cy4gRXZlcnkgcG9pbnQgdGhhdFxuICAgY3Jvc3NlcyB0aGUgdW5pdCdzIGVkZ2UgaXMgY29waWVkIHRvIHRoZSBvcHBvc2l0ZSBzaWRlLCBzbyB0aGUgcmVwZWF0IGhhcyBubyBzZWFtcy4gKi9cbi50ZWFtLS1mbG93IC50ZWFtLXBob3RvIHtcblx0YmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KDQ0MnB4IDUxMHB4IGF0IC0xMDRweCAtNDVweCwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuOTUpIDAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC41NSkgMzUlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC4xNSkgNzAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg0NDJweCA1MTBweCBhdCAtMTA0cHggMTQ1NXB4LCByZ2JhKDIzMiwgMTg0LCA3NSwgMC45NSkgMCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSAzNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE1KSA3MCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDQ0MnB4IDUxMHB4IGF0IDExOTZweCAtNDVweCwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuOTUpIDAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC41NSkgMzUlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC4xNSkgNzAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg0NDJweCA1MTBweCBhdCAxMTk2cHggMTQ1NXB4LCByZ2JhKDIzMiwgMTg0LCA3NSwgMC45NSkgMCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSAzNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE1KSA3MCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU0NnB4IDYzMHB4IGF0IDI2MHB4IC00MjBweCwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuOTUpIDAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC41NSkgMzUlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC4xNSkgNzAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1NDZweCA2MzBweCBhdCAyNjBweCAxMDgwcHgsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjk1KSAwJSwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuNTUpIDM1JSwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuMTUpIDcwJSwgcmdiYSgxOTgsIDE0OSwgNDMsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTQ2cHggNjMwcHggYXQgMTU2MHB4IC00MjBweCwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuOTUpIDAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC41NSkgMzUlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC4xNSkgNzAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1NDZweCA2MzBweCBhdCAxNTYwcHggMTA4MHB4LCByZ2JhKDE5OCwgMTQ5LCA0MywgMC45NSkgMCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjU1KSAzNSUsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjE1KSA3MCUsIHJnYmEoMTk4LCAxNDksIDQzLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDUyMHB4IDYwMHB4IGF0IC0xODJweCA4NjlweCwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuOTUpIDAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC41NSkgMzUlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMC4xNSkgNzAlLCByZ2JhKDE5OCwgMTQ5LCA0MywgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1MjBweCA2MDBweCBhdCAxMTE4cHggODY5cHgsIHJnYmEoMTk4LCAxNDksIDQzLCAwLjk1KSAwJSwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuNTUpIDM1JSwgcmdiYSgxOTgsIDE0OSwgNDMsIDAuMTUpIDcwJSwgcmdiYSgxOTgsIDE0OSwgNDMsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTQ2cHggNjMwcHggYXQgMjg2cHggMjQwcHgsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjk1KSAwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuNTUpIDM1JSwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuMTUpIDcwJSwgcmdiYSgyMzIsIDE4NCwgNzUsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTQ2cHggNjMwcHggYXQgMjg2cHggMTc0MHB4LCByZ2JhKDIzMiwgMTg0LCA3NSwgMC45NSkgMCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSAzNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE1KSA3MCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU0NnB4IDYzMHB4IGF0IDE1ODZweCAyNDBweCwgcmdiYSgyMzIsIDE4NCwgNzUsIDAuOTUpIDAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC41NSkgMzUlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMC4xNSkgNzAlLCByZ2JhKDIzMiwgMTg0LCA3NSwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1NDZweCA2MzBweCBhdCAxNTg2cHggMTc0MHB4LCByZ2JhKDIzMiwgMTg0LCA3NSwgMC45NSkgMCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjU1KSAzNSUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE1KSA3MCUsIHJnYmEoMjMyLCAxODQsIDc1LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU4NXB4IDY3NXB4IGF0IDEzMHB4IDYzMHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg1ODVweCA2NzVweCBhdCAxMzBweCAyMTMwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDU4NXB4IDY3NXB4IGF0IDE0MzBweCA2MzBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNTg1cHggNjc1cHggYXQgMTQzMHB4IDIxMzBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgLTU4NHB4IC0yMTBweCwgcmdiYSgwLCA1MSwgMTAyLCAwLjk1KSAwJSwgcmdiYSgwLCA1MSwgMTAyLCAwLjU1KSAzNSUsIHJnYmEoMCwgNTEsIDEwMiwgMC4xNSkgNzAlLCByZ2JhKDAsIDUxLCAxMDIsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgLTU4NHB4IDEyOTBweCwgcmdiYSgwLCA1MSwgMTAyLCAwLjk1KSAwJSwgcmdiYSgwLCA1MSwgMTAyLCAwLjU1KSAzNSUsIHJnYmEoMCwgNTEsIDEwMiwgMC4xNSkgNzAlLCByZ2JhKDAsIDUxLCAxMDIsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzgwcHggOTAwcHggYXQgNzE1cHggLTIxMHB4LCByZ2JhKDAsIDUxLCAxMDIsIDAuOTUpIDAlLCByZ2JhKDAsIDUxLCAxMDIsIDAuNTUpIDM1JSwgcmdiYSgwLCA1MSwgMTAyLCAwLjE1KSA3MCUsIHJnYmEoMCwgNTEsIDEwMiwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3ODBweCA5MDBweCBhdCA3MTVweCAxMjkwcHgsIHJnYmEoMCwgNTEsIDEwMiwgMC45NSkgMCUsIHJnYmEoMCwgNTEsIDEwMiwgMC41NSkgMzUlLCByZ2JhKDAsIDUxLCAxMDIsIDAuMTUpIDcwJSwgcmdiYSgwLCA1MSwgMTAyLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDc4MHB4IDkwMHB4IGF0IDIwMTVweCAtMjEwcHgsIHJnYmEoMCwgNTEsIDEwMiwgMC45NSkgMCUsIHJnYmEoMCwgNTEsIDEwMiwgMC41NSkgMzUlLCByZ2JhKDAsIDUxLCAxMDIsIDAuMTUpIDcwJSwgcmdiYSgwLCA1MSwgMTAyLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDc4MHB4IDkwMHB4IGF0IDIwMTVweCAxMjkwcHgsIHJnYmEoMCwgNTEsIDEwMiwgMC45NSkgMCUsIHJnYmEoMCwgNTEsIDEwMiwgMC41NSkgMzUlLCByZ2JhKDAsIDUxLCAxMDIsIDAuMTUpIDcwJSwgcmdiYSgwLCA1MSwgMTAyLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDcxNXB4IDgyNXB4IGF0IC02MjRweCAtNzUwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDcxNXB4IDgyNXB4IGF0IC02MjRweCA3NTBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzE1cHggODI1cHggYXQgLTYyNHB4IDIyNTBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzE1cHggODI1cHggYXQgNjc2cHggLTc1MHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3MTVweCA4MjVweCBhdCA2NzZweCA3NTBweCwgcmdiYSgwLCA2NCwgMTI4LCAwLjk1KSAwJSwgcmdiYSgwLCA2NCwgMTI4LCAwLjU1KSAzNSUsIHJnYmEoMCwgNjQsIDEyOCwgMC4xNSkgNzAlLCByZ2JhKDAsIDY0LCAxMjgsIDApIDEwMCUpLCByYWRpYWwtZ3JhZGllbnQoNzE1cHggODI1cHggYXQgNjc2cHggMjI1MHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3MTVweCA4MjVweCBhdCAxOTc2cHggLTc1MHB4LCByZ2JhKDAsIDY0LCAxMjgsIDAuOTUpIDAlLCByZ2JhKDAsIDY0LCAxMjgsIDAuNTUpIDM1JSwgcmdiYSgwLCA2NCwgMTI4LCAwLjE1KSA3MCUsIHJnYmEoMCwgNjQsIDEyOCwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3MTVweCA4MjVweCBhdCAxOTc2cHggNzUwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDcxNXB4IDgyNXB4IGF0IDE5NzZweCAyMjUwcHgsIHJnYmEoMCwgNjQsIDEyOCwgMC45NSkgMCUsIHJnYmEoMCwgNjQsIDEyOCwgMC41NSkgMzUlLCByZ2JhKDAsIDY0LCAxMjgsIDAuMTUpIDcwJSwgcmdiYSgwLCA2NCwgMTI4LCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDc4MHB4IDkwMHB4IGF0IC0zNjRweCAzMzBweCwgcmdiYSgwLCAyNiwgNTEsIDAuOTUpIDAlLCByZ2JhKDAsIDI2LCA1MSwgMC41NSkgMzUlLCByZ2JhKDAsIDI2LCA1MSwgMC4xNSkgNzAlLCByZ2JhKDAsIDI2LCA1MSwgMCkgMTAwJSksIHJhZGlhbC1ncmFkaWVudCg3ODBweCA5MDBweCBhdCAtMzY0cHggMTgzMHB4LCByZ2JhKDAsIDI2LCA1MSwgMC45NSkgMCUsIHJnYmEoMCwgMjYsIDUxLCAwLjU1KSAzNSUsIHJnYmEoMCwgMjYsIDUxLCAwLjE1KSA3MCUsIHJnYmEoMCwgMjYsIDUxLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDc4MHB4IDkwMHB4IGF0IDkzNnB4IDMzMHB4LCByZ2JhKDAsIDI2LCA1MSwgMC45NSkgMCUsIHJnYmEoMCwgMjYsIDUxLCAwLjU1KSAzNSUsIHJnYmEoMCwgMjYsIDUxLCAwLjE1KSA3MCUsIHJnYmEoMCwgMjYsIDUxLCAwKSAxMDAlKSwgcmFkaWFsLWdyYWRpZW50KDc4MHB4IDkwMHB4IGF0IDkzNnB4IDE4MzBweCwgcmdiYSgwLCAyNiwgNTEsIDAuOTUpIDAlLCByZ2JhKDAsIDI2LCA1MSwgMC41NSkgMzUlLCByZ2JhKDAsIDI2LCA1MSwgMC4xNSkgNzAlLCByZ2JhKDAsIDI2LCA1MSwgMCkgMTAwJSksIGxpbmVhci1ncmFkaWVudCh2YXIoLS1hdS1uYXZ5KSwgdmFyKC0tYXUtbmF2eSkpO1xuXHRiYWNrZ3JvdW5kLXNpemU6IDEzMDBweCAxNTAwcHg7XG5cdGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7XG59XG5cbi50ZWFtLWluaXRpYWxzIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IGNsYW1wKDIuNXJlbSwgNnZ3LCAzLjVyZW0pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTtcblx0dGV4dC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDI2LCA1MSwgMC4zNSk7IC8qIGtlZXBzIHdoaXRlIGluaXRpYWxzIGxlZ2libGUgb24gdGhlIGdvbGQgZW5kICovXG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG5cbi50ZWFtLXBob3RvIGltZyB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0LW8tb2JqZWN0LWZpdDogY292ZXI7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4udGVhbS1waG90bzpob3ZlciBpbWcge1xuXHR0cmFuc2Zvcm06IHNjYWxlKDEuMDQpO1xufVxuXG4udGVhbS1uYW1lIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4udGVhbS1uYW1lIGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnRlYW0tbmFtZSBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4udGVhbS1yb2xlIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHQvKiBsb25nIHRpdGxlcyBzdG9wIGF0IHRocmVlIGxpbmVzOyB0aGUgZnVsbCBvbmUgaXMgaW4gdGhlIHRpdGxlIGF0dHJpYnV0ZSBhbmQgb24gdGhlIHByb2ZpbGUgKi9cblx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XG5cdC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG5cdC13ZWJraXQtbGluZS1jbGFtcDogMztcblx0bGluZS1jbGFtcDogMztcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLyogYSBoZWFkaW5nIGJldHdlZW4gc2V2ZXJhbCB0ZWFtIGdyaWRzIG9uIG9uZSBwYWdlIChlLmcuIC9jaGhzL2ZhY3VsdHkvOiBvbmUgZ3JpZCBwZXIgc2Nob29sKSAqL1xuLnBhZ2UtbWFpbiAudGVhbS1ncm91cCB7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtMTIpIDAgdmFyKC0tc3BhY2UtNik7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS02KTtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLnBhZ2UtbWFpbiBoMSArIC50ZWFtLWdyb3VwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG5cdHBhZGRpbmctdG9wOiAwO1xuXHRib3JkZXItdG9wOiAwO1xufVxuXG4udGVhbS1jb250YWN0IHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0zKSAwIDA7XG5cdHBhZGRpbmc6IDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLnRlYW0tY29udGFjdCBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi50ZWFtLWNvbnRhY3QgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnRlYW0tY29udGFjdCAudGVhbS1hcHB0IHtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBpbmRpdmlkdWFsIHN0YWZmIHByb2ZpbGUgIChkZXB0c3RhZmZpdGVtLmR0KSDigJQgcmVuZGVycyBpbnNpZGUgLnBhZ2UtbWFpbi5cbiAgIEZPVVIgc2VsZWN0YWJsZSBsYXlvdXRzLCBjaG9zZW4gcGVyIHNlY3Rpb24gKGluZGV4IENUKSBvciBwZXIgcGVyc29uXG4gICAoaXRlbSBDVCk6IC5zdGFmZi0tZmVhdHVyZSDCtyAuc3RhZmYtLWNhcmQgwrcgLnN0YWZmLS1jZW50ZXJlZCDCtyAuc3RhZmYtLXNwbGl0LlxuICAgU2hhcmVkIHBpZWNlcyBmaXJzdCwgdGhlbiBwZXItbGF5b3V0IGJsb2Nrcy5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLyog4pSA4pSA4pSAIHNoYXJlZDogcG9ydHJhaXQsIG5hbWUsIHJvbGUsIGZhY3RzLCBsaW5rcywgY29udGFjdCBjaGlwcywgYm9keSDilIDilIDilIAgKi9cbi5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDEwMCU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5wYWdlLW1haW4gaDEuc3RhZmYtbmFtZSB7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZy1ib3R0b206IDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0zeGwpO1xuXHRsaW5lLWhlaWdodDogMS4wNTtcblx0bGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcbn1cblxuLnBhZ2UtbWFpbiBoMS5zdGFmZi1uYW1lOjphZnRlciB7XG5cdGRpc3BsYXk6IG5vbmU7XG59IC8qIG5vIHBhZ2UtaGVhZGVyIGdvbGQgcnVsZSBoZXJlICovXG4ucGFnZS1tYWluIC5zdGFmZi1yb2xlIHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0yKSAwIDA7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM1O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG59XG5cbi5wYWdlLW1haW4gLnN0YWZmLWZhY3RzIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG59XG5cbi5zdGFmZi1mYWN0cyBsaSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5zdGFmZi1mYWN0cyBsaSA+IHNwYW46bGFzdC1jaGlsZCB7XG5cdG1pbi13aWR0aDogMDtcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbn1cblxuLnN0YWZmLWZhY3RzIC5mYWN0LWxhYmVsIHtcblx0ZmxleDogMCAwIDQuNXJlbTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpO1xuXHRwYWRkaW5nLXRvcDogMC4yNWVtO1xufVxuXG4uc3RhZmYtZmFjdHMgYSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uc3RhZmYtZmFjdHMgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtbGlua3Mge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTQpIDAgMDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLnN0YWZmLWxpbmtzIGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5zdGFmZi1saW5rcyBhOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uc3RhZmYtbGlua3MgaSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Zm9udC1zaXplOiAwLjg1ZW07XG5cdHdpZHRoOiAxZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogY29udGFjdCBjaGlwcy9waWxscyAoZmVhdHVyZSArIGNlbnRlcmVkKSAqL1xuLnN0YWZmLWNvbnRhY3Qge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5zdGFmZi1jb250YWN0IGEge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS00KTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnN0YWZmLWNvbnRhY3Qgc3ZnIHtcblx0d2lkdGg6IDE1cHg7XG5cdGhlaWdodDogMTVweDtcblx0ZmlsbDogbm9uZTtcblx0c3Ryb2tlLXdpZHRoOiAxLjg7XG5cdGZsZXgtc2hyaW5rOiAwO1xufVxuXG4vKiBhcHBvaW50bWVudCBidXR0b24gKGNhcmQgKyBzcGxpdCByZXVzZSAuYnRuKSAqL1xuLnN0YWZmLWFwcHQge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLyogc2hhcmVkIHByb3NlIGJvZHkg4oCUIGdvbGQgUGxleC1Nb25vIGV5ZWJyb3dzIG9uIHRoZSBzZWN0aW9uIGhlYWRpbmdzICovXG4uc3RhZmYtYm9keSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEwKTtcblx0b3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtYm9keSBoMiB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xNmVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTgpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtYm9keSA+IGgyOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLnN0YWZmLWJvZHkgcCB7XG5cdGxpbmUtaGVpZ2h0OiAxLjcyO1xufVxuXG4vKiDilIDilIDilIAgQSDCtyBFZGl0b3JpYWwgRmVhdHVyZSDigJQgbmF2eSBoZXJvIGJhbmQsIGdvbGQtZnJhbWVkIHBvcnRyYWl0IOKUgOKUgOKUgCAqL1xuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1oZXJvIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS04KTtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYXUtbmF2eSksIHZhcigtLWF1LW5hdnktZGVlcCkpO1xuXHRjb2xvcjogI2ZmZjtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1oZXJvOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAtODBweDtcblx0dG9wOiAtODBweDtcblx0d2lkdGg6IDI2MHB4O1xuXHRoZWlnaHQ6IDI2MHB4O1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHJnYmEoMjMyLCAxODQsIDc1LCAwLjE0KSwgdHJhbnNwYXJlbnQgNjglKTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1oZXJvLWlubmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDE4MHB4IDFmcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS04KTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1wb3J0cmFpdCB7XG5cdHdpZHRoOiAxODBweDtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRhc3BlY3QtcmF0aW86IDQvNTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0Ym9yZGVyOiAzcHggc29saWQgcmdiYSgyMzIsIDE4NCwgNzUsIDAuODUpO1xuXHRib3gtc2hhZG93OiAwIDE0cHggMzRweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG59XG5cbi5wYWdlLW1haW4gLnN0YWZmLS1mZWF0dXJlIGgxLnN0YWZmLW5hbWUge1xuXHRjb2xvcjogI2ZmZjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTR4bCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjAyO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLXJvbGUge1xuXHRjb2xvcjogI2U3ZGRjOTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtY29udGFjdCBhIHtcblx0Y29sb3I6ICNmZmY7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNik7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtY29udGFjdCBhOmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTtcbn1cblxuLnN0YWZmLS1mZWF0dXJlIC5zdGFmZi1jb250YWN0IHN2ZyB7XG5cdHN0cm9rZTogdmFyKC0tYXUtZ29sZC1saWdodCk7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtY29udGFjdCBhLmlzLXByaW1hcnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtY29udGFjdCBhLmlzLXByaW1hcnkgc3ZnIHtcblx0c3Ryb2tlOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uc3RhZmYtLWZlYXR1cmUgLnN0YWZmLWxpbmtzIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtYm9keSB7XG5cdG1heC13aWR0aDogNzBjaDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7XG5cdC5zdGFmZi0tZmVhdHVyZSAuc3RhZmYtaGVyby1pbm5lciB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdFx0anVzdGlmeS1pdGVtczogc3RhcnQ7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBCIMK3IENvbnRhY3QgQ2FyZCBSYWlsIOKAlCBzdGlja3kgY3JlYW0gY2FyZCArIHNjcm9sbGluZyBiaW8g4pSA4pSA4pSAICovXG4uc3RhZmYtLWNhcmQgLnN0YWZmLWNvbHMge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDI4MHB4IDFmcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS04KTtcblx0YWxpZ24taXRlbXM6IHN0YXJ0O1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi5zdGFmZi0tY2FyZCAuc3RhZmYtY2FyZCB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgdmFyKC0tYXUtZ29sZCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpO1xuXHRib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWQpO1xuXHRwb3NpdGlvbjogc3RpY2t5O1xuXHR0b3A6IGNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1zcGFjZS0zKSk7XG59XG5cbi5zdGFmZi0tY2FyZCAuc3RhZmYtcG9ydHJhaXQgaW1nIHtcblx0YXNwZWN0LXJhdGlvOiA0LzU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4ucGFnZS1tYWluIC5zdGFmZi0tY2FyZCBoMS5zdGFmZi1uYW1lIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTJ4bCk7XG59XG5cbi5zdGFmZi0tY2FyZCAuc3RhZmYtcm9sZSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1tZCk7XG59XG5cbi5zdGFmZi0tY2FyZCAuc3RhZmYtZmFjdHMge1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xufVxuXG4uc3RhZmYtLWNhcmQgLmZhY3QtbGFiZWwge1xuXHRmbGV4OiAwIDAgMy41cmVtO1xufVxuXG4uc3RhZmYtLWNhcmQgLnN0YWZmLWFwcHQge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHR3aWR0aDogMTAwJTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5zdGFmZi0tY2FyZCAuc3RhZmYtYm9keSB7XG5cdG1hcmdpbi10b3A6IDA7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7XG5cdC5zdGFmZi0tY2FyZCAuc3RhZmYtY29scyB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdH1cblx0LnN0YWZmLS1jYXJkIC5zdGFmZi1jYXJkIHtcblx0XHRwb3NpdGlvbjogc3RhdGljO1xuXHR9XG59XG4vKiDilIDilIDilIAgQyDCtyBDZW50ZXJlZCBQb3J0cmFpdCDigJQgc3ltbWV0cmljYWwsIGdvbGQgY29ybmVyICsgZmxvdXJpc2gg4pSA4pSA4pSAICovXG4uc3RhZmYtLWNlbnRlcmVkIHtcblx0bWF4LXdpZHRoOiA3NjBweDtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1wb3J0cmFpdCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0d2lkdGg6IDIxMHB4O1xuXHRtYXJnaW46IDAgYXV0byB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtcG9ydHJhaXQgaW1nIHtcblx0YXNwZWN0LXJhdGlvOiA0LzU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLXBvcnRyYWl0OjphZnRlciB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cmlnaHQ6IC0xMnB4O1xuXHRib3R0b206IC0xMnB4O1xuXHR3aWR0aDogNjRweDtcblx0aGVpZ2h0OiA2NHB4O1xuXHRib3JkZXItcmlnaHQ6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tcmFkaXVzLWxnKSAwO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1ydWxlIHtcblx0d2lkdGg6IDQ0cHg7XG5cdGhlaWdodDogM3B4O1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTQpIGF1dG87XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpO1xuXHRib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLXJvbGUge1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtY29udGFjdCB7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnN0YWZmLS1jZW50ZXJlZCAuc3RhZmYtY29udGFjdCBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLXBhbGUpO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjZjBlMmM0O1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1jb250YWN0IGE6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiAjZmJlZWNmO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1jb250YWN0IHN2ZyB7XG5cdHN0cm9rZTogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5zdGFmZi0tY2VudGVyZWQgLnN0YWZmLWNvbnRhY3QgYS5pcy1wcmltYXJ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiAjZmZmO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1jb250YWN0IGEuaXMtcHJpbWFyeSBzdmcge1xuXHRzdHJva2U6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4uc3RhZmYtLWNlbnRlcmVkIC5zdGFmZi1ib2R5IHtcblx0bWF4LXdpZHRoOiA2MmNoO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTgpIGF1dG8gMDtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTgpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4vKiDilIDilIDilIAgRCDCtyBTcGxpdCBGZWF0dXJlIOKAlCBmdWxsLWhlaWdodCBwb3J0cmFpdCArIGNyZWFtIHBhbmVsIOKUgOKUgOKUgCAqL1xuLnN0YWZmLS1zcGxpdCAuc3RhZmYtdG9wIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0MiUgMWZyO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1wb3J0cmFpdCB7XG5cdGhlaWdodDogMTAwJTtcbn1cblxuLnN0YWZmLS1zcGxpdCAuc3RhZmYtcG9ydHJhaXQgaW1nIHtcblx0aGVpZ2h0OiAxMDAlO1xuXHRtaW4taGVpZ2h0OiAzNjBweDtcblx0Ym9yZGVyLXJhZGl1czogMDtcbn1cblxuLnN0YWZmLS1zcGxpdCAuc3RhZmYtcGFuZWwge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTgpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnBhZ2UtbWFpbiAuc3RhZmYtLXNwbGl0IGgxLnN0YWZmLW5hbWUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtM3hsKTtcbn1cblxuLnN0YWZmLS1zcGxpdCAuc3RhZmYtcm9sZSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnN0YWZmLS1zcGxpdCAuc3RhZmYtZmFjdHMge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLnN0YWZmLS1zcGxpdCAuc3RhZmYtYXBwdCB7XG5cdGFsaWduLXNlbGY6IHN0YXJ0O1xufVxuXG4uc3RhZmYtLXNwbGl0IC5zdGFmZi1ib2R5IHtcblx0bWF4LXdpZHRoOiA3NGNoO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHtcblx0LnN0YWZmLS1zcGxpdCAuc3RhZmYtdG9wIHtcblx0XHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcblx0fVxuXHQuc3RhZmYtLXNwbGl0IC5zdGFmZi1wb3J0cmFpdCBpbWcge1xuXHRcdG1pbi1oZWlnaHQ6IDMwMHB4O1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIGJpbyBkaXJlY3Rvcnkg4oCUIHBvcnRyYWl0IGdyaWQgIChjb21wb25lbnRzL2Jpby50dClcbiAgIFBob3RvLWZvcndhcmQgcGVvcGxlIGNhcmRzOiBhIHBvcnRyYWl0IGhlYWRzaG90IG9uIHRvcCwgdGhlbiBuYW1lICtcbiAgIGJsdXJiLiBBdXRvLWZpbGxzIGFjcm9zcyB0aGUgc2VjdGlvbiBhbmQgcmVmbG93cyBkb3duICjigKbihpIz4oaSMuKGkjEpIGFzIHRoZVxuICAgdmlld3BvcnQgbmFycm93cyDigJQgbm8gYnJlYWtwb2ludHMgbmVlZGVkLiBSZWFkcyBhcyBhIGZhY3VsdHkgZGlyZWN0b3J5LFxuICAgZGlzdGluY3QgZnJvbSB0aGUgY29sdW1ucyBjYXJkIGdyaWQgYW5kIHRoZSBNZWV0LXRoZS1UZWFtIHBvcnRyYWl0IGdyaWQuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIHN0YW5kYWxvbmUgcmljaC10ZXh0IGludHJvIGFib3ZlIHRoZSBkaXJlY3RvcnkgKHRoZSBzZWN0aW9uJ3MgXCJ0ZXh0XCIgYXJlYSkuXG4gICBCYW5kLWF3YXJlIHNvIGl0IHJlYWRzIG9uIGRhcmsgYmFuZHM7IGEgcmVhZGFibGUgbWVhc3VyZSBmb3IgcGxhaW4gY29weS4gKi9cbi5iaW8taW50cm8ge1xuXHRtYXgtd2lkdGg6IHZhcigtLW1heC13aWR0aC10ZXh0KTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEwKTtcbn1cblxuLmJpby1pbnRybyA+IDpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi5iaW8taW50cm8gOmlzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uYmlvLWludHJvIGEge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LW5hdnktbGlnaHQpKTtcbn1cblxuLmJpby1pbnRybyBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uYmlvLWRpcmVjdG9yeSB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE5MHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS04KSB2YXIoLS1zcGFjZS02KTtcbn1cblxuLmJpby1lbnRyeSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbi5iaW8tcGhvdG8gaW1nIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlO1xuXHRhc3BlY3QtcmF0aW86IDQvNTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdyYXktMjAwKTtcbn1cblxuLmJpby1uYW1lIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5iaW8tYmx1cmIge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0yKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbi5iaW8tYmx1cmIgcCArIHAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLyogc2luZ2xlLXBlcnNvbiBiaW8g4oCUIGhvcml6b250YWwgY2FyZCBpbnN0ZWFkIG9mIHRoZSBwb3J0cmFpdC1ncmlkIGNvbHVtbiAqL1xuLmJpby1lbnRyeTpvbmx5LWNoaWxkIHtcblx0Z3JpZC1jb2x1bW46IDEvLTE7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG5cdG1heC13aWR0aDogNjQwcHg7XG59XG5cbi5iaW8tZW50cnk6b25seS1jaGlsZCAuYmlvLXBob3RvIGltZyB7XG5cdGFzcGVjdC1yYXRpbzogMy80O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjAxcHgpIHtcblx0LmJpby1lbnRyeTpvbmx5LWNoaWxkIHtcblx0XHRmbGV4LWRpcmVjdGlvbjogcm93O1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdH1cblx0LmJpby1lbnRyeTpvbmx5LWNoaWxkIC5iaW8tcGhvdG8ge1xuXHRcdGZsZXg6IDAgMCAyMDBweDtcblx0fVxuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQgLmJpby1kZXRhaWwge1xuXHRcdG1pbi13aWR0aDogMDtcblx0fVxuXHQuYmlvLWVudHJ5Om9ubHktY2hpbGQgLmJpby1uYW1lIHtcblx0XHRtYXJnaW4tdG9wOiAwO1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0LmJpby1lbnRyeTpvbmx5LWNoaWxkIC5iaW8tcGhvdG8ge1xuXHRcdG1heC13aWR0aDogMjAwcHg7XG5cdH1cbn1cbi8qIGJpbyArIHNwbGl0IHRva2VuIChDdXN0b20gQ2xhc3MgXCJzcGxpdC0zLTJcIiAvIFwic3BsaXQtMi0zXCIsIHRoZSBzYW1lIHRva2VucyB0aGVcbiAgIGNvbHVtbnMgZ3JpZCB1c2VzKTogdGhlIHBlb3BsZSBvbiBvbmUgc2lkZSBhcyBob3Jpem9udGFsIGNhcmRzLCB0aGUgc2VjdGlvbidzXG4gICBpbnRybyB0ZXh0IGJlc2lkZSB0aGVtLCBhcyB0aGUgbGVnYWN5IGhvbWVwYWdlIGJpbyBmZWF0dXJlIGxhaWQgdGhlbSBvdXQuICovXG5AbWVkaWEgKG1pbi13aWR0aDogNzYxcHgpIHtcblx0OmlzKC5zcGxpdC0zLTIsIC5zcGxpdC0yLTMpID4gLnNlY3Rpb24taW5uZXI6aGFzKD4gLmJpby1kaXJlY3RvcnkpIHtcblx0XHRkaXNwbGF5OiBncmlkO1xuXHRcdGNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLTEwKTtcblx0XHRhbGlnbi1pdGVtczogc3RhcnQ7XG5cdH1cblx0LnNwbGl0LTMtMiA+IC5zZWN0aW9uLWlubmVyOmhhcyg+IC5iaW8tZGlyZWN0b3J5KSB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzZnIgMmZyO1xuXHR9XG5cdC5zcGxpdC0yLTMgPiAuc2VjdGlvbi1pbm5lcjpoYXMoPiAuYmlvLWRpcmVjdG9yeSkge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMmZyIDNmcjtcblx0fVxuXHQ6aXMoLnNwbGl0LTMtMiwgLnNwbGl0LTItMykgPiAuc2VjdGlvbi1pbm5lciA+IC5zZWN0aW9uLWhlYWQge1xuXHRcdGdyaWQtY29sdW1uOiAxLy0xO1xuXHR9XG5cdDppcyguc3BsaXQtMy0yLCAuc3BsaXQtMi0zKSA+IC5zZWN0aW9uLWlubmVyID4gLmJpby1kaXJlY3Rvcnkge1xuXHRcdGdyaWQtY29sdW1uOiAxO1xuXHRcdGdyaWQtcm93OiAyO1xuXHR9XG5cdDppcyguc3BsaXQtMy0yLCAuc3BsaXQtMi0zKSA+IC5zZWN0aW9uLWlubmVyID4gLmJpby1pbnRybyB7XG5cdFx0Z3JpZC1jb2x1bW46IDI7XG5cdFx0Z3JpZC1yb3c6IDI7XG5cdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0fVxufVxuOmlzKC5zcGxpdC0zLTIsIC5zcGxpdC0yLTMpIC5iaW8tZGlyZWN0b3J5IHtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbjppcyguc3BsaXQtMy0yLCAuc3BsaXQtMi0zKSAuYmlvLWVudHJ5IHtcblx0ZmxleC1kaXJlY3Rpb246IHJvdztcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtd2hpdGUpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KTtcblx0bWF4LXdpZHRoOiBub25lO1xufVxuXG46aXMoLnNwbGl0LTMtMiwgLnNwbGl0LTItMykgLmJpby1waG90byB7XG5cdGZsZXg6IDAgMCAxNjBweDtcbn1cblxuOmlzKC5zcGxpdC0zLTIsIC5zcGxpdC0yLTMpIC5iaW8tZGV0YWlsIHtcblx0bWluLXdpZHRoOiAwO1xufVxuXG46aXMoLnNwbGl0LTMtMiwgLnNwbGl0LTItMykgLmJpby1uYW1lIHtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG5cdDppcyguc3BsaXQtMy0yLCAuc3BsaXQtMi0zKSAuYmlvLXBob3RvIHtcblx0XHRmbGV4LWJhc2lzOiAxMTBweDtcblx0fVxufVxuLyogZGVjb3JhdGl2ZSBpbWFnZS1vbmx5IHJvd3Mgc3BhbiB0aGUgd2hvbGUgZ3JpZCB3aWR0aCAqL1xuLmJpby1maWd1cmUge1xuXHRncmlkLWNvbHVtbjogMS8tMTtcbn1cblxuLmJpby1maWd1cmUgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgZGVwdC5jc3MgIMK3ICBkZXBhcnRtZW50IHNlY3Rpb24tcGFnZSB0ZW1wbGF0ZSAoZGVwdF9tYWluLndyYXApXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzLCBsYXlvdXQuY3NzICguc2VjdGlvbiBiYW5kcylcblxuICAgQSBkZXBhcnRtZW50IHZhcmlhbnQgb2YgdGhlIGhvbWVwYWdlLWFkdmFuY2VkIGRpc3BsYXk6IGEgc3RpY2t5IGRhcmtcbiAgIG5hdnkgcmFpbCAoZGVwYXJ0bWVudCBpZGVudGl0eSArIHNlY3Rpb24ganVtcC1uYXYgKyBDVEFzKSBiZXNpZGUgdGhlXG4gICBub3JtYWwgcGFnZS5kdCBzZWN0aW9uIHN0YWNrLiBTYW1lIHNlY3Rpb25zLCBzYW1lIGNvbnRlbnQgdHlwZXMg4oCUXG4gICBvbmx5IHRoZSBzdXJyb3VuZCBkaWZmZXJzLlxuXG4gICBPTkUgcmFpbCwgdHdvIHN0YXRlcyAodGhlIGRlbW8ncyBzZXBhcmF0ZSBzaWRlYmFyICsgaWNvbi1zdHJpcCBhcmVcbiAgIG1lcmdlZCBzbyB0aGVyZSdzIGEgc2luZ2xlIHNldCBvZiBtYXJrdXAgdG8gbWFpbnRhaW4pOlxuICAgICDiiaUxMDgwICAgZnVsbCByYWlsLCBsYWJlbHMgdmlzaWJsZVxuICAgICA8MTA4MCAgIGNvbGxhcHNlcyB0byBhIHNsaW0gZG90IHN0cmlwOyB0aGUgdG9nZ2xlIG9wZW5zIGl0IGFzIGFuXG4gICAgICAgICAgICAgb3ZlcmxheSBwYW5lbCBvdmVyIGEgYmFja2Ryb3BcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuOnJvb3Qge1xuXHQtLWRlcHQtcmFpbC13OiAyNTBweDsgLyogZXhwYW5kZWQgcmFpbCAqL1xuXHQtLWRlcHQtc3RyaXAtdzogNjBweDsgLyogY29sbGFwc2VkIGRvdCBzdHJpcCAqL1xufVxuXG4vKiDilIDilIDilIAgTEFZT1VUIOKUgOKUgOKUgCAqL1xuLmRlcHQtbGF5b3V0IHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5kZXB0LW1haW4ge1xuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi8qIFNlY3Rpb25zIGluc2lkZSB0aGUgZGVwdCBjb2x1bW4ga2VlcCB0aGUgYmFuZCBzeXN0ZW0gYnV0IHNpdCBpbiBhXG4gICBuYXJyb3dlciBtZWFzdXJlLCBzbyB0aGUgaW5uZXIgbWF4LXdpZHRoIHJhcmVseSBiaW5kcyDigJQgcHVsbCB0aGVcbiAgIGhvcml6b250YWwgcGFkZGluZyBpbiBhIGxpdHRsZSBzbyBjb250ZW50IGlzbid0IGNyb3dkZWQgdG8gdGhlIHJhaWwuICovXG4uZGVwdC1tYWluIC5zZWN0aW9uIHtcblx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4uZGVwdC1tYWluIC5zZWN0aW9uLWlubmVyIHtcblx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdG1hcmdpbi1pbmxpbmU6IDA7XG59XG5cbi8qIOKUgOKUgOKUgCBSQUlMIOKUgOKUgOKUgCAqL1xuLmRlcHQtcmFpbCB7XG5cdHdpZHRoOiB2YXIoLS1kZXB0LXJhaWwtdyk7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRwb3NpdGlvbjogc3RpY2t5O1xuXHR0b3A6IHZhcigtLWhlYWRlci1oZWlnaHQpO1xuXHRoZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDcpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR6LWluZGV4OiA2MDtcblx0dHJhbnNpdGlvbjogd2lkdGggdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uZGVwdC1yYWlsLXNjcm9sbCB7XG5cdGZsZXg6IDE7XG5cdG92ZXJmbG93LXk6IGF1dG87XG5cdG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIDAgdmFyKC0tc3BhY2UtNCk7XG5cdHNjcm9sbGJhci13aWR0aDogdGhpbjtcblx0c2Nyb2xsYmFyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgdHJhbnNwYXJlbnQ7XG59XG5cbi5kZXB0LXJhaWwtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7XG5cdHdpZHRoOiA2cHg7XG59XG5cbi5kZXB0LXJhaWwtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcblx0Ym9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4vKiBkZXBhcnRtZW50IGlkZW50aXR5ICovXG4uZGVwdC1pZCB7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5kZXB0LWlkLWV5ZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTZlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0xKTtcbn1cblxuLmRlcHQtaWQtbmFtZSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMjU7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi8qIGp1bXAtbmF2ICovXG4uZGVwdC1uYXYtdGl0bGUge1xuXHRwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTMpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG59XG5cbi5kZXB0LWxpbmsge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS01KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0bGluZS1oZWlnaHQ6IDEuMzU7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5kZXB0LWxpbms6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uZGVwdC1saW5rLmlzLWN1cnJlbnQge1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG59XG5cbi8qIHdheWZpbmRpbmcgZG90IOKAlCB0aGUgZGVtbyB1c2VkIHNpeCBodWVzOyBrZXB0IG9uLXBhbGV0dGUgaGVyZSwgd2l0aCB0aGVcbiAgIGFjdGl2ZSBzdGF0ZSAoZ29sZCwgZmlsbGVkKSBjYXJyeWluZyB0aGUgc2lnbmFsIGluc3RlYWQgb2YgY29sb3VyIGNvdW50ICovXG4uZGVwdC1kb3Qge1xuXHRmbGV4LXNocmluazogMDtcblx0d2lkdGg6IDlweDtcblx0aGVpZ2h0OiA5cHg7XG5cdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI4KTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCksIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5kZXB0LWxpbmsuaXMtY3VycmVudCAuZGVwdC1kb3Qge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0dHJhbnNmb3JtOiBzY2FsZSgxLjI1KTtcbn1cblxuLmRlcHQtbGluay1sYWJlbCB7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLyogcmFpbCBmb290ZXIg4oCUIENUQXMgKyBkZXB0IG1hcmsgKi9cbi5kZXB0LXJhaWwtYm90dG9tIHtcblx0ZmxleC1zaHJpbms6IDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLmRlcHQtY3RhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Ym9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5kZXB0LWN0YS1wcmltYXJ5IHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uZGVwdC1jdGEtcHJpbWFyeTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuLmRlcHQtY3RhLWdob3N0IHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbn1cblxuLmRlcHQtY3RhLWdob3N0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyogaW5zdGl0dXRpb25hbCBsb2NrdXAgYXQgdGhlIGZvb3Qgb2YgdGhlIHJhaWwgKi9cbi5kZXB0LW1hcmsge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0b3BhY2l0eTogMC43NTtcbn1cblxuLmRlcHQtbWFyayBpbWcge1xuXHRoZWlnaHQ6IDI2cHg7XG5cdHdpZHRoOiBhdXRvO1xufVxuXG4uZGVwdC1tYXJrIGE6aG92ZXIge1xuXHRvcGFjaXR5OiAxO1xufVxuXG4vKiB0b2dnbGUg4oCUIGhpZGRlbiBvbiBkZXNrdG9wLCBiZWNvbWVzIHRoZSBzdHJpcCBjb250cm9sIGJlbG93IDEwODAgKi9cbi5kZXB0LXJhaWwtdG9nZ2xlIHtcblx0ZGlzcGxheTogbm9uZTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiB2YXIoLS1zcGFjZS0zKTtcblx0d2lkdGg6IDEwMCU7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5kZXB0LWhhbSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRnYXA6IDRweDtcblx0d2lkdGg6IDE4cHg7XG5cdGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uZGVwdC1oYW0gc3BhbiB7XG5cdGhlaWdodDogMnB4O1xuXHRiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG5cdGJvcmRlci1yYWRpdXM6IDJweDtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSwgb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcbn1cblxuLmRlcHQtcmFpbC10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSAuZGVwdC1oYW0gc3BhbjpudGgtY2hpbGQoMSkge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNnB4KSByb3RhdGUoNDVkZWcpO1xufVxuXG4uZGVwdC1yYWlsLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdIC5kZXB0LWhhbSBzcGFuOm50aC1jaGlsZCgyKSB7XG5cdG9wYWNpdHk6IDA7XG59XG5cbi5kZXB0LXJhaWwtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLmRlcHQtaGFtIHNwYW46bnRoLWNoaWxkKDMpIHtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpIHJvdGF0ZSgtNDVkZWcpO1xufVxuXG4uZGVwdC10b2dnbGUtbGFiZWwge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLmRlcHQtYmFja2Ryb3Age1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGluc2V0OiAwO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDI2LCA1MSwgMC40NSk7XG5cdG9wYWNpdHk6IDA7XG5cdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSwgdmlzaWJpbGl0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0ei1pbmRleDogNTU7XG59XG5cbmJvZHkuZGVwdC1yYWlsLW9wZW4gLmRlcHQtYmFja2Ryb3Age1xuXHRvcGFjaXR5OiAxO1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG4vKiDilIDilIDilIAgQ09MTEFQU0VEIFNUUklQICg8MTA4MCkg4pSA4pSA4pSAICovXG5AbWVkaWEgKG1heC13aWR0aDogMTA4MHB4KSB7XG5cdC5kZXB0LXJhaWwge1xuXHRcdHdpZHRoOiB2YXIoLS1kZXB0LXN0cmlwLXcpO1xuXHR9XG5cdC5kZXB0LXJhaWwtdG9nZ2xlIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHR9XG5cdC5kZXB0LWJhY2tkcm9wIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQvKiBzdHJpcCBzdGF0ZTogZG90cyBvbmx5ICovXG5cdC5kZXB0LXJhaWwgLmRlcHQtaWQsXG5cdC5kZXB0LXJhaWwgLmRlcHQtbmF2LXRpdGxlLFxuXHQuZGVwdC1yYWlsIC5kZXB0LXJhaWwtYm90dG9tLFxuXHQuZGVwdC1yYWlsIC5kZXB0LWxpbmstbGFiZWwsXG5cdC5kZXB0LXJhaWwgLmRlcHQtdG9nZ2xlLWxhYmVsIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdC5kZXB0LWxpbmsge1xuXHRcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRcdHBhZGRpbmctaW5saW5lOiAwO1xuXHR9XG5cdC8qIGV4cGFuZGVkIG92ZXJsYXkgKi9cblx0LmRlcHQtcmFpbC5pcy1vcGVuIHtcblx0XHR3aWR0aDogdmFyKC0tZGVwdC1yYWlsLXcpO1xuXHRcdGJveC1zaGFkb3c6IDAgMTJweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG5cdH1cblx0LmRlcHQtcmFpbC5pcy1vcGVuIC5kZXB0LWlkLFxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtbmF2LXRpdGxlLFxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtcmFpbC1ib3R0b20sXG5cdC5kZXB0LXJhaWwuaXMtb3BlbiAuZGVwdC1saW5rLWxhYmVsLFxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtdG9nZ2xlLWxhYmVsIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXHQuZGVwdC1yYWlsLmlzLW9wZW4gLmRlcHQtcmFpbC1ib3R0b20ge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdH1cblx0LmRlcHQtcmFpbC5pcy1vcGVuIC5kZXB0LWxpbmsge1xuXHRcdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNSk7XG5cdH1cblx0LmRlcHQtbWFpbiAuc2VjdGlvbiB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTYpO1xuXHR9XG59XG4vKiBiZWxvdyB0aGUgc3RyaXAncyB1c2VmdWxuZXNzOiByYWlsIGdvZXMgaG9yaXpvbnRhbC1mcmVlLCBjb250ZW50IGxlYWRzICovXG4vKiBWZXJ5IG5hcnJvdzogdGhlIHJhaWwgU1RBWVMgYSB2ZXJ0aWNhbCBzaWRlIHN0cmlwIOKAlCBpdCBuZXZlciBiZWNvbWVzIGFcbiAgIGZ1bGwtd2lkdGggYmFyIGFjcm9zcyB0aGUgdG9wICh0aGF0J3MgaG93IHRoZSBkZW1vJ3MgaWNvbiBzdHJpcCBiZWhhdmVzLFxuICAgYW5kIGl0IGtlZXBzIHRoZSBwYWdlIG5hdiByZWFjaGFibGUgd2l0aG91dCBzY3JvbGxpbmcgYmFjayB1cCkuIE9ubHkgdGhlXG4gICBzdHJpcCB3aWR0aCBhbmQgdGhlIGNvbnRlbnQgZ3V0dGVycyB0aWdodGVuLiAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG5cdDpyb290IHtcblx0XHQtLWRlcHQtc3RyaXAtdzogNDhweDtcblx0fVxuXHQuZGVwdC1tYWluIC5zZWN0aW9uIHtcblx0XHRwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2UtNSk7XG5cdH1cblx0LmRlcHQtc3RhdHMsIC5kZXB0LWVucm9sbCB7XG5cdFx0cGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLTUpO1xuXHR9XG5cdC8qIHRoZSBleHBhbmRlZCBvdmVybGF5IGxlYXZlcyBhIHNsaXZlciBvZiBjb250ZW50ICsgYmFja2Ryb3AgdmlzaWJsZSAqL1xuXHQuZGVwdC1yYWlsLmlzLW9wZW4ge1xuXHRcdHdpZHRoOiBtaW4odmFyKC0tZGVwdC1yYWlsLXcpLCA3OHZ3KTtcblx0fVxuXHQuZGVwdC1saW5rIHtcblx0XHRwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS0zKTtcblx0fSAvKiBmaW5nZXItZnJpZW5kbHkgZG90cyAqL1xufVxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBzdGF0cyBiYW5kICAoY29tcG9uZW50cy9zdGF0cy50dCDCtyBjb250ZW50IHR5cGUgYHN0YXRzYClcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLnN0YXRzLWdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE4MHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnN0YXQge1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zdGF0LWljb24ge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdpZHRoOiAzcmVtO1xuXHRoZWlnaHQ6IDNyZW07XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtaWNvbi1iZywgdmFyKC0tYXUtZ29sZC1wYWxlKSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWljb24tZmcsIHZhcigtLWF1LWdvbGQpKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcbn1cblxuLnN0YXQtbnVtIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0zeGwpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsaW5lLWhlaWdodDogMTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uc3RhdC1sYWJlbCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyogb24gYSBkYXJrIGJhbmQgKi9cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgQ1RBIGJhciAgKGNvbXBvbmVudHMvY3RhLWJhci50dCDCtyBjb250ZW50IHR5cGUgYGN0YV9iYXJgKVxuICAgQSBzbGltIGZ1bGwtd2lkdGggYmFuZDogYSBtZXNzYWdlIGJlc2lkZSBhbiBhY3Rpb24gYnV0dG9uLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4uY3RhLWJhciB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXHRnYXA6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTgpO1xufVxuXG4uY3RhLWJhci10ZXh0IHtcblx0ZmxleDogMSAxIDMyMHB4O1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0bGluZS1oZWlnaHQ6IDEuMztcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uY3RhLWJhciAuYnRuIHtcblx0ZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgVE9QIENIUk9NRSBCQU5EUyAoZGVwdF9tYWluLndyYXApIOKAlCBjb21wYWN0IHN0cmlwcyBiZXR3ZWVuIHRoZVxuICAgaGVybyBhbmQgdGhlIHJhaWwsIG1hdGNoaW5nIHRoZSBkZXBhcnRtZW50IGRlbW8uIFRoZXNlIGFyZSBOT1RcbiAgIC5zZWN0aW9uIGJhbmRzOiB0aGUgZGVtbydzIGFyZSBzbGltIChhIG5hdnkgc3RhdHMgc3RyaXAgYW5kIGEgZ29sZFxuICAgZW5yb2xtZW50IGJhciksIHdoZXJlIGEgZnVsbCAuc2VjdGlvbidzIDgwcHggcmh5dGhtIHJlYWRzIGZhciB0b29cbiAgIGhlYXZ5IGRpcmVjdGx5IHVuZGVyIHRoZSBoZXJvLlxuXG4gICBUaGV5IHJlLXNraW4gdGhlIHNoYXJlZCAuc3RhdCogLyBjdGEgcGllY2VzIHJhdGhlciB0aGFuIGR1cGxpY2F0aW5nXG4gICBtYXJrdXAsIHNvIGNvbXBvbmVudHMvc3RhdHMudHQga2VlcHMgaXRzIHJvb21pZXIgaW4tZmxvdyB0cmVhdG1lbnQuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIHN0YXRzIHN0cmlwIOKAlCBuYXZ5LCBsaWdodC1vbi1kYXJrLCBoYWlybGluZSBkaXZpZGVycyBiZXR3ZWVuIGNlbGxzICovXG4uZGVwdC1zdGF0cyB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1ndXR0ZXIpO1xufVxuXG4uZGVwdC1zdGF0cy1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLmRlcHQtc3RhdHMgLnN0YXRzLWdyaWQge1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7XG5cdGdhcDogMDtcbn1cblxuLmRlcHQtc3RhdHMgLnN0YXQge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0zKSB2YXIoLS1zcGFjZS01KTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGVwdC1zdGF0cyAuc3RhdCArIC5zdGF0OjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDA7XG5cdHRvcDogMTglO1xuXHRib3R0b206IDE4JTtcblx0d2lkdGg6IDFweDtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTtcbn1cblxuLyogYmFyZSBnb2xkIGdseXBoIOKAlCBubyBwYWxlIGNpcmNsZSBjaGlwIGF0IHRoaXMgc2l6ZSAqL1xuLmRlcHQtc3RhdHMgLnN0YXQtaWNvbiB7XG5cdHdpZHRoOiBhdXRvO1xuXHRoZWlnaHQ6IGF1dG87XG5cdG1hcmdpbjogMCBhdXRvIHZhcigtLXNwYWNlLTIpO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXItcmFkaXVzOiAwO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG59XG5cbi5kZXB0LXN0YXRzIC5zdGF0LW51bSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1sZyk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xufVxuXG4uZGVwdC1zdGF0cyAuc3RhdC1sYWJlbCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjU7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkge1xuXHQuZGVwdC1zdGF0cyAuc3RhdHMtZ3JpZCB7XG5cdFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG5cdH1cblx0LmRlcHQtc3RhdHMgLnN0YXQgKyAuc3RhdDo6YmVmb3JlIHtcblx0XHRsZWZ0OiAxOCU7XG5cdFx0cmlnaHQ6IDE4JTtcblx0XHR0b3A6IDA7XG5cdFx0Ym90dG9tOiBhdXRvO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHRcdGhlaWdodDogMXB4O1xuXHR9XG59XG4vKiBlbnJvbG1lbnQgYmFyIOKAlCBzbGltIGdvbGQgc3RyaXAsIHNlcmlmIG1lc3NhZ2UgKyBkYXJrIGJ1dHRvbiAqL1xuLmRlcHQtZW5yb2xsIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLWd1dHRlcik7XG59XG5cbi5kZXB0LWVucm9sbC1pbm5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5kZXB0LWVucm9sbC10ZXh0IHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGxpbmUtaGVpZ2h0OiAxLjM1O1xufVxuXG4uZGVwdC1lbnJvbGwtdGV4dCBzbWFsbCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHJnYmEoMCwgMjYsIDUxLCAwLjcyKTtcblx0bWFyZ2luLXRvcDogMnB4O1xufVxuXG4uZGVwdC1lbnJvbGwgLmJ0biB7XG5cdGZsZXgtc2hyaW5rOiAwO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHZhcmlhbnRzLmNzcyAgwrcgIHNlY3Rpb24gc3R5bGUgdmFyaWFudHNcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MsIGxheW91dC5jc3MgKC5zZWN0aW9uIGJhbmRzICsgLS1iYW5kLSogdG9rZW5zKVxuXG4gICBBbHRlcm5hdGUgbG9va3MgZm9yIGV4aXN0aW5nIGNvbnRlbnQgdHlwZXMsIHNlbGVjdGVkIGJ5IGEgYGNvbC08bmFtZT5gXG4gICB0b2tlbiBpbiBhIHNlY3Rpb24ncyBjdXN0b21fY2xhc3MgYW5kIGRpc3BhdGNoZWQgYnkgdGhlIGNvbnRlbnQgdHlwZSdzXG4gICByZW5kZXJlciAoc2VlIGNvbXBvbmVudHMvY29sdW1ucy50dCDihpIgY29tcG9uZW50cy9jb2x1bW5zLyoudHQpLiBPbmVcbiAgIGNvbnRlbnQgdHlwZSArIG9uZSBDTVMgZm9ybSBkcml2ZXMgbWFueSBkaXNwbGF5czsgdGhpcyBmaWxlIGhvbGRzIHRoZWlyXG4gICBtYXJrdXAgc3R5bGluZy4gQWRkIGEgdmFyaWFudDogYSBjb21wb25lbnRzL2NvbHVtbnMvPG5hbWU+LnR0IHJlbmRlcmVyLFxuICAgYW4gZW50cnkgaW4gY29sdW1ucy50dCdzIHZhcmlhbnRfbWFwLCBhbmQgYSBibG9jayBoZXJlLlxuXG4gICBCYW5kIGFkYXB0YXRpb24gaXMgdmlhIHRoZSAtLWJhbmQtKiBDT05URVhUIFRPS0VOUyBsYXlvdXQuY3NzIHNldHMgb24gZGFya1xuICAgYmFuZHMg4oCUIHRoZXJlIGFyZSBOTyBwZXItYmFuZCBzZWxlY3RvciBsaXN0cyBoZXJlLiBUaGUgcnVsZSBvZiB0aHVtYjpcbiAgICAgwrcgY29udGVudCBzaXR0aW5nIG9uIGEgV0hJVEUgY2FyZCAocHJvZ3JhbXMpIGtlZXBzIGxpZ2h0LW1vZGUgY29sb3VycztcbiAgICAgICBvbmx5IHRoZSBjYXJkIGNocm9tZSAoYm9yZGVyIHdpZHRoLCBzaGFkb3cpIHJlYWRzIHRoZSBiYW5kIHRva2Vucy5cbiAgICAgwrcgY29udGVudCBkaXJlY3RseSBvbiB0aGUgYmFuZCwgb3Igb24gYSB0cmFuc2x1Y2VudCBjYXJkIChjYXJlZXJzLFxuICAgICAgIGludHJvLCBxdW90ZSwgcHJvZmlsZSkgcmVhZHMgdGhlIGJhbmQgdG9rZW5zIGZvciBpdHMgdGV4dCB0b28uXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi8qIOKUgOKUgOKUgCBjb2wtcHJvZ3JhbXMgwrcgcHJvZ3JhbSBjYXJkcyAod2hpdGUgY2FyZDsgb25seSBjaHJvbWUgdHJhY2tzIHRoZSBiYW5kKSDilIDilIDilIBcbiAgIFR3byBtb2RlcyBmcm9tIG9uZSByZW5kZXJlcjogYSBQSE9UTyBjYXJkIChiYWRnZSBvdmVyIGltYWdlICsgd2hvbGUtY2FyZFxuICAgbGluaykgd2hlbiBhIHBob3RvIGlzIHVwbG9hZGVkLCBhbmQgYSBmbGF0IFRFWFQgY2FyZCAoZ29sZCB0b3AgcnVsZSkgd2hlblxuICAgaXQgaXNuJ3QuIGF1dG8tZml0IHNvIE4gaXRlbXMgZmlsbCB0aGUgcm93IHJhdGhlciB0aGFuIGxlYXZpbmcgZW1wdHkgdHJhY2tzLiAqL1xuLnByb2dyYW1zLWdyaWQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI2MHB4LCAxZnIpKTtcblx0Z2FwOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnByb2dyYW0tY2FyZCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiB2YXIoLS1iYW5kLWNhcmQtYm9yZGVyLXcsIDFweCkgc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym94LXNoYWRvdzogdmFyKC0tYmFuZC1jYXJkLXNoYWRvdywgbm9uZSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0dHJhbnNpdGlvbjogYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5wcm9ncmFtLWNhcmQ6aG92ZXIge1xuXHRib3gtc2hhZG93OiB2YXIoLS1iYW5kLWNhcmQtc2hhZG93LWhvdmVyLCB2YXIoLS1zaGFkb3ctbWQpKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4vKiB0ZXh0IGNhcmQ6IGdvbGQgdG9wIHJ1bGUgKyBwYWRkZWQgYm9keSAobWVkaWEgY2FyZCBwYWRzIC5wcm9ncmFtLWJvZHkgaW5zdGVhZCkgKi9cbi5wcm9ncmFtLWNhcmQ6bm90KC5wcm9ncmFtLWNhcmQtLW1lZGlhKSB7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIHBob3RvIGhlYWRlciAqL1xuLnByb2dyYW0taW1nIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRhc3BlY3QtcmF0aW86IDQvMztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4ucHJvZ3JhbS1pbWcgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ucHJvZ3JhbS1vdmVybGF5IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAyNiwgNTEsIDAuNCksIHRyYW5zcGFyZW50IDQ1JSk7XG59XG5cbi5wcm9ncmFtLWJhZGdlIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiB2YXIoLS1zcGFjZS00KTtcblx0Ym90dG9tOiB2YXIoLS1zcGFjZS00KTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGxldHRlci1zcGFjaW5nOiAwLjFlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xuXHRiYWNrZ3JvdW5kOiByZ2JhKDAsIDI2LCA1MSwgMC44Mik7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTEpIHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG59XG5cbi5wcm9ncmFtLWJvZHkge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRmbGV4OiAxO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcbn1cblxuLnByb2dyYW0ta2lja2VyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjFlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnByb2dyYW0tbmFtZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteGwpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG59XG5cbi5wcm9ncmFtLW5hbWUgYSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5wcm9ncmFtLW5hbWUgYTpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnByb2dyYW0tY2FyZC0tbWVkaWE6aG92ZXIgLnByb2dyYW0tbmFtZSB7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWxpZ2h0KTtcbn1cblxuLnByb2dyYW0tZGVzYyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bGluZS1oZWlnaHQ6IDEuNjtcblx0ZmxleDogMTtcbn1cblxuLnByb2dyYW0tbGluayB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTQpO1xuXHRhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnByb2dyYW0tbGluazpob3ZlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogb3B0aW9uYWwgc2VjdGlvbi1oZWFkZXIgQ1RBIGJ1dHRvbiAobGVhZGluZyBoZWFkZXIgY2FyZCdzIGxpbmspICovXG4uc2VjdGlvbi1oZWFkLWN0YSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiBtZWRpYS1jYXJkIENUQSDigJQgZ29sZCBtb25vIGN1ZSB3aXRoIGEgbnVkZ2luZyBjaGV2cm9uICovXG4ucHJvZ3JhbS1jdGEge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5wcm9ncmFtLWN0YSBzdmcge1xuXHR3aWR0aDogMTNweDtcblx0aGVpZ2h0OiAxM3B4O1xuXHRmaWxsOiBub25lO1xuXHRzdHJva2U6IGN1cnJlbnRDb2xvcjtcblx0c3Ryb2tlLXdpZHRoOiAyLjU7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5wcm9ncmFtLWNhcmQtLW1lZGlhOmhvdmVyIC5wcm9ncmFtLWN0YSBzdmcge1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoM3B4KTtcbn1cblxuLyog4pSA4pSA4pSAIGNvbC1xdW90ZSDCtyBpbXBhY3QgcHVsbC1xdW90ZSAob24gdGhlIGJhbmQpIOKUgOKUgOKUgCAqL1xuLmltcGFjdC1xdW90ZSB7XG5cdG1heC13aWR0aDogNzYwcHg7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmltcGFjdC1xdW90ZSBibG9ja3F1b3RlIHtcblx0Ym9yZGVyOiAwO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tdGV4dC14bCksIDMuNXZ3LCB2YXIoLS10ZXh0LTN4bCkpO1xuXHRsaW5lLWhlaWdodDogMS4zNTtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG4uaW1wYWN0LXF1b3RlIGJsb2NrcXVvdGUgcCB7XG5cdG1hcmdpbjogMDtcbn1cblxuLmltcGFjdC1xdW90ZSBibG9ja3F1b3RlIHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5pbXBhY3QtcXVvdGUgYmxvY2txdW90ZTo6YmVmb3JlIHtcblx0Y29udGVudDogXCLigJxcIjtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtc2l6ZTogM3JlbTtcblx0bGluZS1oZWlnaHQ6IDAuNjtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLmltcGFjdC1xdW90ZSBmaWdjYXB0aW9uIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xufVxuXG4uaW1wYWN0LWNpdGUtbmFtZSB7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLmltcGFjdC1jaXRlLXJvbGUge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdG1hcmdpbi10b3A6IDJweDtcbn1cblxuLyog4pSA4pSA4pSAIGNvbC1pbnRybyDCtyBzcGxpdCBjb3B5ICsgaW1hZ2UgY29sbGFnZSAob24gdGhlIGJhbmQpIOKUgOKUgOKUgCAqL1xuLmludHJvLXNwbGl0IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEwKTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmludHJvLXNwbGl0ID4gLmludHJvLWNvcHk6b25seS1jaGlsZCB7XG5cdGdyaWQtY29sdW1uOiAxLy0xO1xufSAvKiBubyBpbWFnZXMg4oaSIGNvcHkgc3BhbnMgZnVsbCB3aWR0aCAqL1xuLmludHJvLXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogY2xhbXAodmFyKC0tdGV4dC0yeGwpLCAzLjJ2dywgdmFyKC0tdGV4dC0zeGwpKTtcblx0bGluZS1oZWlnaHQ6IDEuMTU7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWFjY2VudCwgdmFyKC0tYXUtbmF2eSkpO1xuXHRmb250LXdlaWdodDogNDAwO1xufVxuXG4vKiBtdXRlZCB3aGl0ZSBleWVicm93IHNvIHRoZSBnb2xkIGhlYWRsaW5lIGxlYWRzIChvdmVycmlkZXMgdGhlIGJhbmQncyBnb2xkKSAqL1xuLmludHJvLWNvcHkgLnNlY3Rpb24tbGFiZWwge1xuXHRtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbn1cblxuLmludHJvLWJvZHkge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjg7XG59XG5cbi5pbnRyby1ib2R5IHAgKyBwIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5pbnRyby1jdGFzIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLyogZ2hvc3QgYnV0dG9uIG9uIHRoZSAoZGFyaykgaW50cm8gYmFuZDogdHJhbnNsdWNlbnQgb3V0bGluZSwgZ29sZCBvbiBob3ZlciAqL1xuLmludHJvLWN0YXMgLmJ0bi1naG9zdCB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzIpO1xufVxuXG4uaW50cm8tY3RhcyAuYnRuLWdob3N0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLmludHJvLW1lZGlhIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uaW50cm8taW1nIHtcblx0bWFyZ2luOiAwO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRhc3BlY3QtcmF0aW86IDQvMztcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4uaW50cm8taW1nIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4uaW50cm8taW1nLXdpZGUge1xuXHRncmlkLWNvbHVtbjogc3BhbiAyO1xuXHRhc3BlY3QtcmF0aW86IDE2Lzc7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA4MjBweCkge1xuXHQuaW50cm8tc3BsaXQge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBjb2wtY2FyZWVycyDCtyBzYWxhcnkgY2FyZHMgKHRyYW5zbHVjZW50IG9uIGRhcmsg4oaSIHRleHQgdHJhY2tzIHRoZSBiYW5kKSDilIDilIDilIAgKi9cbi5jYXJlZXItZ3JpZCB7XG5cdGRpc3BsYXk6IGdyaWQ7XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjYwcHgsIDFmcikpO1xuXHRnYXA6IHZhcigtLXNwYWNlLTUpO1xufVxuXG4vKiBlYWNoIGNhcmQgaXMgYSAyLXJvdyBzdWJncmlkIChoZWFkIC8gYm9keSkgc2hhcmluZyB0aGUgZ3JpZCdzIHJvdyB0cmFja3MsIHNvXG4gICB0aGUgdGl0bGUgcm93IHNpemVzIHRvIHRoZSB0YWxsZXN0IHRpdGxlIGluIHRoZSByb3cg4oCUIHRpdGxlcyBjb2xsYXBzZSB0byBvbmVcbiAgIGxpbmUgdG9nZXRoZXIgd2hlbiBub25lIHdyYXAsIGFuZCBhbGlnbiB3aGVuIG9uZSBkb2VzLiBUaGUgcm93IEdBUCBiZXR3ZWVuXG4gICBoZWFkIGFuZCBib2R5IGlzIHRoZSBncmlkJ3Mgb3duIGdhcCAoc3BhY2UtNSkuICovXG4uY2FyZWVyLWNhcmQge1xuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLXJvd3M6IHN1YmdyaWQ7XG5cdGdyaWQtcm93OiBzcGFuIDI7XG5cdGJhY2tncm91bmQ6IHZhcigtLWJhbmQtY2FyZC1iZywgdmFyKC0tYXUtd2hpdGUpKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYmFuZC1jYXJkLWJvcmRlciwgdmFyKC0tYXUtZ3JheS0yMDApKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5jYXJlZXItZGVnIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWV5ZWJyb3csIHZhcigtLWF1LWdvbGQpKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5jYXJlZXItdGl0bGUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWJhbmQtaGVhZGluZywgdmFyKC0tYXUtbmF2eSkpO1xuXHRsaW5lLWhlaWdodDogMS4yO1xufVxuXG4vKiBPbmUgdGV4dCBhcmVhIGhvbGRzIHNhbGFyeSArIHNvdXJjZSArIGJsdXJiOyB0aGUgZWRpdG9yIG1hcmtzIHRoZW0gdXAgYW5kIHRoZVxuICAgY2FyZCBzdHlsZXMgdGhlbSB0byB0aGUgbW9ja3VwOlxuICAgICA8c3Ryb25nPiAoaXRzIG93biBsaW5lKSAg4oaSIHRoZSBzYWxhcnkgZmlndXJlOiBiaWcgZ29sZCBkaXNwbGF5IG51bWJlclxuICAgICA8ZW0+ICAgICAgKGl0cyBvd24gbGluZSkg4oaSIHRoZSBzb3VyY2UgbGluZTogdXBwZXJjYXNlIGNhcHMgKyBhIGhhaXJsaW5lIHVuZGVyIGl0XG4gICAgIHBsYWluIHBhcmFncmFwaChzKSAgICAgICDihpIgdGhlIGRlc2NyaXB0aW9uXG4gICBUaGUgYmlnLXNhbGFyeSB0cmVhdG1lbnQgaXMgc2NvcGVkIHRvIHRoZSBGSVJTVCBsaW5lLCBzbyBhbiBpbmxpbmUgYm9sZCBpbnNpZGVcbiAgIHRoZSBkZXNjcmlwdGlvbiBzdGF5cyBub3JtYWwuICovXG4uY2FyZWVyLWRlc2Mge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcblx0bGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLmNhcmVlci1kZXNjIHAge1xuXHRtYXJnaW46IDA7XG59XG5cbi5jYXJlZXItZGVzYyBwICsgcCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uY2FyZWVyLWRlc2MgcDpmaXJzdC1jaGlsZCBzdHJvbmcsIC5jYXJlZXItZGVzYyBwOmZpcnN0LWNoaWxkIGIge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC0yeGwpO1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1hY2NlbnQsIHZhcigtLWF1LWdvbGQpKTtcbn1cblxuLmNhcmVlci1kZXNjIGVtLCAuY2FyZWVyLWRlc2MgaSB7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi5jYXJlZXItZGVzYyBwOmhhcyhlbSksIC5jYXJlZXItZGVzYyBwOmhhcyhpKSB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iYW5kLWhhaXJsaW5lLCB2YXIoLS1hdS1ncmF5LTIwMCkpO1xuXHRwYWRkaW5nLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4vKiDilIDilIDilIAgY29sLW1lZGlhIMK3IG92ZXJsYXkgY2FyZHMsIGhvdmVyLXJldmVhbCAoc2VsZi1jb250YWluZWQ7IGJhbmQtYWdub3N0aWMpIOKUgOKUgOKUgCAqL1xuLmNvbC1tZWRpYSAuc2VjdGlvbi1oZWFkIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtOCk7XG59IC8qIHRpZ2h0ZXIgaGVhZOKGkmNhcmRzIGdhcCB0aGFuIHRoZSA2NHB4IGRlZmF1bHQgKi9cbi5tZWRpYS1ncmlkIHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMjBweCwgMWZyKSk7XG5cdGdhcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5tZWRpYS1jYXJkIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBibG9jaztcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcblx0YXNwZWN0LXJhdGlvOiA0LzM7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWF1LW5hdnkpLCB2YXIoLS1hdS1uYXZ5LWxpZ2h0KSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLm1lZGlhLWNhcmQgaW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0b2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5tZWRpYS1vdmVybGF5IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAyNiwgNTEsIDAuOSkgMCUsIHJnYmEoMCwgMjYsIDUxLCAwLjEpIDYwJSk7XG59XG5cbi5tZWRpYS1jb250ZW50IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiAwO1xuXHRyaWdodDogMDtcblx0Ym90dG9tOiAwO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuLm1lZGlhLWV5ZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRsZXR0ZXItc3BhY2luZzogMC4xZW07XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0bWFyZ2luLWJvdHRvbTogMnB4O1xufVxuXG4ubWVkaWEtbmFtZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4ubWVkaWEtZGVzYyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTtcblx0bGluZS1oZWlnaHQ6IDEuNTU7XG5cdG1heC1oZWlnaHQ6IDA7XG5cdG9wYWNpdHk6IDA7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHRyYW5zaXRpb246IG1heC1oZWlnaHQgdmFyKC0tZHVyYXRpb24tc2xvdykgdmFyKC0tZWFzZS1vdXQpLCBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLm1lZGlhLWNhcmQ6aG92ZXIgLm1lZGlhLWRlc2MsIC5tZWRpYS1jYXJkOmZvY3VzLXZpc2libGUgLm1lZGlhLWRlc2Mge1xuXHRtYXgtaGVpZ2h0OiA4cmVtO1xuXHRvcGFjaXR5OiAxO1xufVxuXG5AbWVkaWEgKGhvdmVyOiBub25lKSB7XG5cdC5tZWRpYS1kZXNjIHtcblx0XHRtYXgtaGVpZ2h0OiA4cmVtO1xuXHRcdG9wYWNpdHk6IDE7XG5cdH1cbn1cbi8qIOKUgOKUgOKUgCBjb2wtcHJvZmlsZSDCtyBmZWF0dXJlZCBwZXJzb24gc3BsaXQgKG9uIHRoZSBiYW5kKSDilIDilIDilIAgKi9cbi5wcm9maWxlLXNwbGl0IHtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTEwKTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmNvbC1wcm9maWxlLmZsaXAgLnByb2ZpbGUtbWVkaWEge1xuXHRvcmRlcjogMjtcbn0gLyogaW1hZ2UgdG8gdGhlIHJpZ2h0ICovXG4ucHJvZmlsZS1tZWRpYSB7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGFzcGVjdC1yYXRpbzogNC81O1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5wcm9maWxlLW1lZGlhIGltZyB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xufVxuXG4ucHJvZmlsZS1jb3B5IC5zZWN0aW9uLWxhYmVsIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5wcm9maWxlLW5hbWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LTJ4bCksIDR2dywgdmFyKC0tdGV4dC0zeGwpKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGluZS1oZWlnaHQ6IDEuMTU7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcbn1cblxuLnByb2ZpbGUtY3JlZCB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTEpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLnByb2ZpbGUtYmlvIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWJvZHksIHZhcigtLWF1LXdhcm0tZ3JheSkpO1xuXHRsaW5lLWhlaWdodDogMS44O1xufVxuXG4ucHJvZmlsZS1iaW8gcCArIHAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogY3JlZGVudGlhbCBzdWItbGluZSDigJQgYW4gaXRhbGljIGZpcnN0IGxpbmUgaW4gdGhlIGJpbyBjb250ZW50IChjYXJlZXJzLXN0eWxlXG4gICBtYXJrdXApOiByZW5kZXJzIHNtYWxsLCBsaWdodCBhbmQgdXByaWdodCwgaHVnZ2luZyB0aGUgbmFtZS4gKi9cbi5wcm9maWxlLWJpbzpoYXMoPiBwOmZpcnN0LWNoaWxkIGVtKSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZmlsZS1iaW8gPiBwOmZpcnN0LWNoaWxkIGVtIHtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuXHRjb2xvcjogdmFyKC0tYmFuZC1ib2R5LCB2YXIoLS1hdS13YXJtLWdyYXkpKTtcbn1cblxuLnByb2ZpbGUtYmlvIGJsb2NrcXVvdGUge1xuXHRjb2xvcjogdmFyKC0tYmFuZC1xdW90ZSwgdmFyKC0tYXUtbmF2eSkpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogODIwcHgpIHtcblx0LnByb2ZpbGUtc3BsaXQge1xuXHRcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuXHRcdGdhcDogdmFyKC0tc3BhY2UtNik7XG5cdH1cblx0LmNvbC1wcm9maWxlLmZsaXAgLnByb2ZpbGUtbWVkaWEge1xuXHRcdG9yZGVyOiAwO1xuXHR9XG59XG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIHByb2dyYW1zLmNzcyAgwrcgIHByb2dyYW0gZXhwbG9yZXIgKHNlYXJjaCArIGZpbHRlcnMgKyBzaG93LWFsbClcbiAgIERlcGVuZHMgb246IHRva2Vucy5jc3MsIGxheW91dC5jc3MgKC0tYmFuZC0qIHRva2VucyksIHZhcmlhbnRzLmNzc1xuICAgKC5wcm9ncmFtcy1ncmlkIC8gLnByb2dyYW0tY2FyZCDigJQgdGhlIGNhcmRzIGFyZSB0aGUgY29sLXByb2dyYW1zIGNhcmRzKVxuICAgTWFya3VwOiBjb21wb25lbnRzL3Byb2dyYW1zX2V4cGxvcmVyLnR0IMK3IGJlaGF2aW91cjoganMvcHJvZ3JhbXMuanNcbiAgIFJlYWRzIHRoZSBiYW5kIHRva2Vucywgc28gaXQgd29ya3Mgb24gd2hpdGUsIGNyZWFtIG9yIG5hdnkgYmFuZHMuXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5wcm9ncmFtcy10b29scyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4vKiBzZWFyY2gg4oCUIGljb24gaW5zaWRlIHRoZSBmaWVsZCAqL1xuLnByb2dyYW1zLXNlYXJjaCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0bWF4LXdpZHRoOiA1NjBweDtcbn1cblxuLnByb2dyYW1zLXNlYXJjaCBzdmcge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IHZhcigtLXNwYWNlLTQpO1xuXHR0b3A6IDUwJTtcblx0d2lkdGg6IDE4cHg7XG5cdGhlaWdodDogMThweDtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuXHRmaWxsOiBub25lO1xuXHRzdHJva2U6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdHN0cm9rZS13aWR0aDogMi41O1xuXHRzdHJva2UtbGluZWNhcDogcm91bmQ7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4ucHJvZ3JhbXMtc2VhcmNoIC5pbnB1dCB7XG5cdHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1zcGFjZS00KSArIDI4cHgpO1xuXHRib3JkZXItY29sb3I6IHZhcigtLWJhbmQtaGFpcmxpbmUsIHZhcigtLWF1LWdyYXktMjAwKSk7XG59XG5cbi5wcm9ncmFtcy1zZWFyY2ggLmlucHV0OmZvY3VzIHtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLyogZmlsdGVyIGNoaXBzICsgYXJlYS1vZi1zdHVkeSBzZWxlY3Qgc2hhcmUgb25lIGxvb2sgKi9cbi5wcm9ncmFtcy1maWx0ZXJzIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZ3JhbXMtY2hpcCxcbi5wcm9ncmFtcy1maWVsZCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC41cHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJhbmQtaGFpcmxpbmUsIHZhcigtLWF1LWdyYXktMzAwKSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtNCk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpLCBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWZhc3QpLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KTtcbn1cblxuLnByb2dyYW1zLWNoaXA6aG92ZXIsXG4ucHJvZ3JhbXMtZmllbGQ6aG92ZXIge1xuXHRib3JkZXItY29sb3I6IHZhcigtLWJhbmQtYWNjZW50LCB2YXIoLS1hdS1uYXZ5KSk7XG59XG5cbi5wcm9ncmFtcy1jaGlwW2FyaWEtcHJlc3NlZD10cnVlXSxcbi5wcm9ncmFtcy1maWVsZC5pcy1hY3RpdmUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi5wcm9ncmFtcy1jaGlwOmZvY3VzLXZpc2libGUsXG4ucHJvZ3JhbXMtZmllbGQ6Zm9jdXMtdmlzaWJsZSB7XG5cdG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0b3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLnByb2dyYW1zLWZpZWxkIHtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0cGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS1zcGFjZS00KSArIDE2cHgpO1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyM0M2OTUyQicgc3Ryb2tlLXdpZHRoPSczJyUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nNiA5IDEyIDE1IDE4IDknLyUzRSUzQy9zdmclM0VcIik7XG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IHZhcigtLXNwYWNlLTMpIGNlbnRlcjtcblx0YmFja2dyb3VuZC1zaXplOiAxMnB4O1xufVxuXG4ucHJvZ3JhbXMtZmllbGQgb3B0aW9uIHtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4ucHJvZ3JhbXMtc3RhdHVzIHtcblx0bWluLWhlaWdodDogMS41ZW07XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi8qIHRoZSBzaGVldCdzIGltYWdlcyBhcmUgd2lkZSBiYW5uZXJzIOKAlCBhIHdpZGVyIGNyb3AgdGhhbiBjb2wtcHJvZ3JhbXMnIDQ6MyAqL1xuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtLWltZyB7XG5cdGFzcGVjdC1yYXRpbzogMTYvOTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLyogb3V0IG9mIGZsb3cgc28gYSBwb3J0cmFpdCBwaG90byAodGhlIGdyYWQgcGFnZXMnIHRhbGxfaW1hZ2UpIGNhbid0IHN0cmV0Y2ggdGhlIGZyYW1lICovXG4ucHJvZ3JhbXMtZXhwbG9yZXIgLnByb2dyYW0taW1nIGltZyB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0aW5zZXQ6IDA7XG59XG5cbi8qIHBvcnRyYWl0IHNvdXJjZXM6IGEgY2VudHJlZCAxNjo5IHNsaWNlIGxhbmRzIG9uIGNoZXN0cyDigJQgZmF2b3VyIHRoZSB1cHBlclxuICAgcGFydCBvZiB0aGUgZnJhbWUsIHdoZXJlIHRoZSBmYWNlcyBhcmUgKi9cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1pbWctLXRhbGwgaW1nIHtcblx0b2JqZWN0LXBvc2l0aW9uOiA1MCUgMjIlO1xufVxuXG4ucHJvZ3JhbXMtZXhwbG9yZXIgLnByb2dyYW0tYmFkZ2Uge1xuXHRtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiB2YXIoLS1zcGFjZS00KSk7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1jYXJkW2hpZGRlbl0ge1xuXHRkaXNwbGF5OiBub25lO1xufVxuXG4ucHJvZ3JhbS10YWdzIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0zKSAwIDA7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnByb2dyYW0tdGFnIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhzKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSk7XG5cdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHRwYWRkaW5nOiAycHggdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5wcm9ncmFtLXRhZy0tYWNjZWwge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1wYWxlKTtcblx0Ym9yZGVyLWNvbG9yOiByZ2JhKDE5OCwgMTQ5LCA0MywgMC4zNSk7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1ib2R5IHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbS1jdGEge1xuXHRtYXJnaW4tdG9wOiBhdXRvO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wcm9ncmFtcy1lbXB0eSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIDA7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Y29sb3I6IHZhcigtLWJhbmQtYm9keSwgdmFyKC0tYXUtd2FybS1ncmF5KSk7XG59XG5cbi5wcm9ncmFtcy1lbXB0eSBhIHtcblx0Y29sb3I6IHZhcigtLWJhbmQtbGluaywgdmFyKC0tYXUtbmF2eS1saWdodCkpO1xufVxuXG4ucHJvZ3JhbXMtYWN0aW9ucyB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4vKiBvdXRsaW5lIGJ1dHRvbiB0aGF0IHJlYWRzIG9uIGEgZGFyayBiYW5kIHRvbyAqL1xuLnByb2dyYW1zLWV4cGxvcmVyIC5wcm9ncmFtcy1hbGwtbGluayB7XG5cdGNvbG9yOiB2YXIoLS1iYW5kLWhlYWRpbmcsIHZhcigtLWF1LW5hdnkpKTtcblx0Ym9yZGVyLWNvbG9yOiBjdXJyZW50Q29sb3I7XG59XG5cbi5wcm9ncmFtcy1leHBsb3JlciAucHJvZ3JhbXMtYWxsLWxpbms6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLnByb2dyYW1zLWV4cGxvcmVyW2NsYXNzKj1zZWN0aW9uLS1uYXZ5XSAucHJvZ3JhbXMtYWxsLWxpbms6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1kZWVwKTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG5cdC8qIGNoaXBzIHNjcm9sbCBzaWRld2F5cyBpbnN0ZWFkIG9mIHN0YWNraW5nIGZvdXIgcm93cyBkZWVwICovXG5cdC5wcm9ncmFtcy1maWx0ZXJzIHtcblx0XHRmbGV4LXdyYXA6IG5vd3JhcDtcblx0XHRvdmVyZmxvdy14OiBhdXRvO1xuXHRcdHBhZGRpbmc6IDJweCAwO1xuXHRcdHNjcm9sbGJhci13aWR0aDogbm9uZTtcblx0fVxuXHQucHJvZ3JhbXMtZmlsdGVyczo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblx0LnByb2dyYW1zLWNoaXAsIC5wcm9ncmFtcy1maWVsZCB7XG5cdFx0ZmxleDogMCAwIGF1dG87XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgcHJvZ3JhbSBwYWdlcyAgwrcgIHRlbXBsYXRlcy91bmRlcmdyYWRfcHJvZ3JhbS5kdFxuICAgKC91bmRlcmdyYWQvYWNhZGVtaWNzL3Byb2dyYW1zLzxuYW1lPi8pXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5wcm9ncmFtLWxlYWQge1xuXHRtYXgtd2lkdGg6IDUycmVtO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiBjbGFtcCh2YXIoLS10ZXh0LWxnKSwgMXJlbSArIDEuNnZ3LCB2YXIoLS10ZXh0LTJ4bCkpO1xuXHRsaW5lLWhlaWdodDogMS40O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5wcm9ncmFtLXZpZGVvIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG5cdG1heC13aWR0aDogNjByZW07XG59XG5cbi5wcm9ncmFtLXdoeSAuYnRuLXJvdyB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTYpO1xufVxuXG4vKiBvbmUgbWFpbiBDVEEgbWlkLXBhZ2U6IGNlbnRlcmVkLCBpdHMgbmF0dXJhbCB3aWR0aCAqL1xuLnByb2dyYW0tYXBwbHkge1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnByb2dyYW0tYXBwbHkgPiAuYnRuIHtcblx0ZmxleDogMCAwIGF1dG87XG59XG5cbi8qIHN1YmhlYWRpbmdzIHNpdCBhIGNsZWFyIHN0ZXAgYmVsb3cgdGhlIHNlY3Rpb24gdGl0bGVzICovXG4ucHJvZ3JhbS1wYWdlIC5zZWN0aW9uLWlubmVyIGgzIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZ3JhbS1wYWdlIC5wcm9ncmFtLWFsdW1uaSBoMyB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIGxlYXJuLW1vcmUgbGlua3M6IHRoZWlyIG5hdHVyYWwgd2lkdGgsIHNpZGUgYnkgc2lkZSAqL1xuLnByb2dyYW0tbGVhcm4tbGlua3MgPiAuYnRuIHtcblx0ZmxleDogMCAwIGF1dG87XG59XG5cbi5wcm9ncmFtLWxlYXJuLWxpbmtzIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5wcm9ncmFtLWxlYXJuIC5zZWN0aW9uLXRpdGxlIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIGFsdW1uaTogYSBnb2xkIHJ1bGUgb3ZlciBlYWNoIG5hbWUgKi9cbi5wcm9ncmFtLWFsdW1uaSAuY2FyZCB7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogMDtcbn1cblxuLnByb2dyYW0tYWx1bW5pIC5jYXJkID4gLmNhcmQtYm9keSB7XG5cdHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogc2FsYXJ5IGJhcnM6IC0tdyBpcyBzZXQgaW5saW5lIGZyb20gdGhlIHNhbGFyeSdzIHNoYXJlIG9mIHRoZSBsYXJnZXN0ICovXG4uc2FsYXJ5LWJhcnMge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTMpIDAgMDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogZ3JpZDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKTtcbn1cblxuLnNhbGFyeS1iYXJzIGxpIHtcblx0d2lkdGg6IHZhcigtLXcsIDEwMCUpO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTIpIHZhcigtLXNwYWNlLTMpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5KTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcbn1cblxuLnNhbGFyeS1hbW91bnQge1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5zYWxhcnktbm90ZSB7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTMpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQteHMpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcbn1cblxuLnNhbGFyeS1ub3RlIHAge1xuXHRtYXJnaW46IDA7XG59XG5cbi8qIGNhcmVlciB3b3JkIGNsb3VkOiBqcXVlcnkuYXdlc29tZWNsb3VkIGRyYXdzIGludG8gdGhpcyBib3ggKi9cbi5wcm9ncmFtLXdvcmRjbG91ZCB7XG5cdGhlaWdodDogMzIwcHg7XG59XG5cbi8qIGZhY3RzOiBhIHRleHQgY2Fyb3VzZWwsIG9uZSBmYWN0IGF0IGEgdGltZSAqL1xuLmNhcm91c2VsLS10ZXh0IHtcblx0YXNwZWN0LXJhdGlvOiBhdXRvO1xuXHRib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uY2Fyb3VzZWwtLXRleHQgLmNhcm91c2VsLXNsaWRlIHtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtMTIpIHZhcigtLXNwYWNlLTgpO1xufVxuXG4ucHJvZ3JhbS1mYWN0IHtcblx0bWF4LXdpZHRoOiA0NnJlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0bGluZS1oZWlnaHQ6IDEuNTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4ucHJvZ3JhbS1mYWN0IHAge1xuXHRtYXJnaW46IDA7XG59XG5cbi5jYXJvdXNlbC0tdGV4dCAuY2Fyb3VzZWwtYnRuIHtcblx0Ym94LXNoYWRvdzogbm9uZTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtbmF2eSk7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4uY2Fyb3VzZWwtLXRleHQgLmNhcm91c2VsLWJ0bjpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xufVxuXG4uY2Fyb3VzZWwtLXRleHQgLmNhcm91c2VsLWRvdHMge1xuXHRib3R0b206IDA7XG59XG5cbi5jYXJvdXNlbC0tdGV4dCAuY2Fyb3VzZWwtZG90IHtcblx0YmFja2dyb3VuZDogcmdiYSgwLCA1MSwgMTAyLCAwLjI1KTtcbn1cblxuLmNhcm91c2VsLS10ZXh0IC5jYXJvdXNlbC1kb3QuYWN0aXZlIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2NDBweCkge1xuXHQuY2Fyb3VzZWwtLXRleHQgLmNhcm91c2VsLXNsaWRlIHtcblx0XHRwYWRkaW5nLWlubGluZTogMDtcblx0fVxuXHQuY2Fyb3VzZWwtLXRleHQgLmNhcm91c2VsLWJ0biB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuLnByb2dyYW0tY3JlYXRpdmUtaW1nLFxuLnByb2dyYW0tbGVhcm4taW1nIHtcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG59XG5cbi5wcm9ncmFtLWNyZWF0aXZlIC52aWRlbyxcbi5wcm9ncmFtLWNyZWF0aXZlIC5jYXJvdXNlbCxcbi5wcm9ncmFtLWNyZWF0aXZlLWltZyB7XG5cdG1heC13aWR0aDogNjByZW07XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG59XG5cbi5wcm9ncmFtLWNyZWF0aXZlLWNhcHRpb24ge1xuXHRtYXgtd2lkdGg6IDQ2cmVtO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTQpIGF1dG8gMDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ucHJvZ3JhbS1jcmVhdGl2ZS1jYXB0aW9uIGgzIHtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi8qIGEgbGlzdCBpbiBhIGNlbnRlcmVkIGNhcHRpb24gKHByZW1lZCdzIG1lZGljYWwgc2Nob29scykg4oCUIGJhbGFuY2VkIGNvbHVtbnNcbiAgIHdpdGhvdXQgYnVsbGV0cywgd2hpY2ggd291bGQgc2l0IHN0cmFuZGVkIGF0IHRoZSBsZWZ0IG9mIGNlbnRlcmVkIHRleHQgKi9cbi5wcm9ncmFtLWNyZWF0aXZlLWNhcHRpb24gdWwge1xuXHRjb2x1bW5zOiAzIDEycmVtO1xuXHRjb2x1bW4tZ2FwOiB2YXIoLS1zcGFjZS02KTtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0cGFkZGluZzogMDtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wcm9ncmFtLWNyZWF0aXZlLWNhcHRpb24gbGkge1xuXHRicmVhay1pbnNpZGU6IGF2b2lkO1xufVxuXG4vKiBwaG9uZXMgYW5kIHNtYWxsIHRhYmxldHM6IHRoZSBwcm9ncmFtIGJhbm5lcnMgYXJlIDU6MiBwaG90b3MgY29tcG9zZWQgZm9yIGFcbiAgIHdpZGUgYmFuZCAoc3ViamVjdHMgb2ZmIHRvIHRoZSBzaWRlcywgYSBmZXcgd2l0aCBhIFwiTW9yZSBGb3IgTGVzc1wiIGJhZGdlIGluIHRoZVxuICAgY29ybmVyKS4gQ292ZXItY3JvcHBpbmcgdGhlbSB0byBhIG5lYXItc3F1YXJlIGhlcm8ga2VwdCBvbmx5IHRoZSBtaWRkbGUgNDAlLFxuICAgc28gc2hvdyB0aGUgd2hvbGUgcGhvdG8gYWNyb3NzIHRoZSB0b3AgYW5kIHB1dCB0aGUgdGl0bGUgb24gbmF2eSBiZWxvdyBpdC5cbiAgIFdpZGVyIHNjcmVlbnMgZ2V0IC5oZXJvLS1yYXRpbyAoc2V0IGluIHVuZGVyZ3JhZF9wcm9ncmFtLmR0KTogYSA1OjIgYmFuZCwgdGhlXG4gICB3aG9sZSBwaG90bywgdGl0bGUgb3ZlciBpdC4gKGJvZHkucHJvZ3JhbS1wYWdlID0gYm9keWNsYXNzIGluIHRoZSBkdCkgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkge1xuXHRib2R5LnByb2dyYW0tcGFnZSAuaGVybyB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0bWluLWhlaWdodDogMDtcblx0XHRhc3BlY3QtcmF0aW86IGF1dG87IC8qIHVuZG8gLmhlcm8tLXJhdGlvJ3MgNToyIGJveCwgd2hpY2ggd291bGQgY2xpcCB0aGUgdGl0bGUgKi9cblx0XHRwYWRkaW5nLXRvcDogNDAlO1xuXHRcdGJhY2tncm91bmQtc2l6ZTogMTAwJSBhdXRvO1xuXHRcdGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjZW50ZXI7XG5cdH1cblx0Ym9keS5wcm9ncmFtLXBhZ2UgLmhlcm86OmFmdGVyIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cdGJvZHkucHJvZ3JhbS1wYWdlIC5oZXJvLWlubmVyIHtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1ndXR0ZXIpIHZhcigtLXNwYWNlLTYpO1xuXHR9XG5cdGJvZHkucHJvZ3JhbS1wYWdlIC5oZXJvLXRpdGxlIHtcblx0XHR0ZXh0LXNoYWRvdzogbm9uZTtcblx0fVxufVxuLyogYXVkaW8uY3NzIMK3IGN1c3RvbSBhdWRpbyBwbGF5ZXIgc3R5bGVkIHRvIHRoZSBBVSBkZXNpZ24gc3lzdGVtXG4gICBNYXJrdXA6IFtkYXRhLWF1ZGlvXSB3cmFwcGluZyBhbiA8YXVkaW8+IGVsZW1lbnRcbiAgIEpTOiBqcy9hdWRpby5qcyBidWlsZHMgdGhlIFVJIGFuZCBzZWxmLWluaXRzIHZpYSBpbml0LmpzICovXG4uYXVkaW8tcGxheWVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG5cdG1heC13aWR0aDogNTQwcHg7XG5cdG1hcmdpbjogdmFyKC0tc3BhY2UtNSkgYXV0bztcblx0Ym94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5hdWRpby1wbGF5ZXItY29udHJvbHMge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uYXVkaW8tcGxheWVyLWJ0biB7XG5cdGZsZXg6IDAgMCBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0d2lkdGg6IDQ0cHg7XG5cdGhlaWdodDogNDRweDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KSwgY29sb3IgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpO1xuXHRwYWRkaW5nOiAwO1xufVxuXG4uYXVkaW8tcGxheWVyLWJ0bjpob3Zlcixcbi5hdWRpby1wbGF5ZXItYnRuOmZvY3VzLXZpc2libGUge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRvdXRsaW5lOiBub25lO1xufVxuXG4uYXVkaW8tcGxheWVyLWJ0biBzdmcge1xuXHR3aWR0aDogMThweDtcblx0aGVpZ2h0OiAxOHB4O1xuXHRmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbi5hdWRpby1wbGF5ZXItdHJhY2sge1xuXHRmbGV4OiAxIDEgYXV0bztcblx0bWluLXdpZHRoOiAwO1xufVxuXG4uYXVkaW8tcGxheWVyLXRpdGxlIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7XG5cdGZvbnQtc2l6ZTogMTBweDtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0bGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcblx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cGFkZGluZy1ib3R0b206IDRweDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5hdWRpby1wbGF5ZXItYmFyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRoZWlnaHQ6IDZweDtcblx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmF1ZGlvLXBsYXllci1iYXI6aG92ZXIge1xuXHRoZWlnaHQ6IDhweDtcbn1cblxuLmF1ZGlvLXBsYXllci1maWxsIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdGhlaWdodDogMTAwJTtcblx0d2lkdGg6IDAlO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuXHR0cmFuc2l0aW9uOiB3aWR0aCA4MG1zIGxpbmVhcjtcblx0cG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5hdWRpby1wbGF5ZXItdGltZSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG5cdGZvbnQtc2l6ZTogMTFweDtcblx0Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcblx0dXNlci1zZWxlY3Q6IG5vbmU7XG5cdHBhZGRpbmctdG9wOiAzcHg7XG5cdGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4uYXVkaW8tcGxheWVyLXZvbCB7XG5cdGZsZXg6IDAgMCBhdXRvO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uYXVkaW8tcGxheWVyLXZvbCBidXR0b24ge1xuXHRiYWNrZ3JvdW5kOiBub25lO1xuXHRib3JkZXI6IG5vbmU7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogZmxleDtcbn1cblxuLmF1ZGlvLXBsYXllci12b2wgYnV0dG9uOmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQtbGlnaHQpO1xufVxuXG4uYXVkaW8tcGxheWVyLXZvbCBzdmcge1xuXHR3aWR0aDogMThweDtcblx0aGVpZ2h0OiAxOHB4O1xuXHRmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAzODBweCkge1xuXHQuYXVkaW8tcGxheWVyIHtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKSB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQuYXVkaW8tcGxheWVyLWNvbnRyb2xzIHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTIpO1xuXHR9XG5cdC5hdWRpby1wbGF5ZXItYnRuIHtcblx0XHR3aWR0aDogMzZweDtcblx0XHRoZWlnaHQ6IDM2cHg7XG5cdH1cblx0LmF1ZGlvLXBsYXllci12b2wge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cbn1cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgY29tcGF0LmNzcyAgwrcgIGxlZ2FjeSBjb250ZW50IHBhdHRlcm5zIGluIGF1dGhvcmVkIHNlY3Rpb24gYm9kaWVzXG4gICBEZXBlbmRzIG9uOiB0b2tlbnMuY3NzXG4gICBDb3ZlcnMgdGhlIENUQSBiYXIsIEJvb3RzdHJhcCBncmlkIGNvbHVtbnMgaW4gY2FyZCBib2RpZXMsIGFuZFxuICAgbGVnYWN5IGZvbnQgcmVmZXJlbmNlcy4gVGhlc2UgcGF0dGVybnMgYXBwZWFyIGluIGhvbWVwYWdlLWFkdmFuY2VkXG4gICBib2RpZXMgdGhhdCBjYW4ndCBiZSBzYWZlbHkgcm91bmQtdHJpcHBlZCB0aHJvdWdoIGNtc19lZGl0LlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4vKiDilIDilIAgQm9vdHN0cmFwIGdyaWQg4oaSIGZsZXgg4pSA4pSAXG4gICBBdXRob3JlZCBjYXJkIGJvZGllcyB1c2luZyAucm93ICsgLmNvbC0qIGdldCBhIHNpbXBsZSBmbGV4IGxheW91dC5cbiAgIENvdmVycyB0aGUgV2VsY29tZSBpbnRybyAoOC80IHRleHQraW1hZ2Ugc3BsaXQpIGFuZCBhbnkgc2ltaWxhclxuICAgbGVnYWN5IHR3by0gb3IgdGhyZWUtY29sdW1uIGJvZHkuICovXG4uY2FyZC10ZXh0ID4gLnJvdyxcbi5jYXJkLXRleHQgPiBkaXYgPiAucm93IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xuXHRhbGlnbi1pdGVtczogY2VudGVyOyAvKiB0ZXh0IGJlc2lkZSBhbiBpbWFnZSBzaXRzIGNlbnRyZWQgb24gaXQsIGxpa2UgdGhlIHNwbGl0IHRva2VucyAqL1xufVxuXG4uY2FyZC10ZXh0IFtjbGFzcyo9Y29sLW1kLThdLFxuLmNhcmQtdGV4dCBbY2xhc3MqPWNvbC1tZC03XSB7XG5cdGZsZXg6IDIgMSA0MDBweDtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4uY2FyZC10ZXh0IFtjbGFzcyo9Y29sLW1kLTRdLFxuLmNhcmQtdGV4dCBbY2xhc3MqPWNvbC1tZC01XSB7XG5cdGZsZXg6IDEgMSAyNDBweDtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4uY2FyZC10ZXh0IFtjbGFzcyo9Y29sLW1kLTZdIHtcblx0ZmxleDogMSAxIDMwMHB4O1xuXHRtaW4td2lkdGg6IDA7XG59XG5cbi5jYXJkLXRleHQgW2NsYXNzKj1jb2wtbWQtMTJdIHtcblx0ZmxleDogMSAxIDEwMCU7XG59XG5cbi8qIDQtYWNyb3NzIGdyaWQgKENUQSBiYXIpOiBjYXJkLXRleHQgd2l0aCBjb2wtbGctMyBjaGlsZHJlbiAqL1xuLmNhcmQtdGV4dDpoYXMoPiBbY2xhc3MqPWNvbC1sZy0zXSkge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuXG4uY2FyZC10ZXh0ID4gW2NsYXNzKj1jb2wtbGctM10ge1xuXHRmbGV4OiAxIDEgMjAwcHg7XG5cdG1pbi13aWR0aDogMDtcblx0ZGlzcGxheTogZmxleDtcbn1cblxuLyog4pSA4pSAIENUQSB3aWRnZXQg4pSA4pSAXG4gICA0LWFjcm9zcyBpY29uK2xhYmVsIGFjdGlvbiBibG9ja3Mgb24gaG9tZXBhZ2VzLiBMZWdhY3kgbWFya3VwIHVzZXNcbiAgIC5jdGEgKyAuY3RhLSogd2l0aCBJY29uU3dlZXRzLURlbHV4ZSBpY29uczsgcmVzdHlsZWQgZm9yIDIwMjcgd2l0aFxuICAgRkE3IGljb24gc3Vic3RpdHV0aW9uLiBVc2VzICFpbXBvcnRhbnQgdG8gd2luIG92ZXIgL2Nzcy9jdGEuY3NzLFxuICAgd2hpY2ggY3RhLXJvdy50dCBsb2FkcyBhcyBhIDxsaW5rPiBhZnRlciBpbmRleC5jc3MuICovXG4uY3RhIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XG5cdGdhcDogdmFyKC0tc3BhY2UtNCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKSAhaW1wb3J0YW50O1xuXHRib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLWF1LWdvbGQpICFpbXBvcnRhbnQ7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KSAhaW1wb3J0YW50O1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLCBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLmN0YTpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKSAhaW1wb3J0YW50O1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSk7XG59XG5cbi8qIGN0YS1yb3cudHQgd3JhcHMgZXZlcnl0aGluZyBpbiBPTkUgPGE+OyBhZG1pc3Npb25zIG1hcmt1cCB1c2VzIHNlcGFyYXRlIDxhPnMuXG4gICBIYW5kbGUgYm90aDogYSBkaXJlY3QtY2hpbGQgPGE+IHRoYXQgd3JhcHMgLmljb24gKyAuY3RhLXRpdGxlIGlzIHRoZSBjb250ZW50XG4gICB3cmFwcGVyLCBub3QgYSBzdHJldGNoZWQtbGluayBhbmNob3Ig4oCUIG1ha2UgaXQgZmxleCBhbmQgc3RyaXAgdW5kZXJsaW5lLlxuICAgY3RhLXJvdy1idXR0b25zLnR0IGFkZHMgY2xhc3M9XCJidG4gYnRuLWdyYXlcIiB0byB0aGUgc2FtZSA8YT47IG5ldXRyYWxpemVcbiAgIHRoYXQgYnV0dG9uIHN0eWxpbmcgc28gdGhlIGNhcmQgbG9vayB3aW5zLiAqL1xuLmN0YSA+IGEge1xuXHRkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMyk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXHRjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50O1xuXHR3aWR0aDogMTAwJTtcbn1cblxuLyogYWRtaXNzaW9ucyBtYXJrdXA6IHNlcGFyYXRlIDxhPiBpbnNpZGUgLmN0YS10aXRsZSDihpIga2VlcCBwb2ludGVyLWV2ZW50cyBub3JtYWwgKi9cbi5jdGEgPiBhOm9ubHktY2hpbGQge1xuXHRmbGV4OiAxO1xufVxuXG4vKiBjdGEtcm93LWJ1dHRvbnMudHQgYWRkcyAuYnRuLmJ0bi1ncmF5IHRvIHRoZSBhbmNob3Ig4oCUIHN0cmlwIGl0IGJhY2sgdG8gcGxhaW4gKi9cbi5jdGEgPiBhLmJ0biB7XG5cdGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuXHRmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDtcblx0Zm9udC13ZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDtcblx0bGV0dGVyLXNwYWNpbmc6IGluaGVyaXQgIWltcG9ydGFudDtcblx0dGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcblx0anVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XG59XG5cbi5jdGEgPiBhLmJ0bjpob3ZlciB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcblx0dHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG59XG5cbi8qIGljb24gcmVwbGFjZW1lbnQ6IEljb25Td2VldHMtRGVsdXhlIOKGkiBGQTcgUHJvICovXG4uY3RhIC5pY29uIHtcblx0ZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMCAhaW1wb3J0YW50O1xufVxuXG4uY3RhIC5pY29uIHNwYW4ge1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0d2lkdGg6IDEuNWVtO1xuXHRoZWlnaHQ6IDEuNWVtO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Y29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5jdGEgLmljb24gc3Bhbjo6YmVmb3JlIHtcblx0Zm9udC1mYW1pbHk6IFwiRm9udCBBd2Vzb21lIDcgUHJvXCI7XG5cdGZvbnQtd2VpZ2h0OiA5MDA7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14bCk7XG5cdGxpbmUtaGVpZ2h0OiAxO1xuXHRjb2xvcjogdmFyKC0tYXUtZ29sZCkgIWltcG9ydGFudDtcblx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG59XG5cbi5jdGEgLmljb24gLmljb24tc2FmYXJpOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlxcZjE0ZVwiO1xufVxuXG4uY3RhIC5pY29uIC5pY29uLWdsb2JlMjo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcXGYwYWNcIjtcbn1cblxuLmN0YSAuaWNvbiAuaWNvbi1haXJwbGFuZTo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcXGYwNzJcIjtcbn1cblxuLmN0YSAuaWNvbiAuaWNvbi13cml0ZTo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcXGYwNDRcIjtcbn1cblxuLmN0YSAuaWNvbiAuaWNvbi1pbmZvOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlxcZjA1YVwiO1xufVxuXG4uY3RhIC5pY29uIC5pY29uLWNhbGVuZGFyLWRheTo6YmVmb3JlIHtcblx0Y29udGVudDogXCJcXGY3ODNcIjtcbn1cblxuLmN0YSAuaWNvbiBhIHtcblx0ZGlzcGxheTogY29udGVudHM7XG59XG5cbi8qIGxhYmVsIOKAlCBzdHJpcCBjdGEuY3NzIGNvbG9yZWQgYmFja2dyb3VuZHMgKi9cbi5jdGEgLmN0YS10aXRsZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbWQpO1xuXHRsaW5lLWhlaWdodDogMS4zO1xuXHRmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xuXHRtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xuXHR0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSkgIWltcG9ydGFudDtcbn1cblxuLyogYWRtaXNzaW9ucyBtYXJrdXAgaGFzIDxhPiBpbnNpZGUgLmN0YS10aXRsZTsgY3RhLXJvdy50dCBoYXMgaXQgb3V0c2lkZSAqL1xuLmN0YSAuY3RhLXRpdGxlIGEge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmN0YSAuY3RhLXRpdGxlIGE6aG92ZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eS1saWdodCk7XG59XG5cbi5jdGEgLnRpdGxlIHtcblx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG5cdGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLyog4pSA4pSAIC5idG4gaW5zaWRlIC5ncmlkOiBrZWVwIG5hdHVyYWwgc2l6ZSwgZG9uJ3Qgc3RyZXRjaCBhcyBhIGdyaWQgY2VsbCDilIDilIBcbiAgIEF1dGhvcmVkIGNvbnRlbnQgc29tZXRpbWVzIHdyYXBzIHNpYmxpbmcgYnV0dG9ucyBpbiBhIDxkaXYgY2xhc3M9XCJncmlkXCI+LlxuICAgLmdyaWQgPiAqIG5vcm1hbGx5IGdldHMgZmxleDoxIDEgMjgwcHggKGNhcmQgd2lkdGgpLCB3aGljaCBzdHJldGNoZXMgZWFjaFxuICAgYnV0dG9uIHRvIGEgZnVsbCByb3cuIE92ZXJyaWRlIHNvIHRoZXkgc2l6ZSB0byB0aGVpciBvd24gY29udGVudCBhbmQgY2FuXG4gICBzaXQgc2lkZS1ieS1zaWRlLiAqL1xuLmNhcmQtdGV4dCAuZ3JpZCA+IC5idG4sXG4uY2FyZC1ib2R5IC5ncmlkID4gLmJ0biB7XG5cdGZsZXg6IDEgMSAwICFpbXBvcnRhbnQ7XG5cdHdpZHRoOiAwICFpbXBvcnRhbnQ7XG5cdG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xuXHRhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xufVxuXG4vKiDilIDilIAgcHVsbC1sZWZ0OiBuZXV0cmFsaXplIGluIGZsZXggY29udGV4dHMg4pSA4pSAICovXG4uY3RhIC5wdWxsLWxlZnQsXG4uY2FyZC10ZXh0IC5wdWxsLWxlZnQge1xuXHRmbG9hdDogbm9uZTtcbn1cblxuLyog4pSA4pSAIExlZ2FjeSBjdGEtcm93LnR0OiBzZWN0aW9uLmNvbHVtbnMgKyBCb290c3RyYXAgY29udGFpbmVyL3JvdyDilIDilIBcbiAgIFRoZSBzaGFyZWQgY3RhLXJvdy50dCBlbWl0cyA8c2VjdGlvbiBjbGFzcz1cImNvbHVtbnMgYmFja2dyb3VuZF9jb2xvcl8qXCI+XG4gICB3aXRoIGEgQm9vdHN0cmFwIC5jb250YWluZXIgPiAucm93ID4gLmNvbC1zbS1OIGdyaWQuIEdpdmUgdGhlIGJhbmRcbiAgIHRoZSByaWdodCBwYWRkaW5nL2JhY2tncm91bmQgYW5kIG1ha2UgdGhlIHJvdyBmbGV4LiAqL1xuc2VjdGlvbi5jb2x1bW5zIHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMTIpIHZhcigtLWd1dHRlcik7XG59XG5cbnNlY3Rpb24uY29sdW1uc1tjbGFzcyo9YmFja2dyb3VuZF9jb2xvcl9jYXJhcnJhLWdyYXldLFxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX3NlYXNoZWxsLWdyYXldLFxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX3N0b25lXSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXN0b25lKTtcbn1cblxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX2VjcnUtd2hpdGVdLFxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX2NyZWFtXSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcbn1cblxuc2VjdGlvbi5jb2x1bW5zW2NsYXNzKj1iYWNrZ3JvdW5kX2NvbG9yX25pbGUtYmx1ZV0sXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3JfZmlvcmQtYmx1ZV0sXG5zZWN0aW9uLmNvbHVtbnNbY2xhc3MqPWJhY2tncm91bmRfY29sb3JfY2hhdGhhbXMtYmx1ZV0ge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG5zZWN0aW9uLmNvbHVtbnMgLmNvbnRhaW5lciB7XG5cdG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuc2VjdGlvbi5jb2x1bW5zIC5jb250YWluZXIgPiAucm93IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRnYXA6IHZhcigtLXNwYWNlLTYpO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuc2VjdGlvbi5jb2x1bW5zIC5jb250YWluZXIgPiAucm93ID4gW2NsYXNzKj1jb2wtXSB7XG5cdGZsZXg6IDEgMSAyMDBweDtcblx0bWluLXdpZHRoOiAwO1xufVxuXG4vKiDilIDilIAgTGVnYWN5IHRocmVhZC50dDogdGhlIHByb2dyYW1zIGNhcm91c2VscyAoL3VuZGVyZ3JhZC9hY2FkZW1pY3MvKSDilIDilIBcbiAgIGNvZGUvdGVtcGxhdGVzL3RocmVhZC50dCBpcyBzaGFyZWQgd2l0aCB0aGUgbGl2ZSBzaXRlIGFuZCBicmluZ3MgaXRzIG93blxuICAgY2Fyb3VzZWwgQ1NTL0pTICh0aHJlYWQtc3R5bGUuY3NzLCBwcm9ncmFtcy10aHJlYWQuanMpOyBpdCBlbWl0c1xuICAgPHNlY3Rpb24gY2xhc3M9XCJwcm9ncmFtcy10aHJlYWQtc2VjdGlvbiBiYWNrZ3JvdW5kX2NvbG9yXypcIj4gKyBhIEJvb3RzdHJhcFxuICAgLmNvbnRhaW5lci8ucm93LiBSZXN0b3JlIHRoZSBsZWdhY3kgYmFuZCBhcm91bmQgaXQ6IHRoZSBkYXJrZXN0IG5hdnksIGdvbGRcbiAgIHNhbnMgaGVhZGluZ3MsIHRoZSBjbG9zZS10b3AvY2xvc2UtYm90dG9tIHNlYW1zIGJldHdlZW4gc3RhY2tlZCB0aHJlYWRzLiAqL1xuc2VjdGlvbi5wcm9ncmFtcy10aHJlYWQtc2VjdGlvbiB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0xMCkgdmFyKC0tZ3V0dGVyKTtcblx0LS1iYW5kLWhlYWRpbmc6IHZhcigtLWF1LXdoaXRlKTtcblx0LS1iYW5kLWJvZHk6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42Nik7XG59XG5cbnNlY3Rpb24ucHJvZ3JhbXMtdGhyZWFkLXNlY3Rpb24uY2xvc2UtdG9wIHtcblx0cGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTUpO1xufVxuXG5zZWN0aW9uLnByb2dyYW1zLXRocmVhZC1zZWN0aW9uLmNsb3NlLWJvdHRvbSB7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcbn1cblxuc2VjdGlvbi5wcm9ncmFtcy10aHJlYWQtc2VjdGlvbiAuY29udGFpbmVyIHtcblx0bWF4LXdpZHRoOiB2YXIoLS1tYXgtd2lkdGgpO1xuXHRtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG5zZWN0aW9uLnByb2dyYW1zLXRocmVhZC1zZWN0aW9uIGgyIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LTJ4bCk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi8qIGtlZXAgdGhlIGxlZ2FjeSBjYXJvdXNlbCdzIG93biBzbWFsbCBvdXRsaW5lIGJ1dHRvbnMgYW5kIHRpbGUgdHlwZSAodGhlIDIwMjdcbiAgIC5idG4gaXMgbGFyZ2VyLCB1cHBlcmNhc2UgYW5kIGZpbGxlZCkgKi9cbnNlY3Rpb24ucHJvZ3JhbXMtdGhyZWFkLXNlY3Rpb24gLmJ0biB7XG5cdHBhZGRpbmc6IDZweCAxMnB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdHRleHQtdHJhbnNmb3JtOiBub25lO1xuXHRsZXR0ZXItc3BhY2luZzogMDtcblx0Ym9yZGVyLXdpZHRoOiAxcHg7XG5cdG1pbi1oZWlnaHQ6IDA7XG59XG5cbnNlY3Rpb24ucHJvZ3JhbXMtdGhyZWFkLXNlY3Rpb24gLnRocmVhZC1leHBhbmQtYnV0dG9uIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcbn1cblxuc2VjdGlvbi5wcm9ncmFtcy10aHJlYWQtc2VjdGlvbiAudGhyZWFkLWV4cGFuZC1idXR0b246aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbnNlY3Rpb24ucHJvZ3JhbXMtdGhyZWFkLXNlY3Rpb24gLnByb2dyYW1zLXRpbGUtYm9keSBoNCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNhbnMpO1xuXHRmb250LXNpemU6IDE4cHg7XG5cdGNvbG9yOiAjZmZmO1xufVxuXG4vKiDilIDilIAgSW5saW5lIGRpc2Nsb3N1cmUgZW1iZWQgKHJlcGxhY2VzIEJvb3RzdHJhcCBtb2RhbHMgZm9yIGlmcmFtZXMpIOKUgOKUgCAqL1xuLnRyYW5zZmVyLWVtYmVkIHtcblx0bWF4LWhlaWdodDogMDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjRzIGVhc2U7XG59XG5cbi50cmFuc2Zlci1lbWJlZC5pcy1vcGVuIHtcblx0bWF4LWhlaWdodDogNTAwcHg7XG59XG5cbi8qIOKUgOKUgCBCb290c3RyYXAgLm1vZGFsIOKGkiAyMDI3IG92ZXJsYXkg4pSA4pSAXG4gICBMZWdhY3kgcGFnZXMgdXNlIC5tb2RhbCBkaXZzIHdpdGggZGF0YS10b2dnbGUvZGF0YS1kaXNtaXNzLlxuICAgbW9kYWwuanMgYWRkcy9yZW1vdmVzIC5pcy1vcGVuOyBDU1MgY29udHJvbHMgdmlzaWJpbGl0eS4gKi9cbi5tb2RhbCB7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0aW5zZXQ6IDA7XG5cdHotaW5kZXg6IDIwMDA7XG5cdG92ZXJmbG93LXk6IGF1dG87XG5cdG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG5cdGJhY2tncm91bmQ6IHJnYmEoMCwgMzEsIDYzLCAwLjYpO1xuXHRiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcblx0LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtOCkgdmFyKC0tZ3V0dGVyKTtcbn1cblxuLm1vZGFsLmlzLW9wZW4ge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5tb2RhbC1kaWFsb2cge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG5cdG1heC13aWR0aDogNzIwcHg7XG5cdHdpZHRoOiAxMDAlO1xuXHRtYXJnaW46IGF1dG87XG5cdGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy14bCk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5tb2RhbC1jb250ZW50IHtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgIWltcG9ydGFudDtcbn1cblxuLyogaGVhZGVyOiBtYW51YWxseS1hdXRob3JlZCBwaG90byArIG5hbWUgZGl2IChsZWdhY3kgcHJvZmlsZXMgcGFnZSBtYXJrdXApIOKAlFxuICAgb25seSBhcHBsaWVzIHdoZW4gdGhlIGZpcnN0IGNoaWxkIGlzIE5PVCB0aGUgYXV0by1pbmplY3RlZCBoZWFkZXIgKi9cbi5tb2RhbC1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkOm5vdCgubW9kYWwtYXV0by1oZWFkZXIpIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4ubW9kYWwtY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZDpub3QoLm1vZGFsLWF1dG8taGVhZGVyKSA+IGRpdjpmaXJzdC1jaGlsZCBpbWcge1xuXHR3aWR0aDogMTAwcHg7XG5cdGhlaWdodDogMTAwcHg7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubW9kYWwtY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZDpub3QoLm1vZGFsLWF1dG8taGVhZGVyKSA+IGRpdjpsYXN0LWNoaWxkIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5tb2RhbC1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkOm5vdCgubW9kYWwtYXV0by1oZWFkZXIpID4gZGl2Omxhc3QtY2hpbGQgaDIge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW46IDAgMCB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLm1vZGFsLWNvbnRlbnQgPiBkaXY6Zmlyc3QtY2hpbGQ6bm90KC5tb2RhbC1hdXRvLWhlYWRlcikgPiBkaXY6bGFzdC1jaGlsZCBwIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdG1hcmdpbjogMDtcblx0bGluZS1oZWlnaHQ6IDEuNTtcbn1cblxuLyogLmNhcmQtc3VidGl0bGUg4oCUIGEgcGxhaW4gbXV0ZWQgbGluZSB1bmRlciB0aGUgY2FyZCB0aXRsZSAocHJvZ3JhbSwgeWVhciwgcm9sZSkuXG4gICBObyBnb2xkL3VwcGVyY2FzZSB0cmVhdG1lbnQ7IHB1bGxlZCBpbnRvIHRoZSBtb2RhbCBoZWFkZXIgYXMgdGhlIHN1YnRpdGxlLiAqL1xuLmNhcmQtc3VidGl0bGUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0bWFyZ2luOiAwO1xuXHRsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKiBhdXRvLWhlYWRlciBpbmplY3RlZCBieSBtb2RhbC5qcyDigJQgcGhvdG8gY2lyY2xlICsgbmFtZSArIHN1YnRpdGxlIHJvdyAqL1xuLm1vZGFsLWF1dG8taGVhZGVyIHtcblx0ZGlzcGxheTogZmxleDtcblx0Z2FwOiB2YXIoLS1zcGFjZS01KTtcblx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdHBhZGRpbmctYm90dG9tOiB2YXIoLS1zcGFjZS01KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNSk7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi5tb2RhbC1hdXRvLXBob3RvIHtcblx0d2lkdGg6IDEwMHB4O1xuXHRoZWlnaHQ6IDEwMHB4O1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRvYmplY3QtcG9zaXRpb246IHRvcDtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubW9kYWwtYXV0by10ZXh0IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGdhcDogdmFyKC0tc3BhY2UtMSk7XG59XG5cbi5tb2RhbC1hdXRvLW5hbWUge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXhsKTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW46IDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG59XG5cbi5tb2RhbC1hdXRvLXN1YnRpdGxlIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdG1hcmdpbjogMDtcblx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKiBzdHJpcCAmbmJzcDsgc3BhY2VyIGRpdnMgdXNlZCBhcyBob3Jpem9udGFsIHJ1bGVzICovXG4ubW9kYWwtY29udGVudCBbc3R5bGUqPWJvcmRlci10b3BdIHtcblx0Ym9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCkgIWltcG9ydGFudDtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS01KSAwICFpbXBvcnRhbnQ7XG5cdGhlaWdodDogMCAhaW1wb3J0YW50O1xufVxuXG4vKiBzdG9yeSBib2R5ICovXG4ubW9kYWwtYm9keSB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjc1O1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG59XG5cbi5tb2RhbC1ib2R5IHAge1xuXHRtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0zKTtcbn1cblxuLm1vZGFsLWJvZHkgcDpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIGgzIHNlY3Rpb24gaGVhZGluZ3MgZ2V0IGEgZGl2aWRlciBsaW5lIGFib3ZlIHRoZW0gYXV0b21hdGljYWxseSDigJRcbiAgIG5vIG5lZWQgZm9yIG1hbnVhbCA8aHI+IG9yIGJvcmRlci10b3AgZGl2cyBpbiB0aGUgbW9kYWwgbWFya3VwICovXG4ubW9kYWwtYm9keSBoMyB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5KTtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS02KSAwIHZhcigtLXNwYWNlLTIpO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNik7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG59XG5cbi8qIGZpcnN0IGgzIGluIHRoZSBib2R5IOKAlCBubyBkaXZpZGVyIGFib3ZlIGl0IHdoZXRoZXIgdGhlIGgzIGlzIGEgZGlyZWN0IGNoaWxkXG4gICBvciB3cmFwcGVkIGluIGEgcGxhaW4gZGl2ICh0aGUgb3JpZ2luYWwgbWFya3VwIHdyYXBwZWQgZWFjaCBzZWN0aW9uIGluIDxkaXY+KSAqL1xuLm1vZGFsLWJvZHkgaDM6Zmlyc3QtY2hpbGQsXG4ubW9kYWwtYm9keSA+IGRpdjpmaXJzdC1jaGlsZCA+IGgzOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDtcblx0cGFkZGluZy10b3A6IDA7XG5cdGJvcmRlci10b3A6IG5vbmU7XG59XG5cbi8qIHN0YW5kYXJkIGNsb3NlIHJvdyDigJQgLm1vZGFsLWZvb3RlciAocHJlZmVycmVkKSBvciBsZWdhY3kgW2FsaWduPVwicmlnaHRcIl0gKi9cbi5tb2RhbC1mb290ZXIge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuXHRwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xufVxuXG4ubW9kYWwtY29udGVudCBbYWxpZ249cmlnaHRdIHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNSk7XG5cdHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG5bZGF0YS1kaXNtaXNzPW1vZGFsXSB7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLyogWCBjbG9zZSBidXR0b24g4oCUIGluamVjdGVkIGJ5IG1vZGFsLmpzIGludG8gLm1vZGFsLWNvbnRlbnQgdG9wLXJpZ2h0ICovXG4ubW9kYWwtY29udGVudCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm1vZGFsLWNsb3NlLXgge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogdmFyKC0tc3BhY2UtNCk7XG5cdHJpZ2h0OiB2YXIoLS1zcGFjZS00KTtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Ym9yZGVyOiBub25lO1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtbGcpO1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS0yKTtcblx0bGluZS1oZWlnaHQ6IDE7XG5cdHotaW5kZXg6IDE7XG59XG5cbi5tb2RhbC1jbG9zZS14OmhvdmVyIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xufVxuXG4vKiDilIDilIAgUHJvZmlsZSBwb3J0cmFpdCArIGJ1dHRvbiBncmlkIOKUgOKUgFxuICAgLmZlYXR1cmUtaW5uZXIgd3JhcHMgYWx0ZXJuYXRpbmcgcG9ydHJhaXQgcm93cyBhbmQgYnV0dG9uIHJvd3MgaW4gYXV0aG9yZWRcbiAgIHByb2ZpbGUgcGFnZXMuIGxheW91dC5jc3MgdXNlcyBsaXRlcmFsIDI4MHB4LCBzbyBvdmVycmlkZSBmbGV4IGRpcmVjdGx5LlxuICAgMTUwcHggZml0cyAzIHBlciByb3cgYXQgNTAwcHggd2lkZSBzaWRlYmFyIGNvbnRlbnQgKDPDlzE1MCArIDLDlzI0Z2FwID0gNDk4cHgpLlxuICAgU2VsZWN0b3IgY292ZXJzIGJvdGggcG9ydHJhaXQgZ3JpZHMgYW5kIGFkamFjZW50IGJ1dHRvbi1yb3cgZ3JpZHMuICovXG4ucGFnZS1tYWluIC5mZWF0dXJlLWlubmVyIC5ncmlkID4gZGl2IHtcblx0ZmxleDogMSAxIDE1MHB4ICFpbXBvcnRhbnQ7XG5cdG1pbi13aWR0aDogMDtcbn1cblxuLnBhZ2UtbWFpbiAuZ3JpZDpoYXMoPiBkaXYgPiBpbWcpID4gZGl2IHtcblx0ZmxleDogMSAxIDE1MHB4ICFpbXBvcnRhbnQ7XG59XG5cbi5wYWdlLW1haW4gLmdyaWQgPiBkaXY6aGFzKD4gaW1nKSB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4ucGFnZS1tYWluIC5ncmlkID4gZGl2Omhhcyg+IGltZykgPiBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0YXNwZWN0LXJhdGlvOiAxLzE7XG5cdG9iamVjdC1maXQ6IGNvdmVyO1xuXHRvYmplY3QtcG9zaXRpb246IHRvcDtcbn1cblxuLnBhZ2UtbWFpbiAuZ3JpZCA+IGRpdjpoYXMoPiBpbWcpID4gaDIge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWxnKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTEpO1xufVxuXG4ucGFnZS1tYWluIC5ncmlkID4gZGl2Omhhcyg+IGltZykgPiBwLmRlc2NyaXB0aW9uIHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGxpbmUtaGVpZ2h0OiAxLjU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMCB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS00KTtcbn1cblxuLyogcHJvZmlsZSBcInJlYWQgc3RvcnlcIiBidXR0b24gcm93czogZnVsbC13aWR0aCBidXR0b25zLCB0ZXh0IHdyYXBzICovXG4ucGFnZS1tYWluIC5ncmlkID4gZGl2ID4gcCA+IGJ1dHRvbi5idG4tbGcge1xuXHR3aWR0aDogMTAwJTtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdoaXRlLXNwYWNlOiBub3JtYWw7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0bGluZS1oZWlnaHQ6IDEuMztcblx0bWluLWhlaWdodDogMy41cmVtO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0Lm1vZGFsIHtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS0zKTtcblx0fVxuXHQubW9kYWwtY29udGVudCB7XG5cdFx0cGFkZGluZzogdmFyKC0tc3BhY2UtNSkgIWltcG9ydGFudDtcblx0fVxuXHQubW9kYWwtY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZCB7XG5cdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0fVxuXHQubW9kYWwtY29udGVudCA+IGRpdjpmaXJzdC1jaGlsZCA+IGRpdjpmaXJzdC1jaGlsZCBpbWcge1xuXHRcdHdpZHRoOiA4MHB4O1xuXHRcdGhlaWdodDogODBweDtcblx0fVxufVxuLyog4pSA4pSAIEJvb3RzdHJhcCBmb3JtIGNsYXNzZXMg4oaSIDIwMjcgc3R5bGVzIOKUgOKUgFxuICAgRm9ybXMgYXV0aG9yZWQgd2l0aCBCb290c3RyYXAgLmZvcm0tZ3JvdXAgLyAuZm9ybS1jb250cm9sIC8gLmNoZWNrYm94LlxuICAgTWFwcyB0byB0aGUgc2FtZSB2aXN1YWwgcmVzdWx0IGFzIGZvcm1zLmNzcyAuaW5wdXQvLnNlbGVjdC8ubGFiZWwuICovXG4uZm9ybS1ncm91cCB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTUpO1xufVxuXG4uZm9ybS1ncm91cCA+IGxhYmVsIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5mb3JtLWNvbnRyb2wge1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKTtcblx0Y29sb3I6IHZhcigtLWF1LXRleHQpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS13aGl0ZSk7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdyYXktMjAwKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNCk7XG5cdG91dGxpbmU6IG5vbmU7XG5cdHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKTtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmZvcm0tY29udHJvbDpmb2N1cyB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbnNlbGVjdC5mb3JtLWNvbnRyb2wge1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XG5cdHJlc2l6ZTogdmVydGljYWw7XG5cdG1pbi1oZWlnaHQ6IDEyMHB4O1xufVxuXG4vKiBCb290c3RyYXAgLmNoZWNrYm94OiBkaXYuY2hlY2tib3ggPiBsYWJlbCA+IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgdGV4dC5cbiAgIGZvcm1zLmNzcyB0cmVhdHMgLmNoZWNrYm94IGFzIGEgMjDDlzIwcHggY3VzdG9tIGlucHV0LCBidXQgQm9vdHN0cmFwIHVzZXMgaXRcbiAgIGFzIGEgd3JhcHBlciBESVYuIE92ZXJyaWRlIHNpemUgb24gZGl2LmNoZWNrYm94IHNvIHRoZSBsYWJlbCBjYW4gYmUgZnVsbCBoZWlnaHQuICovXG5kaXYuY2hlY2tib3gge1xuXHR3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuXHRoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0yKSAwO1xufVxuXG5kaXYuY2hlY2tib3ggbGFiZWwge1xuXHRkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG5cdGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0ge1xuXHRwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMnB4IDAgMCAhaW1wb3J0YW50O1xuXHRmbGV4LXNocmluazogMDtcblx0d2lkdGg6IDFyZW07XG5cdGhlaWdodDogMXJlbTtcblx0YWNjZW50LWNvbG9yOiB2YXIoLS1hdS1nb2xkKTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBzY3JvbGxhYmxlIGNoZWNrYm94IGNvbnRhaW5lciAqL1xuLnByb2dyYW1zLXdyYXBwZXIge1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpO1xuXHRtYXgtaGVpZ2h0OiAyODBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbn1cblxuLnByb2dyYW1zLXdyYXBwZXIgc3Ryb25nIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGxldHRlci1zcGFjaW5nOiAwLjVweDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTMpIDAgdmFyKC0tc3BhY2UtMik7XG59XG5cbi5wcm9ncmFtcy13cmFwcGVyIHN0cm9uZzpmaXJzdC1jaGlsZCB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi5wcm9ncmFtcy13cmFwcGVyIGhyIHtcblx0Ym9yZGVyOiBub25lO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRtYXJnaW46IHZhcigtLXNwYWNlLTMpIDA7XG59XG5cbi8qIGhlbHBlciB0ZXh0ICsgcmVxdWlyZWQgYXN0ZXJpc2sgKi9cbi50ZXh0LWRhbmdlciB7XG5cdGNvbG9yOiB2YXIoLS1hdS1lcnJvcik7XG59XG5cbi50ZXh0LW11dGVkIHtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG59XG5cbi8qIOKUgOKUgCBDS0VkaXRvciB0ZXh0LWFsaWduOmNlbnRlciBvbiA8cD4gY29udGFpbmluZyBhbiBpbWcg4pSA4pSAXG4gICBDS0VkaXRvciBjZW50ZXJzIGltYWdlcyBieSBzZXR0aW5nIHRleHQtYWxpZ246Y2VudGVyIG9uIHRoZSB3cmFwcGluZyA8cD4uXG4gICBiYXNlLmNzcyBtYWtlcyBpbWcgZGlzcGxheTpibG9jaywgd2hpY2ggaWdub3JlcyB0ZXh0LWFsaWduIOKAlCB0cmFuc2xhdGUgdG9cbiAgIG1hcmdpbjphdXRvIHNvIHRoZSBhdXRob3IncyBpbnRlbnQgaXMgaG9ub3JlZC4gKi9cbnBbc3R5bGUqPVwidGV4dC1hbGlnbjogY2VudGVyXCJdID4gaW1nLFxucFtzdHlsZSo9XCJ0ZXh0LWFsaWduOmNlbnRlclwiXSA+IGltZyB7XG5cdG1hcmdpbi1pbmxpbmU6IGF1dG87XG59XG5cbi8qIOKUgOKUgCBMZWdhY3kgZm9udCByZWZlcmVuY2VzIOKUgOKUgFxuICAgQWtrdXJhdExpZ2h0IHdhcyB0aGUgb2xkIHNpdGUncyBib2R5IGZvbnQsIG5vdCBsb2FkZWQgaW4gMjAyNy4gT3ZlcnJpZGVcbiAgIHRvIHRoZSBkZXNpZ24tc3lzdGVtIHN0YWNrIHNvIHRoZSB0ZXh0IGRvZXNuJ3QgZmFsbCB0byBhIHJhbmRvbSBzZXJpZi4gKi9cbltzdHlsZSo9QWtrdXJhdExpZ2h0XSxcbltzdHlsZSo9QWtrdXJhdF0ge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KSAhaW1wb3J0YW50O1xufVxuXG4vKiDilIDilIAgQm9vdHN0cmFwIHJlc3BvbnNpdmUgZW1iZWQgKC5lbWJlZC1yZXNwb25zaXZlKSDilIDilIBcbiAgIExlZ2FjeSBjb250ZW50IHdyYXBzIFlvdVR1YmUvVmltZW8gaWZyYW1lcyBpbiB0aGlzOyBCb290c3RyYXAncyBDU1NcbiAgIGlzbid0IGxvYWRlZCBvbiB0aGUgMjAyNyBjaGFpbiBzbyB0aGUgaWZyYW1lIGNvbGxhcHNlcy4gKi9cbi5lbWJlZC1yZXNwb25zaXZlIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDEwMCU7XG5cdHBhZGRpbmc6IDA7XG5cdG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmUge1xuXHRjb250ZW50OiBcIlwiO1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcbi5lbWJlZC1yZXNwb25zaXZlIGlmcmFtZSxcbi5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLFxuLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LFxuLmVtYmVkLXJlc3BvbnNpdmUgdmlkZW8ge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMDtcblx0bGVmdDogMDtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0Ym9yZGVyOiAwO1xufVxuXG4uZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OTo6YmVmb3JlIHtcblx0cGFkZGluZy10b3A6IDU2LjI1JTtcbn1cblxuLmVtYmVkLXJlc3BvbnNpdmUtNGJ5Mzo6YmVmb3JlIHtcblx0cGFkZGluZy10b3A6IDc1JTtcbn1cblxuLmVtYmVkLXJlc3BvbnNpdmUtMWJ5MTo6YmVmb3JlIHtcblx0cGFkZGluZy10b3A6IDEwMCU7XG59XG5cbi8qIOKUgOKUgCBpbWctcmVzcG9uc2l2ZSAoQm9vdHN0cmFwKSDilIDilIAgKi9cbi5jYXJkLXRleHQgLmltZy1yZXNwb25zaXZlIHtcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbn1cblxuLyog4pSA4pSAIHJlc3BvbnNpdmUg4pSA4pSAICovXG5AbWVkaWEgKG1heC13aWR0aDogNzYwcHgpIHtcblx0LmNhcmQtdGV4dCA+IC5yb3csXG5cdC5jYXJkLXRleHQgPiBkaXYgPiAucm93IHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTQpO1xuXHR9XG5cdC5jYXJkLXRleHQ6aGFzKD4gW2NsYXNzKj1jb2wtbGctM10pIHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdC5jYXJkLXRleHQgPiBbY2xhc3MqPWNvbC1sZy0zXSB7XG5cdFx0ZmxleC1iYXNpczogY2FsYyg1MCUgLSB2YXIoLS1zcGFjZS0zKSk7XG5cdH1cblx0c2VjdGlvbi5jb2x1bW5zIC5jb250YWluZXIgPiAucm93IHtcblx0XHRnYXA6IHZhcigtLXNwYWNlLTMpO1xuXHR9XG5cdHNlY3Rpb24uY29sdW1ucyAuY29udGFpbmVyID4gLnJvdyA+IFtjbGFzcyo9Y29sLV0ge1xuXHRcdGZsZXgtYmFzaXM6IGNhbGMoNTAlIC0gdmFyKC0tc3BhY2UtMykpO1xuXHR9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcblx0LmNhcmQtdGV4dCA+IFtjbGFzcyo9Y29sLWxnLTNdIHtcblx0XHRmbGV4LWJhc2lzOiAxMDAlO1xuXHR9XG5cdHNlY3Rpb24uY29sdW1ucyAuY29udGFpbmVyID4gLnJvdyA+IFtjbGFzcyo9Y29sLV0ge1xuXHRcdGZsZXgtYmFzaXM6IDEwMCU7XG5cdH1cbn1cbi8qIOKUgOKUgCBIYW5kLWJ1aWx0IGJyZWFkY3J1bWJzIOKUgOKUgFxuICAgTGVnYWN5IHNlY3Rpb24gcGFnZXMgY2FycnkgYSBcIkJyZWFkY3J1bWJzXCIgY29sdW1ucyBzZWN0aW9uIChDdXN0b20gQ2xhc3NcbiAgIFwiYnJlYWRjcnVtYnNcIikgd2hvc2UgY2FyZCBib2R5IGlzIGEgLmJyZWFkY3J1bWItY29udGFpbmVyIG9mIC5jcnVtYiBkaXZzXG4gICBzZXBhcmF0ZWQgYnkgLmRlbGltaXRlciBkaXZzIChcIiZndDtcIikgYW5kIEJvb3RzdHJhcCAubW9iaWxlLWRlbGltaXRlciBzcGFjZXJzLlxuICAgVW5zdHlsZWQgdGhleSBzdGFjayBhcyBhIGxpc3Qgb2YgbGlua3M7IGxheSB0aGVtIG91dCBhcyBvbmUgY29tcGFjdCB0cmFpbFxuICAgaW4gdGhlIDIwMjcgY3J1bWIgbG9vayBhbmQgc2xpbSB0aGUgYmFuZCB0byBmaXQuICovXG4uc2VjdGlvbi5icmVhZGNydW1icyB7XG5cdHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uc2VjdGlvbi5icmVhZGNydW1icyAuY2FyZCxcbi5zZWN0aW9uLmJyZWFkY3J1bWJzIC5jYXJkLWJvZHkge1xuXHRwYWRkaW5nOiAwO1xufVxuXG4uYnJlYWRjcnVtYi1jb250YWluZXIge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcblx0Z2FwOiB2YXIoLS1zcGFjZS0xKSB2YXIoLS1zcGFjZS0yKTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSk7XG59XG5cbi5icmVhZGNydW1iLWNvbnRhaW5lciAubW9iaWxlLWRlbGltaXRlciB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5icmVhZGNydW1iLWNvbnRhaW5lciAuZGVsaW1pdGVyIHtcblx0Zm9udC1zaXplOiAwO1xufVxuXG4uYnJlYWRjcnVtYi1jb250YWluZXIgLmRlbGltaXRlcjo6YmVmb3JlIHtcblx0Y29udGVudDogXCLigLpcIjtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LWdyYXktNDAwKTtcbn1cblxuLmJyZWFkY3J1bWItY29udGFpbmVyIC5jcnVtYiBhIHtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktbGlnaHQpO1xufVxuXG4uYnJlYWRjcnVtYi1jb250YWluZXIgLmNydW1iLWxlYWYge1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qIOKUgOKUgCBCb290c3RyYXAgMyBiaXRzIGF1dGhvcmVkIGluc2lkZSBzZWN0aW9uIGJvZGllcyDilIDilIBcbiAgIEhhbmQtd3JpdHRlbiBzZWN0aW9uIGNvbnRlbnQgKGUuZy4gL2xpZmUvaG91c2luZy90aW1iZXJyaWRnZS8pIHN0aWxsIHVzZXNcbiAgIEJvb3RzdHJhcCdzIGJ1dHRvbnMsIGFsZXJ0cywgcGFuZWxzIGFuZCByZXNwb25zaXZlIGVtYmVkcy4gTWFwIHRoZW0gb250byB0aGVcbiAgIDIwMjcgbG9vayBzbyB0aGV5IGRvbid0IGZhbGwgYmFjayB0byBiYXJlIHRleHQgb3IgemVyby1oZWlnaHQgaWZyYW1lcy4gKi9cbi5jYXJkLXRleHQgLmJ0bi1ibHVlLFxuLmNhcmQtdGV4dCAuYnRuLXByaW1hcnkge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5jYXJkLXRleHQgLmJ0bi1ibHVlOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZC1saWdodCk7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApO1xufVxuXG4uY2FyZC10ZXh0IC5idG4tZGVmYXVsdCB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogdmFyKC0tYXUtbmF2eSk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtbmF2eSk7XG59XG5cbi5jYXJkLXRleHQgLmJ0bi1kZWZhdWx0OmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eSk7XG5cdGNvbG9yOiB2YXIoLS1hdS13aGl0ZSk7XG59XG5cbi5jYXJkLXRleHQgcDpub3QoLmJ0bi1yb3cpID4gLmJ0biArIC5idG4ge1xuXHRtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5jYXJkLXRleHQgLmFsZXJ0IHtcblx0bWFyZ2luLWJsb2NrOiB2YXIoLS1zcGFjZS00KTtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNCkgdmFyKC0tc3BhY2UtNSk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWNyZWFtKTtcblx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1hdS1nb2xkKTtcbn1cblxuLmNhcmQtdGV4dCAuYWxlcnQtd2FybmluZyB7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQtcGFsZSk7XG5cdGNvbG9yOiAjNmU1NDE4O1xufVxuXG4uY2FyZC10ZXh0IC5hbGVydC1pbmZvIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtY3JlYW0pO1xufVxuXG4uY2FyZC10ZXh0IC5hbGVydCA6aXMoaDIsIGgzLCBoNCkge1xuXHRjb2xvcjogaW5oZXJpdDtcblx0bWFyZ2luLXRvcDogMDtcbn1cblxuLmNhcmQtdGV4dCAucGFuZWwge1xuXHRtYXJnaW4tYmxvY2s6IHZhcigtLXNwYWNlLTMpO1xuXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLmNhcmQtdGV4dCAucGFuZWwtYm9keSB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTQpIHZhcigtLXNwYWNlLTUpO1xufVxuXG4uY2FyZC10ZXh0IC5lbWJlZC1yZXNwb25zaXZlIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR3aWR0aDogMTAwJTtcblx0YXNwZWN0LXJhdGlvOiAxNi85O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xufVxuXG4uY2FyZC10ZXh0IC5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xuXHRhc3BlY3QtcmF0aW86IDQvMztcbn1cblxuLmNhcmQtdGV4dCAuZW1iZWQtcmVzcG9uc2l2ZS1pdGVtIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRpbnNldDogMDtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0Ym9yZGVyOiAwO1xufVxuXG4uY2FyZC10ZXh0IC5zbWFsbCB7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC14cyk7XG59XG5cbi5jYXJkLXRleHQgLnRleHQtbXV0ZWQge1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcbn1cblxuLyogbGVnYWN5IGBidG4tZ29sZGAgKENLRWRpdG9yLWF1dGhvcmVkLCBlLmcuIHRoZSAvZmFpdGgvbWlzc2lvbnMvIFwiQXBwbHkgSGVyZVwiKVxuICAgLS0gdGhlIDIwMjcgZ29sZCBidXR0b24uIFdpdGhvdXQgaXQgdGhlIGxpbmsgcmVuZGVycyBhcyBiYXJlIGdvbGQgdGV4dC4gKi9cbi5idG4uYnRuLWdvbGQge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkKTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCk7XG59XG5cbi5idG4uYnRuLWdvbGQ6aG92ZXIge1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KTtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnktZGVlcCk7XG59XG5cbi8qIGxlZ2FjeSBibG9nLWJsb2Nrcy1ydWxlLmR0IChhZ2VuZGEgZmVlZCBhcyBhIHBvc3QgbGlzdCwgZS5nLiAvZmFpdGgvZXZlbnRzLmh0bWwpOlxuICAgdGhlIHRodW1ibmFpbCBzYXQgaW4gYSBCb290c3RyYXAgY29sLW1kLTMgZmxvYXRlZCBiZXNpZGUgdGhlIHBvc3QuIFJlc3RvcmUgdGhlXG4gICBmbG9hdCBzbyB0aGUgcGhvdG8gc3RheXMgYSB0aHVtYm5haWwgaW5zdGVhZCBvZiBhIGZ1bGwtd2lkdGggY2VudHJlZCBwb3N0ZXIuICovXG4uYWdlbmRhLWZlZWQtYmxvZyAucG9zdC1pbWFnZSB7XG5cdG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xufVxuXG4uYWdlbmRhLWZlZWQtYmxvZyAucG9zdC1pbWFnZSBpbWcge1xuXHRtYXgtaGVpZ2h0OiBub25lO1xufVxuXG4uYWdlbmRhLWZlZWQtYmxvZyBoMyB7XG5cdG1hcmdpbi10b3A6IDA7XG59XG5cbi5hZ2VuZGEtZmVlZC1ibG9nIGgzIGEge1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5hZ2VuZGEtZmVlZC1ibG9nIGg1IHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS0xKSAwIHZhcigtLXNwYWNlLTMpO1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0Y29sb3I6IHZhcigtLWF1LWdvbGQpO1xufVxuXG4uYWdlbmRhLWZlZWQtYmxvZyAuY2xlYXJmaXgge1xuXHRjbGVhcjogYm90aDtcbn1cblxuLmFnZW5kYS1mZWVkLWJsb2cgLmNsZWFyZml4IGhyIHtcblx0bWFyZ2luOiB2YXIoLS1zcGFjZS01KSAwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcblx0LmFnZW5kYS1mZWVkLWJsb2cgLnBvc3QtaW1hZ2Uge1xuXHRcdGZsb2F0OiBsZWZ0O1xuXHRcdHdpZHRoOiAyNSU7XG5cdFx0cGFkZGluZy1yaWdodDogdmFyKC0tc3BhY2UtNSk7XG5cdH1cbn1cbi8qIGxlZ2FjeSBgLnRvcC1idXR0b24tbWVudWAgKENLRWRpdG9yLWF1dGhvcmVkIHByb2dyYW0gbWVudSBvbiB0aGUgU2Nob29sIG9mXG4gICBMZWFkZXJzaGlwIHBhZ2VzLCBzdHlsZWQgYnkgYSBmb2xkZXIgc3BlY2lmaWMuY3NzIHRoZSAyMDI3IGNoYWluIGRvZXNuJ3QgbG9hZCk6XG4gICBhIHJvdyBvZiBuYXZ5IHRpbGVzIHRoYXQgd3JhcHMgb24gbmFycm93IHNjcmVlbnMuIFRoZSAmbmJzcDtzIGJldHdlZW4gdGhlXG4gICBsaW5rcyBjb2xsYXBzZSBpbnRvIHRoZSBmbGV4IGdhcC4gKi9cbi50b3AtYnV0dG9uLW1lbnUge1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LXdyYXA6IHdyYXA7XG5cdGdhcDogdmFyKC0tc3BhY2UtMik7XG5cdG1hcmdpbi1ibG9jazogdmFyKC0tc3BhY2UtNCk7XG5cdGZvbnQtc2l6ZTogMDtcbn1cblxuLnRvcC1idXR0b24tbWVudSBhIHtcblx0ZmxleDogMSAxIDExMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0bWluLWhlaWdodDogNjBweDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMikgdmFyKC0tc3BhY2UtMyk7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LW5hdnkpO1xuXHRjb2xvcjogdmFyKC0tYXUtd2hpdGUpO1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtc20pO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnRvcC1idXR0b24tbWVudSBhOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtbmF2eS1kZWVwKTtcblx0Y29sb3I6IHZhcigtLWF1LXdoaXRlKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBjbGlja2RpbWVuc2lvbnMuY3NzICDCtyAgQ2xpY2tEaW1lbnNpb25zIGZvcm1zIGluIHRoZSAyMDI3IGxvb2tcbiAgIEEgQ2xpY2tEaW1lbnNpb25zIGZvcm0gKGBkYXRhLWNkLXdpZGdldC1jb250YWluZXI9XCJmb3JtXCJgKSBpcyBkcmF3blxuICAgY2xpZW50LXNpZGUgYnkgU3VydmV5SlM6IHJvb3QgYC5zZC1yb290LW1vZGVybmAsIHRoZW1lZCBieSBgLS1zanMtKmBcbiAgIGN1c3RvbSBwcm9wZXJ0aWVzIHRoZSBlbWJlZCB3cml0ZXMgYXMgSU5MSU5FIHN0eWxlcyBvbiB0aGF0IHJvb3QuIElubGluZVxuICAgYmVhdHMgYW55IHN0eWxlc2hlZXQgcnVsZSwgc28gdGhlIHZhcmlhYmxlIG92ZXJyaWRlcyBuZWVkICFpbXBvcnRhbnQuXG4gICBUaGUgZW1iZWQgaXRzZWxmIHN0YXlzIHVudG91Y2hlZCAtLSB0aGlzIG9ubHkgcmVzdHlsZXMgd2hhdCBpdCBkcmF3cy5cbiAgIEZpcnN0IHVzZWQgb24gL2FwcGx5L3JlcXVlc3QvLlxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4ge1xuXHQtLXNqcy1mb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcblx0LS1zanMtY29ybmVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1iYXNlLXVuaXQ6IDhweCAhaW1wb3J0YW50O1xuXHQtLXNqcy1nZW5lcmFsLWJhY2tjb2xvcjogdmFyKC0tYXUtd2hpdGUpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yLWRhcms6IHZhcigtLWF1LWNyZWFtKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1nZW5lcmFsLWJhY2tjb2xvci1kaW06IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yLWRpbS1saWdodDogdmFyKC0tYXUtd2hpdGUpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWdlbmVyYWwtYmFja2NvbG9yLWRpbS1kYXJrOiB2YXIoLS1hdS1jcmVhbSkgIWltcG9ydGFudDtcblx0LS1zanMtZ2VuZXJhbC1mb3JlY29sb3I6IHZhcigtLWF1LXRleHQpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWdlbmVyYWwtZm9yZWNvbG9yLWxpZ2h0OiB2YXIoLS1hdS13YXJtLWdyYXkpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWdlbmVyYWwtZGltLWZvcmVjb2xvcjogdmFyKC0tYXUtdGV4dCkgIWltcG9ydGFudDtcblx0LS1zanMtZ2VuZXJhbC1kaW0tZm9yZWNvbG9yLWxpZ2h0OiB2YXIoLS1hdS13YXJtLWdyYXkpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXByaW1hcnktYmFja2NvbG9yOiB2YXIoLS1hdS1uYXZ5KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1wcmltYXJ5LWJhY2tjb2xvci1kYXJrOiB2YXIoLS1hdS1uYXZ5LWRlZXApICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXByaW1hcnktYmFja2NvbG9yLWxpZ2h0OiByZ2JhKDE5OCwxNDksNDMsMC4xNSkgIWltcG9ydGFudDtcblx0LS1zanMtcHJpbWFyeS1mb3JlY29sb3I6IHZhcigtLWF1LXdoaXRlKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zZWNvbmRhcnktYmFja2NvbG9yOiB2YXIoLS1hdS1nb2xkKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zZWNvbmRhcnktYmFja2NvbG9yLWxpZ2h0OiByZ2JhKDE5OCwxNDksNDMsMC4yNSkgIWltcG9ydGFudDtcblx0LS1zanMtc2Vjb25kYXJ5LWJhY2tjb2xvci1zZW1pLWxpZ2h0OiByZ2JhKDE5OCwxNDksNDMsMC4xKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zcGVjaWFsLXllbGxvdzogdmFyKC0tYXUtZ29sZCkgIWltcG9ydGFudDtcblx0LS1zanMtc3BlY2lhbC15ZWxsb3ctbGlnaHQ6IHZhcigtLWF1LWdvbGQtcGFsZSkgIWltcG9ydGFudDtcblx0LS1zanMtc3BlY2lhbC1yZWQ6IHZhcigtLWF1LWVycm9yKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1zcGVjaWFsLXJlZC1saWdodDogcmdiYSgxODQsNTAsNTAsMC4wOCkgIWltcG9ydGFudDtcblx0LS1zanMtYm9yZGVyLWRlZmF1bHQ6IHZhcigtLWF1LWdyYXktMzAwKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1ib3JkZXItbGlnaHQ6IHZhcigtLWF1LWdyYXktMjAwKSAhaW1wb3J0YW50O1xuXHQtLXNqcy1ib3JkZXItaW5zaWRlOiB2YXIoLS1hdS1ncmF5LTIwMCkgIWltcG9ydGFudDtcblx0LS1zanMtc2hhZG93LXNtYWxsOiBub25lICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXNoYWRvdy1tZWRpdW06IHZhcigtLXNoYWRvdy1tZCkgIWltcG9ydGFudDtcblx0LS1zanMtc2hhZG93LWlubmVyOiBub25lICFpbXBvcnRhbnQ7XG5cdC0tc2pzLXNoYWRvdy1pbm5lci1yZXNldDogbm9uZSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LXF1ZXN0aW9udGl0bGUtc2l6ZTogdmFyKC0tdGV4dC1zbSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1xdWVzdGlvbnRpdGxlLWNvbG9yOiB2YXIoLS1hdS10ZXh0KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LXF1ZXN0aW9uZGVzY3JpcHRpb24tc2l6ZTogdmFyKC0tdGV4dC1zbSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1xdWVzdGlvbmRlc2NyaXB0aW9uLWNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWZvbnQtZWRpdG9yZm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWZvbnQtZWRpdG9yZm9udC1jb2xvcjogdmFyKC0tYXUtdGV4dCkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1lZGl0b3Jmb250LXBsYWNlaG9sZGVyY29sb3I6IHZhcigtLWF1LXdhcm0tZ3JheSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1zdXJ2ZXl0aXRsZS1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1oZWFkZXJ0aXRsZS1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1oZWFkZXJ0aXRsZS1jb2xvcjogdmFyKC0tYXUtbmF2eSkgIWltcG9ydGFudDtcblx0LS1zanMtZm9udC1oZWFkZXJkZXNjcmlwdGlvbi1jb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KSAhaW1wb3J0YW50O1xuXHQtLXNqcy1mb250LWhlYWRlcmRlc2NyaXB0aW9uLXdlaWdodDogNDAwICFpbXBvcnRhbnQ7XG5cdC0tc2pzLWZvbnQtcGFnZWRlc2NyaXB0aW9uLWNvbG9yOiB2YXIoLS1hdS13YXJtLWdyYXkpICFpbXBvcnRhbnQ7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpO1xuXHRiYWNrZ3JvdW5kOiB2YXIoLS1hdS1jcmVhbSkgIWltcG9ydGFudDtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYXUtZ3JheS0yMDApO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBoZWFkZXI6IHRoZSBlbWJlZCdzIGZhaW50IGNhbXB1cy1za2V0Y2ggdGlsZSBhbmQgY2VudGVyZWQgZGlzcGxheSB0eXBlXG4gICBiZWNvbWUgYSBwbGFpbiAyMDI3IGNhcmQgaGVhZGVyICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fYmFja2dyb3VuZC1pbWFnZSB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbn1cblxuLyogdGhlIGhlYWRlciBpcyBhIDN4MyBncmlkIHdpdGggdGhlIHRleHQgaW4gdGhlIGNlbnRyZSBjZWxsOiBkcm9wIHRoZSBlbXB0eVxuICAgY2VsbHMgYW5kIGxldCB0aGUgdGV4dCBydW4gdGhlIGNhcmQncyBmdWxsIHdpZHRoLCBsZWZ0LWFsaWduZWQgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyX19jb250ZW50IHtcblx0ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNikgMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fY2VsbC0tZW1wdHkge1xuXHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyX19jZWxsIHtcblx0d2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX2NlbGwtY29udGVudCB7XG5cdGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XG5cdHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcblx0bWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcblx0Z2FwOiB2YXIoLS1zcGFjZS0yKSAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fdGl0bGUsXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnN2LWhlYWRlcl9fdGl0bGUgLnN2LXN0cmluZy12aWV3ZXIge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KSAhaW1wb3J0YW50O1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtMnhsKSAhaW1wb3J0YW50O1xuXHRmb250LXdlaWdodDogNDAwICFpbXBvcnRhbnQ7XG5cdGxpbmUtaGVpZ2h0OiAxLjIgIWltcG9ydGFudDtcblx0Y29sb3I6IHZhcigtLWF1LW5hdnkpICFpbXBvcnRhbnQ7XG5cdHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX2Rlc2NyaXB0aW9uLFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX2Rlc2NyaXB0aW9uIC5zdi1zdHJpbmctdmlld2VyIHtcblx0Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSkgIWltcG9ydGFudDtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LWJhc2UpICFpbXBvcnRhbnQ7XG5cdGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcblx0bGluZS1oZWlnaHQ6IDEuNSAhaW1wb3J0YW50O1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KSAhaW1wb3J0YW50O1xuXHR0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG59XG5cbi8qIGJvZHk6IG5vIHBlci1xdWVzdGlvbiB3aGl0ZSBmcmFtZXMgLS0gZmllbGRzIHNpdCBzdHJhaWdodCBvbiB0aGUgY2FyZCAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1ib2R5LFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1ib2R5LnNkLWJvZHktLXJlc3BvbnNpdmUge1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS02KSAhaW1wb3J0YW50O1xuXHRtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1lbGVtZW50LS13aXRoLWZyYW1lIHtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuXHRib3JkZXI6IDAgIWltcG9ydGFudDtcblx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xuXHRtYXJnaW46IDAgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1wYWdlIHtcblx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xufVxuXG4vKiBhIHJvdydzIGNlbGxzIGFyZSBTdXJ2ZXlKUyB3cmFwcGVycyBzaXplZCBmbGV4OiAxIDEgNTAlIHdpdGggdGhlaXIgb3duXG4gICBwYWRkaW5nLWxlZnQgZ3V0dGVyLCBzbyBubyBjb2x1bW4tZ2FwIGhlcmUgKGl0IHdvdWxkIHdyYXAgZXZlcnkgcGFpcikgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2Qtcm93IHtcblx0bWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNCkgIWltcG9ydGFudDtcblx0cm93LWdhcDogdmFyKC0tc3BhY2UtNCk7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2Qtcm93OmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLXJvdyA+IC5zZC1yb3dfX3F1ZXN0aW9uIHtcblx0bWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1xdWVzdGlvbl9fdGl0bGUge1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4vKiBhIGNvbXBvc2l0ZSBmaWVsZCB3aG9zZSB0aXRsZSB0aGUgZm9ybSBoaWRlcyAodGhlIHBob25lIHBhbmVsKSB3b3VsZFxuICAgb3RoZXJ3aXNlIGJlIHR3byBiYXJlIGJveGVzOiBsYWJlbCBpdCB3aXRoIHRoZSBxdWVzdGlvbidzIG93biBuYW1lICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWVsZW1lbnQtLWNvbXBsZXhbZGF0YS1uYW1lXTpub3QoOmhhcyg+IC5zZC1xdWVzdGlvbl9faGVhZGVyKSk6OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IGF0dHIoZGF0YS1uYW1lKTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSk7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KTtcblx0bWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZWxlbWVudC0tY29tcGxleCxcbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZWxlbWVudC0tY29tcGxleCAuc2QtcGFuZWxfX2NvbnRlbnQge1xuXHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG59XG5cbi8qIHRoZSBlbWJlZCdzIG93biBuZXN0ZWQgIWltcG9ydGFudCBydWxlIHBhZHMgdGhlIGNvbXBvc2l0ZSdzIHRvcCB3aXRoIHRoaXNcbiAgIHZhcjsgemVybyB0aGUgdmFyLCBzaW5jZSBpdHMgc2VsZWN0b3Igb3V0cmFua3Mgb3VycyAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1lbGVtZW50LS1jb21wbGV4LnNkLWVsZW1lbnQtLXdpdGgtZnJhbWUge1xuXHQtLXNkLWJhc2UtdmVydGljYWwtcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZWxlbWVudC0tY29tcGxleCAuc2Qtcm93IHtcblx0ZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcblx0bWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xufVxuXG4vKiBjb3VudHJ5IGNvZGUgZml4ZWQgYW5kIG5hcnJvdywgbnVtYmVyIHRha2VzIHRoZSByZXN0ICh0aGUgY2VsbHMgYXJlIHRoZVxuICAgU3VydmV5SlMgd3JhcHBlciBkaXZzIHdpdGggaW5saW5lIGZsZXgvbWF4LXdpZHRoKSAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1lbGVtZW50LS1jb21wbGV4IC5zZC1yb3cgPiBkaXY6Zmlyc3QtY2hpbGQge1xuXHRmbGV4OiAwIDAgY2FsYyh2YXIoLS1jZC1jb2RlLXdpZHRoLCA5LjVyZW0pICsgNDBweCkgIWltcG9ydGFudDtcblx0bWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG5cdG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWVsZW1lbnQtLWNvbXBsZXggLnNkLXJvdyA+IGRpdiArIGRpdiB7XG5cdGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XG5cdG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50O1xuXHRtaW4td2lkdGg6IDAgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1lbGVtZW50LS1uZXN0ZWQge1xuXHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMCAhaW1wb3J0YW50O1xufVxuXG4vKiBzaWRlLWJ5LXNpZGUgZmllbGRzIGxpbmUgdXAgb24gdGhlaXIgaW5wdXRzIHdoZW4gb25seSBvbmUgaGFzIGEgbGFiZWwgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtcGFnZSA+IC5zZC1yb3cge1xuXHRhbGlnbi1pdGVtczogZmxleC1lbmQ7XG59XG5cbi8qIGlucHV0cyA9IC5pbnB1dCBmcm9tIGZvcm1zLmNzcyAqL1xuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1pbnB1dCB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpICFpbXBvcnRhbnQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1iYXNlKSAhaW1wb3J0YW50O1xuXHRjb2xvcjogdmFyKC0tYXUtdGV4dCk7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LXdoaXRlKSAhaW1wb3J0YW50O1xuXHRib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdS1ncmF5LTIwMCkgIWltcG9ydGFudDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKSAhaW1wb3J0YW50O1xuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpICFpbXBvcnRhbnQ7XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDtcblx0d2lkdGg6IDEwMCUgIWltcG9ydGFudDtcblx0aGVpZ2h0OiAzLjI1cmVtICFpbXBvcnRhbnQ7XG5cdG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDtcblx0bGluZS1oZWlnaHQ6IDEuNSAhaW1wb3J0YW50O1xuXHR0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSk7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiB0ZXh0YXJlYS5zZC1pbnB1dCxcbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtY29tbWVudCB7XG5cdGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuXHRtaW4taGVpZ2h0OiA3cmVtICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZHJvcGRvd24ge1xuXHRkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtaW5wdXQ6OnBsYWNlaG9sZGVyLFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1kcm9wZG93bl9fZmlsdGVyLXN0cmluZy1pbnB1dDo6cGxhY2Vob2xkZXIge1xuXHRjb2xvcjogdmFyKC0tYXUtd2FybS1ncmF5KTtcblx0b3BhY2l0eTogMTtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1pbnB1dDpmb2N1cyxcbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtaW5wdXQ6Zm9jdXMtd2l0aGluLFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1pbnB1dC5zZC1pbnB1dC0tZm9jdXNlZCB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZ29sZCkgIWltcG9ydGFudDtcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuXHRvdXRsaW5lOiBub25lO1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWlucHV0LnNkLWlucHV0LS1lcnJvcixcbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtcXVlc3Rpb24tLWVycm9yIC5zZC1pbnB1dCB7XG5cdGJvcmRlci1jb2xvcjogdmFyKC0tYXUtZXJyb3IpICFpbXBvcnRhbnQ7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtZHJvcGRvd24ge1xuXHRwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zcGFjZS02KSAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWRyb3Bkb3duID4gKiB7XG5cdG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1kcm9wZG93bl9fdmFsdWUge1xuXHRmb250LXNpemU6IHZhcigtLXRleHQtYmFzZSkgIWltcG9ydGFudDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtcXVlc3Rpb25fX2VyYm94IHtcblx0Zm9udC1zaXplOiB2YXIoLS10ZXh0LXNtKTtcblx0Y29sb3I6IHZhcigtLWF1LWVycm9yKTtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcblx0cGFkZGluZzogdmFyKC0tc3BhY2UtMSkgMCAwICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMCAhaW1wb3J0YW50O1xufVxuXG4vKiBmb290ZXI6IHRoZSBzdWJtaXQgaXMgdGhlIGdvbGQgLmJ0bi1wcmltYXJ5ICovXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWZvb3RlcixcbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtYm9keV9fbmF2aWdhdGlvbiB7XG5cdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIDAgMCAhaW1wb3J0YW50O1xuXHRtYXJnaW46IDAgIWltcG9ydGFudDtcbn1cblxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1idG4sXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLW5hdmlnYXRpb25fX25leHQtYnRuLFxuW2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1uYXZpZ2F0aW9uX19jb21wbGV0ZS1idG4ge1xuXHRmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KSAhaW1wb3J0YW50O1xuXHRmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7XG5cdGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zbSkgIWltcG9ydGFudDtcblx0bGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xuXHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRsaW5lLWhlaWdodDogMS4yICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS1uYXZ5LWRlZXApICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQ6IHZhcigtLWF1LWdvbGQpICFpbXBvcnRhbnQ7XG5cdGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF1LWdvbGQpICFpbXBvcnRhbnQ7XG5cdGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCkgIWltcG9ydGFudDtcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS02KSAhaW1wb3J0YW50O1xuXHRtaW4td2lkdGg6IDAgIWltcG9ydGFudDtcblx0d2lkdGg6IGF1dG87XG5cdG1heC13aWR0aDogMTAwJTtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuXHR3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XG5cdHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tZmFzdCksIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tZmFzdCk7XG59XG5cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtYnRuOmhvdmVyIHtcblx0YmFja2dyb3VuZDogdmFyKC0tYXUtZ29sZC1saWdodCkgIWltcG9ydGFudDtcblx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1hdS1nb2xkLWxpZ2h0KSAhaW1wb3J0YW50O1xuXHRib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMTk4LCAxNDksIDQzLCAwLjM1KSAhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWJ0bjpmb2N1cy12aXNpYmxlIHtcblx0b3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWF1LW5hdnkpO1xuXHRvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4vKiB0aGUgXCJ0aGFuayB5b3VcIiBwYW5lbCBhZnRlciBzdWJtaXQgKi9cbltkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtY29tcGxldGVkcGFnZSB7XG5cdGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWJvZHkpICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiB2YXIoLS1hdS10ZXh0KSAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcblx0W2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX2NvbnRlbnQge1xuXHRcdHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpIHZhcigtLXNwYWNlLTQpIDAgIWltcG9ydGFudDtcblx0fVxuXHRbZGF0YS1jZC13aWRnZXQtY29udGFpbmVyXSAuc2Qtcm9vdC1tb2Rlcm4gLnNkLWJvZHksXG5cdFtkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc2QtYm9keS5zZC1ib2R5LS1yZXNwb25zaXZlIHtcblx0XHRwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS01KSAhaW1wb3J0YW50O1xuXHR9XG5cdFtkYXRhLWNkLXdpZGdldC1jb250YWluZXJdIC5zZC1yb290LW1vZGVybiAuc3YtaGVhZGVyX190aXRsZSxcblx0W2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zdi1oZWFkZXJfX3RpdGxlIC5zdi1zdHJpbmctdmlld2VyIHtcblx0XHRmb250LXNpemU6IHZhcigtLXRleHQteGwpICFpbXBvcnRhbnQ7XG5cdH1cblx0W2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIC5zZC1idG4ge1xuXHRcdHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG5cdH1cblx0W2RhdGEtY2Qtd2lkZ2V0LWNvbnRhaW5lcl0gLnNkLXJvb3QtbW9kZXJuIHtcblx0XHQtLWNkLWNvZGUtd2lkdGg6IDYuNXJlbTtcblx0fVxufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5jc3N4Lm1hcCAqLyJdfQ== */