/*
---
name: .stretch
category: Shared/Helpers
tag:
 - helpers
---

`.stretch` Define an element which stretches to the size of its parent

```html
<div class="rel" style="height: 55px;">
   <div class="stretch styleguide-grid-unit"> I'm stretched to the size of my parent</div>
</div>
```
*/
.stretch {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
/*
---
name: .abs
category: Shared/Helpers
tag:
 - helpers
---

`.abs` Set the element position to absolute
*/
.abs {
  position: absolute;
}
/*
---
name: .rel
category: Shared/Helpers
tag:
 - helpers
---

`.rel` Set the element position to relative
*/
.rel {
  position: relative;
}
/*
---
name: .vcenter
category: Shared/Helpers
tag:
 - helpers
---

`.vcenter` Sets vertical-align to middle
*/
.vcenter {
  vertical-align: middle;
}
/*
---
name: .hcenter
category: Shared/Helpers
tag:
 - helpers
---

`.hcenter` Sets text-align to center
*/
.hcenter {
  text-align: center;
}
/*
---
name: .floatleft
category: Shared/Helpers
tag:
 - helpers
---

`.floatleft` Sets float to left
*/
.floatleft {
  float: left;
}
/*
---
name: .floatright
category: Shared/Helpers
tag:
 - helpers
---

`.floatright` Sets float to right
*/
.floatright {
  float: right;
}
/*
---
name: .hidden
category: Shared/Helpers
tag:
 - helpers
---

`.hidden` Sets display to none.
*/
.hidden {
  display: none;
}
/*
---
name: rem( pixels )
category: Shared/Mixins
template: mixin
tag:
 - mixin
parameters:
 - name: pixels
   description: The pixel value to convert into rem based on the 16px root font-size
   optional: false
---

This less function turns a pixel value into a rem value based on the root font-size set to 16px.

An example usage looks like this:

```less
.example {
	padding: rem( 15px ) rem( 12px )
}
```
*/
/*
---
name: .for( @array, @code )
category: Shared/Mixins
template: mixin
tag:
 - mixin
parameters:
 - name: array
   description: The array of values to loop over
   optional: false
 - name: code
   description: The code that is executed on every value. You can access the index with `@i` and the value with `@value`
   optional: false
---

This mixin allows to execute code over an array

An example usage looks like this:
```less
@colors: #1abc9c, #2ecc71, #3498db, #9b59b6;

.for(@colors, {
    .color-@{i} {
        color: @value;
    }
});
```

This generates:
```css
.color-1 {
  color: #1abc9c;
}
.color-2 {
  color: #2ecc71;
}
.color-3 {
  color: #3498db;
}
.color-4 {
  color: #9b59b6;
}
```
*/
/*
---
name: Global Reset
category: Shared
---

The lernetz css library has a set of reset style to have the same behaviour on every browser.
Furthermore this reset sets some global variables like:
 * body font-families
 * body line-height
 * body text-rendering
 * :root font-size for proper rem conversion
*/
html,
body,
div,
span,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
abbr,
address,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
samp,
small,
strong,
sub,
sup,
var,
b,
i,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section,
summary,
time,
mark,
audio,
video {
  margin: 0;
  padding: 0;
  border: 0;
  outline: 0;
  font-size: inherit;
  vertical-align: baseline;
}
:root {
  font-size: 16px;
}
html {
  font-size: 100%;
}
body {
  line-height: 1.5rem;
  color: #3F3F40;
  font-family: 'Helvetica', sans-serif;
  text-rendering: optimizeLegibility;
  background-color: #FFF;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
  display: block;
}
select {
  vertical-align: middle;
}
textarea {
  width: 100%;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
/*
 * Normalize the behaviour of all browsers
 *
 * Instead of setting box-sizing fix on all elements we only set it on the root element
 * and tell all elements to inherit it's property from the parent
 * That way it's possible to overwrite the box-sizing anywhere while keeping proper inheritance
 */
html {
  box-sizing: border-box;
}
*,
*:before,
*:after {
  box-sizing: inherit;
}
a {
  text-decoration: none;
  color: #EC6449;
}
a > * {
  display: block;
}
/*
---
name: Colors
category: Shared/Variables
template: colors
tag:
 - variables
 - colors
colors:
 - variable: "@text-color"
   description: "The default text color on the body"
   value: "#3F3F40"
 - variable: "@text-inverted-color"
   description: "The default inverted text color on the body"
   value: "#FFF"
 - variable: "@action-color"
   description: "The main action color used for links and buttons"
   value: "#EC6449"
 - variable: "@body-color"
   description: "The main background color"
   value: "#FFF"
---

The color variables that are used throughout the library.
*/
/*
---
name: Global settings
category: Shared/Variables
template: variables
tag:
 - variables
variables:
 - name: "@text-line-height"
   description: "The line height of the body"
   default: "1.5rem"
 - name: "@font-family"
   description: "The font-family of the body"
   default: "'Helvetica', sans-serif"
 - name: "@text-rendering"
   description: "The text-rendering of the body"
   default: "optimizeLegibility"
 - name: "@transition-duration"
   description: "The duration of the slide transitions"
   default: "0.4s"
---

These variables setups some global text formatting and styling.
*/
/*
---
name: Size settings
category: Shared/Variables
template: variables
tag:
 - variables
 - grid
variables:
 - name: "@grid-gutter"
   description: "The space between the grid children"
   default: "rem( 30px )"
 - name: "@grid-break-points"
   description: "The screensize when the grid should break."
   default: "rem(600px), rem(1024px)"
 - name: "@grid-break-labels"
   description: "The breakpoint label corresponding to the entie in the `@grid-break-points` list"
   default: "medium, large"
 - name: "@page-padding"
   description: "The padding for the .page-fluid component"
   default: "rem( 60px )"
---

These variables setups some global sizes mainly for the grid.
*/
/*
---
name: .button-default
category: Buttons/Default
tag:
 - component
 - button
---

The default button sets some basic properties so it is working as a `button` or `a` tag.

An example for a button:
```jade
button.button-default My Button
```

An example for a link:
```jade
a.button-default My Link
```
*/
.button-default {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  background: transparent;
  border: none;
  display: inline-block;
  cursor: pointer;
  outline: none;
}
/*
---
name: .grid
category: Layout/Grid
tag:
 - component
 - responsive
compile: true
---

A simple grid system that wraps children nodes based on the viewport width.

## Simple side by side rendering

The easiest use case is to use simple `.col-1`, `.col-1-2`, `.col-1-3`, `.col-1-4` for a side-by-side rendering.
The default value for all child elements of a `.grid` is equivalent to `.col-1`, so for only one child it will span the full width.

```jade
div.grid
	div.col-1-2
		div.aigis-debug col-1-2
	div.col-1-2
		div.aigis-debug col-1-2
```
```jade
div.grid
	div.col-1-4
		div.aigis-debug col-1-4
	div.col-3-4
		div.aigis-debug col-3-4
```

## Layouts on different devices

The breakpoints for different screen sizes are specified in the `@grid-break-points`, `@grid-break-labels` variables.
The default values define two breakpoints with labels: `.medium-X-X` and `.large-X-X`.
So an example grid with two breakpoints looks like this:

```jade
div.grid
	div.medium-1-2.large-1-4.xlarge-1-2
		div.aigis-debug col-1 medium-1-2 large-1-4
	div.medium-1-2.large-1-4.xlarge-1-2
		div.aigis-debug col-1 medium-1-2 large-1-4
	div.col-1-2.medium-1-2.large-1-4.xlarge-1-2
		div.aigis-debug col-1-2 medium-1-2 large-1-4
	div.col-1-2.medium-1-2.large-1-4.xlarge-1-2
		div.aigis-debug col-1-2 medium-1-2 large-1-4
```

**Note:** The `col-1` classes are not present on the first two nodes, since this is the default behaviour.


## Reverse order

To reverse the order in which the columns are displayed, you can add the modifier class `.-reverse` to your grid.
The columns will be in DOM order when viewport switches to small layout.

```jade
div.grid.-reverse
	div.col-1-4
		div.aigis-debug First column in DOM
	div.col-1-4
		div.aigis-debug Second column in DOM
	div.col-1-4
		div.aigis-debug Third column in DOM
	div.col-1-4
		div.aigis-debug Fourth column in DOM
```
## No gutter

If you dont need a spacing/gutter between the grid columns you can use the modifier `.-nogutter`.

```jade
div.grid.-nogutter
	div.col-1-4
		div.aigis-debug First column in DOM
	div.col-1-4
		div.aigis-debug Second column in DOM
	div.col-1-4
		div.aigis-debug Third column in DOM
	div.col-1-4
		div.aigis-debug Fourth column in DOM
```
*/
.grid {
  margin: 0 -0.9375rem;
  /**
	 * Generate all media breakpoints based on the @grid-break-points, @grid-break-labels variables.
	 */
}
.grid:after {
  content: "";
  display: table;
  clear: both;
}
.grid > * {
  float: left;
  position: relative;
  width: 100%;
  padding: 0 0.9375rem;
}
.grid.-reverse > * {
  float: right;
}
.grid.-nogutter {
  margin: 0;
}
.grid.-nogutter > * {
  padding: 0;
}
.grid .col-1 {
  width: 100%;
}
.grid .col-1-2 {
  width: 50%;
}
.grid .col-1-3 {
  width: 33.33333333%;
}
.grid .col-2-3 {
  width: 66.66666667%;
}
.grid .col-1-4 {
  width: 25%;
}
.grid .col-3-4 {
  width: 75%;
}
@media all and (min-width: 37.5rem) {
  .grid > .medium-1 {
    width: 100%;
  }
  .grid > .medium-1-2 {
    width: 50%;
  }
  .grid > .medium-1-3 {
    width: 33.33333333%;
  }
  .grid > .medium-2-3 {
    width: 66.66666667%;
  }
  .grid > .medium-1-4 {
    width: 25%;
  }
  .grid > .medium-3-4 {
    width: 75%;
  }
}
@media all and (min-width: 64rem) {
  .grid > .large-1 {
    width: 100%;
  }
  .grid > .large-1-2 {
    width: 50%;
  }
  .grid > .large-1-3 {
    width: 33.33333333%;
  }
  .grid > .large-2-3 {
    width: 66.66666667%;
  }
  .grid > .large-1-4 {
    width: 25%;
  }
  .grid > .large-3-4 {
    width: 75%;
  }
}
/*
---
name: img.responsive
category: Layout/Image
tag:
 - responsive
compile: true
---

This class makes the image scaling to its max width.

```jade
img.responsive(src='http://www.byui.edu/images/agriculture-life-sciences/flower.jpg')
```
*/
img.responsive {
  max-width: 100%;
  height: auto;
}
/*
---
name: .media-responsive
category: Layout/Media
tag:
 - responsive
compile: true
---

`.media-responsive` - This makes a the `.media-responsive` div a container for any media element (iframe, video, ... ) that responsive scales with a fix ratio.
The media element ( child ) needs the class `.stretch` to fully fill out the parents size.

The `.media-responsive` component has to predefined modifiers: `.-media-4-3`, `.-media-16-9` that define a fix ratio.

```jade
div.media-responsive.-media-16-9
	iframe.stretch(src="https://www.youtube.com/watch?v=TCd6PfxOy0Y")
```
*/
.media-responsive {
  width: 100%;
  position: relative;
  padding-bottom: 50%;
}
.media-responsive.-media-4-3 {
  padding-bottom: 75%;
}
.media-responsive.-media-16-9 {
  padding-bottom: 56.26%;
}
/*
---
name: .page-fluid
category: Page/Fluid
tag:
 - responsive
compile: true
---

`.page-fluid` centers the page content and adds a padding so the page sticks not to the browser viewport.
Furthermore it has a max-width based on the last `@grid-break-points` value.

```jade
div.page-fluid
	div.aigis-debug Some page content
```

## Max-width page

To broaden the width of the page you can add the modifier `.-unlimited`. Thsi will span the page to the full width.

```jade
div.page-fluid.-unlimited
	div.aigis-debug Some page content
```
*/
.page-fluid {
  max-width: 71.5rem;
  margin: auto;
  padding: 0 3.75rem;
}
.page-fluid.-unlimited {
  max-width: none;
}
/*
---
name: .row
category: Layout/Row
tag:
 - component
compile: true
---

This styling allow to place containers in a row. They will **not** break as the `.grid` but resize them accordingly.
Some benefits of the `.row` approach is the easy vertical centering and the usage of the `.col-auto` class.

## Basic row with vertical centering

You can use the sizing classes `.col-X-X` to define the width of a column as the following example shows.

```jade
div.row
	div.col-1-4.aigis-debug col-1-4 with a lot of text that spans the column.
	div.col-3-4.aigis-debug col-3-4 content.
```

## Fixed row

There is a `.-fixed` modifier where each column has the same width.

```jade
div.row.-fixed
	div.aigis-debug evenly spreadout column
	div.aigis-debug evenly spreadout column with more content
	div.aigis-debug evenly spreadout column
	div.aigis-debug evenly spreadout column with much more content than the other
	div.aigis-debug.vcenter evenly spreadout column with .vcenter
```


## Auto sized column width and vcenter

There is a special `.col-auto` class that resizes the column to the size of its content.
This is usefull for example if you have a fixed size logo and the rest of the header has to resize.

```jade
div.row.-center
	div.col-auto.aigis-debug
		img(src="http://placehold.it/100x100")
	div.col-1.aigis-debug The rest
	div.col-auto.aigis-debug
		img(src="http://placehold.it/200x100")
```
*/
.row {
  display: table;
  width: 100%;
}
.row.-fixed {
  table-layout: fixed;
}
.row.-center > * {
  vertical-align: middle;
}
.row.-bottom > * {
  vertical-align: bottom;
}
.row.-padded > * + * {
  padding-left: 1.875rem;
}
.row > * {
  display: table-cell;
}
.row > *.col-1 {
  width: 100%;
}
.row > *.col-1-2,
.row > *.col-2-4 {
  width: 50%;
}
.row > *.col-1-3 {
  width: 33.33333333%;
}
.row > *.col-2-3 {
  width: 66.66666667%;
}
.row > *.col-1-4 {
  width: 25%;
}
.row > *.col-3-4 {
  width: 75%;
}
.row > *.col-auto {
  width: auto;
  white-space: nowrap;
}
.btn {
  background-color: white;
  color: black;
  border: 1px solid #E0E0E0;
  border-radius: 0;
  padding: 12px 16px;
  cursor: pointer;
  font-weight: 500;
  font-size: 12px;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  white-space: nowrap;
  margin: 0;
  box-shadow: 2px 2px 3px 0 rgba(187, 187, 187, 0.3);
}
.btn:hover {
  background-color: white;
  border: 1px solid #006699;
  color: #006699;
}
.btn:hover.btn--icon .icon {
  border-color: #006699;
}
.btn:focus {
  background-color: white;
  border: 1px solid #006699;
  color: #006699;
  padding-bottom: 11px;
}
.btn.active {
  border-bottom: 2px solid #002233;
  padding-bottom: 11px;
}
.btn.btn--menu-item {
  margin: 0;
  box-shadow: none;
  border: none;
  display: block;
}
.btn.btn--menu-item:hover {
  background-color: #E0E0E0;
}
.btn.hidden {
  display: none;
}
body > .container.login {
  position: relative;
  width: 100%;
  min-height: 550px;
  background-repeat: no-repeat;
  background-position: top center;
  background-size: cover;
  margin: 35px 0 0 0;
  max-width: initial;
}
.login-title {
  padding: 35px 45px 0 45px;
  text-transform: uppercase;
  font-weight: 700;
  font-size: 48px;
  line-height: 55px;
}
@media (max-width: 420px) {
  .login-title {
    padding: 35px 25px 0 25px;
  }
}
.login-container {
  position: relative;
  top: 25px;
  left: 50%;
  width: 45%;
  padding: 25px 50px;
  background-color: #fff;
}
@media (max-width: 756px) {
  .login-container {
    left: 5%;
    width: 90%;
  }
}
@media (max-width: 420px) {
  .login-container {
    left: 0%;
    width: 100%;
    padding: 25px 25px;
    top: 0px;
  }
}
.login-container #kc-form-buttons {
  margin: 15px 0 15px 0;
}
.login-container #kc-form-wrapper .instruction {
  margin: 15px 0px;
}
.login-container .kc-container {
  margin-top: 15px;
}
.login-container .kc-container .alert {
  margin: 10px 0;
}
.login-container .kc-container .alert.alert-error {
  color: #e2001a;
}
.login-container .kc-header {
  text-transform: uppercase;
  margin-bottom: 25px;
  font-weight: bold;
  font-size: 25px;
}
.login-container .kc-label-wrapper {
  margin: 0 0 5px 0;
}
.login-container .kc-input-wrapper {
  border: 1px solid #eee;
  margin-bottom: 25px;
}
.login-container .kc-input-wrapper.row {
  margin-left: 0;
  margin-right: 0;
}
.login-container .kc-input-wrapper input {
  border: none;
  height: 48px;
  padding-left: 10px;
}
.login-container .input-icon {
  width: 45px;
  height: 45px;
  background-color: #eee;
  padding: 15px;
}
.login-container .input-icon .icon {
  width: 14px;
  height: 14px;
  fill: grey;
  -webkit-transform: rotate(180deg);
          transform: rotate(180deg);
}
.login-container input {
  width: 100%;
  background-color: #fff;
}
.login-container .re-login {
  padding: 20px 0;
}
.login-container .social-login {
  margin-top: 25px;
}
.login-container .social-login .zocial {
  margin-top: 10px;
  margin-right: 10px;
  float: left;
}
.login-container .social-login ul {
  list-style-type: none;
}
.login-container .social-login > ul > li > a > * {
  display: inline-block;
}
.login-footer {
  min-height: 140px;
  padding: 50px;
  width: 100%;
  background-color: #f5f5f5;
  color: #4a4a4a;
}
.login-footer .logo-container {
  text-align: center;
}
.login-footer .logo-container .logo {
  margin: 10px;
  max-height: 90px;
}
.login-footer p {
  line-height: 1.5rem;
}
.kc-locale.menu {
  position: absolute;
  right: 20px;
  top: 20px;
}
.menu {
  position: relative;
}
.menu .menu-items {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  list-style: none;
  background-color: #fff;
  background-clip: padding-box;
  display: none;
}
.menu .menu-items li {
  border-bottom: 1px solid #E0E0E0;
}
.menu .menu-items li:last {
  border: none;
}
.menu.open .menu-items {
  display: block;
}
.container {
  padding-left: 0px;
  padding-right: 0px;
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIiwiY3NzLWxpYi9sZXNzL3NoYXJlZC9oZWxwZXJzLmxlc3MiLCJjc3MtbGliL2xlc3Mvc2hhcmVkL3Jlc2V0Lmxlc3MiLCJjc3MtbGliL2xlc3MvY29tcG9uZW50cy9jb3JlL2J1dHRvbi5sZXNzIiwiY3NzLWxpYi9sZXNzL2NvbXBvbmVudHMvY29yZS9yZXNwb25zaXZlL2dyaWQubGVzcyIsImNzcy1saWIvbGVzcy9jb21wb25lbnRzL2NvcmUvcmVzcG9uc2l2ZS9pbWFnZS5sZXNzIiwiY3NzLWxpYi9sZXNzL2NvbXBvbmVudHMvY29yZS9yZXNwb25zaXZlL21lZGlhLmxlc3MiLCJjc3MtbGliL2xlc3MvY29tcG9uZW50cy9jb3JlL3Jlc3BvbnNpdmUvcGFnZS5sZXNzIiwiY3NzLWxpYi9sZXNzL2NvbXBvbmVudHMvY29yZS9yb3cubGVzcyIsImxlcm5ldHotdGhlbWUvYnV0dG9uLmxlc3MiLCJsZXJuZXR6LXRoZW1lL2xvZ2luLmxlc3MiLCJsZXJuZXR6LXRoZW1lL21lbnUubGVzcyIsIm1haW4ubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0VBZUU7QUNDRjtFQUNDLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtDRENBO0FBQ0Q7Ozs7Ozs7OztFQVNFO0FDR0Y7RUFDQyxtQkFBQTtDRERBO0FBQ0Q7Ozs7Ozs7OztFQVNFO0FDS0Y7RUFDQyxtQkFBQTtDREhBO0FBQ0Q7Ozs7Ozs7OztFQVNFO0FDT0Y7RUFDQyx1QkFBQTtDRExBO0FBQ0Q7Ozs7Ozs7OztFQVNFO0FDU0Y7RUFDQyxtQkFBQTtDRFBBO0FBQ0Q7Ozs7Ozs7OztFQVNFO0FDV0Y7RUFDQyxZQUFBO0NEVEE7QUFDRDs7Ozs7Ozs7O0VBU0U7QUNZRjtFQUNDLGFBQUE7Q0RWQTtBQUNEOzs7Ozs7Ozs7RUFTRTtBQ2FGO0VBQ0MsY0FBQTtDRFhBO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFzQkU7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RkUsZ0JBQUE7Q1Y4eUJEO0FVMTRCRDtFQWlHRSxpQkFBQTtDVjR5QkQ7QVU3NEJEO0VBb0dHLGlCQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0NWNHlCRjtBVWw1QkQ7RUEwR0csc0JBQUE7Q1YyeUJGO0FVcjVCRDtFQThHRyxzQkFBQTtDVjB5QkY7QVVueUJEO0VBQ0Msa0JBQUE7RUFDQSxjQUFBO0VBQ0EsWUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtDVnF5QkE7QVUxeUJEO0VBU0UsbUJBQUE7Q1ZveUJEO0FVN3lCRDtFQVlHLGFBQUE7RUFDQSxpQkFBQTtDVm95QkY7QVVqekJEO0VBa0JFLG9CQUFBO0NWa3lCRDtBVTl4QkQ7RUFDQyxtQkFBQTtFQUNBLFlBQUE7RUFDQSxVQUFBO0NWZ3lCQTtBVzE4QkQ7RUFDQyxtQkFBQTtDWDQ4QkE7QVc3OEJEO0VBSUUsbUJBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0VBQ0EsNkJBQUE7RUFDQSxjQUFBO0NYNDhCRDtBV3Y5QkQ7RUFjRyxpQ0FBQTtDWDQ4QkY7QVcxOEJFO0VBQ0MsYUFBQTtDWDQ4Qkg7QVd2OEJBO0VBRUUsZUFBQTtDWHc4QkY7QVl4OUJEO0VBQ0Msa0JBQUE7RUFDQSxtQkFBQTtDWjA5QkEiLCJmaWxlIjoibGVybmV0ei5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuLS0tXG5uYW1lOiAuc3RyZXRjaFxuY2F0ZWdvcnk6IFNoYXJlZC9IZWxwZXJzXG50YWc6XG4gLSBoZWxwZXJzXG4tLS1cblxuYC5zdHJldGNoYCBEZWZpbmUgYW4gZWxlbWVudCB3aGljaCBzdHJldGNoZXMgdG8gdGhlIHNpemUgb2YgaXRzIHBhcmVudFxuXG5gYGBodG1sXG48ZGl2IGNsYXNzPVwicmVsXCIgc3R5bGU9XCJoZWlnaHQ6IDU1cHg7XCI+XG4gICA8ZGl2IGNsYXNzPVwic3RyZXRjaCBzdHlsZWd1aWRlLWdyaWQtdW5pdFwiPiBJJ20gc3RyZXRjaGVkIHRvIHRoZSBzaXplIG9mIG15IHBhcmVudDwvZGl2PlxuPC9kaXY+XG5gYGBcbiovXG4uc3RyZXRjaCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLypcbi0tLVxubmFtZTogLmFic1xuY2F0ZWdvcnk6IFNoYXJlZC9IZWxwZXJzXG50YWc6XG4gLSBoZWxwZXJzXG4tLS1cblxuYC5hYnNgIFNldCB0aGUgZWxlbWVudCBwb3NpdGlvbiB0byBhYnNvbHV0ZVxuKi9cbi5hYnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG4vKlxuLS0tXG5uYW1lOiAucmVsXG5jYXRlZ29yeTogU2hhcmVkL0hlbHBlcnNcbnRhZzpcbiAtIGhlbHBlcnNcbi0tLVxuXG5gLnJlbGAgU2V0IHRoZSBlbGVtZW50IHBvc2l0aW9uIHRvIHJlbGF0aXZlXG4qL1xuLnJlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi8qXG4tLS1cbm5hbWU6IC52Y2VudGVyXG5jYXRlZ29yeTogU2hhcmVkL0hlbHBlcnNcbnRhZzpcbiAtIGhlbHBlcnNcbi0tLVxuXG5gLnZjZW50ZXJgIFNldHMgdmVydGljYWwtYWxpZ24gdG8gbWlkZGxlXG4qL1xuLnZjZW50ZXIge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLypcbi0tLVxubmFtZTogLmhjZW50ZXJcbmNhdGVnb3J5OiBTaGFyZWQvSGVscGVyc1xudGFnOlxuIC0gaGVscGVyc1xuLS0tXG5cbmAuaGNlbnRlcmAgU2V0cyB0ZXh0LWFsaWduIHRvIGNlbnRlclxuKi9cbi5oY2VudGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLypcbi0tLVxubmFtZTogLmZsb2F0bGVmdFxuY2F0ZWdvcnk6IFNoYXJlZC9IZWxwZXJzXG50YWc6XG4gLSBoZWxwZXJzXG4tLS1cblxuYC5mbG9hdGxlZnRgIFNldHMgZmxvYXQgdG8gbGVmdFxuKi9cbi5mbG9hdGxlZnQge1xuICBmbG9hdDogbGVmdDtcbn1cbi8qXG4tLS1cbm5hbWU6IC5mbG9hdHJpZ2h0XG5jYXRlZ29yeTogU2hhcmVkL0hlbHBlcnNcbnRhZzpcbiAtIGhlbHBlcnNcbi0tLVxuXG5gLmZsb2F0cmlnaHRgIFNldHMgZmxvYXQgdG8gcmlnaHRcbiovXG4uZmxvYXRyaWdodCB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi8qXG4tLS1cbm5hbWU6IC5oaWRkZW5cbmNhdGVnb3J5OiBTaGFyZWQvSGVscGVyc1xudGFnOlxuIC0gaGVscGVyc1xuLS0tXG5cbmAuaGlkZGVuYCBTZXRzIGRpc3BsYXkgdG8gbm9uZS5cbiovXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qXG4tLS1cbm5hbWU6IHJlbSggcGl4ZWxzIClcbmNhdGVnb3J5OiBTaGFyZWQvTWl4aW5zXG50ZW1wbGF0ZTogbWl4aW5cbnRhZzpcbiAtIG1peGluXG5wYXJhbWV0ZXJzOlxuIC0gbmFtZTogcGl4ZWxzXG4gICBkZXNjcmlwdGlvbjogVGhlIHBpeGVsIHZhbHVlIHRvIGNvbnZlcnQgaW50byByZW0gYmFzZWQgb24gdGhlIDE2cHggcm9vdCBmb250LXNpemVcbiAgIG9wdGlvbmFsOiBmYWxzZVxuLS0tXG5cblRoaXMgbGVzcyBmdW5jdGlvbiB0dXJucyBhIHBpeGVsIHZhbHVlIGludG8gYSByZW0gdmFsdWUgYmFzZWQgb24gdGhlIHJvb3QgZm9udC1zaXplIHNldCB0byAxNnB4LlxuXG5BbiBleGFtcGxlIHVzYWdlIGxvb2tzIGxpa2UgdGhpczpcblxuYGBgbGVzc1xuLmV4YW1wbGUge1xuXHRwYWRkaW5nOiByZW0oIDE1cHggKSByZW0oIDEycHggKVxufVxuYGBgXG4qL1xuLypcbi0tLVxubmFtZTogLmZvciggQGFycmF5LCBAY29kZSApXG5jYXRlZ29yeTogU2hhcmVkL01peGluc1xudGVtcGxhdGU6IG1peGluXG50YWc6XG4gLSBtaXhpblxucGFyYW1ldGVyczpcbiAtIG5hbWU6IGFycmF5XG4gICBkZXNjcmlwdGlvbjogVGhlIGFycmF5IG9mIHZhbHVlcyB0byBsb29wIG92ZXJcbiAgIG9wdGlvbmFsOiBmYWxzZVxuIC0gbmFtZTogY29kZVxuICAgZGVzY3JpcHRpb246IFRoZSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgb24gZXZlcnkgdmFsdWUuIFlvdSBjYW4gYWNjZXNzIHRoZSBpbmRleCB3aXRoIGBAaWAgYW5kIHRoZSB2YWx1ZSB3aXRoIGBAdmFsdWVgXG4gICBvcHRpb25hbDogZmFsc2Vcbi0tLVxuXG5UaGlzIG1peGluIGFsbG93cyB0byBleGVjdXRlIGNvZGUgb3ZlciBhbiBhcnJheVxuXG5BbiBleGFtcGxlIHVzYWdlIGxvb2tzIGxpa2UgdGhpczpcbmBgYGxlc3NcbkBjb2xvcnM6ICMxYWJjOWMsICMyZWNjNzEsICMzNDk4ZGIsICM5YjU5YjY7XG5cbi5mb3IoQGNvbG9ycywge1xuICAgIC5jb2xvci1Ae2l9IHtcbiAgICAgICAgY29sb3I6IEB2YWx1ZTtcbiAgICB9XG59KTtcbmBgYFxuXG5UaGlzIGdlbmVyYXRlczpcbmBgYGNzc1xuLmNvbG9yLTEge1xuICBjb2xvcjogIzFhYmM5Yztcbn1cbi5jb2xvci0yIHtcbiAgY29sb3I6ICMyZWNjNzE7XG59XG4uY29sb3ItMyB7XG4gIGNvbG9yOiAjMzQ5OGRiO1xufVxuLmNvbG9yLTQge1xuICBjb2xvcjogIzliNTliNjtcbn1cbmBgYFxuKi9cbi8qXG4tLS1cbm5hbWU6IEdsb2JhbCBSZXNldFxuY2F0ZWdvcnk6IFNoYXJlZFxuLS0tXG5cblRoZSBsZXJuZXR6IGNzcyBsaWJyYXJ5IGhhcyBhIHNldCBvZiByZXNldCBzdHlsZSB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBvbiBldmVyeSBicm93c2VyLlxuRnVydGhlcm1vcmUgdGhpcyByZXNldCBzZXRzIHNvbWUgZ2xvYmFsIHZhcmlhYmxlcyBsaWtlOlxuICogYm9keSBmb250LWZhbWlsaWVzXG4gKiBib2R5IGxpbmUtaGVpZ2h0XG4gKiBib2R5IHRleHQtcmVuZGVyaW5nXG4gKiA6cm9vdCBmb250LXNpemUgZm9yIHByb3BlciByZW0gY29udmVyc2lvblxuKi9cbmh0bWwsXG5ib2R5LFxuZGl2LFxuc3Bhbixcbm9iamVjdCxcbmlmcmFtZSxcbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNixcbnAsXG5ibG9ja3F1b3RlLFxucHJlLFxuYWJicixcbmFkZHJlc3MsXG5jaXRlLFxuY29kZSxcbmRlbCxcbmRmbixcbmVtLFxuaW1nLFxuaW5zLFxua2JkLFxucSxcbnNhbXAsXG5zbWFsbCxcbnN0cm9uZyxcbnN1YixcbnN1cCxcbnZhcixcbmIsXG5pLFxuZGwsXG5kdCxcbmRkLFxub2wsXG51bCxcbmxpLFxuZmllbGRzZXQsXG5mb3JtLFxubGFiZWwsXG5sZWdlbmQsXG50YWJsZSxcbmNhcHRpb24sXG50Ym9keSxcbnRmb290LFxudGhlYWQsXG50cixcbnRoLFxudGQsXG5hcnRpY2xlLFxuYXNpZGUsXG5jYW52YXMsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1lbnUsXG5uYXYsXG5zZWN0aW9uLFxuc3VtbWFyeSxcbnRpbWUsXG5tYXJrLFxuYXVkaW8sXG52aWRlbyB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cbjpyb290IHtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbn1cbmJvZHkge1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBjb2xvcjogIzNGM0Y0MDtcbiAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EnLCBzYW5zLXNlcmlmO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xufVxuYXJ0aWNsZSxcbmFzaWRlLFxuZGV0YWlscyxcbmZpZ2NhcHRpb24sXG5maWd1cmUsXG5mb290ZXIsXG5oZWFkZXIsXG5oZ3JvdXAsXG5tZW51LFxubmF2LFxuc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuc2VsZWN0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbnRleHRhcmVhIHtcbiAgd2lkdGg6IDEwMCU7XG59XG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQ6IGluaGVyaXQ7XG4gIG1hcmdpbjogMDtcbn1cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuLypcbiAqIE5vcm1hbGl6ZSB0aGUgYmVoYXZpb3VyIG9mIGFsbCBicm93c2Vyc1xuICpcbiAqIEluc3RlYWQgb2Ygc2V0dGluZyBib3gtc2l6aW5nIGZpeCBvbiBhbGwgZWxlbWVudHMgd2Ugb25seSBzZXQgaXQgb24gdGhlIHJvb3QgZWxlbWVudFxuICogYW5kIHRlbGwgYWxsIGVsZW1lbnRzIHRvIGluaGVyaXQgaXQncyBwcm9wZXJ0eSBmcm9tIHRoZSBwYXJlbnRcbiAqIFRoYXQgd2F5IGl0J3MgcG9zc2libGUgdG8gb3ZlcndyaXRlIHRoZSBib3gtc2l6aW5nIGFueXdoZXJlIHdoaWxlIGtlZXBpbmcgcHJvcGVyIGluaGVyaXRhbmNlXG4gKi9cbmh0bWwge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuKixcbio6YmVmb3JlLFxuKjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG5hIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogI0VDNjQ0OTtcbn1cbmEgPiAqIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4vKlxuLS0tXG5uYW1lOiBDb2xvcnNcbmNhdGVnb3J5OiBTaGFyZWQvVmFyaWFibGVzXG50ZW1wbGF0ZTogY29sb3JzXG50YWc6XG4gLSB2YXJpYWJsZXNcbiAtIGNvbG9yc1xuY29sb3JzOlxuIC0gdmFyaWFibGU6IFwiQHRleHQtY29sb3JcIlxuICAgZGVzY3JpcHRpb246IFwiVGhlIGRlZmF1bHQgdGV4dCBjb2xvciBvbiB0aGUgYm9keVwiXG4gICB2YWx1ZTogXCIjM0YzRjQwXCJcbiAtIHZhcmlhYmxlOiBcIkB0ZXh0LWludmVydGVkLWNvbG9yXCJcbiAgIGRlc2NyaXB0aW9uOiBcIlRoZSBkZWZhdWx0IGludmVydGVkIHRleHQgY29sb3Igb24gdGhlIGJvZHlcIlxuICAgdmFsdWU6IFwiI0ZGRlwiXG4gLSB2YXJpYWJsZTogXCJAYWN0aW9uLWNvbG9yXCJcbiAgIGRlc2NyaXB0aW9uOiBcIlRoZSBtYWluIGFjdGlvbiBjb2xvciB1c2VkIGZvciBsaW5rcyBhbmQgYnV0dG9uc1wiXG4gICB2YWx1ZTogXCIjRUM2NDQ5XCJcbiAtIHZhcmlhYmxlOiBcIkBib2R5LWNvbG9yXCJcbiAgIGRlc2NyaXB0aW9uOiBcIlRoZSBtYWluIGJhY2tncm91bmQgY29sb3JcIlxuICAgdmFsdWU6IFwiI0ZGRlwiXG4tLS1cblxuVGhlIGNvbG9yIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIHRocm91Z2hvdXQgdGhlIGxpYnJhcnkuIFxuKi9cbi8qXG4tLS1cbm5hbWU6IEdsb2JhbCBzZXR0aW5nc1xuY2F0ZWdvcnk6IFNoYXJlZC9WYXJpYWJsZXNcbnRlbXBsYXRlOiB2YXJpYWJsZXNcbnRhZzpcbiAtIHZhcmlhYmxlc1xudmFyaWFibGVzOlxuIC0gbmFtZTogXCJAdGV4dC1saW5lLWhlaWdodFwiXG4gICBkZXNjcmlwdGlvbjogXCJUaGUgbGluZSBoZWlnaHQgb2YgdGhlIGJvZHlcIlxuICAgZGVmYXVsdDogXCIxLjVyZW1cIlxuIC0gbmFtZTogXCJAZm9udC1mYW1pbHlcIlxuICAgZGVzY3JpcHRpb246IFwiVGhlIGZvbnQtZmFtaWx5IG9mIHRoZSBib2R5XCJcbiAgIGRlZmF1bHQ6IFwiJ0hlbHZldGljYScsIHNhbnMtc2VyaWZcIlxuIC0gbmFtZTogXCJAdGV4dC1yZW5kZXJpbmdcIlxuICAgZGVzY3JpcHRpb246IFwiVGhlIHRleHQtcmVuZGVyaW5nIG9mIHRoZSBib2R5XCJcbiAgIGRlZmF1bHQ6IFwib3B0aW1pemVMZWdpYmlsaXR5XCJcbiAtIG5hbWU6IFwiQHRyYW5zaXRpb24tZHVyYXRpb25cIlxuICAgZGVzY3JpcHRpb246IFwiVGhlIGR1cmF0aW9uIG9mIHRoZSBzbGlkZSB0cmFuc2l0aW9uc1wiXG4gICBkZWZhdWx0OiBcIjAuNHNcIlxuLS0tXG5cblRoZXNlIHZhcmlhYmxlcyBzZXR1cHMgc29tZSBnbG9iYWwgdGV4dCBmb3JtYXR0aW5nIGFuZCBzdHlsaW5nLlxuKi9cbi8qXG4tLS1cbm5hbWU6IFNpemUgc2V0dGluZ3NcbmNhdGVnb3J5OiBTaGFyZWQvVmFyaWFibGVzXG50ZW1wbGF0ZTogdmFyaWFibGVzXG50YWc6XG4gLSB2YXJpYWJsZXNcbiAtIGdyaWRcbnZhcmlhYmxlczpcbiAtIG5hbWU6IFwiQGdyaWQtZ3V0dGVyXCJcbiAgIGRlc2NyaXB0aW9uOiBcIlRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBncmlkIGNoaWxkcmVuXCJcbiAgIGRlZmF1bHQ6IFwicmVtKCAzMHB4IClcIlxuIC0gbmFtZTogXCJAZ3JpZC1icmVhay1wb2ludHNcIlxuICAgZGVzY3JpcHRpb246IFwiVGhlIHNjcmVlbnNpemUgd2hlbiB0aGUgZ3JpZCBzaG91bGQgYnJlYWsuXCJcbiAgIGRlZmF1bHQ6IFwicmVtKDYwMHB4KSwgcmVtKDEwMjRweClcIlxuIC0gbmFtZTogXCJAZ3JpZC1icmVhay1sYWJlbHNcIlxuICAgZGVzY3JpcHRpb246IFwiVGhlIGJyZWFrcG9pbnQgbGFiZWwgY29ycmVzcG9uZGluZyB0byB0aGUgZW50aWUgaW4gdGhlIGBAZ3JpZC1icmVhay1wb2ludHNgIGxpc3RcIlxuICAgZGVmYXVsdDogXCJtZWRpdW0sIGxhcmdlXCJcbiAtIG5hbWU6IFwiQHBhZ2UtcGFkZGluZ1wiXG4gICBkZXNjcmlwdGlvbjogXCJUaGUgcGFkZGluZyBmb3IgdGhlIC5wYWdlLWZsdWlkIGNvbXBvbmVudFwiXG4gICBkZWZhdWx0OiBcInJlbSggNjBweCApXCJcbi0tLVxuXG5UaGVzZSB2YXJpYWJsZXMgc2V0dXBzIHNvbWUgZ2xvYmFsIHNpemVzIG1haW5seSBmb3IgdGhlIGdyaWQuXG4qL1xuLypcbi0tLVxubmFtZTogLmJ1dHRvbi1kZWZhdWx0XG5jYXRlZ29yeTogQnV0dG9ucy9EZWZhdWx0XG50YWc6XG4gLSBjb21wb25lbnRcbiAtIGJ1dHRvblxuLS0tXG5cblRoZSBkZWZhdWx0IGJ1dHRvbiBzZXRzIHNvbWUgYmFzaWMgcHJvcGVydGllcyBzbyBpdCBpcyB3b3JraW5nIGFzIGEgYGJ1dHRvbmAgb3IgYGFgIHRhZy5cblxuQW4gZXhhbXBsZSBmb3IgYSBidXR0b246XG5gYGBqYWRlXG5idXR0b24uYnV0dG9uLWRlZmF1bHQgTXkgQnV0dG9uXG5gYGBcblxuQW4gZXhhbXBsZSBmb3IgYSBsaW5rOlxuYGBgamFkZVxuYS5idXR0b24tZGVmYXVsdCBNeSBMaW5rXG5gYGBcbiovXG4uYnV0dG9uLWRlZmF1bHQge1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3V0bGluZTogbm9uZTtcbn1cbi8qXG4tLS1cbm5hbWU6IC5ncmlkXG5jYXRlZ29yeTogTGF5b3V0L0dyaWRcbnRhZzpcbiAtIGNvbXBvbmVudFxuIC0gcmVzcG9uc2l2ZVxuY29tcGlsZTogdHJ1ZVxuLS0tXG5cbkEgc2ltcGxlIGdyaWQgc3lzdGVtIHRoYXQgd3JhcHMgY2hpbGRyZW4gbm9kZXMgYmFzZWQgb24gdGhlIHZpZXdwb3J0IHdpZHRoLlxuXG4jIyBTaW1wbGUgc2lkZSBieSBzaWRlIHJlbmRlcmluZ1xuXG5UaGUgZWFzaWVzdCB1c2UgY2FzZSBpcyB0byB1c2Ugc2ltcGxlIGAuY29sLTFgLCBgLmNvbC0xLTJgLCBgLmNvbC0xLTNgLCBgLmNvbC0xLTRgIGZvciBhIHNpZGUtYnktc2lkZSByZW5kZXJpbmcuXG5UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGNoaWxkIGVsZW1lbnRzIG9mIGEgYC5ncmlkYCBpcyBlcXVpdmFsZW50IHRvIGAuY29sLTFgLCBzbyBmb3Igb25seSBvbmUgY2hpbGQgaXQgd2lsbCBzcGFuIHRoZSBmdWxsIHdpZHRoLlxuXG5gYGBqYWRlXG5kaXYuZ3JpZFxuXHRkaXYuY29sLTEtMiBcblx0XHRkaXYuYWlnaXMtZGVidWcgY29sLTEtMlxuXHRkaXYuY29sLTEtMlxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBjb2wtMS0yXG5gYGBcbmBgYGphZGVcbmRpdi5ncmlkXG5cdGRpdi5jb2wtMS00IFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBjb2wtMS00XG5cdGRpdi5jb2wtMy00XG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0zLTRcbmBgYFxuXG4jIyBMYXlvdXRzIG9uIGRpZmZlcmVudCBkZXZpY2VzXG5cblRoZSBicmVha3BvaW50cyBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcyBhcmUgc3BlY2lmaWVkIGluIHRoZSBgQGdyaWQtYnJlYWstcG9pbnRzYCwgYEBncmlkLWJyZWFrLWxhYmVsc2AgdmFyaWFibGVzLlxuVGhlIGRlZmF1bHQgdmFsdWVzIGRlZmluZSB0d28gYnJlYWtwb2ludHMgd2l0aCBsYWJlbHM6IGAubWVkaXVtLVgtWGAgYW5kIGAubGFyZ2UtWC1YYC5cblNvIGFuIGV4YW1wbGUgZ3JpZCB3aXRoIHR3byBicmVha3BvaW50cyBsb29rcyBsaWtlIHRoaXM6XG5cbmBgYGphZGVcbmRpdi5ncmlkXG5cdGRpdi5tZWRpdW0tMS0yLmxhcmdlLTEtNC54bGFyZ2UtMS0yXG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0xIG1lZGl1bS0xLTIgbGFyZ2UtMS00XG5cdGRpdi5tZWRpdW0tMS0yLmxhcmdlLTEtNC54bGFyZ2UtMS0yXG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0xIG1lZGl1bS0xLTIgbGFyZ2UtMS00XG5cdGRpdi5jb2wtMS0yLm1lZGl1bS0xLTIubGFyZ2UtMS00LnhsYXJnZS0xLTJcblx0XHRkaXYuYWlnaXMtZGVidWcgY29sLTEtMiBtZWRpdW0tMS0yIGxhcmdlLTEtNFxuXHRkaXYuY29sLTEtMi5tZWRpdW0tMS0yLmxhcmdlLTEtNC54bGFyZ2UtMS0yXG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0xLTIgbWVkaXVtLTEtMiBsYXJnZS0xLTRcbmBgYFxuXG4qKk5vdGU6KiogVGhlIGBjb2wtMWAgY2xhc3NlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGZpcnN0IHR3byBub2Rlcywgc2luY2UgdGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuXG5cblxuIyMgUmV2ZXJzZSBvcmRlclxuXG5UbyByZXZlcnNlIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY29sdW1ucyBhcmUgZGlzcGxheWVkLCB5b3UgY2FuIGFkZCB0aGUgbW9kaWZpZXIgY2xhc3MgYC4tcmV2ZXJzZWAgdG8geW91ciBncmlkLlxuVGhlIGNvbHVtbnMgd2lsbCBiZSBpbiBET00gb3JkZXIgd2hlbiB2aWV3cG9ydCBzd2l0Y2hlcyB0byBzbWFsbCBsYXlvdXQuXG5cbmBgYGphZGVcbmRpdi5ncmlkLi1yZXZlcnNlXG5cdGRpdi5jb2wtMS00XG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIEZpcnN0IGNvbHVtbiBpbiBET01cblx0ZGl2LmNvbC0xLTRcblx0XHRkaXYuYWlnaXMtZGVidWcgU2Vjb25kIGNvbHVtbiBpbiBET01cblx0ZGl2LmNvbC0xLTRcblx0XHRkaXYuYWlnaXMtZGVidWcgVGhpcmQgY29sdW1uIGluIERPTVxuXHRkaXYuY29sLTEtNFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBGb3VydGggY29sdW1uIGluIERPTVxuYGBgXG4jIyBObyBndXR0ZXJcblxuSWYgeW91IGRvbnQgbmVlZCBhIHNwYWNpbmcvZ3V0dGVyIGJldHdlZW4gdGhlIGdyaWQgY29sdW1ucyB5b3UgY2FuIHVzZSB0aGUgbW9kaWZpZXIgYC4tbm9ndXR0ZXJgLlxuXG5gYGBqYWRlXG5kaXYuZ3JpZC4tbm9ndXR0ZXJcblx0ZGl2LmNvbC0xLTRcblx0XHRkaXYuYWlnaXMtZGVidWcgRmlyc3QgY29sdW1uIGluIERPTVxuXHRkaXYuY29sLTEtNFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBTZWNvbmQgY29sdW1uIGluIERPTVxuXHRkaXYuY29sLTEtNFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBUaGlyZCBjb2x1bW4gaW4gRE9NXG5cdGRpdi5jb2wtMS00XG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIEZvdXJ0aCBjb2x1bW4gaW4gRE9NXG5gYGBcbiovXG4uZ3JpZCB7XG4gIG1hcmdpbjogMCAtMC45Mzc1cmVtO1xuICAvKipcblx0ICogR2VuZXJhdGUgYWxsIG1lZGlhIGJyZWFrcG9pbnRzIGJhc2VkIG9uIHRoZSBAZ3JpZC1icmVhay1wb2ludHMsIEBncmlkLWJyZWFrLWxhYmVscyB2YXJpYWJsZXMuXG5cdCAqL1xufVxuLmdyaWQ6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgY2xlYXI6IGJvdGg7XG59XG4uZ3JpZCA+ICoge1xuICBmbG9hdDogbGVmdDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAwLjkzNzVyZW07XG59XG4uZ3JpZC4tcmV2ZXJzZSA+ICoge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uZ3JpZC4tbm9ndXR0ZXIge1xuICBtYXJnaW46IDA7XG59XG4uZ3JpZC4tbm9ndXR0ZXIgPiAqIHtcbiAgcGFkZGluZzogMDtcbn1cbi5ncmlkIC5jb2wtMSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmdyaWQgLmNvbC0xLTIge1xuICB3aWR0aDogNTAlO1xufVxuLmdyaWQgLmNvbC0xLTMge1xuICB3aWR0aDogMzMuMzMzMzMzMzMlO1xufVxuLmdyaWQgLmNvbC0yLTMge1xuICB3aWR0aDogNjYuNjY2NjY2NjclO1xufVxuLmdyaWQgLmNvbC0xLTQge1xuICB3aWR0aDogMjUlO1xufVxuLmdyaWQgLmNvbC0zLTQge1xuICB3aWR0aDogNzUlO1xufVxuQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogMzcuNXJlbSkge1xuICAuZ3JpZCA+IC5tZWRpdW0tMSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmdyaWQgPiAubWVkaXVtLTEtMiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuZ3JpZCA+IC5tZWRpdW0tMS0zIHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5ncmlkID4gLm1lZGl1bS0yLTMge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmdyaWQgPiAubWVkaXVtLTEtNCB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuZ3JpZCA+IC5tZWRpdW0tMy00IHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG59XG5AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiA2NHJlbSkge1xuICAuZ3JpZCA+IC5sYXJnZS0xIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuZ3JpZCA+IC5sYXJnZS0xLTIge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmdyaWQgPiAubGFyZ2UtMS0zIHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5ncmlkID4gLmxhcmdlLTItMyB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuZ3JpZCA+IC5sYXJnZS0xLTQge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmdyaWQgPiAubGFyZ2UtMy00IHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG59XG4vKlxuLS0tXG5uYW1lOiBpbWcucmVzcG9uc2l2ZVxuY2F0ZWdvcnk6IExheW91dC9JbWFnZVxudGFnOlxuIC0gcmVzcG9uc2l2ZVxuY29tcGlsZTogdHJ1ZVxuLS0tXG5cblRoaXMgY2xhc3MgbWFrZXMgdGhlIGltYWdlIHNjYWxpbmcgdG8gaXRzIG1heCB3aWR0aC5cblxuYGBgamFkZVxuaW1nLnJlc3BvbnNpdmUoc3JjPSdodHRwOi8vd3d3LmJ5dWkuZWR1L2ltYWdlcy9hZ3JpY3VsdHVyZS1saWZlLXNjaWVuY2VzL2Zsb3dlci5qcGcnKVxuYGBgXG4qL1xuaW1nLnJlc3BvbnNpdmUge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbn1cbi8qXG4tLS1cbm5hbWU6IC5tZWRpYS1yZXNwb25zaXZlXG5jYXRlZ29yeTogTGF5b3V0L01lZGlhXG50YWc6XG4gLSByZXNwb25zaXZlXG5jb21waWxlOiB0cnVlXG4tLS1cblxuYC5tZWRpYS1yZXNwb25zaXZlYCAtIFRoaXMgbWFrZXMgYSB0aGUgYC5tZWRpYS1yZXNwb25zaXZlYCBkaXYgYSBjb250YWluZXIgZm9yIGFueSBtZWRpYSBlbGVtZW50IChpZnJhbWUsIHZpZGVvLCAuLi4gKSB0aGF0IHJlc3BvbnNpdmUgc2NhbGVzIHdpdGggYSBmaXggcmF0aW8uXG5UaGUgbWVkaWEgZWxlbWVudCAoIGNoaWxkICkgbmVlZHMgdGhlIGNsYXNzIGAuc3RyZXRjaGAgdG8gZnVsbHkgZmlsbCBvdXQgdGhlIHBhcmVudHMgc2l6ZS5cblxuVGhlIGAubWVkaWEtcmVzcG9uc2l2ZWAgY29tcG9uZW50IGhhcyB0byBwcmVkZWZpbmVkIG1vZGlmaWVyczogYC4tbWVkaWEtNC0zYCwgYC4tbWVkaWEtMTYtOWAgdGhhdCBkZWZpbmUgYSBmaXggcmF0aW8uXG5cbmBgYGphZGVcbmRpdi5tZWRpYS1yZXNwb25zaXZlLi1tZWRpYS0xNi05XG5cdGlmcmFtZS5zdHJldGNoKHNyYz1cImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9VENkNlBmeE95MFlcIilcbmBgYFxuKi9cbi5tZWRpYS1yZXNwb25zaXZlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy1ib3R0b206IDUwJTtcbn1cbi5tZWRpYS1yZXNwb25zaXZlLi1tZWRpYS00LTMge1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuLm1lZGlhLXJlc3BvbnNpdmUuLW1lZGlhLTE2LTkge1xuICBwYWRkaW5nLWJvdHRvbTogNTYuMjYlO1xufVxuLypcbi0tLVxubmFtZTogLnBhZ2UtZmx1aWRcbmNhdGVnb3J5OiBQYWdlL0ZsdWlkXG50YWc6XG4gLSByZXNwb25zaXZlXG5jb21waWxlOiB0cnVlXG4tLS1cblxuYC5wYWdlLWZsdWlkYCBjZW50ZXJzIHRoZSBwYWdlIGNvbnRlbnQgYW5kIGFkZHMgYSBwYWRkaW5nIHNvIHRoZSBwYWdlIHN0aWNrcyBub3QgdG8gdGhlIGJyb3dzZXIgdmlld3BvcnQuXG5GdXJ0aGVybW9yZSBpdCBoYXMgYSBtYXgtd2lkdGggYmFzZWQgb24gdGhlIGxhc3QgYEBncmlkLWJyZWFrLXBvaW50c2AgdmFsdWUuXG5cbmBgYGphZGVcbmRpdi5wYWdlLWZsdWlkXG5cdGRpdi5haWdpcy1kZWJ1ZyBTb21lIHBhZ2UgY29udGVudFxuYGBgXG5cbiMjIE1heC13aWR0aCBwYWdlXG5cblRvIGJyb2FkZW4gdGhlIHdpZHRoIG9mIHRoZSBwYWdlIHlvdSBjYW4gYWRkIHRoZSBtb2RpZmllciBgLi11bmxpbWl0ZWRgLiBUaHNpIHdpbGwgc3BhbiB0aGUgcGFnZSB0byB0aGUgZnVsbCB3aWR0aC5cblxuYGBgamFkZVxuZGl2LnBhZ2UtZmx1aWQuLXVubGltaXRlZFxuXHRkaXYuYWlnaXMtZGVidWcgU29tZSBwYWdlIGNvbnRlbnRcbmBgYFxuKi9cbi5wYWdlLWZsdWlkIHtcbiAgbWF4LXdpZHRoOiA3MS41cmVtO1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmc6IDAgMy43NXJlbTtcbn1cbi5wYWdlLWZsdWlkLi11bmxpbWl0ZWQge1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4vKlxuLS0tXG5uYW1lOiAucm93XG5jYXRlZ29yeTogTGF5b3V0L1Jvd1xudGFnOlxuIC0gY29tcG9uZW50XG5jb21waWxlOiB0cnVlXG4tLS1cblxuVGhpcyBzdHlsaW5nIGFsbG93IHRvIHBsYWNlIGNvbnRhaW5lcnMgaW4gYSByb3cuIFRoZXkgd2lsbCAqKm5vdCoqIGJyZWFrIGFzIHRoZSBgLmdyaWRgIGJ1dCByZXNpemUgdGhlbSBhY2NvcmRpbmdseS5cblNvbWUgYmVuZWZpdHMgb2YgdGhlIGAucm93YCBhcHByb2FjaCBpcyB0aGUgZWFzeSB2ZXJ0aWNhbCBjZW50ZXJpbmcgYW5kIHRoZSB1c2FnZSBvZiB0aGUgYC5jb2wtYXV0b2AgY2xhc3MuXG5cbiMjIEJhc2ljIHJvdyB3aXRoIHZlcnRpY2FsIGNlbnRlcmluZ1xuXG5Zb3UgY2FuIHVzZSB0aGUgc2l6aW5nIGNsYXNzZXMgYC5jb2wtWC1YYCB0byBkZWZpbmUgdGhlIHdpZHRoIG9mIGEgY29sdW1uIGFzIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cy4gXG5cbmBgYGphZGVcbmRpdi5yb3dcblx0ZGl2LmNvbC0xLTQuYWlnaXMtZGVidWcgY29sLTEtNCB3aXRoIGEgbG90IG9mIHRleHQgdGhhdCBzcGFucyB0aGUgY29sdW1uLlxuXHRkaXYuY29sLTMtNC5haWdpcy1kZWJ1ZyBjb2wtMy00IGNvbnRlbnQuXG5gYGBcblxuIyMgRml4ZWQgcm93XG5cblRoZXJlIGlzIGEgYC4tZml4ZWRgIG1vZGlmaWVyIHdoZXJlIGVhY2ggY29sdW1uIGhhcyB0aGUgc2FtZSB3aWR0aC5cblxuYGBgamFkZVxuZGl2LnJvdy4tZml4ZWRcblx0ZGl2LmFpZ2lzLWRlYnVnIGV2ZW5seSBzcHJlYWRvdXQgY29sdW1uXG5cdGRpdi5haWdpcy1kZWJ1ZyBldmVubHkgc3ByZWFkb3V0IGNvbHVtbiB3aXRoIG1vcmUgY29udGVudFxuXHRkaXYuYWlnaXMtZGVidWcgZXZlbmx5IHNwcmVhZG91dCBjb2x1bW5cblx0ZGl2LmFpZ2lzLWRlYnVnIGV2ZW5seSBzcHJlYWRvdXQgY29sdW1uIHdpdGggbXVjaCBtb3JlIGNvbnRlbnQgdGhhbiB0aGUgb3RoZXJcblx0ZGl2LmFpZ2lzLWRlYnVnLnZjZW50ZXIgZXZlbmx5IHNwcmVhZG91dCBjb2x1bW4gd2l0aCAudmNlbnRlclxuYGBgXG5cblxuIyMgQXV0byBzaXplZCBjb2x1bW4gd2lkdGggYW5kIHZjZW50ZXJcblxuVGhlcmUgaXMgYSBzcGVjaWFsIGAuY29sLWF1dG9gIGNsYXNzIHRoYXQgcmVzaXplcyB0aGUgY29sdW1uIHRvIHRoZSBzaXplIG9mIGl0cyBjb250ZW50LlxuVGhpcyBpcyB1c2VmdWxsIGZvciBleGFtcGxlIGlmIHlvdSBoYXZlIGEgZml4ZWQgc2l6ZSBsb2dvIGFuZCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyIGhhcyB0byByZXNpemUuXG5cbmBgYGphZGVcbmRpdi5yb3cuLWNlbnRlclxuXHRkaXYuY29sLWF1dG8uYWlnaXMtZGVidWdcblx0XHRpbWcoc3JjPVwiaHR0cDovL3BsYWNlaG9sZC5pdC8xMDB4MTAwXCIpXG5cdGRpdi5jb2wtMS5haWdpcy1kZWJ1ZyBUaGUgcmVzdFxuXHRkaXYuY29sLWF1dG8uYWlnaXMtZGVidWdcblx0XHRpbWcoc3JjPVwiaHR0cDovL3BsYWNlaG9sZC5pdC8yMDB4MTAwXCIpXG5gYGBcbiovXG4ucm93IHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnJvdy4tZml4ZWQge1xuICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xufVxuLnJvdy4tY2VudGVyID4gKiB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ucm93Li1ib3R0b20gPiAqIHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cbi5yb3cuLXBhZGRlZCA+ICogKyAqIHtcbiAgcGFkZGluZy1sZWZ0OiAxLjg3NXJlbTtcbn1cbi5yb3cgPiAqIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbn1cbi5yb3cgPiAqLmNvbC0xIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ucm93ID4gKi5jb2wtMS0yLFxuLnJvdyA+ICouY29sLTItNCB7XG4gIHdpZHRoOiA1MCU7XG59XG4ucm93ID4gKi5jb2wtMS0zIHtcbiAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbn1cbi5yb3cgPiAqLmNvbC0yLTMge1xuICB3aWR0aDogNjYuNjY2NjY2NjclO1xufVxuLnJvdyA+ICouY29sLTEtNCB7XG4gIHdpZHRoOiAyNSU7XG59XG4ucm93ID4gKi5jb2wtMy00IHtcbiAgd2lkdGg6IDc1JTtcbn1cbi5yb3cgPiAqLmNvbC1hdXRvIHtcbiAgd2lkdGg6IGF1dG87XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4uYnRuIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgcGFkZGluZzogMTJweCAxNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBtYXJnaW46IDA7XG4gIGJveC1zaGFkb3c6IDJweCAycHggM3B4IDAgcmdiYSgxODcsIDE4NywgMTg3LCAwLjMpO1xufVxuLmJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDA2Njk5O1xuICBjb2xvcjogIzAwNjY5OTtcbn1cbi5idG46aG92ZXIuYnRuLS1pY29uIC5pY29uIHtcbiAgYm9yZGVyLWNvbG9yOiAjMDA2Njk5O1xufVxuLmJ0bjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDA2Njk5O1xuICBjb2xvcjogIzAwNjY5OTtcbiAgcGFkZGluZy1ib3R0b206IDExcHg7XG59XG4uYnRuLmFjdGl2ZSB7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMDAyMjMzO1xuICBwYWRkaW5nLWJvdHRvbTogMTFweDtcbn1cbi5idG4uYnRuLS1tZW51LWl0ZW0ge1xuICBtYXJnaW46IDA7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uYnRuLmJ0bi0tbWVudS1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMDtcbn1cbi5idG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmJvZHkgPiAuY29udGFpbmVyLmxvZ2luIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogNTUwcHg7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjZW50ZXI7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIG1hcmdpbjogMzVweCAwIDAgMDtcbiAgbWF4LXdpZHRoOiBpbml0aWFsO1xufVxuLmxvZ2luLXRpdGxlIHtcbiAgcGFkZGluZzogMzVweCA0NXB4IDAgNDVweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiA0OHB4O1xuICBsaW5lLWhlaWdodDogNTVweDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0MjBweCkge1xuICAubG9naW4tdGl0bGUge1xuICAgIHBhZGRpbmc6IDM1cHggMjVweCAwIDI1cHg7XG4gIH1cbn1cbi5sb2dpbi1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMjVweDtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogNDUlO1xuICBwYWRkaW5nOiAyNXB4IDUwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzU2cHgpIHtcbiAgLmxvZ2luLWNvbnRhaW5lciB7XG4gICAgbGVmdDogNSU7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDQyMHB4KSB7XG4gIC5sb2dpbi1jb250YWluZXIge1xuICAgIGxlZnQ6IDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDI1cHggMjVweDtcbiAgICB0b3A6IDBweDtcbiAgfVxufVxuLmxvZ2luLWNvbnRhaW5lciAja2MtZm9ybS1idXR0b25zIHtcbiAgbWFyZ2luOiAxNXB4IDAgMTVweCAwO1xufVxuLmxvZ2luLWNvbnRhaW5lciAja2MtZm9ybS13cmFwcGVyIC5pbnN0cnVjdGlvbiB7XG4gIG1hcmdpbjogMTVweCAwcHg7XG59XG4ubG9naW4tY29udGFpbmVyIC5rYy1jb250YWluZXIge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuLmxvZ2luLWNvbnRhaW5lciAua2MtY29udGFpbmVyIC5hbGVydCB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuLmxvZ2luLWNvbnRhaW5lciAua2MtY29udGFpbmVyIC5hbGVydC5hbGVydC1lcnJvciB7XG4gIGNvbG9yOiAjZTIwMDFhO1xufVxuLmxvZ2luLWNvbnRhaW5lciAua2MtaGVhZGVyIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc2l6ZTogMjVweDtcbn1cbi5sb2dpbi1jb250YWluZXIgLmtjLWxhYmVsLXdyYXBwZXIge1xuICBtYXJnaW46IDAgMCA1cHggMDtcbn1cbi5sb2dpbi1jb250YWluZXIgLmtjLWlucHV0LXdyYXBwZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufVxuLmxvZ2luLWNvbnRhaW5lciAua2MtaW5wdXQtd3JhcHBlci5yb3cge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuLmxvZ2luLWNvbnRhaW5lciAua2MtaW5wdXQtd3JhcHBlciBpbnB1dCB7XG4gIGJvcmRlcjogbm9uZTtcbiAgaGVpZ2h0OiA0OHB4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG4ubG9naW4tY29udGFpbmVyIC5pbnB1dC1pY29uIHtcbiAgd2lkdGg6IDQ1cHg7XG4gIGhlaWdodDogNDVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcbiAgcGFkZGluZzogMTVweDtcbn1cbi5sb2dpbi1jb250YWluZXIgLmlucHV0LWljb24gLmljb24ge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICBmaWxsOiBncmV5O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLmxvZ2luLWNvbnRhaW5lciBpbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmxvZ2luLWNvbnRhaW5lciAucmUtbG9naW4ge1xuICBwYWRkaW5nOiAyMHB4IDA7XG59XG4ubG9naW4tY29udGFpbmVyIC5zb2NpYWwtbG9naW4ge1xuICBtYXJnaW4tdG9wOiAyNXB4O1xufVxuLmxvZ2luLWNvbnRhaW5lciAuc29jaWFsLWxvZ2luIC56b2NpYWwge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmxvZ2luLWNvbnRhaW5lciAuc29jaWFsLWxvZ2luIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuLmxvZ2luLWNvbnRhaW5lciAuc29jaWFsLWxvZ2luID4gdWwgPiBsaSA+IGEgPiAqIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxvZ2luLWZvb3RlciB7XG4gIG1pbi1oZWlnaHQ6IDE0MHB4O1xuICBwYWRkaW5nOiA1MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgY29sb3I6ICM0YTRhNGE7XG59XG4ubG9naW4tZm9vdGVyIC5sb2dvLWNvbnRhaW5lciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5sb2dpbi1mb290ZXIgLmxvZ28tY29udGFpbmVyIC5sb2dvIHtcbiAgbWFyZ2luOiAxMHB4O1xuICBtYXgtaGVpZ2h0OiA5MHB4O1xufVxuLmxvZ2luLWZvb3RlciBwIHtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cbi5rYy1sb2NhbGUubWVudSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRvcDogMjBweDtcbn1cbi5tZW51IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLm1lbnUgLm1lbnUtaXRlbXMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZW51IC5tZW51LWl0ZW1zIGxpIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFMEUwRTA7XG59XG4ubWVudSAubWVudS1pdGVtcyBsaTpsYXN0IHtcbiAgYm9yZGVyOiBub25lO1xufVxuLm1lbnUub3BlbiAubWVudS1pdGVtcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmNvbnRhaW5lciB7XG4gIHBhZGRpbmctbGVmdDogMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAwcHg7XG59XG4iLCIvKlxuLS0tXG5uYW1lOiAuc3RyZXRjaFxuY2F0ZWdvcnk6IFNoYXJlZC9IZWxwZXJzXG50YWc6XG4gLSBoZWxwZXJzXG4tLS1cblxuYC5zdHJldGNoYCBEZWZpbmUgYW4gZWxlbWVudCB3aGljaCBzdHJldGNoZXMgdG8gdGhlIHNpemUgb2YgaXRzIHBhcmVudFxuXG5gYGBodG1sXG48ZGl2IGNsYXNzPVwicmVsXCIgc3R5bGU9XCJoZWlnaHQ6IDU1cHg7XCI+XG4gICA8ZGl2IGNsYXNzPVwic3RyZXRjaCBzdHlsZWd1aWRlLWdyaWQtdW5pdFwiPiBJJ20gc3RyZXRjaGVkIHRvIHRoZSBzaXplIG9mIG15IHBhcmVudDwvZGl2PlxuPC9kaXY+XG5gYGBcbiovXG4uc3RyZXRjaCB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRsZWZ0OiAwO1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xufVxuXG5cbi8qXG4tLS1cbm5hbWU6IC5hYnNcbmNhdGVnb3J5OiBTaGFyZWQvSGVscGVyc1xudGFnOlxuIC0gaGVscGVyc1xuLS0tXG5cbmAuYWJzYCBTZXQgdGhlIGVsZW1lbnQgcG9zaXRpb24gdG8gYWJzb2x1dGVcbiovXG4uYWJzIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xufVxuXG5cbi8qXG4tLS1cbm5hbWU6IC5yZWxcbmNhdGVnb3J5OiBTaGFyZWQvSGVscGVyc1xudGFnOlxuIC0gaGVscGVyc1xuLS0tXG5cbmAucmVsYCBTZXQgdGhlIGVsZW1lbnQgcG9zaXRpb24gdG8gcmVsYXRpdmVcbiovXG4ucmVsIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG5cbi8qXG4tLS1cbm5hbWU6IC52Y2VudGVyXG5jYXRlZ29yeTogU2hhcmVkL0hlbHBlcnNcbnRhZzpcbiAtIGhlbHBlcnNcbi0tLVxuXG5gLnZjZW50ZXJgIFNldHMgdmVydGljYWwtYWxpZ24gdG8gbWlkZGxlXG4qL1xuLnZjZW50ZXIge1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG5cbi8qXG4tLS1cbm5hbWU6IC5oY2VudGVyXG5jYXRlZ29yeTogU2hhcmVkL0hlbHBlcnNcbnRhZzpcbiAtIGhlbHBlcnNcbi0tLVxuXG5gLmhjZW50ZXJgIFNldHMgdGV4dC1hbGlnbiB0byBjZW50ZXJcbiovXG4uaGNlbnRlciB7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuXG4vKlxuLS0tXG5uYW1lOiAuZmxvYXRsZWZ0XG5jYXRlZ29yeTogU2hhcmVkL0hlbHBlcnNcbnRhZzpcbiAtIGhlbHBlcnNcbi0tLVxuXG5gLmZsb2F0bGVmdGAgU2V0cyBmbG9hdCB0byBsZWZ0XG4qL1xuLmZsb2F0bGVmdCB7XG5cdGZsb2F0OiBsZWZ0O1xufVxuXG4vKlxuLS0tXG5uYW1lOiAuZmxvYXRyaWdodFxuY2F0ZWdvcnk6IFNoYXJlZC9IZWxwZXJzXG50YWc6XG4gLSBoZWxwZXJzXG4tLS1cblxuYC5mbG9hdHJpZ2h0YCBTZXRzIGZsb2F0IHRvIHJpZ2h0XG4qL1xuLmZsb2F0cmlnaHQge1xuXHRmbG9hdDogcmlnaHQ7XG59XG5cbi8qXG4tLS1cbm5hbWU6IC5oaWRkZW5cbmNhdGVnb3J5OiBTaGFyZWQvSGVscGVyc1xudGFnOlxuIC0gaGVscGVyc1xuLS0tXG5cbmAuaGlkZGVuYCBTZXRzIGRpc3BsYXkgdG8gbm9uZS5cbiovXG4uaGlkZGVuIHtcblx0ZGlzcGxheTogbm9uZTtcbn0iLCIvKlxuLS0tXG5uYW1lOiBHbG9iYWwgUmVzZXRcbmNhdGVnb3J5OiBTaGFyZWRcbi0tLVxuXG5UaGUgbGVybmV0eiBjc3MgbGlicmFyeSBoYXMgYSBzZXQgb2YgcmVzZXQgc3R5bGUgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgb24gZXZlcnkgYnJvd3Nlci5cbkZ1cnRoZXJtb3JlIHRoaXMgcmVzZXQgc2V0cyBzb21lIGdsb2JhbCB2YXJpYWJsZXMgbGlrZTpcbiAqIGJvZHkgZm9udC1mYW1pbGllc1xuICogYm9keSBsaW5lLWhlaWdodFxuICogYm9keSB0ZXh0LXJlbmRlcmluZ1xuICogOnJvb3QgZm9udC1zaXplIGZvciBwcm9wZXIgcmVtIGNvbnZlcnNpb25cbiovXG5cblxuXG5odG1sLCBib2R5LCBkaXYsIHNwYW4sIG9iamVjdCwgaWZyYW1lLFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxuYWJiciwgYWRkcmVzcywgY2l0ZSwgY29kZSxcbmRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgc2FtcCxcbnNtYWxsLCBzdHJvbmcsIHN1Yiwgc3VwLCB2YXIsXG5iLCBpLFxuZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcbmZpZWxkc2V0LCBmb3JtLCBsYWJlbCwgbGVnZW5kLFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXG5hcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsXG5mb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24sIHN1bW1hcnksXG50aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xuXHRtYXJnaW46MDtcblx0cGFkZGluZzowO1xuXHRib3JkZXI6MDtcblx0b3V0bGluZTowO1xuXHRmb250LXNpemU6aW5oZXJpdDtcblx0dmVydGljYWwtYWxpZ246YmFzZWxpbmU7XG59XG5cbjpyb290IHtcblx0Zm9udC1zaXplOiAxNnB4O1xufVxuXG5odG1sIHtcblx0Zm9udC1zaXplOiAxMDAlO1xufVxuXG5ib2R5IHtcblx0bGluZS1oZWlnaHQ6IEB0ZXh0LWxpbmUtaGVpZ2h0O1xuXHRjb2xvcjogQHRleHQtY29sb3I7XG5cdGZvbnQtZmFtaWx5OiBAZm9udC1mYW1pbHk7XG5cdHRleHQtcmVuZGVyaW5nOiBAdGV4dC1yZW5kZXJpbmc7XG5cdGJhY2tncm91bmQtY29sb3I6IEBib2R5LWNvbG9yO1xufVxuXG5hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsXG5mb290ZXIsaGVhZGVyLGhncm91cCxtZW51LG5hdixzZWN0aW9uIHtcblx0ZGlzcGxheTpibG9jaztcbn1cblxuXG5zZWxlY3Qge1xuXHR2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XG59XG5cbnRleHRhcmVhIHtcblx0d2lkdGg6MTAwJTtcbn1cblxudGFibGUge1xuXHRib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7XG5cdGJvcmRlci1zcGFjaW5nOjA7XG59XG5cbi8vXG4vLyAxLiBDb3JyZWN0IGNvbG9yIG5vdCBiZWluZyBpbmhlcml0ZWQuXG4vLyAgICBLbm93biBpc3N1ZTogYWZmZWN0cyBjb2xvciBvZiBkaXNhYmxlZCBlbGVtZW50cy5cbi8vIDIuIENvcnJlY3QgZm9udCBwcm9wZXJ0aWVzIG5vdCBiZWluZyBpbmhlcml0ZWQuXG4vLyAzLiBBZGRyZXNzIG1hcmdpbnMgc2V0IGRpZmZlcmVudGx5IGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGNvbG9yOiBpbmhlcml0OyAvLyAxXG4gIGZvbnQ6IGluaGVyaXQ7IC8vIDJcbiAgbWFyZ2luOiAwOyAvLyAzXG59XG5cblxuLy9cbi8vIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBib3JkZXIgaW4gRmlyZWZveCA0Ky5cbi8vXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG5cblxuLypcbiAqIE5vcm1hbGl6ZSB0aGUgYmVoYXZpb3VyIG9mIGFsbCBicm93c2Vyc1xuICpcbiAqIEluc3RlYWQgb2Ygc2V0dGluZyBib3gtc2l6aW5nIGZpeCBvbiBhbGwgZWxlbWVudHMgd2Ugb25seSBzZXQgaXQgb24gdGhlIHJvb3QgZWxlbWVudFxuICogYW5kIHRlbGwgYWxsIGVsZW1lbnRzIHRvIGluaGVyaXQgaXQncyBwcm9wZXJ0eSBmcm9tIHRoZSBwYXJlbnRcbiAqIFRoYXQgd2F5IGl0J3MgcG9zc2libGUgdG8gb3ZlcndyaXRlIHRoZSBib3gtc2l6aW5nIGFueXdoZXJlIHdoaWxlIGtlZXBpbmcgcHJvcGVyIGluaGVyaXRhbmNlXG4gKi9cbmh0bWwge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuXG5hIHtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRjb2xvcjogQGFjdGlvbi1jb2xvcjtcblxuXHQ+ICoge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG59XG4iLCIvKlxuLS0tXG5uYW1lOiAuYnV0dG9uLWRlZmF1bHRcbmNhdGVnb3J5OiBCdXR0b25zL0RlZmF1bHRcbnRhZzpcbiAtIGNvbXBvbmVudFxuIC0gYnV0dG9uXG4tLS1cblxuVGhlIGRlZmF1bHQgYnV0dG9uIHNldHMgc29tZSBiYXNpYyBwcm9wZXJ0aWVzIHNvIGl0IGlzIHdvcmtpbmcgYXMgYSBgYnV0dG9uYCBvciBgYWAgdGFnLlxuXG5BbiBleGFtcGxlIGZvciBhIGJ1dHRvbjpcbmBgYGphZGVcbmJ1dHRvbi5idXR0b24tZGVmYXVsdCBNeSBCdXR0b25cbmBgYFxuXG5BbiBleGFtcGxlIGZvciBhIGxpbms6XG5gYGBqYWRlXG5hLmJ1dHRvbi1kZWZhdWx0IE15IExpbmtcbmBgYFxuKi9cbi5idXR0b24tZGVmYXVsdCB7XG5cdGFwcGVhcmFuY2U6IG5vbmU7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRib3JkZXI6IG5vbmU7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRvdXRsaW5lOiBub25lO1xufSIsIi8qXG4tLS1cbm5hbWU6IC5ncmlkXG5jYXRlZ29yeTogTGF5b3V0L0dyaWRcbnRhZzpcbiAtIGNvbXBvbmVudFxuIC0gcmVzcG9uc2l2ZVxuY29tcGlsZTogdHJ1ZVxuLS0tXG5cbkEgc2ltcGxlIGdyaWQgc3lzdGVtIHRoYXQgd3JhcHMgY2hpbGRyZW4gbm9kZXMgYmFzZWQgb24gdGhlIHZpZXdwb3J0IHdpZHRoLlxuXG4jIyBTaW1wbGUgc2lkZSBieSBzaWRlIHJlbmRlcmluZ1xuXG5UaGUgZWFzaWVzdCB1c2UgY2FzZSBpcyB0byB1c2Ugc2ltcGxlIGAuY29sLTFgLCBgLmNvbC0xLTJgLCBgLmNvbC0xLTNgLCBgLmNvbC0xLTRgIGZvciBhIHNpZGUtYnktc2lkZSByZW5kZXJpbmcuXG5UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGNoaWxkIGVsZW1lbnRzIG9mIGEgYC5ncmlkYCBpcyBlcXVpdmFsZW50IHRvIGAuY29sLTFgLCBzbyBmb3Igb25seSBvbmUgY2hpbGQgaXQgd2lsbCBzcGFuIHRoZSBmdWxsIHdpZHRoLlxuXG5gYGBqYWRlXG5kaXYuZ3JpZFxuXHRkaXYuY29sLTEtMiBcblx0XHRkaXYuYWlnaXMtZGVidWcgY29sLTEtMlxuXHRkaXYuY29sLTEtMlxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBjb2wtMS0yXG5gYGBcbmBgYGphZGVcbmRpdi5ncmlkXG5cdGRpdi5jb2wtMS00IFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBjb2wtMS00XG5cdGRpdi5jb2wtMy00XG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0zLTRcbmBgYFxuXG4jIyBMYXlvdXRzIG9uIGRpZmZlcmVudCBkZXZpY2VzXG5cblRoZSBicmVha3BvaW50cyBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcyBhcmUgc3BlY2lmaWVkIGluIHRoZSBgQGdyaWQtYnJlYWstcG9pbnRzYCwgYEBncmlkLWJyZWFrLWxhYmVsc2AgdmFyaWFibGVzLlxuVGhlIGRlZmF1bHQgdmFsdWVzIGRlZmluZSB0d28gYnJlYWtwb2ludHMgd2l0aCBsYWJlbHM6IGAubWVkaXVtLVgtWGAgYW5kIGAubGFyZ2UtWC1YYC5cblNvIGFuIGV4YW1wbGUgZ3JpZCB3aXRoIHR3byBicmVha3BvaW50cyBsb29rcyBsaWtlIHRoaXM6XG5cbmBgYGphZGVcbmRpdi5ncmlkXG5cdGRpdi5tZWRpdW0tMS0yLmxhcmdlLTEtNC54bGFyZ2UtMS0yXG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0xIG1lZGl1bS0xLTIgbGFyZ2UtMS00XG5cdGRpdi5tZWRpdW0tMS0yLmxhcmdlLTEtNC54bGFyZ2UtMS0yXG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0xIG1lZGl1bS0xLTIgbGFyZ2UtMS00XG5cdGRpdi5jb2wtMS0yLm1lZGl1bS0xLTIubGFyZ2UtMS00LnhsYXJnZS0xLTJcblx0XHRkaXYuYWlnaXMtZGVidWcgY29sLTEtMiBtZWRpdW0tMS0yIGxhcmdlLTEtNFxuXHRkaXYuY29sLTEtMi5tZWRpdW0tMS0yLmxhcmdlLTEtNC54bGFyZ2UtMS0yXG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIGNvbC0xLTIgbWVkaXVtLTEtMiBsYXJnZS0xLTRcbmBgYFxuXG4qKk5vdGU6KiogVGhlIGBjb2wtMWAgY2xhc3NlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGZpcnN0IHR3byBub2Rlcywgc2luY2UgdGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuXG5cblxuIyMgUmV2ZXJzZSBvcmRlclxuXG5UbyByZXZlcnNlIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY29sdW1ucyBhcmUgZGlzcGxheWVkLCB5b3UgY2FuIGFkZCB0aGUgbW9kaWZpZXIgY2xhc3MgYC4tcmV2ZXJzZWAgdG8geW91ciBncmlkLlxuVGhlIGNvbHVtbnMgd2lsbCBiZSBpbiBET00gb3JkZXIgd2hlbiB2aWV3cG9ydCBzd2l0Y2hlcyB0byBzbWFsbCBsYXlvdXQuXG5cbmBgYGphZGVcbmRpdi5ncmlkLi1yZXZlcnNlXG5cdGRpdi5jb2wtMS00XG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIEZpcnN0IGNvbHVtbiBpbiBET01cblx0ZGl2LmNvbC0xLTRcblx0XHRkaXYuYWlnaXMtZGVidWcgU2Vjb25kIGNvbHVtbiBpbiBET01cblx0ZGl2LmNvbC0xLTRcblx0XHRkaXYuYWlnaXMtZGVidWcgVGhpcmQgY29sdW1uIGluIERPTVxuXHRkaXYuY29sLTEtNFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBGb3VydGggY29sdW1uIGluIERPTVxuYGBgXG4jIyBObyBndXR0ZXJcblxuSWYgeW91IGRvbnQgbmVlZCBhIHNwYWNpbmcvZ3V0dGVyIGJldHdlZW4gdGhlIGdyaWQgY29sdW1ucyB5b3UgY2FuIHVzZSB0aGUgbW9kaWZpZXIgYC4tbm9ndXR0ZXJgLlxuXG5gYGBqYWRlXG5kaXYuZ3JpZC4tbm9ndXR0ZXJcblx0ZGl2LmNvbC0xLTRcblx0XHRkaXYuYWlnaXMtZGVidWcgRmlyc3QgY29sdW1uIGluIERPTVxuXHRkaXYuY29sLTEtNFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBTZWNvbmQgY29sdW1uIGluIERPTVxuXHRkaXYuY29sLTEtNFxuXHRcdGRpdi5haWdpcy1kZWJ1ZyBUaGlyZCBjb2x1bW4gaW4gRE9NXG5cdGRpdi5jb2wtMS00XG5cdFx0ZGl2LmFpZ2lzLWRlYnVnIEZvdXJ0aCBjb2x1bW4gaW4gRE9NXG5gYGBcbiovXG5cbi5ncmlkIHtcblxuXHRtYXJnaW46IDAgLUBncmlkLWd1dHRlci8yO1xuXG5cdCY6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdFx0Y2xlYXI6IGJvdGg7XG5cdH1cblxuXHQ+ICoge1xuXHRcdGZsb2F0OiBsZWZ0O1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHR3aWR0aDoxMDAlO1xuXHRcdHBhZGRpbmc6IDAgQGdyaWQtZ3V0dGVyLzI7XG5cdH1cblxuXHQmLi1yZXZlcnNlID4gKiB7XG5cdFx0ZmxvYXQ6cmlnaHQ7XG5cdH1cblxuXG5cdCYuLW5vZ3V0dGVyIHtcblx0XHRtYXJnaW46IDA7XG5cblx0XHQ+ICoge1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHR9XG5cdH1cblxuXG5cdC5jb2wtMSB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdH1cblx0LmNvbC0xLTIge1xuXHRcdHdpZHRoOiAxMDAlLzI7XG5cdH1cblx0LmNvbC0xLTMge1xuXHRcdHdpZHRoOiAxMDAlLzMqMTtcblx0fVxuXHQuY29sLTItMyB7XG5cdFx0d2lkdGg6IDEwMCUvMyoyO1xuXHR9XG5cdC5jb2wtMS00IHtcblx0XHR3aWR0aDogMTAwJS80KjE7XG5cdH1cblx0LmNvbC0zLTQge1xuXHRcdHdpZHRoOiAxMDAlLzQqMztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZSBhbGwgbWVkaWEgYnJlYWtwb2ludHMgYmFzZWQgb24gdGhlIEBncmlkLWJyZWFrLXBvaW50cywgQGdyaWQtYnJlYWstbGFiZWxzIHZhcmlhYmxlcy5cblx0ICovXG5cdC5mb3IoIEBncmlkLWJyZWFrLXBvaW50cywge1xuXG5cdFx0QGxhYmVsOiBleHRyYWN0KCBAZ3JpZC1icmVhay1sYWJlbHMsIEBpICk7XG5cblx0XHRAbWVkaWEgYWxsIGFuZCAoIG1pbi13aWR0aDogQHZhbHVlICkge1xuXG5cdFx0XHQ+IC5Ae2xhYmVsfS0xIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHR9XG5cblx0XHRcdD4gLkB7bGFiZWx9LTEtMiB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlLzI7XG5cdFx0XHR9XG5cblx0XHRcdD4gLkB7bGFiZWx9LTEtMyB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlLzMqMTtcblx0XHRcdH1cblxuXHRcdFx0PiAuQHtsYWJlbH0tMi0zIHtcblx0XHRcdFx0d2lkdGg6IDEwMCUvMyoyO1xuXHRcdFx0fVxuXG5cdFx0XHQ+IC5Ae2xhYmVsfS0xLTQge1xuXHRcdFx0XHR3aWR0aDogMTAwJS80KjE7XG5cdFx0XHR9XG5cblx0XHRcdD4gLkB7bGFiZWx9LTMtNCB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlLzQqMztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufSIsIi8qXG4tLS1cbm5hbWU6IGltZy5yZXNwb25zaXZlXG5jYXRlZ29yeTogTGF5b3V0L0ltYWdlXG50YWc6XG4gLSByZXNwb25zaXZlXG5jb21waWxlOiB0cnVlXG4tLS1cblxuVGhpcyBjbGFzcyBtYWtlcyB0aGUgaW1hZ2Ugc2NhbGluZyB0byBpdHMgbWF4IHdpZHRoLlxuXG5gYGBqYWRlXG5pbWcucmVzcG9uc2l2ZShzcmM9J2h0dHA6Ly93d3cuYnl1aS5lZHUvaW1hZ2VzL2FncmljdWx0dXJlLWxpZmUtc2NpZW5jZXMvZmxvd2VyLmpwZycpXG5gYGBcbiovXG5pbWcucmVzcG9uc2l2ZSB7XG5cdG1heC13aWR0aDogMTAwJTtcblx0aGVpZ2h0OiBhdXRvO1xufVxuIiwiLypcbi0tLVxubmFtZTogLm1lZGlhLXJlc3BvbnNpdmVcbmNhdGVnb3J5OiBMYXlvdXQvTWVkaWFcbnRhZzpcbiAtIHJlc3BvbnNpdmVcbmNvbXBpbGU6IHRydWVcbi0tLVxuXG5gLm1lZGlhLXJlc3BvbnNpdmVgIC0gVGhpcyBtYWtlcyBhIHRoZSBgLm1lZGlhLXJlc3BvbnNpdmVgIGRpdiBhIGNvbnRhaW5lciBmb3IgYW55IG1lZGlhIGVsZW1lbnQgKGlmcmFtZSwgdmlkZW8sIC4uLiApIHRoYXQgcmVzcG9uc2l2ZSBzY2FsZXMgd2l0aCBhIGZpeCByYXRpby5cblRoZSBtZWRpYSBlbGVtZW50ICggY2hpbGQgKSBuZWVkcyB0aGUgY2xhc3MgYC5zdHJldGNoYCB0byBmdWxseSBmaWxsIG91dCB0aGUgcGFyZW50cyBzaXplLlxuXG5UaGUgYC5tZWRpYS1yZXNwb25zaXZlYCBjb21wb25lbnQgaGFzIHRvIHByZWRlZmluZWQgbW9kaWZpZXJzOiBgLi1tZWRpYS00LTNgLCBgLi1tZWRpYS0xNi05YCB0aGF0IGRlZmluZSBhIGZpeCByYXRpby5cblxuYGBgamFkZVxuZGl2Lm1lZGlhLXJlc3BvbnNpdmUuLW1lZGlhLTE2LTlcblx0aWZyYW1lLnN0cmV0Y2goc3JjPVwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1UQ2Q2UGZ4T3kwWVwiKVxuYGBgXG4qL1xuLm1lZGlhLXJlc3BvbnNpdmUge1xuXHR3aWR0aDogMTAwJTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRwYWRkaW5nLWJvdHRvbTogNTAlO1xuXG5cdCYuLW1lZGlhLTQtMyB7XG5cdFx0cGFkZGluZy1ib3R0b206IDc1JTtcblx0fVxuXG5cdCYuLW1lZGlhLTE2LTkge1xuXHRcdHBhZGRpbmctYm90dG9tOiA1Ni4yNiVcblx0fVxufVxuIiwiLypcbi0tLVxubmFtZTogLnBhZ2UtZmx1aWRcbmNhdGVnb3J5OiBQYWdlL0ZsdWlkXG50YWc6XG4gLSByZXNwb25zaXZlXG5jb21waWxlOiB0cnVlXG4tLS1cblxuYC5wYWdlLWZsdWlkYCBjZW50ZXJzIHRoZSBwYWdlIGNvbnRlbnQgYW5kIGFkZHMgYSBwYWRkaW5nIHNvIHRoZSBwYWdlIHN0aWNrcyBub3QgdG8gdGhlIGJyb3dzZXIgdmlld3BvcnQuXG5GdXJ0aGVybW9yZSBpdCBoYXMgYSBtYXgtd2lkdGggYmFzZWQgb24gdGhlIGxhc3QgYEBncmlkLWJyZWFrLXBvaW50c2AgdmFsdWUuXG5cbmBgYGphZGVcbmRpdi5wYWdlLWZsdWlkXG5cdGRpdi5haWdpcy1kZWJ1ZyBTb21lIHBhZ2UgY29udGVudFxuYGBgXG5cbiMjIE1heC13aWR0aCBwYWdlXG5cblRvIGJyb2FkZW4gdGhlIHdpZHRoIG9mIHRoZSBwYWdlIHlvdSBjYW4gYWRkIHRoZSBtb2RpZmllciBgLi11bmxpbWl0ZWRgLiBUaHNpIHdpbGwgc3BhbiB0aGUgcGFnZSB0byB0aGUgZnVsbCB3aWR0aC5cblxuYGBgamFkZVxuZGl2LnBhZ2UtZmx1aWQuLXVubGltaXRlZFxuXHRkaXYuYWlnaXMtZGVidWcgU29tZSBwYWdlIGNvbnRlbnRcbmBgYFxuKi9cbi5wYWdlLWZsdWlkIHtcblxuXHRAbWF4LXdpZHRoLXBvaW50OiBleHRyYWN0KCBAZ3JpZC1icmVhay1wb2ludHMsIGxlbmd0aCggQGdyaWQtYnJlYWstcG9pbnRzICkgKTtcblx0XG5cdG1heC13aWR0aDogQG1heC13aWR0aC1wb2ludCArIDIgKiBleHRyYWN0KCBAcGFnZS1wYWRkaW5nLCAyICk7XG5cdG1hcmdpbjogYXV0bztcblx0cGFkZGluZzogQHBhZ2UtcGFkZGluZztcblxuXHQmLi11bmxpbWl0ZWQge1xuXHRcdG1heC13aWR0aDogbm9uZTtcblx0fVxufVxuIiwiLypcbi0tLVxubmFtZTogLnJvd1xuY2F0ZWdvcnk6IExheW91dC9Sb3dcbnRhZzpcbiAtIGNvbXBvbmVudFxuY29tcGlsZTogdHJ1ZVxuLS0tXG5cblRoaXMgc3R5bGluZyBhbGxvdyB0byBwbGFjZSBjb250YWluZXJzIGluIGEgcm93LiBUaGV5IHdpbGwgKipub3QqKiBicmVhayBhcyB0aGUgYC5ncmlkYCBidXQgcmVzaXplIHRoZW0gYWNjb3JkaW5nbHkuXG5Tb21lIGJlbmVmaXRzIG9mIHRoZSBgLnJvd2AgYXBwcm9hY2ggaXMgdGhlIGVhc3kgdmVydGljYWwgY2VudGVyaW5nIGFuZCB0aGUgdXNhZ2Ugb2YgdGhlIGAuY29sLWF1dG9gIGNsYXNzLlxuXG4jIyBCYXNpYyByb3cgd2l0aCB2ZXJ0aWNhbCBjZW50ZXJpbmdcblxuWW91IGNhbiB1c2UgdGhlIHNpemluZyBjbGFzc2VzIGAuY29sLVgtWGAgdG8gZGVmaW5lIHRoZSB3aWR0aCBvZiBhIGNvbHVtbiBhcyB0aGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MuIFxuXG5gYGBqYWRlXG5kaXYucm93XG5cdGRpdi5jb2wtMS00LmFpZ2lzLWRlYnVnIGNvbC0xLTQgd2l0aCBhIGxvdCBvZiB0ZXh0IHRoYXQgc3BhbnMgdGhlIGNvbHVtbi5cblx0ZGl2LmNvbC0zLTQuYWlnaXMtZGVidWcgY29sLTMtNCBjb250ZW50LlxuYGBgXG5cbiMjIEZpeGVkIHJvd1xuXG5UaGVyZSBpcyBhIGAuLWZpeGVkYCBtb2RpZmllciB3aGVyZSBlYWNoIGNvbHVtbiBoYXMgdGhlIHNhbWUgd2lkdGguXG5cbmBgYGphZGVcbmRpdi5yb3cuLWZpeGVkXG5cdGRpdi5haWdpcy1kZWJ1ZyBldmVubHkgc3ByZWFkb3V0IGNvbHVtblxuXHRkaXYuYWlnaXMtZGVidWcgZXZlbmx5IHNwcmVhZG91dCBjb2x1bW4gd2l0aCBtb3JlIGNvbnRlbnRcblx0ZGl2LmFpZ2lzLWRlYnVnIGV2ZW5seSBzcHJlYWRvdXQgY29sdW1uXG5cdGRpdi5haWdpcy1kZWJ1ZyBldmVubHkgc3ByZWFkb3V0IGNvbHVtbiB3aXRoIG11Y2ggbW9yZSBjb250ZW50IHRoYW4gdGhlIG90aGVyXG5cdGRpdi5haWdpcy1kZWJ1Zy52Y2VudGVyIGV2ZW5seSBzcHJlYWRvdXQgY29sdW1uIHdpdGggLnZjZW50ZXJcbmBgYFxuXG5cbiMjIEF1dG8gc2l6ZWQgY29sdW1uIHdpZHRoIGFuZCB2Y2VudGVyXG5cblRoZXJlIGlzIGEgc3BlY2lhbCBgLmNvbC1hdXRvYCBjbGFzcyB0aGF0IHJlc2l6ZXMgdGhlIGNvbHVtbiB0byB0aGUgc2l6ZSBvZiBpdHMgY29udGVudC5cblRoaXMgaXMgdXNlZnVsbCBmb3IgZXhhbXBsZSBpZiB5b3UgaGF2ZSBhIGZpeGVkIHNpemUgbG9nbyBhbmQgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciBoYXMgdG8gcmVzaXplLlxuXG5gYGBqYWRlXG5kaXYucm93Li1jZW50ZXJcblx0ZGl2LmNvbC1hdXRvLmFpZ2lzLWRlYnVnXG5cdFx0aW1nKHNyYz1cImh0dHA6Ly9wbGFjZWhvbGQuaXQvMTAweDEwMFwiKVxuXHRkaXYuY29sLTEuYWlnaXMtZGVidWcgVGhlIHJlc3Rcblx0ZGl2LmNvbC1hdXRvLmFpZ2lzLWRlYnVnXG5cdFx0aW1nKHNyYz1cImh0dHA6Ly9wbGFjZWhvbGQuaXQvMjAweDEwMFwiKVxuYGBgXG4qL1xuLnJvdyB7XG5cdGRpc3BsYXk6IHRhYmxlO1xuXHR3aWR0aDogMTAwJTtcblxuXHQmLi1maXhlZCB7XG4gICAgXHR0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuXHR9XG5cblx0Ji4tY2VudGVyIHtcblx0XHQ+ICoge1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR9XG5cdH1cblxuXHQmLi1ib3R0b20ge1xuXHRcdD4gKiB7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuXHRcdH1cblx0fVxuXG5cdCYuLXBhZGRlZCB7XG5cdFx0PiAqICsgKiB7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IEByb3ctZ3V0dGVyO1xuXHRcdH1cblx0fVxuXHRcblx0PiAqIHtcblx0XHRkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXHRcdFxuXHRcdCYuY29sLTEge1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0fVxuXHRcdCYuY29sLTEtMixcblx0XHQmLmNvbC0yLTQge1xuXHRcdFx0d2lkdGg6IDEwMCUvMjtcblx0XHR9XG5cdFx0Ji5jb2wtMS0zIHtcblx0XHRcdHdpZHRoOiAxMDAlLzMqMTtcblx0XHR9XG5cdFx0Ji5jb2wtMi0zIHtcblx0XHRcdHdpZHRoOiAxMDAlLzMqMjtcblx0XHR9XG5cdFx0Ji5jb2wtMS00IHtcblx0XHRcdHdpZHRoOiAxMDAlLzQqMTtcblx0XHR9XG5cdFx0Ji5jb2wtMy00IHtcblx0XHRcdHdpZHRoOiAxMDAlLzQqMztcblx0XHR9XG5cdFx0XG5cdFx0Ji5jb2wtYXV0byB7XG5cdFx0XHR3aWR0aDphdXRvO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHR9XG5cdH1cbn1cblxuXG4iLCJcblxuLmJ0biB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkIEBib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHBhZGRpbmc6IDEycHggMTZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBtYXJnaW46IDA7XG4gIGJveC1zaGFkb3c6IDJweCAycHggM3B4IDAgcmdiYSgxODcsMTg3LDE4NywwLjMpO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBzZWxlY3RlZC1jb2xvcjtcbiAgICBjb2xvcjogQHNlbGVjdGVkLWNvbG9yO1xuXG4gICAgJi5idG4tLWljb24gLmljb24ge1xuICAgICAgYm9yZGVyLWNvbG9yOiBAc2VsZWN0ZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyOiAxcHggc29saWQgQHNlbGVjdGVkLWNvbG9yO1xuICAgIGNvbG9yOiBAc2VsZWN0ZWQtY29sb3I7XG4gICAgcGFkZGluZy1ib3R0b206IDExcHg7XG4gIH1cblxuICAmLmFjdGl2ZSB7XG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGRhcmtlbiggQHNlbGVjdGVkLWNvbG9yLCAyMCUgKTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTFweDtcbiAgfVxuXG4gICYuYnRuLS1tZW51LWl0ZW0ge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYm9yZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG5cbiAgJi5oaWRkZW4ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIlxuYm9keSA+IC5jb250YWluZXJ7XG5cblx0Ji5sb2dpbntcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0bWluLWhlaWdodDogNTUwcHg7XG5cdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblx0XHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2VudGVyO1xuXHRcdGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG5cdFx0bWFyZ2luOiAzNXB4IDAgMCAwO1xuXHRcdG1heC13aWR0aDogaW5pdGlhbDtcblx0fVxufVxuXG4ubG9naW4tdGl0bGV7XG5cdHBhZGRpbmc6IDM1cHggNDVweCAwIDQ1cHg7XG5cdHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdGZvbnQtc2l6ZTogNDhweDtcblx0bGluZS1oZWlnaHQ6IDU1cHg7XG5cblx0QG1lZGlhKCBtYXgtd2lkdGg6QGJyZWFrcG9pbnQtc21hcnRwaG9uZSApe1xuXHRcdHBhZGRpbmc6IDM1cHggMjVweCAwIDI1cHg7XG5cdH1cblxufVxuXG4ubG9naW4tY29udGFpbmVye1xuXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0dG9wOiAyNXB4O1xuXG5cdEBtZWRpYSggbWF4LXdpZHRoOkBicmVha3BvaW50LXRhYmxldCApe1xuXHRcdGxlZnQ6IDUlO1xuXHRcdHdpZHRoOiA5MCU7XG5cdH1cblxuXHRAbWVkaWEoIG1heC13aWR0aDpAYnJlYWtwb2ludC1zbWFydHBob25lICl7XG5cdFx0bGVmdDogMCU7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0cGFkZGluZzogMjVweCAyNXB4O1xuXHRcdHRvcDogMHB4O1xuXHR9XG5cblx0bGVmdDogNTAlO1xuXHR3aWR0aDogNDUlO1xuXHRwYWRkaW5nOiAyNXB4IDUwcHg7XG5cdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cblx0I2tjLWZvcm0tYnV0dG9ucyB7XG5cdFx0bWFyZ2luOiAxNXB4IDAgMTVweCAwOyBcblx0fVxuXG5cdCNrYy1mb3JtLXdyYXBwZXIge1xuXG5cdFx0Lmluc3RydWN0aW9uIHtcblx0XHRcdG1hcmdpbjogMTVweCAwcHg7XG5cdFx0fVxuXHR9XG5cblx0LmtjLWNvbnRhaW5lcntcblx0XHRtYXJnaW4tdG9wOiAxNXB4O1xuXG5cdFx0LmFsZXJ0e1xuXHRcdFx0bWFyZ2luOiAxMHB4IDA7XG5cblx0XHRcdCYuYWxlcnQtZXJyb3J7XG5cdFx0XHRcdGNvbG9yOiBAYWxlcnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LmtjLWhlYWRlciB7XG5cdFx0dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblx0XHRtYXJnaW4tYm90dG9tOiAyNXB4O1xuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRcdGZvbnQtc2l6ZTogMjVweDtcblx0fVxuXG5cdC5rYy1sYWJlbC13cmFwcGVye1xuXHRcdG1hcmdpbjogMCAwIDVweCAwO1xuXHR9XG5cblx0LmtjLWlucHV0LXdyYXBwZXJ7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2VlZTtcblx0XHRtYXJnaW4tYm90dG9tOiAyNXB4O1xuXHRcdFxuXHRcdCYucm93IHtcblx0XHRcdG1hcmdpbi1sZWZ0OjA7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDA7XG5cdFx0fVxuXG5cdFx0aW5wdXR7XG5cdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0XHRoZWlnaHQ6IDQ4cHg7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDEwcHg7XG5cdFx0fVxuXHR9XG5cblx0LmlucHV0LWljb257XG5cdFx0d2lkdGg6IDQ1cHg7XG5cdFx0aGVpZ2h0OiA0NXB4O1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG5cdFx0cGFkZGluZzogMTVweDtcblxuXHRcdC5pY29uIHtcblx0XHRcdHdpZHRoOiAxNHB4O1xuXHRcdFx0aGVpZ2h0OiAxNHB4O1xuXHRcdFx0ZmlsbDpncmV5O1xuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcblx0XHR9XG5cdH1cblxuXHRpbnB1dHtcblx0XHR3aWR0aDogMTAwJTtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHR9XG5cblx0LnJlLWxvZ2lue1xuXHRcdHBhZGRpbmc6IDIwcHggMDtcblx0fVxuXG5cdC5zb2NpYWwtbG9naW4ge1xuXHRcdFxuXHRcdG1hcmdpbi10b3A6IDI1cHg7XG5cblx0XHQuem9jaWFsIHtcblx0XHRcdG1hcmdpbi10b3A6IDEwcHg7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0XHRmbG9hdDpsZWZ0O1xuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblx0XHR9XG5cblx0XHQ+dWwgPmxpPiBhID4gKiB7XG5cdFx0XHRkaXNwbGF5OmlubGluZS1ibG9jaztcblx0XHR9XG5cblx0fVxufVxuXG5cbi5sb2dpbi1mb290ZXJ7XG5cdG1pbi1oZWlnaHQ6IDE0MHB4O1xuXHRwYWRkaW5nOiA1MHB4O1xuXHR3aWR0aDogMTAwJTtcblx0YmFja2dyb3VuZC1jb2xvcjogcmdiYSggMjQ1LCAyNDUsIDI0NSwgMSApO1xuXHRjb2xvcjogcmdiYSggNzQsIDc0LCA3NCwgMSApO1xuXHRcblx0LmxvZ28tY29udGFpbmVyIHtcblxuXHRcdHRleHQtYWxpZ246Y2VudGVyO1xuXG5cdFx0LmxvZ28ge1xuXHRcdFx0bWFyZ2luOiAxMHB4O1xuXHRcdFx0bWF4LWhlaWdodDogOTBweDtcblx0XHR9XG5cdH1cbiAgICBcblx0cHtcblx0XHRsaW5lLWhlaWdodDogMS41cmVtO1xuXHR9XG59XG5cbi5rYy1sb2NhbGUubWVudXtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRyaWdodDogMjBweDtcblx0dG9wOiAyMHB4O1xufVxuIiwiLm1lbnUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0Lm1lbnUtaXRlbXMge1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR0b3A6IDEwMCU7XG5cdFx0bGVmdDogMDtcblx0XHR6LWluZGV4OiAxMDAwO1xuXHRcdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHRsaSB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgQGJvcmRlci1jb2xvcjtcblxuXHRcdFx0JjpsYXN0IHtcblx0XHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0fSBcblx0XHR9XG5cdH1cblxuXHQmLm9wZW4ge1xuXHRcdC5tZW51LWl0ZW1zIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdH1cblx0fVxuXG5cbn1cbiIsIkBpbXBvcnQgXCJjc3MtbGliL2xlc3Mvc2hhcmVkLyoqLyoubGVzc1wiO1xuQGltcG9ydCBcImNzcy1saWIvbGVzcy9jb21wb25lbnRzL2NvcmUvKiovKi5sZXNzXCI7XG5cbkBpbXBvcnQgXCJsZXJuZXR6LXRoZW1lL3NoYXJlZC8qLmxlc3NcIjtcbkBpbXBvcnQgXCJsZXJuZXR6LXRoZW1lLyoubGVzc1wiO1xuXG5cbi8vIHJlc2V0IGNvbnRhaW5lciBib3JkZXIgb2YgcGF0dGVybmZseS5jc3Ncbi5jb250YWluZXIge1xuXHRwYWRkaW5nLWxlZnQ6IDBweDtcblx0cGFkZGluZy1yaWdodDogMHB4O1xufVxuXG4iXX0= */
