/**
 * Partials Combined
 * Partials can be imported into theme files either one by one, or by using this combined Partials file. To use this
 * file as the import statement, `@use '[path]/partials/partials' as *`.
 *
 * - 01 - Settings
 * - 02 - Functions
 * - 03 - Mixins
 */
/*------------------------------------*\
  01 - Settings
\*------------------------------------*/
/**
 * Settings - Animations
 * Standard sets of animation variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Transitions
 */
/*------------------------------------*\
  01 - Transitions
\*------------------------------------*/
/**
 * Settings - Breakpoints
 * - 01 - Mapping
 */
/*------------------------------------*\
  01 - Mapping
  Default mapping of grid breakpoints, which is used in the function and mixin breakpoint files. An example of using
  breakpoints in a file is by using the mixin with the name of a breakpoint: `@include bp-min(small) {}`.

  These breakpoints may be altered depending on the theme needs.
\*------------------------------------*/
/**
 * Settings - Color
 * Standard sets of color variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Theme Colors
 * - 02 - Grayscale
 * - 03 - Utilities
 * - 04 - Mapping
 */
/*------------------------------------*\
  01 - Theme Colors
\*------------------------------------*/
/*------------------------------------*\
  02 - Grayscale
\*------------------------------------*/
/*------------------------------------*\
  03 - Utilities
\*------------------------------------*/
/*------------------------------------*\
  04 - Mapping
\*------------------------------------*/
/**
 * Settings - Layout
 * Standard sets of layout variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Grid
 * - 02 - Widths
 * - 03 - Layers
 */
/*------------------------------------*\
  01 - Grid
\*------------------------------------*/
/*------------------------------------*\
  01 - Widths
  // 'xxlarge':  1920px,
  // 'xlarge':   1440px,
  // 'large':    1280px,
  // 'medium':   960px,
  // 'small':    768px,
  // 'xsmall':   640px,
  // 'xxsmall':  480px,
\*------------------------------------*/
/*------------------------------------*\
  03 - Layers
\*------------------------------------*/
/**
 * Settings - Typography
 * Standard sets of typographical variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Heading Sizes
 * - 02 - Line Heights
 */
/*------------------------------------*\
  01 - Heading Sizes
\*------------------------------------*/
/*------------------------------------*\
  01 - Line Heights
\*------------------------------------*/
/*------------------------------------*\
  02 - Functions
\*------------------------------------*/
/**
 * Partials Combined
 * Partials can be imported into theme files either one by one, or by using this combined Partials file. To use this
 * file as the import statement, `@use '[path]/partials/partials' as *`.
 *
 * - 01 - Settings
 * - 02 - Functions
 * - 03 - Mixins
 */
/*------------------------------------*\
  01 - Settings
\*------------------------------------*/
/**
 * Functions - Animations
 * Simple functions to help developers easily grab pre-defined animation values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Transition
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Transition
  Easy to use function to quickly define a transition with the ability to reference a library mapping of bezier-curve
  animations, as defined in `partials/settings/_animations.scss`.
  - @param $argument: Style arguments that this transition should be applied to.
  - @param $duration: The length of time the transition should take place.
  - @param $style: The style of transition, as defined in `partials/settings/_animations.scss`
  - @example = transition: transition(all, 0.6s, easeInOutSine)
\*------------------------------------*/
/**
 * Functions - Breakpoints
 * Breakpoint viewport sizes and media queries. Breakpoints are defined as a map of (name: minimum width), order from
 * xsmall to xlarge: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px). The map defined in the `$grid-breakpoints`
 * global variable is used as the `$breakpoints` argument by default.
 *
 * - 01 - Breakpoint Next
 * - 02 - Breakpoint Minimum
 * - 03 - Breakpoint Maximum
 * - 04 - Breakpoint Infix
 */
/*------------------------------------*\
  01 - Breakpoint Next
  Name of the next breakpoint, or null for the last breakpoint.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @param $breakpoint-names: Breakpoints mapping names as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  02 - Breakpoint Minimum
  Minimum breakpoint width. Null for the smallest (first) breakpoint.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  03 - Breakpoint Maximum
  The maximum value is reduced by 0.02px to work around the limitations of `min-` and `max-` prefixes and viewports
  with fractional widths. See https://www.w3.org/TR/mediaqueries-4/#mq-min-max. Uses 0.02px rather than 0.01px to work
  around a current rounding bug in Safari. See https://bugs.webkit.org/show_bug.cgi?id=178261
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  04 - Breakpoint Infix
  Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front. Useful for making
  responsive utilities.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/**
 * Functions - Calculations
 * Simple functions to help developers calculate different values from percentages to sizing such as REMs.
 *
 * - 01 - Imports
 * - 02 - Target/Container Percentage
 * - 03 - REMs
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Target/Container Percentage
  Calculate the percentage of a target size compared to a container size.
  - @param $target: Size of an element needing a calculated percentage.
  - @param $container: Size of the target's container, needed to calculate percentage.
  - @example = width: calc-percent(250, 1000);
\*------------------------------------*/
/*------------------------------------*\
  03 - REMs
  Calculate a size into REM units -- mostly used for font size rendering.
  - @param $size: Size of an element needing a calculated size into REMs.
  - @param $base: Base font size of the site -- defaults to 16px.
  - @example = font-size: calc-rem(24px);
\*------------------------------------*/
/**
 * Functions - Color
 * Simple functions to help developers easily grab pre-defined color values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Color
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Color
  Main function for getting a pre-defined color from a list of values, as defined in 'partials/settings/_colors.scss.
  - @param $color: The selected color.
  - @example = background-color: color(primary);
\*------------------------------------*/
/**
 * Functions - Layout
 * Simple functions to help developers easily grab pre-defined layout values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Widths
 * - 03 - Z-index
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Widths
  Main function for getting a pre-defined width from a list of values, as defined in 'partials/settings/_layout.scss.
  - @param $width: The selected width size.
  - @example: width: width(large);
\*------------------------------------*/
/*------------------------------------*\
  03 - Z-index
  Main function for getting a pre-defined z-index from a list of values, as defined in 'partials/settings/_layout.scss.
  - @param $key: The selected layer type.
  - @example = z-index: z-index(bottomless-pit)
\*------------------------------------*/
/**
 * Functions - Typography
 * Simple functions to help developers easily grab pre-defined typographical values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Line Height
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Line Height
  Main function for getting a pre-defined Line Height from a list of values, as defined in
  `partials/settings/_typography.scss`.
  - @param $size: The selected Line Height type.
  - @example: line-height: line-height(heading);
\*------------------------------------*/
/*------------------------------------*\
  03 - Mixins
\*------------------------------------*/
/**
 * Mixins - Breakpoints
 * Use these mixins mainly when defining media breakpoint specifications in theme files. Both settings and functions
 * are imported here to supplement the mixins themselves.
 *
 * - 01 - Imports
 * - 02 - Minimum Breakpoint
 * - 03 - Maximum Breakpoint
 * - 04 - Between Breakpoint
 * - 05 - Only Breakpoint
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Minimum Breakpoint
  Media/screen-size of at least the minimum breakpoint width -- apply to screen-sizes above the breakpoint specified.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-min(large) {}
\*------------------------------------*/
/*------------------------------------*\
  03 - Maximum Breakpoint
  Media/screen-size of at most the maximum breakpoint width -- apply to screen-sizes below the breakpoint specified.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-max(large) {}
\*------------------------------------*/
/*------------------------------------*\
  04 - Between Breakpoint
  Media/screen-size that spans multiple breakpoint widths -- apply to screen-sizes between the breakpoints specified.
  - @param $lower: Selected minimum breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $upper: Selected maximum breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-between(xsmall, large) {}
\*------------------------------------*/
/*------------------------------------*\
  05 - Only Breakpoint
  Media/screen-size between the breakpoint's minimum and maximum widths -- No minimum for the smallest breakpoint, and
  no maximum for the largest one.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-only(large) {}
\*------------------------------------*/
/**
 * Mixins - Lists
 * Use these mixins when needing to easily define lists styles.
 *
 * - 01 - Base
 * - 02 - Bullets
 * - 03 - Numbered
 * - 04 - No Bullets
 * - 05 - Inline
 * - 06 - Ruled
 */
/*------------------------------------*\
  01 - Base
\*------------------------------------*/
/*------------------------------------*\
  02 - Bullets
\*------------------------------------*/
/*------------------------------------*\
  03 - Numbered
\*------------------------------------*/
/*------------------------------------*\
  04 - No Bullets
\*------------------------------------*/
/*------------------------------------*\
  05 - Inline
\*------------------------------------*/
/*------------------------------------*\
  06 - Ruled
\*------------------------------------*/
/*------------------------------------*\
  03 - Mixins
\*------------------------------------*/
/**
 * Mixins - Typography
 * Use these mixins when needing to easily define typography styles, such as sizes and typographical layout.
 *
 * - 01 - Imports
 * - 02 - Heading Size
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Heading Size
  Meant for responsive heading sizes and is based upon breakpoints and a mapping of heading sizes. Breakpoints are
  defined in the `partials/settings/_breakpoints.scss` file and are utilized with a mixin, as defined in
  `partials/mixins/_breakpoints.scss`.
  - @param $setting: Selected heading to apply responsive sizing to.
\*------------------------------------*/
/**** START - Main tansparency, menu wrappers & placement ****/
main::before {
  display: none;
}

@media (max-width: 767.98px) {
  .js-prevent-scroll {
    position: fixed;
    height: 100%;
    overflow: hidden;
    width: 100%;
  }
  .js-prevent-scroll main::before {
    display: block;
    content: "";
    background: rgba(0, 0, 0, 0.3);
    -webkit-transition: all 0.25s ease-in-out;
    transition: all 0.25s ease-in-out;
    position: fixed; /* Sit on top of the page content */
    width: 100%; /* Full width (cover the whole page) */
    height: 100%; /* Full height (cover the whole page) */
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 2;
  }
}
@media (max-width: 767.98px) {
  .js-prevent-scroll main::before {
    top: 4.5rem;
  }
  .js-prevent-scroll.user-logged-in main::before {
    padding-top: 40px;
    top: 140px;
  }
}

.site-header {
  background-color: #fff;
  position: relative;
  z-index: 3;
}

.site-header__inner {
  -webkit-box-align: center;
          align-items: center;
  display: -webkit-box;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
          flex-direction: row;
  flex-wrap: nowrap;
  -webkit-box-pack: justify;
          justify-content: space-between;
  padding: 0;
}
/**** END - Main tansparency, menu wrappers & placement ****/
/**** START - Main Navigation ****/
.site-header__navigation {
  position: fixed;
}
@media (max-width: 767.98px) {
  .site-header__navigation {
    background-color: #fff;
    top: 4.5rem;
    bottom: 0;
    right: 0;
    z-index: -1;
    opacity: 0;
    -webkit-transform: translateY(-100%);
        -ms-transform: translateY(-100%);
            transform: translateY(-100%);
    -webkit-transition: all 0.25s ease-in-out;
    transition: all 0.25s ease-in-out;
    width: 100%;
    -webkit-box-shadow: 0px 0px 40px 0px rgba(0, 0, 0, 0.1);
            box-shadow: 0px 0px 40px 0px rgba(0, 0, 0, 0.1);
    padding: 1.25rem;
  }
  .site-header__navigation > *:nth-child(1) {
    -webkit-box-ordinal-group: 5;
            order: 4;
  }
  .site-header__navigation > *:nth-child(2) {
    -webkit-box-ordinal-group: 6;
            order: 5;
  }
  .site-header__navigation > *:nth-child(3) {
    -webkit-box-ordinal-group: 2;
            order: 1;
  }
  .site-header__navigation > *:nth-child(4) {
    -webkit-box-ordinal-group: 4;
            order: 3;
  }
  .site-header__navigation > *:nth-child(5) {
    -webkit-box-ordinal-group: 3;
            order: 2;
  }
  .user-logged-in .site-header__navigation {
    top: 9.9375rem;
  }
}
@media (min-width: 768px) {
  .site-header__navigation {
    position: relative;
    padding: 0;
    display: -webkit-box;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
            flex-direction: row;
    -webkit-box-pack: end;
            justify-content: flex-end;
    flex-wrap: wrap;
  }
}

@media (max-width: 767.98px) {
  .site-header__navigation {
    display: -webkit-box;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
            flex-direction: column;
  }
}

@media (min-width: 768px) {
  .site-header__navigation #block-hcwh-mainnavigation {
    margin-left: 100%;
    -webkit-box-flex: 0;
            flex: none;
  }
}

/**** END - Main Navigation ****/
/**** START - Utility Navigation ****/
/**** END - Utility Navigation ****/
/**** START - Mobile Navigation Button ****/
.region__name--navigation {
  margin-right: -1.25rem;
}
@media (min-width: 600px) {
  .region__name--navigation {
    margin-right: -1.875rem;
  }
}
@media (max-width: 767.98px) {
  .region__name--navigation {
    background: var(--color-all-accent);
    padding: 0.75rem 1.5rem;
    position: relative;
  }
}
@media (min-width: 768px) {
  .region__name--navigation {
    margin-right: 0;
  }
}

.nav-trigger {
  display: none;
}
@media (max-width: 767.98px) {
  .nav-trigger {
    text-transform: none;
    grid-column-start: 2;
    -webkit-box-align: center;
            align-items: center;
    background: transparent;
    border: none;
    display: -webkit-inline-box;
    display: inline-flex;
    height: 3rem;
    margin-top: auto;
    margin-left: auto;
    margin-bottom: auto;
    max-width: 100px;
    padding: 0;
    gap: 0.5rem;
    font-size: 1.125rem;
    line-height: 133.333%;
    font-weight: var(--font-weight-regular);
  }
  .nav-trigger .label {
    color: var(--color-black);
  }
}

label[for=nav-trigger] {
  cursor: pointer;
  height: 30px;
  margin: auto;
  position: absolute;
  right: 30px;
  top: 18px;
  width: 30px;
  z-index: 2;
}
@media (min-width: 768px) {
  label[for=nav-trigger] {
    display: none;
  }
}

.nav-trigger span.icon {
  width: 0.75rem;
  height: 0.75rem;
  display: inline-block;
  position: relative;
}
.nav-trigger span.icon svg {
  position: absolute;
  left: 0;
  top: 0;
}

.nav-trigger__icon--expand {
  opacity: 1;
  -webkit-transform: rotate(0) scale(1);
      -ms-transform: rotate(0) scale(1);
          transform: rotate(0) scale(1);
  -webkit-transition: all 0.35s ease-in-out;
  transition: all 0.35s ease-in-out;
}

.nav-trigger__icon--collapse {
  opacity: 0;
  -webkit-transform: rotate(-90deg) scale(0);
      -ms-transform: rotate(-90deg) scale(0);
          transform: rotate(-90deg) scale(0);
  -webkit-transition: all 0.25s ease-in-out;
  transition: all 0.25s ease-in-out;
}

.nav-trigger[aria-expanded=true] .nav-trigger__icon--collapse {
  opacity: 1;
  -webkit-transform: rotate(0) scale(1);
      -ms-transform: rotate(0) scale(1);
          transform: rotate(0) scale(1);
}
.nav-trigger[aria-expanded=true] .nav-trigger__icon--expand {
  opacity: 0;
  -webkit-transform: rotate(90deg) scale(0);
      -ms-transform: rotate(90deg) scale(0);
          transform: rotate(90deg) scale(0);
}

@media (max-width: 767.98px) {
  .nav-trigger[aria-expanded=false] ~ .site-header__navigation {
    opacity: 0;
    visibility: hidden;
    -webkit-transform: translate3d(375px, 0, 0);
            transform: translate3d(375px, 0, 0);
  }
  .nav-trigger[aria-expanded=true] ~ .site-header__navigation {
    opacity: 1;
    visibility: visible;
    overflow-y: auto;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
    z-index: 3;
  }
}
/**** END - Mobile Navigation Button ****/
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnRpYWxzL19wYXJ0aWFscy5zY3NzIiwicGFydGlhbHMvc2V0dGluZ3MvX2FuaW1hdGlvbnMuc2NzcyIsInBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzIiwicGFydGlhbHMvc2V0dGluZ3MvX2NvbG9ycy5zY3NzIiwicGFydGlhbHMvc2V0dGluZ3MvX2xheW91dC5zY3NzIiwicGFydGlhbHMvc2V0dGluZ3MvX3R5cG9ncmFwaHkuc2NzcyIsInBhcnRpYWxzL2Z1bmN0aW9ucy9fYW5pbWF0aW9ucy5zY3NzIiwicGFydGlhbHMvZnVuY3Rpb25zL19icmVha3BvaW50cy5zY3NzIiwicGFydGlhbHMvZnVuY3Rpb25zL19jYWxjdWxhdGlvbnMuc2NzcyIsInBhcnRpYWxzL2Z1bmN0aW9ucy9fY29sb3JzLnNjc3MiLCJwYXJ0aWFscy9mdW5jdGlvbnMvX2xheW91dC5zY3NzIiwicGFydGlhbHMvZnVuY3Rpb25zL190eXBvZ3JhcGh5LnNjc3MiLCJwYXJ0aWFscy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCJwYXJ0aWFscy9taXhpbnMvX2xpc3RzLnNjc3MiLCJwYXJ0aWFscy9taXhpbnMvX3R5cG9ncmFwaHkuc2NzcyIsImdsb2JhbC9yZWdpb24vcmVnaW9uLS1uYXZpZ2F0aW9uLnNjc3MiLCJnbG9iYWwvcmVnaW9uL3JlZ2lvbi0tbmF2aWdhdGlvbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0VBQUE7QUFVQTs7dUNBQUE7QUNWQTs7Ozs7RUFBQTtBQVFBOzt1Q0FBQTtBQ1JBOzs7RUFBQTtBQUtBOzs7Ozs7dUNBQUE7QUNMQTs7Ozs7Ozs7RUFBQTtBQVdBOzt1Q0FBQTtBQWtCQTs7dUNBQUE7QUFtQkE7O3VDQUFBO0FBZ0JBOzt1Q0FBQTtBQ2hFQTs7Ozs7OztFQUFBO0FBU0E7O3VDQUFBO0FBT0E7Ozs7Ozs7Ozt1Q0FBQTtBQXlCQTs7dUNBQUE7QUN6Q0E7Ozs7OztFQUFBO0FBU0E7O3VDQUFBO0FBa0RBOzt1Q0FBQTtBTHZDQTs7dUNBQUE7QUFwQkE7Ozs7Ozs7O0VBQUE7QUFVQTs7dUNBQUE7QU1WQTs7Ozs7O0VBQUE7QUFTQTs7dUNBQUE7QUFTQTs7Ozs7Ozs7dUNBQUE7QUNsQkE7Ozs7Ozs7Ozs7RUFBQTtBQWFBOzs7Ozs7dUNBQUE7QUFtQkE7Ozs7O3VDQUFBO0FBZUE7Ozs7Ozs7dUNBQUE7QUFpQkE7Ozs7Ozt1Q0FBQTtBQ2hFQTs7Ozs7OztFQUFBO0FBVUE7O3VDQUFBO0FBU0E7Ozs7Ozt1Q0FBQTtBQWVBOzs7Ozs7dUNBQUE7QUNsQ0E7Ozs7OztFQUFBO0FBU0E7O3VDQUFBO0FBU0E7Ozs7O3VDQUFBO0FDbEJBOzs7Ozs7O0VBQUE7QUFVQTs7dUNBQUE7QUFTQTs7Ozs7dUNBQUE7QUFxQkE7Ozs7O3VDQUFBO0FDeENBOzs7Ozs7RUFBQTtBQVNBOzt1Q0FBQTtBQVNBOzs7Ozs7dUNBQUE7QVhhQTs7dUNBQUE7QVkvQkE7Ozs7Ozs7Ozs7RUFBQTtBQWFBOzt1Q0FBQTtBQVVBOzs7Ozs7dUNBQUE7QUFzQkE7Ozs7Ozt1Q0FBQTtBQXNCQTs7Ozs7Ozt1Q0FBQTtBQStCQTs7Ozs7Ozt1Q0FBQTtBQ2xHQTs7Ozs7Ozs7OztFQUFBO0FBYUE7O3VDQUFBO0FBYUE7O3VDQUFBO0FBcUJBOzt1Q0FBQTtBQWtDQTs7dUNBQUE7QUFnQkE7O3VDQUFBO0FBYUE7O3VDQUFBO0FiL0VBOzt1Q0FBQTtBYy9CQTs7Ozs7O0VBQUE7QUFTQTs7dUNBQUE7QUFXQTs7Ozs7O3VDQUFBO0FDbEJBLDhEQUFBO0FBR0E7RUFDRSxhQUFBO0FDaVZGOztBSi9SSTtFRzlDSjtJQUVJLGVBQUE7SUFDQSxZQUFBO0lBQ0EsZ0JBQUE7SUFDQSxXQUFBO0VDZ1ZGO0VEOVVFO0lBQ0UsY0FBQTtJQUNBLFdBQUE7SUFDQSw4QkFBQTtJQUNBLHlDQUFBO0lBQUEsaUNBQUE7SUFDQSxlQUFBLEVBQUEsbUNBQUE7SUFDQSxXQUFBLEVBQUEsc0NBQUE7SUFDQSxZQUFBLEVBQUEsdUNBQUE7SUFDQSxPQUFBO0lBQ0EsUUFBQTtJQUNBLFNBQUE7SUFDQSxVQUFBO0VDZ1ZKO0FBQ0Y7QUpyVEk7RUd0QkE7SUFDRSxXQUFBO0VDOFVKO0VEMVVFO0lBQ0UsaUJBQUE7SUFDQSxVQUFBO0VDNFVKO0FBQ0Y7O0FEeFVBO0VBQ0Usc0JBQUE7RUFDQSxrQkFBQTtFQUNBLFVBQUE7QUMyVUY7O0FEeFVBO0VBRUUseUJBQUE7VUFBQSxtQkFBQTtFQUNBLG9CQUFBO0VBQUEsYUFBQTtFQUNBLDhCQUFBO0VBQUEsNkJBQUE7VUFBQSxtQkFBQTtFQUNBLGlCQUFBO0VBQ0EseUJBQUE7VUFBQSw4QkFBQTtFQUNBLFVBQUE7QUMwVUY7QURwVUEsNERBQUE7QUFFQSxrQ0FBQTtBQUNBO0VBQ0UsZUFBQTtBQ3FVRjtBSmxWSTtFR1lKO0lBSUksc0JBQUE7SUFDQSxXQUFBO0lBQ0EsU0FBQTtJQUVBLFFBQUE7SUFDQSxXQUFBO0lBQ0EsVUFBQTtJQUNBLG9DQUFBO1FBQUEsZ0NBQUE7WUFBQSw0QkFBQTtJQUNBLHlDQUFBO0lBQUEsaUNBQUE7SUFDQSxXQUFBO0lBQ0EsdURBQUE7WUFBQSwrQ0FBQTtJQUNBLGdCQUFBO0VDcVVGO0VEblVFO0lBQ0UsNEJBQUE7WUFBQSxRQUFBO0VDcVVKO0VEblVFO0lBQ0UsNEJBQUE7WUFBQSxRQUFBO0VDcVVKO0VEblVFO0lBQ0UsNEJBQUE7WUFBQSxRQUFBO0VDcVVKO0VEblVFO0lBQ0UsNEJBQUE7WUFBQSxRQUFBO0VDcVVKO0VEblVFO0lBQ0UsNEJBQUE7WUFBQSxRQUFBO0VDcVVKO0VEOVRFO0lBQ0UsY0FBQTtFQ2dVSjtBQUNGO0FKellJO0VHa0NKO0lBK0NJLGtCQUFBO0lBQ0EsVUFBQTtJQUNBLG9CQUFBO0lBQUEsYUFBQTtJQUNBLDhCQUFBO0lBQUEsNkJBQUE7WUFBQSxtQkFBQTtJQUNBLHFCQUFBO1lBQUEseUJBQUE7SUFDQSxlQUFBO0VDNFRGO0FBQ0Y7O0FKN1hJO0VHb0VKO0lBRUksb0JBQUE7SUFBQSxhQUFBO0lBQ0EsNEJBQUE7SUFBQSw2QkFBQTtZQUFBLHNCQUFBO0VDNFRGO0FBQ0Y7O0FKMVpJO0VHa0dGO0lBRUksaUJBQUE7SUFDQSxtQkFBQTtZQUFBLFVBQUE7RUMyVEo7QUFDRjs7QUR2VEEsZ0NBQUE7QUFFQSxxQ0FBQTtBQUtBLG1DQUFBO0FBRUEsMkNBQUE7QUFDQTtFQUNFLHNCQUFBO0FDb1RGO0FKemFJO0VHb0hKO0lBR0ksdUJBQUE7RUNzVEY7QUFDRjtBSnhaSTtFRzhGSjtJQU1JLG1DQUFBO0lBQ0EsdUJBQUE7SUFDQSxrQkFBQTtFQ3dURjtBQUNGO0FKcmJJO0VHb0hKO0lBV0ksZUFBQTtFQzBURjtBQUNGOztBRHhUQTtFQUNFLGFBQUE7QUMyVEY7QUp4YUk7RUc0R0o7SUFHSSxvQkFBQTtJQUNBLG9CQUFBO0lBQ0EseUJBQUE7WUFBQSxtQkFBQTtJQUNBLHVCQUFBO0lBQ0EsWUFBQTtJQUNBLDJCQUFBO0lBQUEsb0JBQUE7SUFDQSxZQUFBO0lBQ0EsZ0JBQUE7SUFDQSxpQkFBQTtJQUNBLG1CQUFBO0lBQ0EsZ0JBQUE7SUFDQSxVQUFBO0lBQ0EsV0FBQTtJQUNBLG1CQUFBO0lBQ0EscUJBQUE7SUFDQSx1Q0FBQTtFQzZURjtFRDVURTtJQUNFLHlCQUFBO0VDOFRKO0FBQ0Y7O0FEMVRBO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0FDNlRGO0FKaGVJO0VHMkpKO0lBV0ksYUFBQTtFQzhURjtBQUNGOztBRDNUQTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtBQzhURjtBRDdURTtFQUNFLGtCQUFBO0VBQ0EsT0FBQTtFQUNBLE1BQUE7QUMrVEo7O0FEMVRBO0VBQ0UsVUFBQTtFQUNBLHFDQUFBO01BQUEsaUNBQUE7VUFBQSw2QkFBQTtFQUNBLHlDQUFBO0VBQUEsaUNBQUE7QUM2VEY7O0FEMVRBO0VBQ0UsVUFBQTtFQUNBLDBDQUFBO01BQUEsc0NBQUE7VUFBQSxrQ0FBQTtFQUNBLHlDQUFBO0VBQUEsaUNBQUE7QUM2VEY7O0FEelRFO0VBQ0UsVUFBQTtFQUNBLHFDQUFBO01BQUEsaUNBQUE7VUFBQSw2QkFBQTtBQzRUSjtBRHpURTtFQUNFLFVBQUE7RUFDQSx5Q0FBQTtNQUFBLHFDQUFBO1VBQUEsaUNBQUE7QUMyVEo7O0FKaGZJO0VHNExBO0lBQ0UsVUFBQTtJQUNBLGtCQUFBO0lBQ0EsMkNBQUE7WUFBQSxtQ0FBQTtFQ3dUSjtFRHBURTtJQUNFLFVBQUE7SUFDQSxtQkFBQTtJQUNBLGdCQUFBO0lBQ0EsdUNBQUE7WUFBQSwrQkFBQTtJQUNBLFVBQUE7RUNzVEo7QUFDRjtBRG5UQSx5Q0FBQSIsImZpbGUiOiJnbG9iYWwvcmVnaW9uL3JlZ2lvbi0tbmF2aWdhdGlvbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnRpYWxzIENvbWJpbmVkXG4gKiBQYXJ0aWFscyBjYW4gYmUgaW1wb3J0ZWQgaW50byB0aGVtZSBmaWxlcyBlaXRoZXIgb25lIGJ5IG9uZSwgb3IgYnkgdXNpbmcgdGhpcyBjb21iaW5lZCBQYXJ0aWFscyBmaWxlLiBUbyB1c2UgdGhpc1xuICogZmlsZSBhcyB0aGUgaW1wb3J0IHN0YXRlbWVudCwgYEB1c2UgJ1twYXRoXS9wYXJ0aWFscy9wYXJ0aWFscycgYXMgKmAuXG4gKlxuICogLSAwMSAtIFNldHRpbmdzXG4gKiAtIDAyIC0gRnVuY3Rpb25zXG4gKiAtIDAzIC0gTWl4aW5zXG4gKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBTZXR0aW5nc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZvcndhcmQgXCJzZXR0aW5ncy9hbmltYXRpb25zXCI7XG5AZm9yd2FyZCBcInNldHRpbmdzL2JyZWFrcG9pbnRzXCI7XG5AZm9yd2FyZCBcInNldHRpbmdzL2NvbG9yc1wiO1xuQGZvcndhcmQgXCJzZXR0aW5ncy9sYXlvdXRcIjtcbkBmb3J3YXJkIFwic2V0dGluZ3MvdHlwb2dyYXBoeVwiO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEZ1bmN0aW9uc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZvcndhcmQgXCJmdW5jdGlvbnMvYW5pbWF0aW9uc1wiO1xuQGZvcndhcmQgXCJmdW5jdGlvbnMvYnJlYWtwb2ludHNcIjtcbkBmb3J3YXJkIFwiZnVuY3Rpb25zL2NhbGN1bGF0aW9uc1wiO1xuQGZvcndhcmQgXCJmdW5jdGlvbnMvY29sb3JzXCI7XG5AZm9yd2FyZCBcImZ1bmN0aW9ucy9sYXlvdXRcIjtcbkBmb3J3YXJkIFwiZnVuY3Rpb25zL3R5cG9ncmFwaHlcIjtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBNaXhpbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmb3J3YXJkIFwibWl4aW5zL2JyZWFrcG9pbnRzXCI7XG5AZm9yd2FyZCBcIm1peGlucy9saXN0c1wiO1xuQGZvcndhcmQgXCJtaXhpbnMvdHlwb2dyYXBoeVwiO1xuIiwiLyoqXG4gKiBTZXR0aW5ncyAtIEFuaW1hdGlvbnNcbiAqIFN0YW5kYXJkIHNldHMgb2YgYW5pbWF0aW9uIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gVHJhbnNpdGlvbnNcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gVHJhbnNpdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiR0cmFuc2l0aW9uczogKFxuICAnZWFzZUluJzogICAgICAgICBlYXNlLWluLFxuICAnZWFzZU91dCc6ICAgICAgICBlYXNlLW91dCxcbiAgJ2Vhc2VJbk91dCc6ICAgICAgZWFzZS1pbi1vdXQsXG5cbiAgJ2Vhc2VJblNpbmUnOiAgICAgY3ViaWMtYmV6aWVyKDAuMTIsIDAsIDAuMzksIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5TaW5lXG4gICdlYXNlT3V0U2luZSc6ICAgIGN1YmljLWJlemllcigwLjYxLCAxLCAwLjg4LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dFNpbmVcbiAgJ2Vhc2VJbk91dFNpbmUnOiAgY3ViaWMtYmV6aWVyKDAuMzcsIDAsIDAuNjMsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRTaW5lXG5cbiAgJ2Vhc2VJblF1YWQnOiAgICAgY3ViaWMtYmV6aWVyKDAuMTEsIDAsIDAuNSwgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YWRcbiAgJ2Vhc2VPdXRRdWFkJzogICAgY3ViaWMtYmV6aWVyKDAuNSwgMSwgMC44OSwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRRdWFkXG4gICdlYXNlSW5PdXRRdWFkJzogIGN1YmljLWJlemllcigwLjQ1LCAwLCAwLjU1LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0UXVhZFxuXG4gICdlYXNlSW5DdWJpYyc6ICAgIGN1YmljLWJlemllcigwLjMyLCAwLCAwLjY3LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQ3ViaWNcbiAgJ2Vhc2VPdXRDdWJpYyc6ICAgY3ViaWMtYmV6aWVyKDAuMzMsIDEsIDAuNjgsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0Q3ViaWNcbiAgJ2Vhc2VJbk91dEN1YmljJzogY3ViaWMtYmV6aWVyKDAuNjUsIDAsIDAuMzUsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRDdWJpY1xuXG4gICdlYXNlSW5RdWFydCc6ICAgIGN1YmljLWJlemllcigwLjUsIDAsIDAuNzUsIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5RdWFydFxuICAnZWFzZU91dFF1YXJ0JzogICBjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dFF1YXJ0XG4gICdlYXNlSW5PdXRRdWFydCc6IGN1YmljLWJlemllcigwLjc2LCAwLCAwLjI0LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0UXVhcnRcblxuICAnZWFzZUluUXVpbnQnOiAgICBjdWJpYy1iZXppZXIoMC42NCwgMCwgMC43OCwgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1aW50XG4gICdlYXNlT3V0UXVpbnQnOiAgIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dFF1aW50XG4gICdlYXNlSW5PdXRRdWludCc6IGN1YmljLWJlemllcigwLjgzLCAwLCAwLjE3LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0UXVpbnRcblxuICAnZWFzZUluRXhwbyc6ICAgICBjdWJpYy1iZXppZXIoMC43LCAwLCAwLjg0LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluRXhwb1xuICAnZWFzZU91dEV4cG8nOiAgICBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dEV4cG9cbiAgJ2Vhc2VJbk91dEV4cG8nOiAgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRFeHBvXG5cbiAgJ2Vhc2VJbkNpcmMnOiAgICAgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDEsIDAuNDUpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5DaXJjXG4gICdlYXNlT3V0Q2lyYyc6ICAgIGN1YmljLWJlemllcigwLCAwLjU1LCAwLjQ1LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dENpcmNcbiAgJ2Vhc2VJbk91dENpcmMnOiAgY3ViaWMtYmV6aWVyKDAuODUsIDAsIDAuMTUsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRDaXJjXG5cbiAgJ2Vhc2VJbkJhY2snOiAgICAgY3ViaWMtYmV6aWVyKDAuMzYsIDAsIDAuNjYsIC0wLjU2KSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQmFja1xuICAnZWFzZU91dEJhY2snOiAgICBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRCYWNrXG4gICdlYXNlSW5PdXRCYWNrJzogIGN1YmljLWJlemllcigwLjY4LCAtMC42LCAwLjMyLCAxLjYpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRCYWNrXG4pO1xuIiwiLyoqXG4gKiBTZXR0aW5ncyAtIEJyZWFrcG9pbnRzXG4gKiAtIDAxIC0gTWFwcGluZ1xuICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gTWFwcGluZ1xuICBEZWZhdWx0IG1hcHBpbmcgb2YgZ3JpZCBicmVha3BvaW50cywgd2hpY2ggaXMgdXNlZCBpbiB0aGUgZnVuY3Rpb24gYW5kIG1peGluIGJyZWFrcG9pbnQgZmlsZXMuIEFuIGV4YW1wbGUgb2YgdXNpbmdcbiAgYnJlYWtwb2ludHMgaW4gYSBmaWxlIGlzIGJ5IHVzaW5nIHRoZSBtaXhpbiB3aXRoIHRoZSBuYW1lIG9mIGEgYnJlYWtwb2ludDogYEBpbmNsdWRlIGJwLW1pbihzbWFsbCkge31gLlxuXG4gIFRoZXNlIGJyZWFrcG9pbnRzIG1heSBiZSBhbHRlcmVkIGRlcGVuZGluZyBvbiB0aGUgdGhlbWUgbmVlZHMuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kZ3JpZC1icmVha3BvaW50czogKFxuICB4c21hbGw6IDBweCxcbiAgc21hbGw6IDM3NnB4LFxuICB4bWVkaXVtOiA2MDBweCxcbiAgbWVkaXVtOiA3NjhweCxcbiAgbWVkaXVtMjogOTQycHgsXG4gIGxhcmdlOiAxMDI0cHgsXG4gIGxhcmdlMjogMTE5NXB4LFxuICBsYXJnZXI6IDEzMjBweCxcbiAgeGxhcmdlOiAxNDQwcHgsXG4gIHh4bGFyZ2U6IDE1NjBweCxcbiAgeHh4bGFyZ2U6IDE2MDBweCxcbik7XG4iLCIvKipcbiAqIFNldHRpbmdzIC0gQ29sb3JcbiAqIFN0YW5kYXJkIHNldHMgb2YgY29sb3IgdmFyaWFibGVzIGFuZCBtYXBwaW5ncyB0byBiZSBvZiB1c2UgYWNyb3NzIHRoZSBzaXRlLCBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LlxuICpcbiAqIC0gMDEgLSBUaGVtZSBDb2xvcnNcbiAqIC0gMDIgLSBHcmF5c2NhbGVcbiAqIC0gMDMgLSBVdGlsaXRpZXNcbiAqIC0gMDQgLSBNYXBwaW5nXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFRoZW1lIENvbG9yc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbG9yLWJsdWU6ICAgICAgIzBENkVGRDtcbiRjb2xvci1pbmRpZ286ICAgICM2NjEwRjI7XG4kY29sb3ItcHVycGxlOiAgICAjNkY0MkMxO1xuJGNvbG9yLXBpbms6ICAgICAgI0Q2MzM4NDtcbiRjb2xvci1yZWQ6ICAgICAgICNEQzM1NDU7XG4kY29sb3Itb3JhbmdlOiAgICAjRkQ3RTE0O1xuJGNvbG9yLXllbGxvdzogICAgI0ZGQzEwNztcbiRjb2xvci1ncmVlbjogICAgICMxOTg3NTQ7XG4kY29sb3ItdGVhbDogICAgICAjMjBDOTk3O1xuJGNvbG9yLWN5YW46ICAgICAgIzBEQ0FGMDtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBHcmF5c2NhbGVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRjb2xvci13aGl0ZTogICAgICNGRkZGRkY7XG4kY29sb3ItZ3JheS0xMDA6ICAjRjhGOUZBO1xuJGNvbG9yLWdyYXktMjAwOiAgI0U5RUNFRjtcbiRjb2xvci1ncmF5LTMwMDogICNERUUyRTY7XG4kY29sb3ItZ3JheS00MDA6ICAjQ0VENERBO1xuJGNvbG9yLWdyYXktNTAwOiAgI0FEQjVCRDtcbiRjb2xvci1ncmF5LTYwMDogICM2Qzc1N0Q7XG4kY29sb3ItZ3JheS03MDA6ICAjNDk1MDU3O1xuJGNvbG9yLWdyYXktODAwOiAgIzM0M0E0MDtcbiRjb2xvci1ncmF5LTkwMDogICMyMTI1Mjk7XG4kY29sb3ItYmxhY2s6ICAgICAjMDAwMDAwO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFV0aWxpdGllc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbG9yLXByaW1hcnk6ICAgJGNvbG9yLWJsdWU7XG4kY29sb3Itc2Vjb25kYXJ5OiAkY29sb3ItZ3JheS02MDA7XG4kY29sb3Itc3VjY2VzczogICAkY29sb3ItZ3JlZW47XG4kY29sb3ItaW5mbzogICAgICAkY29sb3ItY3lhbjtcbiRjb2xvci13YXJuaW5nOiAgICRjb2xvci15ZWxsb3c7XG4kY29sb3ItZGFuZ2VyOiAgICAkY29sb3ItcmVkO1xuJGNvbG9yLWxpZ2h0OiAgICAgJGNvbG9yLWdyYXktMTAwO1xuJGNvbG9yLWRhcms6ICAgICAgJGNvbG9yLWdyYXktOTAwO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE1hcHBpbmdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRjb2xvcnM6IChcbiAgJ2JsdWUnOiAgICAgICAgICRjb2xvci1ibHVlLFxuICAnaW5kaWdvJzogICAgICAgJGNvbG9yLWluZGlnbyxcbiAgJ3B1cnBsZSc6ICAgICAgICRjb2xvci1wdXJwbGUsXG4gICdwaW5rJzogICAgICAgICAkY29sb3ItcGluayxcbiAgJ3JlZCc6ICAgICAgICAgICRjb2xvci1yZWQsXG4gICdvcmFuZ2UnOiAgICAgICAkY29sb3Itb3JhbmdlLFxuICAneWVsbG93JzogICAgICAgJGNvbG9yLXllbGxvdyxcbiAgJ2dyZWVuJzogICAgICAgICRjb2xvci1ncmVlbixcbiAgJ3RlYWwnOiAgICAgICAgICRjb2xvci10ZWFsLFxuICAnY3lhbic6ICAgICAgICAgJGNvbG9yLWN5YW4sXG5cbiAgJ3doaXRlJzogICAgICAgICRjb2xvci13aGl0ZSxcbiAgJ2dyYXktMTAwJzogICAgICRjb2xvci1ncmF5LTEwMCxcbiAgJ2dyYXktMjAwJzogICAgICRjb2xvci1ncmF5LTIwMCxcbiAgJ2dyYXktMzAwJzogICAgICRjb2xvci1ncmF5LTMwMCxcbiAgJ2dyYXktNDAwJzogICAgICRjb2xvci1ncmF5LTQwMCxcbiAgJ2dyYXktNTAwJzogICAgICRjb2xvci1ncmF5LTUwMCxcbiAgJ2dyYXktNjAwJzogICAgICRjb2xvci1ncmF5LTYwMCxcbiAgJ2dyYXktNzAwJzogICAgICRjb2xvci1ncmF5LTcwMCxcbiAgJ2dyYXktODAwJzogICAgICRjb2xvci1ncmF5LTgwMCxcbiAgJ2dyYXktOTAwJzogICAgICRjb2xvci1ncmF5LTkwMCxcbiAgJ2JsYWNrJzogICAgICAgICRjb2xvci1ibGFjayxcblxuICAncHJpbWFyeSc6ICAgICAgJGNvbG9yLXByaW1hcnksXG4gICdzZWNvbmRhcnknOiAgICAkY29sb3Itc2Vjb25kYXJ5LFxuICAnc3VjY2Vzcyc6ICAgICAgJGNvbG9yLXN1Y2Nlc3MsXG4gICdpbmZvJzogICAgICAgICAkY29sb3ItaW5mbyxcbiAgJ3dhcm5pbmcnOiAgICAgICRjb2xvci13YXJuaW5nLFxuICAnZGFuZ2VyJzogICAgICAgJGNvbG9yLWRhbmdlcixcbiAgJ2xpZ2h0JzogICAgICAgICRjb2xvci1saWdodCxcbiAgJ2RhcmsnOiAgICAgICAgICRjb2xvci1kYXJrLFxuKTtcbiIsIi8qKlxuICogU2V0dGluZ3MgLSBMYXlvdXRcbiAqIFN0YW5kYXJkIHNldHMgb2YgbGF5b3V0IHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gR3JpZFxuICogLSAwMiAtIFdpZHRoc1xuICogLSAwMyAtIExheWVyc1xuICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gR3JpZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbHVtbi1nYXAtbGFyZ2U6IDQwcHg7XG4kY29sdW1uLWdhcC1zbWFsbDogMjRweDtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBXaWR0aHNcbiAgLy8gJ3h4bGFyZ2UnOiAgMTkyMHB4LFxuICAvLyAneGxhcmdlJzogICAxNDQwcHgsXG4gIC8vICdsYXJnZSc6ICAgIDEyODBweCxcbiAgLy8gJ21lZGl1bSc6ICAgOTYwcHgsXG4gIC8vICdzbWFsbCc6ICAgIDc2OHB4LFxuICAvLyAneHNtYWxsJzogICA2NDBweCxcbiAgLy8gJ3h4c21hbGwnOiAgNDgwcHgsXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kd2lkdGhzOiAoXG4gIFwieHNtYWxsXCI6IDBweCxcbiAgXCJzbWFsbFwiOiAzNzZweCxcbiAgXCJ4bWVkaXVtXCI6IDYwMHB4LFxuICBcIm1lZGl1bVwiOiA3NjhweCxcbiAgXCJtZWRpdW0yXCI6IDk0MnB4LFxuICBcImxhcmdlXCI6IDEwMjRweCxcbiAgXCJsYXJnZTJcIjogMTE5NXB4LFxuICBcImxhcmdlclwiOiAxMzIwcHgsXG4gIFwieGxhcmdlXCI6IDE0NDBweCxcbiAgXCJ4eGxhcmdlXCI6IDE1NjBweCxcbiAgXCJ4eHhsYXJnZVwiOiAxNjAwcHgsXG4pO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIExheWVyc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJHotbGF5ZXJzOiAoXG4gIFwic3VwZXJcIjogMTAwLFxuICBcInRvcFwiOiA5MCxcbiAgXCJvdmVyXCI6IDEwLFxuICBcImRlZmF1bHRcIjogMSxcbiAgXCJ1bmRlclwiOiAtMSxcbiAgXCJib3R0b21sZXNzLXBpdFwiOiAtOTk5OSxcbik7XG4iLCIvKipcbiAqIFNldHRpbmdzIC0gVHlwb2dyYXBoeVxuICogU3RhbmRhcmQgc2V0cyBvZiB0eXBvZ3JhcGhpY2FsIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gSGVhZGluZyBTaXplc1xuICogLSAwMiAtIExpbmUgSGVpZ2h0c1xuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBIZWFkaW5nIFNpemVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kaGVhZGluZy1zaXplczogKFxuICB4c21hbGw6IChcbiAgICAnaDEnOiAoXG4gICAgICAnZm9udC1zaXplJzogNTZweCxcbiAgICApLFxuICAgICdoMic6IChcbiAgICAgICdmb250LXNpemUnOiA0MHB4LFxuICAgICksXG4gICAgJ2gzJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDMycHgsXG4gICAgKSxcbiAgICAnaDQnOiAoXG4gICAgICAnZm9udC1zaXplJzogMjBweCxcbiAgICApLFxuICAgICdoNSc6IChcbiAgICAgICdmb250LXNpemUnOiAxOHB4LFxuICAgICksXG4gICAgJ2g2JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDE2cHgsXG4gICAgKSxcbiAgKSxcbiAgbWVkaXVtOiAoXG4gICAgJ2gxJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDcycHgsXG4gICAgKSxcbiAgICAnaDInOiAoXG4gICAgICAnZm9udC1zaXplJzogNTZweCxcbiAgICApLFxuICAgICdoMyc6IChcbiAgICAgICdmb250LXNpemUnOiA0MHB4LFxuICAgICksXG4gICAgJ2g0JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDMycHgsXG4gICAgKSxcbiAgICAnaDUnOiAoXG4gICAgICAnZm9udC1zaXplJzogMjRweCxcbiAgICApLFxuICAgICdoNic6IChcbiAgICAgICdmb250LXNpemUnOiAxOHB4LFxuICAgICksXG4gICksXG4pO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIExpbmUgSGVpZ2h0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGxpbmUtaGVpZ2h0czogKFxuICAnaGVhZGluZyc6IDEuMixcbiAgJ2JvZHknOiAxLjYsXG4pOyIsIi8qKlxuICogRnVuY3Rpb25zIC0gQW5pbWF0aW9uc1xuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgYW5pbWF0aW9uIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBUcmFuc2l0aW9uXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJy4uL3NldHRpbmdzL2FuaW1hdGlvbnMnIGFzIGFuaW1hdGlvbnM7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gVHJhbnNpdGlvblxuICBFYXN5IHRvIHVzZSBmdW5jdGlvbiB0byBxdWlja2x5IGRlZmluZSBhIHRyYW5zaXRpb24gd2l0aCB0aGUgYWJpbGl0eSB0byByZWZlcmVuY2UgYSBsaWJyYXJ5IG1hcHBpbmcgb2YgYmV6aWVyLWN1cnZlXG4gIGFuaW1hdGlvbnMsIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgLlxuICAtIEBwYXJhbSAkYXJndW1lbnQ6IFN0eWxlIGFyZ3VtZW50cyB0aGF0IHRoaXMgdHJhbnNpdGlvbiBzaG91bGQgYmUgYXBwbGllZCB0by5cbiAgLSBAcGFyYW0gJGR1cmF0aW9uOiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhlIHRyYW5zaXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG4gIC0gQHBhcmFtICRzdHlsZTogVGhlIHN0eWxlIG9mIHRyYW5zaXRpb24sIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgXG4gIC0gQGV4YW1wbGUgPSB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uKGFsbCwgMC42cywgZWFzZUluT3V0U2luZSlcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiB0cmFuc2l0aW9uKCRhcmd1bWVudDogYWxsLCAkZHVyYXRpb246IDAuMzVzLCAkc3R5bGU6IGVhc2VJbk91dCkge1xuICBAaWYgbWFwLWhhcy1rZXkoYW5pbWF0aW9ucy4kdHJhbnNpdGlvbnMsICRzdHlsZSkge1xuICAgIEByZXR1cm4gJGFyZ3VtZW50ICRkdXJhdGlvbiBtYXAtZ2V0KGFuaW1hdGlvbnMuJHRyYW5zaXRpb25zLCAkc3R5bGUpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuIFwiTm8gdmFsdWUgY291bGQgYmUgcmV0cmlldmVkIGZvciBgI3skc3R5bGV9YC4gXCJcbiAgICArIFwiUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIGluIGAkYW5pbWF0aW9uc2AgbWFwLlwiO1xuICB9XG59IiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBCcmVha3BvaW50c1xuICogQnJlYWtwb2ludCB2aWV3cG9ydCBzaXplcyBhbmQgbWVkaWEgcXVlcmllcy4gQnJlYWtwb2ludHMgYXJlIGRlZmluZWQgYXMgYSBtYXAgb2YgKG5hbWU6IG1pbmltdW0gd2lkdGgpLCBvcmRlciBmcm9tXG4gKiB4c21hbGwgdG8geGxhcmdlOiAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpLiBUaGUgbWFwIGRlZmluZWQgaW4gdGhlIGAkZ3JpZC1icmVha3BvaW50c2BcbiAqIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIGFzIHRoZSBgJGJyZWFrcG9pbnRzYCBhcmd1bWVudCBieSBkZWZhdWx0LlxuICpcbiAqIC0gMDEgLSBCcmVha3BvaW50IE5leHRcbiAqIC0gMDIgLSBCcmVha3BvaW50IE1pbmltdW1cbiAqIC0gMDMgLSBCcmVha3BvaW50IE1heGltdW1cbiAqIC0gMDQgLSBCcmVha3BvaW50IEluZml4XG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEJyZWFrcG9pbnQgTmV4dFxuICBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnQtbmFtZXM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgbmFtZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cywgJGJyZWFrcG9pbnQtbmFtZXM6IG1hcC1rZXlzKCRicmVha3BvaW50cykpIHtcbiAgJG46IGluZGV4KCRicmVha3BvaW50LW5hbWVzLCAkbmFtZSk7XG4gIEBpZiBub3QgJG4ge1xuICAgIEBlcnJvciBcImJyZWFrcG9pbnQgYCN7JG5hbWV9YCBub3QgZm91bmQgaW4gYCN7JGJyZWFrcG9pbnRzfWBcIjtcbiAgfVxuICBAcmV0dXJuIGlmKCRuIDwgbGVuZ3RoKCRicmVha3BvaW50LW5hbWVzKSwgbnRoKCRicmVha3BvaW50LW5hbWVzLCAkbiArIDEpLCBudWxsKTtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBCcmVha3BvaW50IE1pbmltdW1cbiAgTWluaW11bSBicmVha3BvaW50IHdpZHRoLiBOdWxsIGZvciB0aGUgc21hbGxlc3QgKGZpcnN0KSBicmVha3BvaW50LlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgQHJldHVybiBpZigkbWluICE9IDAsICRtaW4sIG51bGwpO1xufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIEJyZWFrcG9pbnQgTWF4aW11bVxuICBUaGUgbWF4aW11bSB2YWx1ZSBpcyByZWR1Y2VkIGJ5IDAuMDJweCB0byB3b3JrIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2YgYG1pbi1gIGFuZCBgbWF4LWAgcHJlZml4ZXMgYW5kIHZpZXdwb3J0c1xuICB3aXRoIGZyYWN0aW9uYWwgd2lkdGhzLiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhcXVlcmllcy00LyNtcS1taW4tbWF4LiBVc2VzIDAuMDJweCByYXRoZXIgdGhhbiAwLjAxcHggdG8gd29ya1xuICBhcm91bmQgYSBjdXJyZW50IHJvdW5kaW5nIGJ1ZyBpbiBTYWZhcmkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xuICBAcmV0dXJuIGlmKCRtYXggYW5kICRtYXggPiAwLCAkbWF4IC0gLjAyLCBudWxsKTtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDQgLSBCcmVha3BvaW50IEluZml4XG4gIFJldHVybnMgYSBibGFuayBzdHJpbmcgaWYgc21hbGxlc3QgYnJlYWtwb2ludCwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIG5hbWUgd2l0aCBhIGRhc2ggaW4gZnJvbnQuIFVzZWZ1bCBmb3IgbWFraW5nXG4gIHJlc3BvbnNpdmUgdXRpbGl0aWVzLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1pbmZpeCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICBAcmV0dXJuIGlmKGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpID09IG51bGwsIFwiXCIsIFwiLSN7JG5hbWV9XCIpO1xufVxuIiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBDYWxjdWxhdGlvbnNcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGNhbGN1bGF0ZSBkaWZmZXJlbnQgdmFsdWVzIGZyb20gcGVyY2VudGFnZXMgdG8gc2l6aW5nIHN1Y2ggYXMgUkVNcy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIFRhcmdldC9Db250YWluZXIgUGVyY2VudGFnZVxuICogLSAwMyAtIFJFTXNcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnc2FzczptYXRoJztcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBUYXJnZXQvQ29udGFpbmVyIFBlcmNlbnRhZ2VcbiAgQ2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIG9mIGEgdGFyZ2V0IHNpemUgY29tcGFyZWQgdG8gYSBjb250YWluZXIgc2l6ZS5cbiAgLSBAcGFyYW0gJHRhcmdldDogU2l6ZSBvZiBhbiBlbGVtZW50IG5lZWRpbmcgYSBjYWxjdWxhdGVkIHBlcmNlbnRhZ2UuXG4gIC0gQHBhcmFtICRjb250YWluZXI6IFNpemUgb2YgdGhlIHRhcmdldCdzIGNvbnRhaW5lciwgbmVlZGVkIHRvIGNhbGN1bGF0ZSBwZXJjZW50YWdlLlxuICAtIEBleGFtcGxlID0gd2lkdGg6IGNhbGMtcGVyY2VudCgyNTAsIDEwMDApO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGNhbGMtcGVyY2VudCgkdGFyZ2V0LCAkY29udGFpbmVyKSB7XG4gIEByZXR1cm4gKCR0YXJnZXQgLyAkY29udGFpbmVyKSAqIDEwMCU7XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gUkVNc1xuICBDYWxjdWxhdGUgYSBzaXplIGludG8gUkVNIHVuaXRzIC0tIG1vc3RseSB1c2VkIGZvciBmb250IHNpemUgcmVuZGVyaW5nLlxuICAtIEBwYXJhbSAkc2l6ZTogU2l6ZSBvZiBhbiBlbGVtZW50IG5lZWRpbmcgYSBjYWxjdWxhdGVkIHNpemUgaW50byBSRU1zLlxuICAtIEBwYXJhbSAkYmFzZTogQmFzZSBmb250IHNpemUgb2YgdGhlIHNpdGUgLS0gZGVmYXVsdHMgdG8gMTZweC5cbiAgLSBAZXhhbXBsZSA9IGZvbnQtc2l6ZTogY2FsYy1yZW0oMjRweCk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kYmFzZS1mb250LXNpemU6IDE2cHggIWRlZmF1bHQ7XG5cbkBmdW5jdGlvbiByZW0oJHNpemUsICRiYXNlOiAkYmFzZS1mb250LXNpemUpIHtcbiAgJHJlbS1zaXplOiBtYXRoLmRpdigkc2l6ZSwgJGJhc2UpO1xuICBAcmV0dXJuICN7JHJlbS1zaXplfXJlbTtcbn1cbiIsIi8qKlxuICogRnVuY3Rpb25zIC0gQ29sb3JcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGNvbG9yIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBDb2xvclxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICcuLi9zZXR0aW5ncy9jb2xvcnMnIGFzIGNvbG9ycztcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBDb2xvclxuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgY29sb3IgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fY29sb3JzLnNjc3MuXG4gIC0gQHBhcmFtICRjb2xvcjogVGhlIHNlbGVjdGVkIGNvbG9yLlxuICAtIEBleGFtcGxlID0gYmFja2dyb3VuZC1jb2xvcjogY29sb3IocHJpbWFyeSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gY29sb3IoJGNvbG9yKSB7XG4gIEBpZiBtYXAtaGFzLWtleShjb2xvcnMuJGNvbG9ycywgJGNvbG9yKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KGNvbG9ycy4kY29sb3JzLCAkY29sb3IpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuICdObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRjb2xvcn1gLidcbiAgICArICdQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgaW4gYCRjb2xvcnNgIG1hcC4nO1xuICB9XG59XG4iLCIvKipcbiAqIEZ1bmN0aW9ucyAtIExheW91dFxuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgbGF5b3V0IHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBaLWluZGV4XG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJy4uL3NldHRpbmdzL2xheW91dCcgYXMgbGF5b3V0O1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFdpZHRoc1xuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgd2lkdGggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICR3aWR0aDogVGhlIHNlbGVjdGVkIHdpZHRoIHNpemUuXG4gIC0gQGV4YW1wbGU6IHdpZHRoOiB3aWR0aChsYXJnZSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gd2lkdGgoJHNpemUpIHtcbiAgQGlmIG1hcC1oYXMta2V5KGxheW91dC4kd2lkdGhzLCAkc2l6ZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChsYXlvdXQuJHdpZHRocywgJHNpemUpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuICdObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRzaXplfWAuJ1xuICAgICsgJ1BsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiBgJHotbGF5ZXJzYCBtYXAuJztcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFotaW5kZXhcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIHotaW5kZXggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICRrZXk6IFRoZSBzZWxlY3RlZCBsYXllciB0eXBlLlxuICAtIEBleGFtcGxlID0gei1pbmRleDogei1pbmRleChib3R0b21sZXNzLXBpdClcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiB6LWluZGV4KCRrZXkpIHtcbiAgQGlmIG1hcC1oYXMta2V5KGxheW91dC4kei1sYXllcnMsICRrZXkpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobGF5b3V0LiR6LWxheWVycywgJGtleSk7XG4gIH1cblxuICBAZWxzZSB7XG4gICAgQHdhcm4gJ05vIHZhbHVlIGNvdWxkIGJlIHJldHJpZXZlZCBmb3IgYCN7JGtleX1gLidcbiAgICArICdQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgaW4gYCR6LWxheWVyc2AgbWFwLic7XG4gIH1cbn1cbiIsIi8qKlxuICogRnVuY3Rpb25zIC0gVHlwb2dyYXBoeVxuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgdHlwb2dyYXBoaWNhbCB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gTGluZSBIZWlnaHRcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnLi4vc2V0dGluZ3MvdHlwb2dyYXBoeScgYXMgdHlwb2dyYXBoeTtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBMaW5lIEhlaWdodFxuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgTGluZSBIZWlnaHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluXG4gIGBwYXJ0aWFscy9zZXR0aW5ncy9fdHlwb2dyYXBoeS5zY3NzYC5cbiAgLSBAcGFyYW0gJHNpemU6IFRoZSBzZWxlY3RlZCBMaW5lIEhlaWdodCB0eXBlLlxuICAtIEBleGFtcGxlOiBsaW5lLWhlaWdodDogbGluZS1oZWlnaHQoaGVhZGluZyk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gbGluZS1oZWlnaHQoJHNpemUpIHtcbiAgQGlmIG1hcC1oYXMta2V5KHR5cG9ncmFwaHkuJGxpbmUtaGVpZ2h0cywgJHNpemUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQodHlwb2dyYXBoeS4kbGluZS1oZWlnaHRzLCAkc2l6ZSk7XG4gIH1cblxuICBAZWxzZSB7XG4gICAgQHdhcm4gXCJObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRzaXplfWAuIFwiXG4gICAgKyBcIlBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiBgJGxpbmUtaGVpZ2h0c2AgbWFwLlwiO1xuICB9XG59XG4iLCIvKipcbiAqIE1peGlucyAtIEJyZWFrcG9pbnRzXG4gKiBVc2UgdGhlc2UgbWl4aW5zIG1haW5seSB3aGVuIGRlZmluaW5nIG1lZGlhIGJyZWFrcG9pbnQgc3BlY2lmaWNhdGlvbnMgaW4gdGhlbWUgZmlsZXMuIEJvdGggc2V0dGluZ3MgYW5kIGZ1bmN0aW9uc1xuICogYXJlIGltcG9ydGVkIGhlcmUgdG8gc3VwcGxlbWVudCB0aGUgbWl4aW5zIHRoZW1zZWx2ZXMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBNaW5pbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDMgLSBNYXhpbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDQgLSBCZXR3ZWVuIEJyZWFrcG9pbnRcbiAqIC0gMDUgLSBPbmx5IEJyZWFrcG9pbnRcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnLi4vc2V0dGluZ3MvYnJlYWtwb2ludHMnIGFzIGJwLXNldHRpbmdzO1xuQHVzZSAnLi4vZnVuY3Rpb25zL2JyZWFrcG9pbnRzJyBhcyBicC1mdW5jdGlvbnM7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gTWluaW11bSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIG9mIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGggLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGFib3ZlIHRoZSBicmVha3BvaW50IHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtbWluKGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGJwLW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzOiBicC1zZXR0aW5ncy4kZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cyk7XG4gIEBpZiAkbWluIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE1heGltdW0gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSBvZiBhdCBtb3N0IHRoZSBtYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGggLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGJlbG93IHRoZSBicmVha3BvaW50IHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtbWF4KGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGJwLW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiBicC1zZXR0aW5ncy4kZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50cyk7XG4gIEBpZiAkbWF4IHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIEJldHdlZW4gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSB0aGF0IHNwYW5zIG11bHRpcGxlIGJyZWFrcG9pbnQgd2lkdGhzIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBiZXR3ZWVuIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRsb3dlcjogU2VsZWN0ZWQgbWluaW11bSBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkdXBwZXI6IFNlbGVjdGVkIG1heGltdW0gYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1iZXR3ZWVuKHhzbWFsbCwgbGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gYnAtYmV0d2VlbigkbG93ZXIsICR1cHBlciwgJGJyZWFrcG9pbnRzOiBicC1zZXR0aW5ncy4kZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1taW4oJGxvd2VyLCAkYnJlYWtwb2ludHMpO1xuICAkbWF4OiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1tYXgoJHVwcGVyLCAkYnJlYWtwb2ludHMpO1xuXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1heCA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBicC1taW4oJGxvd2VyLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xuICAgIEBpbmNsdWRlIGJwLW1heCgkdXBwZXIsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA1IC0gT25seSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIGJldHdlZW4gdGhlIGJyZWFrcG9pbnQncyBtaW5pbXVtIGFuZCBtYXhpbXVtIHdpZHRocyAtLSBObyBtaW5pbXVtIGZvciB0aGUgc21hbGxlc3QgYnJlYWtwb2ludCwgYW5kXG4gIG5vIG1heGltdW0gZm9yIHRoZSBsYXJnZXN0IG9uZS5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtb25seShsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBicC1vbmx5KCRuYW1lLCAkYnJlYWtwb2ludHM6IGJwLXNldHRpbmdzLiRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtaW46IGJwLWZ1bmN0aW9ucy5icmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgJG1heDogYnAtZnVuY3Rpb25zLmJyZWFrcG9pbnQtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHMpO1xuXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1heCA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBicC1taW4oJG5hbWUsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtaW4gPT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgYnAtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBNaXhpbnMgLSBMaXN0c1xuICogVXNlIHRoZXNlIG1peGlucyB3aGVuIG5lZWRpbmcgdG8gZWFzaWx5IGRlZmluZSBsaXN0cyBzdHlsZXMuXG4gKlxuICogLSAwMSAtIEJhc2VcbiAqIC0gMDIgLSBCdWxsZXRzXG4gKiAtIDAzIC0gTnVtYmVyZWRcbiAqIC0gMDQgLSBObyBCdWxsZXRzXG4gKiAtIDA1IC0gSW5saW5lXG4gKiAtIDA2IC0gUnVsZWRcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gQmFzZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLXJlc2V0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBCdWxsZXRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0tYnVsbGV0cygkaXRlbS1zZWxlY3RvcjogbGkpIHtcbiAgQGluY2x1ZGUgbGlzdC0tcmVzZXQ7XG5cbiAgPiAjeyRpdGVtLXNlbGVjdG9yfTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFwyMDIyXCI7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG5cbiAgdWwge1xuICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLWluZGVudCk7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBOdW1iZXJlZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLW51bWJlcmVkKCRpdGVtLXNlbGVjdG9yOiBsaSkge1xuICBAaW5jbHVkZSBsaXN0LS1yZXNldDtcbiAgY291bnRlci1yZXNldDogbnVtYmVyO1xuXG4gID4gI3skaXRlbS1zZWxlY3Rvcn06YmVmb3JlIHtcbiAgICBjb250ZW50OiBjb3VudGVycyhudW1iZXIsIFwiLlwiKSBcIi5cIjtcbiAgICBjb3VudGVyLWluY3JlbWVudDogbnVtYmVyO1xuICB9XG5cbiAgLy8gU2Vjb25kIExldmVsXG4gIG9sIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuXG4gICAgPiAjeyRpdGVtLXNlbGVjdG9yfSB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB0ZXh0LWluZGVudDogLTMwcHg7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC41ZW07XG4gICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gTm8gQnVsbGV0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLW5vLWJ1bGxldHMoJGl0ZW0tc2VsZWN0b3I6IGxpKSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcblxuICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA1IC0gSW5saW5lXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0taW5saW5lKCRpdGVtLXNlbGVjdG9yOiBsaSkge1xuICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDYgLSBSdWxlZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLXJ1bGVkIChcbiAgJHNwYWNpbmc6IDJlbSxcbiAgJHN0eWxlOiBcImlubmVyXCIsXG4gICRib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1jb2xvciksXG4gICRib3JkZXItc2l6ZTogMXB4LFxuICAkYm9yZGVyLXN0eWxlOiBzb2xpZCxcbiAgJGl0ZW0tc2VsZWN0b3I6IGxpXG4pIHtcbiAgQGluY2x1ZGUgbGlzdC0tbm8tYnVsbGV0cztcblxuICBAaWYgKCRzdHlsZSA9PSBpbm5lciBvciAkc3R5bGUgPT0gYWJvdmUpIHtcbiAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICAgIGJvcmRlci10b3A6ICRib3JkZXItc2l6ZSAkYm9yZGVyLXN0eWxlICRib3JkZXItY29sb3I7XG4gICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZztcbiAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZztcbiAgICB9XG5cbiAgICBAaWYgKCRzdHlsZSA9PSBpbm5lcikge1xuICAgICAgPiAjeyRpdGVtLXNlbGVjdG9yfTpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9OmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgKCRzdHlsZSA9PSBvdXRlciBvciAkc3R5bGUgPT0gYmVsb3cpIHtcbiAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc2l6ZSAkYm9yZGVyLXN0eWxlICRib3JkZXItY29sb3I7XG4gICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZztcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZztcbiAgICB9XG5cbiAgICBAaWYgKCRzdHlsZSA9PSBvdXRlcikge1xuICAgICAgPiAjeyRpdGVtLXNlbGVjdG9yfTpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3A6ICRib3JkZXItc2l6ZSAkYm9yZGVyLXN0eWxlICRib3JkZXItY29sb3I7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZztcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgPiAjeyRpdGVtLXNlbGVjdG9yfTpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogTWl4aW5zIC0gVHlwb2dyYXBoeVxuICogVXNlIHRoZXNlIG1peGlucyB3aGVuIG5lZWRpbmcgdG8gZWFzaWx5IGRlZmluZSB0eXBvZ3JhcGh5IHN0eWxlcywgc3VjaCBhcyBzaXplcyBhbmQgdHlwb2dyYXBoaWNhbCBsYXlvdXQuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBIZWFkaW5nIFNpemVcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnYnJlYWtwb2ludHMnIGFzIGJyZWFrcG9pbnRzO1xuQHVzZSAnLi4vZnVuY3Rpb25zL2NhbGN1bGF0aW9ucycgYXMgY2FsY3VsYXRpb25zO1xuQHVzZSAnLi4vc2V0dGluZ3MvdHlwb2dyYXBoeScgYXMgdHlwb2dyYXBoeTtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBIZWFkaW5nIFNpemVcbiAgTWVhbnQgZm9yIHJlc3BvbnNpdmUgaGVhZGluZyBzaXplcyBhbmQgaXMgYmFzZWQgdXBvbiBicmVha3BvaW50cyBhbmQgYSBtYXBwaW5nIG9mIGhlYWRpbmcgc2l6ZXMuIEJyZWFrcG9pbnRzIGFyZVxuICBkZWZpbmVkIGluIHRoZSBgcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NgIGZpbGUgYW5kIGFyZSB1dGlsaXplZCB3aXRoIGEgbWl4aW4sIGFzIGRlZmluZWQgaW5cbiAgYHBhcnRpYWxzL21peGlucy9fYnJlYWtwb2ludHMuc2Nzc2AuXG4gIC0gQHBhcmFtICRzZXR0aW5nOiBTZWxlY3RlZCBoZWFkaW5nIHRvIGFwcGx5IHJlc3BvbnNpdmUgc2l6aW5nIHRvLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGhlYWRpbmctc2l6ZSgkc2V0dGluZykge1xuICBAZWFjaCAkc2l6ZSwgJGVsZW1lbnRzIGluIHR5cG9ncmFwaHkuJGhlYWRpbmctc2l6ZXMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnRzLmJwLW1pbigkc2l6ZSkge1xuICAgICAgZm9udC1zaXplOiBjYWxjdWxhdGlvbnMucmVtKG1hcC1nZXQobWFwLWdldCgkZWxlbWVudHMsICRzZXR0aW5nKSwgJ2ZvbnQtc2l6ZScpKTtcbiAgICB9XG4gIH1cbn1cbiIsIkB1c2UgXCIuLi8uLi8uLi9saWJyYXJpZXMvcGFydGlhbHMvcGFydGlhbHNcIiBhcyAqO1xuXG4vKioqKiBTVEFSVCAtIE1haW4gdGFuc3BhcmVuY3ksIG1lbnUgd3JhcHBlcnMgJiBwbGFjZW1lbnQgKioqKi9cblxuLy8gUmVtb3ZlIHRyYW5zcGFyZW5jeVxubWFpbjo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLy8gTG9jayBzY3JlZW5cbi5qcy1wcmV2ZW50LXNjcm9sbCB7XG4gIEBpbmNsdWRlIGJwLW1heChtZWRpdW0pIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLy8gQXBwbHkgdHJhbnNwYXJlbmN5IG92ZXJsYXkgdG8gbWFpbiBjb250ZW50XG4gICAgbWFpbjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb24oYWxsLCAwLjI1cywgZWFzZUluT3V0KTtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDsgLyogU2l0IG9uIHRvcCBvZiB0aGUgcGFnZSBjb250ZW50ICovXG4gICAgICB3aWR0aDogMTAwJTsgLyogRnVsbCB3aWR0aCAoY292ZXIgdGhlIHdob2xlIHBhZ2UpICovXG4gICAgICBoZWlnaHQ6IDEwMCU7IC8qIEZ1bGwgaGVpZ2h0IChjb3ZlciB0aGUgd2hvbGUgcGFnZSkgKi9cbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuICB9XG5cbiAgLy8gT2Zmc2V0IHRvcCBvZiBvdmVybGF5IHRvIGhlYWRlciBpcyB2aXNpYmxlXG4gIEBpbmNsdWRlIGJwLW1heChtZWRpdW0pIHtcbiAgICBtYWluOjpiZWZvcmUge1xuICAgICAgdG9wOiByZW0oNzJweCk7XG4gICAgfVxuXG4gICAgLy8gRm9yIGxvZ2dlZCBpbiB1c2VycyBvZmZzZXQgdG9wXG4gICAgJi51c2VyLWxvZ2dlZC1pbiBtYWluOjpiZWZvcmUge1xuICAgICAgcGFkZGluZy10b3A6IDQwcHg7XG4gICAgICB0b3A6IDE0MHB4O1xuICAgIH1cbiAgfVxufVxuXG4uc2l0ZS1oZWFkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDM7XG59XG5cbi5zaXRlLWhlYWRlcl9faW5uZXIge1xuICAvLyBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogMDtcbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIC8vIHBhZGRpbmc6IHJlbSgyMHB4KSAwIDAgMDtcbiAgfVxufVxuXG4vKioqKiBFTkQgLSBNYWluIHRhbnNwYXJlbmN5LCBtZW51IHdyYXBwZXJzICYgcGxhY2VtZW50ICoqKiovXG5cbi8qKioqIFNUQVJUIC0gTWFpbiBOYXZpZ2F0aW9uICoqKiovXG4uc2l0ZS1oZWFkZXJfX25hdmlnYXRpb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG5cbiAgQGluY2x1ZGUgYnAtbWF4KG1lZGl1bSkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgdG9wOiByZW0oNzJweCk7XG4gICAgYm90dG9tOiAwO1xuICAgIC8vIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgei1pbmRleDogLTE7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb24oYWxsLCAwLjI1cywgZWFzZUluT3V0KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwcHggMHB4IDQwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBwYWRkaW5nOiByZW0oMjBweCk7XG5cbiAgICAmID4gKjpudGgtY2hpbGQoMSkge1xuICAgICAgb3JkZXI6IDQ7XG4gICAgfVxuICAgICYgPiAqOm50aC1jaGlsZCgyKSB7XG4gICAgICBvcmRlcjogNTtcbiAgICB9XG4gICAgJiA+ICo6bnRoLWNoaWxkKDMpIHtcbiAgICAgIG9yZGVyOiAxO1xuICAgIH1cbiAgICAmID4gKjpudGgtY2hpbGQoNCkge1xuICAgICAgb3JkZXI6IDM7XG4gICAgfVxuICAgICYgPiAqOm50aC1jaGlsZCg1KSB7XG4gICAgICBvcmRlcjogMjtcbiAgICB9XG5cbiAgICAvL0NvbnRyb2wgd2lkdGggZm9yIHNsaWRlIG91dFxuICAgIC8vIG1heC13aWR0aDogMzc1cHg7XG5cbiAgICAvLyBGb3IgbG9nZ2VkIGluIHVzZXJzIG9mZnNldCB0b3BcbiAgICAudXNlci1sb2dnZWQtaW4gJiB7XG4gICAgICB0b3A6IHJlbSgxNTlweCk7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIC8vIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAvLyBkaXNwbGF5OiBmbGV4O1xuICAgIC8vIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgLy8gZmxleC1mbG93OiBjb2x1bW4tcmV2ZXJzZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cbn1cbi8vICBNZW51IFBvc2l0aW9uc1xuLnNpdGUtaGVhZGVyX19uYXZpZ2F0aW9uIHtcbiAgQGluY2x1ZGUgYnAtbWF4KG1lZGl1bSkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgfVxufVxuXG4uc2l0ZS1oZWFkZXJfX25hdmlnYXRpb24ge1xuICAjYmxvY2staGN3aC1tYWlubmF2aWdhdGlvbiB7XG4gICAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gICAgICBmbGV4OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKiBFTkQgLSBNYWluIE5hdmlnYXRpb24gKioqKi9cblxuLyoqKiogU1RBUlQgLSBVdGlsaXR5IE5hdmlnYXRpb24gKioqKi9cbi8vIC5zaXRlLWhlYWRlcl9fdXRpbGl0aWVzIHtcbi8vICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbi8vIH1cblxuLyoqKiogRU5EIC0gVXRpbGl0eSBOYXZpZ2F0aW9uICoqKiovXG5cbi8qKioqIFNUQVJUIC0gTW9iaWxlIE5hdmlnYXRpb24gQnV0dG9uICoqKiovXG4ucmVnaW9uX19uYW1lLS1uYXZpZ2F0aW9uIHtcbiAgbWFyZ2luLXJpZ2h0OiByZW0oLTIwcHgpO1xuICBAaW5jbHVkZSBicC1taW4oeG1lZGl1bSkge1xuICAgIG1hcmdpbi1yaWdodDogcmVtKC0zMHB4KTtcbiAgfVxuICBAaW5jbHVkZSBicC1tYXgobWVkaXVtKSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWxsLWFjY2VudCk7XG4gICAgcGFkZGluZzogcmVtKDEycHgpIHJlbSgyNHB4KTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuLm5hdi10cmlnZ2VyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgQGluY2x1ZGUgYnAtbWF4KG1lZGl1bSkge1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGhlaWdodDogcmVtKDQ4cHgpO1xuICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLWJvdHRvbTogYXV0bztcbiAgICBtYXgtd2lkdGg6IDEwMHB4O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZ2FwOiByZW0oOHB4KTtcbiAgICBmb250LXNpemU6IHJlbSgxOHB4KTtcbiAgICBsaW5lLWhlaWdodDogMTMzLjMzMyU7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO1xuICAgIC5sYWJlbCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYmxhY2spO1xuICAgIH1cbiAgfVxufVxuXG5sYWJlbFtmb3I9XCJuYXYtdHJpZ2dlclwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgaGVpZ2h0OiAzMHB4O1xuICBtYXJnaW46IGF1dG87XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDMwcHg7IC8vc3BhbigxKTtcbiAgdG9wOiAxOHB4O1xuICB3aWR0aDogMzBweDtcbiAgei1pbmRleDogMjtcblxuICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4ubmF2LXRyaWdnZXIgc3Bhbi5pY29uIHtcbiAgd2lkdGg6IHJlbSgxMnB4KTtcbiAgaGVpZ2h0OiByZW0oMTJweCk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBzdmcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgfVxufVxuXG4vLyBDb250cm9scyBmb3Igd2hlbiBtZW51ICBpcyBvcGVuXG4ubmF2LXRyaWdnZXJfX2ljb24tLWV4cGFuZCB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogcm90YXRlKDApIHNjYWxlKDEpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uKGFsbCwgMC4zNXMsIGVhc2VJbk91dCk7XG59XG5cbi5uYXYtdHJpZ2dlcl9faWNvbi0tY29sbGFwc2Uge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpIHNjYWxlKDApO1xuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uKGFsbCwgMC4yNXMsIGVhc2VJbk91dCk7XG59XG5cbi5uYXYtdHJpZ2dlclthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSB7XG4gIC5uYXYtdHJpZ2dlcl9faWNvbi0tY29sbGFwc2Uge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCkgc2NhbGUoMSk7XG4gIH1cblxuICAubmF2LXRyaWdnZXJfX2ljb24tLWV4cGFuZCB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgc2NhbGUoMCk7XG4gIH1cbn1cblxuLy8gT24gc21hbGwgc2NyZWVucyBjb250cm9sIGRpc3BsYXkgZm9yIGJvdGggbWFpbiBtZW51ICYgdXRpbGl0eVxuQGluY2x1ZGUgYnAtbWF4KG1lZGl1bSkge1xuICAubmF2LXRyaWdnZXJbYXJpYS1leHBhbmRlZD1cImZhbHNlXCJdIHtcbiAgICB+IC5zaXRlLWhlYWRlcl9fbmF2aWdhdGlvbiB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzNzVweCwgMCwgMCk7XG4gICAgfVxuICB9XG4gIC5uYXYtdHJpZ2dlclthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSB7XG4gICAgfiAuc2l0ZS1oZWFkZXJfX25hdmlnYXRpb24ge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAgIHotaW5kZXg6IDM7XG4gICAgfVxuICB9XG59XG4vKioqKiBFTkQgLSBNb2JpbGUgTmF2aWdhdGlvbiBCdXR0b24gKioqKi9cbiIsIi8qKlxuICogUGFydGlhbHMgQ29tYmluZWRcbiAqIFBhcnRpYWxzIGNhbiBiZSBpbXBvcnRlZCBpbnRvIHRoZW1lIGZpbGVzIGVpdGhlciBvbmUgYnkgb25lLCBvciBieSB1c2luZyB0aGlzIGNvbWJpbmVkIFBhcnRpYWxzIGZpbGUuIFRvIHVzZSB0aGlzXG4gKiBmaWxlIGFzIHRoZSBpbXBvcnQgc3RhdGVtZW50LCBgQHVzZSAnW3BhdGhdL3BhcnRpYWxzL3BhcnRpYWxzJyBhcyAqYC5cbiAqXG4gKiAtIDAxIC0gU2V0dGluZ3NcbiAqIC0gMDIgLSBGdW5jdGlvbnNcbiAqIC0gMDMgLSBNaXhpbnNcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBTZXR0aW5nc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogU2V0dGluZ3MgLSBBbmltYXRpb25zXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGFuaW1hdGlvbiB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIFRyYW5zaXRpb25zXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gVHJhbnNpdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gQnJlYWtwb2ludHNcbiAqIC0gMDEgLSBNYXBwaW5nXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gTWFwcGluZ1xuICBEZWZhdWx0IG1hcHBpbmcgb2YgZ3JpZCBicmVha3BvaW50cywgd2hpY2ggaXMgdXNlZCBpbiB0aGUgZnVuY3Rpb24gYW5kIG1peGluIGJyZWFrcG9pbnQgZmlsZXMuIEFuIGV4YW1wbGUgb2YgdXNpbmdcbiAgYnJlYWtwb2ludHMgaW4gYSBmaWxlIGlzIGJ5IHVzaW5nIHRoZSBtaXhpbiB3aXRoIHRoZSBuYW1lIG9mIGEgYnJlYWtwb2ludDogYEBpbmNsdWRlIGJwLW1pbihzbWFsbCkge31gLlxuXG4gIFRoZXNlIGJyZWFrcG9pbnRzIG1heSBiZSBhbHRlcmVkIGRlcGVuZGluZyBvbiB0aGUgdGhlbWUgbmVlZHMuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBTZXR0aW5ncyAtIENvbG9yXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGNvbG9yIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gVGhlbWUgQ29sb3JzXG4gKiAtIDAyIC0gR3JheXNjYWxlXG4gKiAtIDAzIC0gVXRpbGl0aWVzXG4gKiAtIDA0IC0gTWFwcGluZ1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFRoZW1lIENvbG9yc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gR3JheXNjYWxlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBVdGlsaXRpZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE1hcHBpbmdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gTGF5b3V0XG4gKiBTdGFuZGFyZCBzZXRzIG9mIGxheW91dCB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIEdyaWRcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBMYXllcnNcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBHcmlkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBXaWR0aHNcbiAgLy8gJ3h4bGFyZ2UnOiAgMTkyMHB4LFxuICAvLyAneGxhcmdlJzogICAxNDQwcHgsXG4gIC8vICdsYXJnZSc6ICAgIDEyODBweCxcbiAgLy8gJ21lZGl1bSc6ICAgOTYwcHgsXG4gIC8vICdzbWFsbCc6ICAgIDc2OHB4LFxuICAvLyAneHNtYWxsJzogICA2NDBweCxcbiAgLy8gJ3h4c21hbGwnOiAgNDgwcHgsXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBMYXllcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gVHlwb2dyYXBoeVxuICogU3RhbmRhcmQgc2V0cyBvZiB0eXBvZ3JhcGhpY2FsIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gSGVhZGluZyBTaXplc1xuICogLSAwMiAtIExpbmUgSGVpZ2h0c1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEhlYWRpbmcgU2l6ZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIExpbmUgSGVpZ2h0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gRnVuY3Rpb25zXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBQYXJ0aWFscyBDb21iaW5lZFxuICogUGFydGlhbHMgY2FuIGJlIGltcG9ydGVkIGludG8gdGhlbWUgZmlsZXMgZWl0aGVyIG9uZSBieSBvbmUsIG9yIGJ5IHVzaW5nIHRoaXMgY29tYmluZWQgUGFydGlhbHMgZmlsZS4gVG8gdXNlIHRoaXNcbiAqIGZpbGUgYXMgdGhlIGltcG9ydCBzdGF0ZW1lbnQsIGBAdXNlICdbcGF0aF0vcGFydGlhbHMvcGFydGlhbHMnIGFzICpgLlxuICpcbiAqIC0gMDEgLSBTZXR0aW5nc1xuICogLSAwMiAtIEZ1bmN0aW9uc1xuICogLSAwMyAtIE1peGluc1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFNldHRpbmdzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBGdW5jdGlvbnMgLSBBbmltYXRpb25zXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCBhbmltYXRpb24gdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIFRyYW5zaXRpb25cbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBUcmFuc2l0aW9uXG4gIEVhc3kgdG8gdXNlIGZ1bmN0aW9uIHRvIHF1aWNrbHkgZGVmaW5lIGEgdHJhbnNpdGlvbiB3aXRoIHRoZSBhYmlsaXR5IHRvIHJlZmVyZW5jZSBhIGxpYnJhcnkgbWFwcGluZyBvZiBiZXppZXItY3VydmVcbiAgYW5pbWF0aW9ucywgYXMgZGVmaW5lZCBpbiBgcGFydGlhbHMvc2V0dGluZ3MvX2FuaW1hdGlvbnMuc2Nzc2AuXG4gIC0gQHBhcmFtICRhcmd1bWVudDogU3R5bGUgYXJndW1lbnRzIHRoYXQgdGhpcyB0cmFuc2l0aW9uIHNob3VsZCBiZSBhcHBsaWVkIHRvLlxuICAtIEBwYXJhbSAkZHVyYXRpb246IFRoZSBsZW5ndGggb2YgdGltZSB0aGUgdHJhbnNpdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cbiAgLSBAcGFyYW0gJHN0eWxlOiBUaGUgc3R5bGUgb2YgdHJhbnNpdGlvbiwgYXMgZGVmaW5lZCBpbiBgcGFydGlhbHMvc2V0dGluZ3MvX2FuaW1hdGlvbnMuc2Nzc2BcbiAgLSBAZXhhbXBsZSA9IHRyYW5zaXRpb246IHRyYW5zaXRpb24oYWxsLCAwLjZzLCBlYXNlSW5PdXRTaW5lKVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQnJlYWtwb2ludHNcbiAqIEJyZWFrcG9pbnQgdmlld3BvcnQgc2l6ZXMgYW5kIG1lZGlhIHF1ZXJpZXMuIEJyZWFrcG9pbnRzIGFyZSBkZWZpbmVkIGFzIGEgbWFwIG9mIChuYW1lOiBtaW5pbXVtIHdpZHRoKSwgb3JkZXIgZnJvbVxuICogeHNtYWxsIHRvIHhsYXJnZTogKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KS4gVGhlIG1hcCBkZWZpbmVkIGluIHRoZSBgJGdyaWQtYnJlYWtwb2ludHNgXG4gKiBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgYCRicmVha3BvaW50c2AgYXJndW1lbnQgYnkgZGVmYXVsdC5cbiAqXG4gKiAtIDAxIC0gQnJlYWtwb2ludCBOZXh0XG4gKiAtIDAyIC0gQnJlYWtwb2ludCBNaW5pbXVtXG4gKiAtIDAzIC0gQnJlYWtwb2ludCBNYXhpbXVtXG4gKiAtIDA0IC0gQnJlYWtwb2ludCBJbmZpeFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEJyZWFrcG9pbnQgTmV4dFxuICBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnQtbmFtZXM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgbmFtZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gQnJlYWtwb2ludCBNaW5pbXVtXG4gIE1pbmltdW0gYnJlYWtwb2ludCB3aWR0aC4gTnVsbCBmb3IgdGhlIHNtYWxsZXN0IChmaXJzdCkgYnJlYWtwb2ludC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gQnJlYWtwb2ludCBNYXhpbXVtXG4gIFRoZSBtYXhpbXVtIHZhbHVlIGlzIHJlZHVjZWQgYnkgMC4wMnB4IHRvIHdvcmsgYXJvdW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBgbWluLWAgYW5kIGBtYXgtYCBwcmVmaXhlcyBhbmQgdmlld3BvcnRzXG4gIHdpdGggZnJhY3Rpb25hbCB3aWR0aHMuIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvbWVkaWFxdWVyaWVzLTQvI21xLW1pbi1tYXguIFVzZXMgMC4wMnB4IHJhdGhlciB0aGFuIDAuMDFweCB0byB3b3JrXG4gIGFyb3VuZCBhIGN1cnJlbnQgcm91bmRpbmcgYnVnIGluIFNhZmFyaS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgyNjFcbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gQnJlYWtwb2ludCBJbmZpeFxuICBSZXR1cm5zIGEgYmxhbmsgc3RyaW5nIGlmIHNtYWxsZXN0IGJyZWFrcG9pbnQsIG90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIHdpdGggYSBkYXNoIGluIGZyb250LiBVc2VmdWwgZm9yIG1ha2luZ1xuICByZXNwb25zaXZlIHV0aWxpdGllcy5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQ2FsY3VsYXRpb25zXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBjYWxjdWxhdGUgZGlmZmVyZW50IHZhbHVlcyBmcm9tIHBlcmNlbnRhZ2VzIHRvIHNpemluZyBzdWNoIGFzIFJFTXMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBUYXJnZXQvQ29udGFpbmVyIFBlcmNlbnRhZ2VcbiAqIC0gMDMgLSBSRU1zXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gVGFyZ2V0L0NvbnRhaW5lciBQZXJjZW50YWdlXG4gIENhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSBvZiBhIHRhcmdldCBzaXplIGNvbXBhcmVkIHRvIGEgY29udGFpbmVyIHNpemUuXG4gIC0gQHBhcmFtICR0YXJnZXQ6IFNpemUgb2YgYW4gZWxlbWVudCBuZWVkaW5nIGEgY2FsY3VsYXRlZCBwZXJjZW50YWdlLlxuICAtIEBwYXJhbSAkY29udGFpbmVyOiBTaXplIG9mIHRoZSB0YXJnZXQncyBjb250YWluZXIsIG5lZWRlZCB0byBjYWxjdWxhdGUgcGVyY2VudGFnZS5cbiAgLSBAZXhhbXBsZSA9IHdpZHRoOiBjYWxjLXBlcmNlbnQoMjUwLCAxMDAwKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFJFTXNcbiAgQ2FsY3VsYXRlIGEgc2l6ZSBpbnRvIFJFTSB1bml0cyAtLSBtb3N0bHkgdXNlZCBmb3IgZm9udCBzaXplIHJlbmRlcmluZy5cbiAgLSBAcGFyYW0gJHNpemU6IFNpemUgb2YgYW4gZWxlbWVudCBuZWVkaW5nIGEgY2FsY3VsYXRlZCBzaXplIGludG8gUkVNcy5cbiAgLSBAcGFyYW0gJGJhc2U6IEJhc2UgZm9udCBzaXplIG9mIHRoZSBzaXRlIC0tIGRlZmF1bHRzIHRvIDE2cHguXG4gIC0gQGV4YW1wbGUgPSBmb250LXNpemU6IGNhbGMtcmVtKDI0cHgpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQ29sb3JcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGNvbG9yIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBDb2xvclxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIENvbG9yXG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCBjb2xvciBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW4gJ3BhcnRpYWxzL3NldHRpbmdzL19jb2xvcnMuc2Nzcy5cbiAgLSBAcGFyYW0gJGNvbG9yOiBUaGUgc2VsZWN0ZWQgY29sb3IuXG4gIC0gQGV4YW1wbGUgPSBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihwcmltYXJ5KTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIExheW91dFxuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgbGF5b3V0IHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBaLWluZGV4XG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gV2lkdGhzXG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCB3aWR0aCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW4gJ3BhcnRpYWxzL3NldHRpbmdzL19sYXlvdXQuc2Nzcy5cbiAgLSBAcGFyYW0gJHdpZHRoOiBUaGUgc2VsZWN0ZWQgd2lkdGggc2l6ZS5cbiAgLSBAZXhhbXBsZTogd2lkdGg6IHdpZHRoKGxhcmdlKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFotaW5kZXhcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIHotaW5kZXggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICRrZXk6IFRoZSBzZWxlY3RlZCBsYXllciB0eXBlLlxuICAtIEBleGFtcGxlID0gei1pbmRleDogei1pbmRleChib3R0b21sZXNzLXBpdClcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIFR5cG9ncmFwaHlcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIHR5cG9ncmFwaGljYWwgdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIExpbmUgSGVpZ2h0XG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gTGluZSBIZWlnaHRcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIExpbmUgSGVpZ2h0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpblxuICBgcGFydGlhbHMvc2V0dGluZ3MvX3R5cG9ncmFwaHkuc2Nzc2AuXG4gIC0gQHBhcmFtICRzaXplOiBUaGUgc2VsZWN0ZWQgTGluZSBIZWlnaHQgdHlwZS5cbiAgLSBAZXhhbXBsZTogbGluZS1oZWlnaHQ6IGxpbmUtaGVpZ2h0KGhlYWRpbmcpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTWl4aW5zXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBNaXhpbnMgLSBCcmVha3BvaW50c1xuICogVXNlIHRoZXNlIG1peGlucyBtYWlubHkgd2hlbiBkZWZpbmluZyBtZWRpYSBicmVha3BvaW50IHNwZWNpZmljYXRpb25zIGluIHRoZW1lIGZpbGVzLiBCb3RoIHNldHRpbmdzIGFuZCBmdW5jdGlvbnNcbiAqIGFyZSBpbXBvcnRlZCBoZXJlIHRvIHN1cHBsZW1lbnQgdGhlIG1peGlucyB0aGVtc2VsdmVzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gTWluaW11bSBCcmVha3BvaW50XG4gKiAtIDAzIC0gTWF4aW11bSBCcmVha3BvaW50XG4gKiAtIDA0IC0gQmV0d2VlbiBCcmVha3BvaW50XG4gKiAtIDA1IC0gT25seSBCcmVha3BvaW50XG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gTWluaW11bSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIG9mIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGggLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGFib3ZlIHRoZSBicmVha3BvaW50IHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtbWluKGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTWF4aW11bSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIG9mIGF0IG1vc3QgdGhlIG1heGltdW0gYnJlYWtwb2ludCB3aWR0aCAtLSBhcHBseSB0byBzY3JlZW4tc2l6ZXMgYmVsb3cgdGhlIGJyZWFrcG9pbnQgc3BlY2lmaWVkLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1tYXgobGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDQgLSBCZXR3ZWVuIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgdGhhdCBzcGFucyBtdWx0aXBsZSBicmVha3BvaW50IHdpZHRocyAtLSBhcHBseSB0byBzY3JlZW4tc2l6ZXMgYmV0d2VlbiB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuICAtIEBwYXJhbSAkbG93ZXI6IFNlbGVjdGVkIG1pbmltdW0gYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJHVwcGVyOiBTZWxlY3RlZCBtYXhpbXVtIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtYmV0d2Vlbih4c21hbGwsIGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA1IC0gT25seSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIGJldHdlZW4gdGhlIGJyZWFrcG9pbnQncyBtaW5pbXVtIGFuZCBtYXhpbXVtIHdpZHRocyAtLSBObyBtaW5pbXVtIGZvciB0aGUgc21hbGxlc3QgYnJlYWtwb2ludCwgYW5kXG4gIG5vIG1heGltdW0gZm9yIHRoZSBsYXJnZXN0IG9uZS5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtb25seShsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIE1peGlucyAtIExpc3RzXG4gKiBVc2UgdGhlc2UgbWl4aW5zIHdoZW4gbmVlZGluZyB0byBlYXNpbHkgZGVmaW5lIGxpc3RzIHN0eWxlcy5cbiAqXG4gKiAtIDAxIC0gQmFzZVxuICogLSAwMiAtIEJ1bGxldHNcbiAqIC0gMDMgLSBOdW1iZXJlZFxuICogLSAwNCAtIE5vIEJ1bGxldHNcbiAqIC0gMDUgLSBJbmxpbmVcbiAqIC0gMDYgLSBSdWxlZFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEJhc2VcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEJ1bGxldHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE51bWJlcmVkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDQgLSBObyBCdWxsZXRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDUgLSBJbmxpbmVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNiAtIFJ1bGVkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBNaXhpbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIE1peGlucyAtIFR5cG9ncmFwaHlcbiAqIFVzZSB0aGVzZSBtaXhpbnMgd2hlbiBuZWVkaW5nIHRvIGVhc2lseSBkZWZpbmUgdHlwb2dyYXBoeSBzdHlsZXMsIHN1Y2ggYXMgc2l6ZXMgYW5kIHR5cG9ncmFwaGljYWwgbGF5b3V0LlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gSGVhZGluZyBTaXplXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gSGVhZGluZyBTaXplXG4gIE1lYW50IGZvciByZXNwb25zaXZlIGhlYWRpbmcgc2l6ZXMgYW5kIGlzIGJhc2VkIHVwb24gYnJlYWtwb2ludHMgYW5kIGEgbWFwcGluZyBvZiBoZWFkaW5nIHNpemVzLiBCcmVha3BvaW50cyBhcmVcbiAgZGVmaW5lZCBpbiB0aGUgYHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzYCBmaWxlIGFuZCBhcmUgdXRpbGl6ZWQgd2l0aCBhIG1peGluLCBhcyBkZWZpbmVkIGluXG4gIGBwYXJ0aWFscy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3NgLlxuICAtIEBwYXJhbSAkc2V0dGluZzogU2VsZWN0ZWQgaGVhZGluZyB0byBhcHBseSByZXNwb25zaXZlIHNpemluZyB0by5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKioqKiBTVEFSVCAtIE1haW4gdGFuc3BhcmVuY3ksIG1lbnUgd3JhcHBlcnMgJiBwbGFjZW1lbnQgKioqKi9cbm1haW46OmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjcuOThweCkge1xuICAuanMtcHJldmVudC1zY3JvbGwge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuanMtcHJldmVudC1zY3JvbGwgbWFpbjo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yNXMgZWFzZS1pbi1vdXQ7XG4gICAgcG9zaXRpb246IGZpeGVkOyAvKiBTaXQgb24gdG9wIG9mIHRoZSBwYWdlIGNvbnRlbnQgKi9cbiAgICB3aWR0aDogMTAwJTsgLyogRnVsbCB3aWR0aCAoY292ZXIgdGhlIHdob2xlIHBhZ2UpICovXG4gICAgaGVpZ2h0OiAxMDAlOyAvKiBGdWxsIGhlaWdodCAoY292ZXIgdGhlIHdob2xlIHBhZ2UpICovXG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgei1pbmRleDogMjtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XG4gIC5qcy1wcmV2ZW50LXNjcm9sbCBtYWluOjpiZWZvcmUge1xuICAgIHRvcDogNC41cmVtO1xuICB9XG4gIC5qcy1wcmV2ZW50LXNjcm9sbC51c2VyLWxvZ2dlZC1pbiBtYWluOjpiZWZvcmUge1xuICAgIHBhZGRpbmctdG9wOiA0MHB4O1xuICAgIHRvcDogMTQwcHg7XG4gIH1cbn1cblxuLnNpdGUtaGVhZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAzO1xufVxuXG4uc2l0ZS1oZWFkZXJfX2lubmVyIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogMDtcbn1cbi8qKioqIEVORCAtIE1haW4gdGFuc3BhcmVuY3ksIG1lbnUgd3JhcHBlcnMgJiBwbGFjZW1lbnQgKioqKi9cbi8qKioqIFNUQVJUIC0gTWFpbiBOYXZpZ2F0aW9uICoqKiovXG4uc2l0ZS1oZWFkZXJfX25hdmlnYXRpb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3Ljk4cHgpIHtcbiAgLnNpdGUtaGVhZGVyX19uYXZpZ2F0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIHRvcDogNC41cmVtO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICB6LWluZGV4OiAtMTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2UtaW4tb3V0O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaGFkb3c6IDBweCAwcHggNDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIHBhZGRpbmc6IDEuMjVyZW07XG4gIH1cbiAgLnNpdGUtaGVhZGVyX19uYXZpZ2F0aW9uID4gKjpudGgtY2hpbGQoMSkge1xuICAgIG9yZGVyOiA0O1xuICB9XG4gIC5zaXRlLWhlYWRlcl9fbmF2aWdhdGlvbiA+ICo6bnRoLWNoaWxkKDIpIHtcbiAgICBvcmRlcjogNTtcbiAgfVxuICAuc2l0ZS1oZWFkZXJfX25hdmlnYXRpb24gPiAqOm50aC1jaGlsZCgzKSB7XG4gICAgb3JkZXI6IDE7XG4gIH1cbiAgLnNpdGUtaGVhZGVyX19uYXZpZ2F0aW9uID4gKjpudGgtY2hpbGQoNCkge1xuICAgIG9yZGVyOiAzO1xuICB9XG4gIC5zaXRlLWhlYWRlcl9fbmF2aWdhdGlvbiA+ICo6bnRoLWNoaWxkKDUpIHtcbiAgICBvcmRlcjogMjtcbiAgfVxuICAudXNlci1sb2dnZWQtaW4gLnNpdGUtaGVhZGVyX19uYXZpZ2F0aW9uIHtcbiAgICB0b3A6IDkuOTM3NXJlbTtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zaXRlLWhlYWRlcl9fbmF2aWdhdGlvbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjcuOThweCkge1xuICAuc2l0ZS1oZWFkZXJfX25hdmlnYXRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNpdGUtaGVhZGVyX19uYXZpZ2F0aW9uICNibG9jay1oY3doLW1haW5uYXZpZ2F0aW9uIHtcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcbiAgICBmbGV4OiBub25lO1xuICB9XG59XG5cbi8qKioqIEVORCAtIE1haW4gTmF2aWdhdGlvbiAqKioqL1xuLyoqKiogU1RBUlQgLSBVdGlsaXR5IE5hdmlnYXRpb24gKioqKi9cbi8qKioqIEVORCAtIFV0aWxpdHkgTmF2aWdhdGlvbiAqKioqL1xuLyoqKiogU1RBUlQgLSBNb2JpbGUgTmF2aWdhdGlvbiBCdXR0b24gKioqKi9cbi5yZWdpb25fX25hbWUtLW5hdmlnYXRpb24ge1xuICBtYXJnaW4tcmlnaHQ6IC0xLjI1cmVtO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDYwMHB4KSB7XG4gIC5yZWdpb25fX25hbWUtLW5hdmlnYXRpb24ge1xuICAgIG1hcmdpbi1yaWdodDogLTEuODc1cmVtO1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3Ljk4cHgpIHtcbiAgLnJlZ2lvbl9fbmFtZS0tbmF2aWdhdGlvbiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWxsLWFjY2VudCk7XG4gICAgcGFkZGluZzogMC43NXJlbSAxLjVyZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnJlZ2lvbl9fbmFtZS0tbmF2aWdhdGlvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG59XG5cbi5uYXYtdHJpZ2dlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3Ljk4cHgpIHtcbiAgLm5hdi10cmlnZ2VyIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICBncmlkLWNvbHVtbi1zdGFydDogMjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBoZWlnaHQ6IDNyZW07XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwcHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBnYXA6IDAuNXJlbTtcbiAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxMzMuMzMzJTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtcmVndWxhcik7XG4gIH1cbiAgLm5hdi10cmlnZ2VyIC5sYWJlbCB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcbiAgfVxufVxuXG5sYWJlbFtmb3I9bmF2LXRyaWdnZXJdIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBoZWlnaHQ6IDMwcHg7XG4gIG1hcmdpbjogYXV0bztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMzBweDtcbiAgdG9wOiAxOHB4O1xuICB3aWR0aDogMzBweDtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICBsYWJlbFtmb3I9bmF2LXRyaWdnZXJdIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5uYXYtdHJpZ2dlciBzcGFuLmljb24ge1xuICB3aWR0aDogMC43NXJlbTtcbiAgaGVpZ2h0OiAwLjc1cmVtO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5uYXYtdHJpZ2dlciBzcGFuLmljb24gc3ZnIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG59XG5cbi5uYXYtdHJpZ2dlcl9faWNvbi0tZXhwYW5kIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMCkgc2NhbGUoMSk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjM1cyBlYXNlLWluLW91dDtcbn1cblxuLm5hdi10cmlnZ2VyX19pY29uLS1jb2xsYXBzZSB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZykgc2NhbGUoMCk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjI1cyBlYXNlLWluLW91dDtcbn1cblxuLm5hdi10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLm5hdi10cmlnZ2VyX19pY29uLS1jb2xsYXBzZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogcm90YXRlKDApIHNjYWxlKDEpO1xufVxuLm5hdi10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLm5hdi10cmlnZ2VyX19pY29uLS1leHBhbmQge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgc2NhbGUoMCk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjcuOThweCkge1xuICAubmF2LXRyaWdnZXJbYXJpYS1leHBhbmRlZD1mYWxzZV0gfiAuc2l0ZS1oZWFkZXJfX25hdmlnYXRpb24ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzc1cHgsIDAsIDApO1xuICB9XG4gIC5uYXYtdHJpZ2dlclthcmlhLWV4cGFuZGVkPXRydWVdIH4gLnNpdGUtaGVhZGVyX19uYXZpZ2F0aW9uIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgIHotaW5kZXg6IDM7XG4gIH1cbn1cbi8qKioqIEVORCAtIE1vYmlsZSBOYXZpZ2F0aW9uIEJ1dHRvbiAqKioqLyJdfQ== */
