html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
progress {
  vertical-align: baseline;
}
template,
[hidden] {
  display: none;
}
a {
  background-color: transparent;
  -webkit-text-decoration-skip: objects;
}
a:active,
a:hover {
  outline-width: 0;
}
abbr[title] {
  border-bottom: none;
  text-decoration: underline;
  text-decoration: underline dotted;
}
b,
strong {
  font-weight: inherit;
}
b,
strong {
  font-weight: bolder;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background-color: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sub {
  bottom: -0.25em;
}
sup {
  top: -0.5em;
}
img {
  border-style: none;
}
svg:not(:root) {
  overflow: hidden;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
  overflow: visible;
}
button,
input,
select,
textarea {
  font: inherit;
  margin: 0;
}
optgroup {
  font-weight: bold;
}
button,
input {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html [type="button"],
[type="reset"],
[type="submit"] {
  -webkit-appearance: button;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
  border-style: none;
  padding: 0;
}
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
  outline: 1px dotted ButtonText;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  box-sizing: border-box;
  color: inherit;
  display: table;
  max-width: 100%;
  padding: 0;
  white-space: normal;
}
textarea {
  overflow: auto;
}
[type="checkbox"],
[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
[type="search"] {
  -webkit-appearance: textfield;
  outline-offset: -2px;
}
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
::-webkit-input-placeholder {
  color: inherit;
  opacity: 0.54;
}
::-webkit-file-upload-button {
  -webkit-appearance: button;
  font: inherit;
}
* {
  box-sizing: border-box;
}
html,
font-family font1,
font-size base-font-size,
line-height _baseline {
  position: relative;
  background-color: #fff;
}
body {
  position: relative;
  background-color: #fff;
}
h1,
h2,
h3 {
  margin: 0;
}
img {
  max-width: 100%;
}
button {
  outline: none;
  border: none;
  padding: 0;
}
a {
  -webkit-tap-highlight-color: rgba(0,0,0,0);
  color: #f63700;
  text-decoration: none;
  cursor: pointer;
  transition: color 0.2s ease;
}
a:hover {
  color: #ff5b2c;
}
.hide {
  display: none;
}
.underline {
  text-decoration: underline;
}
.grid-debug {
  font-size: inherit;
  position: absolute;
  width: auto;
  height: auto;
  z-index: 9999;
  content: '';
  display: block;
  pointer-events: none;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  overflow: hidden;
}
.grid-debug .section-grid {
  height: 0.25em;
}
.grid-debug .section-grid:nth-child(odd) {
  background-color: rgba(0,0,0,0.12);
}
html:active .grid-debug {
  display: none;
}
html,
body {
  background-color: #06040f;
}
body > .ember-view {
  position: relative;
}
.container-placeholder {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  text-align: center;
  z-index: 2;
}
canvas {
  display: block;
  position: relative;
  z-index: 1;
}
.logo,
.byline {
  color: #fff;
  text-align: center;
}
.logo {
  font-family: "eurostile-extended" , sans-serif;
  font-weight: 900;
  font-style: normal;
  font-size: 10rem;
  line-height: 1;
  pointer-events: none;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .logo {
    font-size: 20rem;
  }
}
.byline {
  font-family: "futura-pt" , sans-serif;
  font-weight: 700;
  font-style: normal;
  font-size: 1.5rem;
  line-height: 1;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .byline {
    font-size: 2rem;
  }
}
.copy {
  font-family: "futura-pt" , sans-serif;
  font-weight: 400;
  font-style: normal;
  font-size: 1rem;
  line-height: 2;
  color: #fff;
  background-color: #06040f;
  padding: 1rem;
  border-radius: 0.25rem;
  text-align: center;
  display: inline-block;
}
@media only screen and (min-width: 768px) {
  .copy {
    font-size: 1.5rem;
    padding: 0 2rem;
    border-radius: 40rem;
  }
}
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRtcC9zdHlsdXNfY29tcGlsZXItaW5wdXRfYmFzZV9wYXRoLTBrVldiQjFPLnRtcC8xL25vcm1hbGl6ZS5zdHlsIiwidG1wL3N0eWx1c19jb21waWxlci1pbnB1dF9iYXNlX3BhdGgtMGtWV2JCMU8udG1wLzAvYXBwL3N0eWxlcy9zdHlsZWplbXMvYmFzZS9iYXNlLnN0eWwiLCJ0bXAvc3R5bHVzX2NvbXBpbGVyLWlucHV0X2Jhc2VfcGF0aC0wa1ZXYkIxTy50bXAvMC9hcHAvc3R5bGVzL3N0eWxlamVtcy90b29scy9sYXJrLnN0eWwiLCJ0bXAvc3R5bHVzX2NvbXBpbGVyLWlucHV0X2Jhc2VfcGF0aC0wa1ZXYkIxTy50bXAvMC9hcHAvc3R5bGVzL3N0eWxlamVtcy9tb2R1bGVzL2xvZ28uc3R5bCIsInRtcC9zdHlsdXNfY29tcGlsZXItaW5wdXRfYmFzZV9wYXRoLTBrVldiQjFPLnRtcC8wL2FwcC9zdHlsZXMvc3R5bGVqZW1zL3Rvb2xzL2ZvbnQuc3R5bCIsInRtcC9zdHlsdXNfY29tcGlsZXItaW5wdXRfYmFzZV9wYXRoLTBrVldiQjFPLnRtcC8yL3J1cHR1cmUvaW5kZXguc3R5bCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQTtFQUNFLGFBQVksV0FBWjtFQUNBLHNCQUFxQixLQUFyQjtFQUNBLDBCQUF5QixLQUF6Qjs7QUFNRjtFQUNFLFFBQU8sRUFBUDs7QUFXRjtBQUFRO0FBQ087QUFDUztBQUNZO0FBQ1E7QUFDUTtBQUNRO0FBQ007QUFDTTtBQUNLO0FBQ1M7RUFFcEYsU0FBUSxNQUFSOztBQU1GO0FBQU07QUFDUTtBQUNVO0VBRXRCLFNBQVEsYUFBUjs7QUFNRjtFQUNFLFNBQVEsS0FBUjtFQUNBLFFBQU8sRUFBUDs7QUFNRjtFQUNFLGdCQUFlLFNBQWY7O0FBT0Y7QUFBUztFQUVQLFNBQVEsS0FBUjs7QUFVRjtFQUNFLGtCQUFpQixZQUFqQjtFQUNBLDhCQUE2QixRQUE3Qjs7QUFRQTtBQUFTO0VBRVAsZUFBYyxFQUFkOztBQVVKO0VB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bkdEO0FBQUs7RUFDSCxrQkFBa0IsUUFBbEI7O0FBRUY7RUFDRSxVQUFVLFNBQVY7O0FBRUY7RUFDRSxVQUFVLFNBQVY7RUFDQSxNQUFNLElBQU47RUFDQSxLQUFLLElBQUw7RUFDQSxXQUE4QixzQkFBOUI7RUFDQSxPQUFNLEtBQU47RUFDQSxZQUFZLE9BQVo7RUFDQSxTQUFTLEVBQVQ7O0FBRUY7RUFDRSxTQUFTLE1BQVQ7RUFDQSxVQUFVLFNBQVY7RUFDQSxTQUFTLEVBQVQ7O0FBSUY7QUFBTTtFQUNKLE9BQU0sS0FBTjtFQUNBLFlBQVksT0FBWjs7QUFFRjtFQ09DLGFBQWEsa0NBQWI7RUFDQSxhQUFhLElBQWI7RUFDQSxZQUFZLE9BQVo7RURQQyxXQUFXLE1BQVg7RUFDQSxhQUFhLEVBQWI7RUFHQSxnQkFBZ0IsS0FBaEI7RUFDQSxRQUFPLEVBQVA7O0FFOEdTO0FBQUE7SUYzR1AsV0FBVyxNQUFYOzs7QUFFSjtFQ2xCQyxhQUFhLHlCQUFiO0VBQ0EsYUFBYSxJQUFiO0VBQ0EsWUFBWSxPQUFaO0VEa0JDLFdBQVcsT0FBWDtFQUNBLGFBQWEsRUFBYjtFQUNBLFFBQU8sRUFBUDs7QUVxR1M7QUFBQTtJRmxHUCxXQUFXLEtBQVg7OztBQUVKO0VDbkNDLGFBQWEseUJBQWI7RUFDQSxhQUFhLElBQWI7RUFDQSxZQUFZLE9BQVo7RURtQ0MsV0FBVyxLQUFYO0VBQ0EsYUFBYSxFQUFiO0VBQ0EsT0FBTSxLQUFOO0VBQ0Esa0JBQWtCLFFBQWxCO0VBQ0EsU0FBUSxLQUFSO0VBQ0EsZUFBZSxRQUFmO0VBQ0EsWUFBWSxPQUFaO0VBQ0EsU0FBUyxhQUFUOztBRXVGUztBQUFBO0lGcEZQLFdBQVcsT0FBWDtJQUNBLFNBQVMsT0FBVDtJQUNBLGVBQWUsTUFBZiIsImZpbGUiOiJhcHAuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogbm9ybWFsaXplLmNzcyB2NC4xLjEgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBkZWZhdWx0IGZvbnQgZmFtaWx5IGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBJRSBhbmQgaU9TLlxuICovXG5cbmh0bWxcbiAgZm9udC1mYW1pbHkgc2Fucy1zZXJpZiAvLyAxXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0IDEwMCUgLy8gMlxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3QgMTAwJSAvLyAyXG5cdFxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuIFxuYm9keVxuICBtYXJnaW4gMFxuXHRcbi8qIEhUTUw1IGRpc3BsYXkgZGVmaW5pdGlvbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIFxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSBhbmQgRmlyZWZveC5cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFLlxuICovXG4gXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLCAvLyAxXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxubWFpbiwgLy8gMlxubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5IC8vIDFcbiAgZGlzcGxheSBibG9ja1xuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICovXG4gXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW9cbiAgZGlzcGxheSBpbmxpbmUtYmxvY2tcblx0XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuXG4gKi9cbiBcbmF1ZGlvOm5vdChbY29udHJvbHNdKVxuICBkaXNwbGF5IG5vbmVcbiAgaGVpZ2h0IDBcblx0XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmFcbiAqL1xuIFxucHJvZ3Jlc3NcbiAgdmVydGljYWwtYWxpZ24gYmFzZWxpbmVcblx0XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwLS5cbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFLlxuICovXG4gXG50ZW1wbGF0ZSwgLy8gMVxuW2hpZGRlbl1cbiAgZGlzcGxheSBub25lXG5cdFxuLyogTGlua3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgb24gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuICogMi4gUmVtb3ZlIGdhcHMgaW4gbGlua3MgdW5kZXJsaW5lIGluIGlPUyA4KyBhbmQgU2FmYXJpIDgrLlxuICovXG4gXG5hXG4gIGJhY2tncm91bmQtY29sb3IgdHJhbnNwYXJlbnQgLy8gMVxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwIG9iamVjdHMgLy8gMlxuXHRcbi8qKlxuICogUmVtb3ZlICB0aGUgb3V0bGluZSBvbiBmb2N1c2VkIGxpbmtzIHdoZW4gdGhleSBhcmUgYWxzbyBhY3RpdmUgb3IgaG92ZXJlZFxuICogaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKi9cbiBcbmFcbiAgJjphY3RpdmUsXG4gICY6aG92ZXJcbiAgICBvdXRsaW5lLXdpZHRoIDBcblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBib3R0b20gYm9yZGVyIGluIEZpcmVmb3ggMzktLlxuICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cbiAqL1xuIFxuYWJiclt0aXRsZV1cbiAgYm9yZGVyLWJvdHRvbSBub25lIC8vIDFcbiAgdGV4dC1kZWNvcmF0aW9uIHVuZGVybGluZSAvLyAyXG4gIHRleHQtZGVjb3JhdGlvbiB1bmRlcmxpbmUgZG90dGVkIC8vIDJcblx0XG4vKipcbiAqIFByZXZlbnQgdGhlIGR1cGxpY2F0ZSBhcHBsaWNsYXRpb24gb2YgYGJvbGRlcmAgYnkgdGhlIG5leHQgcnVsZSBpbiBTYWZhcmkgNi5cbiAqL1xuXG5iLFxuc3Ryb25nXG4gIGZvbnQtd2VpZ2h0IGluaGVyaXRcblx0XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cbiBcbmIsXG5zdHJvbmdcbiAgZm9udC13ZWlnaHQgYm9sZGVyXG5cdFxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzdHlsZSBpbiBBbmRyb2lkIDQuMy0uXG4gKi9cbiBcbmRmblxuICBmb250LXN0eWxlIGl0YWxpY1xuXHRcbi8qKlxuICogQ29ycmVjdCB0aGUgZm9udCBzaXplIGFuZCBtYXJnaW4gb24gYGgxYCBlbGVtZW50cyB3aXRoaW4gYHNlY3Rpb25gIGFuZFxuICogYGFydGljbGVgIGNvbnRleHRzIGluIENocm9tZSwgRmlyZWZveCwgYW5kIFNhZmFyaS5cbiAqL1xuIFxuaDFcbiAgZm9udC1zaXplIDJlbVxuICBtYXJnaW4gMC42N2VtIDBcbiBcdFxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgYmFja2dyb3VuZCBhbmQgY29sb3IgaW4gSUUgOS0uXG4gKi9cbiBcbm1hcmtcbiAgYmFja2dyb3VuZC1jb2xvciAjZmYwXG4gIGNvbG9yICMwMDBcblx0XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICovXG4gXG5zbWFsbFxuICBmb250LXNpemUgODAlXG5cdFxuLyoqXG4gKiBQcmV2ZW50IGBzdWJgIGFuZCBgc3VwYCBlbGVtZW50cyBmcm9tIGFmZmVjdGluZyB0aGUgbGluZSBoZWlnaHQgaW5cbiAqIGFsbCBicm93c2Vycy5cbiAqL1xuIFxuc3ViLFxuc3VwXG4gIGZvbnQtc2l6ZSA3NSVcbiAgbGluZS1oZWlnaHQgMFxuICBwb3NpdGlvbiByZWxhdGl2ZVxuICB2ZXJ0aWNhbC1hbGlnbiBiYXNlbGluZVxuXG5zdWJcbiAgYm90dG9tIC0wLjI1ZW1cblxuc3VwXG4gIHRvcCAtMC41ZW1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLS5cbiAqL1xuIFxuaW1nXG4gIGJvcmRlci1zdHlsZSBub25lXG5cbi8qKlxuICogSGlkZSB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKi9cbiBcbnN2Zzpub3QoOnJvb3QpXG4gIG92ZXJmbG93IGhpZGRlblxuXG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnNcbiAqL1xuIFxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXBcbiAgZm9udC1mYW1pbHkgbW9ub3NwYWNlLCBtb25vc3BhY2UgLy8gMVxuICBmb250LXNpemUgMWVtIC8vIDJcblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgbWFyaW4gaW4gSUUgOC5cbiAqL1xuIFxuZmlndXJlXG4gIG1hcmdpbiAxZW0gNDBweFxuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3hcbiAqIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLlxuICovXG4gXG5oclxuICBib3gtc2l6aW5nIGNvbnRlbnQtYm94IC8vIDFcbiAgaGVpZ2h0IDAgLy8gMVxuICBvdmVyZmxvdyB2aXNpYmxlIC8vIDJcblxuLyogRm9ybXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyB0byBgaW5oZXJpdGAgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmlcbiAqL1xuIFxuYnV0dG9uLFxuaW5wdXQsXG5zZWxlY3QsXG50ZXh0YXJlYVxuICBmb250IGluaGVyaXQgLy8gMVxuICBtYXJnaW4gMCAvLyAyXG5cdFxuLyoqXG4gKiBSZXN0b3JlIHRoZSBmb250IHdlaWdodCB1bnNldCBieSBwcmV2aW91cyBydWxlLlxuICovXG4gXG5vcHRncm91cFxuICBmb250LXdlaWdodCBib2xkXG5cdFxuLyoqXG4gKiBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAqIDEuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UuXG4gKi9cbiBcbmJ1dHRvbixcbmlucHV0XG4gIG92ZXJmbG93IHZpc2libGVcblx0XG4vKipcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxuICogMS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94XG4gKi9cbiBcbmJ1dHRvbixcbnNlbGVjdFxuICB0ZXh0LXRyYW5zZm9ybSBub25lXG5cdFxuLyoqXG4gKiAxLiBQcmV2ZW50IGEgV2ViS2l0IGJ1ZyB3aGVyZSAoMikgZGVzdHJveXMgbmF0aXZlIGBhdWRpb2AgYW5kIGB2aWRlb2BcbiAqXHRcdGNvbnRyb2xzIGluIEFuZHJvaWQgNC5cbiAqIDIuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKi9cbiBcbmJ1dHRvbixcbmh0bWwgW3R5cGU9XCJidXR0b25cIl0sIC8vIDFcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXVxuICAtd2Via2l0LWFwcGVhcmFuY2UgYnV0dG9uIC8vIDJcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94XG4gKi9cbiBcbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyXG4gIGJvcmRlci1zdHlsZSBub25lXG4gIHBhZGRpbmcgMFxuXG4vKipcbiAqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZS5cbiAqL1xuIFxuYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJidXR0b25cIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInJlc2V0XCJdOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3JpbmdcbiAgb3V0bGluZSAxcHggZG90dGVkIEJ1dHRvblRleHRcblx0XG4vKipcbiAqIENoYW5nZSB0aGUgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nLCBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuXG5maWVsZHNldFxuICBib3JkZXIgMXB4IHNvbGlkICNjMGMwYzBcbiAgbWFyZ2luIDAgMnB4XG4gIHBhZGRpbmcgMC4zNWVtIDAuNjI1ZW0gMC43NWVtXG5cdFxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSB0ZXh0IHdyYXBwaW5nIGluIEVkZ2UgYW5kIElFLlxuICogMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICogMy4gUmVtb3ZlIHRoZSBwYWRkaW5nIHNvIGRldmVsb3BlcnMgYXJlIG5vdCBjYXVnaHQgb3V0IHdoZW4gdGhleSB6ZXJvIG91dFxuICogICAgYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbiBcbmxlZ2VuZFxuICBib3gtc2l6aW5nIGJvcmRlci1ib3ggLy8gMVxuICBjb2xvciBpbmhlcml0IC8vIDJcbiAgZGlzcGxheSB0YWJsZSAvLyAxXG4gIG1heC13aWR0aCAxMDAlIC8vIDFcbiAgcGFkZGluZyAwIC8vIDNcbiAgd2hpdGUtc3BhY2Ugbm9ybWFsIC8vIDFcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFLlxuICovXG4gXG50ZXh0YXJlYVxuICBvdmVyZmxvdyBhdXRvXG5cdFxuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBJRSAxMC0uXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAtLlxuICovXG4gXG5bdHlwZT1cImNoZWNrYm94XCJdLFxuW3R5cGU9XCJyYWRpb1wiXVxuICBib3gtc2l6aW5nIGJvcmRlci1ib3ggLy8gMVxuICBwYWRkaW5nIDAgLy8gMlxuXHRcbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICovXG4gXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gIGhlaWdodCBhdXRvXG5cdFxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG4gXG5bdHlwZT1cInNlYXJjaFwiXVxuICAtd2Via2l0LWFwcGVhcmFuY2UgdGV4dGZpZWxkXG4gIG91dGxpbmUtb2Zmc2V0IC0ycHhcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgYW5kIGNhbmNlbCBidXR0b25zIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFguXG4gKi9cblxuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5bdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvblxuICAtd2Via2l0LWFwcGVhcmFuY2Ugbm9uZVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIHRleHQgc3R5bGUgb2YgcGxhY2Vob2xkZXJzIGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaVxuICovXG5cbjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlclxuICBjb2xvciBpbmhlcml0XG4gIG9wYWNpdHkgMC41NFxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXG4gKi9cblxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvblxuICAtd2Via2l0LWFwcGVhcmFuY2UgYnV0dG9uIC8vIDFcbiAgZm9udCBpbmhlcml0IC8vIDJcdFxuIiwiLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgVGl0bGU6IEJhc2Vcbi8vICBTdW1tYXJ5OiBEZWZhdWx0IHN0eWxlc1xuLy9cdEF1dGhvcjogSm9zaCBNY0dyYXRoXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vKi9cblxuKlxuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG5odG1sXG4gIGZvbnQtZmFtaWx5IGZvbnQxXG4gIGZvbnQtc2l6ZSBiYXNlLWZvbnQtc2l6ZVxuICBsaW5lLWhlaWdodCBfYmFzZWxpbmVcblxuXHRwb3NpdGlvbiByZWxhdGl2ZVxuXHRiYWNrZ3JvdW5kLWNvbG9yIHdoaXRlXG5cbmJvZHlcblx0cG9zaXRpb24gcmVsYXRpdmVcblx0YmFja2dyb3VuZC1jb2xvciB3aGl0ZVxuXG4vKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vKi9cbi8qLy8vLyBUZXh0IEVsZW1lbnRzIC8vLy8qL1xuLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyovXG5cbmgxLGgyLGgzXG5cdGZvbnQtYm9sZCgpXG5cdG1hcmdpbiAwXG5cbnBcblx0Zm9udC1ub3JtYWwoKVxuXG4vKi8vLy8vLy8vLy8vLy8vLy8qL1xuLyovLy8vIEltYWdlcyAvLy8vKi9cbi8qLy8vLy8vLy8vLy8vLy8vLyovXG5cbmltZ1xuXHRtYXgtd2lkdGggMTAwJVxuXG4vKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qL1xuLyovLy8vIEJ1dHRvbnMgJiBMaW5rcyAvLy8vKi9cbi8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyovXG5cbmJ1dHRvblxuXHRvdXRsaW5lIG5vbmVcblx0Ym9yZGVyIG5vbmVcblx0cGFkZGluZyAwXG5cbmFcblx0LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIHJnYmEoMCwwLDAsMClcblx0Y29sb3IgX3JlZFxuXHR0ZXh0LWRlY29yYXRpb24gbm9uZVxuXHRjdXJzb3IgcG9pbnRlclxuXHR0cmFuc2l0aW9uIGNvbG9yIHNwZWVkIGZ1bmN0aW9uXG5cblx0Jjpob3ZlclxuXHRcdGNvbG9yIGxpZ2h0ZW4oX3JlZCwyMCUpXG5cbi8qLy8vLy8vLy8vLy8vLy8vLy8vLyovXG4vKi8vLy8gVXRpbGl0aWVzIC8vLy8qL1xuLyovLy8vLy8vLy8vLy8vLy8vLy8vKi9cblxuLmhpZGVcblx0ZGlzcGxheSBub25lXG5cbi51bmRlcmxpbmVcblx0dGV4dC1kZWNvcmF0aW9uIHVuZGVybGluZVxuXG4uYm9sZCxiXG5cdGZvbnQtYm9sZCgpXG4iLCIvKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICBUaXRsZTogTGFya1xuLy8gIFN1bW1hcnk6IEEgdmVydGljYWwgcmh5dGhtIHN5c3RlbS5cbi8vXHRBdXRob3I6IEpvc2ggTWNHcmF0aFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyovXG5cbi8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyovXG4vKi8vLy8gU2V0IGEgVmVydGljYWwgUmh5dGhtIC8vLy8qL1xuLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vKi9cblxuLy8gcmh5dGhtKHNjYWxlSW5kZXg6SW50LCBbcm93czpJbnRdLCBbZW1zOkJvb2xdLCBbbW9kdWxhclNjYWxlOkZsb2F0XSlcbi8vIEZvciBzZXR0aW5nIHdlYiB0eXBlIHRvIGEgYmFzZWxpbmUgZ3JpZFxuLy8gc2NhbGVJbmRleDpJbnQgXHRcdDogTnVtYmVyIG9mIHNjYWxlIHVuaXRzIHlvdSB3YW50IHRoZSBmb250LXNpemUgdG8gYmUuXG4vLyBbcm93czpJbnRdIFx0XHRcdDogSGVpZ2h0IG9mIHRoZSB0ZXh0IGVsZW1lbnQgaW4gYmFzZWxpbmUgdW5pdHMuIERlZmF1bHRzIHRvIG51bGwuXG4vLyBbZW1zOkJvb2xdIFx0XHRcdDogQ2hhbmdlIHRoZSB1bml0IG9mIG1lYXN1cmVtZW50IHRvIGVtcy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4vLyBbbW9kdWxhclNjYWxlOkZsb2F0XSA6IFRoZSBtb2R1bGFyIHNjYWxlIHlvdSB3YW50IHRvIHVzZS4gRGVmYXVsdHMgdG8gZ2xvYmFsIHZhcmlhYmxlLlxuXG5fcmh5dGhtKHNjYWxlSW5kZXgscm93cyA9IG51bGwsZW1zID0gZmFsc2UsbW9kdWxhclNjYWxlID0gX3JhdGlvKVxuXHQvLzEpIEdldCB0aGUgbW9kdWxhciBzY2FsZSBmb250IHNpemVcblx0Zm9udFNpemUgPSBfc2NhbGUoc2NhbGVJbmRleCwgbW9kdWxhclNjYWxlKVxuXHQvLzIpIEdldCBvdXIgdW5pdCBvZiBtZWFzdXJlbWVudFxuXHRpZiBlbXMgPT0gdHJ1ZVxuXHRcdHUgPSAnZW0nXG5cdGVsc2Vcblx0XHR1ID0gJ3JlbSdcblxuXHQvLzMpIFNldCB0aGUgZm9udC1zaXplXG5cdGZvbnQtc2l6ZSB1bml0KGZvbnRTaXplLHUpXG5cblx0Ly80KSBDaGVjayBpZiB3ZSBhcmUgc2V0dGluZyB0aGUgbnVtYmVyIG9mIGJhc2VsaW5lXG5cdGlmIHJvd3MgIT0gbnVsbFxuXHRcdGxpbmUtaGVpZ2h0IChfYmFzZWxpbmUgLyBmb250U2l6ZSkgKiByb3dzXG5cdGVsc2Vcblx0XHQvLzRiIDEpIElmIG5vdCwgZmluZCBvdXQgaG93IG1hbnkgcm93cyBtaW5pbXVtIHdlIG5lZWQgdG8gY29udGFpbiB0aGUgdGV4dFxuXHRcdGJhc2VsaW5lUm93cyA9IGNlaWwoZm9udFNpemUvX2Jhc2VsaW5lKVxuXHRcdC8vNGIgMikgU2V0IHRoZSBsaW5lLWhlaWdodCBzdWNoIHRoYXQgdGhlIHRleHQgaGVpZ2h0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIGJhc2VsaW5lXG5cdFx0bGluZS1oZWlnaHQgKF9iYXNlbGluZSAvIGZvbnRTaXplKSAqIGJhc2VsaW5lUm93c1xuXG4vKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qL1xuLyovLy8vIEFkZGluZyBTcGFjZSAvLy8vKi9cbi8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyovXG5cbi8vIGxlYWQocm93czpJbnQsW2VtczpCb29sXSxbc2NhbGVJbmRleDpJbnRdLFttb2R1bGFyU2NhbGU6RmxvYXRdKVxuLy8gUmV0dXJucyBhIG11bHRpcGxlIG9mIHRoZSBnbG9iYWwgYmFzZWxpbmUgdW5pdC5cbi8vIHJvd3M6SW50IFx0XHRcdE51bWJlciBvZiBiYXNlbGluZSBncmlkIHJvd3MgdG8gbGVhZFxuLy8gW2VtczpCb29sXSBcdFx0XHRTZXQgdGhlIHVuaXQgb2YgbWVhc3VyZW1lbnQgdG8gZW1zLiBEZWZhdWx0cyB0byBmYWxzZS5cbi8vIFtzY2FsZUluZGV4OkludF0gXHRJZiB1c2luZyBlbXMsIHNwZWNpZnkgdGhlIGNvbnRleHQgc2l6ZS4gRGVmYXVsdHMgdG8gMC5cbi8vIFttb2R1bGFyU2NhbGU6RmxvYXRdIFRoZSBtb2R1bGFyIHNjYWxlIHlvdSB3YW50IHRvIHVzZS4gRGVmYXVsdHMgdG8gZ2xvYmFsIHZhcmlhYmxlLlxuXG5fbGVhZChyb3dzLCBlbXMgPSBmYWxzZSwgc2NhbGVJbmRleCA9IDAsIG1vZHVsYXJTY2FsZSA9IF9yYXRpbylcblx0aWYgZW1zID09IHRydWVcblx0XHRmb250U2l6ZSA9IF9zY2FsZShzY2FsZUluZGV4LG1vZHVsYXJTY2FsZSlcblx0XHR1bml0KF9iYXNlbGluZSAqIHJvd3MgLyBmb250U2l6ZSwnZW0nKVxuXHRlbHNlXG5cdFx0dW5pdChfYmFzZWxpbmUgKiByb3dzLCdyZW0nKVxuXG4vKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vKi9cbi8qLy8vLyBHZXQgRm9udCBTaXplIC8vLy8qL1xuLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyovXG5cbi8vIHNjYWxlKHNjYWxlSW5kZXg6SW50LFttb2R1bGFyU2NhbGU6RmxvYXRdKVxuLy8gUmV0dXJucyBhIGZvbnQgc2l6ZSAoZmxvYXQpIGJhc2VkIG9uIGEgbW9kdWxhciBzY2FsZS5cbi8vIHNjYWxlSW5kZXg6SW50XHRcdDogTnVtYmVyIG9mIHNjYWxlIHVuaXRzIHlvdSB3YW50IHRoZSBmb250LXNpemUgdG8gYmUuXG4vLyBbbW9kdWxhclNjYWxlOkZsb2F0XSA6IFRoZSBtb2R1bGFyIHNjYWxlIHlvdSB3YW50IHRvIHVzZS4gRGVmYXVsdHMgdG8gZ2xvYmFsIHZhcmlhYmxlLlxuXG5fc2NhbGUoc2NhbGVJbmRleCxtb2R1bGFyU2NhbGUgPSBfcmF0aW8sd2l0aFVuaXRzPWZhbHNlKVxuXHRpZiB3aXRoVW5pdHNcblx0XHR1bml0KChtb2R1bGFyU2NhbGUgKiogc2NhbGVJbmRleCksJ3JlbScpXG5cdGVsc2Vcblx0XHQobW9kdWxhclNjYWxlICoqIHNjYWxlSW5kZXgpXG5cbi8qLy8vLy8vLy8vLy8vLy8vLy8vLy8qL1xuLyovLy8vIERlYnVnIEdyaWQgLy8vLyovXG4vKi8vLy8vLy8vLy8vLy8vLy8vLy8vKi9cblxuLy8gU3R5bGVzIGZvciB0aGUgZGVidWcgZ3JpZCBnZW5lcmF0ZWQgdXNpbmcgamF2YXNjcmlwdC5cbi8vIEl0IGlzIHNldCB1c2luZyBSRU1zIGFuZCByZXNwb25kcyB0byBjaGFuZ2VzIHRvIHRoZSBodG1sIGVsZW1lbnTigJlzIGZvbnQtc2l6ZVxuXG4uZ3JpZC1kZWJ1Z1xuXHRmb250LXNpemUgaW5oZXJpdFxuXHRwb3NpdGlvbiBhYnNvbHV0ZVxuXHR3aWR0aCBhdXRvXG5cdGhlaWdodCBhdXRvXG5cdHotaW5kZXggOTk5OVxuXHRjb250ZW50ICcnXG5cdGRpc3BsYXkgYmxvY2tcblx0cG9pbnRlci1ldmVudHMgbm9uZVxuXHR0b3AgMFxuXHRyaWdodCAwXG5cdGJvdHRvbSAwXG5cdGxlZnQgMFxuXHRvdmVyZmxvdyBoaWRkZW5cblxuXHQuc2VjdGlvbi1ncmlkXG5cdFx0aGVpZ2h0IF9sZWFkKDEsdHJ1ZSlcblx0XHQmOm50aC1jaGlsZChvZGQpXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yIGhzbGEoYmxhY2ssMTIlKVxuXG5odG1sOmFjdGl2ZSAuZ3JpZC1kZWJ1Z1xuXHRkaXNwbGF5IG5vbmVcbiIsImh0bWwsYm9keVxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDYwNDBGO1xuXG5ib2R5ID4gLmVtYmVyLXZpZXdcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4uY29udGFpbmVyLXBsYWNlaG9sZGVyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKTtcbiAgd2lkdGggMTAwJVxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHotaW5kZXg6IDI7XG5cbmNhbnZhc1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICAvLyB3aWR0aCAxMDAlXG4gIC8vIGhlaWdodCAxMDAlXG5cbi5sb2dvLC5ieWxpbmVcbiAgY29sb3Igd2hpdGVcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4ubG9nb1xuICBmb250LWJsYWNrKGZvbnQtbG9nbylcbiAgZm9udC1zaXplOiAxMHJlbTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC8vIGNvbG9yIHJnYmEod2hpdGUsMC4yNSlcbiAgLy8gY29sb3IgIzA2MDQwRlxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgbWFyZ2luOjA7XG5cbiAgK2Fib3ZlKHNjcmVlbi1zbSlcbiAgICBmb250LXNpemU6IDIwcmVtO1xuXG4uYnlsaW5lXG4gIGZvbnQtYm9sZChmb250LWNvcHkpXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBsaW5lLWhlaWdodDogMTtcbiAgbWFyZ2luIDBcblxuICArYWJvdmUoc2NyZWVuLXNtKVxuICAgIGZvbnQtc2l6ZTogMnJlbTtcblxuLmNvcHlcbiAgZm9udC1ub3JtYWwoZm9udC1jb3B5KVxuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAyO1xuICBjb2xvciB3aGl0ZVxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDYwNDBGO1xuICBwYWRkaW5nOjFyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gICthYm92ZShzY3JlZW4tc20pXG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgcGFkZGluZzogMCAycmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDQwcmVtO1xuIiwiLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL1x0VGl0bGU6IEZvbnRcbi8vXHRTdW1tYXJ5OiBNaXhpbnMgZm9yIHNldHRpbmcgZm9udHMuXG4vL1x0QXV0aG9yOiBKb3NoIE1jR3JhdGhcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qL1xuXG4vLyBHb29kIGZvciBUeXBlS2l0IGZvbnRzLCBvciBvdGhlciBmb250cyB0aGF0IGRvbuKAmXQgYnJlYWsgb3V0IHdlaWdodHMgYXMgc2VwYXJhdGUgZm9udHMuXG5cbi8vIGZvbnQtbm9ybWFsKFtmb250TmFtZTpTdHJpbmddKVxuLy8gW2ZvbnROYW1lOlN0cmluZ10gOiBOYW1lIG9mIHRoZSBmb250LCBvciBmb250IHZhcmlhYmxlLiBEZWZhdWx0cyB0byBmb250LXByaW1hcnkuXG5cbmZvbnQtbm9ybWFsKGZvbnROYW1lID0gZm9udC1wcmltYXJ5KVxuXHRmb250LWZhbWlseTogZm9udE5hbWU7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblxuLy8gZm9udC1ib2xkKFtmb250TmFtZTpTdHJpbmddKVxuLy8gW2ZvbnROYW1lOlN0cmluZ10gOiBOYW1lIG9mIHRoZSBmb250LCBvciBmb250IHZhcmlhYmxlLiBEZWZhdWx0cyB0byBmb250LXByaW1hcnkuXG5cbmZvbnQtYm9sZChmb250TmFtZSA9IGZvbnQtcHJpbWFyeSlcblx0Zm9udC1mYW1pbHk6IGZvbnROYW1lO1xuXHRmb250LXdlaWdodDogNzAwO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cbmZvbnQtZXh0cmEtYm9sZChmb250TmFtZSA9IGZvbnQtcHJpbWFyeSlcblx0Zm9udC1mYW1pbHk6IGZvbnROYW1lO1xuXHRmb250LXdlaWdodDogODAwO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cbmZvbnQtaGVhdnkoZm9udC1uYW1lID0gZm9udC1wcmltYXJ5KVxuXHRmb250LWV4dHJhLWJvbGQoZm9udE5hbWUpXG5cbmZvbnQtYmxhY2soZm9udE5hbWUgPSBmb250LXByaW1hcnkpXG5cdGZvbnQtZmFtaWx5OiBmb250TmFtZTtcblx0Zm9udC13ZWlnaHQ6IDkwMDtcblx0Zm9udC1zdHlsZTogbm9ybWFsO1xuXG4vLyBmb250LWl0YWxpYyhbZm9udE5hbWU6U3RyaW5nXSlcbi8vIFtmb250TmFtZTpTdHJpbmddIDogTmFtZSBvZiB0aGUgZm9udCwgb3IgZm9udCB2YXJpYWJsZS4gRGVmYXVsdHMgdG8gZm9udC1wcmltYXJ5LlxuXG5mb250LWl0YWxpYyhmb250TmFtZSA9IGZvbnQtcHJpbWFyeSlcblx0Zm9udC1mYW1pbHk6IGZvbnROYW1lO1xuXHRmb250LXdlaWdodDogNDAwO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG4iLCJiYXNlLWZvbnQtc2l6ZSA/PSAxNnB4XG5yYXN0ZXJpc2UtbWVkaWEtcXVlcmllcyA/PSBmYWxzZVxuXG5ydXB0dXJlID0ge1xuICByYXN0ZXJpc2UtbWVkaWEtcXVlcmllczogcmFzdGVyaXNlLW1lZGlhLXF1ZXJpZXNcbiAgbW9iaWxlLWN1dG9mZjogNDAwcHhcbiAgZGVza3RvcC1jdXRvZmY6IDEwNTBweFxuICBoZC1jdXRvZmY6IDE4MDBweFxuICBlbmFibGUtZW0tYnJlYWtwb2ludHM6IGZhbHNlXG4gIGJhc2UtZm9udC1zaXplOiBiYXNlLWZvbnQtc2l6ZVxuICBhbnRpLW92ZXJsYXA6IGZhbHNlXG4gIGRlbnNpdHktcXVlcmllczogJ2RwcHgnICd3ZWJraXQnICdtb3onICdkcGknXG4gIHJldGluYS1kZW5zaXR5OiAxLjVcbiAgdXNlLWRldmljZS13aWR0aDogZmFsc2Vcbn1cbnJ1cHR1cmUuc2NhbGUgPSAwIChydXB0dXJlLm1vYmlsZS1jdXRvZmYpIDYwMHB4IDgwMHB4IChydXB0dXJlLmRlc2t0b3AtY3V0b2ZmKSAocnVwdHVyZS5oZC1jdXRvZmYpXG5ydXB0dXJlLnNjYWxlLW5hbWVzID0gJ3hzJyAncycgJ20nICdsJyAneGwnICdoZCdcblxuLWlzLXN0cmluZyh2YWwpXG4gIGlmIHR5cGVvZih2YWwpIGlzIG5vdCAndW5pdCdcbiAgICBpZiB2YWwgaXMgYSAnc3RyaW5nJyBvciB2YWwgaXMgYSAnaWRlbnQnXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgZmFsc2VcbiAgZWxzZVxuICAgIGZhbHNlXG5cbi1nZXQtc2NhbGUtbnVtYmVyKHNjYWxlLW5hbWUpXG4gIGZvciBsaXN0LWl0ZW0sIGkgaW4gcnVwdHVyZS5zY2FsZS1uYW1lc1xuICAgIGlmIGxpc3QtaXRlbSBpcyBzY2FsZS1uYW1lXG4gICAgICByZXR1cm4gaSArIDFcbiAgcmV0dXJuIGZhbHNlXG5cbi1jb252ZXJ0LXRvKHRvLXVuaXQsIHZhbHVlLCBjb250ZXh0ID0gcnVwdHVyZS5iYXNlLWZvbnQtc2l6ZSlcbiAgZnJvbS11bml0ID0gdW5pdCh2YWx1ZSlcbiAgcmV0dXJuIHZhbHVlIGlmIHRvLXVuaXQgaXMgZnJvbS11bml0XG4gIGlmIHRvLXVuaXQgaW4gKCdlbScgJ3JlbScpXG4gICAgcmV0dXJuIHZhbHVlIGlmIGZyb20tdW5pdCBpbiAoJ2VtJyAncmVtJylcbiAgICByZXR1cm4gdW5pdCgodmFsdWUgLyBjb250ZXh0KSwgdG8tdW5pdClcbiAgaWYgdG8tdW5pdCBpcyAncHgnXG4gICAgcmV0dXJuIHVuaXQoKHZhbHVlICogY29udGV4dCksICdweCcpXG5cbi1vbi1zY2FsZShuKVxuICByZXR1cm4gdW5pdChuKSBpcyAnJ1xuXG4tbGFyZ2VyLXRoYW4tc2NhbGUobilcbiAgcmV0dXJuIChuID4gKGxlbmd0aChydXB0dXJlLnNjYWxlKSAtIDEpKSBhbmQgLW9uLXNjYWxlKG4pXG5cbi1pcy16ZXJvKG4pXG4gIHJldHVybiBuIGlzIDBcblxuLW92ZXJsYXAtc2hpZnQoYW50aS1vdmVybGFwLCBuKVxuICBzaGlmdC11bml0ID0gdW5pdChuKVxuICBhbnRpLW92ZXJsYXAgPSAwcHggdW5sZXNzIGFudGktb3ZlcmxhcFxuICBhbnRpLW92ZXJsYXAgPSAxcHggaWYgYW50aS1vdmVybGFwIGlzIHRydWVcbiAgaWYgbGVuZ3RoKGFudGktb3ZlcmxhcCkgaXMgMVxuICAgIHJldHVybiAtY29udmVydC10byhzaGlmdC11bml0LCBhbnRpLW92ZXJsYXApXG4gIGZvciB2YWwgaW4gYW50aS1vdmVybGFwXG4gICAgcmV0dXJuIHZhbCBpZiB1bml0KHZhbCkgaXMgc2hpZnQtdW5pdFxuXG4tYWRqdXN0LW92ZXJsYXAoYW50aS1vdmVybGFwLCBuLCBzaWRlID0gJ21pbicpXG4gIC1zaGlmdCA9IC1vdmVybGFwLXNoaWZ0KGFudGktb3ZlcmxhcCwgbilcbiAgaWYgKHNpZGUgaXMgJ21pbicgYW5kIC1zaGlmdCA+IDApIG9yIChzaWRlIGlzICdtYXgnIGFuZCAtc2hpZnQgPCAwKVxuICAgIG4gPSBuICsgLXNoaWZ0XG4gIHJldHVybiBuXG5cbi1pcy1wb3NpdGl2ZShuKVxuICByZXR1cm4gbiA+PSAwXG5cbi1kZW5zaXR5LXF1ZXJpZXMoZGVuc2l0eSlcbiAgaWYgdHlwZW9mKGRlbnNpdHkpIGlzIG5vdCAndW5pdCdcbiAgICBpZiBub3QgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgICAgZGVuc2l0eSA9ICclcycgJSBkZW5zaXR5XG4gIGRlbnNpdHkgPSBydXB0dXJlLnJldGluYS1kZW5zaXR5IGlmIGRlbnNpdHkgaXMgJ3JldGluYSdcbiAgcXVlcmllcyA9ICgpXG4gIGZvciBxdWVyeSBpbiBydXB0dXJlLmRlbnNpdHktcXVlcmllc1xuICAgIGlmIHF1ZXJ5IGlzICd3ZWJraXQnXG4gICAgICBwdXNoKHF1ZXJpZXMsICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAlcyknICUgKGRlbnNpdHkpKVxuICAgIGVsc2UgaWYgcXVlcnkgaXMgJ21veidcbiAgICAgIHB1c2gocXVlcmllcywgJyhtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86ICVzKScgJSAoZGVuc2l0eSkpXG4gICAgZWxzZSBpZiBxdWVyeSBpcyAnbydcbiAgICAgIHB1c2gocXVlcmllcywgJygtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAlcy8xKScgJSAoZGVuc2l0eSkpXG4gICAgZWxzZSBpZiBxdWVyeSBpcyAncmF0aW8nXG4gICAgICBwdXNoKHF1ZXJpZXMsICcobWluLWRldmljZS1waXhlbC1yYXRpbzogJXMpJyAlIChkZW5zaXR5KSlcbiAgICBlbHNlIGlmIHF1ZXJ5IGlzICdkcGknXG4gICAgICBpZiAtaXMtc3RyaW5nKGRlbnNpdHkpXG4gICAgICAgIGRlbnNpdHk9Y29udmVydChkZW5zaXR5KVxuICAgICAgcHVzaChxdWVyaWVzLCAnKG1pbi1yZXNvbHV0aW9uOiAlc2RwaSknICUgKHJvdW5kKGRlbnNpdHkgKiA5NiwgMSkpKVxuICAgIGVsc2UgaWYgcXVlcnkgaXMgJ2RwcHgnXG4gICAgICBwdXNoKHF1ZXJpZXMsICcobWluLXJlc29sdXRpb246ICVzZHBweCknICUgKGRlbnNpdHkpKVxuICByZXR1cm4gcXVlcmllc1xuXG5jcmVhdGUtZmFsbGJhY2stY2xhc3Moc2VsZWN0ZWQsIGNsYXNzKVxuICAveycnICsgY2xhc3MgKyAnICcgKyBzZWxlY3RlZH1cbiAgICB7YmxvY2t9XG5cbi8vICtiZXR3ZWVuKG1pbiwgbWF4KVxuLy8gdXNhZ2UgKHNjYWxlIGNhbiBiZSBtaXhlZCB3aXRoIGN1c3RvbSB2YWx1ZXMpOlxuLy8gICAtICtiZXR3ZWVuKDEsIDMpIHNjYWxlOnNjYWxlXG4vLyAgIC0gK2JldHdlZW4oMCwgMykgMCB3aWR0aDpzY2FsZVxuLy8gICAtICtiZXR3ZWVuKDIwMHB4LCA1MDBweCkgY3VzdG9tOmN1c3RvbVxuLy8gICAtICtiZXR3ZWVuKDAsIDMwMHB4KSAwIHdpZHRoOmN1c3RvbVxuLy8gICAtICtiZXR3ZWVuKDEsIDMwMHB4KSBzY2FsZTpjdXN0b21cbi8vICAgLSArYmV0d2VlbigyMDBweCwgNCkgY3VzdG9tOnNjYWxlXG5cbmJldHdlZW4obWluLCBtYXgsIGFudGktb3ZlcmxhcCA9IHJ1cHR1cmUuYW50aS1vdmVybGFwLCBkZW5zaXR5ID0gbnVsbCwgb3JpZW50YXRpb24gPSBudWxsLCB1c2UtZGV2aWNlLXdpZHRoID0gcnVwdHVyZS51c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcyA9IG51bGwpXG4gIHNlbGVjdGVkID0gc2VsZWN0b3IoKVxuXG4gIGlmIC1pcy1zdHJpbmcob3JpZW50YXRpb24pXG4gICAgb3JpZW50YXRpb24gPSBjb252ZXJ0KG9yaWVudGF0aW9uKVxuICBpZiAtaXMtc3RyaW5nKGRlbnNpdHkpXG4gICAgZGVuc2l0eSA9IGNvbnZlcnQoZGVuc2l0eSlcbiAgaWYgLWlzLXN0cmluZyhtaW4pXG4gICAgbWluID0gLWdldC1zY2FsZS1udW1iZXIobWluKVxuICBpZiAtaXMtc3RyaW5nKG1heClcbiAgICBtYXggPSAtZ2V0LXNjYWxlLW51bWJlcihtYXgpXG5cbiAgLW1pbiA9IHJ1cHR1cmUuc2NhbGVbbWluIC0gMV0gdW5sZXNzIC1pcy16ZXJvKG1pbikgb3IgKG5vdCAtb24tc2NhbGUobWluKSlcbiAgLW1heCA9IHJ1cHR1cmUuc2NhbGVbbWF4XSB1bmxlc3Mgbm90IC1vbi1zY2FsZShtYXgpXG4gIC1taW4gPz0gbWluXG4gIC1tYXggPz0gbWF4XG5cbiAgaWYgKHJ1cHR1cmUucmFzdGVyaXNlLW1lZGlhLXF1ZXJpZXMpXG4gICAgaWYgbm90IChkZW5zaXR5IG9yIC1tYXggb3Igb3JpZW50YXRpb24pXG4gICAgICB7YmxvY2t9XG4gIGVsc2VcbiAgICBjb25kaXRpb24gPSAnb25seSBzY3JlZW4nXG4gICAgdXNlLWRldmljZS13aWR0aCA9IHVzZS1kZXZpY2Utd2lkdGggPyAnZGV2aWNlLScgOiAnJ1xuICAgIHVubGVzcyAtbWluIGlzIDBcbiAgICAgIC1taW4gPSAtY29udmVydC10bygnZW0nLCAtbWluKSBpZiBydXB0dXJlLmVuYWJsZS1lbS1icmVha3BvaW50c1xuICAgICAgLW1pbiA9IC1hZGp1c3Qtb3ZlcmxhcChhbnRpLW92ZXJsYXAsIC1taW4sIHNpZGU6ICdtaW4nKVxuICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uICsgJyBhbmQgKG1pbi0nICsgdXNlLWRldmljZS13aWR0aCArICd3aWR0aDogJXMpJyAlICgtbWluKVxuICAgIHVubGVzcyAtbGFyZ2VyLXRoYW4tc2NhbGUobWF4KVxuICAgICAgLW1heCA9IC1jb252ZXJ0LXRvKCdlbScsIC1tYXgpIGlmIHJ1cHR1cmUuZW5hYmxlLWVtLWJyZWFrcG9pbnRzXG4gICAgICAtbWF4ID0gLWFkanVzdC1vdmVybGFwKGFudGktb3ZlcmxhcCwgLW1heCwgc2lkZTogJ21heCcpXG4gICAgICBjb25kaXRpb24gPSBjb25kaXRpb24gKyAnIGFuZCAobWF4LScgKyB1c2UtZGV2aWNlLXdpZHRoICsgJ3dpZHRoOiAlcyknICUgKC1tYXgpXG4gICAgaWYgb3JpZW50YXRpb25cbiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbiArICcgYW5kIChvcmllbnRhdGlvbjogJXMpJyAlIChvcmllbnRhdGlvbilcbiAgICBpZiBkZW5zaXR5XG4gICAgICBjb25kaXRpb25zID0gKClcbiAgICAgIGZvciBxdWVyeSBpbiAtZGVuc2l0eS1xdWVyaWVzKGRlbnNpdHkpXG4gICAgICAgIHB1c2goY29uZGl0aW9ucywgY29uZGl0aW9uICsgJyBhbmQgJXMnICUgKHF1ZXJ5KSlcbiAgICAgIGNvbmRpdGlvbiA9IGpvaW4oJywgJywgY29uZGl0aW9ucylcbiAgICBAbWVkaWEgY29uZGl0aW9uXG4gICAgICB7YmxvY2t9XG4gIGlmIGZhbGxiYWNrLWNsYXNzXG4gICAgK2NyZWF0ZS1mYWxsYmFjay1jbGFzcyhzZWxlY3RlZCwgZmFsbGJhY2stY2xhc3MpXG4gICAgICB7YmxvY2t9XG5cbmF0KHNjYWxlLXBvaW50LCBhbnRpLW92ZXJsYXAgPSBydXB0dXJlLmFudGktb3ZlcmxhcCwgZGVuc2l0eSA9IG51bGwsIG9yaWVudGF0aW9uID0gbnVsbCwgdXNlLWRldmljZS13aWR0aCA9IHJ1cHR1cmUudXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBpZiAtaXMtc3RyaW5nKG9yaWVudGF0aW9uKVxuICAgIG9yaWVudGF0aW9uID0gY29udmVydChvcmllbnRhdGlvbilcbiAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICtiZXR3ZWVuKHNjYWxlLXBvaW50LCBzY2FsZS1wb2ludCwgYW50aS1vdmVybGFwLCBkZW5zaXR5LCBvcmllbnRhdGlvbiwgdXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MpXG4gICAge2Jsb2NrfVxuXG5mcm9tLXdpZHRoKHNjYWxlLXBvaW50LCBhbnRpLW92ZXJsYXAgPSBydXB0dXJlLmFudGktb3ZlcmxhcCwgZGVuc2l0eSA9IG51bGwsIG9yaWVudGF0aW9uID0gbnVsbCwgdXNlLWRldmljZS13aWR0aCA9IHJ1cHR1cmUudXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBpZiAtaXMtc3RyaW5nKG9yaWVudGF0aW9uKVxuICAgIG9yaWVudGF0aW9uID0gY29udmVydChvcmllbnRhdGlvbilcbiAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICtiZXR3ZWVuKHNjYWxlLXBvaW50LCBsZW5ndGgocnVwdHVyZS5zY2FsZSksIGFudGktb3ZlcmxhcCwgZGVuc2l0eSwgb3JpZW50YXRpb24sIHVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzKVxuICAgIHtibG9ja31cblxuYWJvdmUgPSBmcm9tLXdpZHRoXG5cbnRvLXdpZHRoKHNjYWxlLXBvaW50LCBhbnRpLW92ZXJsYXAgPSBydXB0dXJlLmFudGktb3ZlcmxhcCwgZGVuc2l0eSA9IG51bGwsIG9yaWVudGF0aW9uID0gbnVsbCwgdXNlLWRldmljZS13aWR0aCA9IHJ1cHR1cmUudXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBpZiAtaXMtc3RyaW5nKG9yaWVudGF0aW9uKVxuICAgIG9yaWVudGF0aW9uID0gY29udmVydChvcmllbnRhdGlvbilcbiAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICtiZXR3ZWVuKDEsIHNjYWxlLXBvaW50LCBhbnRpLW92ZXJsYXAsIGRlbnNpdHksIG9yaWVudGF0aW9uLCB1c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcylcbiAgICB7YmxvY2t9XG5cbmJlbG93ID0gdG8td2lkdGhcblxubW9iaWxlKGFudGktb3ZlcmxhcCA9IHJ1cHR1cmUuYW50aS1vdmVybGFwLCBkZW5zaXR5ID0gbnVsbCwgb3JpZW50YXRpb24gPSBudWxsLCB1c2UtZGV2aWNlLXdpZHRoID0gcnVwdHVyZS51c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcyA9IG51bGwpXG4gIGlmIC1pcy1zdHJpbmcob3JpZW50YXRpb24pXG4gICAgb3JpZW50YXRpb24gPSBjb252ZXJ0KG9yaWVudGF0aW9uKVxuICBpZiAtaXMtc3RyaW5nKGRlbnNpdHkpXG4gICAgZGVuc2l0eSA9IGNvbnZlcnQoZGVuc2l0eSlcbiAgK2JlbG93KHJ1cHR1cmUubW9iaWxlLWN1dG9mZiwgYW50aS1vdmVybGFwLCBkZW5zaXR5LCBvcmllbnRhdGlvbiwgdXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MpXG4gICAge2Jsb2NrfVxuXG50YWJsZXQoYW50aS1vdmVybGFwID0gcnVwdHVyZS5hbnRpLW92ZXJsYXAsIGRlbnNpdHkgPSBudWxsLCBvcmllbnRhdGlvbiA9IG51bGwsIHVzZS1kZXZpY2Utd2lkdGggPSBydXB0dXJlLnVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgaWYgLWlzLXN0cmluZyhvcmllbnRhdGlvbilcbiAgICBvcmllbnRhdGlvbiA9IGNvbnZlcnQob3JpZW50YXRpb24pXG4gIGlmIC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICBkZW5zaXR5ID0gY29udmVydChkZW5zaXR5KVxuICArYmV0d2VlbihydXB0dXJlLm1vYmlsZS1jdXRvZmYsIHJ1cHR1cmUuZGVza3RvcC1jdXRvZmYsIGFudGktb3ZlcmxhcCwgZGVuc2l0eSwgb3JpZW50YXRpb24sIHVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzKVxuICAgIHtibG9ja31cblxuZGVza3RvcChhbnRpLW92ZXJsYXAgPSBydXB0dXJlLmFudGktb3ZlcmxhcCwgZGVuc2l0eSA9IG51bGwsIG9yaWVudGF0aW9uID0gbnVsbCwgdXNlLWRldmljZS13aWR0aCA9IHJ1cHR1cmUudXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBpZiAtaXMtc3RyaW5nKG9yaWVudGF0aW9uKVxuICAgIG9yaWVudGF0aW9uID0gY29udmVydChvcmllbnRhdGlvbilcbiAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICthYm92ZShydXB0dXJlLmRlc2t0b3AtY3V0b2ZmLCBhbnRpLW92ZXJsYXAsIGRlbnNpdHksIG9yaWVudGF0aW9uLCB1c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcylcbiAgICB7YmxvY2t9XG5cbmhkKGFudGktb3ZlcmxhcCA9IHJ1cHR1cmUuYW50aS1vdmVybGFwLCBkZW5zaXR5ID0gbnVsbCwgb3JpZW50YXRpb24gPSBudWxsLCB1c2UtZGV2aWNlLXdpZHRoID0gcnVwdHVyZS51c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcyA9IG51bGwpXG4gIGlmIC1pcy1zdHJpbmcob3JpZW50YXRpb24pXG4gICAgb3JpZW50YXRpb24gPSBjb252ZXJ0KG9yaWVudGF0aW9uKVxuICBpZiAtaXMtc3RyaW5nKGRlbnNpdHkpXG4gICAgZGVuc2l0eSA9IGNvbnZlcnQoZGVuc2l0eSlcbiAgK2Fib3ZlKHJ1cHR1cmUuaGQtY3V0b2ZmLCBhbnRpLW92ZXJsYXAsIGRlbnNpdHksIG9yaWVudGF0aW9uLCB1c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcylcbiAgICB7YmxvY2t9XG5cbmRlbnNpdHkoZGVuc2l0eSwgb3JpZW50YXRpb24gPSBudWxsLCBmYWxsYmFjay1jbGFzcyA9IG51bGwpXG4gIHNlbGVjdGVkID0gc2VsZWN0b3IoKVxuICBpZiBub3QgKHJ1cHR1cmUucmFzdGVyaXNlLW1lZGlhLXF1ZXJpZXMpXG4gICAgY29uZGl0aW9ucyA9ICgpXG4gICAgZm9yIHF1ZXJ5IGluIC1kZW5zaXR5LXF1ZXJpZXMoZGVuc2l0eSlcbiAgICAgIGNvbmRpdGlvbiA9ICdvbmx5IHNjcmVlbiBhbmQgJXMnICUgKHF1ZXJ5KVxuICAgICAgaWYgb3JpZW50YXRpb25cbiAgICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uICsgJyBhbmQgKG9yaWVudGF0aW9uOiAlcyknICUgKG9yaWVudGF0aW9uKVxuICAgICAgcHVzaChjb25kaXRpb25zLCBjb25kaXRpb24pXG4gICAgY29uZGl0aW9uID0gam9pbignLCAnLCBjb25kaXRpb25zKVxuICAgIEBtZWRpYSBjb25kaXRpb25cbiAgICAgIHtibG9ja31cbiAgICBpZiBmYWxsYmFjay1jbGFzc1xuICAgICAgK2NyZWF0ZS1mYWxsYmFjay1jbGFzcyhzZWxlY3RlZCwgZmFsbGJhY2stY2xhc3MpXG4gICAgICAgIHtibG9ja31cblxucGl4ZWwtcmF0aW8gPSBkZW5zaXR5XG5cbnJldGluYShvcmllbnRhdGlvbiA9IG51bGwsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgK2RlbnNpdHkoJ3JldGluYScsIG9yaWVudGF0aW9uLCBmYWxsYmFjay1jbGFzcylcbiAgICB7YmxvY2t9XG5cbmxhbmRzY2FwZShkZW5zaXR5ID0gbnVsbCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBzZWxlY3RlZCA9IHNlbGVjdG9yKClcbiAgaWYgbm90IChydXB0dXJlLnJhc3RlcmlzZS1tZWRpYS1xdWVyaWVzKVxuICAgIGlmIC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICAgaWYgZGVuc2l0eVxuICAgICAgK3BpeGVsLXJhdGlvKGRlbnNpdHksIG9yaWVudGF0aW9uOiBsYW5kc2NhcGUsIGZhbGxiYWNrLWNsYXNzKVxuICAgICAgICB7YmxvY2t9XG4gICAgZWxzZVxuICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSlcbiAgICAgICAge2Jsb2NrfVxuICAgICAgaWYgZmFsbGJhY2stY2xhc3NcbiAgICAgICAgK2NyZWF0ZS1mYWxsYmFjay1jbGFzcyhzZWxlY3RlZCwgZmFsbGJhY2stY2xhc3MpXG4gICAgICAgICAge2Jsb2NrfVxuXG5wb3J0cmFpdChkZW5zaXR5ID0gbnVsbCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBzZWxlY3RlZCA9IHNlbGVjdG9yKClcbiAgaWYgbm90IChydXB0dXJlLnJhc3RlcmlzZS1tZWRpYS1xdWVyaWVzKVxuICAgIGlmIC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICAgaWYgZGVuc2l0eVxuICAgICAgK3BpeGVsLXJhdGlvKGRlbnNpdHksIG9yaWVudGF0aW9uOiBwb3J0cmFpdCwgZmFsbGJhY2stY2xhc3MpXG4gICAgICAgIHtibG9ja31cbiAgICBlbHNlXG4gICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpXG4gICAgICAgIHtibG9ja31cbiAgICAgIGlmIGZhbGxiYWNrLWNsYXNzXG4gICAgICAgICtjcmVhdGUtZmFsbGJhY2stY2xhc3Moc2VsZWN0ZWQsIGZhbGxiYWNrLWNsYXNzKVxuICAgICAgICAgIHtibG9ja31cbiJdfQ== */