@charset "UTF-8";
/*
.my-component {
  padding: 1rem;

  // Mobile-first responsive design
  @include media-md {
    padding: 2rem;
  }

  @include media-lg {
    padding: 3rem;
  }

  // Desktop-first (use sparingly)
  @include media-down-md {
    font-size: 14px;
  }

  // Between specific breakpoints
  @include media-between($breakpoint-md, $breakpoint-lg) {
    background: blue;
  }

  // Reduced motion for accessibility
  @include reduced-motion {
    transition: none !important;
  }
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/*
Z-Index Layering Strategy:

1-9:          Base content, subtle layering
10-99:        Above content (previews, highlights)
100-999:      Dropdowns, menus, navigation
1000-1999:    Fixed/sticky elements, modals
2000+:        Notifications, alerts, critical UI

Example:
.my-dropdown {
  z-index: $z-index-dropdown;  // 100
}

.my-modal {
  z-index: $z-index-modal;     // 1050
}

.my-tooltip {
  z-index: $z-index-tooltip;   // 1070 (always above modals)
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/**
 * Robo-button style (green gradient with hover overlay)
 * Use this for primary action buttons across the site
 * Note: !important needed to override .btn.btn-primary in all.scss
 * Uses background-image (not background shorthand) so background-color works for hover blend
 */
/**
 * Apply shadow with level
 * @param {string} $level - Shadow level (xs, sm, base, md, lg, xl, 2xl)
 */
/**
 * Card shadow with hover effect
 * @param {boolean} $hover - Enable hover effect (default: true)
 */
/**
 * Product item shadow
 */
/**
 * Focus ring for accessibility
 * @param {color} $color - Focus ring color (default: primary)
 */
/**
 * Focus visible (only on keyboard focus)
 */
/**
 * Hidden (display: none)
 */
/**
 * Visually hidden (for screen readers)
 */
/**
 * Not visually hidden (undo sr-only)
 */
/**
 * Disabled state
 */
/**
 * Loading state
 */
/**
 * Centered spinner on a positioned parent — without any wash overlay.
 * Uses ::after only; parent must have position: relative.
 * Use this when element children are hidden via visibility:hidden so no
 * wash layer is needed to mask them.
 *
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index of the spinner
 */
/**
 * Loading overlay: semi-transparent wash + centered spinner over a positioned parent.
 * Parent must have position: relative (or absolute/fixed).
 * Uses ::before for the wash layer and ::after for the spinner (via loading-spinner-centered).
 * Do not apply to elements that already use both pseudo-elements for other content.
 *
 * @param $bg            Background color of the wash layer
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index for wash (spinner gets +1)
 */
/**
 * Inline spinner appended after element content — for navigation buttons and links.
 * Uses ::after; incompatible with elements that already use ::after for other content.
 *
 * @param $size        Spinner diameter
 * @param $color       Visible spinner arc color
 * @param $track-color Faint track ring color
 * @param $duration    One-rotation duration
 */
/**
 * Truncate text with ellipsis
 */
/**
 * Line clamp (multi-line truncation)
 * @param {number} $lines - Number of lines to show
 */
/**
 * Custom scrollbar styling
 * @param {color} $thumb - Scrollbar thumb color
 * @param {color} $track - Scrollbar track color
 */
/**
 * Absolute center
 */
/**
 * Absolute cover (stretch to fill parent)
 */
/**
 * Fixed cover (stretch to fill viewport)
 */
/**
 * Flex center (both axes)
 */
/**
 * Flex between (space-between)
 */
/**
 * Flex column
 */
/**
 * Grid with auto-fit columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Grid with auto-fill columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Object fit cover
 */
/**
 * Object fit contain
 */
/**
 * Aspect ratio box
 * @param {number} $width - Width ratio
 * @param {number} $height - Height ratio
 */
/**
 * Clearfix for floats
 */
/**
 * Hide in print
 */
/**
 * Show only in print
 */
/*
.my-card {
  @include card-shadow;             // Card with hover shadow
  @include transition(transform);
  border-radius: $radius-md;

  &:hover {
    transform: translateY(-2px);
  }
}

.my-input {
  @include focus-visible;            // Accessible focus ring

  &:disabled {
    @include disabled;               // Disabled state
  }
}

.truncated-text {
  @include line-clamp(3);            // Show 3 lines max
}

.product-grid {
  @include grid-auto-fit(250px);     // Responsive grid
}

.centered-modal {
  @include absolute-center;          // Center in viewport
}
*/
/*
After importing this file, you have access to:

COLORS:
- Primary colors: $color-primary, $color-primary-light, $color-primary-dark
- Grays: $color-gray-50 through $color-gray-900
- Semantic: $color-success, $color-danger, $color-warning, $color-info
- Backgrounds: $bg-page, $bg-light, $bg-dark, etc.
- Text: $text-primary, $text-secondary, $text-muted, etc.
- Borders: $border-default, $border-light, $border-strong
- Gradients: $gradient-primary, $gradient-primary-button, etc.

TYPOGRAPHY:
- Font families: $font-family-base, $font-family-heading
- Font sizes: $font-size-xs through $font-size-6xl
- Heading sizes: $h1-size, $h2-size, etc.
- Font weights: $font-weight-light through $font-weight-black
- Line heights: $line-height-tight, $line-height-normal, etc.

SPACING:
- Scale: $spacing-0 through $spacing-32
- Semantic: $spacing-xs, $spacing-sm, $spacing-md, $spacing-lg, $spacing-xl
- Component-specific: $input-padding-y, $button-padding-x, $card-padding, etc.

SHADOWS:
- Scale: $shadow-xs through $shadow-2xl
- Semantic: $shadow-card, $shadow-dropdown, $shadow-modal, etc.
- Methods: @include shadow('lg');

BORDERS:
- Radius: $radius-none through $radius-full
- Widths: $border-width-1 through $border-width-5
- Styles: $border-default-style, $border-focus-style, etc.

MEDIA QUERIES:
- Breakpoints: $breakpoint-sm, $breakpoint-md, $breakpoint-lg, etc.
- Mixins: @include media-md { ... }, @include media-lg { ... }

TRANSITIONS:
- Durations: $duration-fast, $duration-base, $duration-slow
- Easings: $ease-in, $ease-out, $ease-in-out
- Complete transitions: $transition-button, $transition-card, etc.
- Animations: $animation-spin, $animation-pulse, etc.

Z-INDEX:
- Scale: $z-index-base through $z-index-max
- Semantic: $z-index-dropdown, $z-index-modal, $z-index-tooltip, etc.

MIXINS:
- Shadows: @include card-shadow, @include product-shadow
- Focus: @include focus-ring, @include focus-visible
- Visibility: @include sr-only, @include hidden
- States: @include disabled, @include loading
- Text: @include truncate, @include line-clamp(3)
- Layout: @include flex-center, @include absolute-center
- Grid: @include grid-auto-fit(250px)
- And many more...
*/
/*
Common patterns:

// Card with shadow
.card {
  padding: $spacing-4;
  border-radius: $radius-md;
  @include card-shadow;
}

// Responsive text
.heading {
  font-size: $h2-size-mobile;

  @include media-md {
    font-size: $h2-size-desktop;
  }
}

// Button
.button {
  padding: $button-padding-y $button-padding-x;
  border-radius: $radius-button;
  background: $gradient-primary-button;
  color: $text-inverse;
  @include transition(background-color, $duration-hover);

  &:hover {
    background: $color-primary-dark;
  }

  &:focus-visible {
    @include focus-ring;
  }
}

// Grid layout
.product-grid {
  @include grid-auto-fit(250px, 1fr, $spacing-4);
}

// Truncated text
.description {
  @include line-clamp(3);  // Show 3 lines max
}
*/
@media (max-width: 575px) {
  .datte-modal[data-datte-fullscreen] {
    padding: 0 !important;
  }
  .datte-modal[data-datte-fullscreen] .modal-dialog {
    position: fixed !important;
    inset: 0 !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: 100dvh !important;
    max-height: 100dvh !important;
    transform: none !important;
    border-radius: 0 !important;
    display: flex !important;
    flex-direction: column !important;
  }
  .datte-modal[data-datte-fullscreen] .modal-content {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: 100% !important;
    max-height: 100% !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
  }
  .datte-modal[data-datte-fullscreen] .modal-body {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch;
  }
}
.datte-modal .datte-modal-close,
.datte-modal [data-dismiss=modal],
.datte-modal [data-bs-dismiss=modal] {
  padding: 0;
  background: transparent;
  border: none;
  line-height: 1;
  cursor: pointer;
  color: #999999;
  opacity: 1;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  transition: color 150ms ease, transform 150ms ease;
}
.datte-modal .datte-modal-close span,
.datte-modal [data-dismiss=modal] span,
.datte-modal [data-bs-dismiss=modal] span {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.datte-modal .datte-modal-close:hover,
.datte-modal [data-dismiss=modal]:hover,
.datte-modal [data-bs-dismiss=modal]:hover {
  color: #333333;
}
.datte-modal .datte-modal-close:focus,
.datte-modal [data-dismiss=modal]:focus,
.datte-modal [data-bs-dismiss=modal]:focus {
  outline: none;
}
.datte-modal .modal-header .datte-modal-close,
.datte-modal .modal-header [data-dismiss=modal],
.datte-modal .modal-header [data-bs-dismiss=modal] {
  font-size: 1.5rem;
  margin: -0.5rem -0.5rem -0.5rem auto;
}
.datte-modal .modal-header .datte-modal-close:hover,
.datte-modal .modal-header [data-dismiss=modal]:hover,
.datte-modal .modal-header [data-bs-dismiss=modal]:hover {
  transform: scale(1.05);
}
.datte-modal[data-datte-close-style=corner] .datte-modal-close {
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
  z-index: 10;
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.375rem;
  font-weight: 400;
}
.datte-modal[data-datte-close-style=corner] .datte-modal-close:hover {
  transform: scale(1.1);
}
.datte-modal[data-datte-close-style=corner] .datte-modal-close:active {
  transform: scale(0.9);
}

/*
.my-component {
  padding: 1rem;

  // Mobile-first responsive design
  @include media-md {
    padding: 2rem;
  }

  @include media-lg {
    padding: 3rem;
  }

  // Desktop-first (use sparingly)
  @include media-down-md {
    font-size: 14px;
  }

  // Between specific breakpoints
  @include media-between($breakpoint-md, $breakpoint-lg) {
    background: blue;
  }

  // Reduced motion for accessibility
  @include reduced-motion {
    transition: none !important;
  }
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/*
Z-Index Layering Strategy:

1-9:          Base content, subtle layering
10-99:        Above content (previews, highlights)
100-999:      Dropdowns, menus, navigation
1000-1999:    Fixed/sticky elements, modals
2000+:        Notifications, alerts, critical UI

Example:
.my-dropdown {
  z-index: $z-index-dropdown;  // 100
}

.my-modal {
  z-index: $z-index-modal;     // 1050
}

.my-tooltip {
  z-index: $z-index-tooltip;   // 1070 (always above modals)
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/**
 * Robo-button style (green gradient with hover overlay)
 * Use this for primary action buttons across the site
 * Note: !important needed to override .btn.btn-primary in all.scss
 * Uses background-image (not background shorthand) so background-color works for hover blend
 */
/**
 * Apply shadow with level
 * @param {string} $level - Shadow level (xs, sm, base, md, lg, xl, 2xl)
 */
/**
 * Card shadow with hover effect
 * @param {boolean} $hover - Enable hover effect (default: true)
 */
/**
 * Product item shadow
 */
/**
 * Focus ring for accessibility
 * @param {color} $color - Focus ring color (default: primary)
 */
/**
 * Focus visible (only on keyboard focus)
 */
/**
 * Hidden (display: none)
 */
/**
 * Visually hidden (for screen readers)
 */
/**
 * Not visually hidden (undo sr-only)
 */
/**
 * Disabled state
 */
/**
 * Loading state
 */
/**
 * Centered spinner on a positioned parent — without any wash overlay.
 * Uses ::after only; parent must have position: relative.
 * Use this when element children are hidden via visibility:hidden so no
 * wash layer is needed to mask them.
 *
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index of the spinner
 */
/**
 * Loading overlay: semi-transparent wash + centered spinner over a positioned parent.
 * Parent must have position: relative (or absolute/fixed).
 * Uses ::before for the wash layer and ::after for the spinner (via loading-spinner-centered).
 * Do not apply to elements that already use both pseudo-elements for other content.
 *
 * @param $bg            Background color of the wash layer
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index for wash (spinner gets +1)
 */
/**
 * Inline spinner appended after element content — for navigation buttons and links.
 * Uses ::after; incompatible with elements that already use ::after for other content.
 *
 * @param $size        Spinner diameter
 * @param $color       Visible spinner arc color
 * @param $track-color Faint track ring color
 * @param $duration    One-rotation duration
 */
/**
 * Truncate text with ellipsis
 */
/**
 * Line clamp (multi-line truncation)
 * @param {number} $lines - Number of lines to show
 */
/**
 * Custom scrollbar styling
 * @param {color} $thumb - Scrollbar thumb color
 * @param {color} $track - Scrollbar track color
 */
/**
 * Absolute center
 */
/**
 * Absolute cover (stretch to fill parent)
 */
/**
 * Fixed cover (stretch to fill viewport)
 */
/**
 * Flex center (both axes)
 */
/**
 * Flex between (space-between)
 */
/**
 * Flex column
 */
/**
 * Grid with auto-fit columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Grid with auto-fill columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Object fit cover
 */
/**
 * Object fit contain
 */
/**
 * Aspect ratio box
 * @param {number} $width - Width ratio
 * @param {number} $height - Height ratio
 */
/**
 * Clearfix for floats
 */
/**
 * Hide in print
 */
/**
 * Show only in print
 */
/*
.my-card {
  @include card-shadow;             // Card with hover shadow
  @include transition(transform);
  border-radius: $radius-md;

  &:hover {
    transform: translateY(-2px);
  }
}

.my-input {
  @include focus-visible;            // Accessible focus ring

  &:disabled {
    @include disabled;               // Disabled state
  }
}

.truncated-text {
  @include line-clamp(3);            // Show 3 lines max
}

.product-grid {
  @include grid-auto-fit(250px);     // Responsive grid
}

.centered-modal {
  @include absolute-center;          // Center in viewport
}
*/
/*
After importing this file, you have access to:

COLORS:
- Primary colors: $color-primary, $color-primary-light, $color-primary-dark
- Grays: $color-gray-50 through $color-gray-900
- Semantic: $color-success, $color-danger, $color-warning, $color-info
- Backgrounds: $bg-page, $bg-light, $bg-dark, etc.
- Text: $text-primary, $text-secondary, $text-muted, etc.
- Borders: $border-default, $border-light, $border-strong
- Gradients: $gradient-primary, $gradient-primary-button, etc.

TYPOGRAPHY:
- Font families: $font-family-base, $font-family-heading
- Font sizes: $font-size-xs through $font-size-6xl
- Heading sizes: $h1-size, $h2-size, etc.
- Font weights: $font-weight-light through $font-weight-black
- Line heights: $line-height-tight, $line-height-normal, etc.

SPACING:
- Scale: $spacing-0 through $spacing-32
- Semantic: $spacing-xs, $spacing-sm, $spacing-md, $spacing-lg, $spacing-xl
- Component-specific: $input-padding-y, $button-padding-x, $card-padding, etc.

SHADOWS:
- Scale: $shadow-xs through $shadow-2xl
- Semantic: $shadow-card, $shadow-dropdown, $shadow-modal, etc.
- Methods: @include shadow('lg');

BORDERS:
- Radius: $radius-none through $radius-full
- Widths: $border-width-1 through $border-width-5
- Styles: $border-default-style, $border-focus-style, etc.

MEDIA QUERIES:
- Breakpoints: $breakpoint-sm, $breakpoint-md, $breakpoint-lg, etc.
- Mixins: @include media-md { ... }, @include media-lg { ... }

TRANSITIONS:
- Durations: $duration-fast, $duration-base, $duration-slow
- Easings: $ease-in, $ease-out, $ease-in-out
- Complete transitions: $transition-button, $transition-card, etc.
- Animations: $animation-spin, $animation-pulse, etc.

Z-INDEX:
- Scale: $z-index-base through $z-index-max
- Semantic: $z-index-dropdown, $z-index-modal, $z-index-tooltip, etc.

MIXINS:
- Shadows: @include card-shadow, @include product-shadow
- Focus: @include focus-ring, @include focus-visible
- Visibility: @include sr-only, @include hidden
- States: @include disabled, @include loading
- Text: @include truncate, @include line-clamp(3)
- Layout: @include flex-center, @include absolute-center
- Grid: @include grid-auto-fit(250px)
- And many more...
*/
/*
Common patterns:

// Card with shadow
.card {
  padding: $spacing-4;
  border-radius: $radius-md;
  @include card-shadow;
}

// Responsive text
.heading {
  font-size: $h2-size-mobile;

  @include media-md {
    font-size: $h2-size-desktop;
  }
}

// Button
.button {
  padding: $button-padding-y $button-padding-x;
  border-radius: $radius-button;
  background: $gradient-primary-button;
  color: $text-inverse;
  @include transition(background-color, $duration-hover);

  &:hover {
    background: $color-primary-dark;
  }

  &:focus-visible {
    @include focus-ring;
  }
}

// Grid layout
.product-grid {
  @include grid-auto-fit(250px, 1fr, $spacing-4);
}

// Truncated text
.description {
  @include line-clamp(3);  // Show 3 lines max
}
*/
.datte-modal-trigger {
  cursor: pointer;
  transition: transform 150ms ease, box-shadow 150ms ease;
}
.datte-modal-trigger:hover {
  transform: scale(1.02);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.datte-modal-trigger:focus {
  outline: 2px solid #57d06d;
  outline-offset: 2px;
}

.datte-modal.datte-image-lightbox .modal-dialog {
  max-width: -moz-fit-content !important;
  max-width: fit-content !important;
  width: auto !important;
  margin: 1.75rem auto;
  background: transparent !important;
}
.datte-modal.datte-image-lightbox .modal-content {
  background: #fff;
  border: none;
  border-radius: 0.5rem;
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
  width: -moz-fit-content;
  width: fit-content;
  max-width: 90vw;
  cursor: pointer;
}
.datte-modal.datte-image-lightbox .modal-header {
  padding: 0.75rem 1rem;
  border-bottom: 1px solid #eeeeee;
  background: #fafafa;
  flex-shrink: 0;
}
.datte-modal.datte-image-lightbox .modal-header .modal-title {
  font-size: 1rem;
  font-weight: 600;
  color: #555555;
}
.datte-modal.datte-image-lightbox .modal-body {
  padding: 1rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #fff;
}
.datte-modal.datte-image-lightbox .datte-lightbox-image {
  display: block;
  max-width: 85vw;
  max-height: calc(80vh - 100px);
  width: auto;
  height: auto;
  -o-object-fit: contain;
  object-fit: contain;
  cursor: pointer;
}
@media (max-width: 576px) {
  .datte-modal.datte-image-lightbox .modal-dialog {
    max-width: 95vw !important;
    margin: 0.5rem auto;
  }
  .datte-modal.datte-image-lightbox .modal-header {
    padding: 0.5rem 0.75rem;
  }
  .datte-modal.datte-image-lightbox .modal-header .modal-title {
    font-size: 0.875rem;
  }
  .datte-modal.datte-image-lightbox .modal-body {
    padding: 0.5rem;
  }
  .datte-modal.datte-image-lightbox .datte-lightbox-image {
    max-height: calc(90vh - 60px);
  }
}

/*
.my-component {
  padding: 1rem;

  // Mobile-first responsive design
  @include media-md {
    padding: 2rem;
  }

  @include media-lg {
    padding: 3rem;
  }

  // Desktop-first (use sparingly)
  @include media-down-md {
    font-size: 14px;
  }

  // Between specific breakpoints
  @include media-between($breakpoint-md, $breakpoint-lg) {
    background: blue;
  }

  // Reduced motion for accessibility
  @include reduced-motion {
    transition: none !important;
  }
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/*
Z-Index Layering Strategy:

1-9:          Base content, subtle layering
10-99:        Above content (previews, highlights)
100-999:      Dropdowns, menus, navigation
1000-1999:    Fixed/sticky elements, modals
2000+:        Notifications, alerts, critical UI

Example:
.my-dropdown {
  z-index: $z-index-dropdown;  // 100
}

.my-modal {
  z-index: $z-index-modal;     // 1050
}

.my-tooltip {
  z-index: $z-index-tooltip;   // 1070 (always above modals)
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/**
 * Robo-button style (green gradient with hover overlay)
 * Use this for primary action buttons across the site
 * Note: !important needed to override .btn.btn-primary in all.scss
 * Uses background-image (not background shorthand) so background-color works for hover blend
 */
/**
 * Apply shadow with level
 * @param {string} $level - Shadow level (xs, sm, base, md, lg, xl, 2xl)
 */
/**
 * Card shadow with hover effect
 * @param {boolean} $hover - Enable hover effect (default: true)
 */
/**
 * Product item shadow
 */
/**
 * Focus ring for accessibility
 * @param {color} $color - Focus ring color (default: primary)
 */
/**
 * Focus visible (only on keyboard focus)
 */
/**
 * Hidden (display: none)
 */
/**
 * Visually hidden (for screen readers)
 */
/**
 * Not visually hidden (undo sr-only)
 */
/**
 * Disabled state
 */
/**
 * Loading state
 */
/**
 * Centered spinner on a positioned parent — without any wash overlay.
 * Uses ::after only; parent must have position: relative.
 * Use this when element children are hidden via visibility:hidden so no
 * wash layer is needed to mask them.
 *
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index of the spinner
 */
/**
 * Loading overlay: semi-transparent wash + centered spinner over a positioned parent.
 * Parent must have position: relative (or absolute/fixed).
 * Uses ::before for the wash layer and ::after for the spinner (via loading-spinner-centered).
 * Do not apply to elements that already use both pseudo-elements for other content.
 *
 * @param $bg            Background color of the wash layer
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index for wash (spinner gets +1)
 */
/**
 * Inline spinner appended after element content — for navigation buttons and links.
 * Uses ::after; incompatible with elements that already use ::after for other content.
 *
 * @param $size        Spinner diameter
 * @param $color       Visible spinner arc color
 * @param $track-color Faint track ring color
 * @param $duration    One-rotation duration
 */
/**
 * Truncate text with ellipsis
 */
/**
 * Line clamp (multi-line truncation)
 * @param {number} $lines - Number of lines to show
 */
/**
 * Custom scrollbar styling
 * @param {color} $thumb - Scrollbar thumb color
 * @param {color} $track - Scrollbar track color
 */
/**
 * Absolute center
 */
/**
 * Absolute cover (stretch to fill parent)
 */
/**
 * Fixed cover (stretch to fill viewport)
 */
/**
 * Flex center (both axes)
 */
/**
 * Flex between (space-between)
 */
/**
 * Flex column
 */
/**
 * Grid with auto-fit columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Grid with auto-fill columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Object fit cover
 */
/**
 * Object fit contain
 */
/**
 * Aspect ratio box
 * @param {number} $width - Width ratio
 * @param {number} $height - Height ratio
 */
/**
 * Clearfix for floats
 */
/**
 * Hide in print
 */
/**
 * Show only in print
 */
/*
.my-card {
  @include card-shadow;             // Card with hover shadow
  @include transition(transform);
  border-radius: $radius-md;

  &:hover {
    transform: translateY(-2px);
  }
}

.my-input {
  @include focus-visible;            // Accessible focus ring

  &:disabled {
    @include disabled;               // Disabled state
  }
}

.truncated-text {
  @include line-clamp(3);            // Show 3 lines max
}

.product-grid {
  @include grid-auto-fit(250px);     // Responsive grid
}

.centered-modal {
  @include absolute-center;          // Center in viewport
}
*/
/*
After importing this file, you have access to:

COLORS:
- Primary colors: $color-primary, $color-primary-light, $color-primary-dark
- Grays: $color-gray-50 through $color-gray-900
- Semantic: $color-success, $color-danger, $color-warning, $color-info
- Backgrounds: $bg-page, $bg-light, $bg-dark, etc.
- Text: $text-primary, $text-secondary, $text-muted, etc.
- Borders: $border-default, $border-light, $border-strong
- Gradients: $gradient-primary, $gradient-primary-button, etc.

TYPOGRAPHY:
- Font families: $font-family-base, $font-family-heading
- Font sizes: $font-size-xs through $font-size-6xl
- Heading sizes: $h1-size, $h2-size, etc.
- Font weights: $font-weight-light through $font-weight-black
- Line heights: $line-height-tight, $line-height-normal, etc.

SPACING:
- Scale: $spacing-0 through $spacing-32
- Semantic: $spacing-xs, $spacing-sm, $spacing-md, $spacing-lg, $spacing-xl
- Component-specific: $input-padding-y, $button-padding-x, $card-padding, etc.

SHADOWS:
- Scale: $shadow-xs through $shadow-2xl
- Semantic: $shadow-card, $shadow-dropdown, $shadow-modal, etc.
- Methods: @include shadow('lg');

BORDERS:
- Radius: $radius-none through $radius-full
- Widths: $border-width-1 through $border-width-5
- Styles: $border-default-style, $border-focus-style, etc.

MEDIA QUERIES:
- Breakpoints: $breakpoint-sm, $breakpoint-md, $breakpoint-lg, etc.
- Mixins: @include media-md { ... }, @include media-lg { ... }

TRANSITIONS:
- Durations: $duration-fast, $duration-base, $duration-slow
- Easings: $ease-in, $ease-out, $ease-in-out
- Complete transitions: $transition-button, $transition-card, etc.
- Animations: $animation-spin, $animation-pulse, etc.

Z-INDEX:
- Scale: $z-index-base through $z-index-max
- Semantic: $z-index-dropdown, $z-index-modal, $z-index-tooltip, etc.

MIXINS:
- Shadows: @include card-shadow, @include product-shadow
- Focus: @include focus-ring, @include focus-visible
- Visibility: @include sr-only, @include hidden
- States: @include disabled, @include loading
- Text: @include truncate, @include line-clamp(3)
- Layout: @include flex-center, @include absolute-center
- Grid: @include grid-auto-fit(250px)
- And many more...
*/
/*
Common patterns:

// Card with shadow
.card {
  padding: $spacing-4;
  border-radius: $radius-md;
  @include card-shadow;
}

// Responsive text
.heading {
  font-size: $h2-size-mobile;

  @include media-md {
    font-size: $h2-size-desktop;
  }
}

// Button
.button {
  padding: $button-padding-y $button-padding-x;
  border-radius: $radius-button;
  background: $gradient-primary-button;
  color: $text-inverse;
  @include transition(background-color, $duration-hover);

  &:hover {
    background: $color-primary-dark;
  }

  &:focus-visible {
    @include focus-ring;
  }
}

// Grid layout
.product-grid {
  @include grid-auto-fit(250px, 1fr, $spacing-4);
}

// Truncated text
.description {
  @include line-clamp(3);  // Show 3 lines max
}
*/
.datte-modal.datte-mf-page-modal {
  z-index: 1050;
  overflow: hidden;
  --datte-modal-max-width: 1500px;
  --datte-modal-max-height: 900px;
}
.datte-modal.datte-mf-page-modal.modal {
  background-color: transparent;
  padding-left: 0;
  padding-right: 0;
}
.datte-modal.datte-mf-page-modal .modal-dialog {
  background: transparent;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 1rem auto;
  min-height: calc(100vh - 2rem);
  border-radius: 0.5rem;
  max-width: min(94vw, var(--datte-modal-max-width, 1500px));
  width: 100%;
  min-width: min(90vw, 320px);
}
@media (max-width: 900px) {
  .datte-modal.datte-mf-page-modal .modal-dialog {
    max-width: 94vw;
  }
}
.datte-modal.datte-mf-page-modal .modal-content {
  border-radius: 0.5rem;
  overflow: hidden;
  position: relative;
  min-height: 0;
  max-width: 100%;
  width: 100%;
  height: var(--datte-modal-content-height, min(100svh - 2rem, var(--datte-modal-max-height, 900px)));
  max-height: var(--datte-modal-content-height, min(100svh - 2rem, var(--datte-modal-max-height, 900px)));
  display: flex;
  flex-direction: column;
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
}
.datte-modal.datte-mf-page-modal .modal-body {
  padding: 1rem;
  padding-top: 1.25rem;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  -ms-scroll-chaining: none;
  overscroll-behavior: contain;
  touch-action: pan-y;
  -webkit-overflow-scrolling: touch;
  background-color: #f8f8f8;
}

.datte-mf-page-modal .modal-body .datte-model-finder-page {
  margin: 0 auto;
  padding: 0;
  background-color: transparent;
  max-width: 100%;
  box-sizing: border-box;
  min-height: 0;
}
.datte-mf-page-modal .modal-body .datte-model-finder-page .datte-mf-page-header {
  padding-right: 45px;
}
@media (max-width: 575px) {
  .datte-mf-page-modal .modal-body .datte-model-finder-page {
    width: 100%;
    max-width: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
  }
  .datte-mf-page-modal .modal-body .datte-model-finder-page .datte-mf-page-header {
    flex: 0 0 auto;
    margin-bottom: 0;
  }
  .datte-mf-page-modal .modal-body .datte-model-finder-page > * {
    min-width: 0;
  }
}
.datte-mf-page-modal .modal-body .datte-mf-page-preview-card {
  touch-action: pan-y;
  -webkit-touch-callout: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-user-select: none;
}
@media (max-width: 575px) {
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card {
    max-width: 100%;
    width: 100%;
    min-height: 0;
    overflow: hidden;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card img,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card .datte-mf-page-preview-image {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    max-height: min(22svh, 180px);
    -o-object-fit: contain;
    object-fit: contain;
    margin-left: auto;
    margin-right: auto;
  }
}
.datte-mf-page-modal .modal-body .datte-mf-page-preview-image {
  -webkit-user-drag: none;
  pointer-events: none;
}
@media (max-width: 575px) {
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-column,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-wrapper {
    max-width: 100%;
    width: 100%;
    min-width: 0;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card {
    padding: 0.75rem;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:has(.datte-mf-page-preview-image[src=""]) .datte-mf-page-preview-image-wrapper,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:has(.datte-mf-page-preview-image[src=""]) .datte-mf-page-preview-image,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:has(.datte-mf-page-preview-image[src=""]) img,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:not(:has(.datte-mf-page-preview-image)) .datte-mf-page-preview-image-wrapper,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:not(:has(.datte-mf-page-preview-image)) .datte-mf-page-preview-image,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:not(:has(.datte-mf-page-preview-image)) img,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:not(:has(img)) .datte-mf-page-preview-image-wrapper,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:not(:has(img)) .datte-mf-page-preview-image,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-card:not(:has(img)) img {
    display: none !important;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-image-wrapper:empty,
  .datte-mf-page-modal .modal-body .datte-mf-page-preview-image[src=""] {
    display: none !important;
  }
}

.datte-mf-modal-loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 300px;
  padding: 2rem;
  color: #888888;
}
.datte-mf-modal-loading p {
  margin-top: 1rem;
  font-size: 1rem !important;
}

.datte-mf-modal-spinner {
  width: 48px;
  height: 48px;
  border: 3px solid rgba(0, 0, 0, 0.1);
  border-top-color: rgba(76, 175, 80, 0.8);
  border-radius: 50%;
  animation: datte-mf-modal-spin 1s linear infinite;
}

@keyframes datte-mf-modal-spin {
  to {
    transform: rotate(360deg);
  }
}
.datte-mf-modal-trigger {
  margin-bottom: 1rem;
  white-space: nowrap;
  width: auto;
  height: 40px;
  font-size: 1.125rem;
}

/* ============================================================================
 * Desktop modal — fill the modal height; preview as a right sidebar.
 * The standalone finder caps each device column and stacks the preview below;
 * in the tall catalog modal we let the finder fill the body and (on a wide
 * finder) move the preview into a right sidebar. Mobile keeps the stacked sheet.
 * ========================================================================== */
@media (min-width: 576px) {
  .datte-mf-page-modal .modal-body .datte-model-finder-page {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-header {
    flex: 0 0 auto;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-container {
    flex: 1 1 auto;
    min-height: 0;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-columns {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 0;
    align-items: stretch;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-column {
    height: auto;
    min-height: 0;
  }
}
@container model-finder (min-width: 856px) {
  .datte-mf-page-modal .modal-body .datte-mf-page-container {
    flex-direction: row;
    align-items: stretch;
    gap: var(--mf-spacing-lg);
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-columns {
    min-width: 0;
  }
  .datte-mf-page-modal .modal-body .datte-mf-page-preview {
    flex: 0 0 var(--mf-preview-width);
    align-self: stretch;
    min-height: 0;
  }
}
/*
.my-component {
  padding: 1rem;

  // Mobile-first responsive design
  @include media-md {
    padding: 2rem;
  }

  @include media-lg {
    padding: 3rem;
  }

  // Desktop-first (use sparingly)
  @include media-down-md {
    font-size: 14px;
  }

  // Between specific breakpoints
  @include media-between($breakpoint-md, $breakpoint-lg) {
    background: blue;
  }

  // Reduced motion for accessibility
  @include reduced-motion {
    transition: none !important;
  }
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/*
Z-Index Layering Strategy:

1-9:          Base content, subtle layering
10-99:        Above content (previews, highlights)
100-999:      Dropdowns, menus, navigation
1000-1999:    Fixed/sticky elements, modals
2000+:        Notifications, alerts, critical UI

Example:
.my-dropdown {
  z-index: $z-index-dropdown;  // 100
}

.my-modal {
  z-index: $z-index-modal;     // 1050
}

.my-tooltip {
  z-index: $z-index-tooltip;   // 1070 (always above modals)
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/**
 * Robo-button style (green gradient with hover overlay)
 * Use this for primary action buttons across the site
 * Note: !important needed to override .btn.btn-primary in all.scss
 * Uses background-image (not background shorthand) so background-color works for hover blend
 */
/**
 * Apply shadow with level
 * @param {string} $level - Shadow level (xs, sm, base, md, lg, xl, 2xl)
 */
/**
 * Card shadow with hover effect
 * @param {boolean} $hover - Enable hover effect (default: true)
 */
/**
 * Product item shadow
 */
/**
 * Focus ring for accessibility
 * @param {color} $color - Focus ring color (default: primary)
 */
/**
 * Focus visible (only on keyboard focus)
 */
/**
 * Hidden (display: none)
 */
/**
 * Visually hidden (for screen readers)
 */
/**
 * Not visually hidden (undo sr-only)
 */
/**
 * Disabled state
 */
/**
 * Loading state
 */
/**
 * Centered spinner on a positioned parent — without any wash overlay.
 * Uses ::after only; parent must have position: relative.
 * Use this when element children are hidden via visibility:hidden so no
 * wash layer is needed to mask them.
 *
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index of the spinner
 */
/**
 * Loading overlay: semi-transparent wash + centered spinner over a positioned parent.
 * Parent must have position: relative (or absolute/fixed).
 * Uses ::before for the wash layer and ::after for the spinner (via loading-spinner-centered).
 * Do not apply to elements that already use both pseudo-elements for other content.
 *
 * @param $bg            Background color of the wash layer
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index for wash (spinner gets +1)
 */
/**
 * Inline spinner appended after element content — for navigation buttons and links.
 * Uses ::after; incompatible with elements that already use ::after for other content.
 *
 * @param $size        Spinner diameter
 * @param $color       Visible spinner arc color
 * @param $track-color Faint track ring color
 * @param $duration    One-rotation duration
 */
/**
 * Truncate text with ellipsis
 */
/**
 * Line clamp (multi-line truncation)
 * @param {number} $lines - Number of lines to show
 */
/**
 * Custom scrollbar styling
 * @param {color} $thumb - Scrollbar thumb color
 * @param {color} $track - Scrollbar track color
 */
/**
 * Absolute center
 */
/**
 * Absolute cover (stretch to fill parent)
 */
/**
 * Fixed cover (stretch to fill viewport)
 */
/**
 * Flex center (both axes)
 */
/**
 * Flex between (space-between)
 */
/**
 * Flex column
 */
/**
 * Grid with auto-fit columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Grid with auto-fill columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Object fit cover
 */
/**
 * Object fit contain
 */
/**
 * Aspect ratio box
 * @param {number} $width - Width ratio
 * @param {number} $height - Height ratio
 */
/**
 * Clearfix for floats
 */
/**
 * Hide in print
 */
/**
 * Show only in print
 */
/*
.my-card {
  @include card-shadow;             // Card with hover shadow
  @include transition(transform);
  border-radius: $radius-md;

  &:hover {
    transform: translateY(-2px);
  }
}

.my-input {
  @include focus-visible;            // Accessible focus ring

  &:disabled {
    @include disabled;               // Disabled state
  }
}

.truncated-text {
  @include line-clamp(3);            // Show 3 lines max
}

.product-grid {
  @include grid-auto-fit(250px);     // Responsive grid
}

.centered-modal {
  @include absolute-center;          // Center in viewport
}
*/
/*
After importing this file, you have access to:

COLORS:
- Primary colors: $color-primary, $color-primary-light, $color-primary-dark
- Grays: $color-gray-50 through $color-gray-900
- Semantic: $color-success, $color-danger, $color-warning, $color-info
- Backgrounds: $bg-page, $bg-light, $bg-dark, etc.
- Text: $text-primary, $text-secondary, $text-muted, etc.
- Borders: $border-default, $border-light, $border-strong
- Gradients: $gradient-primary, $gradient-primary-button, etc.

TYPOGRAPHY:
- Font families: $font-family-base, $font-family-heading
- Font sizes: $font-size-xs through $font-size-6xl
- Heading sizes: $h1-size, $h2-size, etc.
- Font weights: $font-weight-light through $font-weight-black
- Line heights: $line-height-tight, $line-height-normal, etc.

SPACING:
- Scale: $spacing-0 through $spacing-32
- Semantic: $spacing-xs, $spacing-sm, $spacing-md, $spacing-lg, $spacing-xl
- Component-specific: $input-padding-y, $button-padding-x, $card-padding, etc.

SHADOWS:
- Scale: $shadow-xs through $shadow-2xl
- Semantic: $shadow-card, $shadow-dropdown, $shadow-modal, etc.
- Methods: @include shadow('lg');

BORDERS:
- Radius: $radius-none through $radius-full
- Widths: $border-width-1 through $border-width-5
- Styles: $border-default-style, $border-focus-style, etc.

MEDIA QUERIES:
- Breakpoints: $breakpoint-sm, $breakpoint-md, $breakpoint-lg, etc.
- Mixins: @include media-md { ... }, @include media-lg { ... }

TRANSITIONS:
- Durations: $duration-fast, $duration-base, $duration-slow
- Easings: $ease-in, $ease-out, $ease-in-out
- Complete transitions: $transition-button, $transition-card, etc.
- Animations: $animation-spin, $animation-pulse, etc.

Z-INDEX:
- Scale: $z-index-base through $z-index-max
- Semantic: $z-index-dropdown, $z-index-modal, $z-index-tooltip, etc.

MIXINS:
- Shadows: @include card-shadow, @include product-shadow
- Focus: @include focus-ring, @include focus-visible
- Visibility: @include sr-only, @include hidden
- States: @include disabled, @include loading
- Text: @include truncate, @include line-clamp(3)
- Layout: @include flex-center, @include absolute-center
- Grid: @include grid-auto-fit(250px)
- And many more...
*/
/*
Common patterns:

// Card with shadow
.card {
  padding: $spacing-4;
  border-radius: $radius-md;
  @include card-shadow;
}

// Responsive text
.heading {
  font-size: $h2-size-mobile;

  @include media-md {
    font-size: $h2-size-desktop;
  }
}

// Button
.button {
  padding: $button-padding-y $button-padding-x;
  border-radius: $radius-button;
  background: $gradient-primary-button;
  color: $text-inverse;
  @include transition(background-color, $duration-hover);

  &:hover {
    background: $color-primary-dark;
  }

  &:focus-visible {
    @include focus-ring;
  }
}

// Grid layout
.product-grid {
  @include grid-auto-fit(250px, 1fr, $spacing-4);
}

// Truncated text
.description {
  @include line-clamp(3);  // Show 3 lines max
}
*/
.datte-modal.datte-config-modal .modal-content {
  border: none;
}

/*
.my-component {
  padding: 1rem;

  // Mobile-first responsive design
  @include media-md {
    padding: 2rem;
  }

  @include media-lg {
    padding: 3rem;
  }

  // Desktop-first (use sparingly)
  @include media-down-md {
    font-size: 14px;
  }

  // Between specific breakpoints
  @include media-between($breakpoint-md, $breakpoint-lg) {
    background: blue;
  }

  // Reduced motion for accessibility
  @include reduced-motion {
    transition: none !important;
  }
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/*
Z-Index Layering Strategy:

1-9:          Base content, subtle layering
10-99:        Above content (previews, highlights)
100-999:      Dropdowns, menus, navigation
1000-1999:    Fixed/sticky elements, modals
2000+:        Notifications, alerts, critical UI

Example:
.my-dropdown {
  z-index: $z-index-dropdown;  // 100
}

.my-modal {
  z-index: $z-index-modal;     // 1050
}

.my-tooltip {
  z-index: $z-index-tooltip;   // 1070 (always above modals)
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/**
 * Robo-button style (green gradient with hover overlay)
 * Use this for primary action buttons across the site
 * Note: !important needed to override .btn.btn-primary in all.scss
 * Uses background-image (not background shorthand) so background-color works for hover blend
 */
/**
 * Apply shadow with level
 * @param {string} $level - Shadow level (xs, sm, base, md, lg, xl, 2xl)
 */
/**
 * Card shadow with hover effect
 * @param {boolean} $hover - Enable hover effect (default: true)
 */
/**
 * Product item shadow
 */
/**
 * Focus ring for accessibility
 * @param {color} $color - Focus ring color (default: primary)
 */
/**
 * Focus visible (only on keyboard focus)
 */
/**
 * Hidden (display: none)
 */
/**
 * Visually hidden (for screen readers)
 */
/**
 * Not visually hidden (undo sr-only)
 */
/**
 * Disabled state
 */
/**
 * Loading state
 */
/**
 * Centered spinner on a positioned parent — without any wash overlay.
 * Uses ::after only; parent must have position: relative.
 * Use this when element children are hidden via visibility:hidden so no
 * wash layer is needed to mask them.
 *
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index of the spinner
 */
/**
 * Loading overlay: semi-transparent wash + centered spinner over a positioned parent.
 * Parent must have position: relative (or absolute/fixed).
 * Uses ::before for the wash layer and ::after for the spinner (via loading-spinner-centered).
 * Do not apply to elements that already use both pseudo-elements for other content.
 *
 * @param $bg            Background color of the wash layer
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index for wash (spinner gets +1)
 */
/**
 * Inline spinner appended after element content — for navigation buttons and links.
 * Uses ::after; incompatible with elements that already use ::after for other content.
 *
 * @param $size        Spinner diameter
 * @param $color       Visible spinner arc color
 * @param $track-color Faint track ring color
 * @param $duration    One-rotation duration
 */
/**
 * Truncate text with ellipsis
 */
/**
 * Line clamp (multi-line truncation)
 * @param {number} $lines - Number of lines to show
 */
/**
 * Custom scrollbar styling
 * @param {color} $thumb - Scrollbar thumb color
 * @param {color} $track - Scrollbar track color
 */
/**
 * Absolute center
 */
/**
 * Absolute cover (stretch to fill parent)
 */
/**
 * Fixed cover (stretch to fill viewport)
 */
/**
 * Flex center (both axes)
 */
/**
 * Flex between (space-between)
 */
/**
 * Flex column
 */
/**
 * Grid with auto-fit columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Grid with auto-fill columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Object fit cover
 */
/**
 * Object fit contain
 */
/**
 * Aspect ratio box
 * @param {number} $width - Width ratio
 * @param {number} $height - Height ratio
 */
/**
 * Clearfix for floats
 */
/**
 * Hide in print
 */
/**
 * Show only in print
 */
/*
.my-card {
  @include card-shadow;             // Card with hover shadow
  @include transition(transform);
  border-radius: $radius-md;

  &:hover {
    transform: translateY(-2px);
  }
}

.my-input {
  @include focus-visible;            // Accessible focus ring

  &:disabled {
    @include disabled;               // Disabled state
  }
}

.truncated-text {
  @include line-clamp(3);            // Show 3 lines max
}

.product-grid {
  @include grid-auto-fit(250px);     // Responsive grid
}

.centered-modal {
  @include absolute-center;          // Center in viewport
}
*/
/*
After importing this file, you have access to:

COLORS:
- Primary colors: $color-primary, $color-primary-light, $color-primary-dark
- Grays: $color-gray-50 through $color-gray-900
- Semantic: $color-success, $color-danger, $color-warning, $color-info
- Backgrounds: $bg-page, $bg-light, $bg-dark, etc.
- Text: $text-primary, $text-secondary, $text-muted, etc.
- Borders: $border-default, $border-light, $border-strong
- Gradients: $gradient-primary, $gradient-primary-button, etc.

TYPOGRAPHY:
- Font families: $font-family-base, $font-family-heading
- Font sizes: $font-size-xs through $font-size-6xl
- Heading sizes: $h1-size, $h2-size, etc.
- Font weights: $font-weight-light through $font-weight-black
- Line heights: $line-height-tight, $line-height-normal, etc.

SPACING:
- Scale: $spacing-0 through $spacing-32
- Semantic: $spacing-xs, $spacing-sm, $spacing-md, $spacing-lg, $spacing-xl
- Component-specific: $input-padding-y, $button-padding-x, $card-padding, etc.

SHADOWS:
- Scale: $shadow-xs through $shadow-2xl
- Semantic: $shadow-card, $shadow-dropdown, $shadow-modal, etc.
- Methods: @include shadow('lg');

BORDERS:
- Radius: $radius-none through $radius-full
- Widths: $border-width-1 through $border-width-5
- Styles: $border-default-style, $border-focus-style, etc.

MEDIA QUERIES:
- Breakpoints: $breakpoint-sm, $breakpoint-md, $breakpoint-lg, etc.
- Mixins: @include media-md { ... }, @include media-lg { ... }

TRANSITIONS:
- Durations: $duration-fast, $duration-base, $duration-slow
- Easings: $ease-in, $ease-out, $ease-in-out
- Complete transitions: $transition-button, $transition-card, etc.
- Animations: $animation-spin, $animation-pulse, etc.

Z-INDEX:
- Scale: $z-index-base through $z-index-max
- Semantic: $z-index-dropdown, $z-index-modal, $z-index-tooltip, etc.

MIXINS:
- Shadows: @include card-shadow, @include product-shadow
- Focus: @include focus-ring, @include focus-visible
- Visibility: @include sr-only, @include hidden
- States: @include disabled, @include loading
- Text: @include truncate, @include line-clamp(3)
- Layout: @include flex-center, @include absolute-center
- Grid: @include grid-auto-fit(250px)
- And many more...
*/
/*
Common patterns:

// Card with shadow
.card {
  padding: $spacing-4;
  border-radius: $radius-md;
  @include card-shadow;
}

// Responsive text
.heading {
  font-size: $h2-size-mobile;

  @include media-md {
    font-size: $h2-size-desktop;
  }
}

// Button
.button {
  padding: $button-padding-y $button-padding-x;
  border-radius: $radius-button;
  background: $gradient-primary-button;
  color: $text-inverse;
  @include transition(background-color, $duration-hover);

  &:hover {
    background: $color-primary-dark;
  }

  &:focus-visible {
    @include focus-ring;
  }
}

// Grid layout
.product-grid {
  @include grid-auto-fit(250px, 1fr, $spacing-4);
}

// Truncated text
.description {
  @include line-clamp(3);  // Show 3 lines max
}
*/
.datte-modal.datte-ersatzkontakt button[type=submit].pull-right {
  margin-left: 0.5rem;
}
.datte-modal.datte-ersatzkontakt .modal-body:has(#km-ersatzteile-programm-artikel) {
  max-height: 80vh;
}

/*
.my-component {
  padding: 1rem;

  // Mobile-first responsive design
  @include media-md {
    padding: 2rem;
  }

  @include media-lg {
    padding: 3rem;
  }

  // Desktop-first (use sparingly)
  @include media-down-md {
    font-size: 14px;
  }

  // Between specific breakpoints
  @include media-between($breakpoint-md, $breakpoint-lg) {
    background: blue;
  }

  // Reduced motion for accessibility
  @include reduced-motion {
    transition: none !important;
  }
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/*
Z-Index Layering Strategy:

1-9:          Base content, subtle layering
10-99:        Above content (previews, highlights)
100-999:      Dropdowns, menus, navigation
1000-1999:    Fixed/sticky elements, modals
2000+:        Notifications, alerts, critical UI

Example:
.my-dropdown {
  z-index: $z-index-dropdown;  // 100
}

.my-modal {
  z-index: $z-index-modal;     // 1050
}

.my-tooltip {
  z-index: $z-index-tooltip;   // 1070 (always above modals)
}
*/
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
@keyframes pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 0.8;
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes slide-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
/*
.button {
  @include transition(background-color);  // Single property

  &:hover {
    background-color: blue;
  }
}

.card {
  @include transitions($transition-shadow, $transition-transform);  // Multiple properties

  &:hover {
    box-shadow: $shadow-lg;
    transform: translateY(-2px);
  }
}

.spinner {
  animation: $animation-spin;
}

// Respect reduced motion
* {
  @include respect-reduced-motion;
}
*/
/**
 * Robo-button style (green gradient with hover overlay)
 * Use this for primary action buttons across the site
 * Note: !important needed to override .btn.btn-primary in all.scss
 * Uses background-image (not background shorthand) so background-color works for hover blend
 */
/**
 * Apply shadow with level
 * @param {string} $level - Shadow level (xs, sm, base, md, lg, xl, 2xl)
 */
/**
 * Card shadow with hover effect
 * @param {boolean} $hover - Enable hover effect (default: true)
 */
/**
 * Product item shadow
 */
/**
 * Focus ring for accessibility
 * @param {color} $color - Focus ring color (default: primary)
 */
/**
 * Focus visible (only on keyboard focus)
 */
/**
 * Hidden (display: none)
 */
/**
 * Visually hidden (for screen readers)
 */
/**
 * Not visually hidden (undo sr-only)
 */
/**
 * Disabled state
 */
/**
 * Loading state
 */
/**
 * Centered spinner on a positioned parent — without any wash overlay.
 * Uses ::after only; parent must have position: relative.
 * Use this when element children are hidden via visibility:hidden so no
 * wash layer is needed to mask them.
 *
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index of the spinner
 */
/**
 * Loading overlay: semi-transparent wash + centered spinner over a positioned parent.
 * Parent must have position: relative (or absolute/fixed).
 * Uses ::before for the wash layer and ::after for the spinner (via loading-spinner-centered).
 * Do not apply to elements that already use both pseudo-elements for other content.
 *
 * @param $bg            Background color of the wash layer
 * @param $spinner-color Visible spinner arc color
 * @param $spinner-track Faint track ring color
 * @param $spinner-size  Diameter of the spinner
 * @param $z-index       Z-index for wash (spinner gets +1)
 */
/**
 * Inline spinner appended after element content — for navigation buttons and links.
 * Uses ::after; incompatible with elements that already use ::after for other content.
 *
 * @param $size        Spinner diameter
 * @param $color       Visible spinner arc color
 * @param $track-color Faint track ring color
 * @param $duration    One-rotation duration
 */
/**
 * Truncate text with ellipsis
 */
/**
 * Line clamp (multi-line truncation)
 * @param {number} $lines - Number of lines to show
 */
/**
 * Custom scrollbar styling
 * @param {color} $thumb - Scrollbar thumb color
 * @param {color} $track - Scrollbar track color
 */
/**
 * Absolute center
 */
/**
 * Absolute cover (stretch to fill parent)
 */
/**
 * Fixed cover (stretch to fill viewport)
 */
/**
 * Flex center (both axes)
 */
/**
 * Flex between (space-between)
 */
/**
 * Flex column
 */
/**
 * Grid with auto-fit columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Grid with auto-fill columns
 * @param {size} $min - Minimum column width
 * @param {size} $max - Maximum column width (default: 1fr)
 * @param {size} $gap - Gap between columns (default: $spacing-4)
 */
/**
 * Object fit cover
 */
/**
 * Object fit contain
 */
/**
 * Aspect ratio box
 * @param {number} $width - Width ratio
 * @param {number} $height - Height ratio
 */
/**
 * Clearfix for floats
 */
/**
 * Hide in print
 */
/**
 * Show only in print
 */
/*
.my-card {
  @include card-shadow;             // Card with hover shadow
  @include transition(transform);
  border-radius: $radius-md;

  &:hover {
    transform: translateY(-2px);
  }
}

.my-input {
  @include focus-visible;            // Accessible focus ring

  &:disabled {
    @include disabled;               // Disabled state
  }
}

.truncated-text {
  @include line-clamp(3);            // Show 3 lines max
}

.product-grid {
  @include grid-auto-fit(250px);     // Responsive grid
}

.centered-modal {
  @include absolute-center;          // Center in viewport
}
*/
/*
After importing this file, you have access to:

COLORS:
- Primary colors: $color-primary, $color-primary-light, $color-primary-dark
- Grays: $color-gray-50 through $color-gray-900
- Semantic: $color-success, $color-danger, $color-warning, $color-info
- Backgrounds: $bg-page, $bg-light, $bg-dark, etc.
- Text: $text-primary, $text-secondary, $text-muted, etc.
- Borders: $border-default, $border-light, $border-strong
- Gradients: $gradient-primary, $gradient-primary-button, etc.

TYPOGRAPHY:
- Font families: $font-family-base, $font-family-heading
- Font sizes: $font-size-xs through $font-size-6xl
- Heading sizes: $h1-size, $h2-size, etc.
- Font weights: $font-weight-light through $font-weight-black
- Line heights: $line-height-tight, $line-height-normal, etc.

SPACING:
- Scale: $spacing-0 through $spacing-32
- Semantic: $spacing-xs, $spacing-sm, $spacing-md, $spacing-lg, $spacing-xl
- Component-specific: $input-padding-y, $button-padding-x, $card-padding, etc.

SHADOWS:
- Scale: $shadow-xs through $shadow-2xl
- Semantic: $shadow-card, $shadow-dropdown, $shadow-modal, etc.
- Methods: @include shadow('lg');

BORDERS:
- Radius: $radius-none through $radius-full
- Widths: $border-width-1 through $border-width-5
- Styles: $border-default-style, $border-focus-style, etc.

MEDIA QUERIES:
- Breakpoints: $breakpoint-sm, $breakpoint-md, $breakpoint-lg, etc.
- Mixins: @include media-md { ... }, @include media-lg { ... }

TRANSITIONS:
- Durations: $duration-fast, $duration-base, $duration-slow
- Easings: $ease-in, $ease-out, $ease-in-out
- Complete transitions: $transition-button, $transition-card, etc.
- Animations: $animation-spin, $animation-pulse, etc.

Z-INDEX:
- Scale: $z-index-base through $z-index-max
- Semantic: $z-index-dropdown, $z-index-modal, $z-index-tooltip, etc.

MIXINS:
- Shadows: @include card-shadow, @include product-shadow
- Focus: @include focus-ring, @include focus-visible
- Visibility: @include sr-only, @include hidden
- States: @include disabled, @include loading
- Text: @include truncate, @include line-clamp(3)
- Layout: @include flex-center, @include absolute-center
- Grid: @include grid-auto-fit(250px)
- And many more...
*/
/*
Common patterns:

// Card with shadow
.card {
  padding: $spacing-4;
  border-radius: $radius-md;
  @include card-shadow;
}

// Responsive text
.heading {
  font-size: $h2-size-mobile;

  @include media-md {
    font-size: $h2-size-desktop;
  }
}

// Button
.button {
  padding: $button-padding-y $button-padding-x;
  border-radius: $radius-button;
  background: $gradient-primary-button;
  color: $text-inverse;
  @include transition(background-color, $duration-hover);

  &:hover {
    background: $color-primary-dark;
  }

  &:focus-visible {
    @include focus-ring;
  }
}

// Grid layout
.product-grid {
  @include grid-auto-fit(250px, 1fr, $spacing-4);
}

// Truncated text
.description {
  @include line-clamp(3);  // Show 3 lines max
}
*/
.lightbox-shown #close-lightbox {
  top: 0.75rem !important;
  right: 0.75rem !important;
  width: 2rem !important;
  height: 2rem !important;
  z-index: 11;
  transition: transform 150ms ease, background-color 150ms ease;
}
.lightbox-shown #close-lightbox:hover {
  transform: scale(1.1);
}
.lightbox-shown #close-lightbox:active {
  transform: scale(0.9);
}
@media (max-width: 575px) {
  .lightbox-shown #close-lightbox {
    top: 0.5rem !important;
    right: 0.5rem !important;
    width: 2.25rem !important;
    height: 2.25rem !important;
  }
}
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRhdHRlLW1vZGFsLmNzcyIsIi4uLy4uL2luY2x1ZGVzL19tZWRpYS1xdWVyaWVzLnNjc3MiLCIuLi8uLi9pbmNsdWRlcy9fdHJhbnNpdGlvbnMuc2NzcyIsIi4uLy4uL2luY2x1ZGVzL196LWluZGV4LnNjc3MiLCIuLi8uLi9pbmNsdWRlcy9fbWl4aW5zLnNjc3MiLCIuLi8uLi9pbmNsdWRlcy9fdG9rZW5zLnNjc3MiLCJfZnVsbHNjcmVlbi5zY3NzIiwiX2Jhc2Uuc2NzcyIsIi4uLy4uL2luY2x1ZGVzL19jb2xvcnMuc2NzcyIsIi4uLy4uL2luY2x1ZGVzL19zcGFjaW5nLnNjc3MiLCJfaW1hZ2UtbGlnaHRib3guc2NzcyIsIi4uLy4uL2luY2x1ZGVzL19ib3JkZXJzLnNjc3MiLCIuLi8uLi9pbmNsdWRlcy9fZm9udHMuc2NzcyIsIl9tZi1wYWdlLW1vZGFsLnNjc3MiLCJfY29uZmlnLW1vZGFsLnNjc3MiLCJfZXJzYXR6a29udGFrdC5zY3NzIiwiX2dhbGxlcnktbGlnaHRib3guc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0I7QUM2SmhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQUE7QUM5REE7RUFDRTtJQUNFLHlCQUFBO0VGaEVGO0FBQ0Y7QUVvRUE7RUFDRTtJQUNFLFlBQUE7RUZsRUY7RUVvRUE7SUFDRSxZQUFBO0VGbEVGO0FBQ0Y7QUVzRUE7RUFDRTtJQUNFLFVBQUE7RUZwRUY7RUVzRUE7SUFDRSxVQUFBO0VGcEVGO0FBQ0Y7QUV3RUE7RUFDRTtJQUNFLFVBQUE7RUZ0RUY7RUV3RUE7SUFDRSxVQUFBO0VGdEVGO0FBQ0Y7QUUwRUE7RUFDRTtJQUNFLFVBQUE7SUFDQSw0QkFBQTtFRnhFRjtFRTBFQTtJQUNFLFVBQUE7SUFDQSx3QkFBQTtFRnhFRjtBQUNGO0FFNEVBO0VBQ0U7SUFDRSxVQUFBO0lBQ0EsMkJBQUE7RUYxRUY7RUU0RUE7SUFDRSxVQUFBO0lBQ0Esd0JBQUE7RUYxRUY7QUFDRjtBRThFQTtF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QSx5QkFBQTtFQUNBLHNCQUFBO0VBQ0EsdUJBQUE7RUFFQSxXQUFBO0VBQ0EsNkRBQUE7QWhCMnZHRjtBZ0J6dkdFO0VBQ0UscUJBQUE7QWhCMnZHSjtBZ0J4dkdFO0VBQ0UscUJBQUE7QWhCMHZHSjtBZ0JudkdFO0VBdEJGO0lBdUJJLHNCQUFBO0lBQ0Esd0JBQUE7SUFDQSx5QkFBQTtJQUNBLDBCQUFBO0VoQnN2R0Y7QUFDRiIsImZpbGUiOiJkYXR0ZS1tb2RhbC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKlxuLm15LWNvbXBvbmVudCB7XG4gIHBhZGRpbmc6IDFyZW07XG5cbiAgLy8gTW9iaWxlLWZpcnN0IHJlc3BvbnNpdmUgZGVzaWduXG4gIEBpbmNsdWRlIG1lZGlhLW1kIHtcbiAgICBwYWRkaW5nOiAycmVtO1xuICB9XG5cbiAgQGluY2x1ZGUgbWVkaWEtbGcge1xuICAgIHBhZGRpbmc6IDNyZW07XG4gIH1cblxuICAvLyBEZXNrdG9wLWZpcnN0ICh1c2Ugc3BhcmluZ2x5KVxuICBAaW5jbHVkZSBtZWRpYS1kb3duLW1kIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cblxuICAvLyBCZXR3ZWVuIHNwZWNpZmljIGJyZWFrcG9pbnRzXG4gIEBpbmNsdWRlIG1lZGlhLWJldHdlZW4oJGJyZWFrcG9pbnQtbWQsICRicmVha3BvaW50LWxnKSB7XG4gICAgYmFja2dyb3VuZDogYmx1ZTtcbiAgfVxuXG4gIC8vIFJlZHVjZWQgbW90aW9uIGZvciBhY2Nlc3NpYmlsaXR5XG4gIEBpbmNsdWRlIHJlZHVjZWQtbW90aW9uIHtcbiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiovXG5Aa2V5ZnJhbWVzIHNwaW4ge1xuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiAwLjY7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLWRvd24ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLXVwIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNjYWxlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbi8qXG4uYnV0dG9uIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihiYWNrZ3JvdW5kLWNvbG9yKTsgIC8vIFNpbmdsZSBwcm9wZXJ0eVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XG4gIH1cbn1cblxuLmNhcmQge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9ucygkdHJhbnNpdGlvbi1zaGFkb3csICR0cmFuc2l0aW9uLXRyYW5zZm9ybSk7ICAvLyBNdWx0aXBsZSBwcm9wZXJ0aWVzXG5cbiAgJjpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy1sZztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIH1cbn1cblxuLnNwaW5uZXIge1xuICBhbmltYXRpb246ICRhbmltYXRpb24tc3Bpbjtcbn1cblxuLy8gUmVzcGVjdCByZWR1Y2VkIG1vdGlvblxuKiB7XG4gIEBpbmNsdWRlIHJlc3BlY3QtcmVkdWNlZC1tb3Rpb247XG59XG4qL1xuLypcblotSW5kZXggTGF5ZXJpbmcgU3RyYXRlZ3k6XG5cbjEtOTogICAgICAgICAgQmFzZSBjb250ZW50LCBzdWJ0bGUgbGF5ZXJpbmdcbjEwLTk5OiAgICAgICAgQWJvdmUgY29udGVudCAocHJldmlld3MsIGhpZ2hsaWdodHMpXG4xMDAtOTk5OiAgICAgIERyb3Bkb3ducywgbWVudXMsIG5hdmlnYXRpb25cbjEwMDAtMTk5OTogICAgRml4ZWQvc3RpY2t5IGVsZW1lbnRzLCBtb2RhbHNcbjIwMDArOiAgICAgICAgTm90aWZpY2F0aW9ucywgYWxlcnRzLCBjcml0aWNhbCBVSVxuXG5FeGFtcGxlOlxuLm15LWRyb3Bkb3duIHtcbiAgei1pbmRleDogJHotaW5kZXgtZHJvcGRvd247ICAvLyAxMDBcbn1cblxuLm15LW1vZGFsIHtcbiAgei1pbmRleDogJHotaW5kZXgtbW9kYWw7ICAgICAvLyAxMDUwXG59XG5cbi5teS10b29sdGlwIHtcbiAgei1pbmRleDogJHotaW5kZXgtdG9vbHRpcDsgICAvLyAxMDcwIChhbHdheXMgYWJvdmUgbW9kYWxzKVxufVxuKi9cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHB1bHNlIHtcbiAgMCUsIDEwMCUge1xuICAgIG9wYWNpdHk6IDAuNjtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtdXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2NhbGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuLypcbi5idXR0b24ge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJhY2tncm91bmQtY29sb3IpOyAgLy8gU2luZ2xlIHByb3BlcnR5XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTtcbiAgfVxufVxuXG4uY2FyZCB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb25zKCR0cmFuc2l0aW9uLXNoYWRvdywgJHRyYW5zaXRpb24tdHJhbnNmb3JtKTsgIC8vIE11bHRpcGxlIHByb3BlcnRpZXNcblxuICAmOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWxnO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgfVxufVxuXG4uc3Bpbm5lciB7XG4gIGFuaW1hdGlvbjogJGFuaW1hdGlvbi1zcGluO1xufVxuXG4vLyBSZXNwZWN0IHJlZHVjZWQgbW90aW9uXG4qIHtcbiAgQGluY2x1ZGUgcmVzcGVjdC1yZWR1Y2VkLW1vdGlvbjtcbn1cbiovXG4vKipcbiAqIFJvYm8tYnV0dG9uIHN0eWxlIChncmVlbiBncmFkaWVudCB3aXRoIGhvdmVyIG92ZXJsYXkpXG4gKiBVc2UgdGhpcyBmb3IgcHJpbWFyeSBhY3Rpb24gYnV0dG9ucyBhY3Jvc3MgdGhlIHNpdGVcbiAqIE5vdGU6ICFpbXBvcnRhbnQgbmVlZGVkIHRvIG92ZXJyaWRlIC5idG4uYnRuLXByaW1hcnkgaW4gYWxsLnNjc3NcbiAqIFVzZXMgYmFja2dyb3VuZC1pbWFnZSAobm90IGJhY2tncm91bmQgc2hvcnRoYW5kKSBzbyBiYWNrZ3JvdW5kLWNvbG9yIHdvcmtzIGZvciBob3ZlciBibGVuZFxuICovXG4vKipcbiAqIEFwcGx5IHNoYWRvdyB3aXRoIGxldmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gJGxldmVsIC0gU2hhZG93IGxldmVsICh4cywgc20sIGJhc2UsIG1kLCBsZywgeGwsIDJ4bClcbiAqL1xuLyoqXG4gKiBDYXJkIHNoYWRvdyB3aXRoIGhvdmVyIGVmZmVjdFxuICogQHBhcmFtIHtib29sZWFufSAkaG92ZXIgLSBFbmFibGUgaG92ZXIgZWZmZWN0IChkZWZhdWx0OiB0cnVlKVxuICovXG4vKipcbiAqIFByb2R1Y3QgaXRlbSBzaGFkb3dcbiAqL1xuLyoqXG4gKiBGb2N1cyByaW5nIGZvciBhY2Nlc3NpYmlsaXR5XG4gKiBAcGFyYW0ge2NvbG9yfSAkY29sb3IgLSBGb2N1cyByaW5nIGNvbG9yIChkZWZhdWx0OiBwcmltYXJ5KVxuICovXG4vKipcbiAqIEZvY3VzIHZpc2libGUgKG9ubHkgb24ga2V5Ym9hcmQgZm9jdXMpXG4gKi9cbi8qKlxuICogSGlkZGVuIChkaXNwbGF5OiBub25lKVxuICovXG4vKipcbiAqIFZpc3VhbGx5IGhpZGRlbiAoZm9yIHNjcmVlbiByZWFkZXJzKVxuICovXG4vKipcbiAqIE5vdCB2aXN1YWxseSBoaWRkZW4gKHVuZG8gc3Itb25seSlcbiAqL1xuLyoqXG4gKiBEaXNhYmxlZCBzdGF0ZVxuICovXG4vKipcbiAqIExvYWRpbmcgc3RhdGVcbiAqL1xuLyoqXG4gKiBDZW50ZXJlZCBzcGlubmVyIG9uIGEgcG9zaXRpb25lZCBwYXJlbnQg4oCUIHdpdGhvdXQgYW55IHdhc2ggb3ZlcmxheS5cbiAqIFVzZXMgOjphZnRlciBvbmx5OyBwYXJlbnQgbXVzdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZS5cbiAqIFVzZSB0aGlzIHdoZW4gZWxlbWVudCBjaGlsZHJlbiBhcmUgaGlkZGVuIHZpYSB2aXNpYmlsaXR5OmhpZGRlbiBzbyBub1xuICogd2FzaCBsYXllciBpcyBuZWVkZWQgdG8gbWFzayB0aGVtLlxuICpcbiAqIEBwYXJhbSAkc3Bpbm5lci1jb2xvciBWaXNpYmxlIHNwaW5uZXIgYXJjIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItdHJhY2sgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXNpemUgIERpYW1ldGVyIG9mIHRoZSBzcGlubmVyXG4gKiBAcGFyYW0gJHotaW5kZXggICAgICAgWi1pbmRleCBvZiB0aGUgc3Bpbm5lclxuICovXG4vKipcbiAqIExvYWRpbmcgb3ZlcmxheTogc2VtaS10cmFuc3BhcmVudCB3YXNoICsgY2VudGVyZWQgc3Bpbm5lciBvdmVyIGEgcG9zaXRpb25lZCBwYXJlbnQuXG4gKiBQYXJlbnQgbXVzdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSAob3IgYWJzb2x1dGUvZml4ZWQpLlxuICogVXNlcyA6OmJlZm9yZSBmb3IgdGhlIHdhc2ggbGF5ZXIgYW5kIDo6YWZ0ZXIgZm9yIHRoZSBzcGlubmVyICh2aWEgbG9hZGluZy1zcGlubmVyLWNlbnRlcmVkKS5cbiAqIERvIG5vdCBhcHBseSB0byBlbGVtZW50cyB0aGF0IGFscmVhZHkgdXNlIGJvdGggcHNldWRvLWVsZW1lbnRzIGZvciBvdGhlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSAkYmcgICAgICAgICAgICBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB3YXNoIGxheWVyXG4gKiBAcGFyYW0gJHNwaW5uZXItY29sb3IgVmlzaWJsZSBzcGlubmVyIGFyYyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXRyYWNrIEZhaW50IHRyYWNrIHJpbmcgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci1zaXplICBEaWFtZXRlciBvZiB0aGUgc3Bpbm5lclxuICogQHBhcmFtICR6LWluZGV4ICAgICAgIFotaW5kZXggZm9yIHdhc2ggKHNwaW5uZXIgZ2V0cyArMSlcbiAqL1xuLyoqXG4gKiBJbmxpbmUgc3Bpbm5lciBhcHBlbmRlZCBhZnRlciBlbGVtZW50IGNvbnRlbnQg4oCUIGZvciBuYXZpZ2F0aW9uIGJ1dHRvbnMgYW5kIGxpbmtzLlxuICogVXNlcyA6OmFmdGVyOyBpbmNvbXBhdGlibGUgd2l0aCBlbGVtZW50cyB0aGF0IGFscmVhZHkgdXNlIDo6YWZ0ZXIgZm9yIG90aGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtICRzaXplICAgICAgICBTcGlubmVyIGRpYW1ldGVyXG4gKiBAcGFyYW0gJGNvbG9yICAgICAgIFZpc2libGUgc3Bpbm5lciBhcmMgY29sb3JcbiAqIEBwYXJhbSAkdHJhY2stY29sb3IgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRkdXJhdGlvbiAgICBPbmUtcm90YXRpb24gZHVyYXRpb25cbiAqL1xuLyoqXG4gKiBUcnVuY2F0ZSB0ZXh0IHdpdGggZWxsaXBzaXNcbiAqL1xuLyoqXG4gKiBMaW5lIGNsYW1wIChtdWx0aS1saW5lIHRydW5jYXRpb24pXG4gKiBAcGFyYW0ge251bWJlcn0gJGxpbmVzIC0gTnVtYmVyIG9mIGxpbmVzIHRvIHNob3dcbiAqL1xuLyoqXG4gKiBDdXN0b20gc2Nyb2xsYmFyIHN0eWxpbmdcbiAqIEBwYXJhbSB7Y29sb3J9ICR0aHVtYiAtIFNjcm9sbGJhciB0aHVtYiBjb2xvclxuICogQHBhcmFtIHtjb2xvcn0gJHRyYWNrIC0gU2Nyb2xsYmFyIHRyYWNrIGNvbG9yXG4gKi9cbi8qKlxuICogQWJzb2x1dGUgY2VudGVyXG4gKi9cbi8qKlxuICogQWJzb2x1dGUgY292ZXIgKHN0cmV0Y2ggdG8gZmlsbCBwYXJlbnQpXG4gKi9cbi8qKlxuICogRml4ZWQgY292ZXIgKHN0cmV0Y2ggdG8gZmlsbCB2aWV3cG9ydClcbiAqL1xuLyoqXG4gKiBGbGV4IGNlbnRlciAoYm90aCBheGVzKVxuICovXG4vKipcbiAqIEZsZXggYmV0d2VlbiAoc3BhY2UtYmV0d2VlbilcbiAqL1xuLyoqXG4gKiBGbGV4IGNvbHVtblxuICovXG4vKipcbiAqIEdyaWQgd2l0aCBhdXRvLWZpdCBjb2x1bW5zXG4gKiBAcGFyYW0ge3NpemV9ICRtaW4gLSBNaW5pbXVtIGNvbHVtbiB3aWR0aFxuICogQHBhcmFtIHtzaXplfSAkbWF4IC0gTWF4aW11bSBjb2x1bW4gd2lkdGggKGRlZmF1bHQ6IDFmcilcbiAqIEBwYXJhbSB7c2l6ZX0gJGdhcCAtIEdhcCBiZXR3ZWVuIGNvbHVtbnMgKGRlZmF1bHQ6ICRzcGFjaW5nLTQpXG4gKi9cbi8qKlxuICogR3JpZCB3aXRoIGF1dG8tZmlsbCBjb2x1bW5zXG4gKiBAcGFyYW0ge3NpemV9ICRtaW4gLSBNaW5pbXVtIGNvbHVtbiB3aWR0aFxuICogQHBhcmFtIHtzaXplfSAkbWF4IC0gTWF4aW11bSBjb2x1bW4gd2lkdGggKGRlZmF1bHQ6IDFmcilcbiAqIEBwYXJhbSB7c2l6ZX0gJGdhcCAtIEdhcCBiZXR3ZWVuIGNvbHVtbnMgKGRlZmF1bHQ6ICRzcGFjaW5nLTQpXG4gKi9cbi8qKlxuICogT2JqZWN0IGZpdCBjb3ZlclxuICovXG4vKipcbiAqIE9iamVjdCBmaXQgY29udGFpblxuICovXG4vKipcbiAqIEFzcGVjdCByYXRpbyBib3hcbiAqIEBwYXJhbSB7bnVtYmVyfSAkd2lkdGggLSBXaWR0aCByYXRpb1xuICogQHBhcmFtIHtudW1iZXJ9ICRoZWlnaHQgLSBIZWlnaHQgcmF0aW9cbiAqL1xuLyoqXG4gKiBDbGVhcmZpeCBmb3IgZmxvYXRzXG4gKi9cbi8qKlxuICogSGlkZSBpbiBwcmludFxuICovXG4vKipcbiAqIFNob3cgb25seSBpbiBwcmludFxuICovXG4vKlxuLm15LWNhcmQge1xuICBAaW5jbHVkZSBjYXJkLXNoYWRvdzsgICAgICAgICAgICAgLy8gQ2FyZCB3aXRoIGhvdmVyIHNoYWRvd1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHRyYW5zZm9ybSk7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtbWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5teS1pbnB1dCB7XG4gIEBpbmNsdWRlIGZvY3VzLXZpc2libGU7ICAgICAgICAgICAgLy8gQWNjZXNzaWJsZSBmb2N1cyByaW5nXG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZWQ7ICAgICAgICAgICAgICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgfVxufVxuXG4udHJ1bmNhdGVkLXRleHQge1xuICBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpOyAgICAgICAgICAgIC8vIFNob3cgMyBsaW5lcyBtYXhcbn1cblxuLnByb2R1Y3QtZ3JpZCB7XG4gIEBpbmNsdWRlIGdyaWQtYXV0by1maXQoMjUwcHgpOyAgICAgLy8gUmVzcG9uc2l2ZSBncmlkXG59XG5cbi5jZW50ZXJlZC1tb2RhbCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjsgICAgICAgICAgLy8gQ2VudGVyIGluIHZpZXdwb3J0XG59XG4qL1xuLypcbkFmdGVyIGltcG9ydGluZyB0aGlzIGZpbGUsIHlvdSBoYXZlIGFjY2VzcyB0bzpcblxuQ09MT1JTOlxuLSBQcmltYXJ5IGNvbG9yczogJGNvbG9yLXByaW1hcnksICRjb2xvci1wcmltYXJ5LWxpZ2h0LCAkY29sb3ItcHJpbWFyeS1kYXJrXG4tIEdyYXlzOiAkY29sb3ItZ3JheS01MCB0aHJvdWdoICRjb2xvci1ncmF5LTkwMFxuLSBTZW1hbnRpYzogJGNvbG9yLXN1Y2Nlc3MsICRjb2xvci1kYW5nZXIsICRjb2xvci13YXJuaW5nLCAkY29sb3ItaW5mb1xuLSBCYWNrZ3JvdW5kczogJGJnLXBhZ2UsICRiZy1saWdodCwgJGJnLWRhcmssIGV0Yy5cbi0gVGV4dDogJHRleHQtcHJpbWFyeSwgJHRleHQtc2Vjb25kYXJ5LCAkdGV4dC1tdXRlZCwgZXRjLlxuLSBCb3JkZXJzOiAkYm9yZGVyLWRlZmF1bHQsICRib3JkZXItbGlnaHQsICRib3JkZXItc3Ryb25nXG4tIEdyYWRpZW50czogJGdyYWRpZW50LXByaW1hcnksICRncmFkaWVudC1wcmltYXJ5LWJ1dHRvbiwgZXRjLlxuXG5UWVBPR1JBUEhZOlxuLSBGb250IGZhbWlsaWVzOiAkZm9udC1mYW1pbHktYmFzZSwgJGZvbnQtZmFtaWx5LWhlYWRpbmdcbi0gRm9udCBzaXplczogJGZvbnQtc2l6ZS14cyB0aHJvdWdoICRmb250LXNpemUtNnhsXG4tIEhlYWRpbmcgc2l6ZXM6ICRoMS1zaXplLCAkaDItc2l6ZSwgZXRjLlxuLSBGb250IHdlaWdodHM6ICRmb250LXdlaWdodC1saWdodCB0aHJvdWdoICRmb250LXdlaWdodC1ibGFja1xuLSBMaW5lIGhlaWdodHM6ICRsaW5lLWhlaWdodC10aWdodCwgJGxpbmUtaGVpZ2h0LW5vcm1hbCwgZXRjLlxuXG5TUEFDSU5HOlxuLSBTY2FsZTogJHNwYWNpbmctMCB0aHJvdWdoICRzcGFjaW5nLTMyXG4tIFNlbWFudGljOiAkc3BhY2luZy14cywgJHNwYWNpbmctc20sICRzcGFjaW5nLW1kLCAkc3BhY2luZy1sZywgJHNwYWNpbmcteGxcbi0gQ29tcG9uZW50LXNwZWNpZmljOiAkaW5wdXQtcGFkZGluZy15LCAkYnV0dG9uLXBhZGRpbmcteCwgJGNhcmQtcGFkZGluZywgZXRjLlxuXG5TSEFET1dTOlxuLSBTY2FsZTogJHNoYWRvdy14cyB0aHJvdWdoICRzaGFkb3ctMnhsXG4tIFNlbWFudGljOiAkc2hhZG93LWNhcmQsICRzaGFkb3ctZHJvcGRvd24sICRzaGFkb3ctbW9kYWwsIGV0Yy5cbi0gTWV0aG9kczogQGluY2x1ZGUgc2hhZG93KCdsZycpO1xuXG5CT1JERVJTOlxuLSBSYWRpdXM6ICRyYWRpdXMtbm9uZSB0aHJvdWdoICRyYWRpdXMtZnVsbFxuLSBXaWR0aHM6ICRib3JkZXItd2lkdGgtMSB0aHJvdWdoICRib3JkZXItd2lkdGgtNVxuLSBTdHlsZXM6ICRib3JkZXItZGVmYXVsdC1zdHlsZSwgJGJvcmRlci1mb2N1cy1zdHlsZSwgZXRjLlxuXG5NRURJQSBRVUVSSUVTOlxuLSBCcmVha3BvaW50czogJGJyZWFrcG9pbnQtc20sICRicmVha3BvaW50LW1kLCAkYnJlYWtwb2ludC1sZywgZXRjLlxuLSBNaXhpbnM6IEBpbmNsdWRlIG1lZGlhLW1kIHsgLi4uIH0sIEBpbmNsdWRlIG1lZGlhLWxnIHsgLi4uIH1cblxuVFJBTlNJVElPTlM6XG4tIER1cmF0aW9uczogJGR1cmF0aW9uLWZhc3QsICRkdXJhdGlvbi1iYXNlLCAkZHVyYXRpb24tc2xvd1xuLSBFYXNpbmdzOiAkZWFzZS1pbiwgJGVhc2Utb3V0LCAkZWFzZS1pbi1vdXRcbi0gQ29tcGxldGUgdHJhbnNpdGlvbnM6ICR0cmFuc2l0aW9uLWJ1dHRvbiwgJHRyYW5zaXRpb24tY2FyZCwgZXRjLlxuLSBBbmltYXRpb25zOiAkYW5pbWF0aW9uLXNwaW4sICRhbmltYXRpb24tcHVsc2UsIGV0Yy5cblxuWi1JTkRFWDpcbi0gU2NhbGU6ICR6LWluZGV4LWJhc2UgdGhyb3VnaCAkei1pbmRleC1tYXhcbi0gU2VtYW50aWM6ICR6LWluZGV4LWRyb3Bkb3duLCAkei1pbmRleC1tb2RhbCwgJHotaW5kZXgtdG9vbHRpcCwgZXRjLlxuXG5NSVhJTlM6XG4tIFNoYWRvd3M6IEBpbmNsdWRlIGNhcmQtc2hhZG93LCBAaW5jbHVkZSBwcm9kdWN0LXNoYWRvd1xuLSBGb2N1czogQGluY2x1ZGUgZm9jdXMtcmluZywgQGluY2x1ZGUgZm9jdXMtdmlzaWJsZVxuLSBWaXNpYmlsaXR5OiBAaW5jbHVkZSBzci1vbmx5LCBAaW5jbHVkZSBoaWRkZW5cbi0gU3RhdGVzOiBAaW5jbHVkZSBkaXNhYmxlZCwgQGluY2x1ZGUgbG9hZGluZ1xuLSBUZXh0OiBAaW5jbHVkZSB0cnVuY2F0ZSwgQGluY2x1ZGUgbGluZS1jbGFtcCgzKVxuLSBMYXlvdXQ6IEBpbmNsdWRlIGZsZXgtY2VudGVyLCBAaW5jbHVkZSBhYnNvbHV0ZS1jZW50ZXJcbi0gR3JpZDogQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweClcbi0gQW5kIG1hbnkgbW9yZS4uLlxuKi9cbi8qXG5Db21tb24gcGF0dGVybnM6XG5cbi8vIENhcmQgd2l0aCBzaGFkb3dcbi5jYXJkIHtcbiAgcGFkZGluZzogJHNwYWNpbmctNDtcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1tZDtcbiAgQGluY2x1ZGUgY2FyZC1zaGFkb3c7XG59XG5cbi8vIFJlc3BvbnNpdmUgdGV4dFxuLmhlYWRpbmcge1xuICBmb250LXNpemU6ICRoMi1zaXplLW1vYmlsZTtcblxuICBAaW5jbHVkZSBtZWRpYS1tZCB7XG4gICAgZm9udC1zaXplOiAkaDItc2l6ZS1kZXNrdG9wO1xuICB9XG59XG5cbi8vIEJ1dHRvblxuLmJ1dHRvbiB7XG4gIHBhZGRpbmc6ICRidXR0b24tcGFkZGluZy15ICRidXR0b24tcGFkZGluZy14O1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLWJ1dHRvbjtcbiAgYmFja2dyb3VuZDogJGdyYWRpZW50LXByaW1hcnktYnV0dG9uO1xuICBjb2xvcjogJHRleHQtaW52ZXJzZTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihiYWNrZ3JvdW5kLWNvbG9yLCAkZHVyYXRpb24taG92ZXIpO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1wcmltYXJ5LWRhcms7XG4gIH1cblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIEBpbmNsdWRlIGZvY3VzLXJpbmc7XG4gIH1cbn1cblxuLy8gR3JpZCBsYXlvdXRcbi5wcm9kdWN0LWdyaWQge1xuICBAaW5jbHVkZSBncmlkLWF1dG8tZml0KDI1MHB4LCAxZnIsICRzcGFjaW5nLTQpO1xufVxuXG4vLyBUcnVuY2F0ZWQgdGV4dFxuLmRlc2NyaXB0aW9uIHtcbiAgQGluY2x1ZGUgbGluZS1jbGFtcCgzKTsgIC8vIFNob3cgMyBsaW5lcyBtYXhcbn1cbiovXG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcbiAgLmRhdHRlLW1vZGFsW2RhdGEtZGF0dGUtZnVsbHNjcmVlbl0ge1xuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgfVxuICAuZGF0dGUtbW9kYWxbZGF0YS1kYXR0ZS1mdWxsc2NyZWVuXSAubW9kYWwtZGlhbG9nIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgICBpbnNldDogMCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAxMDBkdmggIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDBkdmggIWltcG9ydGFudDtcbiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcbiAgfVxuICAuZGF0dGUtbW9kYWxbZGF0YS1kYXR0ZS1mdWxsc2NyZWVuXSAubW9kYWwtY29udGVudCB7XG4gICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgfVxuICAuZGF0dGUtbW9kYWxbZGF0YS1kYXR0ZS1mdWxsc2NyZWVuXSAubW9kYWwtYm9keSB7XG4gICAgZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcbiAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgfVxufVxuLmRhdHRlLW1vZGFsIC5kYXR0ZS1tb2RhbC1jbG9zZSxcbi5kYXR0ZS1tb2RhbCBbZGF0YS1kaXNtaXNzPW1vZGFsXSxcbi5kYXR0ZS1tb2RhbCBbZGF0YS1icy1kaXNtaXNzPW1vZGFsXSB7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjOTk5OTk5O1xuICBvcGFjaXR5OiAxO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMTUwbXMgZWFzZSwgdHJhbnNmb3JtIDE1MG1zIGVhc2U7XG59XG4uZGF0dGUtbW9kYWwgLmRhdHRlLW1vZGFsLWNsb3NlIHNwYW4sXG4uZGF0dGUtbW9kYWwgW2RhdGEtZGlzbWlzcz1tb2RhbF0gc3Bhbixcbi5kYXR0ZS1tb2RhbCBbZGF0YS1icy1kaXNtaXNzPW1vZGFsXSBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLmRhdHRlLW1vZGFsIC5kYXR0ZS1tb2RhbC1jbG9zZTpob3Zlcixcbi5kYXR0ZS1tb2RhbCBbZGF0YS1kaXNtaXNzPW1vZGFsXTpob3Zlcixcbi5kYXR0ZS1tb2RhbCBbZGF0YS1icy1kaXNtaXNzPW1vZGFsXTpob3ZlciB7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmRhdHRlLW1vZGFsIC5kYXR0ZS1tb2RhbC1jbG9zZTpmb2N1cyxcbi5kYXR0ZS1tb2RhbCBbZGF0YS1kaXNtaXNzPW1vZGFsXTpmb2N1cyxcbi5kYXR0ZS1tb2RhbCBbZGF0YS1icy1kaXNtaXNzPW1vZGFsXTpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uZGF0dGUtbW9kYWwgLm1vZGFsLWhlYWRlciAuZGF0dGUtbW9kYWwtY2xvc2UsXG4uZGF0dGUtbW9kYWwgLm1vZGFsLWhlYWRlciBbZGF0YS1kaXNtaXNzPW1vZGFsXSxcbi5kYXR0ZS1tb2RhbCAubW9kYWwtaGVhZGVyIFtkYXRhLWJzLWRpc21pc3M9bW9kYWxdIHtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIG1hcmdpbjogLTAuNXJlbSAtMC41cmVtIC0wLjVyZW0gYXV0bztcbn1cbi5kYXR0ZS1tb2RhbCAubW9kYWwtaGVhZGVyIC5kYXR0ZS1tb2RhbC1jbG9zZTpob3Zlcixcbi5kYXR0ZS1tb2RhbCAubW9kYWwtaGVhZGVyIFtkYXRhLWRpc21pc3M9bW9kYWxdOmhvdmVyLFxuLmRhdHRlLW1vZGFsIC5tb2RhbC1oZWFkZXIgW2RhdGEtYnMtZGlzbWlzcz1tb2RhbF06aG92ZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xufVxuLmRhdHRlLW1vZGFsW2RhdGEtZGF0dGUtY2xvc2Utc3R5bGU9Y29ybmVyXSAuZGF0dGUtbW9kYWwtY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC43NXJlbTtcbiAgcmlnaHQ6IDAuNzVyZW07XG4gIHotaW5kZXg6IDEwO1xuICB3aWR0aDogMzJweDtcbiAgaGVpZ2h0OiAzMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjM3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5kYXR0ZS1tb2RhbFtkYXRhLWRhdHRlLWNsb3NlLXN0eWxlPWNvcm5lcl0gLmRhdHRlLW1vZGFsLWNsb3NlOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xufVxuLmRhdHRlLW1vZGFsW2RhdGEtZGF0dGUtY2xvc2Utc3R5bGU9Y29ybmVyXSAuZGF0dGUtbW9kYWwtY2xvc2U6YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xufVxuXG4vKlxuLm15LWNvbXBvbmVudCB7XG4gIHBhZGRpbmc6IDFyZW07XG5cbiAgLy8gTW9iaWxlLWZpcnN0IHJlc3BvbnNpdmUgZGVzaWduXG4gIEBpbmNsdWRlIG1lZGlhLW1kIHtcbiAgICBwYWRkaW5nOiAycmVtO1xuICB9XG5cbiAgQGluY2x1ZGUgbWVkaWEtbGcge1xuICAgIHBhZGRpbmc6IDNyZW07XG4gIH1cblxuICAvLyBEZXNrdG9wLWZpcnN0ICh1c2Ugc3BhcmluZ2x5KVxuICBAaW5jbHVkZSBtZWRpYS1kb3duLW1kIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cblxuICAvLyBCZXR3ZWVuIHNwZWNpZmljIGJyZWFrcG9pbnRzXG4gIEBpbmNsdWRlIG1lZGlhLWJldHdlZW4oJGJyZWFrcG9pbnQtbWQsICRicmVha3BvaW50LWxnKSB7XG4gICAgYmFja2dyb3VuZDogYmx1ZTtcbiAgfVxuXG4gIC8vIFJlZHVjZWQgbW90aW9uIGZvciBhY2Nlc3NpYmlsaXR5XG4gIEBpbmNsdWRlIHJlZHVjZWQtbW90aW9uIHtcbiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiovXG5Aa2V5ZnJhbWVzIHNwaW4ge1xuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiAwLjY7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLWRvd24ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLXVwIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNjYWxlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbi8qXG4uYnV0dG9uIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihiYWNrZ3JvdW5kLWNvbG9yKTsgIC8vIFNpbmdsZSBwcm9wZXJ0eVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XG4gIH1cbn1cblxuLmNhcmQge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9ucygkdHJhbnNpdGlvbi1zaGFkb3csICR0cmFuc2l0aW9uLXRyYW5zZm9ybSk7ICAvLyBNdWx0aXBsZSBwcm9wZXJ0aWVzXG5cbiAgJjpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy1sZztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIH1cbn1cblxuLnNwaW5uZXIge1xuICBhbmltYXRpb246ICRhbmltYXRpb24tc3Bpbjtcbn1cblxuLy8gUmVzcGVjdCByZWR1Y2VkIG1vdGlvblxuKiB7XG4gIEBpbmNsdWRlIHJlc3BlY3QtcmVkdWNlZC1tb3Rpb247XG59XG4qL1xuLypcblotSW5kZXggTGF5ZXJpbmcgU3RyYXRlZ3k6XG5cbjEtOTogICAgICAgICAgQmFzZSBjb250ZW50LCBzdWJ0bGUgbGF5ZXJpbmdcbjEwLTk5OiAgICAgICAgQWJvdmUgY29udGVudCAocHJldmlld3MsIGhpZ2hsaWdodHMpXG4xMDAtOTk5OiAgICAgIERyb3Bkb3ducywgbWVudXMsIG5hdmlnYXRpb25cbjEwMDAtMTk5OTogICAgRml4ZWQvc3RpY2t5IGVsZW1lbnRzLCBtb2RhbHNcbjIwMDArOiAgICAgICAgTm90aWZpY2F0aW9ucywgYWxlcnRzLCBjcml0aWNhbCBVSVxuXG5FeGFtcGxlOlxuLm15LWRyb3Bkb3duIHtcbiAgei1pbmRleDogJHotaW5kZXgtZHJvcGRvd247ICAvLyAxMDBcbn1cblxuLm15LW1vZGFsIHtcbiAgei1pbmRleDogJHotaW5kZXgtbW9kYWw7ICAgICAvLyAxMDUwXG59XG5cbi5teS10b29sdGlwIHtcbiAgei1pbmRleDogJHotaW5kZXgtdG9vbHRpcDsgICAvLyAxMDcwIChhbHdheXMgYWJvdmUgbW9kYWxzKVxufVxuKi9cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHB1bHNlIHtcbiAgMCUsIDEwMCUge1xuICAgIG9wYWNpdHk6IDAuNjtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtdXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2NhbGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuLypcbi5idXR0b24ge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJhY2tncm91bmQtY29sb3IpOyAgLy8gU2luZ2xlIHByb3BlcnR5XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTtcbiAgfVxufVxuXG4uY2FyZCB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb25zKCR0cmFuc2l0aW9uLXNoYWRvdywgJHRyYW5zaXRpb24tdHJhbnNmb3JtKTsgIC8vIE11bHRpcGxlIHByb3BlcnRpZXNcblxuICAmOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWxnO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgfVxufVxuXG4uc3Bpbm5lciB7XG4gIGFuaW1hdGlvbjogJGFuaW1hdGlvbi1zcGluO1xufVxuXG4vLyBSZXNwZWN0IHJlZHVjZWQgbW90aW9uXG4qIHtcbiAgQGluY2x1ZGUgcmVzcGVjdC1yZWR1Y2VkLW1vdGlvbjtcbn1cbiovXG4vKipcbiAqIFJvYm8tYnV0dG9uIHN0eWxlIChncmVlbiBncmFkaWVudCB3aXRoIGhvdmVyIG92ZXJsYXkpXG4gKiBVc2UgdGhpcyBmb3IgcHJpbWFyeSBhY3Rpb24gYnV0dG9ucyBhY3Jvc3MgdGhlIHNpdGVcbiAqIE5vdGU6ICFpbXBvcnRhbnQgbmVlZGVkIHRvIG92ZXJyaWRlIC5idG4uYnRuLXByaW1hcnkgaW4gYWxsLnNjc3NcbiAqIFVzZXMgYmFja2dyb3VuZC1pbWFnZSAobm90IGJhY2tncm91bmQgc2hvcnRoYW5kKSBzbyBiYWNrZ3JvdW5kLWNvbG9yIHdvcmtzIGZvciBob3ZlciBibGVuZFxuICovXG4vKipcbiAqIEFwcGx5IHNoYWRvdyB3aXRoIGxldmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gJGxldmVsIC0gU2hhZG93IGxldmVsICh4cywgc20sIGJhc2UsIG1kLCBsZywgeGwsIDJ4bClcbiAqL1xuLyoqXG4gKiBDYXJkIHNoYWRvdyB3aXRoIGhvdmVyIGVmZmVjdFxuICogQHBhcmFtIHtib29sZWFufSAkaG92ZXIgLSBFbmFibGUgaG92ZXIgZWZmZWN0IChkZWZhdWx0OiB0cnVlKVxuICovXG4vKipcbiAqIFByb2R1Y3QgaXRlbSBzaGFkb3dcbiAqL1xuLyoqXG4gKiBGb2N1cyByaW5nIGZvciBhY2Nlc3NpYmlsaXR5XG4gKiBAcGFyYW0ge2NvbG9yfSAkY29sb3IgLSBGb2N1cyByaW5nIGNvbG9yIChkZWZhdWx0OiBwcmltYXJ5KVxuICovXG4vKipcbiAqIEZvY3VzIHZpc2libGUgKG9ubHkgb24ga2V5Ym9hcmQgZm9jdXMpXG4gKi9cbi8qKlxuICogSGlkZGVuIChkaXNwbGF5OiBub25lKVxuICovXG4vKipcbiAqIFZpc3VhbGx5IGhpZGRlbiAoZm9yIHNjcmVlbiByZWFkZXJzKVxuICovXG4vKipcbiAqIE5vdCB2aXN1YWxseSBoaWRkZW4gKHVuZG8gc3Itb25seSlcbiAqL1xuLyoqXG4gKiBEaXNhYmxlZCBzdGF0ZVxuICovXG4vKipcbiAqIExvYWRpbmcgc3RhdGVcbiAqL1xuLyoqXG4gKiBDZW50ZXJlZCBzcGlubmVyIG9uIGEgcG9zaXRpb25lZCBwYXJlbnQg4oCUIHdpdGhvdXQgYW55IHdhc2ggb3ZlcmxheS5cbiAqIFVzZXMgOjphZnRlciBvbmx5OyBwYXJlbnQgbXVzdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZS5cbiAqIFVzZSB0aGlzIHdoZW4gZWxlbWVudCBjaGlsZHJlbiBhcmUgaGlkZGVuIHZpYSB2aXNpYmlsaXR5OmhpZGRlbiBzbyBub1xuICogd2FzaCBsYXllciBpcyBuZWVkZWQgdG8gbWFzayB0aGVtLlxuICpcbiAqIEBwYXJhbSAkc3Bpbm5lci1jb2xvciBWaXNpYmxlIHNwaW5uZXIgYXJjIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItdHJhY2sgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXNpemUgIERpYW1ldGVyIG9mIHRoZSBzcGlubmVyXG4gKiBAcGFyYW0gJHotaW5kZXggICAgICAgWi1pbmRleCBvZiB0aGUgc3Bpbm5lclxuICovXG4vKipcbiAqIExvYWRpbmcgb3ZlcmxheTogc2VtaS10cmFuc3BhcmVudCB3YXNoICsgY2VudGVyZWQgc3Bpbm5lciBvdmVyIGEgcG9zaXRpb25lZCBwYXJlbnQuXG4gKiBQYXJlbnQgbXVzdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSAob3IgYWJzb2x1dGUvZml4ZWQpLlxuICogVXNlcyA6OmJlZm9yZSBmb3IgdGhlIHdhc2ggbGF5ZXIgYW5kIDo6YWZ0ZXIgZm9yIHRoZSBzcGlubmVyICh2aWEgbG9hZGluZy1zcGlubmVyLWNlbnRlcmVkKS5cbiAqIERvIG5vdCBhcHBseSB0byBlbGVtZW50cyB0aGF0IGFscmVhZHkgdXNlIGJvdGggcHNldWRvLWVsZW1lbnRzIGZvciBvdGhlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSAkYmcgICAgICAgICAgICBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB3YXNoIGxheWVyXG4gKiBAcGFyYW0gJHNwaW5uZXItY29sb3IgVmlzaWJsZSBzcGlubmVyIGFyYyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXRyYWNrIEZhaW50IHRyYWNrIHJpbmcgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci1zaXplICBEaWFtZXRlciBvZiB0aGUgc3Bpbm5lclxuICogQHBhcmFtICR6LWluZGV4ICAgICAgIFotaW5kZXggZm9yIHdhc2ggKHNwaW5uZXIgZ2V0cyArMSlcbiAqL1xuLyoqXG4gKiBJbmxpbmUgc3Bpbm5lciBhcHBlbmRlZCBhZnRlciBlbGVtZW50IGNvbnRlbnQg4oCUIGZvciBuYXZpZ2F0aW9uIGJ1dHRvbnMgYW5kIGxpbmtzLlxuICogVXNlcyA6OmFmdGVyOyBpbmNvbXBhdGlibGUgd2l0aCBlbGVtZW50cyB0aGF0IGFscmVhZHkgdXNlIDo6YWZ0ZXIgZm9yIG90aGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtICRzaXplICAgICAgICBTcGlubmVyIGRpYW1ldGVyXG4gKiBAcGFyYW0gJGNvbG9yICAgICAgIFZpc2libGUgc3Bpbm5lciBhcmMgY29sb3JcbiAqIEBwYXJhbSAkdHJhY2stY29sb3IgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRkdXJhdGlvbiAgICBPbmUtcm90YXRpb24gZHVyYXRpb25cbiAqL1xuLyoqXG4gKiBUcnVuY2F0ZSB0ZXh0IHdpdGggZWxsaXBzaXNcbiAqL1xuLyoqXG4gKiBMaW5lIGNsYW1wIChtdWx0aS1saW5lIHRydW5jYXRpb24pXG4gKiBAcGFyYW0ge251bWJlcn0gJGxpbmVzIC0gTnVtYmVyIG9mIGxpbmVzIHRvIHNob3dcbiAqL1xuLyoqXG4gKiBDdXN0b20gc2Nyb2xsYmFyIHN0eWxpbmdcbiAqIEBwYXJhbSB7Y29sb3J9ICR0aHVtYiAtIFNjcm9sbGJhciB0aHVtYiBjb2xvclxuICogQHBhcmFtIHtjb2xvcn0gJHRyYWNrIC0gU2Nyb2xsYmFyIHRyYWNrIGNvbG9yXG4gKi9cbi8qKlxuICogQWJzb2x1dGUgY2VudGVyXG4gKi9cbi8qKlxuICogQWJzb2x1dGUgY292ZXIgKHN0cmV0Y2ggdG8gZmlsbCBwYXJlbnQpXG4gKi9cbi8qKlxuICogRml4ZWQgY292ZXIgKHN0cmV0Y2ggdG8gZmlsbCB2aWV3cG9ydClcbiAqL1xuLyoqXG4gKiBGbGV4IGNlbnRlciAoYm90aCBheGVzKVxuICovXG4vKipcbiAqIEZsZXggYmV0d2VlbiAoc3BhY2UtYmV0d2VlbilcbiAqL1xuLyoqXG4gKiBGbGV4IGNvbHVtblxuICovXG4vKipcbiAqIEdyaWQgd2l0aCBhdXRvLWZpdCBjb2x1bW5zXG4gKiBAcGFyYW0ge3NpemV9ICRtaW4gLSBNaW5pbXVtIGNvbHVtbiB3aWR0aFxuICogQHBhcmFtIHtzaXplfSAkbWF4IC0gTWF4aW11bSBjb2x1bW4gd2lkdGggKGRlZmF1bHQ6IDFmcilcbiAqIEBwYXJhbSB7c2l6ZX0gJGdhcCAtIEdhcCBiZXR3ZWVuIGNvbHVtbnMgKGRlZmF1bHQ6ICRzcGFjaW5nLTQpXG4gKi9cbi8qKlxuICogR3JpZCB3aXRoIGF1dG8tZmlsbCBjb2x1bW5zXG4gKiBAcGFyYW0ge3NpemV9ICRtaW4gLSBNaW5pbXVtIGNvbHVtbiB3aWR0aFxuICogQHBhcmFtIHtzaXplfSAkbWF4IC0gTWF4aW11bSBjb2x1bW4gd2lkdGggKGRlZmF1bHQ6IDFmcilcbiAqIEBwYXJhbSB7c2l6ZX0gJGdhcCAtIEdhcCBiZXR3ZWVuIGNvbHVtbnMgKGRlZmF1bHQ6ICRzcGFjaW5nLTQpXG4gKi9cbi8qKlxuICogT2JqZWN0IGZpdCBjb3ZlclxuICovXG4vKipcbiAqIE9iamVjdCBmaXQgY29udGFpblxuICovXG4vKipcbiAqIEFzcGVjdCByYXRpbyBib3hcbiAqIEBwYXJhbSB7bnVtYmVyfSAkd2lkdGggLSBXaWR0aCByYXRpb1xuICogQHBhcmFtIHtudW1iZXJ9ICRoZWlnaHQgLSBIZWlnaHQgcmF0aW9cbiAqL1xuLyoqXG4gKiBDbGVhcmZpeCBmb3IgZmxvYXRzXG4gKi9cbi8qKlxuICogSGlkZSBpbiBwcmludFxuICovXG4vKipcbiAqIFNob3cgb25seSBpbiBwcmludFxuICovXG4vKlxuLm15LWNhcmQge1xuICBAaW5jbHVkZSBjYXJkLXNoYWRvdzsgICAgICAgICAgICAgLy8gQ2FyZCB3aXRoIGhvdmVyIHNoYWRvd1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHRyYW5zZm9ybSk7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtbWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5teS1pbnB1dCB7XG4gIEBpbmNsdWRlIGZvY3VzLXZpc2libGU7ICAgICAgICAgICAgLy8gQWNjZXNzaWJsZSBmb2N1cyByaW5nXG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZWQ7ICAgICAgICAgICAgICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgfVxufVxuXG4udHJ1bmNhdGVkLXRleHQge1xuICBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpOyAgICAgICAgICAgIC8vIFNob3cgMyBsaW5lcyBtYXhcbn1cblxuLnByb2R1Y3QtZ3JpZCB7XG4gIEBpbmNsdWRlIGdyaWQtYXV0by1maXQoMjUwcHgpOyAgICAgLy8gUmVzcG9uc2l2ZSBncmlkXG59XG5cbi5jZW50ZXJlZC1tb2RhbCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjsgICAgICAgICAgLy8gQ2VudGVyIGluIHZpZXdwb3J0XG59XG4qL1xuLypcbkFmdGVyIGltcG9ydGluZyB0aGlzIGZpbGUsIHlvdSBoYXZlIGFjY2VzcyB0bzpcblxuQ09MT1JTOlxuLSBQcmltYXJ5IGNvbG9yczogJGNvbG9yLXByaW1hcnksICRjb2xvci1wcmltYXJ5LWxpZ2h0LCAkY29sb3ItcHJpbWFyeS1kYXJrXG4tIEdyYXlzOiAkY29sb3ItZ3JheS01MCB0aHJvdWdoICRjb2xvci1ncmF5LTkwMFxuLSBTZW1hbnRpYzogJGNvbG9yLXN1Y2Nlc3MsICRjb2xvci1kYW5nZXIsICRjb2xvci13YXJuaW5nLCAkY29sb3ItaW5mb1xuLSBCYWNrZ3JvdW5kczogJGJnLXBhZ2UsICRiZy1saWdodCwgJGJnLWRhcmssIGV0Yy5cbi0gVGV4dDogJHRleHQtcHJpbWFyeSwgJHRleHQtc2Vjb25kYXJ5LCAkdGV4dC1tdXRlZCwgZXRjLlxuLSBCb3JkZXJzOiAkYm9yZGVyLWRlZmF1bHQsICRib3JkZXItbGlnaHQsICRib3JkZXItc3Ryb25nXG4tIEdyYWRpZW50czogJGdyYWRpZW50LXByaW1hcnksICRncmFkaWVudC1wcmltYXJ5LWJ1dHRvbiwgZXRjLlxuXG5UWVBPR1JBUEhZOlxuLSBGb250IGZhbWlsaWVzOiAkZm9udC1mYW1pbHktYmFzZSwgJGZvbnQtZmFtaWx5LWhlYWRpbmdcbi0gRm9udCBzaXplczogJGZvbnQtc2l6ZS14cyB0aHJvdWdoICRmb250LXNpemUtNnhsXG4tIEhlYWRpbmcgc2l6ZXM6ICRoMS1zaXplLCAkaDItc2l6ZSwgZXRjLlxuLSBGb250IHdlaWdodHM6ICRmb250LXdlaWdodC1saWdodCB0aHJvdWdoICRmb250LXdlaWdodC1ibGFja1xuLSBMaW5lIGhlaWdodHM6ICRsaW5lLWhlaWdodC10aWdodCwgJGxpbmUtaGVpZ2h0LW5vcm1hbCwgZXRjLlxuXG5TUEFDSU5HOlxuLSBTY2FsZTogJHNwYWNpbmctMCB0aHJvdWdoICRzcGFjaW5nLTMyXG4tIFNlbWFudGljOiAkc3BhY2luZy14cywgJHNwYWNpbmctc20sICRzcGFjaW5nLW1kLCAkc3BhY2luZy1sZywgJHNwYWNpbmcteGxcbi0gQ29tcG9uZW50LXNwZWNpZmljOiAkaW5wdXQtcGFkZGluZy15LCAkYnV0dG9uLXBhZGRpbmcteCwgJGNhcmQtcGFkZGluZywgZXRjLlxuXG5TSEFET1dTOlxuLSBTY2FsZTogJHNoYWRvdy14cyB0aHJvdWdoICRzaGFkb3ctMnhsXG4tIFNlbWFudGljOiAkc2hhZG93LWNhcmQsICRzaGFkb3ctZHJvcGRvd24sICRzaGFkb3ctbW9kYWwsIGV0Yy5cbi0gTWV0aG9kczogQGluY2x1ZGUgc2hhZG93KCdsZycpO1xuXG5CT1JERVJTOlxuLSBSYWRpdXM6ICRyYWRpdXMtbm9uZSB0aHJvdWdoICRyYWRpdXMtZnVsbFxuLSBXaWR0aHM6ICRib3JkZXItd2lkdGgtMSB0aHJvdWdoICRib3JkZXItd2lkdGgtNVxuLSBTdHlsZXM6ICRib3JkZXItZGVmYXVsdC1zdHlsZSwgJGJvcmRlci1mb2N1cy1zdHlsZSwgZXRjLlxuXG5NRURJQSBRVUVSSUVTOlxuLSBCcmVha3BvaW50czogJGJyZWFrcG9pbnQtc20sICRicmVha3BvaW50LW1kLCAkYnJlYWtwb2ludC1sZywgZXRjLlxuLSBNaXhpbnM6IEBpbmNsdWRlIG1lZGlhLW1kIHsgLi4uIH0sIEBpbmNsdWRlIG1lZGlhLWxnIHsgLi4uIH1cblxuVFJBTlNJVElPTlM6XG4tIER1cmF0aW9uczogJGR1cmF0aW9uLWZhc3QsICRkdXJhdGlvbi1iYXNlLCAkZHVyYXRpb24tc2xvd1xuLSBFYXNpbmdzOiAkZWFzZS1pbiwgJGVhc2Utb3V0LCAkZWFzZS1pbi1vdXRcbi0gQ29tcGxldGUgdHJhbnNpdGlvbnM6ICR0cmFuc2l0aW9uLWJ1dHRvbiwgJHRyYW5zaXRpb24tY2FyZCwgZXRjLlxuLSBBbmltYXRpb25zOiAkYW5pbWF0aW9uLXNwaW4sICRhbmltYXRpb24tcHVsc2UsIGV0Yy5cblxuWi1JTkRFWDpcbi0gU2NhbGU6ICR6LWluZGV4LWJhc2UgdGhyb3VnaCAkei1pbmRleC1tYXhcbi0gU2VtYW50aWM6ICR6LWluZGV4LWRyb3Bkb3duLCAkei1pbmRleC1tb2RhbCwgJHotaW5kZXgtdG9vbHRpcCwgZXRjLlxuXG5NSVhJTlM6XG4tIFNoYWRvd3M6IEBpbmNsdWRlIGNhcmQtc2hhZG93LCBAaW5jbHVkZSBwcm9kdWN0LXNoYWRvd1xuLSBGb2N1czogQGluY2x1ZGUgZm9jdXMtcmluZywgQGluY2x1ZGUgZm9jdXMtdmlzaWJsZVxuLSBWaXNpYmlsaXR5OiBAaW5jbHVkZSBzci1vbmx5LCBAaW5jbHVkZSBoaWRkZW5cbi0gU3RhdGVzOiBAaW5jbHVkZSBkaXNhYmxlZCwgQGluY2x1ZGUgbG9hZGluZ1xuLSBUZXh0OiBAaW5jbHVkZSB0cnVuY2F0ZSwgQGluY2x1ZGUgbGluZS1jbGFtcCgzKVxuLSBMYXlvdXQ6IEBpbmNsdWRlIGZsZXgtY2VudGVyLCBAaW5jbHVkZSBhYnNvbHV0ZS1jZW50ZXJcbi0gR3JpZDogQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweClcbi0gQW5kIG1hbnkgbW9yZS4uLlxuKi9cbi8qXG5Db21tb24gcGF0dGVybnM6XG5cbi8vIENhcmQgd2l0aCBzaGFkb3dcbi5jYXJkIHtcbiAgcGFkZGluZzogJHNwYWNpbmctNDtcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1tZDtcbiAgQGluY2x1ZGUgY2FyZC1zaGFkb3c7XG59XG5cbi8vIFJlc3BvbnNpdmUgdGV4dFxuLmhlYWRpbmcge1xuICBmb250LXNpemU6ICRoMi1zaXplLW1vYmlsZTtcblxuICBAaW5jbHVkZSBtZWRpYS1tZCB7XG4gICAgZm9udC1zaXplOiAkaDItc2l6ZS1kZXNrdG9wO1xuICB9XG59XG5cbi8vIEJ1dHRvblxuLmJ1dHRvbiB7XG4gIHBhZGRpbmc6ICRidXR0b24tcGFkZGluZy15ICRidXR0b24tcGFkZGluZy14O1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLWJ1dHRvbjtcbiAgYmFja2dyb3VuZDogJGdyYWRpZW50LXByaW1hcnktYnV0dG9uO1xuICBjb2xvcjogJHRleHQtaW52ZXJzZTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihiYWNrZ3JvdW5kLWNvbG9yLCAkZHVyYXRpb24taG92ZXIpO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1wcmltYXJ5LWRhcms7XG4gIH1cblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIEBpbmNsdWRlIGZvY3VzLXJpbmc7XG4gIH1cbn1cblxuLy8gR3JpZCBsYXlvdXRcbi5wcm9kdWN0LWdyaWQge1xuICBAaW5jbHVkZSBncmlkLWF1dG8tZml0KDI1MHB4LCAxZnIsICRzcGFjaW5nLTQpO1xufVxuXG4vLyBUcnVuY2F0ZWQgdGV4dFxuLmRlc2NyaXB0aW9uIHtcbiAgQGluY2x1ZGUgbGluZS1jbGFtcCgzKTsgIC8vIFNob3cgMyBsaW5lcyBtYXhcbn1cbiovXG4uZGF0dGUtbW9kYWwtdHJpZ2dlciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGVhc2UsIGJveC1zaGFkb3cgMTUwbXMgZWFzZTtcbn1cbi5kYXR0ZS1tb2RhbC10cmlnZ2VyOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuLmRhdHRlLW1vZGFsLXRyaWdnZXI6Zm9jdXMge1xuICBvdXRsaW5lOiAycHggc29saWQgIzU3ZDA2ZDtcbiAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLmRhdHRlLW1vZGFsLmRhdHRlLWltYWdlLWxpZ2h0Ym94IC5tb2RhbC1kaWFsb2cge1xuICBtYXgtd2lkdGg6IGZpdC1jb250ZW50ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gIG1hcmdpbjogMS43NXJlbSBhdXRvO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xufVxuLmRhdHRlLW1vZGFsLmRhdHRlLWltYWdlLWxpZ2h0Ym94IC5tb2RhbC1jb250ZW50IHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gIGJveC1zaGFkb3c6IDAgMTBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBtYXgtd2lkdGg6IDkwdnc7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5kYXR0ZS1tb2RhbC5kYXR0ZS1pbWFnZS1saWdodGJveCAubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogMC43NXJlbSAxcmVtO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZWVlZTtcbiAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG4uZGF0dGUtbW9kYWwuZGF0dGUtaW1hZ2UtbGlnaHRib3ggLm1vZGFsLWhlYWRlciAubW9kYWwtdGl0bGUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiAjNTU1NTU1O1xufVxuLmRhdHRlLW1vZGFsLmRhdHRlLWltYWdlLWxpZ2h0Ym94IC5tb2RhbC1ib2R5IHtcbiAgcGFkZGluZzogMXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG59XG4uZGF0dGUtbW9kYWwuZGF0dGUtaW1hZ2UtbGlnaHRib3ggLmRhdHRlLWxpZ2h0Ym94LWltYWdlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1heC13aWR0aDogODV2dztcbiAgbWF4LWhlaWdodDogY2FsYyg4MHZoIC0gMTAwcHgpO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNTc2cHgpIHtcbiAgLmRhdHRlLW1vZGFsLmRhdHRlLWltYWdlLWxpZ2h0Ym94IC5tb2RhbC1kaWFsb2cge1xuICAgIG1heC13aWR0aDogOTV2dyAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMC41cmVtIGF1dG87XG4gIH1cbiAgLmRhdHRlLW1vZGFsLmRhdHRlLWltYWdlLWxpZ2h0Ym94IC5tb2RhbC1oZWFkZXIge1xuICAgIHBhZGRpbmc6IDAuNXJlbSAwLjc1cmVtO1xuICB9XG4gIC5kYXR0ZS1tb2RhbC5kYXR0ZS1pbWFnZS1saWdodGJveCAubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZSB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxuICAuZGF0dGUtbW9kYWwuZGF0dGUtaW1hZ2UtbGlnaHRib3ggLm1vZGFsLWJvZHkge1xuICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgfVxuICAuZGF0dGUtbW9kYWwuZGF0dGUtaW1hZ2UtbGlnaHRib3ggLmRhdHRlLWxpZ2h0Ym94LWltYWdlIHtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDkwdmggLSA2MHB4KTtcbiAgfVxufVxuXG4vKlxuLm15LWNvbXBvbmVudCB7XG4gIHBhZGRpbmc6IDFyZW07XG5cbiAgLy8gTW9iaWxlLWZpcnN0IHJlc3BvbnNpdmUgZGVzaWduXG4gIEBpbmNsdWRlIG1lZGlhLW1kIHtcbiAgICBwYWRkaW5nOiAycmVtO1xuICB9XG5cbiAgQGluY2x1ZGUgbWVkaWEtbGcge1xuICAgIHBhZGRpbmc6IDNyZW07XG4gIH1cblxuICAvLyBEZXNrdG9wLWZpcnN0ICh1c2Ugc3BhcmluZ2x5KVxuICBAaW5jbHVkZSBtZWRpYS1kb3duLW1kIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cblxuICAvLyBCZXR3ZWVuIHNwZWNpZmljIGJyZWFrcG9pbnRzXG4gIEBpbmNsdWRlIG1lZGlhLWJldHdlZW4oJGJyZWFrcG9pbnQtbWQsICRicmVha3BvaW50LWxnKSB7XG4gICAgYmFja2dyb3VuZDogYmx1ZTtcbiAgfVxuXG4gIC8vIFJlZHVjZWQgbW90aW9uIGZvciBhY2Nlc3NpYmlsaXR5XG4gIEBpbmNsdWRlIHJlZHVjZWQtbW90aW9uIHtcbiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiovXG5Aa2V5ZnJhbWVzIHNwaW4ge1xuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiAwLjY7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLWRvd24ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLXVwIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNjYWxlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbi8qXG4uYnV0dG9uIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihiYWNrZ3JvdW5kLWNvbG9yKTsgIC8vIFNpbmdsZSBwcm9wZXJ0eVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XG4gIH1cbn1cblxuLmNhcmQge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9ucygkdHJhbnNpdGlvbi1zaGFkb3csICR0cmFuc2l0aW9uLXRyYW5zZm9ybSk7ICAvLyBNdWx0aXBsZSBwcm9wZXJ0aWVzXG5cbiAgJjpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy1sZztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIH1cbn1cblxuLnNwaW5uZXIge1xuICBhbmltYXRpb246ICRhbmltYXRpb24tc3Bpbjtcbn1cblxuLy8gUmVzcGVjdCByZWR1Y2VkIG1vdGlvblxuKiB7XG4gIEBpbmNsdWRlIHJlc3BlY3QtcmVkdWNlZC1tb3Rpb247XG59XG4qL1xuLypcblotSW5kZXggTGF5ZXJpbmcgU3RyYXRlZ3k6XG5cbjEtOTogICAgICAgICAgQmFzZSBjb250ZW50LCBzdWJ0bGUgbGF5ZXJpbmdcbjEwLTk5OiAgICAgICAgQWJvdmUgY29udGVudCAocHJldmlld3MsIGhpZ2hsaWdodHMpXG4xMDAtOTk5OiAgICAgIERyb3Bkb3ducywgbWVudXMsIG5hdmlnYXRpb25cbjEwMDAtMTk5OTogICAgRml4ZWQvc3RpY2t5IGVsZW1lbnRzLCBtb2RhbHNcbjIwMDArOiAgICAgICAgTm90aWZpY2F0aW9ucywgYWxlcnRzLCBjcml0aWNhbCBVSVxuXG5FeGFtcGxlOlxuLm15LWRyb3Bkb3duIHtcbiAgei1pbmRleDogJHotaW5kZXgtZHJvcGRvd247ICAvLyAxMDBcbn1cblxuLm15LW1vZGFsIHtcbiAgei1pbmRleDogJHotaW5kZXgtbW9kYWw7ICAgICAvLyAxMDUwXG59XG5cbi5teS10b29sdGlwIHtcbiAgei1pbmRleDogJHotaW5kZXgtdG9vbHRpcDsgICAvLyAxMDcwIChhbHdheXMgYWJvdmUgbW9kYWxzKVxufVxuKi9cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHB1bHNlIHtcbiAgMCUsIDEwMCUge1xuICAgIG9wYWNpdHk6IDAuNjtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtdXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2NhbGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuLypcbi5idXR0b24ge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJhY2tncm91bmQtY29sb3IpOyAgLy8gU2luZ2xlIHByb3BlcnR5XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTtcbiAgfVxufVxuXG4uY2FyZCB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb25zKCR0cmFuc2l0aW9uLXNoYWRvdywgJHRyYW5zaXRpb24tdHJhbnNmb3JtKTsgIC8vIE11bHRpcGxlIHByb3BlcnRpZXNcblxuICAmOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWxnO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgfVxufVxuXG4uc3Bpbm5lciB7XG4gIGFuaW1hdGlvbjogJGFuaW1hdGlvbi1zcGluO1xufVxuXG4vLyBSZXNwZWN0IHJlZHVjZWQgbW90aW9uXG4qIHtcbiAgQGluY2x1ZGUgcmVzcGVjdC1yZWR1Y2VkLW1vdGlvbjtcbn1cbiovXG4vKipcbiAqIFJvYm8tYnV0dG9uIHN0eWxlIChncmVlbiBncmFkaWVudCB3aXRoIGhvdmVyIG92ZXJsYXkpXG4gKiBVc2UgdGhpcyBmb3IgcHJpbWFyeSBhY3Rpb24gYnV0dG9ucyBhY3Jvc3MgdGhlIHNpdGVcbiAqIE5vdGU6ICFpbXBvcnRhbnQgbmVlZGVkIHRvIG92ZXJyaWRlIC5idG4uYnRuLXByaW1hcnkgaW4gYWxsLnNjc3NcbiAqIFVzZXMgYmFja2dyb3VuZC1pbWFnZSAobm90IGJhY2tncm91bmQgc2hvcnRoYW5kKSBzbyBiYWNrZ3JvdW5kLWNvbG9yIHdvcmtzIGZvciBob3ZlciBibGVuZFxuICovXG4vKipcbiAqIEFwcGx5IHNoYWRvdyB3aXRoIGxldmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gJGxldmVsIC0gU2hhZG93IGxldmVsICh4cywgc20sIGJhc2UsIG1kLCBsZywgeGwsIDJ4bClcbiAqL1xuLyoqXG4gKiBDYXJkIHNoYWRvdyB3aXRoIGhvdmVyIGVmZmVjdFxuICogQHBhcmFtIHtib29sZWFufSAkaG92ZXIgLSBFbmFibGUgaG92ZXIgZWZmZWN0IChkZWZhdWx0OiB0cnVlKVxuICovXG4vKipcbiAqIFByb2R1Y3QgaXRlbSBzaGFkb3dcbiAqL1xuLyoqXG4gKiBGb2N1cyByaW5nIGZvciBhY2Nlc3NpYmlsaXR5XG4gKiBAcGFyYW0ge2NvbG9yfSAkY29sb3IgLSBGb2N1cyByaW5nIGNvbG9yIChkZWZhdWx0OiBwcmltYXJ5KVxuICovXG4vKipcbiAqIEZvY3VzIHZpc2libGUgKG9ubHkgb24ga2V5Ym9hcmQgZm9jdXMpXG4gKi9cbi8qKlxuICogSGlkZGVuIChkaXNwbGF5OiBub25lKVxuICovXG4vKipcbiAqIFZpc3VhbGx5IGhpZGRlbiAoZm9yIHNjcmVlbiByZWFkZXJzKVxuICovXG4vKipcbiAqIE5vdCB2aXN1YWxseSBoaWRkZW4gKHVuZG8gc3Itb25seSlcbiAqL1xuLyoqXG4gKiBEaXNhYmxlZCBzdGF0ZVxuICovXG4vKipcbiAqIExvYWRpbmcgc3RhdGVcbiAqL1xuLyoqXG4gKiBDZW50ZXJlZCBzcGlubmVyIG9uIGEgcG9zaXRpb25lZCBwYXJlbnQg4oCUIHdpdGhvdXQgYW55IHdhc2ggb3ZlcmxheS5cbiAqIFVzZXMgOjphZnRlciBvbmx5OyBwYXJlbnQgbXVzdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZS5cbiAqIFVzZSB0aGlzIHdoZW4gZWxlbWVudCBjaGlsZHJlbiBhcmUgaGlkZGVuIHZpYSB2aXNpYmlsaXR5OmhpZGRlbiBzbyBub1xuICogd2FzaCBsYXllciBpcyBuZWVkZWQgdG8gbWFzayB0aGVtLlxuICpcbiAqIEBwYXJhbSAkc3Bpbm5lci1jb2xvciBWaXNpYmxlIHNwaW5uZXIgYXJjIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItdHJhY2sgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXNpemUgIERpYW1ldGVyIG9mIHRoZSBzcGlubmVyXG4gKiBAcGFyYW0gJHotaW5kZXggICAgICAgWi1pbmRleCBvZiB0aGUgc3Bpbm5lclxuICovXG4vKipcbiAqIExvYWRpbmcgb3ZlcmxheTogc2VtaS10cmFuc3BhcmVudCB3YXNoICsgY2VudGVyZWQgc3Bpbm5lciBvdmVyIGEgcG9zaXRpb25lZCBwYXJlbnQuXG4gKiBQYXJlbnQgbXVzdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSAob3IgYWJzb2x1dGUvZml4ZWQpLlxuICogVXNlcyA6OmJlZm9yZSBmb3IgdGhlIHdhc2ggbGF5ZXIgYW5kIDo6YWZ0ZXIgZm9yIHRoZSBzcGlubmVyICh2aWEgbG9hZGluZy1zcGlubmVyLWNlbnRlcmVkKS5cbiAqIERvIG5vdCBhcHBseSB0byBlbGVtZW50cyB0aGF0IGFscmVhZHkgdXNlIGJvdGggcHNldWRvLWVsZW1lbnRzIGZvciBvdGhlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSAkYmcgICAgICAgICAgICBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB3YXNoIGxheWVyXG4gKiBAcGFyYW0gJHNwaW5uZXItY29sb3IgVmlzaWJsZSBzcGlubmVyIGFyYyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXRyYWNrIEZhaW50IHRyYWNrIHJpbmcgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci1zaXplICBEaWFtZXRlciBvZiB0aGUgc3Bpbm5lclxuICogQHBhcmFtICR6LWluZGV4ICAgICAgIFotaW5kZXggZm9yIHdhc2ggKHNwaW5uZXIgZ2V0cyArMSlcbiAqL1xuLyoqXG4gKiBJbmxpbmUgc3Bpbm5lciBhcHBlbmRlZCBhZnRlciBlbGVtZW50IGNvbnRlbnQg4oCUIGZvciBuYXZpZ2F0aW9uIGJ1dHRvbnMgYW5kIGxpbmtzLlxuICogVXNlcyA6OmFmdGVyOyBpbmNvbXBhdGlibGUgd2l0aCBlbGVtZW50cyB0aGF0IGFscmVhZHkgdXNlIDo6YWZ0ZXIgZm9yIG90aGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtICRzaXplICAgICAgICBTcGlubmVyIGRpYW1ldGVyXG4gKiBAcGFyYW0gJGNvbG9yICAgICAgIFZpc2libGUgc3Bpbm5lciBhcmMgY29sb3JcbiAqIEBwYXJhbSAkdHJhY2stY29sb3IgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRkdXJhdGlvbiAgICBPbmUtcm90YXRpb24gZHVyYXRpb25cbiAqL1xuLyoqXG4gKiBUcnVuY2F0ZSB0ZXh0IHdpdGggZWxsaXBzaXNcbiAqL1xuLyoqXG4gKiBMaW5lIGNsYW1wIChtdWx0aS1saW5lIHRydW5jYXRpb24pXG4gKiBAcGFyYW0ge251bWJlcn0gJGxpbmVzIC0gTnVtYmVyIG9mIGxpbmVzIHRvIHNob3dcbiAqL1xuLyoqXG4gKiBDdXN0b20gc2Nyb2xsYmFyIHN0eWxpbmdcbiAqIEBwYXJhbSB7Y29sb3J9ICR0aHVtYiAtIFNjcm9sbGJhciB0aHVtYiBjb2xvclxuICogQHBhcmFtIHtjb2xvcn0gJHRyYWNrIC0gU2Nyb2xsYmFyIHRyYWNrIGNvbG9yXG4gKi9cbi8qKlxuICogQWJzb2x1dGUgY2VudGVyXG4gKi9cbi8qKlxuICogQWJzb2x1dGUgY292ZXIgKHN0cmV0Y2ggdG8gZmlsbCBwYXJlbnQpXG4gKi9cbi8qKlxuICogRml4ZWQgY292ZXIgKHN0cmV0Y2ggdG8gZmlsbCB2aWV3cG9ydClcbiAqL1xuLyoqXG4gKiBGbGV4IGNlbnRlciAoYm90aCBheGVzKVxuICovXG4vKipcbiAqIEZsZXggYmV0d2VlbiAoc3BhY2UtYmV0d2VlbilcbiAqL1xuLyoqXG4gKiBGbGV4IGNvbHVtblxuICovXG4vKipcbiAqIEdyaWQgd2l0aCBhdXRvLWZpdCBjb2x1bW5zXG4gKiBAcGFyYW0ge3NpemV9ICRtaW4gLSBNaW5pbXVtIGNvbHVtbiB3aWR0aFxuICogQHBhcmFtIHtzaXplfSAkbWF4IC0gTWF4aW11bSBjb2x1bW4gd2lkdGggKGRlZmF1bHQ6IDFmcilcbiAqIEBwYXJhbSB7c2l6ZX0gJGdhcCAtIEdhcCBiZXR3ZWVuIGNvbHVtbnMgKGRlZmF1bHQ6ICRzcGFjaW5nLTQpXG4gKi9cbi8qKlxuICogR3JpZCB3aXRoIGF1dG8tZmlsbCBjb2x1bW5zXG4gKiBAcGFyYW0ge3NpemV9ICRtaW4gLSBNaW5pbXVtIGNvbHVtbiB3aWR0aFxuICogQHBhcmFtIHtzaXplfSAkbWF4IC0gTWF4aW11bSBjb2x1bW4gd2lkdGggKGRlZmF1bHQ6IDFmcilcbiAqIEBwYXJhbSB7c2l6ZX0gJGdhcCAtIEdhcCBiZXR3ZWVuIGNvbHVtbnMgKGRlZmF1bHQ6ICRzcGFjaW5nLTQpXG4gKi9cbi8qKlxuICogT2JqZWN0IGZpdCBjb3ZlclxuICovXG4vKipcbiAqIE9iamVjdCBmaXQgY29udGFpblxuICovXG4vKipcbiAqIEFzcGVjdCByYXRpbyBib3hcbiAqIEBwYXJhbSB7bnVtYmVyfSAkd2lkdGggLSBXaWR0aCByYXRpb1xuICogQHBhcmFtIHtudW1iZXJ9ICRoZWlnaHQgLSBIZWlnaHQgcmF0aW9cbiAqL1xuLyoqXG4gKiBDbGVhcmZpeCBmb3IgZmxvYXRzXG4gKi9cbi8qKlxuICogSGlkZSBpbiBwcmludFxuICovXG4vKipcbiAqIFNob3cgb25seSBpbiBwcmludFxuICovXG4vKlxuLm15LWNhcmQge1xuICBAaW5jbHVkZSBjYXJkLXNoYWRvdzsgICAgICAgICAgICAgLy8gQ2FyZCB3aXRoIGhvdmVyIHNoYWRvd1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHRyYW5zZm9ybSk7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtbWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5teS1pbnB1dCB7XG4gIEBpbmNsdWRlIGZvY3VzLXZpc2libGU7ICAgICAgICAgICAgLy8gQWNjZXNzaWJsZSBmb2N1cyByaW5nXG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZWQ7ICAgICAgICAgICAgICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgfVxufVxuXG4udHJ1bmNhdGVkLXRleHQge1xuICBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpOyAgICAgICAgICAgIC8vIFNob3cgMyBsaW5lcyBtYXhcbn1cblxuLnByb2R1Y3QtZ3JpZCB7XG4gIEBpbmNsdWRlIGdyaWQtYXV0by1maXQoMjUwcHgpOyAgICAgLy8gUmVzcG9uc2l2ZSBncmlkXG59XG5cbi5jZW50ZXJlZC1tb2RhbCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjsgICAgICAgICAgLy8gQ2VudGVyIGluIHZpZXdwb3J0XG59XG4qL1xuLypcbkFmdGVyIGltcG9ydGluZyB0aGlzIGZpbGUsIHlvdSBoYXZlIGFjY2VzcyB0bzpcblxuQ09MT1JTOlxuLSBQcmltYXJ5IGNvbG9yczogJGNvbG9yLXByaW1hcnksICRjb2xvci1wcmltYXJ5LWxpZ2h0LCAkY29sb3ItcHJpbWFyeS1kYXJrXG4tIEdyYXlzOiAkY29sb3ItZ3JheS01MCB0aHJvdWdoICRjb2xvci1ncmF5LTkwMFxuLSBTZW1hbnRpYzogJGNvbG9yLXN1Y2Nlc3MsICRjb2xvci1kYW5nZXIsICRjb2xvci13YXJuaW5nLCAkY29sb3ItaW5mb1xuLSBCYWNrZ3JvdW5kczogJGJnLXBhZ2UsICRiZy1saWdodCwgJGJnLWRhcmssIGV0Yy5cbi0gVGV4dDogJHRleHQtcHJpbWFyeSwgJHRleHQtc2Vjb25kYXJ5LCAkdGV4dC1tdXRlZCwgZXRjLlxuLSBCb3JkZXJzOiAkYm9yZGVyLWRlZmF1bHQsICRib3JkZXItbGlnaHQsICRib3JkZXItc3Ryb25nXG4tIEdyYWRpZW50czogJGdyYWRpZW50LXByaW1hcnksICRncmFkaWVudC1wcmltYXJ5LWJ1dHRvbiwgZXRjLlxuXG5UWVBPR1JBUEhZOlxuLSBGb250IGZhbWlsaWVzOiAkZm9udC1mYW1pbHktYmFzZSwgJGZvbnQtZmFtaWx5LWhlYWRpbmdcbi0gRm9udCBzaXplczogJGZvbnQtc2l6ZS14cyB0aHJvdWdoICRmb250LXNpemUtNnhsXG4tIEhlYWRpbmcgc2l6ZXM6ICRoMS1zaXplLCAkaDItc2l6ZSwgZXRjLlxuLSBGb250IHdlaWdodHM6ICRmb250LXdlaWdodC1saWdodCB0aHJvdWdoICRmb250LXdlaWdodC1ibGFja1xuLSBMaW5lIGhlaWdodHM6ICRsaW5lLWhlaWdodC10aWdodCwgJGxpbmUtaGVpZ2h0LW5vcm1hbCwgZXRjLlxuXG5TUEFDSU5HOlxuLSBTY2FsZTogJHNwYWNpbmctMCB0aHJvdWdoICRzcGFjaW5nLTMyXG4tIFNlbWFudGljOiAkc3BhY2luZy14cywgJHNwYWNpbmctc20sICRzcGFjaW5nLW1kLCAkc3BhY2luZy1sZywgJHNwYWNpbmcteGxcbi0gQ29tcG9uZW50LXNwZWNpZmljOiAkaW5wdXQtcGFkZGluZy15LCAkYnV0dG9uLXBhZGRpbmcteCwgJGNhcmQtcGFkZGluZywgZXRjLlxuXG5TSEFET1dTOlxuLSBTY2FsZTogJHNoYWRvdy14cyB0aHJvdWdoICRzaGFkb3ctMnhsXG4tIFNlbWFudGljOiAkc2hhZG93LWNhcmQsICRzaGFkb3ctZHJvcGRvd24sICRzaGFkb3ctbW9kYWwsIGV0Yy5cbi0gTWV0aG9kczogQGluY2x1ZGUgc2hhZG93KCdsZycpO1xuXG5CT1JERVJTOlxuLSBSYWRpdXM6ICRyYWRpdXMtbm9uZSB0aHJvdWdoICRyYWRpdXMtZnVsbFxuLSBXaWR0aHM6ICRib3JkZXItd2lkdGgtMSB0aHJvdWdoICRib3JkZXItd2lkdGgtNVxuLSBTdHlsZXM6ICRib3JkZXItZGVmYXVsdC1zdHlsZSwgJGJvcmRlci1mb2N1cy1zdHlsZSwgZXRjLlxuXG5NRURJQSBRVUVSSUVTOlxuLSBCcmVha3BvaW50czogJGJyZWFrcG9pbnQtc20sICRicmVha3BvaW50LW1kLCAkYnJlYWtwb2ludC1sZywgZXRjLlxuLSBNaXhpbnM6IEBpbmNsdWRlIG1lZGlhLW1kIHsgLi4uIH0sIEBpbmNsdWRlIG1lZGlhLWxnIHsgLi4uIH1cblxuVFJBTlNJVElPTlM6XG4tIER1cmF0aW9uczogJGR1cmF0aW9uLWZhc3QsICRkdXJhdGlvbi1iYXNlLCAkZHVyYXRpb24tc2xvd1xuLSBFYXNpbmdzOiAkZWFzZS1pbiwgJGVhc2Utb3V0LCAkZWFzZS1pbi1vdXRcbi0gQ29tcGxldGUgdHJhbnNpdGlvbnM6ICR0cmFuc2l0aW9uLWJ1dHRvbiwgJHRyYW5zaXRpb24tY2FyZCwgZXRjLlxuLSBBbmltYXRpb25zOiAkYW5pbWF0aW9uLXNwaW4sICRhbmltYXRpb24tcHVsc2UsIGV0Yy5cblxuWi1JTkRFWDpcbi0gU2NhbGU6ICR6LWluZGV4LWJhc2UgdGhyb3VnaCAkei1pbmRleC1tYXhcbi0gU2VtYW50aWM6ICR6LWluZGV4LWRyb3Bkb3duLCAkei1pbmRleC1tb2RhbCwgJHotaW5kZXgtdG9vbHRpcCwgZXRjLlxuXG5NSVhJTlM6XG4tIFNoYWRvd3M6IEBpbmNsdWRlIGNhcmQtc2hhZG93LCBAaW5jbHVkZSBwcm9kdWN0LXNoYWRvd1xuLSBGb2N1czogQGluY2x1ZGUgZm9jdXMtcmluZywgQGluY2x1ZGUgZm9jdXMtdmlzaWJsZVxuLSBWaXNpYmlsaXR5OiBAaW5jbHVkZSBzci1vbmx5LCBAaW5jbHVkZSBoaWRkZW5cbi0gU3RhdGVzOiBAaW5jbHVkZSBkaXNhYmxlZCwgQGluY2x1ZGUgbG9hZGluZ1xuLSBUZXh0OiBAaW5jbHVkZSB0cnVuY2F0ZSwgQGluY2x1ZGUgbGluZS1jbGFtcCgzKVxuLSBMYXlvdXQ6IEBpbmNsdWRlIGZsZXgtY2VudGVyLCBAaW5jbHVkZSBhYnNvbHV0ZS1jZW50ZXJcbi0gR3JpZDogQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweClcbi0gQW5kIG1hbnkgbW9yZS4uLlxuKi9cbi8qXG5Db21tb24gcGF0dGVybnM6XG5cbi8vIENhcmQgd2l0aCBzaGFkb3dcbi5jYXJkIHtcbiAgcGFkZGluZzogJHNwYWNpbmctNDtcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1tZDtcbiAgQGluY2x1ZGUgY2FyZC1zaGFkb3c7XG59XG5cbi8vIFJlc3BvbnNpdmUgdGV4dFxuLmhlYWRpbmcge1xuICBmb250LXNpemU6ICRoMi1zaXplLW1vYmlsZTtcblxuICBAaW5jbHVkZSBtZWRpYS1tZCB7XG4gICAgZm9udC1zaXplOiAkaDItc2l6ZS1kZXNrdG9wO1xuICB9XG59XG5cbi8vIEJ1dHRvblxuLmJ1dHRvbiB7XG4gIHBhZGRpbmc6ICRidXR0b24tcGFkZGluZy15ICRidXR0b24tcGFkZGluZy14O1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLWJ1dHRvbjtcbiAgYmFja2dyb3VuZDogJGdyYWRpZW50LXByaW1hcnktYnV0dG9uO1xuICBjb2xvcjogJHRleHQtaW52ZXJzZTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihiYWNrZ3JvdW5kLWNvbG9yLCAkZHVyYXRpb24taG92ZXIpO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1wcmltYXJ5LWRhcms7XG4gIH1cblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIEBpbmNsdWRlIGZvY3VzLXJpbmc7XG4gIH1cbn1cblxuLy8gR3JpZCBsYXlvdXRcbi5wcm9kdWN0LWdyaWQge1xuICBAaW5jbHVkZSBncmlkLWF1dG8tZml0KDI1MHB4LCAxZnIsICRzcGFjaW5nLTQpO1xufVxuXG4vLyBUcnVuY2F0ZWQgdGV4dFxuLmRlc2NyaXB0aW9uIHtcbiAgQGluY2x1ZGUgbGluZS1jbGFtcCgzKTsgIC8vIFNob3cgMyBsaW5lcyBtYXhcbn1cbiovXG4uZGF0dGUtbW9kYWwuZGF0dGUtbWYtcGFnZS1tb2RhbCB7XG4gIHotaW5kZXg6IDEwNTA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC0tZGF0dGUtbW9kYWwtbWF4LXdpZHRoOiAxNTAwcHg7XG4gIC0tZGF0dGUtbW9kYWwtbWF4LWhlaWdodDogOTAwcHg7XG59XG4uZGF0dGUtbW9kYWwuZGF0dGUtbWYtcGFnZS1tb2RhbC5tb2RhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4uZGF0dGUtbW9kYWwuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtZGlhbG9nIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDFyZW0gYXV0bztcbiAgbWluLWhlaWdodDogY2FsYygxMDB2aCAtIDJyZW0pO1xuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gIG1heC13aWR0aDogbWluKDk0dncsIHZhcigtLWRhdHRlLW1vZGFsLW1heC13aWR0aCwgMTUwMHB4KSk7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1pbig5MHZ3LCAzMjBweCk7XG59XG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgLmRhdHRlLW1vZGFsLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWRpYWxvZyB7XG4gICAgbWF4LXdpZHRoOiA5NHZ3O1xuICB9XG59XG4uZGF0dGUtbW9kYWwuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtY29udGVudCB7XG4gIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAwO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IHZhcigtLWRhdHRlLW1vZGFsLWNvbnRlbnQtaGVpZ2h0LCBtaW4oMTAwc3ZoIC0gMnJlbSwgdmFyKC0tZGF0dGUtbW9kYWwtbWF4LWhlaWdodCwgOTAwcHgpKSk7XG4gIG1heC1oZWlnaHQ6IHZhcigtLWRhdHRlLW1vZGFsLWNvbnRlbnQtaGVpZ2h0LCBtaW4oMTAwc3ZoIC0gMnJlbSwgdmFyKC0tZGF0dGUtbW9kYWwtbWF4LWhlaWdodCwgOTAwcHgpKSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJveC1zaGFkb3c6IDAgMTBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbn1cbi5kYXR0ZS1tb2RhbC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IHtcbiAgcGFkZGluZzogMXJlbTtcbiAgcGFkZGluZy10b3A6IDEuMjVyZW07XG4gIGZsZXg6IDE7XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgdG91Y2gtYWN0aW9uOiBwYW4teTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xufVxuXG4uZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbW9kZWwtZmluZGVyLXBhZ2Uge1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWluLWhlaWdodDogMDtcbn1cbi5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tb2RlbC1maW5kZXItcGFnZSAuZGF0dGUtbWYtcGFnZS1oZWFkZXIge1xuICBwYWRkaW5nLXJpZ2h0OiA0NXB4O1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tb2RlbC1maW5kZXItcGFnZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMC43NXJlbTtcbiAgfVxuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbW9kZWwtZmluZGVyLXBhZ2UgLmRhdHRlLW1mLXBhZ2UtaGVhZGVyIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tb2RlbC1maW5kZXItcGFnZSA+ICoge1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxufVxuLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkIHtcbiAgdG91Y2gtYWN0aW9uOiBwYW4teTtcbiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA1NzVweCkge1xuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWNhcmQge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkIGltZyxcbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkIC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctaW1hZ2Uge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWF4LWhlaWdodDogbWluKDIyc3ZoLCAxODBweCk7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIH1cbn1cbi5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctaW1hZ2Uge1xuICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkLFxuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LFxuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWNvbHVtbixcbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy13cmFwcGVyIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiAwO1xuICB9XG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctY2FyZCB7XG4gICAgcGFkZGluZzogMC43NXJlbTtcbiAgfVxuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWNhcmQ6aGFzKC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctaW1hZ2Vbc3JjPVwiXCJdKSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlLXdyYXBwZXIsXG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctY2FyZDpoYXMoLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZVtzcmM9XCJcIl0pIC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctaW1hZ2UsXG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctY2FyZDpoYXMoLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZVtzcmM9XCJcIl0pIGltZyxcbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkOm5vdCg6aGFzKC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctaW1hZ2UpKSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlLXdyYXBwZXIsXG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctY2FyZDpub3QoOmhhcyguZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlKSkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZSxcbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkOm5vdCg6aGFzKC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctaW1hZ2UpKSBpbWcsXG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctY2FyZDpub3QoOmhhcyhpbWcpKSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlLXdyYXBwZXIsXG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctY2FyZDpub3QoOmhhcyhpbWcpKSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlLFxuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWNhcmQ6bm90KDpoYXMoaW1nKSkgaW1nIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZS13cmFwcGVyOmVtcHR5LFxuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlW3NyYz1cIlwiXSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5kYXR0ZS1tZi1tb2RhbC1sb2FkaW5nIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDMwMHB4O1xuICBwYWRkaW5nOiAycmVtO1xuICBjb2xvcjogIzg4ODg4ODtcbn1cbi5kYXR0ZS1tZi1tb2RhbC1sb2FkaW5nIHAge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBmb250LXNpemU6IDFyZW0gIWltcG9ydGFudDtcbn1cblxuLmRhdHRlLW1mLW1vZGFsLXNwaW5uZXIge1xuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiA0OHB4O1xuICBib3JkZXI6IDNweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJvcmRlci10b3AtY29sb3I6IHJnYmEoNzYsIDE3NSwgODAsIDAuOCk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYW5pbWF0aW9uOiBkYXR0ZS1tZi1tb2RhbC1zcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBkYXR0ZS1tZi1tb2RhbC1zcGluIHtcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cbi5kYXR0ZS1tZi1tb2RhbC10cmlnZ2VyIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRGVza3RvcCBtb2RhbCDigJQgZmlsbCB0aGUgbW9kYWwgaGVpZ2h0OyBwcmV2aWV3IGFzIGEgcmlnaHQgc2lkZWJhci5cbiAqIFRoZSBzdGFuZGFsb25lIGZpbmRlciBjYXBzIGVhY2ggZGV2aWNlIGNvbHVtbiBhbmQgc3RhY2tzIHRoZSBwcmV2aWV3IGJlbG93O1xuICogaW4gdGhlIHRhbGwgY2F0YWxvZyBtb2RhbCB3ZSBsZXQgdGhlIGZpbmRlciBmaWxsIHRoZSBib2R5IGFuZCAob24gYSB3aWRlXG4gKiBmaW5kZXIpIG1vdmUgdGhlIHByZXZpZXcgaW50byBhIHJpZ2h0IHNpZGViYXIuIE1vYmlsZSBrZWVwcyB0aGUgc3RhY2tlZCBzaGVldC5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1vZGVsLWZpbmRlci1wYWdlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gIH1cbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtaGVhZGVyIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgfVxuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSAuZGF0dGUtbWYtcGFnZS1jb250YWluZXIge1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gIH1cbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtY29sdW1ucyB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIH1cbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtY29sdW1uIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWluLWhlaWdodDogMDtcbiAgfVxufVxuQGNvbnRhaW5lciBtb2RlbC1maW5kZXIgKG1pbi13aWR0aDogODU2cHgpIHtcbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtY29udGFpbmVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIGdhcDogdmFyKC0tbWYtc3BhY2luZy1sZyk7XG4gIH1cbiAgLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkgLmRhdHRlLW1mLXBhZ2UtY29sdW1ucyB7XG4gICAgbWluLXdpZHRoOiAwO1xuICB9XG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IC5kYXR0ZS1tZi1wYWdlLXByZXZpZXcge1xuICAgIGZsZXg6IDAgMCB2YXIoLS1tZi1wcmV2aWV3LXdpZHRoKTtcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gIH1cbn1cbi8qXG4ubXktY29tcG9uZW50IHtcbiAgcGFkZGluZzogMXJlbTtcblxuICAvLyBNb2JpbGUtZmlyc3QgcmVzcG9uc2l2ZSBkZXNpZ25cbiAgQGluY2x1ZGUgbWVkaWEtbWQge1xuICAgIHBhZGRpbmc6IDJyZW07XG4gIH1cblxuICBAaW5jbHVkZSBtZWRpYS1sZyB7XG4gICAgcGFkZGluZzogM3JlbTtcbiAgfVxuXG4gIC8vIERlc2t0b3AtZmlyc3QgKHVzZSBzcGFyaW5nbHkpXG4gIEBpbmNsdWRlIG1lZGlhLWRvd24tbWQge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxuXG4gIC8vIEJldHdlZW4gc3BlY2lmaWMgYnJlYWtwb2ludHNcbiAgQGluY2x1ZGUgbWVkaWEtYmV0d2VlbigkYnJlYWtwb2ludC1tZCwgJGJyZWFrcG9pbnQtbGcpIHtcbiAgICBiYWNrZ3JvdW5kOiBibHVlO1xuICB9XG5cbiAgLy8gUmVkdWNlZCBtb3Rpb24gZm9yIGFjY2Vzc2liaWxpdHlcbiAgQGluY2x1ZGUgcmVkdWNlZC1tb3Rpb24ge1xuICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuKi9cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHB1bHNlIHtcbiAgMCUsIDEwMCUge1xuICAgIG9wYWNpdHk6IDAuNjtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtdXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2NhbGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuLypcbi5idXR0b24ge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJhY2tncm91bmQtY29sb3IpOyAgLy8gU2luZ2xlIHByb3BlcnR5XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTtcbiAgfVxufVxuXG4uY2FyZCB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb25zKCR0cmFuc2l0aW9uLXNoYWRvdywgJHRyYW5zaXRpb24tdHJhbnNmb3JtKTsgIC8vIE11bHRpcGxlIHByb3BlcnRpZXNcblxuICAmOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWxnO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgfVxufVxuXG4uc3Bpbm5lciB7XG4gIGFuaW1hdGlvbjogJGFuaW1hdGlvbi1zcGluO1xufVxuXG4vLyBSZXNwZWN0IHJlZHVjZWQgbW90aW9uXG4qIHtcbiAgQGluY2x1ZGUgcmVzcGVjdC1yZWR1Y2VkLW1vdGlvbjtcbn1cbiovXG4vKlxuWi1JbmRleCBMYXllcmluZyBTdHJhdGVneTpcblxuMS05OiAgICAgICAgICBCYXNlIGNvbnRlbnQsIHN1YnRsZSBsYXllcmluZ1xuMTAtOTk6ICAgICAgICBBYm92ZSBjb250ZW50IChwcmV2aWV3cywgaGlnaGxpZ2h0cylcbjEwMC05OTk6ICAgICAgRHJvcGRvd25zLCBtZW51cywgbmF2aWdhdGlvblxuMTAwMC0xOTk5OiAgICBGaXhlZC9zdGlja3kgZWxlbWVudHMsIG1vZGFsc1xuMjAwMCs6ICAgICAgICBOb3RpZmljYXRpb25zLCBhbGVydHMsIGNyaXRpY2FsIFVJXG5cbkV4YW1wbGU6XG4ubXktZHJvcGRvd24ge1xuICB6LWluZGV4OiAkei1pbmRleC1kcm9wZG93bjsgIC8vIDEwMFxufVxuXG4ubXktbW9kYWwge1xuICB6LWluZGV4OiAkei1pbmRleC1tb2RhbDsgICAgIC8vIDEwNTBcbn1cblxuLm15LXRvb2x0aXAge1xuICB6LWluZGV4OiAkei1pbmRleC10b29sdGlwOyAgIC8vIDEwNzAgKGFsd2F5cyBhYm92ZSBtb2RhbHMpXG59XG4qL1xuQGtleWZyYW1lcyBzcGluIHtcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgcHVsc2Uge1xuICAwJSwgMTAwJSB7XG4gICAgb3BhY2l0eTogMC42O1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMC44O1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhZGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhZGUtb3V0IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuQGtleWZyYW1lcyBzbGlkZS1kb3duIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBzbGlkZS11cCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBzY2FsZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG4vKlxuLmJ1dHRvbiB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYmFja2dyb3VuZC1jb2xvcik7ICAvLyBTaW5nbGUgcHJvcGVydHlcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xuICB9XG59XG5cbi5jYXJkIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbnMoJHRyYW5zaXRpb24tc2hhZG93LCAkdHJhbnNpdGlvbi10cmFuc2Zvcm0pOyAgLy8gTXVsdGlwbGUgcHJvcGVydGllc1xuXG4gICY6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctbGc7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5zcGlubmVyIHtcbiAgYW5pbWF0aW9uOiAkYW5pbWF0aW9uLXNwaW47XG59XG5cbi8vIFJlc3BlY3QgcmVkdWNlZCBtb3Rpb25cbioge1xuICBAaW5jbHVkZSByZXNwZWN0LXJlZHVjZWQtbW90aW9uO1xufVxuKi9cbi8qKlxuICogUm9iby1idXR0b24gc3R5bGUgKGdyZWVuIGdyYWRpZW50IHdpdGggaG92ZXIgb3ZlcmxheSlcbiAqIFVzZSB0aGlzIGZvciBwcmltYXJ5IGFjdGlvbiBidXR0b25zIGFjcm9zcyB0aGUgc2l0ZVxuICogTm90ZTogIWltcG9ydGFudCBuZWVkZWQgdG8gb3ZlcnJpZGUgLmJ0bi5idG4tcHJpbWFyeSBpbiBhbGwuc2Nzc1xuICogVXNlcyBiYWNrZ3JvdW5kLWltYWdlIChub3QgYmFja2dyb3VuZCBzaG9ydGhhbmQpIHNvIGJhY2tncm91bmQtY29sb3Igd29ya3MgZm9yIGhvdmVyIGJsZW5kXG4gKi9cbi8qKlxuICogQXBwbHkgc2hhZG93IHdpdGggbGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSAkbGV2ZWwgLSBTaGFkb3cgbGV2ZWwgKHhzLCBzbSwgYmFzZSwgbWQsIGxnLCB4bCwgMnhsKVxuICovXG4vKipcbiAqIENhcmQgc2hhZG93IHdpdGggaG92ZXIgZWZmZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59ICRob3ZlciAtIEVuYWJsZSBob3ZlciBlZmZlY3QgKGRlZmF1bHQ6IHRydWUpXG4gKi9cbi8qKlxuICogUHJvZHVjdCBpdGVtIHNoYWRvd1xuICovXG4vKipcbiAqIEZvY3VzIHJpbmcgZm9yIGFjY2Vzc2liaWxpdHlcbiAqIEBwYXJhbSB7Y29sb3J9ICRjb2xvciAtIEZvY3VzIHJpbmcgY29sb3IgKGRlZmF1bHQ6IHByaW1hcnkpXG4gKi9cbi8qKlxuICogRm9jdXMgdmlzaWJsZSAob25seSBvbiBrZXlib2FyZCBmb2N1cylcbiAqL1xuLyoqXG4gKiBIaWRkZW4gKGRpc3BsYXk6IG5vbmUpXG4gKi9cbi8qKlxuICogVmlzdWFsbHkgaGlkZGVuIChmb3Igc2NyZWVuIHJlYWRlcnMpXG4gKi9cbi8qKlxuICogTm90IHZpc3VhbGx5IGhpZGRlbiAodW5kbyBzci1vbmx5KVxuICovXG4vKipcbiAqIERpc2FibGVkIHN0YXRlXG4gKi9cbi8qKlxuICogTG9hZGluZyBzdGF0ZVxuICovXG4vKipcbiAqIENlbnRlcmVkIHNwaW5uZXIgb24gYSBwb3NpdGlvbmVkIHBhcmVudCDigJQgd2l0aG91dCBhbnkgd2FzaCBvdmVybGF5LlxuICogVXNlcyA6OmFmdGVyIG9ubHk7IHBhcmVudCBtdXN0IGhhdmUgcG9zaXRpb246IHJlbGF0aXZlLlxuICogVXNlIHRoaXMgd2hlbiBlbGVtZW50IGNoaWxkcmVuIGFyZSBoaWRkZW4gdmlhIHZpc2liaWxpdHk6aGlkZGVuIHNvIG5vXG4gKiB3YXNoIGxheWVyIGlzIG5lZWRlZCB0byBtYXNrIHRoZW0uXG4gKlxuICogQHBhcmFtICRzcGlubmVyLWNvbG9yIFZpc2libGUgc3Bpbm5lciBhcmMgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci10cmFjayBGYWludCB0cmFjayByaW5nIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItc2l6ZSAgRGlhbWV0ZXIgb2YgdGhlIHNwaW5uZXJcbiAqIEBwYXJhbSAkei1pbmRleCAgICAgICBaLWluZGV4IG9mIHRoZSBzcGlubmVyXG4gKi9cbi8qKlxuICogTG9hZGluZyBvdmVybGF5OiBzZW1pLXRyYW5zcGFyZW50IHdhc2ggKyBjZW50ZXJlZCBzcGlubmVyIG92ZXIgYSBwb3NpdGlvbmVkIHBhcmVudC5cbiAqIFBhcmVudCBtdXN0IGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIChvciBhYnNvbHV0ZS9maXhlZCkuXG4gKiBVc2VzIDo6YmVmb3JlIGZvciB0aGUgd2FzaCBsYXllciBhbmQgOjphZnRlciBmb3IgdGhlIHNwaW5uZXIgKHZpYSBsb2FkaW5nLXNwaW5uZXItY2VudGVyZWQpLlxuICogRG8gbm90IGFwcGx5IHRvIGVsZW1lbnRzIHRoYXQgYWxyZWFkeSB1c2UgYm90aCBwc2V1ZG8tZWxlbWVudHMgZm9yIG90aGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtICRiZyAgICAgICAgICAgIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHdhc2ggbGF5ZXJcbiAqIEBwYXJhbSAkc3Bpbm5lci1jb2xvciBWaXNpYmxlIHNwaW5uZXIgYXJjIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItdHJhY2sgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXNpemUgIERpYW1ldGVyIG9mIHRoZSBzcGlubmVyXG4gKiBAcGFyYW0gJHotaW5kZXggICAgICAgWi1pbmRleCBmb3Igd2FzaCAoc3Bpbm5lciBnZXRzICsxKVxuICovXG4vKipcbiAqIElubGluZSBzcGlubmVyIGFwcGVuZGVkIGFmdGVyIGVsZW1lbnQgY29udGVudCDigJQgZm9yIG5hdmlnYXRpb24gYnV0dG9ucyBhbmQgbGlua3MuXG4gKiBVc2VzIDo6YWZ0ZXI7IGluY29tcGF0aWJsZSB3aXRoIGVsZW1lbnRzIHRoYXQgYWxyZWFkeSB1c2UgOjphZnRlciBmb3Igb3RoZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gJHNpemUgICAgICAgIFNwaW5uZXIgZGlhbWV0ZXJcbiAqIEBwYXJhbSAkY29sb3IgICAgICAgVmlzaWJsZSBzcGlubmVyIGFyYyBjb2xvclxuICogQHBhcmFtICR0cmFjay1jb2xvciBGYWludCB0cmFjayByaW5nIGNvbG9yXG4gKiBAcGFyYW0gJGR1cmF0aW9uICAgIE9uZS1yb3RhdGlvbiBkdXJhdGlvblxuICovXG4vKipcbiAqIFRydW5jYXRlIHRleHQgd2l0aCBlbGxpcHNpc1xuICovXG4vKipcbiAqIExpbmUgY2xhbXAgKG11bHRpLWxpbmUgdHJ1bmNhdGlvbilcbiAqIEBwYXJhbSB7bnVtYmVyfSAkbGluZXMgLSBOdW1iZXIgb2YgbGluZXMgdG8gc2hvd1xuICovXG4vKipcbiAqIEN1c3RvbSBzY3JvbGxiYXIgc3R5bGluZ1xuICogQHBhcmFtIHtjb2xvcn0gJHRodW1iIC0gU2Nyb2xsYmFyIHRodW1iIGNvbG9yXG4gKiBAcGFyYW0ge2NvbG9yfSAkdHJhY2sgLSBTY3JvbGxiYXIgdHJhY2sgY29sb3JcbiAqL1xuLyoqXG4gKiBBYnNvbHV0ZSBjZW50ZXJcbiAqL1xuLyoqXG4gKiBBYnNvbHV0ZSBjb3ZlciAoc3RyZXRjaCB0byBmaWxsIHBhcmVudClcbiAqL1xuLyoqXG4gKiBGaXhlZCBjb3ZlciAoc3RyZXRjaCB0byBmaWxsIHZpZXdwb3J0KVxuICovXG4vKipcbiAqIEZsZXggY2VudGVyIChib3RoIGF4ZXMpXG4gKi9cbi8qKlxuICogRmxleCBiZXR3ZWVuIChzcGFjZS1iZXR3ZWVuKVxuICovXG4vKipcbiAqIEZsZXggY29sdW1uXG4gKi9cbi8qKlxuICogR3JpZCB3aXRoIGF1dG8tZml0IGNvbHVtbnNcbiAqIEBwYXJhbSB7c2l6ZX0gJG1pbiAtIE1pbmltdW0gY29sdW1uIHdpZHRoXG4gKiBAcGFyYW0ge3NpemV9ICRtYXggLSBNYXhpbXVtIGNvbHVtbiB3aWR0aCAoZGVmYXVsdDogMWZyKVxuICogQHBhcmFtIHtzaXplfSAkZ2FwIC0gR2FwIGJldHdlZW4gY29sdW1ucyAoZGVmYXVsdDogJHNwYWNpbmctNClcbiAqL1xuLyoqXG4gKiBHcmlkIHdpdGggYXV0by1maWxsIGNvbHVtbnNcbiAqIEBwYXJhbSB7c2l6ZX0gJG1pbiAtIE1pbmltdW0gY29sdW1uIHdpZHRoXG4gKiBAcGFyYW0ge3NpemV9ICRtYXggLSBNYXhpbXVtIGNvbHVtbiB3aWR0aCAoZGVmYXVsdDogMWZyKVxuICogQHBhcmFtIHtzaXplfSAkZ2FwIC0gR2FwIGJldHdlZW4gY29sdW1ucyAoZGVmYXVsdDogJHNwYWNpbmctNClcbiAqL1xuLyoqXG4gKiBPYmplY3QgZml0IGNvdmVyXG4gKi9cbi8qKlxuICogT2JqZWN0IGZpdCBjb250YWluXG4gKi9cbi8qKlxuICogQXNwZWN0IHJhdGlvIGJveFxuICogQHBhcmFtIHtudW1iZXJ9ICR3aWR0aCAtIFdpZHRoIHJhdGlvXG4gKiBAcGFyYW0ge251bWJlcn0gJGhlaWdodCAtIEhlaWdodCByYXRpb1xuICovXG4vKipcbiAqIENsZWFyZml4IGZvciBmbG9hdHNcbiAqL1xuLyoqXG4gKiBIaWRlIGluIHByaW50XG4gKi9cbi8qKlxuICogU2hvdyBvbmx5IGluIHByaW50XG4gKi9cbi8qXG4ubXktY2FyZCB7XG4gIEBpbmNsdWRlIGNhcmQtc2hhZG93OyAgICAgICAgICAgICAvLyBDYXJkIHdpdGggaG92ZXIgc2hhZG93XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24odHJhbnNmb3JtKTtcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1tZDtcblxuICAmOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIH1cbn1cblxuLm15LWlucHV0IHtcbiAgQGluY2x1ZGUgZm9jdXMtdmlzaWJsZTsgICAgICAgICAgICAvLyBBY2Nlc3NpYmxlIGZvY3VzIHJpbmdcblxuICAmOmRpc2FibGVkIHtcbiAgICBAaW5jbHVkZSBkaXNhYmxlZDsgICAgICAgICAgICAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICB9XG59XG5cbi50cnVuY2F0ZWQtdGV4dCB7XG4gIEBpbmNsdWRlIGxpbmUtY2xhbXAoMyk7ICAgICAgICAgICAgLy8gU2hvdyAzIGxpbmVzIG1heFxufVxuXG4ucHJvZHVjdC1ncmlkIHtcbiAgQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweCk7ICAgICAvLyBSZXNwb25zaXZlIGdyaWRcbn1cblxuLmNlbnRlcmVkLW1vZGFsIHtcbiAgQGluY2x1ZGUgYWJzb2x1dGUtY2VudGVyOyAgICAgICAgICAvLyBDZW50ZXIgaW4gdmlld3BvcnRcbn1cbiovXG4vKlxuQWZ0ZXIgaW1wb3J0aW5nIHRoaXMgZmlsZSwgeW91IGhhdmUgYWNjZXNzIHRvOlxuXG5DT0xPUlM6XG4tIFByaW1hcnkgY29sb3JzOiAkY29sb3ItcHJpbWFyeSwgJGNvbG9yLXByaW1hcnktbGlnaHQsICRjb2xvci1wcmltYXJ5LWRhcmtcbi0gR3JheXM6ICRjb2xvci1ncmF5LTUwIHRocm91Z2ggJGNvbG9yLWdyYXktOTAwXG4tIFNlbWFudGljOiAkY29sb3Itc3VjY2VzcywgJGNvbG9yLWRhbmdlciwgJGNvbG9yLXdhcm5pbmcsICRjb2xvci1pbmZvXG4tIEJhY2tncm91bmRzOiAkYmctcGFnZSwgJGJnLWxpZ2h0LCAkYmctZGFyaywgZXRjLlxuLSBUZXh0OiAkdGV4dC1wcmltYXJ5LCAkdGV4dC1zZWNvbmRhcnksICR0ZXh0LW11dGVkLCBldGMuXG4tIEJvcmRlcnM6ICRib3JkZXItZGVmYXVsdCwgJGJvcmRlci1saWdodCwgJGJvcmRlci1zdHJvbmdcbi0gR3JhZGllbnRzOiAkZ3JhZGllbnQtcHJpbWFyeSwgJGdyYWRpZW50LXByaW1hcnktYnV0dG9uLCBldGMuXG5cblRZUE9HUkFQSFk6XG4tIEZvbnQgZmFtaWxpZXM6ICRmb250LWZhbWlseS1iYXNlLCAkZm9udC1mYW1pbHktaGVhZGluZ1xuLSBGb250IHNpemVzOiAkZm9udC1zaXplLXhzIHRocm91Z2ggJGZvbnQtc2l6ZS02eGxcbi0gSGVhZGluZyBzaXplczogJGgxLXNpemUsICRoMi1zaXplLCBldGMuXG4tIEZvbnQgd2VpZ2h0czogJGZvbnQtd2VpZ2h0LWxpZ2h0IHRocm91Z2ggJGZvbnQtd2VpZ2h0LWJsYWNrXG4tIExpbmUgaGVpZ2h0czogJGxpbmUtaGVpZ2h0LXRpZ2h0LCAkbGluZS1oZWlnaHQtbm9ybWFsLCBldGMuXG5cblNQQUNJTkc6XG4tIFNjYWxlOiAkc3BhY2luZy0wIHRocm91Z2ggJHNwYWNpbmctMzJcbi0gU2VtYW50aWM6ICRzcGFjaW5nLXhzLCAkc3BhY2luZy1zbSwgJHNwYWNpbmctbWQsICRzcGFjaW5nLWxnLCAkc3BhY2luZy14bFxuLSBDb21wb25lbnQtc3BlY2lmaWM6ICRpbnB1dC1wYWRkaW5nLXksICRidXR0b24tcGFkZGluZy14LCAkY2FyZC1wYWRkaW5nLCBldGMuXG5cblNIQURPV1M6XG4tIFNjYWxlOiAkc2hhZG93LXhzIHRocm91Z2ggJHNoYWRvdy0yeGxcbi0gU2VtYW50aWM6ICRzaGFkb3ctY2FyZCwgJHNoYWRvdy1kcm9wZG93biwgJHNoYWRvdy1tb2RhbCwgZXRjLlxuLSBNZXRob2RzOiBAaW5jbHVkZSBzaGFkb3coJ2xnJyk7XG5cbkJPUkRFUlM6XG4tIFJhZGl1czogJHJhZGl1cy1ub25lIHRocm91Z2ggJHJhZGl1cy1mdWxsXG4tIFdpZHRoczogJGJvcmRlci13aWR0aC0xIHRocm91Z2ggJGJvcmRlci13aWR0aC01XG4tIFN0eWxlczogJGJvcmRlci1kZWZhdWx0LXN0eWxlLCAkYm9yZGVyLWZvY3VzLXN0eWxlLCBldGMuXG5cbk1FRElBIFFVRVJJRVM6XG4tIEJyZWFrcG9pbnRzOiAkYnJlYWtwb2ludC1zbSwgJGJyZWFrcG9pbnQtbWQsICRicmVha3BvaW50LWxnLCBldGMuXG4tIE1peGluczogQGluY2x1ZGUgbWVkaWEtbWQgeyAuLi4gfSwgQGluY2x1ZGUgbWVkaWEtbGcgeyAuLi4gfVxuXG5UUkFOU0lUSU9OUzpcbi0gRHVyYXRpb25zOiAkZHVyYXRpb24tZmFzdCwgJGR1cmF0aW9uLWJhc2UsICRkdXJhdGlvbi1zbG93XG4tIEVhc2luZ3M6ICRlYXNlLWluLCAkZWFzZS1vdXQsICRlYXNlLWluLW91dFxuLSBDb21wbGV0ZSB0cmFuc2l0aW9uczogJHRyYW5zaXRpb24tYnV0dG9uLCAkdHJhbnNpdGlvbi1jYXJkLCBldGMuXG4tIEFuaW1hdGlvbnM6ICRhbmltYXRpb24tc3BpbiwgJGFuaW1hdGlvbi1wdWxzZSwgZXRjLlxuXG5aLUlOREVYOlxuLSBTY2FsZTogJHotaW5kZXgtYmFzZSB0aHJvdWdoICR6LWluZGV4LW1heFxuLSBTZW1hbnRpYzogJHotaW5kZXgtZHJvcGRvd24sICR6LWluZGV4LW1vZGFsLCAkei1pbmRleC10b29sdGlwLCBldGMuXG5cbk1JWElOUzpcbi0gU2hhZG93czogQGluY2x1ZGUgY2FyZC1zaGFkb3csIEBpbmNsdWRlIHByb2R1Y3Qtc2hhZG93XG4tIEZvY3VzOiBAaW5jbHVkZSBmb2N1cy1yaW5nLCBAaW5jbHVkZSBmb2N1cy12aXNpYmxlXG4tIFZpc2liaWxpdHk6IEBpbmNsdWRlIHNyLW9ubHksIEBpbmNsdWRlIGhpZGRlblxuLSBTdGF0ZXM6IEBpbmNsdWRlIGRpc2FibGVkLCBAaW5jbHVkZSBsb2FkaW5nXG4tIFRleHQ6IEBpbmNsdWRlIHRydW5jYXRlLCBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpXG4tIExheW91dDogQGluY2x1ZGUgZmxleC1jZW50ZXIsIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlclxuLSBHcmlkOiBAaW5jbHVkZSBncmlkLWF1dG8tZml0KDI1MHB4KVxuLSBBbmQgbWFueSBtb3JlLi4uXG4qL1xuLypcbkNvbW1vbiBwYXR0ZXJuczpcblxuLy8gQ2FyZCB3aXRoIHNoYWRvd1xuLmNhcmQge1xuICBwYWRkaW5nOiAkc3BhY2luZy00O1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLW1kO1xuICBAaW5jbHVkZSBjYXJkLXNoYWRvdztcbn1cblxuLy8gUmVzcG9uc2l2ZSB0ZXh0XG4uaGVhZGluZyB7XG4gIGZvbnQtc2l6ZTogJGgyLXNpemUtbW9iaWxlO1xuXG4gIEBpbmNsdWRlIG1lZGlhLW1kIHtcbiAgICBmb250LXNpemU6ICRoMi1zaXplLWRlc2t0b3A7XG4gIH1cbn1cblxuLy8gQnV0dG9uXG4uYnV0dG9uIHtcbiAgcGFkZGluZzogJGJ1dHRvbi1wYWRkaW5nLXkgJGJ1dHRvbi1wYWRkaW5nLXg7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtYnV0dG9uO1xuICBiYWNrZ3JvdW5kOiAkZ3JhZGllbnQtcHJpbWFyeS1idXR0b247XG4gIGNvbG9yOiAkdGV4dC1pbnZlcnNlO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJhY2tncm91bmQtY29sb3IsICRkdXJhdGlvbi1ob3Zlcik7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXByaW1hcnktZGFyaztcbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgZm9jdXMtcmluZztcbiAgfVxufVxuXG4vLyBHcmlkIGxheW91dFxuLnByb2R1Y3QtZ3JpZCB7XG4gIEBpbmNsdWRlIGdyaWQtYXV0by1maXQoMjUwcHgsIDFmciwgJHNwYWNpbmctNCk7XG59XG5cbi8vIFRydW5jYXRlZCB0ZXh0XG4uZGVzY3JpcHRpb24ge1xuICBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpOyAgLy8gU2hvdyAzIGxpbmVzIG1heFxufVxuKi9cbi5kYXR0ZS1tb2RhbC5kYXR0ZS1jb25maWctbW9kYWwgLm1vZGFsLWNvbnRlbnQge1xuICBib3JkZXI6IG5vbmU7XG59XG5cbi8qXG4ubXktY29tcG9uZW50IHtcbiAgcGFkZGluZzogMXJlbTtcblxuICAvLyBNb2JpbGUtZmlyc3QgcmVzcG9uc2l2ZSBkZXNpZ25cbiAgQGluY2x1ZGUgbWVkaWEtbWQge1xuICAgIHBhZGRpbmc6IDJyZW07XG4gIH1cblxuICBAaW5jbHVkZSBtZWRpYS1sZyB7XG4gICAgcGFkZGluZzogM3JlbTtcbiAgfVxuXG4gIC8vIERlc2t0b3AtZmlyc3QgKHVzZSBzcGFyaW5nbHkpXG4gIEBpbmNsdWRlIG1lZGlhLWRvd24tbWQge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxuXG4gIC8vIEJldHdlZW4gc3BlY2lmaWMgYnJlYWtwb2ludHNcbiAgQGluY2x1ZGUgbWVkaWEtYmV0d2VlbigkYnJlYWtwb2ludC1tZCwgJGJyZWFrcG9pbnQtbGcpIHtcbiAgICBiYWNrZ3JvdW5kOiBibHVlO1xuICB9XG5cbiAgLy8gUmVkdWNlZCBtb3Rpb24gZm9yIGFjY2Vzc2liaWxpdHlcbiAgQGluY2x1ZGUgcmVkdWNlZC1tb3Rpb24ge1xuICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuKi9cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHB1bHNlIHtcbiAgMCUsIDEwMCUge1xuICAgIG9wYWNpdHk6IDAuNjtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2xpZGUtdXAge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2NhbGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuLypcbi5idXR0b24ge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJhY2tncm91bmQtY29sb3IpOyAgLy8gU2luZ2xlIHByb3BlcnR5XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTtcbiAgfVxufVxuXG4uY2FyZCB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb25zKCR0cmFuc2l0aW9uLXNoYWRvdywgJHRyYW5zaXRpb24tdHJhbnNmb3JtKTsgIC8vIE11bHRpcGxlIHByb3BlcnRpZXNcblxuICAmOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWxnO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgfVxufVxuXG4uc3Bpbm5lciB7XG4gIGFuaW1hdGlvbjogJGFuaW1hdGlvbi1zcGluO1xufVxuXG4vLyBSZXNwZWN0IHJlZHVjZWQgbW90aW9uXG4qIHtcbiAgQGluY2x1ZGUgcmVzcGVjdC1yZWR1Y2VkLW1vdGlvbjtcbn1cbiovXG4vKlxuWi1JbmRleCBMYXllcmluZyBTdHJhdGVneTpcblxuMS05OiAgICAgICAgICBCYXNlIGNvbnRlbnQsIHN1YnRsZSBsYXllcmluZ1xuMTAtOTk6ICAgICAgICBBYm92ZSBjb250ZW50IChwcmV2aWV3cywgaGlnaGxpZ2h0cylcbjEwMC05OTk6ICAgICAgRHJvcGRvd25zLCBtZW51cywgbmF2aWdhdGlvblxuMTAwMC0xOTk5OiAgICBGaXhlZC9zdGlja3kgZWxlbWVudHMsIG1vZGFsc1xuMjAwMCs6ICAgICAgICBOb3RpZmljYXRpb25zLCBhbGVydHMsIGNyaXRpY2FsIFVJXG5cbkV4YW1wbGU6XG4ubXktZHJvcGRvd24ge1xuICB6LWluZGV4OiAkei1pbmRleC1kcm9wZG93bjsgIC8vIDEwMFxufVxuXG4ubXktbW9kYWwge1xuICB6LWluZGV4OiAkei1pbmRleC1tb2RhbDsgICAgIC8vIDEwNTBcbn1cblxuLm15LXRvb2x0aXAge1xuICB6LWluZGV4OiAkei1pbmRleC10b29sdGlwOyAgIC8vIDEwNzAgKGFsd2F5cyBhYm92ZSBtb2RhbHMpXG59XG4qL1xuQGtleWZyYW1lcyBzcGluIHtcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgcHVsc2Uge1xuICAwJSwgMTAwJSB7XG4gICAgb3BhY2l0eTogMC42O1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMC44O1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhZGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhZGUtb3V0IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuQGtleWZyYW1lcyBzbGlkZS1kb3duIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBzbGlkZS11cCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBzY2FsZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG4vKlxuLmJ1dHRvbiB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYmFja2dyb3VuZC1jb2xvcik7ICAvLyBTaW5nbGUgcHJvcGVydHlcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xuICB9XG59XG5cbi5jYXJkIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbnMoJHRyYW5zaXRpb24tc2hhZG93LCAkdHJhbnNpdGlvbi10cmFuc2Zvcm0pOyAgLy8gTXVsdGlwbGUgcHJvcGVydGllc1xuXG4gICY6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctbGc7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5zcGlubmVyIHtcbiAgYW5pbWF0aW9uOiAkYW5pbWF0aW9uLXNwaW47XG59XG5cbi8vIFJlc3BlY3QgcmVkdWNlZCBtb3Rpb25cbioge1xuICBAaW5jbHVkZSByZXNwZWN0LXJlZHVjZWQtbW90aW9uO1xufVxuKi9cbi8qKlxuICogUm9iby1idXR0b24gc3R5bGUgKGdyZWVuIGdyYWRpZW50IHdpdGggaG92ZXIgb3ZlcmxheSlcbiAqIFVzZSB0aGlzIGZvciBwcmltYXJ5IGFjdGlvbiBidXR0b25zIGFjcm9zcyB0aGUgc2l0ZVxuICogTm90ZTogIWltcG9ydGFudCBuZWVkZWQgdG8gb3ZlcnJpZGUgLmJ0bi5idG4tcHJpbWFyeSBpbiBhbGwuc2Nzc1xuICogVXNlcyBiYWNrZ3JvdW5kLWltYWdlIChub3QgYmFja2dyb3VuZCBzaG9ydGhhbmQpIHNvIGJhY2tncm91bmQtY29sb3Igd29ya3MgZm9yIGhvdmVyIGJsZW5kXG4gKi9cbi8qKlxuICogQXBwbHkgc2hhZG93IHdpdGggbGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSAkbGV2ZWwgLSBTaGFkb3cgbGV2ZWwgKHhzLCBzbSwgYmFzZSwgbWQsIGxnLCB4bCwgMnhsKVxuICovXG4vKipcbiAqIENhcmQgc2hhZG93IHdpdGggaG92ZXIgZWZmZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59ICRob3ZlciAtIEVuYWJsZSBob3ZlciBlZmZlY3QgKGRlZmF1bHQ6IHRydWUpXG4gKi9cbi8qKlxuICogUHJvZHVjdCBpdGVtIHNoYWRvd1xuICovXG4vKipcbiAqIEZvY3VzIHJpbmcgZm9yIGFjY2Vzc2liaWxpdHlcbiAqIEBwYXJhbSB7Y29sb3J9ICRjb2xvciAtIEZvY3VzIHJpbmcgY29sb3IgKGRlZmF1bHQ6IHByaW1hcnkpXG4gKi9cbi8qKlxuICogRm9jdXMgdmlzaWJsZSAob25seSBvbiBrZXlib2FyZCBmb2N1cylcbiAqL1xuLyoqXG4gKiBIaWRkZW4gKGRpc3BsYXk6IG5vbmUpXG4gKi9cbi8qKlxuICogVmlzdWFsbHkgaGlkZGVuIChmb3Igc2NyZWVuIHJlYWRlcnMpXG4gKi9cbi8qKlxuICogTm90IHZpc3VhbGx5IGhpZGRlbiAodW5kbyBzci1vbmx5KVxuICovXG4vKipcbiAqIERpc2FibGVkIHN0YXRlXG4gKi9cbi8qKlxuICogTG9hZGluZyBzdGF0ZVxuICovXG4vKipcbiAqIENlbnRlcmVkIHNwaW5uZXIgb24gYSBwb3NpdGlvbmVkIHBhcmVudCDigJQgd2l0aG91dCBhbnkgd2FzaCBvdmVybGF5LlxuICogVXNlcyA6OmFmdGVyIG9ubHk7IHBhcmVudCBtdXN0IGhhdmUgcG9zaXRpb246IHJlbGF0aXZlLlxuICogVXNlIHRoaXMgd2hlbiBlbGVtZW50IGNoaWxkcmVuIGFyZSBoaWRkZW4gdmlhIHZpc2liaWxpdHk6aGlkZGVuIHNvIG5vXG4gKiB3YXNoIGxheWVyIGlzIG5lZWRlZCB0byBtYXNrIHRoZW0uXG4gKlxuICogQHBhcmFtICRzcGlubmVyLWNvbG9yIFZpc2libGUgc3Bpbm5lciBhcmMgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci10cmFjayBGYWludCB0cmFjayByaW5nIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItc2l6ZSAgRGlhbWV0ZXIgb2YgdGhlIHNwaW5uZXJcbiAqIEBwYXJhbSAkei1pbmRleCAgICAgICBaLWluZGV4IG9mIHRoZSBzcGlubmVyXG4gKi9cbi8qKlxuICogTG9hZGluZyBvdmVybGF5OiBzZW1pLXRyYW5zcGFyZW50IHdhc2ggKyBjZW50ZXJlZCBzcGlubmVyIG92ZXIgYSBwb3NpdGlvbmVkIHBhcmVudC5cbiAqIFBhcmVudCBtdXN0IGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIChvciBhYnNvbHV0ZS9maXhlZCkuXG4gKiBVc2VzIDo6YmVmb3JlIGZvciB0aGUgd2FzaCBsYXllciBhbmQgOjphZnRlciBmb3IgdGhlIHNwaW5uZXIgKHZpYSBsb2FkaW5nLXNwaW5uZXItY2VudGVyZWQpLlxuICogRG8gbm90IGFwcGx5IHRvIGVsZW1lbnRzIHRoYXQgYWxyZWFkeSB1c2UgYm90aCBwc2V1ZG8tZWxlbWVudHMgZm9yIG90aGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtICRiZyAgICAgICAgICAgIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHdhc2ggbGF5ZXJcbiAqIEBwYXJhbSAkc3Bpbm5lci1jb2xvciBWaXNpYmxlIHNwaW5uZXIgYXJjIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItdHJhY2sgRmFpbnQgdHJhY2sgcmluZyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXNpemUgIERpYW1ldGVyIG9mIHRoZSBzcGlubmVyXG4gKiBAcGFyYW0gJHotaW5kZXggICAgICAgWi1pbmRleCBmb3Igd2FzaCAoc3Bpbm5lciBnZXRzICsxKVxuICovXG4vKipcbiAqIElubGluZSBzcGlubmVyIGFwcGVuZGVkIGFmdGVyIGVsZW1lbnQgY29udGVudCDigJQgZm9yIG5hdmlnYXRpb24gYnV0dG9ucyBhbmQgbGlua3MuXG4gKiBVc2VzIDo6YWZ0ZXI7IGluY29tcGF0aWJsZSB3aXRoIGVsZW1lbnRzIHRoYXQgYWxyZWFkeSB1c2UgOjphZnRlciBmb3Igb3RoZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gJHNpemUgICAgICAgIFNwaW5uZXIgZGlhbWV0ZXJcbiAqIEBwYXJhbSAkY29sb3IgICAgICAgVmlzaWJsZSBzcGlubmVyIGFyYyBjb2xvclxuICogQHBhcmFtICR0cmFjay1jb2xvciBGYWludCB0cmFjayByaW5nIGNvbG9yXG4gKiBAcGFyYW0gJGR1cmF0aW9uICAgIE9uZS1yb3RhdGlvbiBkdXJhdGlvblxuICovXG4vKipcbiAqIFRydW5jYXRlIHRleHQgd2l0aCBlbGxpcHNpc1xuICovXG4vKipcbiAqIExpbmUgY2xhbXAgKG11bHRpLWxpbmUgdHJ1bmNhdGlvbilcbiAqIEBwYXJhbSB7bnVtYmVyfSAkbGluZXMgLSBOdW1iZXIgb2YgbGluZXMgdG8gc2hvd1xuICovXG4vKipcbiAqIEN1c3RvbSBzY3JvbGxiYXIgc3R5bGluZ1xuICogQHBhcmFtIHtjb2xvcn0gJHRodW1iIC0gU2Nyb2xsYmFyIHRodW1iIGNvbG9yXG4gKiBAcGFyYW0ge2NvbG9yfSAkdHJhY2sgLSBTY3JvbGxiYXIgdHJhY2sgY29sb3JcbiAqL1xuLyoqXG4gKiBBYnNvbHV0ZSBjZW50ZXJcbiAqL1xuLyoqXG4gKiBBYnNvbHV0ZSBjb3ZlciAoc3RyZXRjaCB0byBmaWxsIHBhcmVudClcbiAqL1xuLyoqXG4gKiBGaXhlZCBjb3ZlciAoc3RyZXRjaCB0byBmaWxsIHZpZXdwb3J0KVxuICovXG4vKipcbiAqIEZsZXggY2VudGVyIChib3RoIGF4ZXMpXG4gKi9cbi8qKlxuICogRmxleCBiZXR3ZWVuIChzcGFjZS1iZXR3ZWVuKVxuICovXG4vKipcbiAqIEZsZXggY29sdW1uXG4gKi9cbi8qKlxuICogR3JpZCB3aXRoIGF1dG8tZml0IGNvbHVtbnNcbiAqIEBwYXJhbSB7c2l6ZX0gJG1pbiAtIE1pbmltdW0gY29sdW1uIHdpZHRoXG4gKiBAcGFyYW0ge3NpemV9ICRtYXggLSBNYXhpbXVtIGNvbHVtbiB3aWR0aCAoZGVmYXVsdDogMWZyKVxuICogQHBhcmFtIHtzaXplfSAkZ2FwIC0gR2FwIGJldHdlZW4gY29sdW1ucyAoZGVmYXVsdDogJHNwYWNpbmctNClcbiAqL1xuLyoqXG4gKiBHcmlkIHdpdGggYXV0by1maWxsIGNvbHVtbnNcbiAqIEBwYXJhbSB7c2l6ZX0gJG1pbiAtIE1pbmltdW0gY29sdW1uIHdpZHRoXG4gKiBAcGFyYW0ge3NpemV9ICRtYXggLSBNYXhpbXVtIGNvbHVtbiB3aWR0aCAoZGVmYXVsdDogMWZyKVxuICogQHBhcmFtIHtzaXplfSAkZ2FwIC0gR2FwIGJldHdlZW4gY29sdW1ucyAoZGVmYXVsdDogJHNwYWNpbmctNClcbiAqL1xuLyoqXG4gKiBPYmplY3QgZml0IGNvdmVyXG4gKi9cbi8qKlxuICogT2JqZWN0IGZpdCBjb250YWluXG4gKi9cbi8qKlxuICogQXNwZWN0IHJhdGlvIGJveFxuICogQHBhcmFtIHtudW1iZXJ9ICR3aWR0aCAtIFdpZHRoIHJhdGlvXG4gKiBAcGFyYW0ge251bWJlcn0gJGhlaWdodCAtIEhlaWdodCByYXRpb1xuICovXG4vKipcbiAqIENsZWFyZml4IGZvciBmbG9hdHNcbiAqL1xuLyoqXG4gKiBIaWRlIGluIHByaW50XG4gKi9cbi8qKlxuICogU2hvdyBvbmx5IGluIHByaW50XG4gKi9cbi8qXG4ubXktY2FyZCB7XG4gIEBpbmNsdWRlIGNhcmQtc2hhZG93OyAgICAgICAgICAgICAvLyBDYXJkIHdpdGggaG92ZXIgc2hhZG93XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24odHJhbnNmb3JtKTtcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1tZDtcblxuICAmOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIH1cbn1cblxuLm15LWlucHV0IHtcbiAgQGluY2x1ZGUgZm9jdXMtdmlzaWJsZTsgICAgICAgICAgICAvLyBBY2Nlc3NpYmxlIGZvY3VzIHJpbmdcblxuICAmOmRpc2FibGVkIHtcbiAgICBAaW5jbHVkZSBkaXNhYmxlZDsgICAgICAgICAgICAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICB9XG59XG5cbi50cnVuY2F0ZWQtdGV4dCB7XG4gIEBpbmNsdWRlIGxpbmUtY2xhbXAoMyk7ICAgICAgICAgICAgLy8gU2hvdyAzIGxpbmVzIG1heFxufVxuXG4ucHJvZHVjdC1ncmlkIHtcbiAgQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweCk7ICAgICAvLyBSZXNwb25zaXZlIGdyaWRcbn1cblxuLmNlbnRlcmVkLW1vZGFsIHtcbiAgQGluY2x1ZGUgYWJzb2x1dGUtY2VudGVyOyAgICAgICAgICAvLyBDZW50ZXIgaW4gdmlld3BvcnRcbn1cbiovXG4vKlxuQWZ0ZXIgaW1wb3J0aW5nIHRoaXMgZmlsZSwgeW91IGhhdmUgYWNjZXNzIHRvOlxuXG5DT0xPUlM6XG4tIFByaW1hcnkgY29sb3JzOiAkY29sb3ItcHJpbWFyeSwgJGNvbG9yLXByaW1hcnktbGlnaHQsICRjb2xvci1wcmltYXJ5LWRhcmtcbi0gR3JheXM6ICRjb2xvci1ncmF5LTUwIHRocm91Z2ggJGNvbG9yLWdyYXktOTAwXG4tIFNlbWFudGljOiAkY29sb3Itc3VjY2VzcywgJGNvbG9yLWRhbmdlciwgJGNvbG9yLXdhcm5pbmcsICRjb2xvci1pbmZvXG4tIEJhY2tncm91bmRzOiAkYmctcGFnZSwgJGJnLWxpZ2h0LCAkYmctZGFyaywgZXRjLlxuLSBUZXh0OiAkdGV4dC1wcmltYXJ5LCAkdGV4dC1zZWNvbmRhcnksICR0ZXh0LW11dGVkLCBldGMuXG4tIEJvcmRlcnM6ICRib3JkZXItZGVmYXVsdCwgJGJvcmRlci1saWdodCwgJGJvcmRlci1zdHJvbmdcbi0gR3JhZGllbnRzOiAkZ3JhZGllbnQtcHJpbWFyeSwgJGdyYWRpZW50LXByaW1hcnktYnV0dG9uLCBldGMuXG5cblRZUE9HUkFQSFk6XG4tIEZvbnQgZmFtaWxpZXM6ICRmb250LWZhbWlseS1iYXNlLCAkZm9udC1mYW1pbHktaGVhZGluZ1xuLSBGb250IHNpemVzOiAkZm9udC1zaXplLXhzIHRocm91Z2ggJGZvbnQtc2l6ZS02eGxcbi0gSGVhZGluZyBzaXplczogJGgxLXNpemUsICRoMi1zaXplLCBldGMuXG4tIEZvbnQgd2VpZ2h0czogJGZvbnQtd2VpZ2h0LWxpZ2h0IHRocm91Z2ggJGZvbnQtd2VpZ2h0LWJsYWNrXG4tIExpbmUgaGVpZ2h0czogJGxpbmUtaGVpZ2h0LXRpZ2h0LCAkbGluZS1oZWlnaHQtbm9ybWFsLCBldGMuXG5cblNQQUNJTkc6XG4tIFNjYWxlOiAkc3BhY2luZy0wIHRocm91Z2ggJHNwYWNpbmctMzJcbi0gU2VtYW50aWM6ICRzcGFjaW5nLXhzLCAkc3BhY2luZy1zbSwgJHNwYWNpbmctbWQsICRzcGFjaW5nLWxnLCAkc3BhY2luZy14bFxuLSBDb21wb25lbnQtc3BlY2lmaWM6ICRpbnB1dC1wYWRkaW5nLXksICRidXR0b24tcGFkZGluZy14LCAkY2FyZC1wYWRkaW5nLCBldGMuXG5cblNIQURPV1M6XG4tIFNjYWxlOiAkc2hhZG93LXhzIHRocm91Z2ggJHNoYWRvdy0yeGxcbi0gU2VtYW50aWM6ICRzaGFkb3ctY2FyZCwgJHNoYWRvdy1kcm9wZG93biwgJHNoYWRvdy1tb2RhbCwgZXRjLlxuLSBNZXRob2RzOiBAaW5jbHVkZSBzaGFkb3coJ2xnJyk7XG5cbkJPUkRFUlM6XG4tIFJhZGl1czogJHJhZGl1cy1ub25lIHRocm91Z2ggJHJhZGl1cy1mdWxsXG4tIFdpZHRoczogJGJvcmRlci13aWR0aC0xIHRocm91Z2ggJGJvcmRlci13aWR0aC01XG4tIFN0eWxlczogJGJvcmRlci1kZWZhdWx0LXN0eWxlLCAkYm9yZGVyLWZvY3VzLXN0eWxlLCBldGMuXG5cbk1FRElBIFFVRVJJRVM6XG4tIEJyZWFrcG9pbnRzOiAkYnJlYWtwb2ludC1zbSwgJGJyZWFrcG9pbnQtbWQsICRicmVha3BvaW50LWxnLCBldGMuXG4tIE1peGluczogQGluY2x1ZGUgbWVkaWEtbWQgeyAuLi4gfSwgQGluY2x1ZGUgbWVkaWEtbGcgeyAuLi4gfVxuXG5UUkFOU0lUSU9OUzpcbi0gRHVyYXRpb25zOiAkZHVyYXRpb24tZmFzdCwgJGR1cmF0aW9uLWJhc2UsICRkdXJhdGlvbi1zbG93XG4tIEVhc2luZ3M6ICRlYXNlLWluLCAkZWFzZS1vdXQsICRlYXNlLWluLW91dFxuLSBDb21wbGV0ZSB0cmFuc2l0aW9uczogJHRyYW5zaXRpb24tYnV0dG9uLCAkdHJhbnNpdGlvbi1jYXJkLCBldGMuXG4tIEFuaW1hdGlvbnM6ICRhbmltYXRpb24tc3BpbiwgJGFuaW1hdGlvbi1wdWxzZSwgZXRjLlxuXG5aLUlOREVYOlxuLSBTY2FsZTogJHotaW5kZXgtYmFzZSB0aHJvdWdoICR6LWluZGV4LW1heFxuLSBTZW1hbnRpYzogJHotaW5kZXgtZHJvcGRvd24sICR6LWluZGV4LW1vZGFsLCAkei1pbmRleC10b29sdGlwLCBldGMuXG5cbk1JWElOUzpcbi0gU2hhZG93czogQGluY2x1ZGUgY2FyZC1zaGFkb3csIEBpbmNsdWRlIHByb2R1Y3Qtc2hhZG93XG4tIEZvY3VzOiBAaW5jbHVkZSBmb2N1cy1yaW5nLCBAaW5jbHVkZSBmb2N1cy12aXNpYmxlXG4tIFZpc2liaWxpdHk6IEBpbmNsdWRlIHNyLW9ubHksIEBpbmNsdWRlIGhpZGRlblxuLSBTdGF0ZXM6IEBpbmNsdWRlIGRpc2FibGVkLCBAaW5jbHVkZSBsb2FkaW5nXG4tIFRleHQ6IEBpbmNsdWRlIHRydW5jYXRlLCBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpXG4tIExheW91dDogQGluY2x1ZGUgZmxleC1jZW50ZXIsIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlclxuLSBHcmlkOiBAaW5jbHVkZSBncmlkLWF1dG8tZml0KDI1MHB4KVxuLSBBbmQgbWFueSBtb3JlLi4uXG4qL1xuLypcbkNvbW1vbiBwYXR0ZXJuczpcblxuLy8gQ2FyZCB3aXRoIHNoYWRvd1xuLmNhcmQge1xuICBwYWRkaW5nOiAkc3BhY2luZy00O1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLW1kO1xuICBAaW5jbHVkZSBjYXJkLXNoYWRvdztcbn1cblxuLy8gUmVzcG9uc2l2ZSB0ZXh0XG4uaGVhZGluZyB7XG4gIGZvbnQtc2l6ZTogJGgyLXNpemUtbW9iaWxlO1xuXG4gIEBpbmNsdWRlIG1lZGlhLW1kIHtcbiAgICBmb250LXNpemU6ICRoMi1zaXplLWRlc2t0b3A7XG4gIH1cbn1cblxuLy8gQnV0dG9uXG4uYnV0dG9uIHtcbiAgcGFkZGluZzogJGJ1dHRvbi1wYWRkaW5nLXkgJGJ1dHRvbi1wYWRkaW5nLXg7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtYnV0dG9uO1xuICBiYWNrZ3JvdW5kOiAkZ3JhZGllbnQtcHJpbWFyeS1idXR0b247XG4gIGNvbG9yOiAkdGV4dC1pbnZlcnNlO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJhY2tncm91bmQtY29sb3IsICRkdXJhdGlvbi1ob3Zlcik7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXByaW1hcnktZGFyaztcbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgZm9jdXMtcmluZztcbiAgfVxufVxuXG4vLyBHcmlkIGxheW91dFxuLnByb2R1Y3QtZ3JpZCB7XG4gIEBpbmNsdWRlIGdyaWQtYXV0by1maXQoMjUwcHgsIDFmciwgJHNwYWNpbmctNCk7XG59XG5cbi8vIFRydW5jYXRlZCB0ZXh0XG4uZGVzY3JpcHRpb24ge1xuICBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpOyAgLy8gU2hvdyAzIGxpbmVzIG1heFxufVxuKi9cbi5kYXR0ZS1tb2RhbC5kYXR0ZS1lcnNhdHprb250YWt0IGJ1dHRvblt0eXBlPXN1Ym1pdF0ucHVsbC1yaWdodCB7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59XG4uZGF0dGUtbW9kYWwuZGF0dGUtZXJzYXR6a29udGFrdCAubW9kYWwtYm9keTpoYXMoI2ttLWVyc2F0enRlaWxlLXByb2dyYW1tLWFydGlrZWwpIHtcbiAgbWF4LWhlaWdodDogODB2aDtcbn1cblxuLypcbi5teS1jb21wb25lbnQge1xuICBwYWRkaW5nOiAxcmVtO1xuXG4gIC8vIE1vYmlsZS1maXJzdCByZXNwb25zaXZlIGRlc2lnblxuICBAaW5jbHVkZSBtZWRpYS1tZCB7XG4gICAgcGFkZGluZzogMnJlbTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1lZGlhLWxnIHtcbiAgICBwYWRkaW5nOiAzcmVtO1xuICB9XG5cbiAgLy8gRGVza3RvcC1maXJzdCAodXNlIHNwYXJpbmdseSlcbiAgQGluY2x1ZGUgbWVkaWEtZG93bi1tZCB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG5cbiAgLy8gQmV0d2VlbiBzcGVjaWZpYyBicmVha3BvaW50c1xuICBAaW5jbHVkZSBtZWRpYS1iZXR3ZWVuKCRicmVha3BvaW50LW1kLCAkYnJlYWtwb2ludC1sZykge1xuICAgIGJhY2tncm91bmQ6IGJsdWU7XG4gIH1cblxuICAvLyBSZWR1Y2VkIG1vdGlvbiBmb3IgYWNjZXNzaWJpbGl0eVxuICBAaW5jbHVkZSByZWR1Y2VkLW1vdGlvbiB7XG4gICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4qL1xuQGtleWZyYW1lcyBzcGluIHtcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgcHVsc2Uge1xuICAwJSwgMTAwJSB7XG4gICAgb3BhY2l0eTogMC42O1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMC44O1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhZGUtaW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhZGUtb3V0IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuQGtleWZyYW1lcyBzbGlkZS1kb3duIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBzbGlkZS11cCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBzY2FsZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG4vKlxuLmJ1dHRvbiB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYmFja2dyb3VuZC1jb2xvcik7ICAvLyBTaW5nbGUgcHJvcGVydHlcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xuICB9XG59XG5cbi5jYXJkIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbnMoJHRyYW5zaXRpb24tc2hhZG93LCAkdHJhbnNpdGlvbi10cmFuc2Zvcm0pOyAgLy8gTXVsdGlwbGUgcHJvcGVydGllc1xuXG4gICY6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctbGc7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5zcGlubmVyIHtcbiAgYW5pbWF0aW9uOiAkYW5pbWF0aW9uLXNwaW47XG59XG5cbi8vIFJlc3BlY3QgcmVkdWNlZCBtb3Rpb25cbioge1xuICBAaW5jbHVkZSByZXNwZWN0LXJlZHVjZWQtbW90aW9uO1xufVxuKi9cbi8qXG5aLUluZGV4IExheWVyaW5nIFN0cmF0ZWd5OlxuXG4xLTk6ICAgICAgICAgIEJhc2UgY29udGVudCwgc3VidGxlIGxheWVyaW5nXG4xMC05OTogICAgICAgIEFib3ZlIGNvbnRlbnQgKHByZXZpZXdzLCBoaWdobGlnaHRzKVxuMTAwLTk5OTogICAgICBEcm9wZG93bnMsIG1lbnVzLCBuYXZpZ2F0aW9uXG4xMDAwLTE5OTk6ICAgIEZpeGVkL3N0aWNreSBlbGVtZW50cywgbW9kYWxzXG4yMDAwKzogICAgICAgIE5vdGlmaWNhdGlvbnMsIGFsZXJ0cywgY3JpdGljYWwgVUlcblxuRXhhbXBsZTpcbi5teS1kcm9wZG93biB7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyb3Bkb3duOyAgLy8gMTAwXG59XG5cbi5teS1tb2RhbCB7XG4gIHotaW5kZXg6ICR6LWluZGV4LW1vZGFsOyAgICAgLy8gMTA1MFxufVxuXG4ubXktdG9vbHRpcCB7XG4gIHotaW5kZXg6ICR6LWluZGV4LXRvb2x0aXA7ICAgLy8gMTA3MCAoYWx3YXlzIGFib3ZlIG1vZGFscylcbn1cbiovXG5Aa2V5ZnJhbWVzIHNwaW4ge1xuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiAwLjY7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmFkZS1vdXQge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLWRvd24ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNsaWRlLXVwIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHNjYWxlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbi8qXG4uYnV0dG9uIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihiYWNrZ3JvdW5kLWNvbG9yKTsgIC8vIFNpbmdsZSBwcm9wZXJ0eVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XG4gIH1cbn1cblxuLmNhcmQge1xuICBAaW5jbHVkZSB0cmFuc2l0aW9ucygkdHJhbnNpdGlvbi1zaGFkb3csICR0cmFuc2l0aW9uLXRyYW5zZm9ybSk7ICAvLyBNdWx0aXBsZSBwcm9wZXJ0aWVzXG5cbiAgJjpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy1sZztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIH1cbn1cblxuLnNwaW5uZXIge1xuICBhbmltYXRpb246ICRhbmltYXRpb24tc3Bpbjtcbn1cblxuLy8gUmVzcGVjdCByZWR1Y2VkIG1vdGlvblxuKiB7XG4gIEBpbmNsdWRlIHJlc3BlY3QtcmVkdWNlZC1tb3Rpb247XG59XG4qL1xuLyoqXG4gKiBSb2JvLWJ1dHRvbiBzdHlsZSAoZ3JlZW4gZ3JhZGllbnQgd2l0aCBob3ZlciBvdmVybGF5KVxuICogVXNlIHRoaXMgZm9yIHByaW1hcnkgYWN0aW9uIGJ1dHRvbnMgYWNyb3NzIHRoZSBzaXRlXG4gKiBOb3RlOiAhaW1wb3J0YW50IG5lZWRlZCB0byBvdmVycmlkZSAuYnRuLmJ0bi1wcmltYXJ5IGluIGFsbC5zY3NzXG4gKiBVc2VzIGJhY2tncm91bmQtaW1hZ2UgKG5vdCBiYWNrZ3JvdW5kIHNob3J0aGFuZCkgc28gYmFja2dyb3VuZC1jb2xvciB3b3JrcyBmb3IgaG92ZXIgYmxlbmRcbiAqL1xuLyoqXG4gKiBBcHBseSBzaGFkb3cgd2l0aCBsZXZlbFxuICogQHBhcmFtIHtzdHJpbmd9ICRsZXZlbCAtIFNoYWRvdyBsZXZlbCAoeHMsIHNtLCBiYXNlLCBtZCwgbGcsIHhsLCAyeGwpXG4gKi9cbi8qKlxuICogQ2FyZCBzaGFkb3cgd2l0aCBob3ZlciBlZmZlY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gJGhvdmVyIC0gRW5hYmxlIGhvdmVyIGVmZmVjdCAoZGVmYXVsdDogdHJ1ZSlcbiAqL1xuLyoqXG4gKiBQcm9kdWN0IGl0ZW0gc2hhZG93XG4gKi9cbi8qKlxuICogRm9jdXMgcmluZyBmb3IgYWNjZXNzaWJpbGl0eVxuICogQHBhcmFtIHtjb2xvcn0gJGNvbG9yIC0gRm9jdXMgcmluZyBjb2xvciAoZGVmYXVsdDogcHJpbWFyeSlcbiAqL1xuLyoqXG4gKiBGb2N1cyB2aXNpYmxlIChvbmx5IG9uIGtleWJvYXJkIGZvY3VzKVxuICovXG4vKipcbiAqIEhpZGRlbiAoZGlzcGxheTogbm9uZSlcbiAqL1xuLyoqXG4gKiBWaXN1YWxseSBoaWRkZW4gKGZvciBzY3JlZW4gcmVhZGVycylcbiAqL1xuLyoqXG4gKiBOb3QgdmlzdWFsbHkgaGlkZGVuICh1bmRvIHNyLW9ubHkpXG4gKi9cbi8qKlxuICogRGlzYWJsZWQgc3RhdGVcbiAqL1xuLyoqXG4gKiBMb2FkaW5nIHN0YXRlXG4gKi9cbi8qKlxuICogQ2VudGVyZWQgc3Bpbm5lciBvbiBhIHBvc2l0aW9uZWQgcGFyZW50IOKAlCB3aXRob3V0IGFueSB3YXNoIG92ZXJsYXkuXG4gKiBVc2VzIDo6YWZ0ZXIgb25seTsgcGFyZW50IG11c3QgaGF2ZSBwb3NpdGlvbjogcmVsYXRpdmUuXG4gKiBVc2UgdGhpcyB3aGVuIGVsZW1lbnQgY2hpbGRyZW4gYXJlIGhpZGRlbiB2aWEgdmlzaWJpbGl0eTpoaWRkZW4gc28gbm9cbiAqIHdhc2ggbGF5ZXIgaXMgbmVlZGVkIHRvIG1hc2sgdGhlbS5cbiAqXG4gKiBAcGFyYW0gJHNwaW5uZXItY29sb3IgVmlzaWJsZSBzcGlubmVyIGFyYyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXRyYWNrIEZhaW50IHRyYWNrIHJpbmcgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci1zaXplICBEaWFtZXRlciBvZiB0aGUgc3Bpbm5lclxuICogQHBhcmFtICR6LWluZGV4ICAgICAgIFotaW5kZXggb2YgdGhlIHNwaW5uZXJcbiAqL1xuLyoqXG4gKiBMb2FkaW5nIG92ZXJsYXk6IHNlbWktdHJhbnNwYXJlbnQgd2FzaCArIGNlbnRlcmVkIHNwaW5uZXIgb3ZlciBhIHBvc2l0aW9uZWQgcGFyZW50LlxuICogUGFyZW50IG11c3QgaGF2ZSBwb3NpdGlvbjogcmVsYXRpdmUgKG9yIGFic29sdXRlL2ZpeGVkKS5cbiAqIFVzZXMgOjpiZWZvcmUgZm9yIHRoZSB3YXNoIGxheWVyIGFuZCA6OmFmdGVyIGZvciB0aGUgc3Bpbm5lciAodmlhIGxvYWRpbmctc3Bpbm5lci1jZW50ZXJlZCkuXG4gKiBEbyBub3QgYXBwbHkgdG8gZWxlbWVudHMgdGhhdCBhbHJlYWR5IHVzZSBib3RoIHBzZXVkby1lbGVtZW50cyBmb3Igb3RoZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gJGJnICAgICAgICAgICAgQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgd2FzaCBsYXllclxuICogQHBhcmFtICRzcGlubmVyLWNvbG9yIFZpc2libGUgc3Bpbm5lciBhcmMgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci10cmFjayBGYWludCB0cmFjayByaW5nIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItc2l6ZSAgRGlhbWV0ZXIgb2YgdGhlIHNwaW5uZXJcbiAqIEBwYXJhbSAkei1pbmRleCAgICAgICBaLWluZGV4IGZvciB3YXNoIChzcGlubmVyIGdldHMgKzEpXG4gKi9cbi8qKlxuICogSW5saW5lIHNwaW5uZXIgYXBwZW5kZWQgYWZ0ZXIgZWxlbWVudCBjb250ZW50IOKAlCBmb3IgbmF2aWdhdGlvbiBidXR0b25zIGFuZCBsaW5rcy5cbiAqIFVzZXMgOjphZnRlcjsgaW5jb21wYXRpYmxlIHdpdGggZWxlbWVudHMgdGhhdCBhbHJlYWR5IHVzZSA6OmFmdGVyIGZvciBvdGhlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSAkc2l6ZSAgICAgICAgU3Bpbm5lciBkaWFtZXRlclxuICogQHBhcmFtICRjb2xvciAgICAgICBWaXNpYmxlIHNwaW5uZXIgYXJjIGNvbG9yXG4gKiBAcGFyYW0gJHRyYWNrLWNvbG9yIEZhaW50IHRyYWNrIHJpbmcgY29sb3JcbiAqIEBwYXJhbSAkZHVyYXRpb24gICAgT25lLXJvdGF0aW9uIGR1cmF0aW9uXG4gKi9cbi8qKlxuICogVHJ1bmNhdGUgdGV4dCB3aXRoIGVsbGlwc2lzXG4gKi9cbi8qKlxuICogTGluZSBjbGFtcCAobXVsdGktbGluZSB0cnVuY2F0aW9uKVxuICogQHBhcmFtIHtudW1iZXJ9ICRsaW5lcyAtIE51bWJlciBvZiBsaW5lcyB0byBzaG93XG4gKi9cbi8qKlxuICogQ3VzdG9tIHNjcm9sbGJhciBzdHlsaW5nXG4gKiBAcGFyYW0ge2NvbG9yfSAkdGh1bWIgLSBTY3JvbGxiYXIgdGh1bWIgY29sb3JcbiAqIEBwYXJhbSB7Y29sb3J9ICR0cmFjayAtIFNjcm9sbGJhciB0cmFjayBjb2xvclxuICovXG4vKipcbiAqIEFic29sdXRlIGNlbnRlclxuICovXG4vKipcbiAqIEFic29sdXRlIGNvdmVyIChzdHJldGNoIHRvIGZpbGwgcGFyZW50KVxuICovXG4vKipcbiAqIEZpeGVkIGNvdmVyIChzdHJldGNoIHRvIGZpbGwgdmlld3BvcnQpXG4gKi9cbi8qKlxuICogRmxleCBjZW50ZXIgKGJvdGggYXhlcylcbiAqL1xuLyoqXG4gKiBGbGV4IGJldHdlZW4gKHNwYWNlLWJldHdlZW4pXG4gKi9cbi8qKlxuICogRmxleCBjb2x1bW5cbiAqL1xuLyoqXG4gKiBHcmlkIHdpdGggYXV0by1maXQgY29sdW1uc1xuICogQHBhcmFtIHtzaXplfSAkbWluIC0gTWluaW11bSBjb2x1bW4gd2lkdGhcbiAqIEBwYXJhbSB7c2l6ZX0gJG1heCAtIE1heGltdW0gY29sdW1uIHdpZHRoIChkZWZhdWx0OiAxZnIpXG4gKiBAcGFyYW0ge3NpemV9ICRnYXAgLSBHYXAgYmV0d2VlbiBjb2x1bW5zIChkZWZhdWx0OiAkc3BhY2luZy00KVxuICovXG4vKipcbiAqIEdyaWQgd2l0aCBhdXRvLWZpbGwgY29sdW1uc1xuICogQHBhcmFtIHtzaXplfSAkbWluIC0gTWluaW11bSBjb2x1bW4gd2lkdGhcbiAqIEBwYXJhbSB7c2l6ZX0gJG1heCAtIE1heGltdW0gY29sdW1uIHdpZHRoIChkZWZhdWx0OiAxZnIpXG4gKiBAcGFyYW0ge3NpemV9ICRnYXAgLSBHYXAgYmV0d2VlbiBjb2x1bW5zIChkZWZhdWx0OiAkc3BhY2luZy00KVxuICovXG4vKipcbiAqIE9iamVjdCBmaXQgY292ZXJcbiAqL1xuLyoqXG4gKiBPYmplY3QgZml0IGNvbnRhaW5cbiAqL1xuLyoqXG4gKiBBc3BlY3QgcmF0aW8gYm94XG4gKiBAcGFyYW0ge251bWJlcn0gJHdpZHRoIC0gV2lkdGggcmF0aW9cbiAqIEBwYXJhbSB7bnVtYmVyfSAkaGVpZ2h0IC0gSGVpZ2h0IHJhdGlvXG4gKi9cbi8qKlxuICogQ2xlYXJmaXggZm9yIGZsb2F0c1xuICovXG4vKipcbiAqIEhpZGUgaW4gcHJpbnRcbiAqL1xuLyoqXG4gKiBTaG93IG9ubHkgaW4gcHJpbnRcbiAqL1xuLypcbi5teS1jYXJkIHtcbiAgQGluY2x1ZGUgY2FyZC1zaGFkb3c7ICAgICAgICAgICAgIC8vIENhcmQgd2l0aCBob3ZlciBzaGFkb3dcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbih0cmFuc2Zvcm0pO1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLW1kO1xuXG4gICY6aG92ZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgfVxufVxuXG4ubXktaW5wdXQge1xuICBAaW5jbHVkZSBmb2N1cy12aXNpYmxlOyAgICAgICAgICAgIC8vIEFjY2Vzc2libGUgZm9jdXMgcmluZ1xuXG4gICY6ZGlzYWJsZWQge1xuICAgIEBpbmNsdWRlIGRpc2FibGVkOyAgICAgICAgICAgICAgIC8vIERpc2FibGVkIHN0YXRlXG4gIH1cbn1cblxuLnRydW5jYXRlZC10ZXh0IHtcbiAgQGluY2x1ZGUgbGluZS1jbGFtcCgzKTsgICAgICAgICAgICAvLyBTaG93IDMgbGluZXMgbWF4XG59XG5cbi5wcm9kdWN0LWdyaWQge1xuICBAaW5jbHVkZSBncmlkLWF1dG8tZml0KDI1MHB4KTsgICAgIC8vIFJlc3BvbnNpdmUgZ3JpZFxufVxuXG4uY2VudGVyZWQtbW9kYWwge1xuICBAaW5jbHVkZSBhYnNvbHV0ZS1jZW50ZXI7ICAgICAgICAgIC8vIENlbnRlciBpbiB2aWV3cG9ydFxufVxuKi9cbi8qXG5BZnRlciBpbXBvcnRpbmcgdGhpcyBmaWxlLCB5b3UgaGF2ZSBhY2Nlc3MgdG86XG5cbkNPTE9SUzpcbi0gUHJpbWFyeSBjb2xvcnM6ICRjb2xvci1wcmltYXJ5LCAkY29sb3ItcHJpbWFyeS1saWdodCwgJGNvbG9yLXByaW1hcnktZGFya1xuLSBHcmF5czogJGNvbG9yLWdyYXktNTAgdGhyb3VnaCAkY29sb3ItZ3JheS05MDBcbi0gU2VtYW50aWM6ICRjb2xvci1zdWNjZXNzLCAkY29sb3ItZGFuZ2VyLCAkY29sb3Itd2FybmluZywgJGNvbG9yLWluZm9cbi0gQmFja2dyb3VuZHM6ICRiZy1wYWdlLCAkYmctbGlnaHQsICRiZy1kYXJrLCBldGMuXG4tIFRleHQ6ICR0ZXh0LXByaW1hcnksICR0ZXh0LXNlY29uZGFyeSwgJHRleHQtbXV0ZWQsIGV0Yy5cbi0gQm9yZGVyczogJGJvcmRlci1kZWZhdWx0LCAkYm9yZGVyLWxpZ2h0LCAkYm9yZGVyLXN0cm9uZ1xuLSBHcmFkaWVudHM6ICRncmFkaWVudC1wcmltYXJ5LCAkZ3JhZGllbnQtcHJpbWFyeS1idXR0b24sIGV0Yy5cblxuVFlQT0dSQVBIWTpcbi0gRm9udCBmYW1pbGllczogJGZvbnQtZmFtaWx5LWJhc2UsICRmb250LWZhbWlseS1oZWFkaW5nXG4tIEZvbnQgc2l6ZXM6ICRmb250LXNpemUteHMgdGhyb3VnaCAkZm9udC1zaXplLTZ4bFxuLSBIZWFkaW5nIHNpemVzOiAkaDEtc2l6ZSwgJGgyLXNpemUsIGV0Yy5cbi0gRm9udCB3ZWlnaHRzOiAkZm9udC13ZWlnaHQtbGlnaHQgdGhyb3VnaCAkZm9udC13ZWlnaHQtYmxhY2tcbi0gTGluZSBoZWlnaHRzOiAkbGluZS1oZWlnaHQtdGlnaHQsICRsaW5lLWhlaWdodC1ub3JtYWwsIGV0Yy5cblxuU1BBQ0lORzpcbi0gU2NhbGU6ICRzcGFjaW5nLTAgdGhyb3VnaCAkc3BhY2luZy0zMlxuLSBTZW1hbnRpYzogJHNwYWNpbmcteHMsICRzcGFjaW5nLXNtLCAkc3BhY2luZy1tZCwgJHNwYWNpbmctbGcsICRzcGFjaW5nLXhsXG4tIENvbXBvbmVudC1zcGVjaWZpYzogJGlucHV0LXBhZGRpbmcteSwgJGJ1dHRvbi1wYWRkaW5nLXgsICRjYXJkLXBhZGRpbmcsIGV0Yy5cblxuU0hBRE9XUzpcbi0gU2NhbGU6ICRzaGFkb3cteHMgdGhyb3VnaCAkc2hhZG93LTJ4bFxuLSBTZW1hbnRpYzogJHNoYWRvdy1jYXJkLCAkc2hhZG93LWRyb3Bkb3duLCAkc2hhZG93LW1vZGFsLCBldGMuXG4tIE1ldGhvZHM6IEBpbmNsdWRlIHNoYWRvdygnbGcnKTtcblxuQk9SREVSUzpcbi0gUmFkaXVzOiAkcmFkaXVzLW5vbmUgdGhyb3VnaCAkcmFkaXVzLWZ1bGxcbi0gV2lkdGhzOiAkYm9yZGVyLXdpZHRoLTEgdGhyb3VnaCAkYm9yZGVyLXdpZHRoLTVcbi0gU3R5bGVzOiAkYm9yZGVyLWRlZmF1bHQtc3R5bGUsICRib3JkZXItZm9jdXMtc3R5bGUsIGV0Yy5cblxuTUVESUEgUVVFUklFUzpcbi0gQnJlYWtwb2ludHM6ICRicmVha3BvaW50LXNtLCAkYnJlYWtwb2ludC1tZCwgJGJyZWFrcG9pbnQtbGcsIGV0Yy5cbi0gTWl4aW5zOiBAaW5jbHVkZSBtZWRpYS1tZCB7IC4uLiB9LCBAaW5jbHVkZSBtZWRpYS1sZyB7IC4uLiB9XG5cblRSQU5TSVRJT05TOlxuLSBEdXJhdGlvbnM6ICRkdXJhdGlvbi1mYXN0LCAkZHVyYXRpb24tYmFzZSwgJGR1cmF0aW9uLXNsb3dcbi0gRWFzaW5nczogJGVhc2UtaW4sICRlYXNlLW91dCwgJGVhc2UtaW4tb3V0XG4tIENvbXBsZXRlIHRyYW5zaXRpb25zOiAkdHJhbnNpdGlvbi1idXR0b24sICR0cmFuc2l0aW9uLWNhcmQsIGV0Yy5cbi0gQW5pbWF0aW9uczogJGFuaW1hdGlvbi1zcGluLCAkYW5pbWF0aW9uLXB1bHNlLCBldGMuXG5cblotSU5ERVg6XG4tIFNjYWxlOiAkei1pbmRleC1iYXNlIHRocm91Z2ggJHotaW5kZXgtbWF4XG4tIFNlbWFudGljOiAkei1pbmRleC1kcm9wZG93biwgJHotaW5kZXgtbW9kYWwsICR6LWluZGV4LXRvb2x0aXAsIGV0Yy5cblxuTUlYSU5TOlxuLSBTaGFkb3dzOiBAaW5jbHVkZSBjYXJkLXNoYWRvdywgQGluY2x1ZGUgcHJvZHVjdC1zaGFkb3dcbi0gRm9jdXM6IEBpbmNsdWRlIGZvY3VzLXJpbmcsIEBpbmNsdWRlIGZvY3VzLXZpc2libGVcbi0gVmlzaWJpbGl0eTogQGluY2x1ZGUgc3Itb25seSwgQGluY2x1ZGUgaGlkZGVuXG4tIFN0YXRlczogQGluY2x1ZGUgZGlzYWJsZWQsIEBpbmNsdWRlIGxvYWRpbmdcbi0gVGV4dDogQGluY2x1ZGUgdHJ1bmNhdGUsIEBpbmNsdWRlIGxpbmUtY2xhbXAoMylcbi0gTGF5b3V0OiBAaW5jbHVkZSBmbGV4LWNlbnRlciwgQGluY2x1ZGUgYWJzb2x1dGUtY2VudGVyXG4tIEdyaWQ6IEBpbmNsdWRlIGdyaWQtYXV0by1maXQoMjUwcHgpXG4tIEFuZCBtYW55IG1vcmUuLi5cbiovXG4vKlxuQ29tbW9uIHBhdHRlcm5zOlxuXG4vLyBDYXJkIHdpdGggc2hhZG93XG4uY2FyZCB7XG4gIHBhZGRpbmc6ICRzcGFjaW5nLTQ7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtbWQ7XG4gIEBpbmNsdWRlIGNhcmQtc2hhZG93O1xufVxuXG4vLyBSZXNwb25zaXZlIHRleHRcbi5oZWFkaW5nIHtcbiAgZm9udC1zaXplOiAkaDItc2l6ZS1tb2JpbGU7XG5cbiAgQGluY2x1ZGUgbWVkaWEtbWQge1xuICAgIGZvbnQtc2l6ZTogJGgyLXNpemUtZGVza3RvcDtcbiAgfVxufVxuXG4vLyBCdXR0b25cbi5idXR0b24ge1xuICBwYWRkaW5nOiAkYnV0dG9uLXBhZGRpbmcteSAkYnV0dG9uLXBhZGRpbmcteDtcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1idXR0b247XG4gIGJhY2tncm91bmQ6ICRncmFkaWVudC1wcmltYXJ5LWJ1dHRvbjtcbiAgY29sb3I6ICR0ZXh0LWludmVyc2U7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYmFja2dyb3VuZC1jb2xvciwgJGR1cmF0aW9uLWhvdmVyKTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItcHJpbWFyeS1kYXJrO1xuICB9XG5cbiAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICBAaW5jbHVkZSBmb2N1cy1yaW5nO1xuICB9XG59XG5cbi8vIEdyaWQgbGF5b3V0XG4ucHJvZHVjdC1ncmlkIHtcbiAgQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweCwgMWZyLCAkc3BhY2luZy00KTtcbn1cblxuLy8gVHJ1bmNhdGVkIHRleHRcbi5kZXNjcmlwdGlvbiB7XG4gIEBpbmNsdWRlIGxpbmUtY2xhbXAoMyk7ICAvLyBTaG93IDMgbGluZXMgbWF4XG59XG4qL1xuLmxpZ2h0Ym94LXNob3duICNjbG9zZS1saWdodGJveCB7XG4gIHRvcDogMC43NXJlbSAhaW1wb3J0YW50O1xuICByaWdodDogMC43NXJlbSAhaW1wb3J0YW50O1xuICB3aWR0aDogMnJlbSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDJyZW0gIWltcG9ydGFudDtcbiAgei1pbmRleDogMTE7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNTBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zIGVhc2U7XG59XG4ubGlnaHRib3gtc2hvd24gI2Nsb3NlLWxpZ2h0Ym94OmhvdmVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xufVxuLmxpZ2h0Ym94LXNob3duICNjbG9zZS1saWdodGJveDphY3RpdmUge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcbiAgLmxpZ2h0Ym94LXNob3duICNjbG9zZS1saWdodGJveCB7XG4gICAgdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcbiAgICByaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDIuMjVyZW0gIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDIuMjVyZW0gIWltcG9ydGFudDtcbiAgfVxufSIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1lZGlhIFF1ZXJ5IFRva2Vuc1xuLy8gQnJlYWtwb2ludHMgYW5kIHJlc3BvbnNpdmUgZGVzaWduIHV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCcmVha3BvaW50IERlZmluaXRpb25zXG4vLyBNb2JpbGUtZmlyc3QgYXBwcm9hY2hcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRicmVha3BvaW50LXhzOiAwOyAgICAgICAgICAgICAgICAvLyBFeHRyYSBzbWFsbCBkZXZpY2VzIChwaG9uZXMpXG4kYnJlYWtwb2ludC1zbTogNTc2cHg7ICAgICAgICAgICAgLy8gU21hbGwgZGV2aWNlcyAobGFuZHNjYXBlIHBob25lcylcbiRicmVha3BvaW50LW1kOiA3NjhweDsgICAgICAgICAgICAvLyBNZWRpdW0gZGV2aWNlcyAodGFibGV0cylcbiRicmVha3BvaW50LWxnOiA5OTJweDsgICAgICAgICAgICAvLyBMYXJnZSBkZXZpY2VzIChkZXNrdG9wcylcbiRicmVha3BvaW50LXhsOiAxMjAwcHg7ICAgICAgICAgICAvLyBFeHRyYSBsYXJnZSBkZXZpY2VzIChsYXJnZSBkZXNrdG9wcylcbiRicmVha3BvaW50LXh4bDogMTQwMHB4OyAgICAgICAgICAvLyBFeHRyYSBleHRyYSBsYXJnZSBkZXZpY2VzICh1bHRyYS13aWRlKVxuXG4vLyBMZWdhY3kvc3BlY2lmaWMgYnJlYWtwb2ludHMgKGZyb20gbW9kZWwtZmluZGVyKVxuJGJyZWFrcG9pbnQtbW9iaWxlOiAxMDI0cHg7ICAgICAgIC8vIE1vZGVsLWZpbmRlciBtb2JpbGUgYnJlYWtwb2ludFxuJGJyZWFrcG9pbnQtdGFibGV0OiA3NjhweDsgICAgICAgIC8vIE1vZGVsLWZpbmRlciB0YWJsZXQgYnJlYWtwb2ludFxuJGJyZWFrcG9pbnQtZGVza3RvcDogMTIwMHB4OyAgICAgIC8vIE1vZGVsLWZpbmRlciBkZXNrdG9wIGJyZWFrcG9pbnRcbiRicmVha3BvaW50LXdpZGU6IDE0NDBweDsgICAgICAgICAvLyBXaWRlIHNjcmVlbnNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVzcG9uc2l2ZSBNaXhpbnNcbi8vIFVzZSB0aGVzZSBmb3IgY29uc2lzdGVudCBtZWRpYSBxdWVyaWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE1pbi13aWR0aCBtZWRpYSBxdWVyaWVzIChtb2JpbGUtZmlyc3QpXG5AbWl4aW4gbWVkaWEtc20ge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQtc20pIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gbWVkaWEtbWQge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQtbWQpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gbWVkaWEtbGcge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQtbGcpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gbWVkaWEteGwge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQteGwpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gbWVkaWEteHhsIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRicmVha3BvaW50LXh4bCkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIE1heC13aWR0aCBtZWRpYSBxdWVyaWVzIChkZXNrdG9wLWZpcnN0LCB1c2Ugc3BhcmluZ2x5KVxuQG1peGluIG1lZGlhLWRvd24tc20ge1xuICBAbWVkaWEgKG1heC13aWR0aDogI3skYnJlYWtwb2ludC1zbSAtIDFweH0pIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gbWVkaWEtZG93bi1tZCB7XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAjeyRicmVha3BvaW50LW1kIC0gMXB4fSkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBtZWRpYS1kb3duLWxnIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6ICN7JGJyZWFrcG9pbnQtbGcgLSAxcHh9KSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIG1lZGlhLWRvd24teGwge1xuICBAbWVkaWEgKG1heC13aWR0aDogI3skYnJlYWtwb2ludC14bCAtIDFweH0pIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBCZXR3ZWVuIGJyZWFrcG9pbnRzXG5AbWl4aW4gbWVkaWEtYmV0d2VlbigkbWluLCAkbWF4KSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogI3skbWF4IC0gMXB4fSkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIEN1c3RvbSBicmVha3BvaW50XG5AbWl4aW4gbWVkaWEtbWluKCRicmVha3BvaW50KSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkYnJlYWtwb2ludCkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBtZWRpYS1tYXgoJGJyZWFrcG9pbnQpIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6ICN7JGJyZWFrcG9pbnQgLSAxcHh9KSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT3JpZW50YXRpb24gUXVlcmllc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIGxhbmRzY2FwZSB7XG4gIEBtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBwb3J0cmFpdCB7XG4gIEBtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJpbnQgTWVkaWFcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBtaXhpbiBwcmludCB7XG4gIEBtZWRpYSBwcmludCB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0aW5hL0hpZ2ggRFBJIERpc3BsYXlzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AbWl4aW4gcmV0aW5hIHtcbiAgQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFjY2Vzc2liaWxpdHkgLSBSZWR1Y2VkIE1vdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIHJlZHVjZWQtbW90aW9uIHtcbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEYXJrIE1vZGUgU3VwcG9ydFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIGRhcmstbW9kZSB7XG4gIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBVc2FnZSBFeGFtcGxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLypcbi5teS1jb21wb25lbnQge1xuICBwYWRkaW5nOiAxcmVtO1xuXG4gIC8vIE1vYmlsZS1maXJzdCByZXNwb25zaXZlIGRlc2lnblxuICBAaW5jbHVkZSBtZWRpYS1tZCB7XG4gICAgcGFkZGluZzogMnJlbTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1lZGlhLWxnIHtcbiAgICBwYWRkaW5nOiAzcmVtO1xuICB9XG5cbiAgLy8gRGVza3RvcC1maXJzdCAodXNlIHNwYXJpbmdseSlcbiAgQGluY2x1ZGUgbWVkaWEtZG93bi1tZCB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG5cbiAgLy8gQmV0d2VlbiBzcGVjaWZpYyBicmVha3BvaW50c1xuICBAaW5jbHVkZSBtZWRpYS1iZXR3ZWVuKCRicmVha3BvaW50LW1kLCAkYnJlYWtwb2ludC1sZykge1xuICAgIGJhY2tncm91bmQ6IGJsdWU7XG4gIH1cblxuICAvLyBSZWR1Y2VkIG1vdGlvbiBmb3IgYWNjZXNzaWJpbGl0eVxuICBAaW5jbHVkZSByZWR1Y2VkLW1vdGlvbiB7XG4gICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4qL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMRUdBQ1kgVkFSSUFCTEVTIChERVBSRUNBVEVEKVxuLy8gV2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRtZi1icmVha3BvaW50LW1vYmlsZTogJGJyZWFrcG9pbnQtbW9iaWxlICFkZWZhdWx0OyAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkYnJlYWtwb2ludC1sZ1xuJG1mLWJyZWFrcG9pbnQtdGFibGV0OiAkYnJlYWtwb2ludC10YWJsZXQgIWRlZmF1bHQ7ICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRicmVha3BvaW50LW1kXG4kbWYtYnJlYWtwb2ludC1kZXNrdG9wOiAkYnJlYWtwb2ludC1kZXNrdG9wICFkZWZhdWx0OyAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGJyZWFrcG9pbnQteGxcbiRtZi1icmVha3BvaW50LXdpZGU6ICRicmVha3BvaW50LXdpZGUgIWRlZmF1bHQ7ICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkYnJlYWtwb2ludC14eGxcbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYW5zaXRpb24gVG9rZW5zXG4vLyBBbmltYXRpb24gZHVyYXRpb25zLCBlYXNpbmcgZnVuY3Rpb25zLCBhbmQgdHJhbnNpdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRHVyYXRpb25zXG4vLyBTdGFuZGFyZCB0aW1pbmcgZm9yIGFuaW1hdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRkdXJhdGlvbi1pbnN0YW50OiAwbXM7XG4kZHVyYXRpb24tZmFzdDogMTUwbXM7XG4kZHVyYXRpb24tYmFzZTogMjAwbXM7XG4kZHVyYXRpb24tbWVkaXVtOiAzMDBtcztcbiRkdXJhdGlvbi1zbG93OiA1MDBtcztcbiRkdXJhdGlvbi1zbG93ZXI6IDcwMG1zO1xuJGR1cmF0aW9uLXNsb3dlc3Q6IDEwMDBtcztcblxuLy8gU2VtYW50aWMgYWxpYXNlc1xuJGR1cmF0aW9uLWhvdmVyOiAkZHVyYXRpb24tZmFzdDtcbiRkdXJhdGlvbi1mYWRlOiAkZHVyYXRpb24tYmFzZTtcbiRkdXJhdGlvbi1zbGlkZTogJGR1cmF0aW9uLW1lZGl1bTtcbiRkdXJhdGlvbi1tb2RhbDogJGR1cmF0aW9uLW1lZGl1bTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRWFzaW5nIEZ1bmN0aW9uc1xuLy8gVGltaW5nIGZ1bmN0aW9ucyBmb3IgbmF0dXJhbCBtb3Rpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRlYXNlLWxpbmVhcjogbGluZWFyO1xuJGVhc2UtaW46IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO1xuJGVhc2Utb3V0OiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbiRlYXNlLWluLW91dDogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcblxuLy8gQ3VzdG9tIGVhc2luZ1xuJGVhc2UtZGVmYXVsdDogZWFzZTtcbiRlYXNlLWJvdW5jZTogY3ViaWMtYmV6aWVyKDAuNjgsIC0wLjU1LCAwLjI2NSwgMS41NSk7XG4kZWFzZS1zbW9vdGg6IGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcblxuLy8gU2VtYW50aWMgYWxpYXNlc1xuJGVhc2UtaG92ZXI6ICRlYXNlLW91dDtcbiRlYXNlLW1vZGFsOiAkZWFzZS1pbi1vdXQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbXBsZXRlIFRyYW5zaXRpb25zXG4vLyBQcmUtY29uZmlndXJlZCB0cmFuc2l0aW9ucyBmb3IgY29tbW9uIHByb3BlcnRpZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWxsIHByb3BlcnRpZXNcbiR0cmFuc2l0aW9uLWZhc3Q6IGFsbCAkZHVyYXRpb24tZmFzdCAkZWFzZS1vdXQ7XG4kdHJhbnNpdGlvbi1iYXNlOiBhbGwgJGR1cmF0aW9uLWJhc2UgJGVhc2Utb3V0O1xuJHRyYW5zaXRpb24tbWVkaXVtOiBhbGwgJGR1cmF0aW9uLW1lZGl1bSAkZWFzZS1vdXQ7XG4kdHJhbnNpdGlvbi1zbG93OiBhbGwgJGR1cmF0aW9uLXNsb3cgJGVhc2Utb3V0O1xuXG4vLyBTcGVjaWZpYyBwcm9wZXJ0aWVzXG4kdHJhbnNpdGlvbi1jb2xvcjogY29sb3IgJGR1cmF0aW9uLWJhc2UgJGVhc2Utb3V0O1xuJHRyYW5zaXRpb24tYmc6IGJhY2tncm91bmQtY29sb3IgJGR1cmF0aW9uLWJhc2UgJGVhc2Utb3V0O1xuJHRyYW5zaXRpb24tYm9yZGVyOiBib3JkZXItY29sb3IgJGR1cmF0aW9uLWJhc2UgJGVhc2Utb3V0O1xuJHRyYW5zaXRpb24tc2hhZG93OiBib3gtc2hhZG93ICRkdXJhdGlvbi1iYXNlICRlYXNlLW91dDtcbiR0cmFuc2l0aW9uLXRyYW5zZm9ybTogdHJhbnNmb3JtICRkdXJhdGlvbi1iYXNlICRlYXNlLW91dDtcbiR0cmFuc2l0aW9uLW9wYWNpdHk6IG9wYWNpdHkgJGR1cmF0aW9uLWJhc2UgJGVhc2Utb3V0O1xuXG4vLyBDb21wb25lbnQtc3BlY2lmaWMgdHJhbnNpdGlvbnNcbiR0cmFuc2l0aW9uLWJ1dHRvbjogYmFja2dyb3VuZC1jb2xvciAkZHVyYXRpb24taG92ZXIgJGVhc2Utb3V0LFxuICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93ICRkdXJhdGlvbi1ob3ZlciAkZWFzZS1vdXQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAkZHVyYXRpb24taG92ZXIgJGVhc2Utb3V0O1xuXG4kdHJhbnNpdGlvbi1saW5rOiBjb2xvciAkZHVyYXRpb24taG92ZXIgJGVhc2Utb3V0O1xuXG4kdHJhbnNpdGlvbi1kcm9wZG93bjogb3BhY2l0eSAkZHVyYXRpb24tZmFzdCAkZWFzZS1vdXQsXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtICRkdXJhdGlvbi1mYXN0ICRlYXNlLW91dDtcblxuJHRyYW5zaXRpb24tbW9kYWw6IG9wYWNpdHkgJGR1cmF0aW9uLW1lZGl1bSAkZWFzZS1pbi1vdXQsXG4gICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtICRkdXJhdGlvbi1tZWRpdW0gJGVhc2UtaW4tb3V0O1xuXG4kdHJhbnNpdGlvbi1jYXJkOiBib3gtc2hhZG93ICRkdXJhdGlvbi1iYXNlICRlYXNlLW91dCxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAkZHVyYXRpb24tYmFzZSAkZWFzZS1vdXQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRyYW5zaXRpb24gTWl4aW5cbi8vIFV0aWxpdHkgZm9yIGNyZWF0aW5nIGNvbnNpc3RlbnQgdHJhbnNpdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBtaXhpbiB0cmFuc2l0aW9uKCRwcm9wZXJ0eTogYWxsLCAkZHVyYXRpb246ICRkdXJhdGlvbi1iYXNlLCAkZWFzaW5nOiAkZWFzZS1vdXQpIHtcbiAgdHJhbnNpdGlvbjogJHByb3BlcnR5ICRkdXJhdGlvbiAkZWFzaW5nO1xufVxuXG4vLyBNdWx0aXBsZSBwcm9wZXJ0eSB0cmFuc2l0aW9uXG5AbWl4aW4gdHJhbnNpdGlvbnMoJHRyYW5zaXRpb25zLi4uKSB7XG4gIHRyYW5zaXRpb246ICR0cmFuc2l0aW9ucztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQW5pbWF0aW9uIEtleWZyYW1lc1xuLy8gQ29tbW9uIGFuaW1hdGlvbnMgdXNlZCBpbiB0aGUgdGhlbWVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU3BpbiAoZm9yIGxvYWRpbmcgc3Bpbm5lcnMpXG5Aa2V5ZnJhbWVzIHNwaW4ge1xuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuXG4vLyBQdWxzZSAoZm9yIGxvYWRpbmcvYXR0ZW50aW9uKVxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiAwLjY7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cbn1cblxuLy8gRmFkZSBpblxuQGtleWZyYW1lcyBmYWRlLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4vLyBGYWRlIG91dFxuQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cblxuLy8gU2xpZGUgZG93blxuQGtleWZyYW1lcyBzbGlkZS1kb3duIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG4vLyBTbGlkZSB1cFxuQGtleWZyYW1lcyBzbGlkZS11cCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG4vLyBTY2FsZSBpblxuQGtleWZyYW1lcyBzY2FsZS1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFuaW1hdGlvbiBVdGlsaXRpZXNcbi8vIFByZS1jb25maWd1cmVkIGFuaW1hdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRhbmltYXRpb24tc3Bpbjogc3BpbiAkZHVyYXRpb24tc2xvd2VzdCBsaW5lYXIgaW5maW5pdGU7XG4kYW5pbWF0aW9uLXB1bHNlOiBwdWxzZSAkZHVyYXRpb24tbWVkaXVtICRlYXNlLWluLW91dCBpbmZpbml0ZTtcbiRhbmltYXRpb24tZmFkZS1pbjogZmFkZS1pbiAkZHVyYXRpb24tbWVkaXVtICRlYXNlLW91dDtcbiRhbmltYXRpb24tc2xpZGUtZG93bjogc2xpZGUtZG93biAkZHVyYXRpb24tbWVkaXVtICRlYXNlLW91dDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVkdWNlZCBNb3Rpb24gU3VwcG9ydFxuLy8gUmVzcGVjdCB1c2VyIHByZWZlcmVuY2VzIGZvciByZWR1Y2VkIG1vdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIHJlc3BlY3QtcmVkdWNlZC1tb3Rpb24ge1xuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMSAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50O1xuICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVzYWdlIEV4YW1wbGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKlxuLmJ1dHRvbiB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYmFja2dyb3VuZC1jb2xvcik7ICAvLyBTaW5nbGUgcHJvcGVydHlcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xuICB9XG59XG5cbi5jYXJkIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbnMoJHRyYW5zaXRpb24tc2hhZG93LCAkdHJhbnNpdGlvbi10cmFuc2Zvcm0pOyAgLy8gTXVsdGlwbGUgcHJvcGVydGllc1xuXG4gICY6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctbGc7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5zcGlubmVyIHtcbiAgYW5pbWF0aW9uOiAkYW5pbWF0aW9uLXNwaW47XG59XG5cbi8vIFJlc3BlY3QgcmVkdWNlZCBtb3Rpb25cbioge1xuICBAaW5jbHVkZSByZXNwZWN0LXJlZHVjZWQtbW90aW9uO1xufVxuKi9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTEVHQUNZIFZBUklBQkxFUyAoREVQUkVDQVRFRClcbi8vIFdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb2RlbC1maW5kZXIgdHJhbnNpdGlvbnMgLSBub3cgbWFwcGVkIHRvIGdsb2JhbFxuJG1mLWR1cmF0aW9uLWZhc3Q6ICRkdXJhdGlvbi1mYXN0ICFkZWZhdWx0OyAgICAgICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGR1cmF0aW9uLWZhc3RcbiRtZi1kdXJhdGlvbi1tZWRpdW06ICRkdXJhdGlvbi1tZWRpdW0gIWRlZmF1bHQ7ICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRkdXJhdGlvbi1tZWRpdW1cbiRtZi1kdXJhdGlvbi1zbG93OiAkZHVyYXRpb24tc2xvdyAhZGVmYXVsdDsgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRkdXJhdGlvbi1zbG93XG5cbiRtZi1lYXNlLWluOiAkZWFzZS1pbiAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRlYXNlLWluXG4kbWYtZWFzZS1vdXQ6ICRlYXNlLW91dCAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZWFzZS1vdXRcbiRtZi1lYXNlLWluLW91dDogJGVhc2UtaW4tb3V0ICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRlYXNlLWluLW91dFxuJG1mLWVhc2UtZGVmYXVsdDogJGVhc2UtZGVmYXVsdCAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGVhc2UtZGVmYXVsdFxuXG4kbWYtdHJhbnNpdGlvbi1mYXN0OiAkdHJhbnNpdGlvbi1mYXN0ICFkZWZhdWx0OyAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkdHJhbnNpdGlvbi1mYXN0XG4kbWYtdHJhbnNpdGlvbi1tZWRpdW06ICR0cmFuc2l0aW9uLW1lZGl1bSAhZGVmYXVsdDsgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkdHJhbnNpdGlvbi1tZWRpdW1cbiRtZi10cmFuc2l0aW9uLXNsb3c6ICR0cmFuc2l0aW9uLXNsb3cgIWRlZmF1bHQ7ICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR0cmFuc2l0aW9uLXNsb3dcbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFotSW5kZXggVG9rZW5zXG4vLyBMYXllcmluZyBzeXN0ZW0gZm9yIGNvbnRyb2xsaW5nIHN0YWNraW5nIG9yZGVyXG4vLyBQcmV2ZW50cyB6LWluZGV4IGNoYW9zIGJ5IGRlZmluaW5nIGV4cGxpY2l0IGxheWVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBaLUluZGV4IFNjYWxlXG4vLyBGcm9tIGxvd2VzdCB0byBoaWdoZXN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kei1pbmRleC1iYXNlOiAxO1xuJHotaW5kZXgtcHJldmlldzogMTA7XG4kei1pbmRleC1kcm9wZG93bjogMTAwO1xuJHotaW5kZXgtc3RpY2t5OiAxMDIwO1xuJHotaW5kZXgtZml4ZWQ6IDEwMzA7XG4kei1pbmRleC1tb2RhbC1iYWNrZHJvcDogMTA0MDtcbiR6LWluZGV4LW1vZGFsOiAxMDUwO1xuJHotaW5kZXgtcG9wb3ZlcjogMTA2MDtcbiR6LWluZGV4LXRvb2x0aXA6IDEwNzA7XG4kei1pbmRleC1ub3RpZmljYXRpb246IDEwODA7XG4kei1pbmRleC1tYXg6IDk5OTk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlbWFudGljIExheWVyIEFsaWFzZXNcbi8vIFVzZSB0aGVzZSBmb3Igc3BlY2lmaWMgY29tcG9uZW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBDb250ZW50IGxheWVyc1xuJHotaW5kZXgtY29udGVudDogJHotaW5kZXgtYmFzZTtcbiR6LWluZGV4LXJhaXNlZDogJHotaW5kZXgtcHJldmlldztcblxuLy8gTmF2aWdhdGlvblxuJHotaW5kZXgtbmF2OiAxMDAwO1xuJHotaW5kZXgtbmF2LWRyb3Bkb3duOiAkei1pbmRleC1kcm9wZG93bjtcblxuLy8gSGVhZGVycy9mb290ZXJzXG4kei1pbmRleC1oZWFkZXI6IDEwMDA7XG4kei1pbmRleC1mb290ZXI6IDEwMDA7XG5cbi8vIE92ZXJsYXlzXG4kei1pbmRleC1vdmVybGF5OiAxMDQwO1xuJHotaW5kZXgtbG9hZGluZzogNTA7XG5cbi8vIERyb3Bkb3ducyAmIHBvcG92ZXJzXG4kei1pbmRleC1zZWxlY3QtZHJvcGRvd246ICR6LWluZGV4LWRyb3Bkb3duO1xuJHotaW5kZXgtbWVudS1kcm9wZG93bjogJHotaW5kZXgtZHJvcGRvd247XG5cbi8vIE1vZGFscyAmIGRpYWxvZ3NcbiR6LWluZGV4LWRpYWxvZzogJHotaW5kZXgtbW9kYWw7XG4kei1pbmRleC1hbGVydDogJHotaW5kZXgtbm90aWZpY2F0aW9uO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb21wb25lbnQtU3BlY2lmaWMgWi1JbmRleFxuLy8gRm9yIHNwZWNpZmljIHRoZW1lIGNvbXBvbmVudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTW9kZWwgZmluZGVyIGNvbXBvbmVudCBsYXllcnNcbiR6LWluZGV4LW1mLWRyb3Bkb3duOiAkei1pbmRleC1kcm9wZG93bjtcbiR6LWluZGV4LW1mLWxvYWRpbmc6ICR6LWluZGV4LWxvYWRpbmc7XG4kei1pbmRleC1tZi1vdmVybGF5OiAkei1pbmRleC1vdmVybGF5O1xuXG4vLyBDb25maWd1cmF0aW9uIG1vZGFsXG4kei1pbmRleC1jb25maWctbW9kYWw6ICR6LWluZGV4LW1vZGFsO1xuJHotaW5kZXgtY29uZmlnLWJhY2tkcm9wOiAkei1pbmRleC1tb2RhbC1iYWNrZHJvcDtcblxuLy8gTWVnYSBtZW51XG4kei1pbmRleC1tZWdhLW1lbnU6ICR6LWluZGV4LWRyb3Bkb3duO1xuXG4vLyBTdGlja3kgZWxlbWVudHNcbiR6LWluZGV4LXN0aWNreS1oZWFkZXI6ICR6LWluZGV4LXN0aWNreTtcbiR6LWluZGV4LXN0aWNreS1mb290ZXI6ICR6LWluZGV4LXN0aWNreTtcbiR6LWluZGV4LXN0aWNreS1zaWRlYmFyOiAkei1pbmRleC1zdGlja3k7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVzYWdlIEd1aWRlbGluZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qXG5aLUluZGV4IExheWVyaW5nIFN0cmF0ZWd5OlxuXG4xLTk6ICAgICAgICAgIEJhc2UgY29udGVudCwgc3VidGxlIGxheWVyaW5nXG4xMC05OTogICAgICAgIEFib3ZlIGNvbnRlbnQgKHByZXZpZXdzLCBoaWdobGlnaHRzKVxuMTAwLTk5OTogICAgICBEcm9wZG93bnMsIG1lbnVzLCBuYXZpZ2F0aW9uXG4xMDAwLTE5OTk6ICAgIEZpeGVkL3N0aWNreSBlbGVtZW50cywgbW9kYWxzXG4yMDAwKzogICAgICAgIE5vdGlmaWNhdGlvbnMsIGFsZXJ0cywgY3JpdGljYWwgVUlcblxuRXhhbXBsZTpcbi5teS1kcm9wZG93biB7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyb3Bkb3duOyAgLy8gMTAwXG59XG5cbi5teS1tb2RhbCB7XG4gIHotaW5kZXg6ICR6LWluZGV4LW1vZGFsOyAgICAgLy8gMTA1MFxufVxuXG4ubXktdG9vbHRpcCB7XG4gIHotaW5kZXg6ICR6LWluZGV4LXRvb2x0aXA7ICAgLy8gMTA3MCAoYWx3YXlzIGFib3ZlIG1vZGFscylcbn1cbiovXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFotSW5kZXggSGVscGVyIE1peGluXG4vLyBWYWxpZGF0ZXMgei1pbmRleCB2YWx1ZXMgdG8gZW5zdXJlIHRoZXkncmUgaW4gb3VyIHNjYWxlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AbWl4aW4gei1pbmRleCgkbGF5ZXIpIHtcbiAgei1pbmRleDogJGxheWVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMRUdBQ1kgVkFSSUFCTEVTIChERVBSRUNBVEVEKVxuLy8gV2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vZGVsLWZpbmRlciB6LWluZGV4IC0gbm93IG1hcHBlZCB0byBnbG9iYWxcbiRtZi16LWJhc2U6ICR6LWluZGV4LWJhc2UgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR6LWluZGV4LWJhc2VcbiRtZi16LXByZXZpZXc6ICR6LWluZGV4LXByZXZpZXcgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR6LWluZGV4LXByZXZpZXdcbiRtZi16LWRyb3Bkb3duOiAkei1pbmRleC1kcm9wZG93biAhZGVmYXVsdDsgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR6LWluZGV4LWRyb3Bkb3duXG4kbWYtei1sb2FkaW5nOiAkei1pbmRleC1sb2FkaW5nICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkei1pbmRleC1sb2FkaW5nXG4kbWYtei1vdmVybGF5OiAkei1pbmRleC1vdmVybGF5ICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkei1pbmRleC1vdmVybGF5XG4kbWYtei1tb2RhbDogJHotaW5kZXgtbW9kYWwgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkei1pbmRleC1tb2RhbFxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29tbW9uIFNDU1MgTWl4aW5zXG4vLyBSZXVzYWJsZSBwYXR0ZXJucyBhbmQgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIEltcG9ydCBkZXBlbmRlbmNpZXNcbkBpbXBvcnQgJ2NvbG9ycyc7XG5AaW1wb3J0ICdzcGFjaW5nJztcbkBpbXBvcnQgJ3NoYWRvd3MnO1xuQGltcG9ydCAnYm9yZGVycyc7XG5AaW1wb3J0ICd0cmFuc2l0aW9ucyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJ1dHRvbiBNaXhpbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBSb2JvLWJ1dHRvbiBzdHlsZSAoZ3JlZW4gZ3JhZGllbnQgd2l0aCBob3ZlciBvdmVybGF5KVxuICogVXNlIHRoaXMgZm9yIHByaW1hcnkgYWN0aW9uIGJ1dHRvbnMgYWNyb3NzIHRoZSBzaXRlXG4gKiBOb3RlOiAhaW1wb3J0YW50IG5lZWRlZCB0byBvdmVycmlkZSAuYnRuLmJ0bi1wcmltYXJ5IGluIGFsbC5zY3NzXG4gKiBVc2VzIGJhY2tncm91bmQtaW1hZ2UgKG5vdCBiYWNrZ3JvdW5kIHNob3J0aGFuZCkgc28gYmFja2dyb3VuZC1jb2xvciB3b3JrcyBmb3IgaG92ZXIgYmxlbmRcbiAqL1xuQG1peGluIHJvYm8tYnV0dG9uLXN0eWxlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogJGdyYWRpZW50LW1haW4tYnV0dG9uICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICRjb2xvci13aGl0ZSAhaW1wb3J0YW50O1xuICB0cmFuc2l0aW9uOiAwLjE1cyBlYXNlO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMsXG4gICY6YWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG92ZXJsYXk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2hhZG93IE1peGluc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEFwcGx5IHNoYWRvdyB3aXRoIGxldmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gJGxldmVsIC0gU2hhZG93IGxldmVsICh4cywgc20sIGJhc2UsIG1kLCBsZywgeGwsIDJ4bClcbiAqL1xuQG1peGluIHNoYWRvdygkbGV2ZWw6ICdiYXNlJykge1xuICBAaWYgJGxldmVsID09ICdub25lJyB7IGJveC1zaGFkb3c6ICRzaGFkb3ctbm9uZTsgfVxuICBAZWxzZSBpZiAkbGV2ZWwgPT0gJ3hzJyB7IGJveC1zaGFkb3c6ICRzaGFkb3cteHM7IH1cbiAgQGVsc2UgaWYgJGxldmVsID09ICdzbScgeyBib3gtc2hhZG93OiAkc2hhZG93LXNtOyB9XG4gIEBlbHNlIGlmICRsZXZlbCA9PSAnYmFzZScgeyBib3gtc2hhZG93OiAkc2hhZG93LWJhc2U7IH1cbiAgQGVsc2UgaWYgJGxldmVsID09ICdtZCcgeyBib3gtc2hhZG93OiAkc2hhZG93LW1kOyB9XG4gIEBlbHNlIGlmICRsZXZlbCA9PSAnbGcnIHsgYm94LXNoYWRvdzogJHNoYWRvdy1sZzsgfVxuICBAZWxzZSBpZiAkbGV2ZWwgPT0gJ3hsJyB7IGJveC1zaGFkb3c6ICRzaGFkb3cteGw7IH1cbiAgQGVsc2UgaWYgJGxldmVsID09ICcyeGwnIHsgYm94LXNoYWRvdzogJHNoYWRvdy0yeGw7IH1cbiAgQGVsc2Uge1xuICAgIEB3YXJuIFwiVW5rbm93biBzaGFkb3cgbGV2ZWw6ICN7JGxldmVsfVwiO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctYmFzZTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gR3JhZGllbnQgQm9yZGVyXG4vLyBNYXRjaGVzIHRoZSAuZGF0dGUtZ3JhZGllbnQtYm9yZGVyIC8gLmRhdHRlLWdyYWRpZW50LWJvcmRlci0taCB1dGlsaXR5XG4vLyBjbGFzc2VzIGRlZmluZWQgaW4gc3JjLWNzcy9hbGwvdXRpbGl0aWVzLnNjc3MuXG4vL1xuLy8gVXNlIHRoaXMgbWl4aW4gaW4gY29tcG9uZW50IFNDU1Mgd2hlcmUgeW91IG5lZWQgdGhlIGdyYWRpZW50IGJvcmRlciBvblxuLy8gYSBzdGF0ZS1kcml2ZW4gc2VsZWN0b3IgKGUuZy4sIDpob3ZlciwgLS1zZWxlY3RlZCkgdGhhdCBjYW5ub3QgZWFzaWx5XG4vLyByZWNlaXZlIHRoZSBIVE1MIGNsYXNzLiBGb3Igc3RydWN0dXJhbCBlbGVtZW50cyBwcmVmZXIgdGhlIEhUTUwgY2xhc3MuXG4vL1xuLy8gQHBhcmFtICRkaXJlY3Rpb24gIGdyYWRpZW50IGRpcmVjdGlvbiAgIGRlZmF1bHQ6IHRvIGJvdHRvbSAodmVydGljYWwpXG4vLyAgICAgICAgICAgICAgICAgICAgcGFzcyBgdG8gcmlnaHRgIGZvciBob3Jpem9udGFsIChlLmcuIHNlbGVjdGVkIG9wdGlvbnMpXG4vLyBAcGFyYW0gJGZpbGwgICAgICAgaW50ZXJpb3IgYmcgY29sb3IgICAgZGVmYXVsdDogJGNvbG9yLXdoaXRlXG4vLyAgICAgICAgICAgICAgICAgICAgYWxzbyBhY2NlcHRzIENTUyBjdXN0b20gcHJvcHM6IHZhcigtLW1mLWNvbG9yLWJnLXZlcnktbGlnaHQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIGdyYWRpZW50LWJvcmRlcigkZGlyZWN0aW9uOiB0byBib3R0b20sICRmaWxsOiAkY29sb3Itd2hpdGUpIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoLTEgc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQ6XG4gICAgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI3skZmlsbH0sICN7JGZpbGx9KSBwYWRkaW5nLWJveCxcbiAgICBsaW5lYXItZ3JhZGllbnQoJGRpcmVjdGlvbiwgJGNvbG9yLXByaW1hcnksICRjb2xvci1ncmF5LTkwMCkgYm9yZGVyLWJveDtcbn1cblxuLyoqXG4gKiBDYXJkIHNoYWRvdyB3aXRoIGhvdmVyIGVmZmVjdFxuICogQHBhcmFtIHtib29sZWFufSAkaG92ZXIgLSBFbmFibGUgaG92ZXIgZWZmZWN0IChkZWZhdWx0OiB0cnVlKVxuICovXG5AbWl4aW4gY2FyZC1zaGFkb3coJGhvdmVyOiB0cnVlKSB7XG4gIEBpbmNsdWRlIHNoYWRvdygnbWQnKTtcblxuICBAaWYgJGhvdmVyIHtcbiAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJveC1zaGFkb3cpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBAaW5jbHVkZSBzaGFkb3coJ2xnJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJvZHVjdCBpdGVtIHNoYWRvd1xuICovXG5AbWl4aW4gcHJvZHVjdC1zaGFkb3cge1xuICBAaW5jbHVkZSBzaGFkb3coJ2Jhc2UnKTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihib3gtc2hhZG93KTtcblxuICAmOmhvdmVyIHtcbiAgICBAaW5jbHVkZSBzaGFkb3coJ2xnJyk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRm9jdXMgU3RhdGUgTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRm9jdXMgcmluZyBmb3IgYWNjZXNzaWJpbGl0eVxuICogQHBhcmFtIHtjb2xvcn0gJGNvbG9yIC0gRm9jdXMgcmluZyBjb2xvciAoZGVmYXVsdDogcHJpbWFyeSlcbiAqL1xuQG1peGluIGZvY3VzLXJpbmcoJGNvbG9yOiAkY29sb3ItcHJpbWFyeSkge1xuICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKCRjb2xvciwgMC4zKTtcbn1cblxuLyoqXG4gKiBGb2N1cyB2aXNpYmxlIChvbmx5IG9uIGtleWJvYXJkIGZvY3VzKVxuICovXG5AbWl4aW4gZm9jdXMtdmlzaWJsZSgkY29sb3I6ICRjb2xvci1wcmltYXJ5KSB7XG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgZm9jdXMtcmluZygkY29sb3IpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZpc2liaWxpdHkgTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGlkZGVuIChkaXNwbGF5OiBub25lKVxuICovXG5AbWl4aW4gaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4vKipcbiAqIFZpc3VhbGx5IGhpZGRlbiAoZm9yIHNjcmVlbiByZWFkZXJzKVxuICovXG5AbWl4aW4gc3Itb25seSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYm9yZGVyLXdpZHRoOiAwO1xufVxuXG4vKipcbiAqIE5vdCB2aXN1YWxseSBoaWRkZW4gKHVuZG8gc3Itb25seSlcbiAqL1xuQG1peGluIG5vdC1zci1vbmx5IHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgY2xpcDogYXV0bztcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhdGUgTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRGlzYWJsZWQgc3RhdGVcbiAqL1xuQG1peGluIGRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC42O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLyoqXG4gKiBMb2FkaW5nIHN0YXRlXG4gKi9cbkBtaXhpbiBsb2FkaW5nIHtcbiAgb3BhY2l0eTogMC42O1xuICBjdXJzb3I6IHdhaXQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKipcbiAqIENlbnRlcmVkIHNwaW5uZXIgb24gYSBwb3NpdGlvbmVkIHBhcmVudCDigJQgd2l0aG91dCBhbnkgd2FzaCBvdmVybGF5LlxuICogVXNlcyA6OmFmdGVyIG9ubHk7IHBhcmVudCBtdXN0IGhhdmUgcG9zaXRpb246IHJlbGF0aXZlLlxuICogVXNlIHRoaXMgd2hlbiBlbGVtZW50IGNoaWxkcmVuIGFyZSBoaWRkZW4gdmlhIHZpc2liaWxpdHk6aGlkZGVuIHNvIG5vXG4gKiB3YXNoIGxheWVyIGlzIG5lZWRlZCB0byBtYXNrIHRoZW0uXG4gKlxuICogQHBhcmFtICRzcGlubmVyLWNvbG9yIFZpc2libGUgc3Bpbm5lciBhcmMgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci10cmFjayBGYWludCB0cmFjayByaW5nIGNvbG9yXG4gKiBAcGFyYW0gJHNwaW5uZXItc2l6ZSAgRGlhbWV0ZXIgb2YgdGhlIHNwaW5uZXJcbiAqIEBwYXJhbSAkei1pbmRleCAgICAgICBaLWluZGV4IG9mIHRoZSBzcGlubmVyXG4gKi9cbkBtaXhpbiBsb2FkaW5nLXNwaW5uZXItY2VudGVyZWQoXG4gICRzcGlubmVyLWNvbG9yOiAkY29sb3ItcHJpbWFyeSxcbiAgJHNwaW5uZXItdHJhY2s6IHJnYmEoMCwgMCwgMCwgMC4xKSxcbiAgJHNwaW5uZXItc2l6ZTogMjhweCxcbiAgJHotaW5kZXg6IDEwXG4pIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6ICRzcGlubmVyLXNpemU7XG4gICAgaGVpZ2h0OiAkc3Bpbm5lci1zaXplO1xuICAgIC8vIFVzZSBtYXJnaW4gKG5vdCB0cmFuc2Zvcm0pIGZvciBjZW50ZXJpbmcgc28gdGhlIHNwaW4gYW5pbWF0aW9uJ3NcbiAgICAvLyB0cmFuc2Zvcm06IHJvdGF0ZSgpIGRvZXNuJ3Qgb3ZlcndyaXRlIHRoZSB0cmFuc2xhdGUgYW5kIGNhdXNlIGRyaWZ0LlxuICAgIG1hcmdpbi10b3A6IGNhbGMoI3skc3Bpbm5lci1zaXplfSAvIC0yKTtcbiAgICBtYXJnaW4tbGVmdDogY2FsYygjeyRzcGlubmVyLXNpemV9IC8gLTIpO1xuICAgIGJvcmRlcjogMi41cHggc29saWQgJHNwaW5uZXItdHJhY2s7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogJHNwaW5uZXItY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGFuaW1hdGlvbjogc3BpbiAwLjlzIGxpbmVhciBpbmZpbml0ZTtcbiAgICB6LWluZGV4OiAkei1pbmRleDtcbiAgfVxufVxuXG4vKipcbiAqIExvYWRpbmcgb3ZlcmxheTogc2VtaS10cmFuc3BhcmVudCB3YXNoICsgY2VudGVyZWQgc3Bpbm5lciBvdmVyIGEgcG9zaXRpb25lZCBwYXJlbnQuXG4gKiBQYXJlbnQgbXVzdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSAob3IgYWJzb2x1dGUvZml4ZWQpLlxuICogVXNlcyA6OmJlZm9yZSBmb3IgdGhlIHdhc2ggbGF5ZXIgYW5kIDo6YWZ0ZXIgZm9yIHRoZSBzcGlubmVyICh2aWEgbG9hZGluZy1zcGlubmVyLWNlbnRlcmVkKS5cbiAqIERvIG5vdCBhcHBseSB0byBlbGVtZW50cyB0aGF0IGFscmVhZHkgdXNlIGJvdGggcHNldWRvLWVsZW1lbnRzIGZvciBvdGhlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSAkYmcgICAgICAgICAgICBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB3YXNoIGxheWVyXG4gKiBAcGFyYW0gJHNwaW5uZXItY29sb3IgVmlzaWJsZSBzcGlubmVyIGFyYyBjb2xvclxuICogQHBhcmFtICRzcGlubmVyLXRyYWNrIEZhaW50IHRyYWNrIHJpbmcgY29sb3JcbiAqIEBwYXJhbSAkc3Bpbm5lci1zaXplICBEaWFtZXRlciBvZiB0aGUgc3Bpbm5lclxuICogQHBhcmFtICR6LWluZGV4ICAgICAgIFotaW5kZXggZm9yIHdhc2ggKHNwaW5uZXIgZ2V0cyArMSlcbiAqL1xuQG1peGluIGxvYWRpbmctb3ZlcmxheShcbiAgJGJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpLFxuICAkc3Bpbm5lci1jb2xvcjogJGNvbG9yLXByaW1hcnksXG4gICRzcGlubmVyLXRyYWNrOiByZ2JhKDAsIDAsIDAsIDAuMSksXG4gICRzcGlubmVyLXNpemU6IDI4cHgsXG4gICR6LWluZGV4OiAxMFxuKSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICY6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJhY2tncm91bmQ6ICRiZztcbiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xuICAgIHotaW5kZXg6ICR6LWluZGV4O1xuICB9XG5cbiAgQGluY2x1ZGUgbG9hZGluZy1zcGlubmVyLWNlbnRlcmVkKFxuICAgICRzcGlubmVyLWNvbG9yOiAkc3Bpbm5lci1jb2xvcixcbiAgICAkc3Bpbm5lci10cmFjazogJHNwaW5uZXItdHJhY2ssXG4gICAgJHNwaW5uZXItc2l6ZTogJHNwaW5uZXItc2l6ZSxcbiAgICAkei1pbmRleDogJHotaW5kZXggKyAxXG4gICk7XG59XG5cbi8qKlxuICogSW5saW5lIHNwaW5uZXIgYXBwZW5kZWQgYWZ0ZXIgZWxlbWVudCBjb250ZW50IOKAlCBmb3IgbmF2aWdhdGlvbiBidXR0b25zIGFuZCBsaW5rcy5cbiAqIFVzZXMgOjphZnRlcjsgaW5jb21wYXRpYmxlIHdpdGggZWxlbWVudHMgdGhhdCBhbHJlYWR5IHVzZSA6OmFmdGVyIGZvciBvdGhlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSAkc2l6ZSAgICAgICAgU3Bpbm5lciBkaWFtZXRlclxuICogQHBhcmFtICRjb2xvciAgICAgICBWaXNpYmxlIHNwaW5uZXIgYXJjIGNvbG9yXG4gKiBAcGFyYW0gJHRyYWNrLWNvbG9yIEZhaW50IHRyYWNrIHJpbmcgY29sb3JcbiAqIEBwYXJhbSAkZHVyYXRpb24gICAgT25lLXJvdGF0aW9uIGR1cmF0aW9uXG4gKi9cbkBtaXhpbiBsb2FkaW5nLWlubGluZS1zcGlubmVyKFxuICAkc2l6ZTogMTRweCxcbiAgJGNvbG9yOiB3aGl0ZSxcbiAgJHRyYWNrLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyksXG4gICRkdXJhdGlvbjogMC43c1xuKSB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6ICRzaXplO1xuICAgIGhlaWdodDogJHNpemU7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICR0cmFjay1jb2xvcjtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGFuaW1hdGlvbjogc3BpbiAkZHVyYXRpb24gbGluZWFyIGluZmluaXRlO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRydW5jYXRpb24gTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogVHJ1bmNhdGUgdGV4dCB3aXRoIGVsbGlwc2lzXG4gKi9cbkBtaXhpbiB0cnVuY2F0ZSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKipcbiAqIExpbmUgY2xhbXAgKG11bHRpLWxpbmUgdHJ1bmNhdGlvbilcbiAqIEBwYXJhbSB7bnVtYmVyfSAkbGluZXMgLSBOdW1iZXIgb2YgbGluZXMgdG8gc2hvd1xuICovXG5AbWl4aW4gbGluZS1jbGFtcCgkbGluZXM6IDIpIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogJGxpbmVzO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTY3JvbGxiYXIgTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ3VzdG9tIHNjcm9sbGJhciBzdHlsaW5nXG4gKiBAcGFyYW0ge2NvbG9yfSAkdGh1bWIgLSBTY3JvbGxiYXIgdGh1bWIgY29sb3JcbiAqIEBwYXJhbSB7Y29sb3J9ICR0cmFjayAtIFNjcm9sbGJhciB0cmFjayBjb2xvclxuICovXG5AbWl4aW4gc2Nyb2xsYmFyKCR0aHVtYjogJGNvbG9yLWdyYXktNDAwLCAkdHJhY2s6IHRyYW5zcGFyZW50LCAkd2lkdGg6IDhweCkge1xuICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gIHNjcm9sbGJhci1jb2xvcjogJHRodW1iICR0cmFjaztcblxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICR3aWR0aDtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAkdHJhY2s7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogJHRodW1iO1xuICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtZnVsbDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogZGFya2VuKCR0aHVtYiwgMTAlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUG9zaXRpb25pbmcgTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQWJzb2x1dGUgY2VudGVyXG4gKi9cbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vKipcbiAqIEFic29sdXRlIGNvdmVyIChzdHJldGNoIHRvIGZpbGwgcGFyZW50KVxuICovXG5AbWl4aW4gYWJzb2x1dGUtY292ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLyoqXG4gKiBGaXhlZCBjb3ZlciAoc3RyZXRjaCB0byBmaWxsIHZpZXdwb3J0KVxuICovXG5AbWl4aW4gZml4ZWQtY292ZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxleGJveCBNaXhpbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBGbGV4IGNlbnRlciAoYm90aCBheGVzKVxuICovXG5AbWl4aW4gZmxleC1jZW50ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyoqXG4gKiBGbGV4IGJldHdlZW4gKHNwYWNlLWJldHdlZW4pXG4gKi9cbkBtaXhpbiBmbGV4LWJldHdlZW4ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG5cbi8qKlxuICogRmxleCBjb2x1bW5cbiAqL1xuQG1peGluIGZsZXgtY29sdW1uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gR3JpZCBNaXhpbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBHcmlkIHdpdGggYXV0by1maXQgY29sdW1uc1xuICogQHBhcmFtIHtzaXplfSAkbWluIC0gTWluaW11bSBjb2x1bW4gd2lkdGhcbiAqIEBwYXJhbSB7c2l6ZX0gJG1heCAtIE1heGltdW0gY29sdW1uIHdpZHRoIChkZWZhdWx0OiAxZnIpXG4gKiBAcGFyYW0ge3NpemV9ICRnYXAgLSBHYXAgYmV0d2VlbiBjb2x1bW5zIChkZWZhdWx0OiAkc3BhY2luZy00KVxuICovXG5AbWl4aW4gZ3JpZC1hdXRvLWZpdCgkbWluLCAkbWF4OiAxZnIsICRnYXA6ICRzcGFjaW5nLTQpIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgkbWluLCAkbWF4KSk7XG4gIGdhcDogJGdhcDtcbn1cblxuLyoqXG4gKiBHcmlkIHdpdGggYXV0by1maWxsIGNvbHVtbnNcbiAqIEBwYXJhbSB7c2l6ZX0gJG1pbiAtIE1pbmltdW0gY29sdW1uIHdpZHRoXG4gKiBAcGFyYW0ge3NpemV9ICRtYXggLSBNYXhpbXVtIGNvbHVtbiB3aWR0aCAoZGVmYXVsdDogMWZyKVxuICogQHBhcmFtIHtzaXplfSAkZ2FwIC0gR2FwIGJldHdlZW4gY29sdW1ucyAoZGVmYXVsdDogJHNwYWNpbmctNClcbiAqL1xuQG1peGluIGdyaWQtYXV0by1maWxsKCRtaW4sICRtYXg6IDFmciwgJGdhcDogJHNwYWNpbmctNCkge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgkbWluLCAkbWF4KSk7XG4gIGdhcDogJGdhcDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW1hZ2UgTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogT2JqZWN0IGZpdCBjb3ZlclxuICovXG5AbWl4aW4gaW1nLWNvdmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi8qKlxuICogT2JqZWN0IGZpdCBjb250YWluXG4gKi9cbkBtaXhpbiBpbWctY29udGFpbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFzcGVjdCBSYXRpbyBNaXhpblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEFzcGVjdCByYXRpbyBib3hcbiAqIEBwYXJhbSB7bnVtYmVyfSAkd2lkdGggLSBXaWR0aCByYXRpb1xuICogQHBhcmFtIHtudW1iZXJ9ICRoZWlnaHQgLSBIZWlnaHQgcmF0aW9cbiAqL1xuQG1peGluIGFzcGVjdC1yYXRpbygkd2lkdGgsICRoZWlnaHQpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICY6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy1ib3R0b206IHBlcmNlbnRhZ2UoJGhlaWdodCAvICR3aWR0aCk7XG4gIH1cblxuICA+ICoge1xuICAgIEBpbmNsdWRlIGFic29sdXRlLWNvdmVyO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENsZWFyZml4XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ2xlYXJmaXggZm9yIGZsb2F0c1xuICovXG5AbWl4aW4gY2xlYXJmaXgge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJpbnQgVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGlkZSBpbiBwcmludFxuICovXG5AbWl4aW4gcHJpbnQtaGlkZGVuIHtcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93IG9ubHkgaW4gcHJpbnRcbiAqL1xuQG1peGluIHByaW50LW9ubHkge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVzYWdlIEV4YW1wbGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKlxuLm15LWNhcmQge1xuICBAaW5jbHVkZSBjYXJkLXNoYWRvdzsgICAgICAgICAgICAgLy8gQ2FyZCB3aXRoIGhvdmVyIHNoYWRvd1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHRyYW5zZm9ybSk7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtbWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICB9XG59XG5cbi5teS1pbnB1dCB7XG4gIEBpbmNsdWRlIGZvY3VzLXZpc2libGU7ICAgICAgICAgICAgLy8gQWNjZXNzaWJsZSBmb2N1cyByaW5nXG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZWQ7ICAgICAgICAgICAgICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgfVxufVxuXG4udHJ1bmNhdGVkLXRleHQge1xuICBAaW5jbHVkZSBsaW5lLWNsYW1wKDMpOyAgICAgICAgICAgIC8vIFNob3cgMyBsaW5lcyBtYXhcbn1cblxuLnByb2R1Y3QtZ3JpZCB7XG4gIEBpbmNsdWRlIGdyaWQtYXV0by1maXQoMjUwcHgpOyAgICAgLy8gUmVzcG9uc2l2ZSBncmlkXG59XG5cbi5jZW50ZXJlZC1tb2RhbCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjsgICAgICAgICAgLy8gQ2VudGVyIGluIHZpZXdwb3J0XG59XG4qL1xuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVzaWduIFRva2VucyAtIE1hc3RlciBJbXBvcnRcbi8vIFNpbmdsZSBpbXBvcnQgZm9yIGFsbCB0aGVtZSBkZXNpZ24gdG9rZW5zXG4vL1xuLy8gVXNhZ2U6XG4vLyAgIEBpbXBvcnQgJ2luY2x1ZGVzL3Rva2Vucyc7XG4vL1xuLy8gVGhpcyBnaXZlcyB5b3UgYWNjZXNzIHRvIGFsbCBjb2xvcnMsIHNwYWNpbmcsIHR5cG9ncmFwaHksIHNoYWRvd3MsIGV0Yy5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW1wb3J0IE9yZGVyIChyZXNwZWN0aW5nIGRlcGVuZGVuY2llcylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gMS4gQ29sb3JzIChubyBkZXBlbmRlbmNpZXMpXG5AaW1wb3J0ICdjb2xvcnMnO1xuXG4vLyAyLiBGb250cy9UeXBvZ3JhcGh5IChubyBkZXBlbmRlbmNpZXMpXG5AaW1wb3J0ICdmb250cyc7XG5cbi8vIDMuIFNwYWNpbmcgKG5vIGRlcGVuZGVuY2llcylcbkBpbXBvcnQgJ3NwYWNpbmcnO1xuXG4vLyA0LiBTaGFkb3dzIChkZXBlbmRzIG9uIGNvbG9ycyBmb3Igc2hhZG93IGNvbG9ycylcbkBpbXBvcnQgJ3NoYWRvd3MnO1xuXG4vLyA1LiBCb3JkZXJzIChkZXBlbmRzIG9uIGNvbG9ycyBmb3IgYm9yZGVyIGNvbG9ycylcbkBpbXBvcnQgJ2JvcmRlcnMnO1xuXG4vLyA2LiBNZWRpYSBRdWVyaWVzIChubyBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzIHJlc3BvbnNpdmUgbWl4aW5zKVxuQGltcG9ydCAnbWVkaWEtcXVlcmllcyc7XG5cbi8vIDcuIFRyYW5zaXRpb25zIChubyBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzIGFuaW1hdGlvbiBrZXlmcmFtZXMpXG5AaW1wb3J0ICd0cmFuc2l0aW9ucyc7XG5cbi8vIDguIFotSW5kZXggKG5vIGRlcGVuZGVuY2llcylcbkBpbXBvcnQgJ3otaW5kZXgnO1xuXG4vLyA5LiBNaXhpbnMgKGRlcGVuZHMgb24gbW9zdCB0b2tlbnMgYWJvdmUpXG5AaW1wb3J0ICdtaXhpbnMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUb2tlbiBDYXRlZ29yaWVzIEF2YWlsYWJsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLypcbkFmdGVyIGltcG9ydGluZyB0aGlzIGZpbGUsIHlvdSBoYXZlIGFjY2VzcyB0bzpcblxuQ09MT1JTOlxuLSBQcmltYXJ5IGNvbG9yczogJGNvbG9yLXByaW1hcnksICRjb2xvci1wcmltYXJ5LWxpZ2h0LCAkY29sb3ItcHJpbWFyeS1kYXJrXG4tIEdyYXlzOiAkY29sb3ItZ3JheS01MCB0aHJvdWdoICRjb2xvci1ncmF5LTkwMFxuLSBTZW1hbnRpYzogJGNvbG9yLXN1Y2Nlc3MsICRjb2xvci1kYW5nZXIsICRjb2xvci13YXJuaW5nLCAkY29sb3ItaW5mb1xuLSBCYWNrZ3JvdW5kczogJGJnLXBhZ2UsICRiZy1saWdodCwgJGJnLWRhcmssIGV0Yy5cbi0gVGV4dDogJHRleHQtcHJpbWFyeSwgJHRleHQtc2Vjb25kYXJ5LCAkdGV4dC1tdXRlZCwgZXRjLlxuLSBCb3JkZXJzOiAkYm9yZGVyLWRlZmF1bHQsICRib3JkZXItbGlnaHQsICRib3JkZXItc3Ryb25nXG4tIEdyYWRpZW50czogJGdyYWRpZW50LXByaW1hcnksICRncmFkaWVudC1wcmltYXJ5LWJ1dHRvbiwgZXRjLlxuXG5UWVBPR1JBUEhZOlxuLSBGb250IGZhbWlsaWVzOiAkZm9udC1mYW1pbHktYmFzZSwgJGZvbnQtZmFtaWx5LWhlYWRpbmdcbi0gRm9udCBzaXplczogJGZvbnQtc2l6ZS14cyB0aHJvdWdoICRmb250LXNpemUtNnhsXG4tIEhlYWRpbmcgc2l6ZXM6ICRoMS1zaXplLCAkaDItc2l6ZSwgZXRjLlxuLSBGb250IHdlaWdodHM6ICRmb250LXdlaWdodC1saWdodCB0aHJvdWdoICRmb250LXdlaWdodC1ibGFja1xuLSBMaW5lIGhlaWdodHM6ICRsaW5lLWhlaWdodC10aWdodCwgJGxpbmUtaGVpZ2h0LW5vcm1hbCwgZXRjLlxuXG5TUEFDSU5HOlxuLSBTY2FsZTogJHNwYWNpbmctMCB0aHJvdWdoICRzcGFjaW5nLTMyXG4tIFNlbWFudGljOiAkc3BhY2luZy14cywgJHNwYWNpbmctc20sICRzcGFjaW5nLW1kLCAkc3BhY2luZy1sZywgJHNwYWNpbmcteGxcbi0gQ29tcG9uZW50LXNwZWNpZmljOiAkaW5wdXQtcGFkZGluZy15LCAkYnV0dG9uLXBhZGRpbmcteCwgJGNhcmQtcGFkZGluZywgZXRjLlxuXG5TSEFET1dTOlxuLSBTY2FsZTogJHNoYWRvdy14cyB0aHJvdWdoICRzaGFkb3ctMnhsXG4tIFNlbWFudGljOiAkc2hhZG93LWNhcmQsICRzaGFkb3ctZHJvcGRvd24sICRzaGFkb3ctbW9kYWwsIGV0Yy5cbi0gTWV0aG9kczogQGluY2x1ZGUgc2hhZG93KCdsZycpO1xuXG5CT1JERVJTOlxuLSBSYWRpdXM6ICRyYWRpdXMtbm9uZSB0aHJvdWdoICRyYWRpdXMtZnVsbFxuLSBXaWR0aHM6ICRib3JkZXItd2lkdGgtMSB0aHJvdWdoICRib3JkZXItd2lkdGgtNVxuLSBTdHlsZXM6ICRib3JkZXItZGVmYXVsdC1zdHlsZSwgJGJvcmRlci1mb2N1cy1zdHlsZSwgZXRjLlxuXG5NRURJQSBRVUVSSUVTOlxuLSBCcmVha3BvaW50czogJGJyZWFrcG9pbnQtc20sICRicmVha3BvaW50LW1kLCAkYnJlYWtwb2ludC1sZywgZXRjLlxuLSBNaXhpbnM6IEBpbmNsdWRlIG1lZGlhLW1kIHsgLi4uIH0sIEBpbmNsdWRlIG1lZGlhLWxnIHsgLi4uIH1cblxuVFJBTlNJVElPTlM6XG4tIER1cmF0aW9uczogJGR1cmF0aW9uLWZhc3QsICRkdXJhdGlvbi1iYXNlLCAkZHVyYXRpb24tc2xvd1xuLSBFYXNpbmdzOiAkZWFzZS1pbiwgJGVhc2Utb3V0LCAkZWFzZS1pbi1vdXRcbi0gQ29tcGxldGUgdHJhbnNpdGlvbnM6ICR0cmFuc2l0aW9uLWJ1dHRvbiwgJHRyYW5zaXRpb24tY2FyZCwgZXRjLlxuLSBBbmltYXRpb25zOiAkYW5pbWF0aW9uLXNwaW4sICRhbmltYXRpb24tcHVsc2UsIGV0Yy5cblxuWi1JTkRFWDpcbi0gU2NhbGU6ICR6LWluZGV4LWJhc2UgdGhyb3VnaCAkei1pbmRleC1tYXhcbi0gU2VtYW50aWM6ICR6LWluZGV4LWRyb3Bkb3duLCAkei1pbmRleC1tb2RhbCwgJHotaW5kZXgtdG9vbHRpcCwgZXRjLlxuXG5NSVhJTlM6XG4tIFNoYWRvd3M6IEBpbmNsdWRlIGNhcmQtc2hhZG93LCBAaW5jbHVkZSBwcm9kdWN0LXNoYWRvd1xuLSBGb2N1czogQGluY2x1ZGUgZm9jdXMtcmluZywgQGluY2x1ZGUgZm9jdXMtdmlzaWJsZVxuLSBWaXNpYmlsaXR5OiBAaW5jbHVkZSBzci1vbmx5LCBAaW5jbHVkZSBoaWRkZW5cbi0gU3RhdGVzOiBAaW5jbHVkZSBkaXNhYmxlZCwgQGluY2x1ZGUgbG9hZGluZ1xuLSBUZXh0OiBAaW5jbHVkZSB0cnVuY2F0ZSwgQGluY2x1ZGUgbGluZS1jbGFtcCgzKVxuLSBMYXlvdXQ6IEBpbmNsdWRlIGZsZXgtY2VudGVyLCBAaW5jbHVkZSBhYnNvbHV0ZS1jZW50ZXJcbi0gR3JpZDogQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweClcbi0gQW5kIG1hbnkgbW9yZS4uLlxuKi9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUXVpY2sgUmVmZXJlbmNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKlxuQ29tbW9uIHBhdHRlcm5zOlxuXG4vLyBDYXJkIHdpdGggc2hhZG93XG4uY2FyZCB7XG4gIHBhZGRpbmc6ICRzcGFjaW5nLTQ7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtbWQ7XG4gIEBpbmNsdWRlIGNhcmQtc2hhZG93O1xufVxuXG4vLyBSZXNwb25zaXZlIHRleHRcbi5oZWFkaW5nIHtcbiAgZm9udC1zaXplOiAkaDItc2l6ZS1tb2JpbGU7XG5cbiAgQGluY2x1ZGUgbWVkaWEtbWQge1xuICAgIGZvbnQtc2l6ZTogJGgyLXNpemUtZGVza3RvcDtcbiAgfVxufVxuXG4vLyBCdXR0b25cbi5idXR0b24ge1xuICBwYWRkaW5nOiAkYnV0dG9uLXBhZGRpbmcteSAkYnV0dG9uLXBhZGRpbmcteDtcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1idXR0b247XG4gIGJhY2tncm91bmQ6ICRncmFkaWVudC1wcmltYXJ5LWJ1dHRvbjtcbiAgY29sb3I6ICR0ZXh0LWludmVyc2U7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYmFja2dyb3VuZC1jb2xvciwgJGR1cmF0aW9uLWhvdmVyKTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItcHJpbWFyeS1kYXJrO1xuICB9XG5cbiAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICBAaW5jbHVkZSBmb2N1cy1yaW5nO1xuICB9XG59XG5cbi8vIEdyaWQgbGF5b3V0XG4ucHJvZHVjdC1ncmlkIHtcbiAgQGluY2x1ZGUgZ3JpZC1hdXRvLWZpdCgyNTBweCwgMWZyLCAkc3BhY2luZy00KTtcbn1cblxuLy8gVHJ1bmNhdGVkIHRleHRcbi5kZXNjcmlwdGlvbiB7XG4gIEBpbmNsdWRlIGxpbmUtY2xhbXAoMyk7ICAvLyBTaG93IDMgbGluZXMgbWF4XG59XG4qL1xuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNoYXJlZCBtb2JpbGUgZnVsbC1wYWdlLXRha2VvdmVyIGZvciBjb250ZW50IG1vZGFsc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9uIHBob25lcyAoPD0gNTc1cHgpIGEgbW9kYWwgY292ZXJzIHRoZSBFTlRJUkUgdmlld3BvcnQg4oCUIGluY2x1ZGluZyB0aGUgc2l0ZVxuLy8gaGVhZGVyIOKAlCBpbnN0ZWFkIG9mIHNpdHRpbmcgaW4gYSBjZW50ZXJlZCBjYXJkLiBUaGlzIGlzIHRoZSB1bmlmb3JtIG1vYmlsZVxuLy8gbW9kYWwgYmVoYXZpb3VyIGFjcm9zcyB0aGUgdGhlbWUncyBiaWcgY29udGVudCBtb2RhbHMgKG1vZGVsLWZpbmRlcixcbi8vIGltYWdlLWxpZ2h0Ym94LCBjb25maWd1cmF0b3IsIHBhcnRzLWVucXVpcnkpLlxuLy9cbi8vIFdoeSBmdWxsLXBhZ2UgdGFrZW92ZXI6XG4vLyAgIC0gTm8gZGVwZW5kZW5jeSBvbiBoZWFkZXItaGVpZ2h0IGRldGVjdGlvbiAodGhlIG9sZCBcInNpdCBiZWxvdyB0aGUgaGVhZGVyXCJcbi8vICAgICBhcHByb2FjaCBuZWVkZWQgSlMgdG8gbWVhc3VyZSB0aGUgaGVhZGVyIGFuZCBzdGlsbCBsZXQgaXQgcGVlayB0aHJvdWdoKS5cbi8vICAgLSBNYXhpbXVtIGNvbnRlbnQgYXJlYSBmb3IgYSBmb2N1c2VkIHRhc2s7IHRoZSBtb2RhbCBicmluZ3MgaXRzIG93biBjbG9zZS5cbi8vICAgLSBQdXJlIENTUywgaWRlbnRpY2FsIGZvciB0b3VjaCBkZXZpY2VzIEFORCBkZXNrdG9wIGRldnRvb2xzIG1vYmlsZSBtb2RlXG4vLyAgICAgKE5PVCBnYXRlZCBvbiBob3Zlci9wb2ludGVyIG1lZGlhIGZlYXR1cmVzIOKAlCB0aGF0IGdhdGUgd2FzIHRoZSBidWcgdGhhdFxuLy8gICAgIGxlZnQgbm9uLXRvdWNoIGNvbnRleHRzIHdpdGggYSBoYWxmLXdpZHRoLCBsZWZ0LXBpbm5lZCBzaGVldCkuXG4vL1xuLy8gSGVpZ2h0IHVzZXMgMTAwZHZoIChkeW5hbWljIHZpZXdwb3J0IGhlaWdodCkgc28gaXQgc2hyaW5rcyB3aGVuIHRoZSBvbi1zY3JlZW5cbi8vIGtleWJvYXJkIG9wZW5zICh1bmxpa2Ugc3ZoLCB3aGljaCBzdGF5cyBhdCB0aGUga2V5Ym9hcmQtY2xvc2VkIGhlaWdodCBhbmRcbi8vIHB1c2hlcyBjb250ZW50IGJlaGluZCB0aGUga2V5Ym9hcmQpLiBNb2RhbHMgdGhhdCBydW4gSlMgdmlld3BvcnQtc3luY1xuLy8gKG1vZGVsLWZpbmRlcikgbWF5IG92ZXJyaWRlIHRoZSBkaWFsb2cgaGVpZ2h0IHdpdGggYSB2aXN1YWxWaWV3cG9ydC1kcml2ZW5cbi8vIGN1c3RvbSBwcm9wZXJ0eSBmb3IgcGl4ZWwtYWNjdXJhdGUgaU9TIGtleWJvYXJkIGhhbmRsaW5nIOKAlCB0aGUgMTAwZHZoIGhlcmUgaXNcbi8vIHRoZSBuby1KUyAvIHByZS1KUyBmYWxsYmFjay5cbi8vXG4vLyBVc2FnZSDigJQgaW5jbHVkZSBJTlNJREUgdGhlIG1vZGFsJ3Mgcm9vdCAoYC5tb2RhbGApIHNlbGVjdG9yOlxuLy8gICAuZGF0dGUtaW1hZ2UtbGlnaHRib3ggeyBAaW5jbHVkZSBkYXR0ZS1tb2JpbGUtZnVsbHNjcmVlbi1tb2RhbDsgfVxuLy8gUGFyYW1ldGVycyBsZXQgaXQgYWRhcHQgdG8gdGhlIHRoZW1lJ3MgaGV0ZXJvZ2VuZW91cyBtb2RhbCBtYXJrdXA6XG4vLyAgICRkaWFsb2cgIOKAlCB0aGUgZGlhbG9nIGJveCBzZWxlY3RvciAoZGVmYXVsdCAnLm1vZGFsLWRpYWxvZycpLlxuLy8gICAgICAgICAgICAgIFBhc3MgJyYnIHdoZW4gdGhlIGRpYWxvZyBJUyB0aGUgcm9vdCBlbGVtZW50IChlLmcuICNjb25maWctcG9wdXBcbi8vICAgICAgICAgICAgICBpcyBgLm1vZGFsLm1vZGFsLWRpYWxvZ2Agb24gb25lIGVsZW1lbnQpLlxuLy8gICAkY29udGVudCDigJQgdGhlIGNvbnRlbnQgYm94ICAgKGRlZmF1bHQgJy5tb2RhbC1jb250ZW50JykuXG4vLyAgICRib2R5ICAgIOKAlCB0aGUgc2Nyb2xsYWJsZSBib2R5IChkZWZhdWx0ICcubW9kYWwtYm9keScpLlxuXG5AbWl4aW4gZGF0dGUtbW9iaWxlLWZ1bGxzY3JlZW4tbW9kYWwoXG4gICRkaWFsb2c6ICcubW9kYWwtZGlhbG9nJyxcbiAgJGNvbnRlbnQ6ICcubW9kYWwtY29udGVudCcsXG4gICRib2R5OiAnLm1vZGFsLWJvZHknXG4pIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuXG4gICAgI3skZGlhbG9nfSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgICAgIGluc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAxMDBkdmggIWltcG9ydGFudDtcbiAgICAgIG1heC1oZWlnaHQ6IDEwMGR2aCAhaW1wb3J0YW50O1xuICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgI3skY29udGVudH0ge1xuICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIG1heC1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAvLyBUaGUgYm9keSBpcyB0aGUgc2luZ2xlIHNjcm9sbCBjb250YWluZXIsIHNvIHRoZSBrZXlib2FyZCBjYW4gbmV2ZXIgaGlkZVxuICAgIC8vIHRoZSBjb250ZW50IGJlbG93IGl0IChlLmcuIGEgc3VibWl0L0NUQSBidXR0b24gc3RheXMgcmVhY2hhYmxlKS5cbiAgICAjeyRib2R5fSB7XG4gICAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdHRlIG1vZGFsIOKAlCBiYXNlIHN0eWxlcyBmb3IgdGhlIHVuaWZpZWQgbW9kYWwgc3Vic3lzdGVtXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVGhlIE9ORSBiYXNlIGZvciBldmVyeSB0aGVtZS1vd25lZCBtb2RhbCBlbWl0dGVkIGJ5IGBzbmlwcGV0cy9kYXR0ZV9tb2RhbC50cGxgLlxuLy8gT3duczogdGhlIHNpbmdsZSBjbG9zZSBhZmZvcmRhbmNlIChgLmRhdHRlLW1vZGFsLWNsb3NlYCwgYm90aCBoZWFkZXIgYW5kXG4vLyBjb3JuZXIgc3R5bGVzKSwgdGhlIGhlYWRlciB0cmVhdG1lbnQsIHNpemUgdHVuaW5nLCBhbmQgdGhlIG1vYmlsZSBmdWxsLXBhZ2Vcbi8vIHNoZWV0IChnYXRlZCBvbiB0aGUgYGRhdGEtZGF0dGUtZnVsbHNjcmVlbmAgb3B0LWluIGF0dHJpYnV0ZSBzbyBpdCBpcyBwdXJlIENTU1xuLy8g4oCUIHRoZSBKUyByZWdpc3RyeSBuZXZlciB0b3VjaGVzIGZ1bGxzY3JlZW4pLlxuLy9cbi8vIFBlci1tb2RhbCBsb29rcyBsaXZlIGluIHNtYWxsIGB2YXJpYW50YCBwYXJ0aWFscyAoaW1hZ2UtbGlnaHRib3gsXG4vLyBtZi1wYWdlLW1vZGFsLCDigKYpIEBpbXBvcnRlZCBieSB0aGUgc2FtZSBgZGF0dGUtbW9kYWwuc2Nzc2AgZW50cnksIHNvXG4vLyBldmVyeXRoaW5nIG1vZGFsLXJlbGF0ZWQgY29tcGlsZXMgaW50byB0aGUgb25lIGtub3duIGJ1bmRsZSBkaXN0L2Nzcy9kYXR0ZS1tb2RhbC5jc3MuXG4vL1xuLy8gTk9URTogdGhlIG1vZGFsIGdyb3VwIGxpdmVzIGluIGl0cyBvd24gZm9sZGVyIGBjb21wb25lbnRzL21vZGFsL2A7IHRoaXMgYmFzZSBpc1xuLy8gYF9iYXNlLnNjc3NgLCB0aGUgdmFyaWFudHMgYXJlIGBfPG5hbWU+LnNjc3NgLCBhbmQgdGhlIG9ubHkgbm9uLXVuZGVyc2NvcmUgZmlsZVxuLy8gaXMgdGhlIGNvbXBpbGVkIGVudHJ5IGBkYXR0ZS1tb2RhbC5zY3NzYCAo4oaSIGRpc3QvY3NzL2RhdHRlLW1vZGFsLmNzcykuIFRoZVxuLy8gYGRhdHRlLWAgcHJlZml4IGlzIGRyb3BwZWQgZnJvbSB0aGUgcGFydGlhbCBmaWxlbmFtZXMgYmVjYXVzZSB0aGUgZm9sZGVyXG4vLyBuYW1lc3BhY2VzIHRoZW07IHJ1bnRpbWUgQ1NTIGNsYXNzZXMgc3RheSBgLmRhdHRlLSpgLlxuLy9cbi8vIEBzZWUgZG9jcy9hcmNoaXRlY3R1cmUvbW9kYWxzL3RhcmdldC1hcmNoaXRlY3R1cmUubWQgwqczLjZcblxuQGltcG9ydCBcIi4uLy4uL2luY2x1ZGVzL19pbmNsdWRlc1wiO1xuQGltcG9ydCBcImZ1bGxzY3JlZW5cIjtcblxuLy8gU2hhcmVkIGxvb2sgZm9yIGV2ZXJ5IG1vZGFsIGNsb3NlIGJ1dHRvbi4gV2Ugc3R5bGUgT05MWSB0aGUgcmVhbCBkaXNtaXNzXG4vLyBjb250cm9scyBpbnNpZGUgYSBgLmRhdHRlLW1vZGFsYDogdGhlIHRoZW1lJ3Mgb3duIGJ1dHRvbiAoYC5kYXR0ZS1tb2RhbC1jbG9zZWApXG4vLyBhbmQgdGhlIGxlZ2FjeSBkaXNtaXNzIGJ1dHRvbnMgdGhhdCBlTW9kYWwgLyBxdWlja1ZpZXcgLyBwYXJlbnQgc2hlbGxzIHNoaXAg4oCUXG4vLyBtYXRjaGVkIHZpYSB0aGUgQlMgZGlzbWlzcyBhdHRyaWJ1dGUgKGBkYXRhLWRpc21pc3M9XCJtb2RhbFwiYCwgQlM0O1xuLy8gYGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCJgLCBCUzUtcmVhZHkpIHJhdGhlciB0aGFuIHRoZSBiYXJlIGAuY2xvc2VgIC9cbi8vIGAuY2xvc2UtYnRuYCBjbGFzcy4gVGhhdCB3YXkgYSBmb3JlaWduIHNoZWxsIGNhcnJ5aW5nIGEgYC5jbG9zZWAgZWxlbWVudCBmb3Jcbi8vIHNvbWUgTk9OLWRpc21pc3MgcHVycG9zZSBpcyBub3QgbWlzLXN0eWxlZCBvbmNlIHRoZSBhZGFwdGVyIHN0YW1wc1xuLy8gYC5kYXR0ZS1tb2RhbGAgb250byBpdCAoQTQgcmVjKS5cbi8vXG4vLyBBbGwgb2JzZXJ2ZWQgZGlzbWlzcyBidXR0b25zIHNhdGlzZnkgdGhpczogZU1vZGFsIGA8YnV0dG9uIGNsYXNzPVwieCBjbG9zZVwiXG4vLyBkYXRhLWRpc21pc3M9bW9kYWw+YCwgcXVpY2tWaWV3IGA8YnV0dG9uIGNsYXNzPVwieCBjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+YCxcbi8vIHRoZSBwYXJlbnQgYCNsb2dpbi1wb3B1cGAgYC5jbG9zZS1idG5bZGF0YS1kaXNtaXNzPW1vZGFsXWAsIGFuZCBvdXIgb3duXG4vLyBgLmRhdHRlLW1vZGFsLWNsb3NlW2RhdGEtZGlzbWlzcz1tb2RhbF1gLiBUaGUgYC5kYXR0ZS1tb2RhbC1jbG9zZWAgY2xhc3MgaXNcbi8vIGFsc28gbWF0Y2hlZCBkaXJlY3RseSBzbyB0aGUgdGhlbWUgYnV0dG9uIHN0eWxlcyBldmVuIGlmIGEgZnV0dXJlIHZhcmlhbnRcbi8vIG9taXRzIHRoZSBhdHRyaWJ1dGUuXG4vL1xuLy8gTk9URTogdGhlIGRpc21pc3MtY29udHJvbCBzZWxlY3RvciBsaXN0IGlzIHdyaXR0ZW4gb3V0IGV4cGxpY2l0bHkgYXQgZWFjaCB1c2Vcbi8vIHNpdGUgKG5vdCBhIGAjeyR2YXJ9YCBpbnRlcnBvbGF0aW9uKTogaW50ZXJwb2xhdGluZyBhIGNvbW1hIGxpc3QgaW5zaWRlIGEgcGFyZW50XG4vLyBzZWxlY3RvciBkb2VzIE5PVCBkaXN0cmlidXRlIHRoZSBgLmRhdHRlLW1vZGFsYCBhbmNlc3RvciBvdmVyIGV2ZXJ5IG1lbWJlciDigJQgdGhlXG4vLyBsZWFkaW5nIG1lbWJlciB3b3VsZCBsZWFrIHRvIHRvcC1sZXZlbC4gVGhlIG1peGluIGtlZXBzIHRoZSBhZmZvcmRhbmNlIERSWTsgdGhlXG4vLyBzZWxlY3RvciBsaXN0IGlzIHRoZSBzbWFsbCwgZGVsaWJlcmF0ZSByZXBldGl0aW9uIHRoYXQga2VlcHMgdGhlIG5lc3RpbmcgY29ycmVjdC5cblxuLy8gU2hhcmVkIGxvb2sgZXh0cmFjdGVkIHRvIGEgbWl4aW4gc28gdGhlIHRoZW1lIGJ1dHRvbiBhbmQgdGhlIGFkYXB0ZXItdXBncmFkZWRcbi8vIGZvcmVpZ24gZGlzbWlzcyBidXR0b25zIGdldCB0aGUgaWRlbnRpY2FsIGFmZm9yZGFuY2UgZnJvbSBvbmUgZGVmaW5pdGlvbiAoRFJZKS5cbkBtaXhpbiBkYXR0ZS1tb2RhbC1jbG9zZS1idXR0b24ge1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogJGNvbG9yLWdyYXktNTAwO1xuICBvcGFjaXR5OiAxO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgdHJhbnNpdGlvbjogY29sb3IgJGR1cmF0aW9uLWZhc3QgZWFzZSwgdHJhbnNmb3JtICRkdXJhdGlvbi1mYXN0IGVhc2U7XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkY29sb3ItZ3JheS05MDA7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG59XG5cbi5kYXR0ZS1tb2RhbCB7XG4gIC8vIC0tLS0gTW9iaWxlIGZ1bGwtcGFnZSB0YWtlb3ZlciAob3B0LWluLCBwdXJlIENTUykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFByZXNlbmNlIG9mIGRhdGEtZGF0dGUtZnVsbHNjcmVlbiAocGFydGlhbDogZnVsbHNjcmVlbk1vYmlsZT10cnVlLCBkZWZhdWx0KVxuICAvLyB0dXJucyBvbiB0aGUgc2hhcmVkIG1vYmlsZSBzaGVldC4gSlMtZHJpdmVuIHZpZXdwb3J0LXN5bmMgbW9kYWxzIGFkZGl0aW9uYWxseVxuICAvLyBvdmVycmlkZSB0aGUgZGlhbG9nIGhlaWdodCB2aWEgLS1kYXR0ZS1tb2RhbC1jb250ZW50LWhlaWdodCAoc2VlIGJlbG93KTsgdGhlXG4gIC8vIG1peGluJ3MgMTAwZHZoIGlzIHRoZSBuby1KUyAvIHByZS1KUyBmYWxsYmFjay5cbiAgJltkYXRhLWRhdHRlLWZ1bGxzY3JlZW5dIHtcbiAgICBAaW5jbHVkZSBkYXR0ZS1tb2JpbGUtZnVsbHNjcmVlbi1tb2RhbDtcbiAgfVxuXG4gIC8vIC0tLS0gQ2xvc2UgYWZmb3JkYW5jZSDigJQgdGhlIHNpbmdsZSBzdGFuZGFyZCBidXR0b24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUmVwbGFjZXMgdGhlIElTVCdzIGZpdmUgY2xvc2Ugc3R5bGVzICguY2xvc2UgLyAuY2xvc2UtYnRuIC8gY29ybmVyLVggLyDigKYpLlxuICAvLyBTY29wZWQgdG8gYWN0dWFsIGRpc21pc3MgY29udHJvbHMgKGBbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl1gIC8gdGhlIHRoZW1lJ3NcbiAgLy8gYC5kYXR0ZS1tb2RhbC1jbG9zZWApIHNvIG9ubHkgYnV0dG9ucyB0aGF0IHJlYWxseSBjbG9zZSB0aGUgbW9kYWwgYXJlIHN0eWxlZCDigJRcbiAgLy8gYW4gdXBncmFkZWQgZm9yZWlnbiBzaGVsbCBjYXJyeWluZyBhXG4gIC8vIG5vbi1kaXNtaXNzIGAuY2xvc2VgIGVsZW1lbnQgaXMgbGVmdCBhbG9uZSAoQTQgcmVjKS4gVGhlbWUgbW9kYWxzIGVtaXRcbiAgLy8gYC5kYXR0ZS1tb2RhbC1jbG9zZVtkYXRhLWRpc21pc3M9bW9kYWxdYDsgZm9yZWlnbiBkaXNtaXNzIGJ1dHRvbnMgbWF0Y2ggdmlhXG4gIC8vIHRoZSBgZGF0YS1kaXNtaXNzYCBhdHRyaWJ1dGUgb25jZSB0aGUgYWRhcHRlciBzdGFtcHMgYC5kYXR0ZS1tb2RhbGBcbiAgLy8gKGFkZGl0aXZlLCBKRzMg4oCUIMKnNiBpdGVtIDYpLlxuICAuZGF0dGUtbW9kYWwtY2xvc2UsXG4gIFtkYXRhLWRpc21pc3M9XCJtb2RhbFwiXSxcbiAgW2RhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCJdIHtcbiAgICBAaW5jbHVkZSBkYXR0ZS1tb2RhbC1jbG9zZS1idXR0b247XG4gIH1cblxuICAvLyBIZWFkZXIgc3R5bGU6IHRoZSBjbG9zZSBidXR0b24gc2l0cyBpbnNpZGUgdGhlIC5tb2RhbC1oZWFkZXIsIHJpZ2h0LWFsaWduZWQuXG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIC5kYXR0ZS1tb2RhbC1jbG9zZSxcbiAgICBbZGF0YS1kaXNtaXNzPSdtb2RhbCddLFxuICAgIFtkYXRhLWJzLWRpc21pc3M9J21vZGFsJ10ge1xuICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICBtYXJnaW46IC0wLjVyZW0gLTAuNXJlbSAtMC41cmVtIGF1dG87XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvcm5lciBzdHlsZSAoY2xvc2VTdHlsZT1jb3JuZXIgLyBoZWFkZXI9ZmFsc2UsIGUuZy4gdGhlIG1vZGVsLWZpbmRlcik6XG4gIC8vIGFuIGFic29sdXRlbHktcG9zaXRpb25lZCBYIGluIHRoZSAubW9kYWwtY29udGVudCBjb3JuZXIsIG5vIGhlYWRlciByb3cuXG4gICZbZGF0YS1kYXR0ZS1jbG9zZS1zdHlsZT1cImNvcm5lclwiXSB7XG4gICAgLmRhdHRlLW1vZGFsLWNsb3NlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHNwYWNpbmctMztcbiAgICAgIHJpZ2h0OiAkc3BhY2luZy0zO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmb250LXNpemU6IDEuMzc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb2xvciBUb2tlbnNcbi8vIEFsbCBjb2xvciB2YWx1ZXMgdXNlZCBpbiB0aGUgU25hY2t5cyBDaGlsZCB0aGVtZVxuLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgY29sb3JzIGFjcm9zcyBhbGwgY29tcG9uZW50c1xuLy9cbi8vIE5PVEU6IENTUyBjdXN0b20gcHJvcGVydGllcyAoOnJvb3QgeyAuLi4gfSkgbGl2ZSBpbiBfY3NzLWN1c3RvbS1wcm9wZXJ0aWVzLnNjc3MsXG4vLyBpbXBvcnRlZCBleGFjdGx5IG9uY2UgdmlhIF9pbmNsdWRlcy5zY3NzLiBEbyBOT1QgYWRkIDpyb290IHt9IGhlcmUg4oCUIHRoaXMgZmlsZVxuLy8gaXMgaW1wb3J0ZWQgYnkgbWFueSBwYXJ0aWFscyBhbmQgYW55IENTUyBvdXRwdXQgaGVyZSB3aWxsIGJlIGR1cGxpY2F0ZWQuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJyYW5kL1ByaW1hcnkgQ29sb3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kY29sb3ItcHJpbWFyeTogIzU3ZDA2ZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1haW4gYnJhbmQgY29sb3JcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxNSUpOyAgICAgICAgICAvLyBMaWdodGVyIHZhcmlhbnQgZm9yIGhvdmVyc1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAyNSUpOyAgICAgICAgICAgIC8vIERhcmtlciB2YXJpYW50XG4kY29sb3ItcHJpbWFyeS1kYXJrZXI6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgNTAlKTsgICAgICAgICAgLy8gRGFya2VzdCB2YXJpYW50IGZvciBjb250cmFzdFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBHcmFkaWVudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRncmFkaWVudC1wcmltYXJ5OiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoJGNvbG9yLXByaW1hcnksIDAuOSksICRjb2xvci1wcmltYXJ5LWRhcmtlcik7XG4kZ3JhZGllbnQtcHJpbWFyeS1idXR0b246IGxpbmVhci1ncmFkaWVudCg5MGRlZywgJGNvbG9yLXByaW1hcnksICRjb2xvci1wcmltYXJ5LWRhcmtlcik7XG4kZ3JhZGllbnQtcHJpbWFyeS1kYXJrOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICRjb2xvci1wcmltYXJ5LWRhcmssICRjb2xvci1wcmltYXJ5LWRhcmtlcik7XG4kZ3JhZGllbnQtcHJpbWFyeS1saWdodDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCBsaWdodGVuKCRjb2xvci1wcmltYXJ5LWRhcmssIDE1JSksIGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMzAlKSk7XG5cbi8vIEJ1dHRvbiBncmFkaWVudHNcbiRncmFkaWVudC1idXR0b24tZ3JlZW46IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzE1YTQyZmU1LCAjMDkxZjBkKTsgIC8vIEdyZWVuIGdyYWRpZW50IGZvciBhY3Rpb24gYnV0dG9uc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOZXV0cmFsIENvbG9ycyAoR3JheXMpXG4vLyBDb21wbGV0ZSBncmF5IHNjYWxlIGZvciBjb25zaXN0ZW50IG5ldXRyYWxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kY29sb3Itd2hpdGU6ICNmZmZmZmY7XG4kY29sb3ItYmxhY2s6ICMwMDAwMDA7XG5cbi8vIEdyYXkgc2NhbGUgKDEwMC05MDApXG4kY29sb3ItZ3JheS01MDogI2ZhZmFmYTtcbiRjb2xvci1ncmF5LTEwMDogI2Y2ZjZmNjtcbiRjb2xvci1ncmF5LTIwMDogI2VlZWVlZTtcbiRjb2xvci1ncmF5LTMwMDogI2RkZGRkZDtcbiRjb2xvci1ncmF5LTQwMDogI2NjY2NjYztcbiRjb2xvci1ncmF5LTUwMDogIzk5OTk5OTtcbiRjb2xvci1ncmF5LTYwMDogIzg4ODg4ODtcbiRjb2xvci1ncmF5LTcwMDogIzY2NjY2NjtcbiRjb2xvci1ncmF5LTgwMDogIzU1NTU1NTtcbiRjb2xvci1ncmF5LTkwMDogIzMzMzMzMztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VtYW50aWMgU3RhdGUgQ29sb3JzXG4vLyBDb2xvcnMgd2l0aCBzcGVjaWZpYyBtZWFuaW5nIChzdWNjZXNzLCBlcnJvciwgd2FybmluZywgaW5mbylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRjb2xvci1zdWNjZXNzOiAjMDREMDZDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2VzcyBzdGF0ZVxuJGNvbG9yLWRhbmdlcjogI0ZGNTA0MjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvci9kYW5nZXIgc3RhdGVcbiRjb2xvci13YXJuaW5nOiAjRkZDMDQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FybmluZyBzdGF0ZVxuJGNvbG9yLWluZm86ICM2RkE2RkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmZvIHN0YXRlXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJhY2tncm91bmQgQ29sb3JzIChTZW1hbnRpYyBBbGlhc2VzKVxuLy8gVXNlIHRoZXNlIGZvciBiYWNrZ3JvdW5kcyB0byBtYWtlIGludGVudCBjbGVhclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJGJnLXBhZ2U6ICRjb2xvci13aGl0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWluIHBhZ2UgYmFja2dyb3VuZFxuJGJnLWxpZ2h0OiAkY29sb3ItZ3JheS0yMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaWdodCBiYWNrZ3JvdW5kXG4kYmctbGlnaHRlcjogJGNvbG9yLWdyYXktMTAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpZ2h0ZXIgYmFja2dyb3VuZFxuJGJnLWJveGVkOiAkY29sb3ItZ3JheS0yMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCb3hlZC9jYXJkIGJhY2tncm91bmRzXG4kYmctZGFyazogJGNvbG9yLWdyYXktNzAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhcmsgYmFja2dyb3VuZFxuJGJnLWRhcmtlcjogJGNvbG9yLWdyYXktOTAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXJrZXIgYmFja2dyb3VuZFxuJGJnLWJsYWNrOiAkY29sb3ItZ3JheS05MDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFjayBiYWNrZ3JvdW5kXG5cbi8vIEdyYWRpZW50IGJhY2tncm91bmRzIChzZW1hbnRpYyBhbGlhc2VzKVxuJGJnLWdyYWRpZW50LXByaW1hcnk6ICRncmFkaWVudC1wcmltYXJ5O1xuJGJnLWdyYWRpZW50LWJ1dHRvbjogJGdyYWRpZW50LXByaW1hcnktYnV0dG9uO1xuXG4vLyBTcGVjaWFsIGJhY2tncm91bmRzXG4kYmctcHJvbW8taGVhZGVyOiAjOGEwMDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21vdGlvbiBoZWFkZXIgYmFja2dyb3VuZFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZXh0IENvbG9ycyAoU2VtYW50aWMgQWxpYXNlcylcbi8vIFVzZSB0aGVzZSBmb3IgdGV4dCB0byBtYWtlIGludGVudCBjbGVhclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJHRleHQtcHJpbWFyeTogJGNvbG9yLWdyYXktODAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmltYXJ5IHRleHQgY29sb3IgKCM1NTUpXG4kdGV4dC1zZWNvbmRhcnk6ICRjb2xvci1ncmF5LTcwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlY29uZGFyeSB0ZXh0XG4kdGV4dC1tdXRlZDogJGNvbG9yLWdyYXktNjAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11dGVkL2xpZ2h0ZXIgdGV4dFxuJHRleHQtZGFyazogJGNvbG9yLWdyYXktOTAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXJrIHRleHRcbiR0ZXh0LWludmVyc2U6ICRjb2xvci13aGl0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52ZXJzZSAod2hpdGUgb24gZGFyaylcbiR0ZXh0LWxpbms6ICRjb2xvci1wcmltYXJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGluayBjb2xvclxuJHRleHQtbGluay1ob3ZlcjogJGNvbG9yLXByaW1hcnktbGlnaHQ7ICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5rIGhvdmVyIGNvbG9yXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJvcmRlciBDb2xvcnMgKFNlbWFudGljIEFsaWFzZXMpXG4vLyBVc2UgdGhlc2UgZm9yIGJvcmRlcnMgdG8gbWFrZSBpbnRlbnQgY2xlYXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRib3JkZXItZGVmYXVsdDogJGNvbG9yLWdyYXktMzAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBib3JkZXIgY29sb3IgKCNkZGQpXG4kYm9yZGVyLWxpZ2h0OiAkY29sb3ItZ3JheS0yMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpZ2h0IGJvcmRlclxuJGJvcmRlci1zdHJvbmc6ICNhYWFhYWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJvbmcvZW1waGFzaXplZCBib3JkZXJcbiRib3JkZXItZm9jdXM6ICRjb2xvci1wcmltYXJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9jdXMgc3RhdGUgYm9yZGVyXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRhYmxlIENvbG9yc1xuLy8gU3BlY2lmaWMgY29sb3JzIGZvciB0YWJsZSBzdHJpcGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJGNvbG9yLXRhYmxlLWV2ZW46ICNmZGZhZmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmVuIHJvdyBiYWNrZ3JvdW5kXG4kY29sb3ItdGFibGUtb2RkOiAjZTZlNWRmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9kZCByb3cgYmFja2dyb3VuZFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaGFkb3cgQ29sb3JzXG4vLyBGb3IgY29uc2lzdGVudCBzaGFkb3dzIGFjcm9zcyBjb21wb25lbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kY29sb3Itc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmFzZSBzaGFkb3cgY29sb3JcbiRjb2xvci1zaGFkb3ctaG92ZXI6IHJnYmEoMCwgMCwgMCwgMC4xNSk7ICAgICAgICAgICAgICAgICAgICAvLyBIb3ZlciBzaGFkb3cgY29sb3JcbiRjb2xvci1zaGFkb3ctc3Ryb25nOiByZ2JhKDE0NCwgMTQ0LCAxNDQsIDEpOyAgICAgICAgICAgICAgICAvLyBTdHJvbmcgc2hhZG93ICgjOTA5MDkwKVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBPdmVybGF5IENvbG9yc1xuLy8gRm9yIG1vZGFscywgZHJvcGRvd25zLCBldGMuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kY29sb3Itb3ZlcmxheTogcmdiYSgwLCAwLCAwLCAwLjUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9kYWwvb3ZlcmxheSBiYWNrZHJvcFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb21wb25lbnQtU3BlY2lmaWMgQ29sb3JzXG4vLyBDb2xvcnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gY2VydGFpbiBVSSBwYXR0ZXJuc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRm9jdXMgc3RhdGVzXG4kY29sb3ItZm9jdXMtbGlnaHQ6ICRjb2xvci1ncmF5LTMwMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpZ2h0IGZvY3VzIGJhY2tncm91bmRcblxuLy8gRGlzYWJsZWQgc3RhdGVzXG4kY29sb3ItZGlzYWJsZWQ6ICRjb2xvci1ncmF5LTQwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2FibGVkIGVsZW1lbnRzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExFR0FDWSBWQVJJQUJMRVMgKERFUFJFQ0FURUQpXG4vLyBUaGVzZSBhcmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuLy8gV2lsbCBiZSByZW1vdmVkIGluIHYyLjAgLSBVc2UgdGhlIG5ldyBuYW1pbmcgY29udmVudGlvbiBhYm92ZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBMZWdhY3kgcHJpbWFyeSBjb2xvcnNcbiRjb2xvci1tYWluOiAkY29sb3ItcHJpbWFyeSAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRjb2xvci1wcmltYXJ5XG4kY29sb3ItZGFyazogJGNvbG9yLXByaW1hcnktZGFyayAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkY29sb3ItcHJpbWFyeS1kYXJrXG4kY29sb3ItZGFya2VyOiAkY29sb3ItcHJpbWFyeS1kYXJrZXIgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkY29sb3ItcHJpbWFyeS1kYXJrZXJcbiRjb2xvci10ZXh0OiAkdGV4dC1wcmltYXJ5ICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR0ZXh0LXByaW1hcnlcbiRjb2xvci1saW5rLWhvdmVyOiAkdGV4dC1saW5rLWhvdmVyICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR0ZXh0LWxpbmstaG92ZXJcbiRjb2xvci1iYWNrZ3JvdW5kLWxpZ2h0OiAkYmctbGlnaHQgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRiZy1saWdodFxuXG4vLyBMZWdhY3kgZ3JhZGllbnRzXG4kZ3JhZGllbnQtbWFpbjogJGdyYWRpZW50LXByaW1hcnkgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZ3JhZGllbnQtcHJpbWFyeVxuJGdyYWRpZW50LW1haW4tYnV0dG9uOiAkZ3JhZGllbnQtcHJpbWFyeS1idXR0b24gIWRlZmF1bHQ7ICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGdyYWRpZW50LXByaW1hcnktYnV0dG9uXG4kZ3JhZGllbnQtZGFyazogJGdyYWRpZW50LXByaW1hcnktZGFyayAhZGVmYXVsdDsgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZ3JhZGllbnQtcHJpbWFyeS1kYXJrXG4kZ3JhZGllbnQtbGlnaHQ6ICRncmFkaWVudC1wcmltYXJ5LWxpZ2h0ICFkZWZhdWx0OyAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZ3JhZGllbnQtcHJpbWFyeS1saWdodFxuXG4vLyBMZWdhY3kgc2VtYW50aWMgY29sb3JzIChmcm9tIHhwbHVnaW5fa21fc25hY2t5c19jb25maWcgdGFibGUpXG4kYmFja2dyb3VuZHRleHQ6ICR0ZXh0LWludmVyc2UgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkdGV4dC1pbnZlcnNlXG4kYmdCb3hlZDogJGJnLWJveGVkICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkYmctYm94ZWRcbiRibGFja2JnOiAkYmctYmxhY2sgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRiZy1ibGFja1xuJGJyYW5kOiAkY29sb3ItcHJpbWFyeSAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGNvbG9yLXByaW1hcnlcbiRkYW5nZXI6ICRjb2xvci1kYW5nZXIgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRjb2xvci1kYW5nZXJcbiRkYXJrYmc6ICRiZy1kYXJrICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRiZy1kYXJrXG4kZGFya3RleHQ6ICR0ZXh0LWRhcmsgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkdGV4dC1kYXJrXG4kZGVmYXVsdGJvcmRlcjogJGJvcmRlci1kZWZhdWx0ICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkYm9yZGVyLWRlZmF1bHRcbiRkZWZhdWx0dGV4dDogJHRleHQtcHJpbWFyeSAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR0ZXh0LXByaW1hcnlcbiRncmFkaWVudGJyYW5kOiAkYmctZ3JhZGllbnQtcHJpbWFyeSAhZGVmYXVsdDsgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRiZy1ncmFkaWVudC1wcmltYXJ5XG4kaGVhZGVyUHJvbW9TdHlsZTogJGJnLXByb21vLWhlYWRlciAhZGVmYXVsdDsgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkYmctcHJvbW8taGVhZGVyXG4kaW5mbzogJGNvbG9yLWluZm8gIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkY29sb3ItaW5mb1xuJGxpZ2h0Ymc6ICRiZy1saWdodCAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGJnLWxpZ2h0XG4kbGlnaHRib3JkZXI6ICRib3JkZXItbGlnaHQgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkYm9yZGVyLWxpZ2h0XG4kbGlnaHRmb2N1c2JnOiAkY29sb3ItZm9jdXMtbGlnaHQgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkY29sb3ItZm9jdXMtbGlnaHRcbiRsaWdodHRleHQ6ICR0ZXh0LW11dGVkICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICR0ZXh0LW11dGVkXG4kc3Ryb25nYm9yZGVyOiAkYm9yZGVyLXN0cm9uZyAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkYm9yZGVyLXN0cm9uZ1xuJHN1Y2Nlc3M6ICRjb2xvci1zdWNjZXNzICFkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGNvbG9yLXN1Y2Nlc3NcbiR3YXJuaW5nOiAkY29sb3Itd2FybmluZyAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRjb2xvci13YXJuaW5nXG5cbi8vIExlZ2FjeSBsaXN0IGVsZW1lbnQgY29uZmlnIChub24tY29sb3IsIHNob3VsZCBtb3ZlIHRvIHNlcGFyYXRlIGZpbGUpXG4kbGlzdEVsbUxnOiA0ICFkZWZhdWx0O1xuJGxpc3RFbG1MZ246ICRsaXN0RWxtTGcgIWRlZmF1bHQ7XG4kbGlzdEVsbU1kOiAzICFkZWZhdWx0O1xuJGxpc3RFbG1NZG46ICRsaXN0RWxtTWQgIWRlZmF1bHQ7XG4kbGlzdEVsbVNtOiAzICFkZWZhdWx0O1xuJGxpc3RFbG1TbW46ICRsaXN0RWxtU20gIWRlZmF1bHQ7XG4kbGlzdEVsbVhsOiA1ICFkZWZhdWx0O1xuJGxpc3RFbG1YbG46ICRsaXN0RWxtWGwgIWRlZmF1bHQ7XG4kbGlzdEVsbVhzOiAyICFkZWZhdWx0O1xuJGxpc3RFbG1Yc246ICRsaXN0RWxtWHMgIWRlZmF1bHQ7XG5cbi8vIExlZ2FjeSBsYXlvdXQgY29uZmlnIChub24tY29sb3IsIHNob3VsZCBtb3ZlIHRvIHNlcGFyYXRlIGZpbGUpXG4kbWF4UGFnZVdpZHRocHg6IDEyMDBweCAhZGVmYXVsdDtcbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNwYWNpbmcgVG9rZW5zXG4vLyBDb25zaXN0ZW50IHNwYWNpbmcgc2NhbGUgZm9yIHBhZGRpbmcsIG1hcmdpbiwgYW5kIGdhcHNcbi8vIEJhc2VkIG9uIDhweCBncmlkIHN5c3RlbSAoMXJlbSA9IDE2cHgpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwYWNpbmcgU2NhbGVcbi8vIFVzZSB0aGVzZSBmb3IgcGFkZGluZywgbWFyZ2luLCBnYXAsIGV0Yy5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRzcGFjaW5nLTA6IDA7ICAgICAgICAgICAgICAgICAgICAvLyAwcHhcbiRzcGFjaW5nLTE6IDAuMjVyZW07ICAgICAgICAgICAgICAvLyA0cHhcbiRzcGFjaW5nLTI6IDAuNXJlbTsgICAgICAgICAgICAgICAvLyA4cHhcbiRzcGFjaW5nLTM6IDAuNzVyZW07ICAgICAgICAgICAgICAvLyAxMnB4XG4kc3BhY2luZy00OiAxcmVtOyAgICAgICAgICAgICAgICAgLy8gMTZweFxuJHNwYWNpbmctNTogMS4yNXJlbTsgICAgICAgICAgICAgIC8vIDIwcHhcbiRzcGFjaW5nLTY6IDEuNXJlbTsgICAgICAgICAgICAgICAvLyAyNHB4XG4kc3BhY2luZy03OiAxLjc1cmVtOyAgICAgICAgICAgICAgLy8gMjhweFxuJHNwYWNpbmctODogMnJlbTsgICAgICAgICAgICAgICAgIC8vIDMycHhcbiRzcGFjaW5nLTk6IDIuMjVyZW07ICAgICAgICAgICAgICAvLyAzNnB4XG4kc3BhY2luZy0xMDogMi41cmVtOyAgICAgICAgICAgICAgLy8gNDBweFxuJHNwYWNpbmctMTI6IDNyZW07ICAgICAgICAgICAgICAgIC8vIDQ4cHhcbiRzcGFjaW5nLTE0OiAzLjVyZW07ICAgICAgICAgICAgICAvLyA1NnB4XG4kc3BhY2luZy0xNjogNHJlbTsgICAgICAgICAgICAgICAgLy8gNjRweFxuJHNwYWNpbmctMjA6IDVyZW07ICAgICAgICAgICAgICAgIC8vIDgwcHhcbiRzcGFjaW5nLTI0OiA2cmVtOyAgICAgICAgICAgICAgICAvLyA5NnB4XG4kc3BhY2luZy0zMjogOHJlbTsgICAgICAgICAgICAgICAgLy8gMTI4cHhcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VtYW50aWMgU3BhY2luZyBBbGlhc2VzXG4vLyBVc2UgdGhlc2Ugd2hlbiB0aGUgc3BhY2luZyBoYXMgc3BlY2lmaWMgbWVhbmluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBFeHRyYSBzbWFsbCBzcGFjaW5nXG4kc3BhY2luZy14czogJHNwYWNpbmctMTsgICAgICAgICAgLy8gNHB4XG4kc3BhY2luZy1zbTogJHNwYWNpbmctMjsgICAgICAgICAgLy8gOHB4XG4kc3BhY2luZy1tZDogJHNwYWNpbmctNDsgICAgICAgICAgLy8gMTZweFxuJHNwYWNpbmctbGc6ICRzcGFjaW5nLTY7ICAgICAgICAgIC8vIDI0cHhcbiRzcGFjaW5nLXhsOiAkc3BhY2luZy04OyAgICAgICAgICAvLyAzMnB4XG4kc3BhY2luZy0yeGw6ICRzcGFjaW5nLTEyOyAgICAgICAgLy8gNDhweFxuJHNwYWNpbmctM3hsOiAkc3BhY2luZy0xNjsgICAgICAgIC8vIDY0cHhcblxuLy8gQ29tcG9uZW50LXNwZWNpZmljIHNwYWNpbmdcbiRzcGFjaW5nLWNvbXBvbmVudC1wYWRkaW5nOiAkc3BhY2luZy00OyAgICAgICAgLy8gU3RhbmRhcmQgY29tcG9uZW50IHBhZGRpbmdcbiRzcGFjaW5nLWNvbXBvbmVudC1nYXA6ICRzcGFjaW5nLTM7ICAgICAgICAgICAgLy8gR2FwIGJldHdlZW4gY29tcG9uZW50c1xuJHNwYWNpbmctc2VjdGlvbjogJHNwYWNpbmctMTI7ICAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIHNwYWNpbmdcbiRzcGFjaW5nLXBhZ2U6ICRzcGFjaW5nLTE2OyAgICAgICAgICAgICAgICAgICAgLy8gUGFnZS1sZXZlbCBzcGFjaW5nXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbnRhaW5lci9MYXlvdXQgU3BhY2luZ1xuLy8gRm9yIGxhcmdlciBsYXlvdXQgc3RydWN0dXJlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJGNvbnRhaW5lci1wYWRkaW5nLW1vYmlsZTogJHNwYWNpbmctNDsgICAgICAgICAvLyBNb2JpbGUgY29udGFpbmVyIHBhZGRpbmdcbiRjb250YWluZXItcGFkZGluZy10YWJsZXQ6ICRzcGFjaW5nLTY7ICAgICAgICAgLy8gVGFibGV0IGNvbnRhaW5lciBwYWRkaW5nXG4kY29udGFpbmVyLXBhZGRpbmctZGVza3RvcDogJHNwYWNpbmctODsgICAgICAgIC8vIERlc2t0b3AgY29udGFpbmVyIHBhZGRpbmdcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gR2FwIFV0aWxpdGllc1xuLy8gRm9yIGZsZXhib3gvZ3JpZCBnYXAgdmFsdWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kZ2FwLXhzOiAkc3BhY2luZy0xOyAgICAgICAgICAgICAgLy8gNHB4XG4kZ2FwLXNtOiAkc3BhY2luZy0yOyAgICAgICAgICAgICAgLy8gOHB4XG4kZ2FwLW1kOiAkc3BhY2luZy00OyAgICAgICAgICAgICAgLy8gMTZweFxuJGdhcC1sZzogJHNwYWNpbmctNjsgICAgICAgICAgICAgIC8vIDI0cHhcbiRnYXAteGw6ICRzcGFjaW5nLTg7ICAgICAgICAgICAgICAvLyAzMnB4XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwZWNpZmljIFVzZSBDYXNlc1xuLy8gQ29tbW9uIHNwYWNpbmcgcGF0dGVybnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRpbnB1dC1wYWRkaW5nLXk6ICRzcGFjaW5nLTI7ICAgICAvLyBJbnB1dCB2ZXJ0aWNhbCBwYWRkaW5nICg4cHgpXG4kaW5wdXQtcGFkZGluZy14OiAkc3BhY2luZy0zOyAgICAgLy8gSW5wdXQgaG9yaXpvbnRhbCBwYWRkaW5nICgxMnB4KVxuXG4kYnV0dG9uLXBhZGRpbmcteTogJHNwYWNpbmctMjsgICAgLy8gQnV0dG9uIHZlcnRpY2FsIHBhZGRpbmcgKDhweClcbiRidXR0b24tcGFkZGluZy14OiAkc3BhY2luZy00OyAgICAvLyBCdXR0b24gaG9yaXpvbnRhbCBwYWRkaW5nICgxNnB4KVxuJGJ1dHRvbi1wYWRkaW5nLWxnLXk6ICRzcGFjaW5nLTM7IC8vIExhcmdlIGJ1dHRvbiB2ZXJ0aWNhbCBwYWRkaW5nICgxMnB4KVxuJGJ1dHRvbi1wYWRkaW5nLWxnLXg6ICRzcGFjaW5nLTY7IC8vIExhcmdlIGJ1dHRvbiBob3Jpem9udGFsIHBhZGRpbmcgKDI0cHgpXG5cbiRjYXJkLXBhZGRpbmc6ICRzcGFjaW5nLTQ7ICAgICAgICAvLyBDYXJkIHBhZGRpbmcgKDE2cHgpXG4kY2FyZC1wYWRkaW5nLWxnOiAkc3BhY2luZy02OyAgICAgLy8gTGFyZ2UgY2FyZCBwYWRkaW5nICgyNHB4KVxuXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6ICRzcGFjaW5nLTI7ICAvLyBEcm9wZG93biBpdGVtIHZlcnRpY2FsIHBhZGRpbmdcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteDogJHNwYWNpbmctNDsgIC8vIERyb3Bkb3duIGl0ZW0gaG9yaXpvbnRhbCBwYWRkaW5nXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExFR0FDWSBWQVJJQUJMRVMgKERFUFJFQ0FURUQpXG4vLyBXaWxsIGJlIHJlbW92ZWQgaW4gdjIuMFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTm90ZTogTW9kZWwtZmluZGVyIHVzZWQgdGhlc2UgLSBub3cgbWFwcGVkIHRvIGdsb2JhbCBzcGFjaW5nXG4kbWYtc3BhY2luZy14czogJHNwYWNpbmcteHMgIWRlZmF1bHQ7ICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJHNwYWNpbmcteHNcbiRtZi1zcGFjaW5nLXNtOiAkc3BhY2luZy1zbSAhZGVmYXVsdDsgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkc3BhY2luZy1zbVxuJG1mLXNwYWNpbmctbWQ6ICRzcGFjaW5nLW1kICFkZWZhdWx0OyAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRzcGFjaW5nLW1kXG4kbWYtc3BhY2luZy1sZzogJHNwYWNpbmctbGcgIWRlZmF1bHQ7ICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJHNwYWNpbmctbGdcbiRtZi1zcGFjaW5nLXhsOiAkc3BhY2luZy14bCAhZGVmYXVsdDsgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkc3BhY2luZy14bFxuJG1mLXNwYWNpbmctMnhsOiAkc3BhY2luZy0yeGwgIWRlZmF1bHQ7ICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRzcGFjaW5nLTJ4bFxuJG1mLXNwYWNpbmctM3hsOiAkc3BhY2luZy0zeGwgIWRlZmF1bHQ7ICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRzcGFjaW5nLTN4bFxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdHRlIGltYWdlIGxpZ2h0Ym94IOKAlCB2YXJpYW50IG9mIHRoZSBkYXR0ZS1tb2RhbCBiYXNlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGVyLW1vZGFsIGxvb2sgZm9yIHRoZSBwYXJ0LWltYWdlIHZpZXdlciAoIzIpLiBGb2xkZWQgb3V0IG9mIHRoZSBmb3JtZXJcbi8vIGBfY29udGVudC1tb2RhbC5zY3NzYCBzbyB0aGUgbGlnaHRib3ggbm8gbG9uZ2VyIHJpZGVzIGludG8gdGhlIG1vZGVsLWZpbmRlclxuLy8gYnVuZGxlIHZpYSBhIHRyYW5zaXRpdmUgQGltcG9ydCAoSVNUIMKnTi4zIHJlc29sdmVkKS4gVGhlIGJhc2Vcbi8vIChtb2RhbC9fYmFzZS5zY3NzKSBvd25zIHRoZSBjbG9zZSBidXR0b24gKyBtb2JpbGUgc2hlZXQ7IHRoaXMgb3ducyB0aGVcbi8vIGltYWdlLWZpdCBzaXppbmcgYW5kIHRoZSBmaXQtY29udGVudCBjYXJkLlxuLy9cbi8vIEBzZWUgZG9jcy9hcmNoaXRlY3R1cmUvbW9kYWxzL3RhcmdldC1hcmNoaXRlY3R1cmUubWQgwqczLjYsIMKnNSAoIzIpXG5cbkBpbXBvcnQgXCIuLi8uLi9pbmNsdWRlcy9faW5jbHVkZXNcIjtcblxuLy8gTW9kYWwgdHJpZ2dlciBzdHlsaW5nIChjbGlja2FibGUgaW1hZ2VzIHRoYXQgb3BlbiB0aGUgbGlnaHRib3gpLlxuLmRhdHRlLW1vZGFsLXRyaWdnZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkZHVyYXRpb24tZmFzdCBlYXNlLCBib3gtc2hhZG93ICRkdXJhdGlvbi1mYXN0IGVhc2U7XG5cbiAgJjpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAycHggc29saWQgJGNvbG9yLXByaW1hcnk7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbiAgfVxufVxuXG4uZGF0dGUtbW9kYWwuZGF0dGUtaW1hZ2UtbGlnaHRib3gge1xuICAvLyBPdmVycmlkZSBTbmFja3lzIGRlZmF1bHQgbW9kYWwtZGlhbG9nIHdpZHRoOiAxMDAlIOKAlCB0aGUgY2FyZCBodWdzIHRoZSBpbWFnZS5cbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgbWF4LXdpZHRoOiBmaXQtY29udGVudCAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAxLjc1cmVtIGF1dG87XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tb2RhbC1jb250ZW50IHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLWxnO1xuICAgIGJveC1zaGFkb3c6IDAgMTBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgbWF4LXdpZHRoOiA5MHZ3O1xuICAgIGN1cnNvcjogcG9pbnRlcjsgLy8gVGhlIHdob2xlIGNhcmQgaXMgY2xpY2stdG8tY2xvc2UgKGxpZ2h0Ym94IFVYKS5cbiAgfVxuXG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIHBhZGRpbmc6ICRzcGFjaW5nLTMgJHNwYWNpbmctNDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGNvbG9yLWdyYXktMjAwO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ncmF5LTUwO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuXG4gICAgLm1vZGFsLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAkY29sb3ItZ3JheS04MDA7XG4gICAgfVxuICB9XG5cbiAgLm1vZGFsLWJvZHkge1xuICAgIHBhZGRpbmc6ICRzcGFjaW5nLTQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gIH1cblxuICAvLyBUaGUgbGlnaHRib3ggaW1hZ2Ug4oCUIGNvbnRhaW5lZCB3aXRoaW4gdGhlIG1vZGFsLlxuICAuZGF0dGUtbGlnaHRib3gtaW1hZ2Uge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1heC13aWR0aDogODV2dztcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDgwdmggLSAxMDBweCk7IC8vIGhlYWRlciArIHBhZGRpbmcgKyBtYXJnaW5zXG4gICAgd2lkdGg6IGF1dG87XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDU3NnB4KSB7XG4gICAgLm1vZGFsLWRpYWxvZyB7XG4gICAgICBtYXgtd2lkdGg6IDk1dncgIWltcG9ydGFudDtcbiAgICAgIG1hcmdpbjogMC41cmVtIGF1dG87XG4gICAgfVxuXG4gICAgLm1vZGFsLWhlYWRlciB7XG4gICAgICBwYWRkaW5nOiAkc3BhY2luZy0yICRzcGFjaW5nLTM7XG5cbiAgICAgIC5tb2RhbC10aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubW9kYWwtYm9keSB7XG4gICAgICBwYWRkaW5nOiAkc3BhY2luZy0yO1xuICAgIH1cblxuICAgIC5kYXR0ZS1saWdodGJveC1pbWFnZSB7XG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDkwdmggLSA2MHB4KTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJvcmRlciBUb2tlbnNcbi8vIEJvcmRlciByYWRpdXMsIHdpZHRocywgYW5kIHN0eWxlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCb3JkZXIgUmFkaXVzIFNjYWxlXG4vLyBGb3Igcm91bmRlZCBjb3JuZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kcmFkaXVzLW5vbmU6IDA7XG4kcmFkaXVzLXhzOiAwLjEyNXJlbTsgICAgICAgICAgICAgLy8gMnB4XG4kcmFkaXVzLXNtOiAwLjI1cmVtOyAgICAgICAgICAgICAgLy8gNHB4XG4kcmFkaXVzLWJhc2U6IDAuM3JlbTsgICAgICAgICAgICAgLy8gfjVweCAodGhlbWUgZGVmYXVsdClcbiRyYWRpdXMtbWQ6IDAuMzc1cmVtOyAgICAgICAgICAgICAvLyA2cHhcbiRyYWRpdXMtbGc6IDAuNXJlbTsgICAgICAgICAgICAgICAvLyA4cHhcbiRyYWRpdXMteGw6IDAuNzVyZW07ICAgICAgICAgICAgICAvLyAxMnB4XG4kcmFkaXVzLTJ4bDogMXJlbTsgICAgICAgICAgICAgICAgLy8gMTZweFxuJHJhZGl1cy0zeGw6IDEuNXJlbTsgICAgICAgICAgICAgIC8vIDI0cHhcbiRyYWRpdXMtZnVsbDogOTk5OXB4OyAgICAgICAgICAgICAvLyBGdWxseSByb3VuZGVkIChwaWxscy9jaXJjbGVzKVxuXG4vLyBTZW1hbnRpYyBhbGlhc2VzXG4kcmFkaXVzLWJ1dHRvbjogJHJhZGl1cy1iYXNlOyAgICAgLy8gRGVmYXVsdCBidXR0b24gcmFkaXVzXG4kcmFkaXVzLWNhcmQ6ICRyYWRpdXMtbWQ7ICAgICAgICAgLy8gQ2FyZCBib3JkZXIgcmFkaXVzXG4kcmFkaXVzLWlucHV0OiAkcmFkaXVzLXNtOyAgICAgICAgLy8gSW5wdXQgZmllbGQgcmFkaXVzXG4kcmFkaXVzLWRyb3Bkb3duOiAkcmFkaXVzLW1kOyAgICAgLy8gRHJvcGRvd24gcmFkaXVzXG4kcmFkaXVzLW1vZGFsOiAkcmFkaXVzLWxnOyAgICAgICAgLy8gTW9kYWwgcmFkaXVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJvcmRlciBXaWR0aHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRib3JkZXItd2lkdGgtMDogMDtcbiRib3JkZXItd2lkdGgtMTogMXB4O1xuJGJvcmRlci13aWR0aC0yOiAycHg7XG4kYm9yZGVyLXdpZHRoLTM6IDNweDtcbiRib3JkZXItd2lkdGgtNDogNHB4O1xuJGJvcmRlci13aWR0aC01OiA1cHg7XG5cbi8vIFNlbWFudGljIGFsaWFzZXNcbiRib3JkZXItd2lkdGgtZGVmYXVsdDogJGJvcmRlci13aWR0aC0xO1xuJGJvcmRlci13aWR0aC10aGljazogJGJvcmRlci13aWR0aC0yO1xuJGJvcmRlci13aWR0aC1mb2N1czogJGJvcmRlci13aWR0aC0yO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCb3JkZXIgU3R5bGVzXG4vLyBDb21wbGV0ZSBib3JkZXIgZGVmaW5pdGlvbnMgZm9yIGNvbW1vbiB1c2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEltcG9ydCBjb2xvcnMgZm9yIGJvcmRlciBjb2xvcnNcbkBpbXBvcnQgJ2NvbG9ycyc7XG5cbi8vIFN0YW5kYXJkIGJvcmRlcnNcbiRib3JkZXItZGVmYXVsdC1zdHlsZTogJGJvcmRlci13aWR0aC1kZWZhdWx0IHNvbGlkICRib3JkZXItZGVmYXVsdDtcbiRib3JkZXItbGlnaHQtc3R5bGU6ICRib3JkZXItd2lkdGgtZGVmYXVsdCBzb2xpZCAkYm9yZGVyLWxpZ2h0O1xuJGJvcmRlci1zdHJvbmctc3R5bGU6ICRib3JkZXItd2lkdGgtZGVmYXVsdCBzb2xpZCAkYm9yZGVyLXN0cm9uZztcblxuLy8gRm9jdXMgYm9yZGVyc1xuJGJvcmRlci1mb2N1cy1zdHlsZTogJGJvcmRlci13aWR0aC1mb2N1cyBzb2xpZCAkYm9yZGVyLWZvY3VzO1xuXG4vLyBTdGF0ZSBib3JkZXJzXG4kYm9yZGVyLWVycm9yLXN0eWxlOiAkYm9yZGVyLXdpZHRoLWRlZmF1bHQgc29saWQgJGNvbG9yLWRhbmdlcjtcbiRib3JkZXItc3VjY2Vzcy1zdHlsZTogJGJvcmRlci13aWR0aC1kZWZhdWx0IHNvbGlkICRjb2xvci1zdWNjZXNzO1xuJGJvcmRlci13YXJuaW5nLXN0eWxlOiAkYm9yZGVyLXdpZHRoLWRlZmF1bHQgc29saWQgJGNvbG9yLXdhcm5pbmc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwZWNpYWwgQm9yZGVyIFBhdHRlcm5zXG4vLyBDb21wb25lbnQtc3BlY2lmaWMgYm9yZGVyIHBhdHRlcm5zIGZvdW5kIGluIHRoZW1lXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIDMtY29ybmVyIHJhZGl1cyAobW9kZWwtZmluZGVyIHNwZWNpZmljIHBhdHRlcm4pXG4vLyBSb3VuZHMgMyBjb3JuZXJzLCBrZWVwcyBvbmUgc3F1YXJlXG4kcmFkaXVzLTMtY29ybmVyLXRsOiAkcmFkaXVzLWxnOyAgLy8gVG9wLWxlZnRcbiRyYWRpdXMtMy1jb3JuZXItdHI6ICRyYWRpdXMtbGc7ICAvLyBUb3AtcmlnaHRcbiRyYWRpdXMtMy1jb3JuZXItYnI6ICRyYWRpdXMtbm9uZTsgLy8gQm90dG9tLXJpZ2h0IChzcXVhcmUpXG4kcmFkaXVzLTMtY29ybmVyLWJsOiAkcmFkaXVzLWxnOyAgLy8gQm90dG9tLWxlZnRcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTEVHQUNZIFZBUklBQkxFUyAoREVQUkVDQVRFRClcbi8vIFdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb2RlbC1maW5kZXIgYm9yZGVyIHJhZGl1cyAtIG5vdyBtYXBwZWQgdG8gZ2xvYmFsXG4kbWYtcmFkaXVzLW5vbmU6ICRyYWRpdXMtbm9uZSAhZGVmYXVsdDsgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRyYWRpdXMtbm9uZVxuJG1mLXJhZGl1cy1zbWFsbDogJHJhZGl1cy1zbSAhZGVmYXVsdDsgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkcmFkaXVzLXNtXG4kbWYtcmFkaXVzLW1lZGl1bTogJHJhZGl1cy1tZCAhZGVmYXVsdDsgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRyYWRpdXMtbWRcbiRtZi1yYWRpdXMtbGFyZ2U6ICRyYWRpdXMtbGcgIWRlZmF1bHQ7ICAgICAgICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJHJhZGl1cy1sZ1xuJG1mLXJhZGl1cy14bDogJHJhZGl1cy14bCAhZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkcmFkaXVzLXhsXG4kbWYtcmFkaXVzLWZ1bGw6ICRyYWRpdXMtZnVsbCAhZGVmYXVsdDsgICAgICAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRyYWRpdXMtZnVsbFxuJG1mLXJhZGl1cy0zLWNvcm5lcjogJHJhZGl1cy0zLWNvcm5lci10bCAkcmFkaXVzLTMtY29ybmVyLXRyICRyYWRpdXMtMy1jb3JuZXItYnIgJHJhZGl1cy0zLWNvcm5lci1ibCAhZGVmYXVsdDsgLy8gQGRlcHJlY2F0ZWRcbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFR5cG9ncmFwaHkgVG9rZW5zXG4vLyBGb250IGZhbWlsaWVzLCBzaXplcywgd2VpZ2h0cywgYW5kIGxpbmUgaGVpZ2h0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGb250IEZhbWlsaWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kZm9udC1mYW1pbHktYmFzZTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgXCJOb3RvIFNhbnNcIiwgc2Fucy1zZXJpZiwgXCJBcHBsZSBDb2xvciBFbW9qaVwiLCBcIlNlZ29lIFVJIEVtb2ppXCIsIFwiU2Vnb2UgVUkgU3ltYm9sXCIsIFwiTm90byBDb2xvciBFbW9qaVwiO1xuJGZvbnQtZmFtaWx5LWhlYWRpbmc6ICRmb250LWZhbWlseS1iYXNlO1xuJGZvbnQtZmFtaWx5LW1vbm86IFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJMaWJlcmF0aW9uIE1vbm9cIiwgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZvbnQgU2l6ZXNcbi8vIFNjYWxlIGJhc2VkIG9uIDE2cHggYmFzZSAoMXJlbSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRmb250LXNpemUteHM6IDAuNzVyZW07ICAgICAgICAgICAvLyAxMnB4XG4kZm9udC1zaXplLXNtOiAwLjg3NXJlbTsgICAgICAgICAgLy8gMTRweFxuJGZvbnQtc2l6ZS1iYXNlOiAxcmVtOyAgICAgICAgICAgIC8vIDE2cHggKGRlZmF1bHQpXG4kZm9udC1zaXplLW1kOiAxcmVtOyAgICAgICAgICAgICAgLy8gMTZweCAoYWxpYXMpXG4kZm9udC1zaXplLWxnOiAxLjEyNXJlbTsgICAgICAgICAgLy8gMThweFxuJGZvbnQtc2l6ZS14bDogMS4yNXJlbTsgICAgICAgICAgIC8vIDIwcHhcbiRmb250LXNpemUtMnhsOiAxLjVyZW07ICAgICAgICAgICAvLyAyNHB4XG4kZm9udC1zaXplLTN4bDogMS44NzVyZW07ICAgICAgICAgLy8gMzBweFxuJGZvbnQtc2l6ZS00eGw6IDIuMjVyZW07ICAgICAgICAgIC8vIDM2cHhcbiRmb250LXNpemUtNXhsOiAzcmVtOyAgICAgICAgICAgICAvLyA0OHB4XG4kZm9udC1zaXplLTZ4bDogMy43NXJlbTsgICAgICAgICAgLy8gNjBweFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWFkaW5nIFNpemVzXG4vLyBSZXNwb25zaXZlIHR5cG9ncmFwaHkgLSBtb2JpbGUgZmlyc3Rcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTW9iaWxlIGhlYWRpbmcgc2l6ZXMgKGRlZmF1bHQpXG4kaDEtc2l6ZS1tb2JpbGU6IDEuOHJlbTsgICAgICAgICAgLy8gfjI5cHhcbiRoMi1zaXplLW1vYmlsZTogMS42cmVtOyAgICAgICAgICAvLyB+MjZweFxuJGgzLXNpemUtbW9iaWxlOiAxLjRyZW07ICAgICAgICAgIC8vIH4yMnB4XG4kaDQtc2l6ZS1tb2JpbGU6IDEuMnJlbTsgICAgICAgICAgLy8gfjE5cHhcbiRoNS1zaXplLW1vYmlsZTogMS4xcmVtOyAgICAgICAgICAvLyB+MThweFxuJGg2LXNpemUtbW9iaWxlOiAxcmVtOyAgICAgICAgICAgIC8vIDE2cHhcblxuLy8gRGVza3RvcCBoZWFkaW5nIHNpemVzIChmb3IgbGFyZ2VyIHNjcmVlbnMpXG4kaDEtc2l6ZS1kZXNrdG9wOiAyLjJyZW07ICAgICAgICAgLy8gfjM1cHhcbiRoMi1zaXplLWRlc2t0b3A6IDEuOXJlbTsgICAgICAgICAvLyB+MzBweFxuJGgzLXNpemUtZGVza3RvcDogMS42cmVtOyAgICAgICAgIC8vIH4yNnB4XG4kaDQtc2l6ZS1kZXNrdG9wOiAxLjNyZW07ICAgICAgICAgLy8gfjIxcHhcbiRoNS1zaXplLWRlc2t0b3A6IDEuMTVyZW07ICAgICAgICAvLyB+MThweFxuJGg2LXNpemUtZGVza3RvcDogMXJlbTsgICAgICAgICAgIC8vIDE2cHhcblxuLy8gSGVhZGluZyBzaXplcyAodXNlIG1vYmlsZSBieSBkZWZhdWx0KVxuJGgxLXNpemU6ICRoMS1zaXplLW1vYmlsZTtcbiRoMi1zaXplOiAkaDItc2l6ZS1tb2JpbGU7XG4kaDMtc2l6ZTogJGgzLXNpemUtbW9iaWxlO1xuJGg0LXNpemU6ICRoNC1zaXplLW1vYmlsZTtcbiRoNS1zaXplOiAkaDUtc2l6ZS1tb2JpbGU7XG4kaDYtc2l6ZTogJGg2LXNpemUtbW9iaWxlO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGb250IFdlaWdodHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiRmb250LXdlaWdodC1saWdodDogMzAwO1xuJGZvbnQtd2VpZ2h0LW5vcm1hbDogNDAwO1xuJGZvbnQtd2VpZ2h0LW1lZGl1bTogNTAwO1xuJGZvbnQtd2VpZ2h0LXNlbWlib2xkOiA2MDA7XG4kZm9udC13ZWlnaHQtYm9sZDogNzAwO1xuJGZvbnQtd2VpZ2h0LWV4dHJhYm9sZDogODAwO1xuJGZvbnQtd2VpZ2h0LWJsYWNrOiA5MDA7XG5cbi8vIFNlbWFudGljIGFsaWFzZXNcbiRmb250LXdlaWdodC1oZWFkaW5nOiAkZm9udC13ZWlnaHQtYm9sZDtcbiRmb250LXdlaWdodC1ib2R5OiAkZm9udC13ZWlnaHQtbm9ybWFsO1xuJGZvbnQtd2VpZ2h0LWJ1dHRvbjogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMaW5lIEhlaWdodHNcbi8vIEZvciBvcHRpbWFsIHJlYWRhYmlsaXR5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4kbGluZS1oZWlnaHQtbm9uZTogMTtcbiRsaW5lLWhlaWdodC10aWdodDogMS4yNTtcbiRsaW5lLWhlaWdodC1zbnVnOiAxLjM3NTtcbiRsaW5lLWhlaWdodC1ub3JtYWw6IDEuNTtcbiRsaW5lLWhlaWdodC1yZWxheGVkOiAxLjYyNTtcbiRsaW5lLWhlaWdodC1sb29zZTogMS43NTtcbiRsaW5lLWhlaWdodC1leHRyYS1sb29zZTogMjtcblxuLy8gU2VtYW50aWMgYWxpYXNlc1xuJGxpbmUtaGVpZ2h0LWhlYWRpbmc6ICRsaW5lLWhlaWdodC10aWdodDtcbiRsaW5lLWhlaWdodC1ib2R5OiAkbGluZS1oZWlnaHQtbm9ybWFsO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMZXR0ZXIgU3BhY2luZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJGxldHRlci1zcGFjaW5nLXRpZ2h0ZXI6IC0wLjA1ZW07XG4kbGV0dGVyLXNwYWNpbmctdGlnaHQ6IC0wLjAyNWVtO1xuJGxldHRlci1zcGFjaW5nLW5vcm1hbDogMDtcbiRsZXR0ZXItc3BhY2luZy13aWRlOiAwLjAyNWVtO1xuJGxldHRlci1zcGFjaW5nLXdpZGVyOiAwLjA1ZW07XG4kbGV0dGVyLXNwYWNpbmctd2lkZXN0OiAwLjFlbTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTEVHQUNZIFZBUklBQkxFUyAoREVQUkVDQVRFRClcbi8vIFdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb2RlbC1maW5kZXIgdHlwb2dyYXBoeSB0b2tlbnMgLSBub3cgbWFwcGVkIHRvIGdsb2JhbFxuJG1mLWZvbnQtc2l6ZS14czogJGZvbnQtc2l6ZS14cyAhZGVmYXVsdDsgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZm9udC1zaXplLXhzXG4kbWYtZm9udC1zaXplLXNtOiAkZm9udC1zaXplLXNtICFkZWZhdWx0OyAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRmb250LXNpemUtc21cbiRtZi1mb250LXNpemUtbWQ6ICRmb250LXNpemUtbWQgIWRlZmF1bHQ7ICAgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGZvbnQtc2l6ZS1tZFxuJG1mLWZvbnQtc2l6ZS1sZzogJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDsgICAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZm9udC1zaXplLWxnXG4kbWYtZm9udC1zaXplLXhsOiAkZm9udC1zaXplLXhsICFkZWZhdWx0OyAgICAgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRmb250LXNpemUteGxcbiRtZi1mb250LXNpemUtMnhsOiAkZm9udC1zaXplLTJ4bCAhZGVmYXVsdDsgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGZvbnQtc2l6ZS0yeGxcbiRtZi1mb250LXNpemUtM3hsOiAkZm9udC1zaXplLTN4bCAhZGVmYXVsdDsgICAgICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGZvbnQtc2l6ZS0zeGxcblxuJG1mLWZvbnQtd2VpZ2h0LWxpZ2h0OiAkZm9udC13ZWlnaHQtbGlnaHQgIWRlZmF1bHQ7ICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZm9udC13ZWlnaHQtbGlnaHRcbiRtZi1mb250LXdlaWdodC1ub3JtYWw6ICRmb250LXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7ICAgICAvLyBAZGVwcmVjYXRlZCBVc2UgJGZvbnQtd2VpZ2h0LW5vcm1hbFxuJG1mLWZvbnQtd2VpZ2h0LW1lZGl1bTogJGZvbnQtd2VpZ2h0LW1lZGl1bSAhZGVmYXVsdDsgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZm9udC13ZWlnaHQtbWVkaXVtXG4kbWYtZm9udC13ZWlnaHQtc2VtaWJvbGQ6ICRmb250LXdlaWdodC1zZW1pYm9sZCAhZGVmYXVsdDsgLy8gQGRlcHJlY2F0ZWQgVXNlICRmb250LXdlaWdodC1zZW1pYm9sZFxuJG1mLWZvbnQtd2VpZ2h0LWJvbGQ6ICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0OyAgICAgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkZm9udC13ZWlnaHQtYm9sZFxuXG4kbWYtbGluZS1oZWlnaHQtdGlnaHQ6ICRsaW5lLWhlaWdodC10aWdodCAhZGVmYXVsdDsgICAgICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRsaW5lLWhlaWdodC10aWdodFxuJG1mLWxpbmUtaGVpZ2h0LW5vcm1hbDogJGxpbmUtaGVpZ2h0LW5vcm1hbCAhZGVmYXVsdDsgICAgIC8vIEBkZXByZWNhdGVkIFVzZSAkbGluZS1oZWlnaHQtbm9ybWFsXG4kbWYtbGluZS1oZWlnaHQtcmVsYXhlZDogJGxpbmUtaGVpZ2h0LXJlbGF4ZWQgIWRlZmF1bHQ7ICAgLy8gQGRlcHJlY2F0ZWQgVXNlICRsaW5lLWhlaWdodC1yZWxheGVkXG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGF0dGUgbW9kZWwtZmluZGVyIHBhZ2UgbW9kYWwg4oCUIHZhcmlhbnQgb2YgdGhlIGRhdHRlLW1vZGFsIGJhc2Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQZXItbW9kYWwgbG9vayBmb3IgdGhlIG1vZGVsLWZpbmRlciBjYXRhbG9nIG1vZGFsICgjMSkuIFRoZSBiYXNlXG4vLyAobW9kYWwvX2Jhc2Uuc2Nzcykgbm93IG93bnMgdGhlIGNvcm5lciBjbG9zZSBidXR0b24gKGNsb3NlU3R5bGU9Y29ybmVyKSBhbmRcbi8vIHRoZSBtb2JpbGUgZnVsbC1wYWdlIHNoZWV0IChkYXRhLWRhdHRlLWZ1bGxzY3JlZW4gKyB0aGUgc2hhcmVkIG1peGluKSwgc28gdGhlXG4vLyB+OTAgaW5saW5lIGAhaW1wb3J0YW50YCBtb2JpbGUgbGluZXMgdGhhdCBsaXZlZCBpblxuLy8gbW9kZWwtZmluZGVyL21vZGVsLWZpbmRlci1wYWdlLW1vZGFsLnNjc3MgYXJlIEdPTkUgKHRhcmdldCBHOSkuIFdoYXQgcmVtYWluc1xuLy8gaGVyZSBpcyBnZW51aW5lbHkgTUYtc3BlY2lmaWM6IHRoZSBkZXNrdG9wIHNpemUgY3VzdG9tLXByb3BzLCB0aGUgZGVza3RvcFxuLy8gZmlsbC1oZWlnaHQgbGF5b3V0LCBhbmQgdGhlIGZpbmRlciBwcmV2aWV3IGxvb2suXG4vL1xuLy8gQ3VzdG9tIHByb3BzIGFyZSBuYW1lc3BhY2VkIGAtLWRhdHRlLW1vZGFsLSpgICh3YXMgYC0tbWYtbW9kYWwtKmApIHNvXG4vLyBtb2RhbC12aWV3cG9ydC1zeW5jLnRzIHJlYWRzIHRoZSBzYW1lIG5hbWVzIGV2ZXJ5d2hlcmUgKHRhcmdldCDCpzMuMi4xLCBGRy02KS5cbi8vXG4vLyBAc2VlIGRvY3MvYXJjaGl0ZWN0dXJlL21vZGFscy90YXJnZXQtYXJjaGl0ZWN0dXJlLm1kIMKnMy42LCDCpzUgKCMxKVxuXG5AaW1wb3J0IFwiLi4vLi4vaW5jbHVkZXMvX2luY2x1ZGVzXCI7XG5cbi5kYXR0ZS1tb2RhbC5kYXR0ZS1tZi1wYWdlLW1vZGFsIHtcbiAgei1pbmRleDogMTA1MDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBTaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgZGVza3RvcCBtb2RhbCBzaXplLlxuICAvLyBXaWR0aCBtaXJyb3JzIHRoZSBwYXJlbnQgLm13LWNvbnRhaW5lciBjb250ZW50IHdpZHRoICgxNDAwcHgpICsgYSB0aWNrLiBUaGVcbiAgLy8gU25hY2t5cyBwYXJlbnQgZXhwb3J0cyBubyB2YXJpYWJsZSBmb3IgLm13LWNvbnRhaW5lciwgc28gcmUtc3luYyBieSBoYW5kIGlmXG4gIC8vIHRoZSBwYXJlbnQgY29udGVudCB3aWR0aCBldmVyIGNoYW5nZXMuIG1vZGFsLXZpZXdwb3J0LXN5bmMudHMgcmVhZHNcbiAgLy8gLS1kYXR0ZS1tb2RhbC1tYXgtaGVpZ2h0IGZvciB0aGUgSlMtZHJpdmVuIGhlaWdodCBzbyB0aGUgY2FwIGxpdmVzIG9ubHkgaGVyZS5cbiAgLS1kYXR0ZS1tb2RhbC1tYXgtd2lkdGg6IDE1MDBweDtcbiAgLS1kYXR0ZS1tb2RhbC1tYXgtaGVpZ2h0OiA5MDBweDtcblxuICAmLm1vZGFsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxuXG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtYXJnaW46IDFyZW0gYXV0bztcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMnJlbSk7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cy1sZztcbiAgICBtYXgtd2lkdGg6IG1pbig5NHZ3LCB2YXIoLS1kYXR0ZS1tb2RhbC1tYXgtd2lkdGgsIDE1MDBweCkpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogbWluKDkwdncsIDMyMHB4KTtcblxuICAgIC8vIEJlbG93IDkwMHB4IHRoZSBtb2RhbCBtdXN0IE5PVCBuYXJyb3cg4oCUIGl0IGZpdHMgdGhlIHZpZXdwb3J0IChEMjEpLiBUaGVcbiAgICAvLyBmaW5kZXIgaXMgY29udGVudC1yaWNoLCBzbyBpdCB1c2VzIGFsbW9zdCB0aGUgZnVsbCB3aWR0aCBhY3Jvc3MgdGhlIHdob2xlXG4gICAgLy8gc3ViLTkwMCBiYW5kIChubyBzaHJpbmtpbmctd2lkdGggcnVsZSksIGtlZXBpbmcgdGhlIDk0dncgcmh5dGhtIG9mIHRoZVxuICAgIC8vIGRlc2t0b3AgcnVsZSBhYm92ZS4gVGhlIGRyb3Bkb3du4oaUdHJhY2sgc3dpdGNoIGlzIGRyaXZlbiBwdXJlbHkgYnkgdGhlXG4gICAgLy8gZmluZGVyJ3MgT1dOIGNvbnRhaW5lciBxdWVyeSAoRDE5KSwgaW5kZXBlbmRlbnQgb2YgdGhlIG1vZGFsIHdpZHRoLlxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xuICAgICAgbWF4LXdpZHRoOiA5NHZ3O1xuICAgIH1cbiAgfVxuXG4gIC5tb2RhbC1jb250ZW50IHtcbiAgICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLWxnO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogdmFyKC0tZGF0dGUtbW9kYWwtY29udGVudC1oZWlnaHQsIG1pbihjYWxjKDEwMHN2aCAtIDJyZW0pLCB2YXIoLS1kYXR0ZS1tb2RhbC1tYXgtaGVpZ2h0LCA5MDBweCkpKTtcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS1kYXR0ZS1tb2RhbC1jb250ZW50LWhlaWdodCwgbWluKGNhbGMoMTAwc3ZoIC0gMnJlbSksIHZhcigtLWRhdHRlLW1vZGFsLW1heC1oZWlnaHQsIDkwMHB4KSkpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2hhZG93OiAwIDEwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIH1cblxuICAubW9kYWwtYm9keSB7XG4gICAgcGFkZGluZzogJHNwYWNpbmctNDtcbiAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmctNTtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgICB0b3VjaC1hY3Rpb246IHBhbi15O1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xuICB9XG59XG5cbi8vIEZpbmRlciBjb250ZW50IGxvb2sgaW5zaWRlIHRoZSBtb2RhbCBib2R5ICh1bmNoYW5nZWQgZnJvbSB0aGUgb2xkIE1GIHNjc3MpLlxuLmRhdHRlLW1mLXBhZ2UtbW9kYWwgLm1vZGFsLWJvZHkge1xuICAuZGF0dGUtbW9kZWwtZmluZGVyLXBhZ2Uge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgbWluLWhlaWdodDogMDtcblxuICAgIC5kYXR0ZS1tZi1wYWdlLWhlYWRlciB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA0NXB4O1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1NzVweCkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6ICRzcGFjaW5nLTM7XG5cbiAgICAgIC5kYXR0ZS1tZi1wYWdlLWhlYWRlciB7XG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICA+ICoge1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkIHtcbiAgICB0b3VjaC1hY3Rpb246IHBhbi15O1xuICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBpbWcsXG4gICAgICAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWF4LWhlaWdodDogbWluKDIyc3ZoLCAxODBweCk7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZSB7XG4gICAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcbiAgICAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWNhcmQsXG4gICAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldyxcbiAgICAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWNvbHVtbixcbiAgICAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LXdyYXBwZXIge1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuXG4gICAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkIHtcbiAgICAgIHBhZGRpbmc6ICRzcGFjaW5nLTM7XG4gICAgfVxuXG4gICAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkOmhhcyguZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlW3NyYz1cIlwiXSksXG4gICAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1jYXJkOm5vdCg6aGFzKC5kYXR0ZS1tZi1wYWdlLXByZXZpZXctaW1hZ2UpKSxcbiAgICAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWNhcmQ6bm90KDpoYXMoaW1nKSkge1xuICAgICAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZS13cmFwcGVyLFxuICAgICAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZSxcbiAgICAgIGltZyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3LWltYWdlLXdyYXBwZXI6ZW1wdHksXG4gICAgLmRhdHRlLW1mLXBhZ2UtcHJldmlldy1pbWFnZVtzcmM9XCJcIl0ge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG4uZGF0dGUtbWYtbW9kYWwtbG9hZGluZyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtaW4taGVpZ2h0OiAzMDBweDtcbiAgcGFkZGluZzogJHNwYWNpbmctODtcbiAgY29sb3I6ICRjb2xvci1ncmF5LTYwMDtcblxuICBwIHtcbiAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy00O1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmRhdHRlLW1mLW1vZGFsLXNwaW5uZXIge1xuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiA0OHB4O1xuICBib3JkZXI6IDNweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJvcmRlci10b3AtY29sb3I6IHJnYmEoNzYsIDE3NSwgODAsIDAuOCk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYW5pbWF0aW9uOiBkYXR0ZS1tZi1tb2RhbC1zcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBkYXR0ZS1tZi1tb2RhbC1zcGluIHtcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuLy8gVGhlIGxhdW5jaGVyIGJ1dHRvbiAobGl2ZXMgb3V0c2lkZSB0aGUgbW9kYWwgZWxlbWVudCwgYnV0IGlzIE1GLW1vZGFsLXNwZWNpZmljKS5cbi5kYXR0ZS1tZi1tb2RhbC10cmlnZ2VyIHtcbiAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctNDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWxnO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBEZXNrdG9wIG1vZGFsIOKAlCBmaWxsIHRoZSBtb2RhbCBoZWlnaHQ7IHByZXZpZXcgYXMgYSByaWdodCBzaWRlYmFyLlxuICogVGhlIHN0YW5kYWxvbmUgZmluZGVyIGNhcHMgZWFjaCBkZXZpY2UgY29sdW1uIGFuZCBzdGFja3MgdGhlIHByZXZpZXcgYmVsb3c7XG4gKiBpbiB0aGUgdGFsbCBjYXRhbG9nIG1vZGFsIHdlIGxldCB0aGUgZmluZGVyIGZpbGwgdGhlIGJvZHkgYW5kIChvbiBhIHdpZGVcbiAqIGZpbmRlcikgbW92ZSB0aGUgcHJldmlldyBpbnRvIGEgcmlnaHQgc2lkZWJhci4gTW9iaWxlIGtlZXBzIHRoZSBzdGFja2VkIHNoZWV0LlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xuICAuZGF0dGUtbWYtcGFnZS1tb2RhbCAubW9kYWwtYm9keSB7XG4gICAgLmRhdHRlLW1vZGVsLWZpbmRlci1wYWdlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICAuZGF0dGUtbWYtcGFnZS1oZWFkZXIge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuXG4gICAgLmRhdHRlLW1mLXBhZ2UtY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICAvLyBUaGUgZml4ZWQtd2lkdGggdHJhY2sgaXMgdGhlIGJvZHkncyBmbGV4IGNoaWxkIHRoYXQgZmlsbHMgdGhlIHJlbWFpbmluZ1xuICAgIC8vIHdpZHRoOyBtaW4td2lkdGg6MCBsZXRzIGl0IHNocmluayBzbyBvdmVyZmxvdy14IHNjcm9sbHMgaW5zdGVhZCBvZlxuICAgIC8vIHB1c2hpbmcgdGhlIG1vZGFsIHdpZGVyIChEMjApLiBJdCBrZWVwcyB0aGUgbW9kYWwncyBWRVJUSUNBTCBmaWxsIHNvIHRoZVxuICAgIC8vIGNvbHVtbnMgc3RyZXRjaCB0byBib2R5IGhlaWdodCBmb3IgdGhlIG5lc3RlZCBwZXItY29sdW1uIHZlcnRpY2FsIHNjcm9sbC5cbiAgICAuZGF0dGUtbWYtcGFnZS1jb2x1bW5zIHtcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIH1cblxuICAgIC5kYXR0ZS1tZi1wYWdlLWNvbHVtbiB7XG4gICAgICAvLyBGaWxsIHRoZSBib2R5IGhlaWdodCBpbiB0aGUgdGFsbCBtb2RhbCAodGhlIHN0YW5kYWxvbmUgcGFnZSBjYXBzIGhlaWdodFxuICAgICAgLy8gdmlhIC0tbWYtY29sdW1uLWhlaWdodCk7IHdpZHRoIHN0YXlzIHRoZSBmaXhlZCB0cmFjayB3aWR0aC5cbiAgICAgIGhlaWdodDogYXV0bztcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgfVxuICB9XG59XG5cbkBjb250YWluZXIgbW9kZWwtZmluZGVyIChtaW4td2lkdGg6IDg1NnB4KSB7XG4gIC5kYXR0ZS1tZi1wYWdlLW1vZGFsIC5tb2RhbC1ib2R5IHtcbiAgICAuZGF0dGUtbWYtcGFnZS1jb250YWluZXIge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgZ2FwOiB2YXIoLS1tZi1zcGFjaW5nLWxnKTtcbiAgICB9XG5cbiAgICAuZGF0dGUtbWYtcGFnZS1jb2x1bW5zIHtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG5cbiAgICAuZGF0dGUtbWYtcGFnZS1wcmV2aWV3IHtcbiAgICAgIGZsZXg6IDAgMCB2YXIoLS1tZi1wcmV2aWV3LXdpZHRoKTtcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdHRlIGNvbmZpZyBtb2RhbCDigJQgdmFyaWFudCBvZiB0aGUgZGF0dGUtbW9kYWwgYmFzZSAoIzMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVGhlIHByb2R1Y3QtY29uZmlndXJhdG9yIHBvcHVwLiBNaWdyYXRpbmcgdG8gdGhlIHBhcnRpYWwgbm9ybWFsaXNlcyB0aGUgZmxhdFxuLy8gYC5tb2RhbC5tb2RhbC1kaWFsb2dgLW9uLW9uZS1lbGVtZW50IG91dGxpZXIgaW50byBzdGFuZGFyZCBuZXN0aW5nLCBzbyB0aGVcbi8vIGAkZGlhbG9nOicmJ2AgbWl4aW4gc3BlY2lhbCBjYXNlIGlzIGdvbmUgKHRoZSBiYXNlJ3MgZGF0YS1kYXR0ZS1mdWxsc2NyZWVuXG4vLyBkcml2ZXMgdGhlIG1vYmlsZSBzaGVldCB3aXRoIHRoZSBkZWZhdWx0IGAubW9kYWwtZGlhbG9nYCBzZWxlY3RvcikuIFRoZVxuLy8gY29uZmlndXJhdG9yIGJvZHkgc3R5bGluZyAoI2NmZy1jb250YWluZXIsIGRyb3Bkb3ducywgc2lkZWJhcikgc3RheXMgaW5cbi8vIGNvbmZpZ3VyYXRpb24tZ3JvdXBzL2NvbmZpZy1ncm91cHMuc2NzcyDigJQgb25seSB0aGUgbW9kYWwtc2hlbGwgbG9vayBsaXZlcyBoZXJlLlxuLy9cbi8vIEBzZWUgZG9jcy9hcmNoaXRlY3R1cmUvbW9kYWxzL3RhcmdldC1hcmNoaXRlY3R1cmUubWQgwqczLjYsIMKnNSAoIzMpXG5cbkBpbXBvcnQgXCIuLi8uLi9pbmNsdWRlcy9faW5jbHVkZXNcIjtcblxuLmRhdHRlLW1vZGFsLmRhdHRlLWNvbmZpZy1tb2RhbCB7XG4gIC8vIFRoZSBjb25maWd1cmF0b3IgcGFuZWwgcmVhZHMgYXMgYSBmbGF0IFwiYmxhbmtsaXN0XCIgc3VyZmFjZSwgbm90IGEgY2FyZC5cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdHRlIGVyc2F0emtvbnRha3Qg4oCUIHZhcmlhbnQgb2YgdGhlIGRhdHRlLW1vZGFsIGJhc2UgKCM0KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRoZSBcIlByb2R1a3QgYW5mcmFnZW5cIiBjb250YWN0IG1vZGFsIG9uIHRoZSBzcGFyZS1wYXJ0cyBwYWdlLiBJdHMgbW9iaWxlXG4vLyBmdWxsLXBhZ2Ugc2hlZXQgbm93IGNvbWVzIGZyb20gdGhlIGJhc2UgKGRhdGEtZGF0dGUtZnVsbHNjcmVlbiArIHRoZSBzaGFyZWRcbi8vIG1peGluKSwgc28gdGhlIEBpbmNsdWRlIHRoYXQgbGl2ZWQgaW4gYWxsL3pfa25vZWxsLnNjc3MgaXMgcmVtb3ZlZCB0aGVyZVxuLy8gKHRhcmdldCBHOCDigJQgbW9kYWwgQ1NTIGxlYXZlcyB0aGUgZ2xvYmFsIGFsbC5jc3MgYnVuZGxlKS4gT25seSB0aGVcbi8vIG5vbi1mdWxsc2NyZWVuIHR3ZWFrcyByZW1haW4gaGVyZS5cbi8vXG4vLyBAc2VlIGRvY3MvYXJjaGl0ZWN0dXJlL21vZGFscy90YXJnZXQtYXJjaGl0ZWN0dXJlLm1kIMKnMy42LCDCpzUgKCM0KVxuXG5AaW1wb3J0IFwiLi4vLi4vaW5jbHVkZXMvX2luY2x1ZGVzXCI7XG5cbi5kYXR0ZS1tb2RhbC5kYXR0ZS1lcnNhdHprb250YWt0IHtcbiAgYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0ucHVsbC1yaWdodCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbiAgfVxuXG4gIC8vIFRoZSB4ZXBjIGFydGljbGUgYm9keSBjYW4gZ3JvdyB0YWxsOyBjYXAgaXQgb24gZGVza3RvcCBzbyB0aGUgbW9kYWwgc3RheXMgdXNhYmxlLlxuICAubW9kYWwtYm9keTpoYXMoI2ttLWVyc2F0enRlaWxlLXByb2dyYW1tLWFydGlrZWwpIHtcbiAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICB9XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGF0dGUgZ2FsbGVyeSBsaWdodGJveCDigJQgbGlnaHQtdG91Y2ggY2xvc2UtYWZmb3JkYW5jZSBoYXJtb25pc2F0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVmFyaWFudCB0aGF0IGFsaWducyB0aGUgUEFSRU5UIHByb2R1Y3QtaW1hZ2UgbGlnaHRib3ggKGBib2R5LmxpZ2h0Ym94LXNob3duYCxcbi8vIGp0bC5nYWxsZXJ5LmpzKSB3aXRoIHRoZSB1bmlmaWVkIGNsb3NlLVggbG9vayDigJQgV0lUSE9VVCBmb3JraW5nIHRoZSBwYXJlbnRcbi8vIGdhbGxlcnkgbWFya3VwIG9yIEpTIChBRFItMDAwOCBENCBcImxpZ2h0LXRvdWNoXCIpLiBUaGUgcGFyZW50IG93bnMgdGhlIG92ZXJsYXksXG4vLyB0aGUgYmlnLWltYWdlIHJlbmRlciwgem9vbSwgdGh1bWJuYWlscyBhbmQgc3dpcGU7IHRoaXMgZmlsZSBvbmx5IHJlc3R5bGVzIHRoZVxuLy8gcGFyZW50J3MgZXhpc3RpbmcgYCNjbG9zZS1saWdodGJveGAgY29udHJvbCBzbyBpdCByZWFkcyBsaWtlIGAuZGF0dGUtbW9kYWwtY2xvc2VgXG4vLyAoc2FtZSBjb3JuZXIgZ2VvbWV0cnksIHNhbWUgc2NhbGUtb24taG92ZXIpLCBhbmQgY29uZmlybXMgdGhlIG1vYmlsZSBzaGVldCBmZWVsLlxuLy9cbi8vIFdlIGRlbGliZXJhdGVseSBLRUVQIHRoZSBwYXJlbnQncyB3b3JraW5nIFggZ2x5cGggKyBjaXJjbGUgYmFja2dyb3VuZFxuLy8gKGAuY2xvc2UtYnRuYCBzaGlwcyBhIGJhc2U2NCBTVkcgWCBvbiBgdmFyKC0tY2xzLWIpYCB0dW5lZCBmb3IgdGhpcyBvdmVybGF5J3Ncbi8vIGJhY2tkcm9wKSBhbmQgb3ZlcnJpZGUgT05MWSBzaXplIC8gcG9zaXRpb24gLyBpbnRlcmFjdGlvbiBzbyB0aGUgbG9vayBtYXRjaGVzXG4vLyB0aGUgdGhlbWUgY29ybmVyLVguIFJlLWRvaW5nIHRoZSBnbHlwaCBoZXJlIHdvdWxkIGR1cGxpY2F0ZSB0aGUgcGFyZW50J3Ncbi8vIGNvbnRyYXN0IHR1bmluZyBmb3Igbm8gZ2FpbiAoRFJZOiByZXVzZSB0aGUgcGFyZW50J3MgcHJvdmVuIGFmZm9yZGFuY2UsIHJlc3R5bGVcbi8vIHRoZSBnZW9tZXRyeSBvbmx5KS5cbi8vXG4vLyBUaGUgYmVoYXZpb3VyIHNpZGUgKEVzY2FwZSAvIGJyb3dzZXItQmFjayAvIGJhY2tkcm9wIGNsb3NlKSBsaXZlcyBpblxuLy8gYGdhbGxlcnktbGlnaHRib3gtYWRhcHRlci50c2A7IHRoaXMgZmlsZSBpcyBwcmVzZW50YXRpb24gb25seS5cbi8vXG4vLyBAc2VlIGRvY3MvYXJjaGl0ZWN0dXJlL21vZGFscy9qdGwtbW9kYWwtaW52ZW50b3J5Lm1kIMKnRDRcbi8vIEBzZWUgc3JjLWNvbXBvbmVudHMvbW9kYWwvZ2FsbGVyeS1saWdodGJveC1hZGFwdGVyLnRzXG5cbkBpbXBvcnQgXCIuLi8uLi9pbmNsdWRlcy9faW5jbHVkZXNcIjtcblxuLy8gTWlycm9yIHRoZSB1bmlmaWVkIGNvcm5lci1YIGdlb21ldHJ5IChfYmFzZS5zY3NzXG4vLyBgW2RhdGEtZGF0dGUtY2xvc2Utc3R5bGU9XCJjb3JuZXJcIl0gLmRhdHRlLW1vZGFsLWNsb3NlYCk6IGEgMzJweCBib3ggcGlubmVkIHRvXG4vLyB0aGUgdG9wLXJpZ2h0IHdpdGggc2NhbGUgZmVlZGJhY2suIFNjb3BlZCB0byB0aGUgb3BlbiBzdGF0ZSBzbyBpdCBvbmx5IGFwcGxpZXNcbi8vIHdoaWxlIHRoZSBsaWdodGJveCBpcyBzaG93biAodGhlIHBhcmVudCBoaWRlcyB0aGUgY29udHJvbCBvdGhlcndpc2UpLlxuLmxpZ2h0Ym94LXNob3duICNjbG9zZS1saWdodGJveCB7XG4gIC8vIFBvc2l0aW9uICsgYm94IG1hdGNoIHRoZSB1bmlmaWVkIGNvcm5lci1YICh3YXMgM3JlbS8zcmVtIGF0IDFyZW0gaW5zZXRzKS5cbiAgdG9wOiAkc3BhY2luZy0zICFpbXBvcnRhbnQ7XG4gIHJpZ2h0OiAkc3BhY2luZy0zICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAycmVtICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMnJlbSAhaW1wb3J0YW50O1xuICAvLyBLZWVwIGl0IGFib3ZlIHRoZSByZS1yZW5kZXJlZCBiaWcgaW1hZ2UgLyBhcnJvd3MgKHBhcmVudCB1c2VzIHotaW5kZXggMTEpLlxuICB6LWluZGV4OiAxMTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtICRkdXJhdGlvbi1mYXN0IGVhc2UsIGJhY2tncm91bmQtY29sb3IgJGR1cmF0aW9uLWZhc3QgZWFzZTtcblxuICAmOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG5cbiAgLy8gT24gc21hbGwgc2NyZWVucyB0aGUgdW5pZmllZCBzaGVldCBrZWVwcyB0aGUgY2xvc2UgcmVhY2hhYmxlIGluIHRoZSBjb3JuZXIuXG4gIC8vIFRoZSBwYXJlbnQgYWxyZWFkeSBtYWtlcyB0aGUgb3ZlcmxheSBmdWxsLXZpZXdwb3J0OyB3ZSBvbmx5IGVuc3VyZSB0aGVcbiAgLy8gY29udHJvbCBzdGF5cyBjb21mb3J0YWJseSB0YXBwYWJsZSBhbmQgY29uc2lzdGVudGx5IGluc2V0IChtYXRjaGVzIHRoZVxuICAvLyB0aGVtZSdzIOKJpDU3NXB4IGNsb3NlIHRyZWF0bWVudCwgX2Z1bGxzY3JlZW4uc2NzcyBjb252ZW50aW9ucykuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA1NzVweCkge1xuICAgIHRvcDogJHNwYWNpbmctMiAhaW1wb3J0YW50O1xuICAgIHJpZ2h0OiAkc3BhY2luZy0yICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDIuMjVyZW0gIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDIuMjVyZW0gIWltcG9ydGFudDtcbiAgfVxufVxuIl19 */
