@charset "UTF-8";
/**
 * basicss overrides
 *
 * any defaults in basicss/basicss/_settings.scss
 * may be overridden...
 *
 * e.g. $prototyping: true;
 */
/**
 * basicss.scss
 *
 * Author: Marian Friedmann
 *
 */
/* ====================================================
   Reset, Defaults, Mixins
   ==================================================== */
/**
 * Reset, Default settings
 */
/**
 * _settings.scss
 *
 * Author: Marian Friedmann
 */
/**
* Variables Mode
*/
/**
* Default colors
*/
/**
 * Default objects
 */
/**
 * Default helper
 */
/**
 * Default fonts
 */
/**
 * Default font size
 */
/**
 * Default headings
 */
/**
 *  Default spacing
 */
/**
 * Default breakpoints
 */
/**
 * Default spaces
 */
/**
 * Default constrains
 */
/**
 * Arrows
 */
/**
 * Global Variables
 */
/**
 * Mixins
 */
/**
 * _media.scss
 *
 * Author: Marius Scheel
 *
 * Usage:
 * @include media(300px);
 * or @include media(300px, false);
 * or @include media(max-width 300px);
 * or @include media(100px max-width 300px);
 * or @include media(max-width 100px max-width 300px);
 * or @include media(max-width 100px max-width 300px, true);
 *
 */
/**
 * _hdpi.scss
 *
 * Author: Marius Scheel
 *
 * defaults to 1.3 to include Google Nexus 7
 * adapted from bourbon:
 * https://github.com/thoughtbot/bourbon/blob/master/app/assets/stylesheets/css3/_hidpi-media-query.scss
 * 
 * Usage:
 * @include hdpi {
 *  // your css for hdpi displays
 * };
 *
 * you can use a custom ratio, if you like:
 * @include hdpi(1.5) {
 *  // your css
 * };
 */
/**
 * _retina-image.scss
 *
 * Author: Marius Scheel
 *
 * Usage:
 * .hero {
 *  @include retina-image("../path/to/hero", 200px 400px);
 * }
 *
 * to use a specific filename:
 * .hero {
 *  @include retina-image("../path/to/hero", 200px 400px, "../path/to/retina-hero"); 
 * } 
 *
 * modified version of bourbon's retina-image mixin.
 * The mixin uses a @2x.png retina filename by default.
 * https://github.com/thoughtbot/bourbon/blob/master/app/assets/stylesheets/addons/_retina-image.scss
 */
/**
 * _font-size.scss
 *
 * Author: Marian Friedmann
 *
 */
/**
 * _px-to-rem.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * .element {
 *   @include px-to-rem(padding, 0 24px)
 * }
 *
 * Output:
 * .element {
 *   padding: 0 24px;
 *   padding: 0 1.5rem;
 * }
 *
 */
/**
 * _clearfix.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * .element {
 *   @include clearfix;
 * }
 *
 */
/**
 * _ellipsis.scss
 *
 * Author: Marian Friedmann
 *
 * ellipsis mixin 
 *
 */
/* ====================================================
   Base Styles
   ==================================================== */
/**
 * _main.scss
 *
 * Author: Marian Friedmann
 *
 */
/**
 * _baseline.scss
 *
 * Author: Marian Friedmann
 *
 */
/**
 * _typo.scss
 *
 * Author: Marian Friedmann
 *
 */
/**
 * _links.scss
 *
 * Author: Marian Friedmann
 *
 */
/**
 * media-src.scss
 *
 * Author: Marian Friedmann
 *
 */
/* ====================================================
   Objects
   ==================================================== */
/**
 * _grid.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * <div class="grid">
 *   <div class="grid__item  width--1of1  width-tab--1of3  width-desk--1of4">
 *       ...
 *   </div><!--
 *--><div class="grid__item  width--1of1  width-tab--2of3  width-desk--3of4">
 *     <div class="grid">
 *       <div class="grid__item  width--1of1  width-tab--1of2">
 *           ...
 *       </div><!--
 *    --><div class="grid__item  width--1of1  width-tab--1of2">
 *           ...
 *       </div>
 *     </div>
 *   </div>
 * </div>
 *
 * the example above combines the grid items with the widths from helper/_width.scss
 */
/**
 * Reverse the order of grid items
 */
/**
 * adds a seperator line to the grid
 */
/**
 * Grid items without gutters
 */
/**
 * Grid size variations
 */
/**
 * _btn.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * <a class="btn [btn--secondary]" href="#">btn</a>
 * <input type="text" class="btn">
 * <button class="btn">btn</button>
 */
/* Button disguised as a link. */
/**
 * _constrain.scss
 *
 * Author: Marius Scheel
 *
 */
/**
 * _nav.scss
 *
 * Author: Marian Friedmann
 *
 * source: Nav abstraction from csswizardry.com/2011/09/the-nav-abstraction
 *
 * Can be used on an `ol` or `ul` and displays the list items horizontally.
 * Extend it with the following subclasses:
 *
 * - nav--stacked    // displays the list items vertically
 * - nav--banner     // centres the list
 * - nav--block      // expands list items clickable areas
 * - nav--fit        // forces the list to occupy the full width of its parent
 * - nav--keywords   // display as a list of keywords
 * - nav--breadcrumb // display as breadcrumbs
 * - nav--parallel   // display nav items with parallel separator
 *
 * Markup:
 *
 * <ul class="nav">
 *   <li><a href=#>Home</a></li>
 *   <li><a href=#>About</a></li>
 *   <li><a href=#>Portfolio</a></li>
 *   <li><a href=#>Contact</a></li>
 * </ul>
 */
/**
 * 'nav-stacked' displays the list items vertically
 */
/**
 * 'nav-banner' centres the list
 */
/**
 * 'nav--block' expands list items clickable areas with padding
 */
/**
 * 'nav--fit' forces the list to occupy the full width of its parent
 */
/**
 * 'nav--keywords' display as a list of keywords
 */
/**
 * 'nav--breadcrumbs' display as breadcrumbs
 */
/**
 * 'nav--parallel' display with parallel separator
 */
/**
 * _box.scss
 *
 * modified version of:
 * https://github.com/inuitcss/objects.box/blob/master/_objects.box.scss
 *
 */
/**
 * _media.scss
 *
 * displays image and text side by side
 *
 * Example markup:
 *
    <div class="media media--small">
      <div class="media__img"></div>
      <div class="media__body"></div>
    </div>
 *
 * use the `.media--rev` modifier to reverse the the image location and put it to the right
 * use the `.media--small` modifier, to decrease the gutter width between image and content
 *
 * for more information have a look at:
 * stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code
 *
 */
/**
 * _bare-list.scss
 *
 */
/**
 * _ui-list.scss
 *
 * based on Harry Roberts ui-list object:
 * https://github.com/inuitcss/objects.ui-list/blob/master/_objects.ui-list.scss
 *
 * creates blocky items, can be used with lists or the corresponding markup:
 *
 * <div class="ui-list">
 *  <div class="ui-list__item"></div>
 *  <div class="ui-list__item"></div>
 *  <div class="ui-list__item"></div>
 * </div>
 *
 * or:
 *
 * <ul class="ui-list ui-list--small">
 *  <li></li>
 *  <li></li>
 *  <li></li>
 * </ul>
 *
 * can optionally be used with --separator and --border, where --separator
 * adds borders to the list element and --border to the list itself
 *
 * comes with different size modifiers
 *
 */
/**
 * Modifiers for sizing the list
 */
/**
 * _arrow.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * <div class="arrow arrow--top-left">
 *  ...
 * </div>
 *
 */
/**
 * Arrow Top
 */
/**
 * Arrow Bottom
 */
/**
 * Arrow Left
 */
/**
 * Arrow Right
 */
/**
 * _icon.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * <i class="icon [icon--nav-toggle]"></i>
 *
 */
/**
 * Alle icons werden als .svg exportiert unter
 * /assets/images/icons abgelegt und von grunt-svgmin
 * und grunt-grunticon weiterverarbeitet.
 *
 * Output unter /assets/images/icons/grunticon
 */
/**
 * Beispiel für ein Icon
 *
 * .icon--mobile-nav-toggle {
 *   @include background-svg("../images/nav-toggle");
 * }
 */
/* ====================================================
   Helper Classes
   ==================================================== */
/**
 * _spacing.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * <div class="space--top  space-tab--top-double">
 *   ...
 * </div>
 *
 */
/**
 * Basic & spacing
 */
/**
 * _width.scss
 *
 * Author: Marian Friedmann
 *
 * Usage:
 * <div class="grid">
 *   <div class="grid__item  width--1of1  width-tab--1of3  width-desk--1of4">
 *     ...
 *   </div>
 *   <div class="grid__item  width--1of1  width-tab--2of3  width-desk--3of4">
 *     ...
 *   </div>
 * </div>
 *
 */
/**
 * _typo.scss
 *
 * Author: Marian Friedmann
 *
 * Alt Text Styles.
 *
 * ## alignment
 * - text--left
 * - text--right
 * - text--center
 *
 * ## utilities
 * - text--secondary
 * - text--inherit-color
 * - text--no-wrap
 * - text--large
 *
 * Usage:
 * <div class="text--large">
 *   <h1>Lorem Ipsum</h1>
 *   <p>Lorem ipsum</p>
 * </div>
 *
 */
/**
 * Prevent text from wrapping
 */
/**
 * Display text in secondary font
 */
/**
 * Display larger text
 */
/**
* _color.scss
*/
.hero {
  width: 100%;
  display: block;
}
.hero figure {
  margin: 0;
}
.hero img {
  display: block;
  margin: 0;
  padding: 0;
  width: 100%;
  height: 250px;
  -o-object-fit: cover;
     object-fit: cover;
}
@media screen and (min-width: 721px) {
  .hero img {
    height: 350px;
  }
}
@media screen and (min-width: 1200px) {
  .hero img {
    height: 400px;
  }
}
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhlcm8uY3NzIiwiX3NldHRpbmdzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9fYmFzaWNzcy12YXJpYWJsZXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3MvX3NldHRpbmdzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL21peGlucy9fbWVkaWEuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3MvbWl4aW5zL19oZHBpLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL21peGlucy9fcmV0aW5hLWltYWdlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL21peGlucy9fZm9udC1zaXplLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL21peGlucy9fcHgtdG8tcmVtLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3MvbWl4aW5zL19lbGxpcHNpcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jhc2ljc3MvYmFzaWNzcy9iYXNlL19tYWluLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL2Jhc2UvX2Jhc2VsaW5lLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL2Jhc2UvX3R5cG8uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3MvYmFzZS9fbGlua3Muc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3MvYmFzZS9fbWVkaWEtc3JjLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL29iamVjdHMvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3Mvb2JqZWN0cy9fYnRuLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL29iamVjdHMvX2NvbnN0cmFpbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jhc2ljc3MvYmFzaWNzcy9vYmplY3RzL19uYXYuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3Mvb2JqZWN0cy9fYm94LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL29iamVjdHMvX21lZGlhLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL29iamVjdHMvX2JhcmUtbGlzdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jhc2ljc3MvYmFzaWNzcy9vYmplY3RzL191aS1saXN0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL29iamVjdHMvX2Fycm93LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL29iamVjdHMvX2ljb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3MvaGVscGVyL19zcGFjaW5nLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL2hlbHBlci9fd2lkdGguc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYXNpY3NzL2Jhc2ljc3MvaGVscGVyL190eXBvLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFzaWNzcy9iYXNpY3NzL2hlbHBlci9fY29sb3Iuc2NzcyIsImhlcm8uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0I7QUNBaEI7Ozs7Ozs7RUFBQTtBQ0FBOzs7OztFQUFBO0FBT0E7O3lEQUFBO0FBTUE7O0VBQUE7QUNiQTs7OztFQUFBO0FBTUE7O0NBQUE7QUFLQTs7Q0FBQTtBQWFBOztFQUFBO0FBY0E7O0VBQUE7QUFVQTs7RUFBQTtBQU9BOztFQUFBO0FBT0E7O0VBQUE7QUFnQ0E7O0VBQUE7QUFPQTs7RUFBQTtBQVdDOztFQUFBO0FBZUQ7O0VBQUE7QUFXQTs7RUFBQTtBQU1BOztFQUFBO0FEN0hBOztFQUFBO0FFbkJBOzs7Ozs7Ozs7Ozs7O0VBQUE7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBQUE7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBQUE7QUNBQTs7Ozs7RUFBQTtBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7O0VBQUE7QUNBQTs7Ozs7Ozs7OztFQUFBO0FDQUE7Ozs7Ozs7RUFBQTtBUmlDQTs7eURBQUE7QVNqQ0E7Ozs7O0VBQUE7QUNBQTs7Ozs7RUFBQTtBQ0NBOzs7OztFQUFBO0FDREE7Ozs7O0VBQUE7QUNBQTs7Ozs7RUFBQTtBYjJDQTs7eURBQUE7QWNtQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBQUE7QUE0Q0E7O0VBQUE7QUFXQTs7RUFBQTtBQTBDQTs7RUFBQTtBQVdBOztFQUFBO0FDMUtBOzs7Ozs7Ozs7RUFBQTtBQTZDQSxnQ0FBQTtBQzVDQTs7Ozs7RUFBQTtBQ0RBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUFBO0FBeUNBOztFQUFBO0FBYUE7O0VBQUE7QUFRQTs7RUFBQTtBQXFCQTs7RUFBQTtBQWdCQTs7RUFBQTtBQWVBOztFQUFBO0FBZUE7O0VBQUE7QUNoSUE7Ozs7OztFQUFBO0FDQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUFBO0FDQUE7OztFQUFBO0FDREE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUFBO0FBa0VBOztFQUFBO0FDakVBOzs7Ozs7Ozs7O0VBQUE7QUF1QkE7O0VBQUE7QUEyQ0E7O0VBQUE7QUEyQ0E7O0VBQUE7QUEyQ0E7O0VBQUE7QUN6SkE7Ozs7Ozs7O0VBQUE7QUFVQTs7Ozs7O0VBQUE7QUFxQkE7Ozs7OztFQUFBO0F2QjJCQTs7eURBQUE7QXdCaEJBOzs7Ozs7Ozs7O0VBQUE7QUFZQTs7RUFBQTtBQ2dGQTs7Ozs7Ozs7Ozs7Ozs7O0VBQUE7QUN6SEE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUFBO0FBMEJBOztFQUFBO0FBT0E7O0VBQUE7QUFPQTs7RUFBQTtBQ25CQTs7Q0FBQTtBQ2hDQTtFQUNFLFdBQUE7RUFDQSxjQUFBO0E5QjJkRjtBOEIxZEU7RUFDRSxTQUFBO0E5QjRkSjtBOEIxZEU7RUFDRSxjQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTtFQUNBLG9CQUFBO0tBQUEsaUJBQUE7QTlCNGRKO0FJdGRJO0UwQlpGO0lBUUksYUFBQTtFOUI4ZEo7QUFDRjtBSTNkSTtFMEJaRjtJQVdJLGFBQUE7RTlCZ2VKO0FBQ0YiLCJmaWxlIjoiaGVyby5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIGJhc2ljc3Mgb3ZlcnJpZGVzXG4gKlxuICogYW55IGRlZmF1bHRzIGluIGJhc2ljc3MvYmFzaWNzcy9fc2V0dGluZ3Muc2Nzc1xuICogbWF5IGJlIG92ZXJyaWRkZW4uLi5cbiAqXG4gKiBlLmcuICRwcm90b3R5cGluZzogdHJ1ZTtcbiAqL1xuLyoqXG4gKiBiYXNpY3NzLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcmlhbiBGcmllZG1hbm5cbiAqXG4gKi9cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFJlc2V0LCBEZWZhdWx0cywgTWl4aW5zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIFJlc2V0LCBEZWZhdWx0IHNldHRpbmdzXG4gKi9cbi8qKlxuICogX3NldHRpbmdzLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcmlhbiBGcmllZG1hbm5cbiAqL1xuLyoqXG4qIFZhcmlhYmxlcyBNb2RlXG4qL1xuLyoqXG4qIERlZmF1bHQgY29sb3JzXG4qL1xuLyoqXG4gKiBEZWZhdWx0IG9iamVjdHNcbiAqL1xuLyoqXG4gKiBEZWZhdWx0IGhlbHBlclxuICovXG4vKipcbiAqIERlZmF1bHQgZm9udHNcbiAqL1xuLyoqXG4gKiBEZWZhdWx0IGZvbnQgc2l6ZVxuICovXG4vKipcbiAqIERlZmF1bHQgaGVhZGluZ3NcbiAqL1xuLyoqXG4gKiAgRGVmYXVsdCBzcGFjaW5nXG4gKi9cbi8qKlxuICogRGVmYXVsdCBicmVha3BvaW50c1xuICovXG4vKipcbiAqIERlZmF1bHQgc3BhY2VzXG4gKi9cbi8qKlxuICogRGVmYXVsdCBjb25zdHJhaW5zXG4gKi9cbi8qKlxuICogQXJyb3dzXG4gKi9cbi8qKlxuICogR2xvYmFsIFZhcmlhYmxlc1xuICovXG4vKipcbiAqIE1peGluc1xuICovXG4vKipcbiAqIF9tZWRpYS5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpdXMgU2NoZWVsXG4gKlxuICogVXNhZ2U6XG4gKiBAaW5jbHVkZSBtZWRpYSgzMDBweCk7XG4gKiBvciBAaW5jbHVkZSBtZWRpYSgzMDBweCwgZmFsc2UpO1xuICogb3IgQGluY2x1ZGUgbWVkaWEobWF4LXdpZHRoIDMwMHB4KTtcbiAqIG9yIEBpbmNsdWRlIG1lZGlhKDEwMHB4IG1heC13aWR0aCAzMDBweCk7XG4gKiBvciBAaW5jbHVkZSBtZWRpYShtYXgtd2lkdGggMTAwcHggbWF4LXdpZHRoIDMwMHB4KTtcbiAqIG9yIEBpbmNsdWRlIG1lZGlhKG1heC13aWR0aCAxMDBweCBtYXgtd2lkdGggMzAwcHgsIHRydWUpO1xuICpcbiAqL1xuLyoqXG4gKiBfaGRwaS5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpdXMgU2NoZWVsXG4gKlxuICogZGVmYXVsdHMgdG8gMS4zIHRvIGluY2x1ZGUgR29vZ2xlIE5leHVzIDdcbiAqIGFkYXB0ZWQgZnJvbSBib3VyYm9uOlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rob3VnaHRib3QvYm91cmJvbi9ibG9iL21hc3Rlci9hcHAvYXNzZXRzL3N0eWxlc2hlZXRzL2NzczMvX2hpZHBpLW1lZGlhLXF1ZXJ5LnNjc3NcbiAqIFxuICogVXNhZ2U6XG4gKiBAaW5jbHVkZSBoZHBpIHtcbiAqICAvLyB5b3VyIGNzcyBmb3IgaGRwaSBkaXNwbGF5c1xuICogfTtcbiAqXG4gKiB5b3UgY2FuIHVzZSBhIGN1c3RvbSByYXRpbywgaWYgeW91IGxpa2U6XG4gKiBAaW5jbHVkZSBoZHBpKDEuNSkge1xuICogIC8vIHlvdXIgY3NzXG4gKiB9O1xuICovXG4vKipcbiAqIF9yZXRpbmEtaW1hZ2Uuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaXVzIFNjaGVlbFxuICpcbiAqIFVzYWdlOlxuICogLmhlcm8ge1xuICogIEBpbmNsdWRlIHJldGluYS1pbWFnZShcIi4uL3BhdGgvdG8vaGVyb1wiLCAyMDBweCA0MDBweCk7XG4gKiB9XG4gKlxuICogdG8gdXNlIGEgc3BlY2lmaWMgZmlsZW5hbWU6XG4gKiAuaGVybyB7XG4gKiAgQGluY2x1ZGUgcmV0aW5hLWltYWdlKFwiLi4vcGF0aC90by9oZXJvXCIsIDIwMHB4IDQwMHB4LCBcIi4uL3BhdGgvdG8vcmV0aW5hLWhlcm9cIik7IFxuICogfSBcbiAqXG4gKiBtb2RpZmllZCB2ZXJzaW9uIG9mIGJvdXJib24ncyByZXRpbmEtaW1hZ2UgbWl4aW4uXG4gKiBUaGUgbWl4aW4gdXNlcyBhIEAyeC5wbmcgcmV0aW5hIGZpbGVuYW1lIGJ5IGRlZmF1bHQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGhvdWdodGJvdC9ib3VyYm9uL2Jsb2IvbWFzdGVyL2FwcC9hc3NldHMvc3R5bGVzaGVldHMvYWRkb25zL19yZXRpbmEtaW1hZ2Uuc2Nzc1xuICovXG4vKipcbiAqIF9mb250LXNpemUuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqL1xuLyoqXG4gKiBfcHgtdG8tcmVtLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcmlhbiBGcmllZG1hbm5cbiAqXG4gKiBVc2FnZTpcbiAqIC5lbGVtZW50IHtcbiAqICAgQGluY2x1ZGUgcHgtdG8tcmVtKHBhZGRpbmcsIDAgMjRweClcbiAqIH1cbiAqXG4gKiBPdXRwdXQ6XG4gKiAuZWxlbWVudCB7XG4gKiAgIHBhZGRpbmc6IDAgMjRweDtcbiAqICAgcGFkZGluZzogMCAxLjVyZW07XG4gKiB9XG4gKlxuICovXG4vKipcbiAqIF9jbGVhcmZpeC5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiAuZWxlbWVudCB7XG4gKiAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICogfVxuICpcbiAqL1xuLyoqXG4gKiBfZWxsaXBzaXMuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqIGVsbGlwc2lzIG1peGluIFxuICpcbiAqL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQmFzZSBTdHlsZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogX21haW4uc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqL1xuLyoqXG4gKiBfYmFzZWxpbmUuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqL1xuLyoqXG4gKiBfdHlwby5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICovXG4vKipcbiAqIF9saW5rcy5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICovXG4vKipcbiAqIG1lZGlhLXNyYy5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBPYmplY3RzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIF9ncmlkLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcmlhbiBGcmllZG1hbm5cbiAqXG4gKiBVc2FnZTpcbiAqIDxkaXYgY2xhc3M9XCJncmlkXCI+XG4gKiAgIDxkaXYgY2xhc3M9XCJncmlkX19pdGVtICB3aWR0aC0tMW9mMSAgd2lkdGgtdGFiLS0xb2YzICB3aWR0aC1kZXNrLS0xb2Y0XCI+XG4gKiAgICAgICAuLi5cbiAqICAgPC9kaXY+PCEtLVxuICotLT48ZGl2IGNsYXNzPVwiZ3JpZF9faXRlbSAgd2lkdGgtLTFvZjEgIHdpZHRoLXRhYi0tMm9mMyAgd2lkdGgtZGVzay0tM29mNFwiPlxuICogICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XG4gKiAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZF9faXRlbSAgd2lkdGgtLTFvZjEgIHdpZHRoLXRhYi0tMW9mMlwiPlxuICogICAgICAgICAgIC4uLlxuICogICAgICAgPC9kaXY+PCEtLVxuICogICAgLS0+PGRpdiBjbGFzcz1cImdyaWRfX2l0ZW0gIHdpZHRoLS0xb2YxICB3aWR0aC10YWItLTFvZjJcIj5cbiAqICAgICAgICAgICAuLi5cbiAqICAgICAgIDwvZGl2PlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqIDwvZGl2PlxuICpcbiAqIHRoZSBleGFtcGxlIGFib3ZlIGNvbWJpbmVzIHRoZSBncmlkIGl0ZW1zIHdpdGggdGhlIHdpZHRocyBmcm9tIGhlbHBlci9fd2lkdGguc2Nzc1xuICovXG4vKipcbiAqIFJldmVyc2UgdGhlIG9yZGVyIG9mIGdyaWQgaXRlbXNcbiAqL1xuLyoqXG4gKiBhZGRzIGEgc2VwZXJhdG9yIGxpbmUgdG8gdGhlIGdyaWRcbiAqL1xuLyoqXG4gKiBHcmlkIGl0ZW1zIHdpdGhvdXQgZ3V0dGVyc1xuICovXG4vKipcbiAqIEdyaWQgc2l6ZSB2YXJpYXRpb25zXG4gKi9cbi8qKlxuICogX2J0bi5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8YSBjbGFzcz1cImJ0biBbYnRuLS1zZWNvbmRhcnldXCIgaHJlZj1cIiNcIj5idG48L2E+XG4gKiA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImJ0blwiPlxuICogPGJ1dHRvbiBjbGFzcz1cImJ0blwiPmJ0bjwvYnV0dG9uPlxuICovXG4vKiBCdXR0b24gZGlzZ3Vpc2VkIGFzIGEgbGluay4gKi9cbi8qKlxuICogX2NvbnN0cmFpbi5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpdXMgU2NoZWVsXG4gKlxuICovXG4vKipcbiAqIF9uYXYuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqIHNvdXJjZTogTmF2IGFic3RyYWN0aW9uIGZyb20gY3Nzd2l6YXJkcnkuY29tLzIwMTEvMDkvdGhlLW5hdi1hYnN0cmFjdGlvblxuICpcbiAqIENhbiBiZSB1c2VkIG9uIGFuIGBvbGAgb3IgYHVsYCBhbmQgZGlzcGxheXMgdGhlIGxpc3QgaXRlbXMgaG9yaXpvbnRhbGx5LlxuICogRXh0ZW5kIGl0IHdpdGggdGhlIGZvbGxvd2luZyBzdWJjbGFzc2VzOlxuICpcbiAqIC0gbmF2LS1zdGFja2VkICAgIC8vIGRpc3BsYXlzIHRoZSBsaXN0IGl0ZW1zIHZlcnRpY2FsbHlcbiAqIC0gbmF2LS1iYW5uZXIgICAgIC8vIGNlbnRyZXMgdGhlIGxpc3RcbiAqIC0gbmF2LS1ibG9jayAgICAgIC8vIGV4cGFuZHMgbGlzdCBpdGVtcyBjbGlja2FibGUgYXJlYXNcbiAqIC0gbmF2LS1maXQgICAgICAgIC8vIGZvcmNlcyB0aGUgbGlzdCB0byBvY2N1cHkgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudFxuICogLSBuYXYtLWtleXdvcmRzICAgLy8gZGlzcGxheSBhcyBhIGxpc3Qgb2Yga2V5d29yZHNcbiAqIC0gbmF2LS1icmVhZGNydW1iIC8vIGRpc3BsYXkgYXMgYnJlYWRjcnVtYnNcbiAqIC0gbmF2LS1wYXJhbGxlbCAgIC8vIGRpc3BsYXkgbmF2IGl0ZW1zIHdpdGggcGFyYWxsZWwgc2VwYXJhdG9yXG4gKlxuICogTWFya3VwOlxuICpcbiAqIDx1bCBjbGFzcz1cIm5hdlwiPlxuICogICA8bGk+PGEgaHJlZj0jPkhvbWU8L2E+PC9saT5cbiAqICAgPGxpPjxhIGhyZWY9Iz5BYm91dDwvYT48L2xpPlxuICogICA8bGk+PGEgaHJlZj0jPlBvcnRmb2xpbzwvYT48L2xpPlxuICogICA8bGk+PGEgaHJlZj0jPkNvbnRhY3Q8L2E+PC9saT5cbiAqIDwvdWw+XG4gKi9cbi8qKlxuICogJ25hdi1zdGFja2VkJyBkaXNwbGF5cyB0aGUgbGlzdCBpdGVtcyB2ZXJ0aWNhbGx5XG4gKi9cbi8qKlxuICogJ25hdi1iYW5uZXInIGNlbnRyZXMgdGhlIGxpc3RcbiAqL1xuLyoqXG4gKiAnbmF2LS1ibG9jaycgZXhwYW5kcyBsaXN0IGl0ZW1zIGNsaWNrYWJsZSBhcmVhcyB3aXRoIHBhZGRpbmdcbiAqL1xuLyoqXG4gKiAnbmF2LS1maXQnIGZvcmNlcyB0aGUgbGlzdCB0byBvY2N1cHkgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudFxuICovXG4vKipcbiAqICduYXYtLWtleXdvcmRzJyBkaXNwbGF5IGFzIGEgbGlzdCBvZiBrZXl3b3Jkc1xuICovXG4vKipcbiAqICduYXYtLWJyZWFkY3J1bWJzJyBkaXNwbGF5IGFzIGJyZWFkY3J1bWJzXG4gKi9cbi8qKlxuICogJ25hdi0tcGFyYWxsZWwnIGRpc3BsYXkgd2l0aCBwYXJhbGxlbCBzZXBhcmF0b3JcbiAqL1xuLyoqXG4gKiBfYm94LnNjc3NcbiAqXG4gKiBtb2RpZmllZCB2ZXJzaW9uIG9mOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ludWl0Y3NzL29iamVjdHMuYm94L2Jsb2IvbWFzdGVyL19vYmplY3RzLmJveC5zY3NzXG4gKlxuICovXG4vKipcbiAqIF9tZWRpYS5zY3NzXG4gKlxuICogZGlzcGxheXMgaW1hZ2UgYW5kIHRleHQgc2lkZSBieSBzaWRlXG4gKlxuICogRXhhbXBsZSBtYXJrdXA6XG4gKlxuICAgIDxkaXYgY2xhc3M9XCJtZWRpYSBtZWRpYS0tc21hbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYV9faW1nXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWVkaWFfX2JvZHlcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAqXG4gKiB1c2UgdGhlIGAubWVkaWEtLXJldmAgbW9kaWZpZXIgdG8gcmV2ZXJzZSB0aGUgdGhlIGltYWdlIGxvY2F0aW9uIGFuZCBwdXQgaXQgdG8gdGhlIHJpZ2h0XG4gKiB1c2UgdGhlIGAubWVkaWEtLXNtYWxsYCBtb2RpZmllciwgdG8gZGVjcmVhc2UgdGhlIGd1dHRlciB3aWR0aCBiZXR3ZWVuIGltYWdlIGFuZCBjb250ZW50XG4gKlxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gaGF2ZSBhIGxvb2sgYXQ6XG4gKiBzdHViYm9ybmVsbGEub3JnL2NvbnRlbnQvMjAxMC8wNi8yNS90aGUtbWVkaWEtb2JqZWN0LXNhdmVzLWh1bmRyZWRzLW9mLWxpbmVzLW9mLWNvZGVcbiAqXG4gKi9cbi8qKlxuICogX2JhcmUtbGlzdC5zY3NzXG4gKlxuICovXG4vKipcbiAqIF91aS1saXN0LnNjc3NcbiAqXG4gKiBiYXNlZCBvbiBIYXJyeSBSb2JlcnRzIHVpLWxpc3Qgb2JqZWN0OlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ludWl0Y3NzL29iamVjdHMudWktbGlzdC9ibG9iL21hc3Rlci9fb2JqZWN0cy51aS1saXN0LnNjc3NcbiAqXG4gKiBjcmVhdGVzIGJsb2NreSBpdGVtcywgY2FuIGJlIHVzZWQgd2l0aCBsaXN0cyBvciB0aGUgY29ycmVzcG9uZGluZyBtYXJrdXA6XG4gKlxuICogPGRpdiBjbGFzcz1cInVpLWxpc3RcIj5cbiAqICA8ZGl2IGNsYXNzPVwidWktbGlzdF9faXRlbVwiPjwvZGl2PlxuICogIDxkaXYgY2xhc3M9XCJ1aS1saXN0X19pdGVtXCI+PC9kaXY+XG4gKiAgPGRpdiBjbGFzcz1cInVpLWxpc3RfX2l0ZW1cIj48L2Rpdj5cbiAqIDwvZGl2PlxuICpcbiAqIG9yOlxuICpcbiAqIDx1bCBjbGFzcz1cInVpLWxpc3QgdWktbGlzdC0tc21hbGxcIj5cbiAqICA8bGk+PC9saT5cbiAqICA8bGk+PC9saT5cbiAqICA8bGk+PC9saT5cbiAqIDwvdWw+XG4gKlxuICogY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB3aXRoIC0tc2VwYXJhdG9yIGFuZCAtLWJvcmRlciwgd2hlcmUgLS1zZXBhcmF0b3JcbiAqIGFkZHMgYm9yZGVycyB0byB0aGUgbGlzdCBlbGVtZW50IGFuZCAtLWJvcmRlciB0byB0aGUgbGlzdCBpdHNlbGZcbiAqXG4gKiBjb21lcyB3aXRoIGRpZmZlcmVudCBzaXplIG1vZGlmaWVyc1xuICpcbiAqL1xuLyoqXG4gKiBNb2RpZmllcnMgZm9yIHNpemluZyB0aGUgbGlzdFxuICovXG4vKipcbiAqIF9hcnJvdy5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8ZGl2IGNsYXNzPVwiYXJyb3cgYXJyb3ctLXRvcC1sZWZ0XCI+XG4gKiAgLi4uXG4gKiA8L2Rpdj5cbiAqXG4gKi9cbi8qKlxuICogQXJyb3cgVG9wXG4gKi9cbi8qKlxuICogQXJyb3cgQm90dG9tXG4gKi9cbi8qKlxuICogQXJyb3cgTGVmdFxuICovXG4vKipcbiAqIEFycm93IFJpZ2h0XG4gKi9cbi8qKlxuICogX2ljb24uc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqIFVzYWdlOlxuICogPGkgY2xhc3M9XCJpY29uIFtpY29uLS1uYXYtdG9nZ2xlXVwiPjwvaT5cbiAqXG4gKi9cbi8qKlxuICogQWxsZSBpY29ucyB3ZXJkZW4gYWxzIC5zdmcgZXhwb3J0aWVydCB1bnRlclxuICogL2Fzc2V0cy9pbWFnZXMvaWNvbnMgYWJnZWxlZ3QgdW5kIHZvbiBncnVudC1zdmdtaW5cbiAqIHVuZCBncnVudC1ncnVudGljb24gd2VpdGVydmVyYXJiZWl0ZXQuXG4gKlxuICogT3V0cHV0IHVudGVyIC9hc3NldHMvaW1hZ2VzL2ljb25zL2dydW50aWNvblxuICovXG4vKipcbiAqIEJlaXNwaWVsIGbDvHIgZWluIEljb25cbiAqXG4gKiAuaWNvbi0tbW9iaWxlLW5hdi10b2dnbGUge1xuICogICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXN2ZyhcIi4uL2ltYWdlcy9uYXYtdG9nZ2xlXCIpO1xuICogfVxuICovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBIZWxwZXIgQ2xhc3Nlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBfc3BhY2luZy5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8ZGl2IGNsYXNzPVwic3BhY2UtLXRvcCAgc3BhY2UtdGFiLS10b3AtZG91YmxlXCI+XG4gKiAgIC4uLlxuICogPC9kaXY+XG4gKlxuICovXG4vKipcbiAqIEJhc2ljICYgc3BhY2luZ1xuICovXG4vKipcbiAqIF93aWR0aC5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICogICA8ZGl2IGNsYXNzPVwiZ3JpZF9faXRlbSAgd2lkdGgtLTFvZjEgIHdpZHRoLXRhYi0tMW9mMyAgd2lkdGgtZGVzay0tMW9mNFwiPlxuICogICAgIC4uLlxuICogICA8L2Rpdj5cbiAqICAgPGRpdiBjbGFzcz1cImdyaWRfX2l0ZW0gIHdpZHRoLS0xb2YxICB3aWR0aC10YWItLTJvZjMgIHdpZHRoLWRlc2stLTNvZjRcIj5cbiAqICAgICAuLi5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqXG4gKi9cbi8qKlxuICogX3R5cG8uc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqIEFsdCBUZXh0IFN0eWxlcy5cbiAqXG4gKiAjIyBhbGlnbm1lbnRcbiAqIC0gdGV4dC0tbGVmdFxuICogLSB0ZXh0LS1yaWdodFxuICogLSB0ZXh0LS1jZW50ZXJcbiAqXG4gKiAjIyB1dGlsaXRpZXNcbiAqIC0gdGV4dC0tc2Vjb25kYXJ5XG4gKiAtIHRleHQtLWluaGVyaXQtY29sb3JcbiAqIC0gdGV4dC0tbm8td3JhcFxuICogLSB0ZXh0LS1sYXJnZVxuICpcbiAqIFVzYWdlOlxuICogPGRpdiBjbGFzcz1cInRleHQtLWxhcmdlXCI+XG4gKiAgIDxoMT5Mb3JlbSBJcHN1bTwvaDE+XG4gKiAgIDxwPkxvcmVtIGlwc3VtPC9wPlxuICogPC9kaXY+XG4gKlxuICovXG4vKipcbiAqIFByZXZlbnQgdGV4dCBmcm9tIHdyYXBwaW5nXG4gKi9cbi8qKlxuICogRGlzcGxheSB0ZXh0IGluIHNlY29uZGFyeSBmb250XG4gKi9cbi8qKlxuICogRGlzcGxheSBsYXJnZXIgdGV4dFxuICovXG4vKipcbiogX2NvbG9yLnNjc3NcbiovXG4uaGVybyB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5oZXJvIGZpZ3VyZSB7XG4gIG1hcmdpbjogMDtcbn1cbi5oZXJvIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI1MHB4O1xuICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDcyMXB4KSB7XG4gIC5oZXJvIGltZyB7XG4gICAgaGVpZ2h0OiAzNTBweDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5oZXJvIGltZyB7XG4gICAgaGVpZ2h0OiA0MDBweDtcbiAgfVxufSIsIi8qKlxuICogYmFzaWNzcyBvdmVycmlkZXNcbiAqXG4gKiBhbnkgZGVmYXVsdHMgaW4gYmFzaWNzcy9iYXNpY3NzL19zZXR0aW5ncy5zY3NzXG4gKiBtYXkgYmUgb3ZlcnJpZGRlbi4uLlxuICpcbiAqIGUuZy4gJHByb3RvdHlwaW5nOiB0cnVlO1xuICovXG5cbiRjb2xvcnM6IChcbiAgXCJsaW5rXCI6ICM5ODEwMDAsXG4gIFwiaG92ZXJcIjogIzZFMEMwMCxcbiAgXCJib3JkZXJcIjogI0RCREJEQixcbiAgXCJibGFja1wiOiAjMTUxNTE1LFxuICBcIndoaXRlXCI6ICNGRkZcbik7XG5cbiRncmlkT2JqZWN0OiB0cnVlO1xuJGJ1dHRvbk9iamVjdDogdHJ1ZTtcbiRjb25zdHJhaW5PYmplY3Q6IHRydWU7XG4kbWVkaWFPYmplY3Q6IHRydWU7XG5cbiRmb250UHJpbWFyeTogJ1JvYm90bycsIHNhbnMtc2VyaWY7XG4kZm9udFNlY29uZGFyeTogJ1JvYm90bycsIHNhbnMtc2VyaWY7XG5cbiAkYnJlYWtzOiAoXG4gICB0YWI6IDQ4MXB4LFxuICAgbGFwOiA3MjFweCxcbiAgIGRlc2s6IDEwMjRweCxcbiAgIGRlc2std2lkZTogMTIwMHB4LFxuICAgbWF4OiAxNTAwcHhcbiApO1xuXG4kaGVhZGluZ3M6IChcbiAgJzEnOiAoXG4gICAgJ2ZvbnQtc2l6ZSc6IDQ4cHgsXG4gICAgJ2ZvbnQtd2VpZ2h0JzogOTAwXG4gICksXG4gICcyJzogKFxuICAgICdmb250LXNpemUnOiAzNnB4LFxuICAgICdmb250LXdlaWdodCc6IDkwMFxuICApLFxuICAnMyc6IChcbiAgICAnZm9udC1zaXplJzogMzJweCxcbiAgICAnZm9udC13ZWlnaHQnOiA5MDBcbiAgKSxcbiAgJzQnOiAoXG4gICAgJ2ZvbnQtc2l6ZSc6IDI0cHgsXG4gICAgJ2ZvbnQtd2VpZ2h0JzogOTAwXG4gICksXG4gICc1JzogKFxuICAgICdmb250LXNpemUnOiAxOHB4LFxuICAgICdmb250LXdlaWdodCc6IDkwMFxuICApLFxuICAnNic6IChcbiAgICAnZm9udC1zaXplJzogMTZweCxcbiAgICAnZm9udC13ZWlnaHQnOiA5MDBcbiAgKSxcbik7XG5cbiRiYXNlVW5pdDogMjBweDtcblxuJGNvbnN0cmFpbjogKFxuICBtYXg6ICAgICAxNDAwcHhcbik7IiwiLyoqXG4gKiBiYXNpY3NzLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcmlhbiBGcmllZG1hbm5cbiAqXG4gKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUmVzZXQsIERlZmF1bHRzLCBNaXhpbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuJGFkZENzczogZmFsc2U7XG5cbi8qKlxuICogUmVzZXQsIERlZmF1bHQgc2V0dGluZ3NcbiAqL1xuXG5AaW1wb3J0IFwiYmFzaWNzcy9zZXR0aW5nc1wiO1xuXG4vKipcbiAqIE1peGluc1xuICovXG5cbkBpbXBvcnQgXCJiYXNpY3NzL21peGlucy9jb2xvclwiO1xuQGltcG9ydCBcImJhc2ljc3MvbWl4aW5zL2JyZWFrXCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9taXhpbnMvbWVkaWFcIjtcbkBpbXBvcnQgXCJiYXNpY3NzL21peGlucy9oZHBpXCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9taXhpbnMvcmV0aW5hLWltYWdlXCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9taXhpbnMvZm9udC1zaXplXCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9taXhpbnMvcHgtdG8tcmVtXCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9taXhpbnMvY2xlYXJmaXhcIjtcbkBpbXBvcnQgXCJiYXNpY3NzL21peGlucy9lbGxpcHNpc1wiO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCYXNlIFN0eWxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5AaW1wb3J0IFwiYmFzaWNzcy9iYXNlL21haW5cIjtcbkBpbXBvcnQgXCJiYXNpY3NzL2Jhc2UvYmFzZWxpbmVcIjtcbkBpbXBvcnQgXCJiYXNpY3NzL2Jhc2UvdHlwb1wiO1xuQGltcG9ydCBcImJhc2ljc3MvYmFzZS9saW5rc1wiO1xuQGltcG9ydCBcImJhc2ljc3MvYmFzZS9tZWRpYS1zcmNcIjtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgT2JqZWN0c1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5AaW1wb3J0IFwiYmFzaWNzcy9vYmplY3RzL2dyaWRcIjtcbkBpbXBvcnQgXCJiYXNpY3NzL29iamVjdHMvYnRuXCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9vYmplY3RzL2NvbnN0cmFpblwiO1xuQGltcG9ydCBcImJhc2ljc3Mvb2JqZWN0cy9uYXZcIjtcbkBpbXBvcnQgXCJiYXNpY3NzL29iamVjdHMvYm94XCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9vYmplY3RzL21lZGlhXCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9vYmplY3RzL2JhcmUtbGlzdFwiO1xuQGltcG9ydCBcImJhc2ljc3Mvb2JqZWN0cy91aS1saXN0XCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9vYmplY3RzL2Fycm93XCI7XG5AaW1wb3J0IFwiYmFzaWNzcy9vYmplY3RzL2ljb25cIjtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSGVscGVyIENsYXNzZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuQGltcG9ydCBcImJhc2ljc3MvaGVscGVyL3NwYWNpbmdcIjtcbkBpbXBvcnQgXCJiYXNpY3NzL2hlbHBlci93aWR0aFwiO1xuQGltcG9ydCBcImJhc2ljc3MvaGVscGVyL3R5cG9cIjtcbkBpbXBvcnQgXCJiYXNpY3NzL2hlbHBlci9sYXlvdXRcIjtcbkBpbXBvcnQgXCJiYXNpY3NzL2hlbHBlci9jb2xvclwiO1xuIiwiLyoqXG4gKiBfc2V0dGluZ3Muc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICovXG5cbi8qKlxuKiBWYXJpYWJsZXMgTW9kZVxuKi9cbiRhZGRDc3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8qKlxuKiBEZWZhdWx0IGNvbG9yc1xuKi9cbiRfbGluazogIzAwNzRkOTtcbiRfaG92ZXI6IGRhcmtlbigkX2xpbmssIDEwJSk7XG4kX2JvcmRlcjogI0NDQztcblxuJGNvbG9yczogKFxuICBcImxpbmtcIjogJF9saW5rLFxuICBcImhvdmVyXCI6ICRfaG92ZXIsXG4gIFwiYm9yZGVyXCI6ICRfYm9yZGVyXG4pIWRlZmF1bHQ7XG5cbi8qKlxuICogRGVmYXVsdCBvYmplY3RzXG4gKi9cblxuJGFycm93T2JqZWN0OiBmYWxzZSFkZWZhdWx0O1xuJGJveE9iamVjdDogZmFsc2UhZGVmYXVsdDtcbiRuYXZPYmplY3Q6IGZhbHNlIWRlZmF1bHQ7XG4kZ3JpZE9iamVjdDogZmFsc2UhZGVmYXVsdDtcbiRidXR0b25PYmplY3Q6IGZhbHNlIWRlZmF1bHQ7XG4kY29uc3RyYWluT2JqZWN0OiBmYWxzZSFkZWZhdWx0O1xuJG1lZGlhT2JqZWN0OiBmYWxzZSFkZWZhdWx0O1xuJGJhcmVMaXN0T2JqZWN0OiBmYWxzZSFkZWZhdWx0O1xuJHVpTGlzdE9iamVjdDogZmFsc2UhZGVmYXVsdDtcblxuLyoqXG4gKiBEZWZhdWx0IGhlbHBlclxuICovXG5cbiRzcGFjaW5nSGVscGVyOiB0cnVlIWRlZmF1bHQ7XG4kdHlwb0hlbHBlcjogdHJ1ZSFkZWZhdWx0O1xuJHdpZHRoSGVscGVyOiB0cnVlIWRlZmF1bHQ7XG4kbGF5b3V0SGVscGVyOiB0cnVlIWRlZmF1bHQ7XG4kY29sb3JIZWxwZXI6IHRydWUhZGVmYXVsdDtcblxuLyoqXG4gKiBEZWZhdWx0IGZvbnRzXG4gKi9cblxuJGZvbnRQcmltYXJ5OiBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWYhZGVmYXVsdDtcbiRmb250U2Vjb25kYXJ5OiBHZW9yZ2lhLCBzZXJpZiFkZWZhdWx0O1xuXG4vKipcbiAqIERlZmF1bHQgZm9udCBzaXplXG4gKi9cblxuJGJhc2VGb250U2l6ZTogMTZweCFkZWZhdWx0O1xuJGJhc2VMaW5lSGVpZ2h0OiAyNHB4IWRlZmF1bHQ7XG5cbi8qKlxuICogRGVmYXVsdCBoZWFkaW5nc1xuICovXG5cbiRoZWFkaW5nU2l6ZTE6IDQ4cHghZGVmYXVsdDtcbiRoZWFkaW5nU2l6ZTI6IDM2cHghZGVmYXVsdDtcbiRoZWFkaW5nU2l6ZTM6IDMycHghZGVmYXVsdDtcbiRoZWFkaW5nU2l6ZTQ6IDI0cHghZGVmYXVsdDtcbiRoZWFkaW5nU2l6ZTU6IDE4cHghZGVmYXVsdDtcbiRoZWFkaW5nU2l6ZTY6IDE2cHghZGVmYXVsdDtcblxuJGhlYWRpbmdzOiAoXG4gICcxJzogKFxuICAgICdmb250LXNpemUnOiAkaGVhZGluZ1NpemUxXG4gICksXG4gICcyJzogKFxuICAgICdmb250LXNpemUnOiAkaGVhZGluZ1NpemUyXG4gICksXG4gICczJzogKFxuICAgICdmb250LXNpemUnOiAkaGVhZGluZ1NpemUzXG4gICksXG4gICc0JzogKFxuICAgICdmb250LXNpemUnOiAkaGVhZGluZ1NpemU0XG4gICksXG4gICc1JzogKFxuICAgICdmb250LXNpemUnOiAkaGVhZGluZ1NpemU1XG4gICksXG4gICc2JzogKFxuICAgICdmb250LXNpemUnOiAkaGVhZGluZ1NpemU2XG4gICksXG4pIWRlZmF1bHQ7XG5cbi8qKlxuICogIERlZmF1bHQgc3BhY2luZ1xuICovXG5cbiRiYXNlVW5pdDogJGJhc2VMaW5lSGVpZ2h0IWRlZmF1bHQ7XG4kbGluZUhlaWdodFJhdGlvOiBjYWxjKCRiYXNlTGluZUhlaWdodCAvICRiYXNlRm9udFNpemUpO1xuXG4vKipcbiAqIERlZmF1bHQgYnJlYWtwb2ludHNcbiAqL1xuXG4gJGJyZWFrczogKFxuICAgdGFiOiA0ODFweCxcbiAgIGxhcDogNzIxcHgsXG4gICBkZXNrOiAxMDI0cHgsXG4gICBkZXNrLXdpZGU6IDEyMDBweFxuICkhZGVmYXVsdDtcblxuIC8qKlxuICAqIERlZmF1bHQgc3BhY2VzXG4gICovXG5cbiRzcGFjZTogKFxuICBub25lOiAgMCxcbiAgcXVhcnRlcjogLjI1LFxuICB0aGlyZDogLjMzMzMzMzMzMzMzLFxuICBoYWxmOiAuNSxcbiAgZGVmYXVsdDogMSxcbiAgZG91YmxlOiAyLFxuICB0cmlwbGU6IDMsXG4gIHF1YWQ6IDRcbikhZGVmYXVsdDtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnN0cmFpbnNcbiAqL1xuXG4gJGNvbnN0cmFpbjogKFxuICAgc21hbGw6ICAgMzgwcHgsXG4gICBtZWRpdW06ICA0ODBweCxcbiAgIGxhcmdlOiAgIDcyMHB4LFxuICAgbWF4OiAgICAgOTgwcHhcbiApIWRlZmF1bHQ7XG5cbi8qKlxuICogQXJyb3dzXG4gKi9cblxuJGFycm93U2l6ZTogMTBweCFkZWZhdWx0O1xuXG4vKipcbiAqIEdsb2JhbCBWYXJpYWJsZXNcbiAqL1xuXG4kYm9yZGVyUmFkaXVzOiA0cHghZGVmYXVsdDtcbiIsIi8qKlxuICogX21lZGlhLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcml1cyBTY2hlZWxcbiAqXG4gKiBVc2FnZTpcbiAqIEBpbmNsdWRlIG1lZGlhKDMwMHB4KTtcbiAqIG9yIEBpbmNsdWRlIG1lZGlhKDMwMHB4LCBmYWxzZSk7XG4gKiBvciBAaW5jbHVkZSBtZWRpYShtYXgtd2lkdGggMzAwcHgpO1xuICogb3IgQGluY2x1ZGUgbWVkaWEoMTAwcHggbWF4LXdpZHRoIDMwMHB4KTtcbiAqIG9yIEBpbmNsdWRlIG1lZGlhKG1heC13aWR0aCAxMDBweCBtYXgtd2lkdGggMzAwcHgpO1xuICogb3IgQGluY2x1ZGUgbWVkaWEobWF4LXdpZHRoIDEwMHB4IG1heC13aWR0aCAzMDBweCwgdHJ1ZSk7XG4gKlxuICovXG5cbiRkZWZhdWx0LWZlYXR1cmU6IG1pbi13aWR0aDtcblxuQG1peGluIG1lZGlhKCRxdWVyeTokZmVhdHVyZSAkdmFsdWUsICRzZXJ2ZVRvT2xkSUU6IGZhbHNlKSB7XG5cbiAgQGlmIGxlbmd0aCgkcXVlcnkpID09IDEge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kICgkZGVmYXVsdC1mZWF0dXJlOiBudGgoJHF1ZXJ5LCAxKSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgQGVsc2UgaWYgbGVuZ3RoKCRxdWVyeSkgPT0gMiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG50aCgkcXVlcnksIDEpOiBudGgoJHF1ZXJ5LCAyKSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgQGVsc2UgaWYgbGVuZ3RoKCRxdWVyeSkgPT0gMyB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKCRkZWZhdWx0LWZlYXR1cmU6IG50aCgkcXVlcnksIDEpKSBhbmQgKG50aCgkcXVlcnksIDIpOiBudGgoJHF1ZXJ5LCAzKSkgIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmIGxlbmd0aCgkcXVlcnkpID09IDQge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChudGgoJHF1ZXJ5LCAxKTogbnRoKCRxdWVyeSwgMikpIGFuZCAobnRoKCRxdWVyeSwgMyk6IG50aCgkcXVlcnksIDQpKSAge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgQGlmICRzZXJ2ZVRvT2xkSUUge1xuICAgIC5sdC1pZTkgJiB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogX2hkcGkuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaXVzIFNjaGVlbFxuICpcbiAqIGRlZmF1bHRzIHRvIDEuMyB0byBpbmNsdWRlIEdvb2dsZSBOZXh1cyA3XG4gKiBhZGFwdGVkIGZyb20gYm91cmJvbjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90aG91Z2h0Ym90L2JvdXJib24vYmxvYi9tYXN0ZXIvYXBwL2Fzc2V0cy9zdHlsZXNoZWV0cy9jc3MzL19oaWRwaS1tZWRpYS1xdWVyeS5zY3NzXG4gKiBcbiAqIFVzYWdlOlxuICogQGluY2x1ZGUgaGRwaSB7XG4gKiAgLy8geW91ciBjc3MgZm9yIGhkcGkgZGlzcGxheXNcbiAqIH07XG4gKlxuICogeW91IGNhbiB1c2UgYSBjdXN0b20gcmF0aW8sIGlmIHlvdSBsaWtlOlxuICogQGluY2x1ZGUgaGRwaSgxLjUpIHtcbiAqICAvLyB5b3VyIGNzc1xuICogfTtcbiAqL1xuXG5AbWl4aW4gaGRwaSgkcmF0aW86IDEuMykge1xuICBAbWVkaWEgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86ICRyYXRpbyksXG4gIG9ubHkgc2NyZWVuIGFuZCAobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAkcmF0aW8pLFxuICBvbmx5IHNjcmVlbiBhbmQgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHJhdGlvfS8xKSxcbiAgb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogI3tyb3VuZCgkcmF0aW8qOTYpfWRwaSksXG4gIG9ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246ICN7JHJhdGlvfWRwcHgpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuIiwiLyoqXG4gKiBfcmV0aW5hLWltYWdlLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcml1cyBTY2hlZWxcbiAqXG4gKiBVc2FnZTpcbiAqIC5oZXJvIHtcbiAqICBAaW5jbHVkZSByZXRpbmEtaW1hZ2UoXCIuLi9wYXRoL3RvL2hlcm9cIiwgMjAwcHggNDAwcHgpO1xuICogfVxuICpcbiAqIHRvIHVzZSBhIHNwZWNpZmljIGZpbGVuYW1lOlxuICogLmhlcm8ge1xuICogIEBpbmNsdWRlIHJldGluYS1pbWFnZShcIi4uL3BhdGgvdG8vaGVyb1wiLCAyMDBweCA0MDBweCwgXCIuLi9wYXRoL3RvL3JldGluYS1oZXJvXCIpOyBcbiAqIH0gXG4gKlxuICogbW9kaWZpZWQgdmVyc2lvbiBvZiBib3VyYm9uJ3MgcmV0aW5hLWltYWdlIG1peGluLlxuICogVGhlIG1peGluIHVzZXMgYSBAMngucG5nIHJldGluYSBmaWxlbmFtZSBieSBkZWZhdWx0LlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rob3VnaHRib3QvYm91cmJvbi9ibG9iL21hc3Rlci9hcHAvYXNzZXRzL3N0eWxlc2hlZXRzL2FkZG9ucy9fcmV0aW5hLWltYWdlLnNjc3NcbiAqL1xuXG5AbWl4aW4gcmV0aW5hLWltYWdlKCRmaWxlbmFtZSwgJGJhY2tncm91bmQtc2l6ZSwgJGV4dGVuc2lvbjogcG5nLCAkcmV0aW5hLWZpbGVuYW1lOiBudWxsKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGZpbGVuYW1lfS4jeyRleHRlbnNpb259XCIpO1xuXG4gIEBpbmNsdWRlIGhkcGkge1xuICAgIEBpZiAkcmV0aW5hLWZpbGVuYW1lIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JHJldGluYS1maWxlbmFtZX0uI3skZXh0ZW5zaW9ufVwiKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skZmlsZW5hbWV9QDJ4LiN7JGV4dGVuc2lvbn1cIik7XG4gICAgfVxuXG4gICAgYmFja2dyb3VuZC1zaXplOiAkYmFja2dyb3VuZC1zaXplO1xuICB9XG59XG4iLCIvKipcbiAqIF9mb250LXNpemUuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqL1xuXG5AbWl4aW4gZm9udC1zaXplKCRmb250U2l6ZSwgJGxpbmVIZWlnaHQ6dHJ1ZSl7XG4gICAgZm9udC1zaXplOiRmb250U2l6ZTtcbiAgICBmb250LXNpemU6IGNhbGMoJGZvbnRTaXplIC8gJGJhc2VGb250U2l6ZSkqMXJlbTtcbiAgICBAaWYgJGxpbmVIZWlnaHQgPT0gdHJ1ZSB7XG4gICAgICBsaW5lLWhlaWdodDpjZWlsKGNhbGMoJGZvbnRTaXplIC8gJGJhc2VMaW5lSGVpZ2h0KSkgKiBjYWxjKCRiYXNlTGluZUhlaWdodCAvICRmb250U2l6ZSk7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBfcHgtdG8tcmVtLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcmlhbiBGcmllZG1hbm5cbiAqXG4gKiBVc2FnZTpcbiAqIC5lbGVtZW50IHtcbiAqICAgQGluY2x1ZGUgcHgtdG8tcmVtKHBhZGRpbmcsIDAgMjRweClcbiAqIH1cbiAqXG4gKiBPdXRwdXQ6XG4gKiAuZWxlbWVudCB7XG4gKiAgIHBhZGRpbmc6IDAgMjRweDtcbiAqICAgcGFkZGluZzogMCAxLjVyZW07XG4gKiB9XG4gKlxuICovXG5cbkBmdW5jdGlvbiB0b1JlbSgkcHgpIHtcbiAgJHJlbTogY2FsYygkcHggLyAkYmFzZUZvbnRTaXplKTtcbiAgQHJldHVybiAjeyRyZW19cmVtO1xufVxuXG5AbWl4aW4gcHgtdG8tcmVtKCRwcm9wLCAkdmFsdWVzKSB7XG5cbiAgJG91dHB1dDogKCk7XG5cbiAgQGVhY2ggJHZhbHVlIGluICR2YWx1ZXMge1xuICAgIEBpZiAkdmFsdWUgIT0gMCB7XG4gICAgICAkdmFsdWU6IHRvUmVtKCR2YWx1ZSk7XG4gICAgfVxuICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkdmFsdWUpO1xuICB9XG5cbiAgI3skcHJvcH06ICR2YWx1ZXM7IC8vIEZhbGxiYWNrXG4gICN7JHByb3B9OiAkb3V0cHV0O1xufVxuIiwiLyoqXG4gKiBfY2xlYXJmaXguc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqIFVzYWdlOlxuICogLmVsZW1lbnQge1xuICogICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAqIH1cbiAqXG4gKi9cblxuQG1peGluIGNsZWFyZml4IHtcbiAgJjpiZWZvcmUsXG4gICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICB9XG5cbiAgJjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cblxuICAvKipcbiAgICogRm9yIElFIDYvNyBvbmx5XG4gICAqIEluY2x1ZGUgdGhpcyBydWxlIHRvIHRyaWdnZXIgaGFzTGF5b3V0IGFuZCBjb250YWluIGZsb2F0cy5cbiAgICovXG4gICp6b29tOiAxO1xufVxuXG4iLCIvKipcbiAqIF9lbGxpcHNpcy5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogZWxsaXBzaXMgbWl4aW4gXG4gKlxuICovXG5cbkBtaXhpbiBlbGxpcHNpcyB7XG4gIHdpZHRoOiBhdXRvO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cbiIsIi8qKlxuICogX21haW4uc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqL1xuXG5AaWYgJGFkZENzcyB7XG4gICoge1xuICAgICYsXG4gICAgJjpiZWZvcmUsXG4gICAgJjphZnRlciB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgfVxuXG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG5cbiVpbnZpc2libGUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xufVxuXG5AaWYgJGFkZENzcyB7XG4gIC5pbnZpc2libGUge1xuICAgIEBleHRlbmQgJWludmlzaWJsZTtcbiAgfVxufSIsIi8qKlxuICogX2Jhc2VsaW5lLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcmlhbiBGcmllZG1hbm5cbiAqXG4gKi9cblxuQGlmICRhZGRDc3Mge1xuICBib2R5LFxuICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxuICBwLCBibG9ja3F1b3RlLCBwcmUsXG4gIGRsLCBkZCwgb2wsIHVsLFxuICBmb3JtLCBmaWVsZHNldCwgbGVnZW5kLFxuICB0YWJsZSwgdGgsIHRkLCBjYXB0aW9uLFxuICBociB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxuICB1bCwgb2wsIGRsLFxuICBibG9ja3F1b3RlLCBwLCBhZGRyZXNzLFxuICB0YWJsZSxcbiAgZmllbGRzZXQsIGZpZ3VyZSxcbiAgcHJlIHtcbiAgICBAaW5jbHVkZSBweC10by1yZW0obWFyZ2luLCAwIDAgJGJhc2VVbml0KTtcbiAgfVxuXG4gIHVsLCBvbCwgZGQge1xuICAgIEBpbmNsdWRlIHB4LXRvLXJlbShtYXJnaW4tbGVmdCwgJGJhc2VVbml0KTtcbiAgfVxuXG4gIGxpID4gdWwsXG4gIGxpID4gb2wge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn0iLCJAdXNlICdzYXNzOm1hdGgnO1xuLyoqXG4gKiBfdHlwby5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICovXG5cbkBpZiAkYWRkQ3NzIHtcbiAgaHRtbCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250UHJpbWFyeTtcbiAgICBmb250LXNpemU6IGNhbGMoJGJhc2VGb250U2l6ZSAvIDE2cHgpICogMWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZUhlaWdodFJhdGlvO1xuICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nQXR0cmlidXRlcygkYXR0cmlidXRlcyl7XG4gIEBlYWNoICRhdHROYW1lLCRhdHRWYWx1ZSBpbiAkYXR0cmlidXRlcyB7XG4gICAgQGlmICRhdHROYW1lID09IHJlc3BvbnNpdmUge1xuICAgICAgQGVhY2ggJG1lZGlhLCRhdHRzIGluICRhdHRWYWx1ZSB7XG4gICAgICAgIEBpbmNsdWRlIG1lZGlhKGJyZWFrKCRtZWRpYSkpe1xuICAgICAgICAgIEBpbmNsdWRlIGhlYWRpbmdBdHRyaWJ1dGVzKCRhdHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1AZWxzZSBpZiAkYXR0TmFtZSA9PSBmb250LXNpemUge1xuICAgICAgQGlmIG1hcC1oYXMta2V5KCRhdHRyaWJ1dGVzLCdsaW5lLWhlaWdodCcpIHtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKCRhdHRWYWx1ZSxmYWxzZSk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKCRhdHRWYWx1ZSx0cnVlKTtcbiAgICAgIH1cbiAgICB9QGVsc2UgaWYgJGF0dE5hbWUgPT0gbGluZS1oZWlnaHQge1xuICAgICAgQGlmIG1hcC1oYXMta2V5KCRhdHRyaWJ1dGVzLCdmb250LXNpemUnKSB7XG4gICAgICAgIC8vIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYXR0VmFsdWUsZmFsc2UpO1xuICAgICAgICAjeyRhdHROYW1lfTogbWF0aC5kaXYoJGF0dFZhbHVlLG1hcC1nZXQoJGF0dHJpYnV0ZXMsJ2ZvbnQtc2l6ZScpKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAjeyRhdHROYW1lfTogI3skYXR0VmFsdWV9O1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgI3skYXR0TmFtZX06ICN7JGF0dFZhbHVlfTtcbiAgICB9XG4gIH1cbn1cblxuQGVhY2ggJGtleSwkYXR0cmlidXRlcyBpbiAkaGVhZGluZ3Mge1xuICAlaGVhZGluZy0jeyRrZXl9IHtcbiAgICBAaW5jbHVkZSBoZWFkaW5nQXR0cmlidXRlcygkYXR0cmlidXRlcyk7XG4gIH1cbiAgQGlmICRhZGRDc3Mge1xuICAgIGgjeyRrZXl9LFxuICAgIC5oZWFkaW5nLSN7JGtleX0ge1xuICAgICAgQGV4dGVuZCAlaGVhZGluZy0jeyRrZXl9O1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBfbGlua3Muc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqL1xuXG5AaWYgJGFkZENzcyB7XG4gIGEge1xuICAgIGNvbG9yOiBjb2xvcignbGluaycpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gIGE6aG92ZXIge1xuICAgIGNvbG9yOiBjb2xvcignaG92ZXInKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIGE6Zm9jdXMgeyBvdXRsaW5lOiB0aGluIGRvdHRlZDsgfVxuXG4gIGE6aG92ZXIsIGE6YWN0aXZlIHsgb3V0bGluZTogMDsgfVxufVxuIiwiLyoqXG4gKiBtZWRpYS1zcmMuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqL1xuXG5AaWYgJGFkZENzcyB7XG4gIG9iamVjdCxcbiAgZW1iZWQsXG4gIHZpZGVvLFxuICBpbWcge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cblxuICAvKipcbiAgKiB0ZXh0IHN0eWxlcyB0byBvZmZzZXQgYWx0IHRleHRcbiAgKi9cbiAgaW1nIHtcbiAgICBjb2xvcjogI2MwMDtcbiAgfVxuXG4gIC8qKlxuICAqIG5vIGZsdWlkIGltYWdlcywgd2hlbiB3aWR0aCBvciBoZWlnaHQgYXJlIHNldFxuICAqL1xuICBpbWdbd2lkdGhdLFxuICBpbWdbaGVpZ2h0XSB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICB9XG59IiwiQG1peGluIGdyaWRfbW9kaWZpZXJzKCRzY29wZTogJycpIHtcbiAgQGlmICRzY29wZSAhPSAnJyB7ICRzY29wZTogLSN7JHNjb3BlfTsgfVxuXG4gICRtb2RpZmllci1zZXBlcmF0b3I6ICctLSc7XG5cbiAgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9c3RhcnQge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgfVxuICAlZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1lbmQge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgfVxuICAlZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1jZW50ZXIge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbiAgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9YmV0d2VlbiB7XG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuICAlZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1hcm91bmQge1xuICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gIH1cbiAgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9dG9wIHtcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICB9XG4gICVncmlkI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfW1pZGRsZSB7XG4gICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Ym90dG9tIHtcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kO1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICB9XG4gICVncmlkI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfXN0cmV0Y2gge1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICB9XG5cbiAgQGlmICRhZGRDc3MgYW5kICRncmlkT2JqZWN0IHtcbiAgICAuZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1zdGFydCB7QGV4dGVuZCAlZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1zdGFydDt9XG4gICAgLmdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9ZW5kIHtAZXh0ZW5kICVncmlkI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfWVuZDt9XG4gICAgLmdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Y2VudGVyIHtAZXh0ZW5kICVncmlkI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfWNlbnRlcjt9XG4gICAgLmdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9YmV0d2VlbiB7QGV4dGVuZCAlZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1iZXR3ZWVuO31cbiAgICAuZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1hcm91bmQge0BleHRlbmQgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9YXJvdW5kO31cbiAgICAuZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn10b3Age0BleHRlbmQgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9dG9wO31cbiAgICAuZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1taWRkbGUge0BleHRlbmQgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9bWlkZGxlO31cbiAgICAuZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1ib3R0b20ge0BleHRlbmQgJWdyaWQjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Ym90dG9tO31cbiAgICAuZ3JpZCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn1zdHJldGNoIHtAZXh0ZW5kICVncmlkI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfXN0cmV0Y2g7fVxuICB9XG59XG5cbiR3aWR0aEhlbHBlcjogdHJ1ZTtcbi8qKlxuICogX2dyaWQuc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqIFVzYWdlOlxuICogPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAqICAgPGRpdiBjbGFzcz1cImdyaWRfX2l0ZW0gIHdpZHRoLS0xb2YxICB3aWR0aC10YWItLTFvZjMgIHdpZHRoLWRlc2stLTFvZjRcIj5cbiAqICAgICAgIC4uLlxuICogICA8L2Rpdj48IS0tXG4gKi0tPjxkaXYgY2xhc3M9XCJncmlkX19pdGVtICB3aWR0aC0tMW9mMSAgd2lkdGgtdGFiLS0yb2YzICB3aWR0aC1kZXNrLS0zb2Y0XCI+XG4gKiAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJncmlkX19pdGVtICB3aWR0aC0tMW9mMSAgd2lkdGgtdGFiLS0xb2YyXCI+XG4gKiAgICAgICAgICAgLi4uXG4gKiAgICAgICA8L2Rpdj48IS0tXG4gKiAgICAtLT48ZGl2IGNsYXNzPVwiZ3JpZF9faXRlbSAgd2lkdGgtLTFvZjEgIHdpZHRoLXRhYi0tMW9mMlwiPlxuICogICAgICAgICAgIC4uLlxuICogICAgICAgPC9kaXY+XG4gKiAgICAgPC9kaXY+XG4gKiAgIDwvZGl2PlxuICogPC9kaXY+XG4gKlxuICogdGhlIGV4YW1wbGUgYWJvdmUgY29tYmluZXMgdGhlIGdyaWQgaXRlbXMgd2l0aCB0aGUgd2lkdGhzIGZyb20gaGVscGVyL193aWR0aC5zY3NzXG4gKi9cblxuJWdyaWQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWFyZ2luOiAwO1xuICBAaW5jbHVkZSBweC10by1yZW0obWFyZ2luLWxlZnQsIC0kYmFzZVVuaXQpO1xuXG59XG4lZ3JpZF9faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgQGluY2x1ZGUgcHgtdG8tcmVtKHBhZGRpbmctbGVmdCwgJGJhc2VVbml0KTtcblxufVxuXG4vKipcbiAqIFJldmVyc2UgdGhlIG9yZGVyIG9mIGdyaWQgaXRlbXNcbiAqL1xuJWdyaWQtLXJldmVyc2VkIHtcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbn1cblxuXG4vKipcbiAqIGFkZHMgYSBzZXBlcmF0b3IgbGluZSB0byB0aGUgZ3JpZFxuICovXG4gJWdyaWQtLXNlcGVyYXRvciB7XG4gICBAZXh0ZW5kICVncmlkLS1zdHJldGNoO1xuICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgID4gLmdyaWRfX2l0ZW0ge1xuICAgICAmOmFmdGVyIHtcbiAgICAgICBjb250ZW50OiAnJztcbiAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgdG9wOiAwO1xuICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgIHJpZ2h0OiBjYWxjKCRiYXNlVW5pdC8yKSAqIC0xO1xuICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKCdib3JkZXInKTtcbiAgICAgfVxuICAgfVxuICAgJi5ncmlkLS1mbHVzaCB7XG4gICAgPiAuZ3JpZF9faXRlbTphZnRlciB7XG4gICAgICByaWdodDogMFxuICAgIH1cbiAgIH1cbiAgICYuZ3JpZC0tc21hbGwge1xuICAgID4gLmdyaWRfX2l0ZW06YWZ0ZXIge1xuICAgICAgcmlnaHQ6IGNhbGMoJGJhc2VVbml0LzQpICogLTE7XG4gICAgfVxuICAgfVxuICAgJi5ncmlkLS1sYXJnZSB7XG4gICAgPiAuZ3JpZF9faXRlbTphZnRlciB7XG4gICAgICByaWdodDogJGJhc2VVbml0ICogLTE7XG4gICAgfVxuICAgfVxuICAgJi5ncmlkLS1odWdlIHtcbiAgICA+IC5ncmlkX19pdGVtOmFmdGVyIHtcbiAgICAgIHJpZ2h0OiAkYmFzZVVuaXQgKiAtMS41O1xuICAgIH1cbiAgIH1cbiB9XG5cblxuXG4vKipcbiAqIEdyaWQgaXRlbXMgd2l0aG91dCBndXR0ZXJzXG4gKi9cbiVncmlkLS1mbHVzaCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuXG4gID4gLmdyaWRfX2l0ZW0ge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxufVxuXG4vKipcbiAqIEdyaWQgc2l6ZSB2YXJpYXRpb25zXG4gKi9cbiVncmlkLS1zbWFsbCB7XG4gIEBpbmNsdWRlIHB4LXRvLXJlbShtYXJnaW4tbGVmdCwgLShjYWxjKCRiYXNlVW5pdC8yKSkpO1xuICA+IC5ncmlkX19pdGVtIHtcbiAgICBAaW5jbHVkZSBweC10by1yZW0ocGFkZGluZy1sZWZ0LCBjYWxjKCRiYXNlVW5pdC8yKSk7XG4gIH1cbn1cblxuJWdyaWQtLWxhcmdlIHtcbiAgQGluY2x1ZGUgcHgtdG8tcmVtKG1hcmdpbi1sZWZ0LCAoLSgkYmFzZVVuaXQqMikpKTtcblxuICA+IC5ncmlkX19pdGVtLFxuICA+ICVncmlkX19pdGVtIHtcbiAgICBAaW5jbHVkZSBweC10by1yZW0ocGFkZGluZy1sZWZ0LCAkYmFzZVVuaXQqMik7XG4gIH1cbn1cblxuJWdyaWQtLWh1Z2Uge1xuICBAaW5jbHVkZSBweC10by1yZW0obWFyZ2luLWxlZnQsICgtKCRiYXNlVW5pdCozKSkpO1xuICA+IC5ncmlkX19pdGVtLFxuICA+ICVncmlkX19pdGVtIHtcbiAgICBAaW5jbHVkZSBweC10by1yZW0ocGFkZGluZy1sZWZ0LCAkYmFzZVVuaXQqMyk7XG4gIH1cbn1cblxuXG5AaW5jbHVkZSBncmlkX21vZGlmaWVycygpO1xuXG5AZWFjaCAka2V5LCRicmVhayBpbiAkYnJlYWtzIHtcbiAgQGluY2x1ZGUgbWVkaWEoJGJyZWFrKSB7XG4gICAgQGluY2x1ZGUgZ3JpZF9tb2RpZmllcnMoJGtleSk7XG4gIH1cbn1cbkBpZiAkYWRkQ3NzIGFuZCAkZ3JpZE9iamVjdCB7XG4gIC5ncmlkIHtAZXh0ZW5kICVncmlkO31cbiAgLmdyaWRfX2l0ZW0ge0BleHRlbmQgJWdyaWRfX2l0ZW07fVxuICAuZ3JpZC0tcmV2ZXJzZWQge0BleHRlbmQgJWdyaWQtLXJldmVyc2VkO31cbiAgLmdyaWQtLXNlcGVyYXRvciB7QGV4dGVuZCAlZ3JpZC0tc2VwZXJhdG9yO31cbiAgLmdyaWQtLWZsdXNoIHtAZXh0ZW5kICVncmlkLS1mbHVzaDt9XG4gIC5ncmlkLS1zbWFsbCB7QGV4dGVuZCAlZ3JpZC0tc21hbGw7fVxuICAuZ3JpZC0tbGFyZ2Uge0BleHRlbmQgJWdyaWQtLWxhcmdlO31cbiAgLmdyaWQtLWh1Z2Uge0BleHRlbmQgJWdyaWQtLWh1Z2U7fVxufS8vQGlmXG4iLCIvKipcbiAqIF9idG4uc2Nzc1xuICpcbiAqIEF1dGhvcjogTWFyaWFuIEZyaWVkbWFublxuICpcbiAqIFVzYWdlOlxuICogPGEgY2xhc3M9XCJidG4gW2J0bi0tc2Vjb25kYXJ5XVwiIGhyZWY9XCIjXCI+YnRuPC9hPlxuICogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJidG5cIj5cbiAqIDxidXR0b24gY2xhc3M9XCJidG5cIj5idG48L2J1dHRvbj5cbiAqL1xuXG4lYnRuIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiBub25lO1xuICBsaW5lLWhlaWdodDogJGJhc2VMaW5lSGVpZ2h0KjI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAvKiBDb3NtZXRpY3MgKi9cbiAgcGFkZGluZzogMGVtICRiYXNlVW5pdDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcignbGluaycpO1xuICAmOmhvdmVye1xuICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKCdob3ZlcicpO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxufVxuXG4lYnRuLS1yb3VuZCB7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXJSYWRpdXM7XG59XG5cbiVidG4tLXBpbGwge1xuICBib3JkZXItcmFkaXVzOiA0NGVtO1xufVxuXG4lYnRuLS1mdWxsIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi8qIEJ1dHRvbiBkaXNndWlzZWQgYXMgYSBsaW5rLiAqL1xuXG4lYnRuLS1saW5rIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiBjb2xvcignbGluaycpO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBsaW5lLWhlaWdodDogMTtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6IGNvbG9yKCdsaW5rJyk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgfVxufVxuQGlmICRhZGRDc3MgYW5kICRidXR0b25PYmplY3Qge1xuICAuYnRuIHtAZXh0ZW5kICVidG59O1xuICAuYnRuLS1yb3VuZCB7QGV4dGVuZCAlYnRuLS1yb3VuZH07XG4gIC5idG4tLXBpbGwge0BleHRlbmQgJWJ0bi0tcGlsbH07XG4gIC5idG4tLWZ1bGwge0BleHRlbmQgJWJ0bi0tZnVsbH07XG4gIC5idG4tLWxpbmsge0BleHRlbmQgJWJ0bi0tbGlua307XG59Ly9AaWZcbiIsIlxuLyoqXG4gKiBfY29uc3RyYWluLnNjc3NcbiAqXG4gKiBBdXRob3I6IE1hcml1cyBTY2hlZWxcbiAqXG4gKi9cblxuJWNvbnN0cmFpbiB7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG5AZWFjaCAkaywkYyBpbiAkY29uc3RyYWluIHtcbiAgJWNvbnN0cmFpbi0tI3ska30ge1xuICAgIEBpbmNsdWRlIHB4LXRvLXJlbShtYXgtd2lkdGgsICRjKTtcbiAgfVxufVxuQGlmICRhZGRDc3MgYW5kICRjb25zdHJhaW5PYmplY3Qge1xuICAuY29uc3RyYWluIHtcbiAgICBAZXh0ZW5kICVjb25zdHJhaW47XG4gIH1cbiAgQGVhY2ggJGssJGMgaW4gJGNvbnN0cmFpbiB7XG4gICAgLmNvbnN0cmFpbi0tI3ska30ge1xuICAgICAgQGV4dGVuZCAlY29uc3RyYWluLS0jeyRrfTtcbiAgICB9XG4gIH1cbn0gLy8gZW5kaWZcbiIsIi8qKlxuICogX25hdi5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogc291cmNlOiBOYXYgYWJzdHJhY3Rpb24gZnJvbSBjc3N3aXphcmRyeS5jb20vMjAxMS8wOS90aGUtbmF2LWFic3RyYWN0aW9uXG4gKlxuICogQ2FuIGJlIHVzZWQgb24gYW4gYG9sYCBvciBgdWxgIGFuZCBkaXNwbGF5cyB0aGUgbGlzdCBpdGVtcyBob3Jpem9udGFsbHkuXG4gKiBFeHRlbmQgaXQgd2l0aCB0aGUgZm9sbG93aW5nIHN1YmNsYXNzZXM6XG4gKlxuICogLSBuYXYtLXN0YWNrZWQgICAgLy8gZGlzcGxheXMgdGhlIGxpc3QgaXRlbXMgdmVydGljYWxseVxuICogLSBuYXYtLWJhbm5lciAgICAgLy8gY2VudHJlcyB0aGUgbGlzdFxuICogLSBuYXYtLWJsb2NrICAgICAgLy8gZXhwYW5kcyBsaXN0IGl0ZW1zIGNsaWNrYWJsZSBhcmVhc1xuICogLSBuYXYtLWZpdCAgICAgICAgLy8gZm9yY2VzIHRoZSBsaXN0IHRvIG9jY3VweSB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgcGFyZW50XG4gKiAtIG5hdi0ta2V5d29yZHMgICAvLyBkaXNwbGF5IGFzIGEgbGlzdCBvZiBrZXl3b3Jkc1xuICogLSBuYXYtLWJyZWFkY3J1bWIgLy8gZGlzcGxheSBhcyBicmVhZGNydW1ic1xuICogLSBuYXYtLXBhcmFsbGVsICAgLy8gZGlzcGxheSBuYXYgaXRlbXMgd2l0aCBwYXJhbGxlbCBzZXBhcmF0b3JcbiAqXG4gKiBNYXJrdXA6XG4gKlxuICogPHVsIGNsYXNzPVwibmF2XCI+XG4gKiAgIDxsaT48YSBocmVmPSM+SG9tZTwvYT48L2xpPlxuICogICA8bGk+PGEgaHJlZj0jPkFib3V0PC9hPjwvbGk+XG4gKiAgIDxsaT48YSBocmVmPSM+UG9ydGZvbGlvPC9hPjwvbGk+XG4gKiAgIDxsaT48YSBocmVmPSM+Q29udGFjdDwvYT48L2xpPlxuICogPC91bD5cbiAqL1xuXG4lbmF2IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbiAgQGluY2x1ZGUgcHgtdG8tcmVtKG1hcmdpbiwgMCAwICRiYXNlVW5pdCAwKTtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gID4gbGkge1xuICAgICYsXG4gICAgPiBhIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAnbmF2LXN0YWNrZWQnIGRpc3BsYXlzIHRoZSBsaXN0IGl0ZW1zIHZlcnRpY2FsbHlcbiAqL1xuXG4lbmF2LS1zdGFja2VkIHtcbiAgPiBsaSB7XG4gICAgZGlzcGxheTogbGlzdC1pdGVtO1xuICAgID4gYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAnbmF2LWJhbm5lcicgY2VudHJlcyB0aGUgbGlzdFxuICovXG5cbiVuYXYtLWJhbm5lciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyoqXG4gKiAnbmF2LS1ibG9jaycgZXhwYW5kcyBsaXN0IGl0ZW1zIGNsaWNrYWJsZSBhcmVhcyB3aXRoIHBhZGRpbmdcbiAqL1xuXG4lbmF2LS1ibG9jayB7XG4gIC8vbGluZS1oZWlnaHQ6MTtcbiAgLyogcmVtb3ZlcyB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlICovXG4gIGxldHRlci1zcGFjaW5nOiAtMC4zMWVtO1xuICB3b3JkLXNwYWNpbmc6IC0wLjQzZW07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gID4gbGkge1xuICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gICAgd29yZC1zcGFjaW5nOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgID4gYSB7XG4gICAgICBwYWRkaW5nOiAuNzVlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAnbmF2LS1maXQnIGZvcmNlcyB0aGUgbGlzdCB0byBvY2N1cHkgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudFxuICovXG5cbiVuYXYtLWZpdCB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgPiBsaSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgPiBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqICduYXYtLWtleXdvcmRzJyBkaXNwbGF5IGFzIGEgbGlzdCBvZiBrZXl3b3Jkc1xuICovXG5cbiVuYXYtLWtleXdvcmRzIHtcbiAgPiBsaSB7XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiBcIlxcMDAyQ1wiIFwiXFwwMEEwXCI7XG4gICAgfVxuICAgICY6bGFzdC1jaGlsZDphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqICduYXYtLWJyZWFkY3J1bWJzJyBkaXNwbGF5IGFzIGJyZWFkY3J1bWJzXG4gKi9cblxuJW5hdi0tYnJlYWRjcnVtYnMge1xuICA+IGxpIHtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFwyN0U5XCIgXCJcXDAwQTBcIjtcbiAgICB9XG4gICAgJjpmaXJzdC1jaGlsZDpiZWZvcmV7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqICduYXYtLXBhcmFsbGVsJyBkaXNwbGF5IHdpdGggcGFyYWxsZWwgc2VwYXJhdG9yXG4gKi9cblxuJW5hdi0tcGFyYWxsZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgPiBsaSB7XG4gICAgQGluY2x1ZGUgcHgtdG8tcmVtKHBhZGRpbmctbGVmdCwgY2FsYygkYmFzZVVuaXQvNCkpO1xuXG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcXDAwN0NcIjtcbiAgICAgIEBpbmNsdWRlIHB4LXRvLXJlbShtYXJnaW4tcmlnaHQsIGNhbGMoJGJhc2VVbml0LzQpKTtcbiAgICB9XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbkBpZiAkYWRkQ3NzIGFuZCAkbmF2T2JqZWN0IHtcbiAgLm5hdiB7QGV4dGVuZCAlbmF2O31cbiAgLm5hdi0tc3RhY2tlZCB7QGV4dGVuZCAlbmF2LS1zdGFja2VkO31cbiAgLm5hdi0tYmFubmVyIHtAZXh0ZW5kICVuYXYtLWJhbm5lcjt9XG4gIC5uYXYtLWJsb2NrIHtAZXh0ZW5kICVuYXYtLWJsb2NrO31cbiAgLm5hdi0tZml0IHtAZXh0ZW5kICVuYXYtLWZpdDt9XG4gIC5uYXYtLWtleXdvcmRzIHtAZXh0ZW5kICVuYXYtLWtleXdvcmRzO31cbiAgLm5hdi0tYnJlYWRjcnVtYnMge0BleHRlbmQgJW5hdi0tYnJlYWRjcnVtYnM7fVxuICAubmF2LS1wYXJhbGxlbCB7QGV4dGVuZCAlbmF2LS1wYXJhbGxlbDt9XG59Ly9AaWZcbiIsIlxuLyoqXG4gKiBfYm94LnNjc3NcbiAqXG4gKiBtb2RpZmllZCB2ZXJzaW9uIG9mOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ludWl0Y3NzL29iamVjdHMuYm94L2Jsb2IvbWFzdGVyL19vYmplY3RzLmJveC5zY3NzXG4gKlxuICovXG5cbiVib3gge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIEBpbmNsdWRlIHB4LXRvLXJlbShwYWRkaW5nLCBjYWxjKCRiYXNlVW5pdC8yKSk7XG5cbiAgPiAqOmxhc3QtY2hpbGQsXG4gID4gKjpsYXN0LWNoaWxkID4gKjpsYXN0LWNoaWxkLFxuICA+ICo6bGFzdC1jaGlsZCA+ICo6bGFzdC1jaGlsZCA+ICo6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4lYm94LS1zbWFsbCB7XG4gIEBpbmNsdWRlIHB4LXRvLXJlbShwYWRkaW5nLCBjYWxjKCRiYXNlVW5pdC80KSk7XG59XG5cbiVib3gtLWxhcmdlIHtcbiAgQGluY2x1ZGUgcHgtdG8tcmVtKHBhZGRpbmcsICRiYXNlVW5pdCk7XG59XG5cbkBpZiAkYWRkQ3NzIGFuZCAkYm94T2JqZWN0IHtcbiAgLmJveCB7QGV4dGVuZCAlYm94O31cbiAgLmJveC0tc21hbGwge0BleHRlbmQgJWJveC0tc21hbGw7fVxuICAuYm94LS1sYXJnZSB7QGV4dGVuZCAlYm94LS1sYXJnZTt9XG59Ly9AaWYgJGJveE9iamVjdFxuIiwiXG4vKipcbiAqIF9tZWRpYS5zY3NzXG4gKlxuICogZGlzcGxheXMgaW1hZ2UgYW5kIHRleHQgc2lkZSBieSBzaWRlXG4gKlxuICogRXhhbXBsZSBtYXJrdXA6XG4gKlxuICAgIDxkaXYgY2xhc3M9XCJtZWRpYSBtZWRpYS0tc21hbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYV9faW1nXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWVkaWFfX2JvZHlcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAqXG4gKiB1c2UgdGhlIGAubWVkaWEtLXJldmAgbW9kaWZpZXIgdG8gcmV2ZXJzZSB0aGUgdGhlIGltYWdlIGxvY2F0aW9uIGFuZCBwdXQgaXQgdG8gdGhlIHJpZ2h0XG4gKiB1c2UgdGhlIGAubWVkaWEtLXNtYWxsYCBtb2RpZmllciwgdG8gZGVjcmVhc2UgdGhlIGd1dHRlciB3aWR0aCBiZXR3ZWVuIGltYWdlIGFuZCBjb250ZW50XG4gKlxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gaGF2ZSBhIGxvb2sgYXQ6XG4gKiBzdHViYm9ybmVsbGEub3JnL2NvbnRlbnQvMjAxMC8wNi8yNS90aGUtbWVkaWEtb2JqZWN0LXNhdmVzLWh1bmRyZWRzLW9mLWxpbmVzLW9mLWNvZGVcbiAqXG4gKi9cblxuJW1lZGlhIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIEBlYWNoICRrZXksJGJyZWFrIGluICRicmVha3Mge1xuICAgICYtLSN7JGtleX17XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgQGluY2x1ZGUgbWVkaWEoJGJyZWFrKXtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuJW1lZGlhX19pbWcge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIEBpbmNsdWRlIHB4LXRvLXJlbShtYXJnaW4tcmlnaHQsICRiYXNlVW5pdCk7XG4gIC5tZWRpYV9fYm9keSArICZ7XG4gICAgQGluY2x1ZGUgcHgtdG8tcmVtKG1hcmdpbi1sZWZ0LCAkYmFzZVVuaXQpO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuICBAZWFjaCAka2V5LCRicmVhayBpbiAkYnJlYWtzIHtcbiAgICAubWVkaWEtLSN7JGtleX0gJiB7XG4gICAgICBAaW5jbHVkZSBtZWRpYShtYXgtd2lkdGggJGJyZWFrIC0gMSl7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cbiAgPiBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbiVtZWRpYV9fYm9keSB7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5cbiVtZWRpYS0tc21hbGwge1xuICAubWVkaWFfX2ltZyB7XG4gICAgQGluY2x1ZGUgcHgtdG8tcmVtKG1hcmdpbi1yaWdodCwgY2FsYygkYmFzZVVuaXQvMikpO1xuICB9XG59XG4lbWVkaWEtLWJpZyB7XG4gIC5tZWRpYV9faW1nIHtcbiAgICBAaW5jbHVkZSBweC10by1yZW0obWFyZ2luLXJpZ2h0LCAkYmFzZVVuaXQqMik7XG4gIH1cbn1cbkBpZiAkYWRkQ3NzIGFuZCAkbWVkaWFPYmplY3Qge1xuICAubWVkaWEge0BleHRlbmQgJW1lZGlhO31cbiAgQGVhY2ggJGtleSwkYnJlYWsgaW4gJGJyZWFrcyB7XG4gICAgLm1lZGlhLS0jeyRrZXl9e1xuICAgICAgQGV4dGVuZCAlbWVkaWEtLSN7JGtleX07XG4gICAgfVxuICB9XG4gIC5tZWRpYV9faW1nIHtAZXh0ZW5kICVtZWRpYV9faW1nO31cbiAgLm1lZGlhX19ib2R5IHtAZXh0ZW5kICVtZWRpYV9fYm9keTt9XG4gIC5tZWRpYS0tc21hbGwge0BleHRlbmQgJW1lZGlhLS1zbWFsbDt9XG4gIC5tZWRpYS0tYmlnIHtAZXh0ZW5kICVtZWRpYS0tYmlnO31cbn1cbiIsIlxuLyoqXG4gKiBfYmFyZS1saXN0LnNjc3NcbiAqXG4gKi9cblxuJWJhcmUtbGlzdCB7XG4gIG1hcmdpbjogIDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbkBpZiAkYWRkQ3NzIGFuZCAkYmFyZUxpc3RPYmplY3Qge1xuICAuYmFyZS1saXN0IHtcbiAgICBAZXh0ZW5kICViYXJlLWxpc3Q7XG4gIH1cbn1cbiIsIi8qKlxuICogX3VpLWxpc3Quc2Nzc1xuICpcbiAqIGJhc2VkIG9uIEhhcnJ5IFJvYmVydHMgdWktbGlzdCBvYmplY3Q6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vaW51aXRjc3Mvb2JqZWN0cy51aS1saXN0L2Jsb2IvbWFzdGVyL19vYmplY3RzLnVpLWxpc3Quc2Nzc1xuICpcbiAqIGNyZWF0ZXMgYmxvY2t5IGl0ZW1zLCBjYW4gYmUgdXNlZCB3aXRoIGxpc3RzIG9yIHRoZSBjb3JyZXNwb25kaW5nIG1hcmt1cDpcbiAqXG4gKiA8ZGl2IGNsYXNzPVwidWktbGlzdFwiPlxuICogIDxkaXYgY2xhc3M9XCJ1aS1saXN0X19pdGVtXCI+PC9kaXY+XG4gKiAgPGRpdiBjbGFzcz1cInVpLWxpc3RfX2l0ZW1cIj48L2Rpdj5cbiAqICA8ZGl2IGNsYXNzPVwidWktbGlzdF9faXRlbVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKlxuICogb3I6XG4gKlxuICogPHVsIGNsYXNzPVwidWktbGlzdCB1aS1saXN0LS1zbWFsbFwiPlxuICogIDxsaT48L2xpPlxuICogIDxsaT48L2xpPlxuICogIDxsaT48L2xpPlxuICogPC91bD5cbiAqXG4gKiBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHdpdGggLS1zZXBhcmF0b3IgYW5kIC0tYm9yZGVyLCB3aGVyZSAtLXNlcGFyYXRvclxuICogYWRkcyBib3JkZXJzIHRvIHRoZSBsaXN0IGVsZW1lbnQgYW5kIC0tYm9yZGVyIHRvIHRoZSBsaXN0IGl0c2VsZlxuICpcbiAqIGNvbWVzIHdpdGggZGlmZmVyZW50IHNpemUgbW9kaWZpZXJzXG4gKlxuICovXG5cbiV1aS1saXN0IHtcbiAgbWFyZ2luOiAgMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcblxuICA+IGxpIHtcbiAgICBAZXh0ZW5kICV1aS1saXN0X19pdGVtO1xuICB9XG59XG5cbiAgJXVpLWxpc3RfX2l0ZW0ge1xuICAgIEBpbmNsdWRlIHB4LXRvLXJlbShwYWRkaW5nLCBjYWxjKCRiYXNlVW5pdC8yKSk7XG4gIH1cblxuJXVpLWxpc3QtLXNlcGFyYXRvcixcbiAgJXVpLWxpc3RfX2l0ZW0ge1xuICAgIGJvcmRlcjogMCBzb2xpZCBjb2xvcignYm9yZGVyJyk7XG4gIH1cblxuJXVpLWxpc3QtLXNlcGFyYXRvciB7XG4gID4gbGksXG4gID4gLnVpLWxpc3RfX2l0ZW0ge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgfVxuXG4gID4gbGk6Zmlyc3QtY2hpbGQsXG4gID4gLnVpLWxpc3RfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gIH1cbn1cblxuXG4ldWktbGlzdC0tYm9yZGVyIHtcbiAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG59XG5cbi8qKlxuICogTW9kaWZpZXJzIGZvciBzaXppbmcgdGhlIGxpc3RcbiAqL1xuJXVpLWxpc3QtLXNtYWxsIHtcbiAgPiAudWktbGlzdF9faXRlbSB7XG4gICAgQGluY2x1ZGUgcHgtdG8tcmVtKHBhZGRpbmcsIGNhbGMoJGJhc2VVbml0LzQpKTtcbiAgfVxufVxuXG4ldWktbGlzdC0tbGFyZ2Uge1xuICA+IC51aS1saXN0X19pdGVtIHtcbiAgICBAaW5jbHVkZSBweC10by1yZW0ocGFkZGluZywgJGJhc2VVbml0KTtcbiAgfVxufVxuQGlmICRhZGRDc3MgYW5kICR1aUxpc3RPYmplY3Qge1xuICAudWktbGlzdCB7QGV4dGVuZCAldWktbGlzdDt9XG4gIC51aS1saXN0X19pdGVtIHtAZXh0ZW5kICV1aS1saXN0X19pdGVtO31cbiAgLnVpLWxpc3QtLXNlcGFyYXRvciB7QGV4dGVuZCAldWktbGlzdC0tc2VwYXJhdG9yO31cbiAgLnVpLWxpc3QtLWJvcmRlcntAZXh0ZW5kICV1aS1saXN0LS1ib3JkZXI7fVxuICAudWktbGlzdC0tc21hbGx7QGV4dGVuZCAldWktbGlzdC0tc21hbGw7fVxuICAudWktbGlzdC0tbGFyZ2V7QGV4dGVuZCAldWktbGlzdC0tbGFyZ2U7fVxufVxuIiwiXG4vKipcbiAqIF9hcnJvdy5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8ZGl2IGNsYXNzPVwiYXJyb3cgYXJyb3ctLXRvcC1sZWZ0XCI+XG4gKiAgLi4uXG4gKiA8L2Rpdj5cbiAqXG4gKi9cblxuJWFycm93IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmOmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgfVxufVxuXG4vKipcbiAqIEFycm93IFRvcFxuICovXG5cbiVhcnJvdy0tdG9wLFxuJWFycm93LS10b3AtbGVmdCxcbiVhcnJvdy0tdG9wLXJpZ2h0IHtcbiAgJjpiZWZvcmUge1xuICAgIGJvcmRlci1sZWZ0OiAkYXJyb3dTaXplIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yaWdodDogJGFycm93U2l6ZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItYm90dG9tOiAkYXJyb3dTaXplIHNvbGlkICNmZmY7XG4gICAgdG9wOiAtJGFycm93U2l6ZTtcbiAgfVxuICBAZWFjaCAka2V5LCRjb2xvciBpbiAkY29sb3Jze1xuICAgICYuYXJyb3ctLWNvbG9yLSN7JGtleX0ge1xuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiVhcnJvdy0tdG9wIHtcbiAgJjpiZWZvcmUge1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLSRhcnJvd1NpemU7XG4gIH1cbn1cblxuJWFycm93LS10b3AtbGVmdCB7XG4gICY6YmVmb3JlIHtcbiAgICBsZWZ0OiAkYmFzZVVuaXQ7XG4gICAgbGVmdDogdG9SZW0oJGJhc2VVbml0KTtcbiAgfVxufVxuXG4lYXJyb3ctLXRvcC1yaWdodCB7XG4gICY6YmVmb3JlIHtcbiAgICByaWdodDogJGJhc2VVbml0O1xuICAgIHJpZ2h0OiB0b1JlbSgkYmFzZVVuaXQpO1xuICB9XG59XG5cbi8qKlxuICogQXJyb3cgQm90dG9tXG4gKi9cblxuJWFycm93LS1ib3R0b20sXG4lYXJyb3ctLWJvdHRvbS1sZWZ0LFxuJWFycm93LS1ib3R0b20tcmlnaHQge1xuICAmOmJlZm9yZSB7XG4gICAgYm9yZGVyLWxlZnQ6ICRhcnJvd1NpemUgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYXJyb3dTaXplIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci10b3A6ICRhcnJvd1NpemUgc29saWQgI2ZmZjtcbiAgICBib3R0b206IC0kYXJyb3dTaXplO1xuICB9XG4gIEBlYWNoICRrZXksJGNvbG9yIGluICRjb2xvcnN7XG4gICAgJi5hcnJvdy0tY29sb3ItI3ska2V5fSB7XG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuJWFycm93LS1ib3R0b20ge1xuICAmOmJlZm9yZSB7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtJGFycm93U2l6ZTtcbiAgfVxufVxuXG4lYXJyb3ctLWJvdHRvbS1sZWZ0IHtcbiAgJjpiZWZvcmUge1xuICAgIGxlZnQ6ICRiYXNlVW5pdDtcbiAgICBsZWZ0OiB0b1JlbSgkYmFzZVVuaXQpO1xuICB9XG59XG5cbiVhcnJvdy0tYm90dG9tLXJpZ2h0IHtcbiAgJjpiZWZvcmUge1xuICAgIHJpZ2h0OiAkYmFzZVVuaXQ7XG4gICAgcmlnaHQ6IHRvUmVtKCRiYXNlVW5pdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBcnJvdyBMZWZ0XG4gKi9cblxuJWFycm93LS1sZWZ0LFxuJWFycm93LS1sZWZ0LXRvcCxcbiVhcnJvdy0tbGVmdC1ib3R0b20ge1xuICAmOmJlZm9yZSB7XG4gICAgYm9yZGVyLXRvcDogJGFycm93U2l6ZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItYm90dG9tOiAkYXJyb3dTaXplIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yaWdodDogJGFycm93U2l6ZSBzb2xpZCAjZmZmO1xuICAgIGxlZnQ6IC0kYXJyb3dTaXplO1xuICB9XG4gIEBlYWNoICRrZXksJGNvbG9yIGluICRjb2xvcnN7XG4gICAgJi5hcnJvdy0tY29sb3ItI3ska2V5fSB7XG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogJGNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lYXJyb3ctLWxlZnQge1xuICAmOmJlZm9yZSB7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luLXRvcDogLSRhcnJvd1NpemU7XG4gIH1cbn1cblxuJWFycm93LS1sZWZ0LXRvcCB7XG4gICY6YmVmb3JlIHtcbiAgICB0b3A6ICRiYXNlVW5pdDtcbiAgICB0b3A6IHRvUmVtKCRiYXNlVW5pdCk7XG4gIH1cbn1cblxuJWFycm93LS1sZWZ0LWJvdHRvbSB7XG4gICY6YmVmb3JlIHtcbiAgICBib3R0b206ICRiYXNlVW5pdDtcbiAgICBib3R0b206IHRvUmVtKCRiYXNlVW5pdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBcnJvdyBSaWdodFxuICovXG5cbiVhcnJvdy0tcmlnaHQsXG4lYXJyb3ctLXJpZ2h0LXRvcCxcbiVhcnJvdy0tcmlnaHQtYm90dG9tIHtcbiAgJjpiZWZvcmUge1xuICAgIGJvcmRlci10b3A6ICRhcnJvd1NpemUgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWJvdHRvbTogJGFycm93U2l6ZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItbGVmdDogJGFycm93U2l6ZSBzb2xpZCAjZmZmO1xuICAgIHJpZ2h0OiAtJGFycm93U2l6ZTtcbiAgfVxuICBAZWFjaCAka2V5LCRjb2xvciBpbiAkY29sb3Jze1xuICAgICYuYXJyb3ctLWNvbG9yLSN7JGtleX0ge1xuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogJGNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lYXJyb3ctLXJpZ2h0IHtcbiAgJjpiZWZvcmUge1xuICAgIHRvcDogNTAlO1xuICAgIG1hcmdpbi10b3A6IC0kYXJyb3dTaXplO1xuICB9XG59XG5cbiVhcnJvdy0tcmlnaHQtdG9wIHtcbiAgJjpiZWZvcmUge1xuICAgIHRvcDogJGJhc2VVbml0O1xuICAgIHRvcDogdG9SZW0oJGJhc2VVbml0KTtcbiAgfVxufVxuXG4lYXJyb3ctLXJpZ2h0LWJvdHRvbSB7XG4gICY6YmVmb3JlIHtcbiAgICBib3R0b206ICRiYXNlVW5pdDtcbiAgICBib3R0b206IHRvUmVtKCRiYXNlVW5pdCk7XG4gIH1cbn1cbkBpZiAkYWRkQ3NzIGFuZCAkYXJyb3dPYmplY3Qge1xuICAuYXJyb3cge0BleHRlbmQgJWFycm93O31cblxuICAuYXJyb3ctLXRvcCB7QGV4dGVuZCAlYXJyb3ctLXRvcDt9XG4gIC5hcnJvdy0tdG9wLWxlZnQge0BleHRlbmQgJWFycm93LS10b3AtbGVmdDt9XG4gIC5hcnJvdy0tdG9wLXJpZ2h0IHtAZXh0ZW5kICVhcnJvdy0tdG9wLXJpZ2h0O31cblxuICAuYXJyb3ctLWJvdHRvbSB7QGV4dGVuZCAlYXJyb3ctLWJvdHRvbTt9XG4gIC5hcnJvdy0tYm90dG9tLWxlZnQge0BleHRlbmQgJWFycm93LS1ib3R0b20tbGVmdDt9XG4gIC5hcnJvdy0tYm90dG9tLXJpZ2h0IHtAZXh0ZW5kICVhcnJvdy0tYm90dG9tLXJpZ2h0O31cblxuICAuYXJyb3ctLWxlZnQge0BleHRlbmQgJWFycm93LS1sZWZ0O31cbiAgLmFycm93LS1sZWZ0LXRvcCB7QGV4dGVuZCAlYXJyb3ctLWxlZnQtdG9wO31cbiAgLmFycm93LS1sZWZ0LWJvdHRvbSB7QGV4dGVuZCAlYXJyb3ctLWxlZnQtYm90dG9tO31cblxuICAuYXJyb3ctLXJpZ2h0IHtAZXh0ZW5kICVhcnJvdy0tcmlnaHQ7fVxuICAuYXJyb3ctLXJpZ2h0LXRvcCB7QGV4dGVuZCAlYXJyb3ctLXJpZ2h0LXRvcDt9XG4gIC5hcnJvdy0tcmlnaHQtYm90dG9tIHtAZXh0ZW5kICVhcnJvdy0tcmlnaHQtYm90dG9tO31cbn0vL0BpZlxuIiwiLyoqXG4gKiBfaWNvbi5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8aSBjbGFzcz1cImljb24gW2ljb24tLW5hdi10b2dnbGVdXCI+PC9pPlxuICpcbiAqL1xuXG4vKipcbiAqIEFsbGUgaWNvbnMgd2VyZGVuIGFscyAuc3ZnIGV4cG9ydGllcnQgdW50ZXJcbiAqIC9hc3NldHMvaW1hZ2VzL2ljb25zIGFiZ2VsZWd0IHVuZCB2b24gZ3J1bnQtc3ZnbWluXG4gKiB1bmQgZ3J1bnQtZ3J1bnRpY29uIHdlaXRlcnZlcmFyYmVpdGV0LlxuICpcbiAqIE91dHB1dCB1bnRlciAvYXNzZXRzL2ltYWdlcy9pY29ucy9ncnVudGljb25cbiAqL1xuXG4laWNvbiB7XG4gIHdpZHRoOiAkYmFzZVVuaXQ7XG4gIGhlaWdodDogJGJhc2VVbml0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbkBpZiAkYWRkQ3NzIHtcbiAgLmljb24ge1xuICAgIEBleHRlbmQgJWljb247XG4gIH1cbn1cblxuLyoqXG4gKiBCZWlzcGllbCBmw7xyIGVpbiBJY29uXG4gKlxuICogLmljb24tLW1vYmlsZS1uYXYtdG9nZ2xlIHtcbiAqICAgQGluY2x1ZGUgYmFja2dyb3VuZC1zdmcoXCIuLi9pbWFnZXMvbmF2LXRvZ2dsZVwiKTtcbiAqIH1cbiAqL1xuIiwiQG1peGluIHNwYWNlKCRtdWx0aXBsaWVyOiAxLCAkbmFtZTogJycsICRzY29wZTogJycpIHtcbiAgQGlmICRuYW1lID09ICdkZWZhdWx0JyB7JG5hbWU6ICcnfVxuXG4gIEBpZiAkc2NvcGUgIT0gJycgeyAkc2NvcGU6IC0jeyRzY29wZX07IH1cbiAgQGlmICRuYW1lICAhPSAnJyB7ICRuYW1lOiAtI3skbmFtZX07IH1cblxuICAlc3BhY2UjeyRzY29wZX0tLXRvcCN7JG5hbWV9IHtcbiAgICBtYXJnaW4tdG9wOiAkYmFzZVVuaXQgKiAkbXVsdGlwbGllciAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi10b3A6IHRvUmVtKCRiYXNlVW5pdCAqICRtdWx0aXBsaWVyKSAhaW1wb3J0YW50O1xuICB9XG5cbiAgJXNwYWNlI3skc2NvcGV9LS1sZWZ0I3skbmFtZX0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkYmFzZVVuaXQgKiAkbXVsdGlwbGllciAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1sZWZ0OiB0b1JlbSgkYmFzZVVuaXQgKiAkbXVsdGlwbGllcikgIWltcG9ydGFudDtcbiAgfVxuXG4gICVzcGFjZSN7JHNjb3BlfS0tcmlnaHQjeyRuYW1lfSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkYmFzZVVuaXQgKiAkbXVsdGlwbGllciAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1yaWdodDogdG9SZW0oJGJhc2VVbml0ICogJG11bHRpcGxpZXIpICFpbXBvcnRhbnQ7XG4gIH1cblxuICAlc3BhY2UjeyRzY29wZX0tLWJvdHRvbSN7JG5hbWV9IHtcbiAgICBtYXJnaW4tYm90dG9tOiAkYmFzZVVuaXQgKiAkbXVsdGlwbGllciAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1ib3R0b206IHRvUmVtKCRiYXNlVW5pdCAqICRtdWx0aXBsaWVyKSAhaW1wb3J0YW50O1xuICB9XG5cbiAgQGlmICRhZGRDc3MgYW5kICRzcGFjaW5nSGVscGVyIHtcbiAgICAuc3BhY2UjeyRzY29wZX0tLXRvcCN7JG5hbWV9IHtcbiAgICAgIEBleHRlbmQgJXNwYWNlI3skc2NvcGV9LS10b3AjeyRuYW1lfTtcbiAgICB9XG4gICAgLnNwYWNlI3skc2NvcGV9LS1sZWZ0I3skbmFtZX0ge1xuICAgICAgQGV4dGVuZCAlc3BhY2UjeyRzY29wZX0tLWxlZnQjeyRuYW1lfTtcbiAgICB9XG4gICAgLnNwYWNlI3skc2NvcGV9LS1yaWdodCN7JG5hbWV9IHtcbiAgICAgIEBleHRlbmQgJXNwYWNlI3skc2NvcGV9LS1yaWdodCN7JG5hbWV9O1xuICAgIH1cbiAgICAuc3BhY2UjeyRzY29wZX0tLWJvdHRvbSN7JG5hbWV9IHtcbiAgICAgIEBleHRlbmQgJXNwYWNlI3skc2NvcGV9LS1ib3R0b20jeyRuYW1lfTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBfc3BhY2luZy5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8ZGl2IGNsYXNzPVwic3BhY2UtLXRvcCAgc3BhY2UtdGFiLS10b3AtZG91YmxlXCI+XG4gKiAgIC4uLlxuICogPC9kaXY+XG4gKlxuICovXG5cbi8qKlxuICogQmFzaWMgJiBzcGFjaW5nXG4gKi9cblxuQGVhY2ggJGssJHMgaW4gJHNwYWNlIHtcbiAgQGluY2x1ZGUgc3BhY2UoJHMsJGspO1xufVxuQGVhY2ggJGtleSwkYnJlYWsgaW4gJGJyZWFrcyB7XG4gIEBpbmNsdWRlIG1lZGlhKCRicmVhaykge1xuICAgIEBlYWNoICRrLCRzIGluICRzcGFjZSB7XG4gICAgICBAaW5jbHVkZSBzcGFjZSgkcywkaywka2V5KTtcbiAgICB9XG4gIH1cbn1cbiIsIkBtaXhpbiB3aWR0aHMoJHNjb3BlOiAnJykge1xuICBAaWYgJHNjb3BlICE9ICcnIHsgJHNjb3BlOiAtI3skc2NvcGV9OyB9XG5cbiAgJG1vZGlmaWVyLXNlcGVyYXRvcjogJy0tJztcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTAgICAgICAgICAgeyBtYXgtd2lkdGg6IDAlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IG5vbmU7IC1tcy1mbGV4OiAwJTsgZmxleDogMCU7fVxuXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YxLFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Mm9mMixcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjMsXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn00b2Y0LFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NW9mNSxcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTZvZjYsICAgICAgeyBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiAxMDAlOyBmbGV4OiAxMDAlO31cblxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mMixcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjQsXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0zb2Y2LFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mOCxcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTVvZjEwLFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Nm9mMTIgICAgICB7IG1heC13aWR0aDogNTAlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyAtbXMtZmxleDogNTAlOyBmbGV4OiA1MCU7fVxuXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YzLFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Mm9mNixcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjksXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn00b2YxMiAgICAgIHsgbWF4LXdpZHRoOiAzMy4zMzMzMyUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiAzMy4zMzMzMyU7IGZsZXg6IDMzLjMzMzMzJTt9XG5cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjMsXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn00b2Y2LFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Nm9mOSxcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfThvZjEyICAgICAgeyBtYXgtd2lkdGg6IDY2LjY2NjY2JSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDY2LjY2NjY2JTsgZmxleDogNjYuNjY2NjYlO31cblxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mNCxcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjgsXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0zb2YxMiAgICAgIHsgbWF4LXdpZHRoOiAyNSUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiAyNSU7IGZsZXg6IDI1JTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0zb2Y0LFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Nm9mOCxcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTlvZjEyICAgICAgeyBtYXgtd2lkdGg6IDc1JSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDc1JTsgZmxleDogNzUlO31cblxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mNSxcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjEwICAgICAgeyBtYXgtd2lkdGg6IDIwJSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDIwJTsgZmxleDogMjAlO31cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjUsXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn00b2YxMCAgICAgIHsgbWF4LXdpZHRoOiA0MCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA0MCU7IGZsZXg6IDQwJTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0zb2Y1LFxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Nm9mMTAgICAgICB7IG1heC13aWR0aDogNjAlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyAtbXMtZmxleDogNjAlOyBmbGV4OiA2MCU7fVxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mNSxcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfThvZjEwICAgICAgeyBtYXgtd2lkdGg6IDgwJSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDgwJTsgZmxleDogODAlO31cblxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mNixcbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjEyICAgICAgeyBtYXgtd2lkdGg6IDE2LjY2NjY2JSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDE2LjY2NjY2JTsgZmxleDogMTYuNjY2NjYlO31cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTVvZjYsXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xMG9mMTIgICAgIHsgbWF4LXdpZHRoOiA4My4zMzMzMyUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA4My4zMzMzMyU7IGZsZXg6IDgzLjMzMzMzJTt9XG5cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjggICAgICAgeyBtYXgtd2lkdGg6IDEyLjUlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyAtbXMtZmxleDogMTIuNSU7IGZsZXg6IDEyLjUlO31cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjggICAgICAgeyBtYXgtd2lkdGg6IDM3LjUlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyAtbXMtZmxleDogMzcuNSU7IGZsZXg6IDM3LjUlO31cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTVvZjggICAgICAgeyBtYXgtd2lkdGg6IDYyLjUlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyAtbXMtZmxleDogNjIuNSU7IGZsZXg6IDYyLjUlO31cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTdvZjggICAgICAgeyBtYXgtd2lkdGg6IDg3LjUlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyAtbXMtZmxleDogODcuNSU7IGZsZXg6IDg3LjUlO31cblxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mOSAgICAgICB7IG1heC13aWR0aDogMTEuMTExMTExMSUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiAxMS4xMTExMTExJTsgZmxleDogMTEuMTExMTExMSU7fVxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Mm9mOSAgICAgICB7IG1heC13aWR0aDogMjIuMjIyMjIyMiUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiAyMi4yMjIyMjIyJTsgZmxleDogMjIuMjIyMjIyMiU7fVxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mOSAgICAgICB7IG1heC13aWR0aDogNDQuNDQ0NDQ0NCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA0NC40NDQ0NDQ0JTsgZmxleDogNDQuNDQ0NDQ0NCU7fVxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NW9mOSAgICAgICB7IG1heC13aWR0aDogNTUuNTU1NTU1NSUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA1NS41NTU1NTU1JTsgZmxleDogNTUuNTU1NTU1NSU7fVxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9N29mOSAgICAgICB7IG1heC13aWR0aDogNzcuNzc3Nzc3NyUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA3Ny43Nzc3Nzc3JTsgZmxleDogNzcuNzc3Nzc3NyU7fVxuICAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9OG9mOSAgICAgICB7IG1heC13aWR0aDogODguODg4ODg4OCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA4OC44ODg4ODg4JTsgZmxleDogODguODg4ODg4OCU7fVxuXG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YxMCAgICAgIHsgbWF4LXdpZHRoOiAxMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiAxMCU7IGZsZXg6IDEwJTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0zb2YxMCAgICAgIHsgbWF4LXdpZHRoOiAzMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiAzMCU7IGZsZXg6IDMwJTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn03b2YxMCAgICAgIHsgbWF4LXdpZHRoOiA3MCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA3MCU7IGZsZXg6IDcwJTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn05b2YxMCAgICAgIHsgbWF4LXdpZHRoOiA5MCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2s7IC1tcy1mbGV4OiA5MCU7IGZsZXg6IDkwJTt9XG5cbiAgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjEyICAgICAgeyBtYXgtd2lkdGg6ICA4LjMzMzMzMzMlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrOyAtbXMtZmxleDogOC4zMzMzMzMzJTsgZmxleDogOC4zMzMzMzMzJTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn01b2YxMiAgICAgIHsgbWF4LXdpZHRoOiA0MS42NjY2NjY2JSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDQxLjY2NjY2NjYlOyBmbGV4OiA0MS42NjY2NjY2JTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn03b2YxMiAgICAgIHsgbWF4LXdpZHRoOiA1OC4zMzMzMzMzJSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDU4LjMzMzMzMzMlOyBmbGV4OiA1OC4zMzMzMzMzJTt9XG4gICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xMW9mMTIgICAgIHsgbWF4LXdpZHRoOiA5MS42NjY2NjY2JSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jazsgLW1zLWZsZXg6IDkxLjY2NjY2NjYlOyBmbGV4OiA5MS42NjY2NjY2JTt9XG5cbiAgQGlmICRhZGRDc3MgYW5kICR3aWR0aEhlbHBlciB7XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTAge0BleHRlbmQgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTA7fVxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YxLFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0yb2YyLFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0zb2YzLFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn00b2Y0LFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn01b2Y1LFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn02b2Y2IHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YxO31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mMixcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Mm9mNCxcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9M29mNixcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mOCxcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NW9mMTAsXG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTZvZjEyIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YyO31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mMyxcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Mm9mNixcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9M29mOSxcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mMTIge0BleHRlbmQgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjM7fVxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0yb2YzLFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn00b2Y2LFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn02b2Y5LFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn04b2YxMiB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Mm9mMzt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjQsXG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjgsXG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjEyIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2Y0O31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9M29mNCxcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Nm9mOCxcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9OW9mMTIge0BleHRlbmQgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjQ7fVxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2Y1LFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0yb2YxMCB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mNTt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjUsXG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTRvZjEwIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0yb2Y1O31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9M29mNSxcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9Nm9mMTAge0BleHRlbmQgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjU7fVxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn00b2Y1LFxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn04b2YxMCB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mNTt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjYsXG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTJvZjEyIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2Y2O31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NW9mNixcbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MTBvZjEyIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn01b2Y2O31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mOCB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MW9mODt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjgge0BleHRlbmQgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjg7fVxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn01b2Y4IHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn01b2Y4O31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9N29mOCB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9N29mODt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjkge0BleHRlbmQgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjk7fVxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0yb2Y5IHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0yb2Y5O31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mOSB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9NG9mOTt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTVvZjkge0BleHRlbmQgJXdpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTVvZjk7fVxuICAgIC53aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn03b2Y5IHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn03b2Y5O31cbiAgICAud2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9OG9mOSB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9OG9mOTt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjEwIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YxMDt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTNvZjEwIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0zb2YxMDt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTdvZjEwIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn03b2YxMDt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTlvZjEwIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn05b2YxMDt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTFvZjEyIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn0xb2YxMjt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTVvZjEyIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn01b2YxMjt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTdvZjEyIHtAZXh0ZW5kICV3aWR0aCN7JHNjb3BlfSN7JG1vZGlmaWVyLXNlcGVyYXRvcn03b2YxMjt9XG4gICAgLndpZHRoI3skc2NvcGV9I3skbW9kaWZpZXItc2VwZXJhdG9yfTExb2YxMiB7QGV4dGVuZCAld2lkdGgjeyRzY29wZX0jeyRtb2RpZmllci1zZXBlcmF0b3J9MTFvZjEyO31cbiAgfVxufVxuXG4vKipcbiAqIF93aWR0aC5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogVXNhZ2U6XG4gKiA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICogICA8ZGl2IGNsYXNzPVwiZ3JpZF9faXRlbSAgd2lkdGgtLTFvZjEgIHdpZHRoLXRhYi0tMW9mMyAgd2lkdGgtZGVzay0tMW9mNFwiPlxuICogICAgIC4uLlxuICogICA8L2Rpdj5cbiAqICAgPGRpdiBjbGFzcz1cImdyaWRfX2l0ZW0gIHdpZHRoLS0xb2YxICB3aWR0aC10YWItLTJvZjMgIHdpZHRoLWRlc2stLTNvZjRcIj5cbiAqICAgICAuLi5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqXG4gKi9cblxuQGluY2x1ZGUgd2lkdGhzKCk7XG5cbkBlYWNoICRrZXksJGJyZWFrIGluICRicmVha3Mge1xuICBAaW5jbHVkZSBtZWRpYSgkYnJlYWspIHtcbiAgICBAaW5jbHVkZSB3aWR0aHMoJGtleSk7XG4gIH1cbn1cbiIsIkBtaXhpbiB0ZXh0KCRzY29wZTogJycpIHtcbiAgQGlmICRzY29wZSAhPSAnJyB7ICRzY29wZTogLSN7JHNjb3BlfTsgfVxuXG4gICV0ZXh0I3skc2NvcGV9LS1sZWZ0ICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4gICV0ZXh0I3skc2NvcGV9LS1yaWdodCAgeyB0ZXh0LWFsaWduOiByaWdodDsgfVxuICAldGV4dCN7JHNjb3BlfS0tY2VudGVyIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gIEBpZiAkYWRkQ3NzIGFuZCAkdHlwb0hlbHBlciB7XG4gICAgLnRleHQjeyRzY29wZX0tLWxlZnQgICB7IEBleHRlbmQgJXRleHQjeyRzY29wZX0tLWxlZnQ7IH1cbiAgICAudGV4dCN7JHNjb3BlfS0tcmlnaHQgIHsgQGV4dGVuZCAldGV4dCN7JHNjb3BlfS0tcmlnaHQ7IH1cbiAgICAudGV4dCN7JHNjb3BlfS0tY2VudGVyIHsgQGV4dGVuZCAldGV4dCN7JHNjb3BlfS0tY2VudGVyOyB9XG4gIH1cbn1cblxuLyoqXG4gKiBfdHlwby5zY3NzXG4gKlxuICogQXV0aG9yOiBNYXJpYW4gRnJpZWRtYW5uXG4gKlxuICogQWx0IFRleHQgU3R5bGVzLlxuICpcbiAqICMjIGFsaWdubWVudFxuICogLSB0ZXh0LS1sZWZ0XG4gKiAtIHRleHQtLXJpZ2h0XG4gKiAtIHRleHQtLWNlbnRlclxuICpcbiAqICMjIHV0aWxpdGllc1xuICogLSB0ZXh0LS1zZWNvbmRhcnlcbiAqIC0gdGV4dC0taW5oZXJpdC1jb2xvclxuICogLSB0ZXh0LS1uby13cmFwXG4gKiAtIHRleHQtLWxhcmdlXG4gKlxuICogVXNhZ2U6XG4gKiA8ZGl2IGNsYXNzPVwidGV4dC0tbGFyZ2VcIj5cbiAqICAgPGgxPkxvcmVtIElwc3VtPC9oMT5cbiAqICAgPHA+TG9yZW0gaXBzdW08L3A+XG4gKiA8L2Rpdj5cbiAqXG4gKi9cblxuLyoqXG4gKiBQcmV2ZW50IHRleHQgZnJvbSB3cmFwcGluZ1xuICovXG4ldGV4dC0tbm8td3JhcCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IHRleHQgaW4gc2Vjb25kYXJ5IGZvbnRcbiAqL1xuJXRleHQtLXNlY29uZGFyeSB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udFNlY29uZGFyeSAhaW1wb3J0YW50O1xufVxuXG4vKipcbiAqIERpc3BsYXkgbGFyZ2VyIHRleHRcbiAqL1xuJXRleHQtLWxhcmdlIHtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRoZWFkaW5nU2l6ZTQsIGZhbHNlKTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cbkBpZiAkYWRkQ3NzIGFuZCAkdHlwb0hlbHBlciB7XG4gIC50ZXh0LS1uby13cmFwIHtcbiAgICBAZXh0ZW5kICV0ZXh0LS1uby13cmFwO1xuICB9XG4gIC50ZXh0LS1zZWNvbmRhcnkge1xuICAgIEBleHRlbmQgJXRleHQtLXNlY29uZGFyeTtcbiAgfVxuICAudGV4dC0tbGFyZ2Uge1xuICAgIEBleHRlbmQgJXRleHQtLWxhcmdlO1xuICB9XG59XG5cbkBpbmNsdWRlIHRleHQoKTtcbkBlYWNoICRrZXksJGJyZWFrIGluICRicmVha3Mge1xuICBAaW5jbHVkZSBtZWRpYSgkYnJlYWspIHtcbiAgICBAaW5jbHVkZSB0ZXh0KCRrZXkpO1xuICB9XG59XG4iLCJAbWl4aW4gY29sb3JDbGFzcygkc2NvcGU6ICcnKSB7XG4gIEBpZiAkc2NvcGUgIT0gJycgeyAkc2NvcGU6IC0jeyRzY29wZX07IH1cbiAgQGVhY2ggJGtleSwkY29sb3IgaW4gJGNvbG9yc3tcbiAgICAlYyN7JHNjb3BlfS0tI3ska2V5fSB7XG4gICAgICBjb2xvcjogJGNvbG9yO1xuICAgIH1cbiAgICAlYmcjeyRzY29wZX0tLSN7JGtleX0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuICAgIH1cbiAgICBAaWYgJGFkZENzcyBhbmQgJGNvbG9ySGVscGVyIHtcbiAgICAgIC5jI3skc2NvcGV9LS0jeyRrZXl9IHtcbiAgICAgICAgQGV4dGVuZCAlYyN7JHNjb3BlfS0tI3ska2V5fTtcbiAgICAgIH1cbiAgICAgIC5iZyN7JHNjb3BlfS0tI3ska2V5fSB7XG4gICAgICAgIEBleHRlbmQgJWJnI3skc2NvcGV9LS0jeyRrZXl9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAlYyN7JHNjb3BlfS0taW5oZXJpdCB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbiAgJWJnI3skc2NvcGV9LS1pbmhlcml0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICB9XG4gIEBpZiAkYWRkQ3NzIGFuZCAkY29sb3JIZWxwZXIge1xuICAgIC5jI3skc2NvcGV9LS1pbmhlcml0IHtcbiAgICAgIEBleHRlbmQgJWMjeyRzY29wZX0tLWluaGVyaXQ7XG4gICAgfVxuICAgIC5iZyN7JHNjb3BlfS0taW5oZXJpdCB7XG4gICAgICBAZXh0ZW5kICViZyN7JHNjb3BlfS0taW5oZXJpdDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4qIF9jb2xvci5zY3NzXG4qL1xuXG5AaWYgJGFkZENzcyBhbmQgJGNvbG9ySGVscGVyIHtcbiAgOnJvb3Qge1xuICAgIEBlYWNoICRrZXksJGNvbG9yIGluICRjb2xvcnN7XG4gICAgICAtLSN7JGtleX06ICN7JGNvbG9yfTtcbiAgICB9XG4gIH1cbn1cbkBpbmNsdWRlIGNvbG9yQ2xhc3MoKTtcblxuQGVhY2ggJGtleSwkYnJlYWsgaW4gJGJyZWFrcyB7XG4gIEBpbmNsdWRlIG1lZGlhKCRicmVhaykge1xuICAgIEBpbmNsdWRlIGNvbG9yQ2xhc3MoJGtleSk7XG4gIH1cbn1cblxuIiwiQGltcG9ydCAnYmFzZSc7XG5cbi5oZXJvIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmaWd1cmUge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuICBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMjUwcHg7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgQGluY2x1ZGUgbWVkaWEoYnJlYWsoJ2xhcCcpKXtcbiAgICAgIGhlaWdodDogMzUwcHg7XG4gICAgfVxuICAgIEBpbmNsdWRlIG1lZGlhKGJyZWFrKCdkZXNrLXdpZGUnKSl7XG4gICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgIH1cbiAgfVxufSJdfQ== */

