
.label[data-v-5c7bbdc2] {
  width: 120px;
  font-weight: 600;
}


.label[data-v-18ef45ee] {
  width: 125px;
  font-weight: 600;
}


.label[data-v-f03c7078] {
  width: 120px;
  font-weight: 600;
}


.row[data-v-5a1f8eab] {
  height: 10%;
}
h2[data-v-5a1f8eab] {
  display: inline-block;
  vertical-align: middle;
}
.card[data-v-5a1f8eab] {
  width: 80%;
  margin-bottom: 30px;
  padding: 25px 35px 35px;
}
.card_top[data-v-5a1f8eab] {
  display: block;
  margin-bottom: 10px;
}


.cursor-help {
  cursor: help;
}


table[data-v-120e5af6] {
  width: 100%;
  border: 2px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
  background-color: white;
  border-collapse:  collapse;
  font-size: 12px;
}
th[data-v-120e5af6] {
  color: black;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-top: 2px;
  border-radius: 3px;
}
td[data-v-120e5af6] {
  background-color: white;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
}
th[data-v-120e5af6], td[data-v-120e5af6] {
  padding: 2px 5px;
  width: 1%;
}



table[data-v-30c3e992] {
  width: 100%;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
  background-color: white;
  border-collapse:  collapse;
  font-size: 12px;
}
th[data-v-30c3e992] {
  color: black;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
}
th.client[data-v-30c3e992] {
  width: 20%;
}
th.tonnage[data-v-30c3e992],
th.hours[data-v-30c3e992] {
  width:4%;
}
td[data-v-30c3e992] {
  background-color: white;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
}
th[data-v-30c3e992], td[data-v-30c3e992] {
  padding: 2px 5px;
}
.headers[data-v-30c3e992] {
  text-align: left;
}
h6[data-v-30c3e992] {
  text-align: center
}
li[data-v-30c3e992] {
  font-size: 12px;
}
.obligations[data-v-30c3e992] {
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
  background-color: white;
}
#footerTable[data-v-30c3e992] {
  text-decoration: underline;
  text-align: left;
}



table[data-v-64e6a29c] {
  width: 100%;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
  background-color: white;
  border-collapse:  collapse;
  font-size: 12px;
}
th[data-v-64e6a29c] {
  color: black;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
}
td[data-v-64e6a29c] {
  background-color: white;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
  text-align: center;
}
.red[data-v-64e6a29c] {
  color: red;
}



table[data-v-82c615e6] {
  width: 100%;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
  background-color: white;
  border-collapse:  collapse;
  font-size: 12px;
}
th[data-v-82c615e6] {
  color: black;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
}
th.observations[data-v-82c615e6] {
  width:25%;
}
td[data-v-82c615e6] {
  background-color: white;
  border: 1px solid rgba(76, 156, 199, 0.98);
  border-radius: 3px;
}
th[data-v-82c615e6], td[data-v-82c615e6] {
  padding: 2px 5px;
}
h4[data-v-82c615e6] {
  text-align: center
}
.red[data-v-82c615e6] {
  color: red;
}

























































































































































































































/* Hide leaflet itinerary */
div.leaflet-top.leaflet-right {
  display: none !important;
  width: 0 !important;
  height: 0 !important;
}


.label[data-v-3f0700b8] {
  width: 120px;
  font-weight: 600;
}


#card[data-v-7a0c5b68] {
  width: 31%;
  display: inline-block;
  margin: 0px 20px 20px 0px;
  text-align: center;
}
.v-image[data-v-7a0c5b68] {
  display: inline-block;
  width: 30%;
}
.infoCard[data-v-7a0c5b68] {
  display: inline-block;
  width: 50%;
  margin-top: 10px;
  vertical-align: top;
}
.infoCard span[data-v-7a0c5b68] {
  display: block;
  text-align: left;
  font-size: 18px;
}
.infoCard span[data-v-7a0c5b68]:nth-child(1) {
  color: #707070;
}
.infoCard span[data-v-7a0c5b68]:nth-child(3) {
  color: #707070;
  line-height: 40px;
  font-size: 11px;
}
.infoCard span[data-v-7a0c5b68]:nth-child(4) {
  color: #fd6e60;
  font-size: 28px;
  font-weight: bold;
}
.buttons[data-v-7a0c5b68] {
  display: flex;
  width: 100%;
}
.v-btn[data-v-7a0c5b68] {
  border-left: 1px solid #c2c2c2;
  border-top: 1px solid #c2c2c2;
  border-radius: 0;
  height: 60px;
  flex: 2 1 100px;
}
.v-btn[data-v-7a0c5b68]:nth-child(1) {
  border-left: 0;
}


.label[data-v-13de95c4] {
  width: 120px;
  font-weight: 600;
}


.centered-input[data-v-bbcb6ec2] input {
  text-align: center
}

#map[data-v-685ddbc0] {
  max-width: 100%;
  max-height: 100%;
}
#map path[data-v-685ddbc0] {
  fill: #395a6b;
  stroke: #ffffff;
  stroke-width: 0.6;
  transition: fill 0.2s, stroke 0.3s;
}
#map path[data-v-685ddbc0]:hover {
  fill: red;
  stroke: red;
}
#map .separator[data-v-685ddbc0] {
  stroke: #ccc;
  fill: none;
  stroke-width: 1.5;
}
#map .separator[data-v-685ddbc0]:hover {
  stroke: #ccc;
  fill: none;
}
#map .affecte[data-v-685ddbc0] {
  fill: #fd6e60;
  stroke: #ffffff;
  stroke-width: 1.5;
}
#tooltip[data-v-685ddbc0] {
  position: absolute;
  background-color: #ffffff;
  color: #395a6b;
  border-style: inset;
  padding: 4px;
  width: 200px;
  z-index: 1;
  display: none;
}

.wrapper {
  max-width: 400px;
  margin: 0 auto;
}


.label[data-v-96c7fff4] {
  width: 200px;
  font-weight: 600;
}








































































































































































/* Hide leaflet itinerary */
div.leaflet-top.leaflet-right {
  display: none !important;
  width: 0 !important;
  height: 0 !important;
}


.costs:nth-of-type(even) {
  font-weight: bold;
}
.toursQty {
  font-weight: bold;
}
.v-data-table__wrapper table tbody tr td.text-start {
  padding: 0 8px!important;
}
// Pritable text size
@media print {
html, body, div, span, h1, h2, h3, h4, h5, h6, p, pre, a, ol, ul, li, table, tbody, tfoot, thead, tr, th, td, i {
    font-size: 6pt !important;
}
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFjay1zY3JpcHQuY3NzIiwibWFwcGluZ3MiOiI7QUF5REE7RUFDQTtFQUNBO0FBQ0E7OztBQ1FBO0VBQ0E7RUFDQTtBQUNBOzs7QUNDQTtFQUNBO0VBQ0E7QUFDQTs7O0FDakRBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBOzs7QUNpRUE7RUFDQTtBQUNBOzs7QUNpRkE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7QUFDQTs7OztBQ21GQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTtBQUVBOztFQUVBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7RUFDQTtBQUNBOzs7O0FDN05BO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBOzs7O0FDdkVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNnR0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBOzs7QUMzTEE7RUFDQTtFQUNBO0FBQ0E7OztBQ1VBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTs7O0FDakNBO0VBQ0E7RUFDQTtBQUNBOzs7QUNvUkE7RUFDQTtBQUNBOztBQytJQTtFQUNFO0VBQ0E7QUFuZUY7QUFxZUU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtBQW5lSjtBQXFlRTtFQUNFO0VBQ0E7QUFuZUo7QUFxZUU7RUFDRTtFQUNBO0VBQ0E7QUFuZUo7QUFxZUU7RUFDRTtFQUNBO0FBbmVKO0FBcWVFO0VBQ0U7RUFDQTtFQUNBO0FBbmVKO0FBdWVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQXBlRixDOztBQytIQTtFQUNBO0VBQ0E7QUFDQTs7O0FDekZBO0VBQ0E7RUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcUZBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTs7O0FDOGhCQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0FBQ0E7QUFFQTs7QUFFQTtJQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvYXBwL21vZHVsZS9iYWNrX29mZmljZS9hY2NvdW50L0FjY291bnRFZGl0Rm9ybS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9hcHAvbW9kdWxlL2JhY2tfb2ZmaWNlL2FjY291bnQvQWRkcmVzc0VkaXRGb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2UvYWNjb3VudC9DdXN0b21lckFjY291bnRJbmZvLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2UvY2F0YWxvZy9jb21wb25lbnQvQ2F0YWxvZ0l0ZW1MaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2UvZGFzaGJvYXJkL1B1YmxpY0hvbGlkYXlzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2UvZGVsaXZlcnktc2NoZWR1bGUvY29tcG9uZW50L0RlbGl2ZXJ5U2NoZWR1bGVDaGFydGVyUHJpbnQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvYXBwL21vZHVsZS9iYWNrX29mZmljZS9kZWxpdmVyeS1zY2hlZHVsZS9jb21wb25lbnQvRGVsaXZlcnlTY2hlZHVsZURyaXZlclByaW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2UvZGVsaXZlcnktc2NoZWR1bGUvY29tcG9uZW50L0RlbGl2ZXJ5U2NoZWR1bGVXYXJlaG91c2VDaGFydGVyUHJpbnQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvYXBwL21vZHVsZS9iYWNrX29mZmljZS9kZWxpdmVyeS1zY2hlZHVsZS9jb21wb25lbnQvRGVsaXZlcnlTY2hlZHVsZVdhcmVob3VzZVByaW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2UvaXRpbmVyYXJ5L2NvbXBvbmVudC9NYWtlSXRpbmVyYXJ5TWFwLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2UvbW9kdWxlL2NvbXBvbmVudC9Nb2R1bGVFZGl0Rm9ybS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9hcHAvbW9kdWxlL2JhY2tfb2ZmaWNlL3Byb2R1Y3QvUHJvZHVjdENhcmQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvYXBwL21vZHVsZS9iYWNrX29mZmljZS9yZXBsZW5pc2htZW50L2NvbXBvbmVudC9SZXBsZW5pc2htZW50RWRpdEZvcm0udnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvYXBwL21vZHVsZS9iYWNrX29mZmljZS9zYWxlcy9jb21wb25lbnQvT3JkZXJJdGVtTWFudWFsRm9ybS52dWUiLCJ3ZWJwYWNrOi8vLy4vTWFwU3ZnLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9tb2R1bGUvYmFja19vZmZpY2Uvc2VjdG9yaXphdGlvbi9TZWN0b3JNYXBDcmVhdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9hcHAvbW9kdWxlL2JhY2tfb2ZmaWNlL3VzZXIvVXNlckVkaXRGb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2FwcC9zaGFyZWQvY29tcG9uZW50L21hcC9NYXJrZXJzT25NYXAudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvYXBwL3NoYXJlZC9jb21wb25lbnQvdGFibGUvQXBpRGF0YVRhYmxlLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHYtY29sIHYtaWY9XCJpc0VkaXRcIj5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICA8L3YtY29sPlxuICAgIDx2LWNvbCB2LWVsc2U+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5Ob208L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj57eyB1c2VyLm5hbWUgfX08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5FbWFpbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPnt7IHVzZXIuZW1haWwgfX08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5Uw6lsw6lwaG9uZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPnt7IHVzZXIuYWRkcmVzcyA/IHVzZXIuYWRkcmVzcy5waG9uZSA6ICctJ319PC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+QWRyZXNzZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiIHYtaWY9XCJ1c2VyLmFkZHJlc3NcIj5cbiAgICAgICAgICA8c3Bhbj57eyB1c2VyLmFkZHJlc3MuYWRkcmVzc18xIH19LCB7eyB1c2VyLmFkZHJlc3MucG9zdGNvZGUgfX0ge3sgdXNlci5hZGRyZXNzLmNpdHkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgdXNlci5hZGRyZXNzLmNvdW50cnkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHYtZWxzZT4tPC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgIDwvdi1jb2w+XG4gICAgPHYtcm93IG5vLWd1dHRlcnMgOmp1c3RpZnk9XCIkdnVldGlmeS5icmVha3BvaW50Lm1kQW5kVXAgPyAnZW5kJyA6ICdjZW50ZXInXCIgdi1pZj1cIiFpc0VkaXRcIj5cbiAgICAgIDx2LWJ0biBjb2xvcj1cInNlY29uZGFyeVwiIHYtb246Y2xpY2s9XCJpc0VkaXQgPSAhaXNFZGl0XCI+XG4gICAgICAgIDx2LWljb24gbGVmdD5tZGktcGVuY2lsPC92LWljb24+XG4gICAgICAgIE1vZGlmaWVyIGxlcyBpbmZvcm1hdGlvbnNcbiAgICAgIDwvdi1idG4+XG4gICAgPC92LXJvdz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IGxhbmc9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcInVzZXItZWRpdC1mb3JtXCIsXG4gIHByb3BzOiBbXCJ1c2VyXCJdLFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kZW1pdHRlci5vbihcInRvZ2dsZS11c2VyLWluZm9cIiwgKCkgPT4ge1xuICAgICAgdGhpcy5pc0VkaXQgPSAhdGhpcy5pc0VkaXQ7XG4gICAgfSk7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNFZGl0OiBmYWxzZSxcbiAgICB9O1xuICB9LFxufSk7XG5cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmxhYmVsIHtcbiAgd2lkdGg6IDEyMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHYtY29sIHYtaWY9XCJpc0VkaXRcIj5cbiAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICA8L3YtY29sPlxuICAgIDx2LWNvbCB2LWVsc2UgY2xhc3M9XCJwYS0wIG1hLTBcIj5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzIGNsYXNzPVwicHktMVwiPlxuICAgICAgICA8di1jaGlwIGNsYXNzPVwibWEtMiBwcmltYXJ5IHdoaXRlLS10ZXh0XCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJwYS0wIG1hLTBcIj5BZHJlc3NlIGRlIDxzcGFuIGNsYXNzPVwidGV4dC1sb3dlcmNhc2VcIj57eyBhZGRyZXNzLnR5cGUubmFtZSB9fTwvc3Bhbj48L3A+XG4gICAgICAgIDwvdi1jaGlwPlxuICAgICAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgICAgICAgPHYtYnRuIGNvbG9yPVwic2Vjb25kYXJ5XCIgdi1vbjpjbGljaz1cImlzRWRpdCA9ICFpc0VkaXRcIiBpY29uPlxuICAgICAgICAgIDx2LWljb24gc2l6ZT1cIjI1XCI+bWRpLXBlbmNpbDwvdi1pY29uPlxuICAgICAgICA8L3YtYnRuPlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlxuICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLWFjY291bnQ8L3YtaWNvbj5cbiAgICAgICAgICBOb21cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIj57eyBhZGRyZXNzLm5hbWUgfX0gPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5cbiAgICAgICAgICA8di1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwibXItMlwiPm1kaS1tYXAtbWFya2VyPC92LWljb24+XG4gICAgICAgICAgQWRyZXNzZVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj5cbiAgICAgICAgICA8c3Bhbj57eyBhZGRyZXNzLmFkZHJlc3MxIH19LCB7eyBhZGRyZXNzLnBvc3Rjb2RlIH19IHt7IGFkZHJlc3MuY2l0eSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyBhZGRyZXNzLmNvdW50cnkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlxuICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLXBob25lPC92LWljb24+XG4gICAgICAgICAgVMOpbMOpcGhvbmVcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+e3sgYWRkcmVzcy5waG9uZSB9fTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICA8L3YtY29sPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwiYWRkcmVzcy1lZGl0LWZvcm1cIixcbiAgcHJvcHM6IFtcImFkZHJlc3NcIiwgXCJldmVudF9rZXlcIl0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRlbWl0dGVyLm9uKFwidG9nZ2xlLWFkZHJlc3MtaW5mb1wiLCAocmVmKSA9PiB7XG4gICAgICBpZiAodGhpcy5ldmVudF9rZXkgPT0gcmVmKSB7XG4gICAgICAgIHRoaXMuaXNFZGl0ID0gIXRoaXMuaXNFZGl0O1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRWRpdDogZmFsc2UsXG4gICAgfTtcbiAgfSxcbn0pO1xuXG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5sYWJlbCB7XG4gIHdpZHRoOiAxMjVweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxoNCBjbGFzcz1cInB5LTQgcGItMiBweC0yXCI+SW5mb3JtYXRpb25zIGfDqW7DqXJhbGVzPC9oND5cbiAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgIDxzbG90IG5hbWU9XCJtYWluXCI+PC9zbG90PlxuICAgIDwvdi1yb3c+XG4gICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICA8c2xvdCBuYW1lPVwidHlwZVwiPjwvc2xvdD5cbiAgICA8L3Ytcm93PlxuXG4gICAgPHYtZGl2aWRlciBjbGFzcz1cIm1hLTIgbXQtMVwiPjwvdi1kaXZpZGVyPlxuICAgIDx2LXJvdyBuby1ndXR0ZXJzPiA8L3Ytcm93PlxuICAgIDx2LXJvdyBuby1ndXR0ZXJzIHYtaWY9XCJ0eXBlID09PSAnQWdlbnQgY29tbWVyY2lhbCdcIj5cbiAgICAgIHt7IHRoaXMuZGVwYXJ0ZW1lbnRzIH19XG4gICAgICA8c2VjdG9yaXphdGlvbi1tYXAgOmRlcGFydGVtZW50cz1cImRlcGFydGVtZW50c1wiPjwvc2VjdG9yaXphdGlvbi1tYXA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgIG5hbWU9XCJkZXBhcnRtZW50c1wiXG4gICAgICAgIDp2YWx1ZT1cIkpTT04uc3RyaW5naWZ5KHsgZGVwYXJ0ZW1lbnRzIH0pXCJcbiAgICAgIC8+XG4gICAgPC92LXJvdz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IGxhbmc9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcImN1c3RvbWVyLWFjY291bnQtaW5mb1wiLFxuICBwcm9wczogW1wibW9kdWxlXCJdLFxuICBtZXRob2RzOiB7fSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIlwiLFxuICAgICAgZGVwYXJ0ZW1lbnRzOiBbXSxcbiAgICB9O1xuICB9LFxuICB3YXRjaDoge1xuICAgIHR5cGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgIT0gXCJBZ2VudCBjb21tZXJjaWFsXCIpIHtcbiAgICAgICAgdGhpcy5kZXBhcnRlbWVudHMgPSBbXTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgLy9hIGNoYXF1ZSBub3V2ZWxsZSBhY3Rpb25cbiAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAvL29uIHLDqWN1cMOpcmUgbCfDqWzDqW1lbnQgdi1zZWxlY3QgZHUgdHlwZSBkZSBjb210cGVcbiAgICAgIGNvbnN0IGVsOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidi1zZWxlY3RfX3NlbGVjdGlvbnNcIik7XG4gICAgICAvLyBvbiBlY291dGUgbGVzIGNsaWNrXG4gICAgICBlbFswXT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgLy9vbiBhdHRlbmQgcXVlIGxhIGxpc3RlIHNlIGNoYXJnZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvL29uIHJlY3Vww6hyZSBsJ2VsZW1lbnQgbGlzdGVcbiAgICAgICAgICBjb25zdCB0ZXN0OiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidi1tZW51X19jb250ZW50XCIpO1xuICAgICAgICAgIC8vb24gZWNvdXRlIGxlcyBjbGlja1xuICAgICAgICAgIHRlc3RbMF0/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZWI6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gb24gcsOpY3Vww6hyZSBsYSB2YWxldXIgZHUgdHlwZSBkZSBjb21wdGVcbiAgICAgICAgICAgIGNvbnN0IHRleHQ6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgICAgIFwidi1zZWxlY3RfX3NlbGVjdGlvblwiXG4gICAgICAgICAgICApWzBdLmlubmVySFRNTDtcbiAgICAgICAgICAgIC8vb24gbCdhZmZlY3RlIGEgbGEgcHJvcHMgdHlwZSBwb3VyIGZhaXJlIGZvbmN0aW9ubmVyIGxlIHYtaWYgZHUgYm91dG9uIGFmZmVjdGF0aW9uIGRlcyBkw6lwYXJ0ZW1lbnRzXG4gICAgICAgICAgICB0aGlzLnR5cGUgPSB0ZXh0O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxufSk7XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5sYWJlbCB7XG4gIHdpZHRoOiAxMjBweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgaWQ9XCJjYXJkXCI+XG4gICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gICAgPHYtY2FyZCBjbGFzcz1cIm14LWF1dG8gY2FyZFwiIG1heC13aWR0aD1cIjEwMCVcIiBvdXRsaW5lZD5cbiAgICAgIDx2LWljb24gbGFyZ2UgY29sb3I9XCJzZWNvbmRhcnlcIj5tZGkte3sgY2F0YWxvZy5pY29uIH19PC92LWljb24+XG4gICAgICA8aDIgY2xhc3M9XCJtbC0yXCI+e3sgY2F0YWxvZy5uYW1lIH19PC9oMj5cbiAgICA8L3YtY2FyZD5cbiAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IGxhbmc9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcImNhdGFsb2ctaXRlbS1saXN0XCIsXG4gIHByb3BzOiBbXCJjYXRhbG9nXCJdLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICB9O1xuICB9LFxufSk7XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5yb3cge1xuICBoZWlnaHQ6IDEwJTtcbn1cbmgyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmNhcmQge1xuICB3aWR0aDogODAlO1xuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICBwYWRkaW5nOiAyNXB4IDM1cHggMzVweDtcbn1cbi5jYXJkX3RvcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICAmbmJzcDstJm5ic3A7XG4gICAgPHNtYWxsXG4gICAgICAgIGNsYXNzPVwiZm9udC1pdGFsaWNcIlxuICAgICAgICA6Y2xhc3M9XCJuZXh0RGVsaXZlcnlEYXRlLmlzUHVibGljSG9saWRheSA/ICdvcmFuZ2UtLXRleHQgY3Vyc29yLWhlbHAnIDogJydcIlxuICAgICAgICA6dGl0bGU9XCJuZXh0RGVsaXZlcnlEYXRlLnRpdGxlXCJcbiAgICA+XG4gICAgICBQcm9jaGFpbmUgbGl2cmFpc29uIDoge3sgbmV4dERlbGl2ZXJ5RGF0ZS5kYXRlIHwgZGF0ZSB9fVxuXG4gICAgICA8di10b29sdGlwIGJvdHRvbSBjb2xvcj1cImdyZXlcIj5cbiAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphY3RpdmF0b3I9XCJ7IG9uLCBhdHRycyB9XCI+XG4gICAgICAgICAgPHYtaWNvblxuICAgICAgICAgICAgICB2LWJpbmQ9XCJhdHRyc1wiXG4gICAgICAgICAgICAgIHYtb249XCJvblwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cIm5leHREZWxpdmVyeURhdGUuaXNQdWJsaWNIb2xpZGF5ID8gJ29yYW5nZS0tdGV4dCcgOiAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcbiAgICAgICAgICA8L3YtaWNvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiAjMDAwO1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZFwiPkpvdXJzIGbDqXJpw6lzIGRhbnMgbGVzIDIgcHJvY2hhaW5zIG1vaXMgOjwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IHYtZm9yPVwiaG9saSBpbiBwdWJsaWNIb2xpZGF5c1wiPlxuICAgICAgICAgICAge3sgaG9saS5zdGFydERhdGUgfCBkYXRlIH19IDoge3sgaG9saS5uYW1lLmZpbmQobiA9PiBuLmxhbmd1YWdlID09PSAnRlInKS50ZXh0IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LXRvb2x0aXA+XG4gICAgPC9zbWFsbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwicHVibGljLWhvbGlkYXlzXCIsXG4gIHByb3BzOiBbXSxcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBuZXh0RGVsaXZlcnlEYXRlOiB7XG4gICAgICBkYXRlOiBudWxsLFxuICAgICAgaXNQdWJsaWNIb2xpZGF5OiBmYWxzZSxcbiAgICAgIHRpdGxlOiAnJ1xuICAgIH0sXG4gICAgcHVibGljSG9saWRheXM6IFtdXG4gIH0pLFxuICBmaWx0ZXJzOiB7XG4gICAgZGF0ZShkYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZSA/IG1vbWVudChkYXRlKS5mb3JtYXQoJ0REL01NL1lZWVknKSA6ICcnO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy5uZXh0RGVsaXZlcnlEYXRlLmRhdGUgPSB0aGlzLiR0b21vcnJvdztcbiAgICB0aGlzLmZldGNoUHVibGljSG9saWRheXMoKTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGZldGNoUHVibGljSG9saWRheXMoKSB7XG4gICAgICB0aGlzLnB1YmxpY0hvbGlkYXlzID0gbnVsbDtcbiAgICAgIGNvbnN0IHN0b3JhZ2VIb2xpZGF5cyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdWJsaWMtaG9saWRheXMnKTtcblxuICAgICAgLy8gR2V0IHB1YmxpYyBob2xpZGF5cyBmcm9tIHNlc3Npb24gc3RvcmFnZVxuICAgICAgaWYgKHN0b3JhZ2VIb2xpZGF5cyAmJiBzdG9yYWdlSG9saWRheXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0b2RheVBIID0gSlNPTi5wYXJzZShzdG9yYWdlSG9saWRheXMpO1xuICAgICAgICAvLyBJZiBhbHJlYWR5IGZldGNoIHRvZGF5LCBnZXQgdGhlbVxuICAgICAgICBpZiAobW9tZW50KHRvZGF5UEguZGF0ZSkuaXNTYW1lKG1vbWVudCgpLCAnZGF5JykgJiYgdG9kYXlQSC5wdWJsaWNIb2xpZGF5cykge1xuICAgICAgICAgIHRoaXMucHVibGljSG9saWRheXMgPSB0b2RheVBILnB1YmxpY0hvbGlkYXlzXG4gICAgICAgIH1cbiAgICAgICAgLy8gRWxzZSBkZWxldGUgY2F1c2UgYW5vdGhlciBkYXlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1YmxpYy1ob2xpZGF5cycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBleHRlcm5hbCBhcGkgdG8gZ2V0IHB1YmxpYyBob2xpZGF5c1xuICAgICAgaWYgKG51bGwgPT09IHRoaXMucHVibGljSG9saWRheXMpIHtcbiAgICAgICAgbGV0IGRhdGVzID0gW1xuICAgICAgICAgICAgJ3ZhbGlkRnJvbT0nICsgbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgICAgICAgICAndmFsaWRUbz0nICsgbW9tZW50KCkuYWRkKDIsICdtb250aCcpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL29wZW5ob2xpZGF5c2FwaS5vcmcvUHVibGljSG9saWRheXM/Y291bnRyeUlzb0NvZGU9RlImbGFuZ3VhZ2VJc29Db2RlPUZSJnN1YmRpdmlzaW9uQ29kZT1GUi1GUiYnICsgZGF0ZXMuam9pbignJicpKVxuICAgICAgICB0aGlzLnB1YmxpY0hvbGlkYXlzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBTZXQgcHVibGljIGhvbGlkYXlzIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncHVibGljLWhvbGlkYXlzJywgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGRhdGU6IG1vbWVudCgpLFxuICAgICAgICAgIHB1YmxpY0hvbGlkYXlzOiB0aGlzLnB1YmxpY0hvbGlkYXlzXG4gICAgICAgIH0pKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b21vcnJvd1BIID0gdGhpcy5wdWJsaWNIb2xpZGF5cy5maW5kKHBoID0+IG1vbWVudChwaC5zdGFydERhdGUpLmlzU2FtZSh0aGlzLiR0b21vcnJvdywgJ2RheScpKTtcbiAgICAgIHRoaXMubmV4dERlbGl2ZXJ5RGF0ZS5pc1B1YmxpY0hvbGlkYXkgPSB0b21vcnJvd1BIICYmIHRvbW9ycm93UEguaWQ7XG4gICAgICB0aGlzLm5leHREZWxpdmVyeURhdGUudGl0bGUgPSB0b21vcnJvd1BIID8gdG9tb3Jyb3dQSC5uYW1lLmZpbmQobiA9PiBuLmxhbmd1YWdlID09PSAnRlInKT8udGV4dCA6ICcnO1xuXG4gICAgICAvLyBJZiB0b21vcnJvdyBpcyBQSCwgYWRkIG9uZSBkYXkgKG9yIG1vcmUgaWYgd2Vla2VuZClcbiAgICAgIGlmICh0b21vcnJvd1BIICYmIHRvbW9ycm93UEguaWQpIHtcbiAgICAgICAgdGhpcy4kdG9tb3Jyb3cuYWRkKDEsICdkYXlzJylcbiAgICAgICAgd2hpbGUgKFs2LCAwXS5pbmNsdWRlcyh0aGlzLiR0b21vcnJvdy5kYXkoKSkpIHtcbiAgICAgICAgICB0aGlzLiR0b21vcnJvdyA9IHRoaXMuJHRvbW9ycm93LmFkZCgxLCAnZGF5cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbiAgLmN1cnNvci1oZWxwIHtcbiAgICBjdXJzb3I6IGhlbHA7XG4gIH1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtdC01XCI+XG4gICAgPGRpVj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cIm10LTRcIiA+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+RVhQRURJVEVVUjwvdGg+XG4gICAgICAgICAgICA8dGg+REVTVElOQVRBSVJFPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+U29jacOpdMOpPC9zdHJvbmc+IDogQ0FSUklFUkVTPC90ZD5cbiAgICAgICAgICAgIDx0ZD48c3Ryb25nPlNvY2nDqXTDqTwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIubmFtZSB9fVxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgICAoe3sgZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlci5hZGRyZXNzLnBvc3Rjb2RlWzBdfX17eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3MucG9zdGNvZGVbMV19fSlcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZD48c3Ryb25nPkFkcmVzc2U8L3N0cm9uZz4gOiBCUCAyIC0gUm91dGUgZGUgTmlvcnQ8YnI+NzkzMTAgTUFaSUVSRVMgRU4gR0FUSU5FPC90ZD5cbiAgICAgICAgICAgIDx0ZD48c3Ryb25nPkFkcmVzc2U8L3N0cm9uZz4gOiA8c3BhbiB2LWlmPVwiZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3NcIj57eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3MuYWRkcmVzczEgfX08L3NwYW4+PGJyPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgICB7eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3MucG9zdGNvZGUgfX0ge3sgZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlci5hZGRyZXNzLmNpdHkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZD48c3Ryb25nPk5vbTwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5mdWxsbmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+PHN0cm9uZz5Ob208L3N0cm9uZz4gOiB7eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLm5hbWUgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+VMOpbMOpcGhvbmU8L3N0cm9uZz4gOiB7eyBkZWxpdmVyeVNjaGVkdWxlLnVzZXIucGhvbmUgfX08L3RkPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+VMOpbMOpcGhvbmU8L3N0cm9uZz4gOiA8c3BhbiB2LWlmPVwiZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3NcIj57eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3MucGhvbmUgfX08L3NwYW4+PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZD48c3Ryb25nPkUtbWFpbDwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5lbWFpbCB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+PHN0cm9uZz5FLW1haWw8L3N0cm9uZz4gOiA8c3BhbiB2LWlmPVwiZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3NcIj57eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3MuZW1haWwgfX08L3NwYW4+PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8dGJvZHkgdi1mb3I9XCJ0b3VyIGluIHRvdXJzXCI+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJ0b3VyLmlzX21lc3NhZ2VcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInJlZC0tYm9yZGVyXCI+XG4gICAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIHN0eWxlPVwiY29sb3I6IG9yYW5nZTtcIj5cbiAgICAgICAgICAgICAgICA8di1pY29uIGNvbG9yPVwib3JhbmdlXCIgc21hbGwgY2xhc3M9XCJtci0yXCI+bWRpLWNvbW1lbnQtdGV4dC1vdXRsaW5lPC92LWljb24+XG4gICAgICAgICAgICAgICAge3sgdG91ci5tZXNzYWdlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5X29yZGVyXCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCIgc3R5bGU9XCJib3JkZXItdG9wOiAycHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpXCI+REVTQ1JJUFRJT04gTUFSQ0hBTkRJU0UgQSBUUkFOU1BPUlRFUjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5SRUYgQ09NTUFOREU8L3N0cm9uZz4gOiB7eyBkZWxpdmVyeVNjaGVkdWxlLnVzZXIuZmlyc3RuYW1lIH19IHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5sYXN0bmFtZSB9fTxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlJFRiBQTEFOTklORzwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUuaWQgfX08YnI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5OQVRVUkUgUFJPRFVJVDwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIucHJvZHVjdCA/IHRvdXIuZGVsaXZlcnlfb3JkZXIucHJvZHVjdC5uYW1lIDogJycgfX08YnI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5RVUFOVElURSBBIExJVlJFUjwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfcXVhbnRpdHkgKyAnJm5ic3BUJ319XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkNBUkFDVEVSSVNUSVFVRVMgUEFSVElDVUxJRVJFUzwvc3Ryb25nPiA6PGJyPlxuICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgIDxsaT5CYWNow6JnZSBvYmxpZ2F0b2lyZTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGk+QmVubmVzIHByb3ByZXM8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+Q0hBUkdFTUVOVDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5ERUNIQVJHRU1FTlQ8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+TElFVTwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgfX08YnI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5DT09SRE9OTkVFUzwvc3Ryb25nPiA6PGJyPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtNFwiPjxzdHJvbmc+VMOpbMOpcGhvbmU8L3N0cm9uZz4gOiB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5hZGRyZXNzLnBob25lIH19PC9zcGFuPjxicj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTRcIj48c3Ryb25nPkUtbWFpbDwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLmFkZHJlc3MuZW1haWwgfX08L3NwYW4+PGJyPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+QURSRVNTRTwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLmFkZHJlc3MuYWRkcmVzczEgfX0gLVxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5X29yZGVyICYmIHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlICYmIHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLmFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLmFkZHJlc3MucG9zdGNvZGUgfX0ge3sgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UuYWRkcmVzcy5jaXR5IH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPjxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPihob3JhaXJlcyBkJ291dmVydHVyZXMgOiB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5vcGVuSG91cnMgfX0pPC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD48c3Ryb25nPk5PTSBDTElFTlQ8L3N0cm9uZz4gOiB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLmN1c3RvbWVyLm5hbWUgfX08YnI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5MSUVVPC9zdHJvbmc+IDoge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MuYWRkcmVzczEgIT09ICcuJyA/IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5hZGRyZXNzLmFkZHJlc3MxICsgJyAtICcgOiAnJyB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5X29yZGVyICYmIHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZSAmJiB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzc1wiPlxuICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MucG9zdGNvZGUgfX0ge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MuY2l0eSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj48YnI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5IT1JBSVJFUzwvc3Ryb25nPiA6XG4gICAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZVN0YXJ0IHwgaG91ciB9fSAtIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lRW5kIHwgaG91ciB9fSBldFxuICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmU3RhcnQgfCBob3VyIH19IC0ge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmRW5kIHwgaG91ciB9fTxicj5cbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lU3RhcnRGcmlkYXkgJiYgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVFbmRGcmlkYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmU3RhcnRGcmlkYXkgJiYgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmRW5kRnJpZGF5XCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkhPUkFJUkVTIERVIFZFTkRSRURJPC9zdHJvbmc+IDpcbiAgICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVTdGFydEZyaWRheSB8IGhvdXIgfX0gLSB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUVuZEZyaWRheSB8IGhvdXIgfX0gZXRcbiAgICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmU3RhcnRGcmlkYXkgfCBob3VyIH19IC0ge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmRW5kRnJpZGF5IHwgaG91ciB9fTxicj5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+Tk9NIENIRUYgREUgQ0hBTlRJRVI8L3N0cm9uZz4gOiB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuY2hpZWYgfX08YnI+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50IHx8IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5waG9uZUNsaWVudFwiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5DT05UQUNUIENPTU1BTkRFPC9zdHJvbmc+IDpcbiAgICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50ID8gdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmNvbnRhY3RDbGllbnQgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnBob25lQ2xpZW50ID8gdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnBob25lQ2xpZW50IDogJycgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+PGJyPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+REFURTwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUuZGF0ZSB8IGRhdGV9fTxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkhFVVJFPC9zdHJvbmc+IDoge3sgdG91ci5kZWxpdmVyeUhvdXIgfCBob3VyIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5Db25kaXRpb25zIFBhcnRpY3VsacOocmVzPC9zdHJvbmc+IDpcbiAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICA8bGk+UGFzIGRlIHN1cmNoYXJnZTwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGk+UmVzcGVjdCBwcm90b2NvbGUgZGUgY2hhcmdlbWVudDwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGk+UmVzcGVjdCBkdSBwbGFuIGRlIGNpcmN1bGF0aW9uPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5Db25kaXRpb25zIFBhcnRpY3VsacOocmVzPC9zdHJvbmc+IDo8YnI+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kcml2ZXJfY29tbWVudH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY29sc3Bhbj1cIjJcIj5QUklYIFBSRVNUQVRJT04gREUgVFJBTlNQT1JUPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXJcIj5cbiAgICAgICAgICAgICAgUFUgQVQgOiB7eyB0b3RhbFB1YXQgfX0g4oKsPGJyPlxuICAgICAgICAgICAgICBcIkluZGV4YXRpb24gY2FyYnVyYW50IGNvbXByaXNlXCI8YnI+XG4gICAgICAgICAgICAgIFwiSW50ZXJkaWN0aW9uIGRlIHNvdXMtdHJhaXRlciBjZXR0ZSBwcmVzdGF0aW9uXCJcbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiMlwiPlNJR05BVFVSRVM8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPlxuICAgICAgICAgICAgICBTaW5jw6hyZXMgc2FsdXRhdGlvbnMsPGJyPlxuICAgICAgICAgICAgICBTaWduYXRhaXJlIDoge3sgZGVsaXZlcnlTY2hlZHVsZS51c2VyLmZ1bGxuYW1lIH19LDxicj5cbiAgICAgICAgICAgICAgRm9uY3Rpb24gOiBMb2dpc3RpcXVlIE1hemnDqHJlc1xuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiA3MHB4O1wiPjwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHR5cGU9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6ICdkZWxpdmVyeS1zY2hlZHVsZS1jaGFydGVyLXByaW50JyxcbiAgcHJvcHM6IFsndG91cnMnLCAnZGVsaXZlcnlTY2hlZHVsZSddLFxuICBkYXRhOiAoKSA9PiAoe1xuICAgIHB1QXRBcnJheTogW10sXG4gICAgdG90YWxQdWF0OiBudWxsLFxuICB9KSxcbiAgZmlsdGVyczoge1xuICAgIGRhdGUodmFsdWUpIHtcbiAgICAgIHJldHVybiAodmFsdWUgJiYgbW9tZW50KHZhbHVlKSkgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnREQvTU0vWVlZWScpIDogdmFsdWU7XG4gICAgfSxcbiAgICBob3VyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKHZhbHVlICYmIG1vbWVudCh2YWx1ZSkpID8gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJykgOiB2YWx1ZTtcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOntcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG91cnMuZm9yRWFjaCgodG91cikgPT4geyB0aGlzLnB1QXRBcnJheS5wdXNoKHRvdXIucHVBdCl9KTtcbiAgICAvLyBTdW0gb2YgcHVBdCBmcm9tIGVhY2ggdG91clxuICAgIHRoaXMudG90YWxQdWF0ID0gdGhpcy5wdUF0QXJyYXkucmVkdWNlKChwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUpID0+IHByZXZpb3VzVmFsdWUgKyBjdXJyZW50VmFsdWUsIDApO1xuICAgIC8vIFByaW50IHNjaGVkdWxlXG4gICAgd2luZG93LnByaW50KCk7XG4gICAgLy8gQ2xvc2Ugd2luZG93IGFmdGVyIHByaW50XG4gICAgd2luZG93Lm9uYWZ0ZXJwcmludCA9ICgpID0+IHsgd2luZG93LmNsb3NlKCk7IH07XG4gIH0sXG59KTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuXG50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1jb2xsYXBzZTogIGNvbGxhcHNlO1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbnRoIHtcbiAgY29sb3I6IGJsYWNrO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci10b3A6IDJweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG50ZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxudGgsIHRkIHtcbiAgcGFkZGluZzogMnB4IDVweDtcbiAgd2lkdGg6IDElO1xufVxuXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwibXQtNVwiPlxuICAgIDxkaXY+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycyBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgPHYtY29sIGNsYXNzPVwibWwtMTBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgcHJpbWFyeS0tdGV4dFwiPkRhdGUgZGUgbGl2cmFpc29uIDo8L3NwYW4+IHt7IGRlbGl2ZXJ5U2NoZWR1bGUuZGF0ZSB8IGRhdGUgfX1cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIGNsYXNzPVwibWwtMTBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgcHJpbWFyeS0tdGV4dFwiPlLDqWRhY3RldXIgOjwvc3Bhbj5cbiAgICAgICAgICB7eyBkZWxpdmVyeVNjaGVkdWxlLnVzZXIgJiYgZGVsaXZlcnlTY2hlZHVsZS51c2VyLmZpcnN0bmFtZSA/IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5maXJzdG5hbWUgOiAnJyB9fVxuICAgICAgICAgIHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnVzZXIubGFzdG5hbWUgPyBkZWxpdmVyeVNjaGVkdWxlLnVzZXIubGFzdG5hbWUgOiAnJyB9fVxuICAgICAgICAgIDxzcGFuIHYtaWY9XCJkZWxpdmVyeVNjaGVkdWxlLnVzZXIgJiYgZGVsaXZlcnlTY2hlZHVsZS51c2VyLnBob25lXCI+Jm5ic3A7KHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5waG9uZSB9fSk8L3NwYW4+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDx2LWNvbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgcHJpbWFyeS0tdGV4dFwiPlRyYW5zcG9ydGV1ciA6PC9zcGFuPlxuICAgICAgICAgIHt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJ1Y2sgJiYgZGVsaXZlcnlTY2hlZHVsZS50cnVjay50cmFuc3BvcnRlci5uYW1lID8gZGVsaXZlcnlTY2hlZHVsZS50cnVjay50cmFuc3BvcnRlci5uYW1lIDogJycgfX1cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIGNsYXNzPVwibWwtNlwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBwcmltYXJ5LS10ZXh0XCI+Q2FtaW9uIDo8L3NwYW4+XG4gICAgICAgICAge3sgZGVsaXZlcnlTY2hlZHVsZS50cnVjayAmJiBkZWxpdmVyeVNjaGVkdWxlLnRydWNrLm51bWJlcnBsYXRlID8gZGVsaXZlcnlTY2hlZHVsZS50cnVjay5udW1iZXJwbGF0ZSA6ICcnIH19XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICAgIDx2LWNvbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgcHJpbWFyeS0tdGV4dFwiPkNoYXVmZmV1cjo8L3NwYW4+XG4gICAgICAgICAge3sgZGVsaXZlcnlTY2hlZHVsZS5kcml2ZXIgPyBkZWxpdmVyeVNjaGVkdWxlLmRyaXZlci5maXJzdG5hbWUgKyAnICcgKyBkZWxpdmVyeVNjaGVkdWxlLmRyaXZlci5sYXN0bmFtZTogJycgfX1cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBPcmRlcnMgLS0+XG4gICAgPGRpdj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cIm10LTRcIiA+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoPk9yaWdpbmU8L3RoPlxuICAgICAgICAgICAgICA8dGg+Q2xpZW50PC90aD5cbiAgICAgICAgICAgICAgPHRoPkRlc3RpbmF0aW9uPC90aD5cbiAgICAgICAgICAgICAgPHRoPkNvbW1lbnRhaXJlczwvdGg+XG4gICAgICAgICAgICAgIDx0aD5QcsOpdmlzaW9ucyAvIE9ic2Vydi48L3RoPlxuICAgICAgICAgICAgICA8dGg+VGVsLiBDaGVmIGNoYW50aWVyPC90aD5cbiAgICAgICAgICAgICAgPHRoPlByb2R1aXQ8L3RoPlxuICAgICAgICAgICAgICA8dGg+UXTDqTwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIHYtZm9yPVwidG91ciBpbiB0b3Vyc1wiPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJ0b3VyLmlzX21lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI4XCIgc3R5bGU9XCJjb2xvcjogb3JhbmdlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtd2VpZ2h0OiBib2xkO1wiPlxuICAgICAgICAgICAgICAgIDx2LWljb24gY29sb3I9XCJvcmFuZ2VcIiBzbWFsbCBjbGFzcz1cIm1yLTJcIj5tZGktY29tbWVudC10ZXh0LW91dGxpbmU8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLm1lc3NhZ2UgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXJcIj5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuY3VzdG9tZXIubmFtZSB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MuY2l0eSB9fSAtXG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MucG9zdGNvZGUuc2xpY2UoMCwgMikgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5uYW1lIH19IC1cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5hZGRyZXNzMSB9fTxicj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVTdGFydCAmJiB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUVuZFwiPlxuICAgICAgICAgICAgICAgICAgT3V2ZXJ0dXJlIGRlIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lU3RhcnQgfCBob3VyIH19IMOgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lRW5kIHwgaG91ciB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmU3RhcnQgJiYgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmRW5kXCI+XG4gICAgICAgICAgICAgICAgICBldCBkZSB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZTdGFydCB8IGhvdXIgfX0gw6Age3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmRW5kIHwgaG91ciB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVTdGFydEZyaWRheSAmJiB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUVuZEZyaWRheVwiPlxuICAgICAgICAgICAgICAgICAgZXQgbGUgdmVuZHJlZGkgZGUge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVTdGFydEZyaWRheSB8IGhvdXIgfX0gw6Age3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVFbmRGcmlkYXkgfCBob3VyIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZTdGFydEZyaWRheSAmJiB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZFbmRGcmlkYXlcIj5cbiAgICAgICAgICAgICAgICAgIGV0IGRlIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lSGFsZlN0YXJ0RnJpZGF5IHwgaG91ciB9fSDDoCB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZFbmRGcmlkYXkgfCBob3VyIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZHJpdmVyX2NvbW1lbnQgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLm1vbWVudERheSB8fHRvdXIuZGVsaXZlcnlIb3VyIHx8IHRvdXIuY29tbWVudE1vbWVudHNcIj5Ib3JhaXJlcyA6PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIubW9tZW50RGF5ID8gdG91ci5tb21lbnREYXkub3BlbmluZ1RpbWUubmFtZSA6ICcnIH19IC0ge3sgdG91ci5jb21tZW50TW9tZW50cyA/IHRvdXIuY29tbWVudE1vbWVudHMgOiAnJyB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5SG91clwiPiDDoCB7eyB0b3VyLmRlbGl2ZXJ5SG91ciB8IGZpbHRlckRhdGVUb0hvdXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwidG91ci5oaWdod2F5XCIgY2xhc3M9XCJtYS0wIHBhLTBcIj5cbiAgICAgICAgICAgICAgICAgIDx2LWJhZGdlIGNvbG9yPVwicHJpbWFyeVwiIDpjb250ZW50PVwidG91ci5oaWdod2F5XCIgYm9yZGVyZWQgYm90dG9tIGlubGluZSBvdmVybGFwIGNsYXNzPVwibWEtMCBwYS0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCI+bWRpLWhpZ2h3YXk8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvdi1iYWRnZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jaGllZiB9fVxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5hZGRyZXNzLnBob25lIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50IHx8dG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnBob25lQ2xpZW50XCI+XG4gICAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuY29udGFjdENsaWVudCA/IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50IDogJycgfX1cbiAgICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5waG9uZUNsaWVudCA/IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5waG9uZUNsaWVudCA6ICcnIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5wcm9kdWN0ID8gdG91ci5kZWxpdmVyeV9vcmRlci5wcm9kdWN0Lm5hbWUgOiAnJyB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9xdWFudGl0eSArICcmbmJzcFQnfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm9ibGlnYXRpb25zIG10LTEgbWItMSBwdC0yIHBiLTJcIiA+XG4gICAgICA8aDY+T0JMSUdBVElPTlMgRFUgQ0hBVUZGRVVSPC9oNj5cbiAgICAgIDx1bCBjbGFzcz1cIm1sLTNcIj5cbiAgICAgICAgPGxpPlBvcnRlciBsZXMgRVBJIG9ibGlnYXRvaXJlcyAoY2FzcXVlLCBiYXVkcmllciwgY2hhdXNzdXJlcyBkZSBzw6ljdXJpdMOpKTwvbGk+XG4gICAgICAgIDxsaT5GYWlyZSBzaWduZXIgbGVzIEJMPC9saT5cbiAgICAgICAgPGxpPlJlc3BlY3RlciBsZXMgcHJvdG9jb2xlcyBkZSBjaGFyZ2VtZW50L2TDqWNoYXJnZW1lbnQgY2hleiBub3MgY2xpZW50cyBldCBzdXIgbm9zIHNpdGVzPC9saT5cbiAgICAgICAgPGxpPkLDomNoYWdlIG9ibGlnYXRvaXJlPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm9ibGlnYXRpb25zIHB0LTIgcGItMlwiID5cbiAgICAgIDxoNj5BIFJFTVBMSVIgUEFSIExFIENIQVVGRkVVUjwvaDY+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImhlYWRlcnNcIj5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiNVwiPktpbG9tw6l0cmFnZSBEw6lwYXJ0IDo8L3RoPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCI1XCI+S2lsb23DqXRyYWdlIEFycml2w6llIDo8L3RoPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCI1XCI+S2lsb23DqXRyYWdlIHRvdGFsIGpvdXIgOjwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiM1wiIHJvd3NwYW49XCIyXCI+TGlldSBkZSBjaGFyZ2VtZW50PC90aD5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIGNsYXNzPVwiaG91cnNcIj5IZXVyZXM8L3RoPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIzXCIgcm93c3Bhbj1cIjJcIj5MaWV1IGRlIGTDqWNoYXJnZW1lbnQ8L3RoPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCIgY2xhc3M9XCJob3Vyc1wiPkhldXJlczwvdGg+XG4gICAgICAgICAgICA8dGggY29sc3Bhbj1cIjNcIiByb3dzcGFuPVwiMlwiIGNsYXNzPVwiY2xpZW50XCI+Q2xpZW50PC90aD5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIHJvd3NwYW49XCIyXCIgY2xhc3M9XCJ0b25uYWdlXCI+VG9ubmFnZTwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+QXJyaXbDqWU8L3RoPlxuICAgICAgICAgICAgPHRoPkTDqXBhcnQ8L3RoPlxuICAgICAgICAgICAgPHRoPkFycml2w6llPC90aD5cbiAgICAgICAgICAgIDx0aD5Ew6lwYXJ0PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRvbm5hZ2VcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidG9ubmFnZVwiPiZuYnNwPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0b25uYWdlXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRvbm5hZ2VcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidG9ubmFnZVwiPiZuYnNwPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0b25uYWdlXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRvbm5hZ2VcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidG9ubmFnZVwiPiZuYnNwPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlIGlkPVwiZm9vdGVyVGFibGVcIj5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiNlwiIHJvd3NwYW49XCIyXCI+T2JzZXJ2YXRpb25zIGNoYXVmZmV1ciA6PGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICBTaWduYXR1cmUgZHUgY2hhdWZmZXVyIDogPGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5UZW1wcyBkZSBjb25kdWl0ZSA6PGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5UZW1wcyBkZSB0cmF2YWlsIDo8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvYmxpZ2F0aW9ucyBtdC0xIG1iLTEgcHQtMiBwYi0yXCIgPlxuICAgICAgPGg2PkEgdHJhbnNtZXR0cmUgY2hhcXVlIHNvaXIgw6AgbGEgYmFzY3VsZSBhdmVjIGxlcyBCTCBjb25jZXJuw6lzIChleGVtcGxhaXJlcyB2ZXJ0KTwvaDY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCB0eXBlPVwidHNcIj5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5cblZ1ZS5maWx0ZXIoJ2ZpbHRlckRhdGVUb0hvdXInLCBmdW5jdGlvbih2YWx1ZSkge1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gbW9tZW50KFN0cmluZyh2YWx1ZSkpLmZvcm1hdCgnSEg6bW0nKVxuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6ICdkZWxpdmVyeS1zY2hlZHVsZS1kcml2ZXItcHJpbnQnLFxuICBwcm9wczogWyd0b3VycycsICdkZWxpdmVyeVNjaGVkdWxlJ10sXG4gIGZpbHRlcnM6IHtcbiAgICBkYXRlKHZhbHVlKSB7IHJldHVybiAodmFsdWUgJiYgbW9tZW50KHZhbHVlKSkgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnREQvTU0vWVlZWScpIDogdmFsdWU7IH0sXG4gICAgaG91cih2YWx1ZSkgeyByZXR1cm4gKHZhbHVlICYmIG1vbWVudCh2YWx1ZSkpID8gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJykgOiB2YWx1ZTsgfSxcbiAgfSxcbiAgbW91bnRlZCgpIHtcbi8vIFByaW50IHNjaGVkdWxlXG4gICAgd2luZG93LnByaW50KCk7XG4vLyBDbG9zZSB3aW5kb3cgYWZ0ZXIgcHJpbnRcbiAgICB3aW5kb3cub25hZnRlcnByaW50ID0gKCkgPT4geyB3aW5kb3cuY2xvc2UoKTsgfTtcbiAgfSxcbn0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG5cbnRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLWNvbGxhcHNlOiAgY29sbGFwc2U7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cblxudGgge1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG50aC5jbGllbnQge1xuICB3aWR0aDogMjAlO1xufVxuXG50aC50b25uYWdlLFxudGguaG91cnMge1xuICB3aWR0aDo0JTtcbn1cblxudGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbnRoLCB0ZCB7XG4gIHBhZGRpbmc6IDJweCA1cHg7XG59XG5cbi5oZWFkZXJzIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuaDYge1xuICB0ZXh0LWFsaWduOiBjZW50ZXJcbn1cblxubGkge1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi5vYmxpZ2F0aW9ucyB7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cblxuI2Zvb3RlclRhYmxlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtdC01XCI+XG4gICAgPGRpdj5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzIGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8di1jb2wgY2xhc3M9XCJtbC0xMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBwcmltYXJ5LS10ZXh0XCI+e3sgd2FyZWhvdXNlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICAgIDx2LWNvbCBjbGFzcz1cIm1sLTEwXCI+QSBwYXJ0aXIgZHUgOiB7eyBkYXRlZnJvbXN0cmluZyB8IGZpbHRlckRhdGUgfX08L3YtY29sPlxuICAgICAgPC92LXJvdz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzPVwibXQtNFwiID5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+Q29kZTwvdGg+XG4gICAgICAgICAgICAgIDx0aD5EYXRlPC90aD5cbiAgICAgICAgICAgICAgPHRoPlLDqWYuIGNvbW0uIGNsaWVudDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5DbGllbnQ8L3RoPlxuICAgICAgICAgICAgICA8dGg+TGlldSBkZSBsaXZyYWlzb248L3RoPlxuICAgICAgICAgICAgICA8dGg+Tm9tIGV0IHTDqWwuIGR1IGNoZWYgZGUgY2hhbnRpZXI8L3RoPlxuICAgICAgICAgICAgICA8dGg+RMOpc2lnbmF0aW9uPC90aD5cbiAgICAgICAgICAgICAgPHRoPkNvZGUgU0FQPC90aD5cbiAgICAgICAgICAgICAgPHRoPlF0w6kgZW4gVC48L3RoPlxuICAgICAgICAgICAgICA8dGg+U2l0ZSBkZSBkw6lwYXJ0PC90aD5cbiAgICAgICAgICAgICAgPHRoPlRyYW5zcG9ydGV1cjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIHYtZm9yPVwidG91ciBpbiB0b3Vyc1wiPlxuICAgICAgICAgICAgPHRkPnt7IHRvdXIuaWQgfX08L3RkPlxuICAgICAgICAgICAgPHRkPnt7IHRvdXIuZGF0ZVdpdGhvdXRIb3VyIHwgZmlsdGVyRGF0ZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgdG91ci51c2VyLmZpcnN0bmFtZSB9fSB7eyB0b3VyLnVzZXIubGFzdHRuYW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57eyB0b3VyLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnNbMF0uZGVsaXZlcnlfb3JkZXIuY3VzdG9tZXIubmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwic2NoZWR1bGVPcmRlciBpbiB0b3VyLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlciAmJiAgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UubmFtZSA9PSB3YXJlaG91c2UubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MuYWRkcmVzczEgfX0ge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MucG9zdGNvZGUgfX1cbiAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5hZGRyZXNzLmNpdHkgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLm1vbWVudERheSB8fCBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5SG91ciB8fCBzY2hlZHVsZU9yZGVyLmNvbW1lbnRNb21lbnRzXCI+IC1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIubW9tZW50RGF5XCIgIGNsYXNzPVwicmVkLS10ZXh0XCI+e3sgc2NoZWR1bGVPcmRlci5tb21lbnREYXkub3BlbmluZ1RpbWUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWQtLXRleHRcIj4gLSB7eyBzY2hlZHVsZU9yZGVyLmNvbW1lbnRNb21lbnRzID8gc2NoZWR1bGVPcmRlci5jb21tZW50TW9tZW50cyA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5kZWxpdmVyeUhvdXJcIiBjbGFzcz1cInJlZC0tdGV4dFwiPnt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlIb3VyIHwgZmlsdGVyRGF0ZVRvSG91ciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLnNjaGVkdWxlX2NvbW1lbnRcIj4gLSB7eyBzY2hlZHVsZU9yZGVyLnNjaGVkdWxlX2NvbW1lbnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiB2LWZvcj1cInNjaGVkdWxlT3JkZXIgaW4gdG91ci5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIgJiYgIHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgPT0gd2FyZWhvdXNlLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5zaXRlLmNoaWVmIH19PC9zdHJvbmc+IDoge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MucGhvbmUgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuY29udGFjdENsaWVudCB8fCBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUucGhvbmVDbGllbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuY29udGFjdENsaWVudCA/IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50IDogJycgfX08L3N0cm9uZz4gOlxuICAgICAgICAgICAgICAgICAgICB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUucGhvbmVDbGllbnQgPyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUucGhvbmVDbGllbnQgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCJzY2hlZHVsZU9yZGVyIGluIHRvdXIuZGVsaXZlcnlTY2hlZHVsZU9yZGVyc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyICYmICBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5uYW1lID09IHdhcmVob3VzZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnByb2R1Y3QubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCJzY2hlZHVsZU9yZGVyIGluIHRvdXIuZGVsaXZlcnlTY2hlZHVsZU9yZGVyc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyICYmICBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5uYW1lID09IHdhcmVob3VzZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnByb2R1Y3QuY29kZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCJzY2hlZHVsZU9yZGVyIGluIHRvdXIuZGVsaXZlcnlTY2hlZHVsZU9yZGVyc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyICYmICBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5uYW1lID09IHdhcmVob3VzZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X3F1YW50aXR5IH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiB2LWZvcj1cInNjaGVkdWxlT3JkZXIgaW4gdG91ci5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIgJiYgIHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgPT0gd2FyZWhvdXNlLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIHt7IHRvdXIudHJhbnNwb3J0ZXIubmFtZSB9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHR5cGU9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuLy8gS2VlcCBvbmx5IGhvdXIgZnJvbSBkYXRldGltZVxuVnVlLmZpbHRlcignZmlsdGVyRGF0ZVRvSG91cicsIGZ1bmN0aW9uKGRhdGUpIHtcbiAgaWYgKGRhdGUpIHtcbiAgICByZXR1cm4gbW9tZW50KFN0cmluZyhkYXRlKSkuZm9ybWF0KCdISDptbScpXG4gIH1cbn0pO1xuXG4vLyBGb3JtYXQgZGF0ZXRpbWUgaW4gZnJlbmNoIGRpc3BsYXlcblZ1ZS5maWx0ZXIoJ2ZpbHRlckRhdGUnLCBmdW5jdGlvbihkYXRlKSB7XG4gIGlmIChkYXRlKSB7XG4gICAgcmV0dXJuIG1vbWVudChTdHJpbmcoZGF0ZSkpLmZvcm1hdCgnREQvTU0vWVlZWScpXG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogJ2RlbGl2ZXJ5LXNjaGVkdWxlLXdhcmVob3VzZS1jaGFydGVyLXByaW50JyxcbiAgcHJvcHM6IFsnd2FyZWhvdXNlJywgJ2RhdGVmcm9tc3RyaW5nJywgJ3RvdXJzJ10sXG4gIGRhdGE6ICgpID0+ICh7XG4gIH0pLFxuICBtb3VudGVkKCkge1xuICAgIC8vIFByaW50IHNjaGVkdWxlXG4gICAgd2luZG93LnByaW50KCk7XG4gICAgLy8gQ2xvc2Ugd2luZG93IGFmdGVyIHByaW50XG4gICAgd2luZG93Lm9uYWZ0ZXJwcmludCA9ICgpID0+IHsgd2luZG93LmNsb3NlKCk7IH07XG4gIH0sXG59KTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuXG50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1jb2xsYXBzZTogIGNvbGxhcHNlO1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbnRoIHtcbiAgY29sb3I6IGJsYWNrO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxudGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnJlZCB7XG4gIGNvbG9yOiByZWQ7XG59XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtdC01XCI+XG4gICAgICAgPCEtLSBPcmRlcnMgLS0+XG4gICAgPGRpdj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cIm10LTQgbWItOFwiID5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMTAwcHhcIj5EYXRlPC90aD5cbiAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDEwMHB4XCI+TsKwIGltbWF0LjwvdGg+XG4gICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAyMDBweFwiPk5vbSBjaGF1ZmZldXI8L3RoPlxuICAgICAgICAgICAgICA8dGg+VHJhdmFpbCDDoCByw6lhbGlzZXI8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJvYnNlcnZhdGlvbnNcIj5PYnNlcnZhdGlvbnM8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0ciB2LWZvcj1cInRvdXIgaW4gdG91cnNcIj5cbiAgICAgICAgICAgIDx0ZD57eyB0b3VyLmRhdGVXaXRob3V0SG91ciB8IGZpbHRlckRhdGUgfX08L3RkPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+e3sgdG91ci50cnVjay5udW1iZXJwbGF0ZSB9fTwvc3Ryb25nPjwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kcml2ZXIuZmlyc3RuYW1lIH19PGJyPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZHJpdmVyLmxhc3RuYW1lIH19PGJyPlxuICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWQtLXRleHRcIj5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRyaXZlci5waG9uZX19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDx1bCB2LWZvcj1cInNjaGVkdWxlT3JkZXIgaW4gdG91ci5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzXCIgc3R5bGU9XCJsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XCI+XG4gICAgICAgICAgICAgICAgPGxpIHYtaWY9XCJzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyICYmICBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5uYW1lID09IHdhcmVob3VzZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAtJm5ic3A7PHN0cm9uZz57eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5uYW1lIH19PC9zdHJvbmc+IDpcbiAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIucHJvZHVjdC5uYW1lIH19IC0ge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9xdWFudGl0eSB9fSBUIC1cbiAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5tb21lbnREYXkgfHwgc2NoZWR1bGVPcmRlci5kZWxpdmVyeUhvdXJcIj4gLVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5tb21lbnREYXlcIiAgY2xhc3M9XCJyZWQtLXRleHRcIj57eyBzY2hlZHVsZU9yZGVyLm1vbWVudERheS5vcGVuaW5nVGltZS5uYW1lIH19IHt7IHNjaGVkdWxlT3JkZXIuY29tbWVudF9tb21lbnRzID8gc2NoZWR1bGVPcmRlci5jb21tZW50X21vbWVudHMgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlIb3VyXCIgY2xhc3M9XCJyZWQtLXRleHRcIj57eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5SG91ciB8IGZpbHRlckRhdGVUb0hvdXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5zY2hlZHVsZV9jb21tZW50XCI+IC0ge3sgc2NoZWR1bGVPcmRlci5zY2hlZHVsZV9jb21tZW50IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHR5cGU9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuLy8gS2VlcCBvbmx5IGhvdXIgZnJvbSBkYXRldGltZVxuVnVlLmZpbHRlcignZmlsdGVyRGF0ZVRvSG91cicsIGZ1bmN0aW9uKGRhdGUpIHtcbiAgaWYgKGRhdGUpIHtcbiAgICByZXR1cm4gbW9tZW50KFN0cmluZyhkYXRlKSkuZm9ybWF0KCdISDptbScpXG4gIH1cbn0pO1xuXG4vLyBGb3JtYXQgZGF0ZXRpbWUgaW4gZnJlbmNoIGRpc3BsYXlcblZ1ZS5maWx0ZXIoJ2ZpbHRlckRhdGUnLCBmdW5jdGlvbihkYXRlKSB7XG4gIGlmIChkYXRlKSB7XG4gICAgcmV0dXJuIG1vbWVudChTdHJpbmcoZGF0ZSkpLmZvcm1hdCgnREQvTU0vWVlZWScpXG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogJ2RlbGl2ZXJ5LXNjaGVkdWxlLXdhcmVob3VzZS1wcmludCcsXG4gIHByb3BzOiBbJ3dhcmVob3VzZScsICdkYXRlZnJvbXN0cmluZycsICd0b3VycyddLFxuICBkYXRhOiAoKSA9PiAoe1xuICB9KSxcbiAgbW91bnRlZCgpIHtcbiAgICAvLyBQcmludCBzY2hlZHVsZVxuICAgIHdpbmRvdy5wcmludCgpO1xuICAgIC8vIENsb3NlIHdpbmRvdyBhZnRlciBwcmludFxuICAgIHdpbmRvdy5vbmFmdGVycHJpbnQgPSAoKSA9PiB7IHdpbmRvdy5jbG9zZSgpOyB9O1xuICB9LFxufSk7XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cblxudGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sbGFwc2U6ICBjb2xsYXBzZTtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuXG50aCB7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbnRoLm9ic2VydmF0aW9ucyB7XG4gIHdpZHRoOjI1JTtcbn1cblxudGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbnRoLCB0ZCB7XG4gIHBhZGRpbmc6IDJweCA1cHg7XG59XG5cbmg0IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyXG59XG5cbi5yZWQge1xuICBjb2xvcjogcmVkO1xufVxuXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCI+XG4gICAgPGwtbWFwXG4gICAgICB2LWlmPVwic2hvd01hcFwiXG4gICAgICByZWY9XCJtYXBcIlxuICAgICAgOnpvb209XCJ6b29tXCJcbiAgICAgIDpjZW50ZXI9XCJjZW50ZXJcIlxuICAgICAgOm9wdGlvbnM9XCJvcHRpb25zXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCJcbiAgICAgIEB1cGRhdGU6Y2VudGVyPVwiY2VudGVyVXBkYXRlXCJcbiAgICAgIEB1cGRhdGU6em9vbT1cInpvb21VcGRhdGVcIlxuICAgID5cbiAgICAgIDxsLWNvbnRyb2wtbGF5ZXJzIHBvc2l0aW9uPVwidG9wcmlnaHRcIj48L2wtY29udHJvbC1sYXllcnM+XG4gICAgICA8bC1jb250cm9sLXNjYWxlIHBvc2l0aW9uPVwiYm90dG9tbGVmdFwiIDppbXBlcmlhbD1cImZhbHNlXCIgOm1ldHJpYz1cInRydWVcIj48L2wtY29udHJvbC1zY2FsZT5cbiAgICAgIDxsLXRpbGUtbGF5ZXJcbiAgICAgICAgdi1mb3I9XCJ0aWxlUHJvdmlkZXIgaW4gdGlsZVByb3ZpZGVyc1wiXG4gICAgICAgIDprZXk9XCJ0aWxlUHJvdmlkZXIubmFtZVwiXG4gICAgICAgIDpuYW1lPVwidGlsZVByb3ZpZGVyLm5hbWVcIlxuICAgICAgICA6dmlzaWJsZT1cInRpbGVQcm92aWRlci52aXNpYmxlXCJcbiAgICAgICAgOnVybD1cInRpbGVQcm92aWRlci51cmxcIlxuICAgICAgICBsYXllci10eXBlPVwiYmFzZVwiXG4gICAgICA+XG4gICAgICA8L2wtdGlsZS1sYXllcj5cbiAgICAgIDxsLWZlYXR1cmUtZ3JvdXAgcmVmPVwiZmVhdHVyZXNcIj48L2wtZmVhdHVyZS1ncm91cD5cbiAgICA8L2wtbWFwPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgdHlwZT1cInRzXCI+XG4gIGltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuICBpbXBvcnQgTCBmcm9tIFwibGVhZmxldFwiO1xuICBpbXBvcnQgTERyYXcgZnJvbSBcImxlYWZsZXQtZHJhd1wiO1xuICBpbXBvcnQgTFJvdXRpbmcgZnJvbSBcImxlYWZsZXQtcm91dGluZy1tYWNoaW5lXCI7XG4gIGltcG9ydCB7IExNYXAsIExUaWxlTGF5ZXIsIExDb250cm9sTGF5ZXJzLCBMQ29udHJvbFNjYWxlLCBMRmVhdHVyZUdyb3VwLCBMSWNvbiwgTE1hcmtlciB9IGZyb20gXCJ2dWUyLWxlYWZsZXRcIjtcbiAgLy8gaW1wb3J0ICdsZWFmbGV0Lm1hcmtlcmNsdXN0ZXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICAgIG5hbWU6IFwibWFrZS1pdGluZXJhcnktbWFwXCIsXG4gICAgcHJvcHM6IFtcIm1hcmtlcnNcIiwgXCJjZW50ZXJcIiwgXCJ6b29tXCJdLFxuICAgIGNvbXBvbmVudHM6IHsgTE1hcCwgTFRpbGVMYXllciwgTENvbnRyb2xMYXllcnMsIExDb250cm9sU2NhbGUsIExGZWF0dXJlR3JvdXAsIExJY29uLCBMTWFya2VyIH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIGN1cnJlbnRab29tOiAxMS41LFxuICAgICAgY3VycmVudENlbnRlcjogbnVsbCxcbiAgICAgIG9wdGlvbnM6IHsgem9vbVNuYXA6IDAuNSB9LFxuICAgICAgbWFwOiBudWxsLFxuICAgICAgdGlsZVByb3ZpZGVyczogW1xuICAgICAgICB7IG5hbWU6IFwiUGxhbiBjb3VsZXVyXCIsIHZpc2libGU6IHRydWUsIHVybDogXCJodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZ1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJQbGFuIG5vaXIgZXQgYmxhbmNcIiwgdmlzaWJsZTogZmFsc2UsIHVybDogXCJodHRwczovL3tzfS50aWxlcy53bWZsYWJzLm9yZy9idy1tYXBuaWsve3p9L3t4fS97eX0ucG5nXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIlNhdGVsbGl0ZVwiLCB2aXNpYmxlOiBmYWxzZSwgdXJsOiBcImh0dHBzOi8vc2VydmVyLmFyY2dpc29ubGluZS5jb20vQXJjR0lTL3Jlc3Qvc2VydmljZXMvV29ybGRfSW1hZ2VyeS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fVwiIH0sXG4gICAgICBdLFxuICAgICAgZHJhd25JdGVtczogbnVsbCxcbiAgICAgIHJvdXRpbmdDb250cm9sOiBudWxsLFxuICAgICAgbWFya2Vyc0xpc3Q6IFtdLFxuICAgICAgc2hvd01hcDogZmFsc2VcbiAgICB9KSxcbiAgICB3YXRjaDoge1xuICAgICAgbWFya2VyczogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1hcmtlcnNMaXN0ID0gdGhpcy5tYXJrZXJzID8gWy4uLnRoaXMubWFya2Vyc10gOiBbXTtcbiAgICAgICAgdGhpcy5kcmF3TWFya2Vyc0RpcmVjdGlvbigpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICB0aGlzLm1hcmtlcnNMaXN0ID0gdGhpcy5tYXJrZXJzID8gWy4uLnRoaXMubWFya2Vyc10gOiBbXTtcblxuICAgICAgLy8gV2FpdGluZyBtYXAgaW5pdFxuICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNob3dNYXAgPSB0cnVlO1xuICAgICAgICBfdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIC8vIEluaXQgbGVhZmxldCBtYXBcbiAgICAgICAgICBfdGhpcy5pbml0TWFwKCk7XG4gICAgICAgICAgLy8gRHJhdyBtYXJrZXJzIGFuZCBkaXJlY3Rpb25cbiAgICAgICAgICBfdGhpcy5kcmF3TWFya2Vyc0RpcmVjdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB6b29tVXBkYXRlKHpvb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IHpvb207XG4gICAgICB9LFxuICAgICAgY2VudGVyVXBkYXRlKGNlbnRlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRDZW50ZXIgPSBjZW50ZXI7XG4gICAgICB9LFxuICAgICAgaW5pdE1hcCgpIHtcbiAgICAgICAgLy8gTWFwXG4gICAgICAgIHRoaXMubWFwID0gdGhpcy4kcmVmcy5tYXAubWFwT2JqZWN0O1xuICAgICAgICAvLyBJdGVtc1xuICAgICAgICB0aGlzLmRyYXduSXRlbXMgPSBMLmZlYXR1cmVHcm91cCgpO1xuICAgICAgICB0aGlzLmRyYXduSXRlbXMuYWRkVG8odGhpcy5tYXApO1xuICAgICAgfSxcbiAgICAgIHdheXBvaW50c0NoYW5nZWQoZSkge1xuICAgICAgICB0aGlzLm1hcmtlcnNMaXN0ID0gdGhpcy5yb3V0aW5nQ29udHJvbC5nZXRXYXlwb2ludHMoKS5tYXAoKHcpID0+IHtcbiAgICAgICAgICBpZiAody5sYXRMbmcpIHsgLy8gT25seSBtYXJrZXJzIHdpdGggY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGxhdGl0dWRlOiB3LmxhdExuZy5sYXQsXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogdy5sYXRMbmcubG5nLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdy5vcHRpb25zICYmIHcub3B0aW9ucy5kZXNjcmlwdGlvbiA/IHcub3B0aW9ucy5kZXNjcmlwdGlvbiA6IFwiXCIsXG4gICAgICAgICAgICAgIHRpdGxlOiB3Lm9wdGlvbnMgJiYgdy5vcHRpb25zLnRpdGxlID8gdy5vcHRpb25zLnRpdGxlIDogXCJcIixcbiAgICAgICAgICAgICAgcG9zaXRpb246IHcub3B0aW9ucyAmJiB3Lm9wdGlvbnMucG9zaXRpb24gPyB3Lm9wdGlvbnMucG9zaXRpb24gOiBudWxsLFxuICAgICAgICAgICAgICBjb2xvcjogdy5vcHRpb25zICYmIHcub3B0aW9ucy5jb2xvciA/IHcub3B0aW9ucy5jb2xvciA6IG51bGwsXG4gICAgICAgICAgICAgIHR5cGU6IHcub3B0aW9ucyAmJiB3Lm9wdGlvbnMudHlwZSA/IHcub3B0aW9ucy50eXBlIDogbnVsbCxcbiAgICAgICAgICAgICAgYWRkaXRpb25uYWxzOiAhKHcub3B0aW9ucyAmJiB3Lm9wdGlvbnMuaWQpLFxuICAgICAgICAgICAgICB1dWlkOiB3Lm9wdGlvbnMgJiYgdy5vcHRpb25zLnV1aWQgPyB3Lm9wdGlvbnMudXVpZCA6IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCAxNSksXG4gICAgICAgICAgICAgIGlkOiB3Lm9wdGlvbnMuaWQsXG4gICAgICAgICAgICAgIGlzTmV3OiB3Lm9wdGlvbnMgJiYgdy5vcHRpb25zLmlzTmV3XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkuZmlsdGVyKHcgPT4gdyk7IC8vIE5vdCBlbXB0eSBvciBudWxsIG1hcmtlcnNcblxuICAgICAgICB0aGlzLiRlbWl0KFwidXBkYXRlTWFya2Vyc1wiLCB0aGlzLm1hcmtlcnNMaXN0KTtcbiAgICAgIH0sXG4gICAgICBkcmF3TWFya2Vyc0RpcmVjdGlvbigpIHtcbiAgICAgICAgbGV0IG1hcmtlcnMgPSB0aGlzLm1hcmtlcnNMaXN0Lm1hcChtID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGF0TG5nOiBMLmxhdExuZyhtLmxhdGl0dWRlLCBtLmxvbmdpdHVkZSksXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICB0aXRsZTogbS5uYW1lLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgaWQ6IG0uaWQsXG4gICAgICAgICAgICAgIHV1aWQ6IG0udXVpZCxcbiAgICAgICAgICAgICAgY29sb3I6IG0uY29sb3IsXG4gICAgICAgICAgICAgIHR5cGU6IChtLnR5cGUgPz8gbnVsbCksXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAobS5wb3NpdGlvbiA/PyAnJyksXG4gICAgICAgICAgICAgIGlzTmV3OiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgbWFudWFsOiB0cnVlLFxuICAgICAgICAgICAgYWRkaXRpb25uYWxzOiBtLmFkZGl0aW9ubmFsc1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRGVsZXRlIGNvbnRyb2wgdG8gY3JlYXRlIG5ldyBvbmVcbiAgICAgICAgaWYgKHRoaXMucm91dGluZ0NvbnRyb2wpIHsgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLnJvdXRpbmdDb250cm9sKTsgfVxuICAgICAgICAvLyBBZGQgcm91dGluZyB3aXRoIHNlbGVjdGVkIHBvaW50c1xuICAgICAgICB0aGlzLnJvdXRpbmdDb250cm9sID0gTC5Sb3V0aW5nLmNvbnRyb2woe1xuICAgICAgICAgIHNob3c6IGZhcGxhbm5pbmdsc2UsXG4gICAgICAgICAgd2F5cG9pbnRzOiBtYXJrZXJzLFxuICAgICAgICAgIGxpbmVPcHRpb25zOiB7XG4gICAgICAgICAgICBzdHlsZXMgOiBbe2NvbG9yOiAnIzAwNDQ4NycsIG9wYWNpdHk6IDAuNiwgd2VpZ2h0OiA3fV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNyZWF0ZU1hcmtlcjogKGluZGV4LCB3YXlwb2ludCwgbmJXcHMpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgeyBtYXJrZXJzLmZvckVhY2goKG0pID0+IG0udXNlZCA9IGZhbHNlKTsgfVxuXG4gICAgICAgICAgICBsZXQgc21hbGxTaXplID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBTZXQgcG9zaXRpb25cbiAgICAgICAgICAgIGlmICghd2F5cG9pbnQub3B0aW9ucykgeyB3YXlwb2ludC5vcHRpb25zID0ge307IH1cbiAgICAgICAgICAgIHdheXBvaW50Lm9wdGlvbnMuaXNOZXcgPSAhd2F5cG9pbnQubWFudWFsID8gIXdheXBvaW50Lm9wdGlvbnMuaXNOZXcgOiBmYWxzZTtcbiAgICAgICAgICAgIGxldCBtYXJrZXJOYW1lID0gd2F5cG9pbnQub3B0aW9ucy5wb3NpdGlvbjtcbiAgICAgICAgICAgIC8vIEJsdWUgY29sb3IgZm9yIGRldG91clxuICAgICAgICAgICAgaWYgKHdheXBvaW50Lm9wdGlvbnMuaXNOZXcpIHsgd2F5cG9pbnQub3B0aW9ucy5jb2xvciA9ICcjQUNGNEZGJzsgfVxuXG4gICAgICAgICAgICAvLyBNYXJrZXIgYWxyZWFkeSBleGlzdCA/XG4gICAgICAgICAgICBsZXQgbWFya3MgPSBtYXJrZXJzLmZpbHRlcihkID0+IGQubGF0TG5nLmxhdCA9PT0gd2F5cG9pbnQubGF0TG5nLmxhdCAmJiBkLmxhdExuZy5sbmcgPT09IHdheXBvaW50LmxhdExuZy5sbmcpO1xuICAgICAgICAgICAgLy8gTWVyZ2UgbWFya2VycyBwb3NpdGlvbnNcbiAgICAgICAgICAgIGlmIChtYXJrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIFN0b3AgY3JlYXRlIG1hcmtlcnNcbiAgICAgICAgICAgICAgaWYgKG1hcmtzLnNvbWUobSA9PiBtLnVzZWQpKSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSBtYXJrZXJcbiAgICAgICAgICAgICAgbWFya3MuZm9yRWFjaChtID0+IG0udXNlZCA9IHRydWUpO1xuICAgICAgICAgICAgICAvLyBTZXQgcG9zaXRpb24gd2l0aCB1bmlxdWUgbnVtYmVyc1xuICAgICAgICAgICAgICBsZXQgcG9zTnVtYmVycyA9IFtdLmNvbmNhdCguLi5tYXJrcy5tYXAobSA9PiBtLm9wdGlvbnMucG9zaXRpb24uc3BsaXQoJyAtICcpKSlcbiAgICAgICAgICAgICAgbGV0IHVuaXF1ZU51bWJlcnMgPSBwb3NOdW1iZXJzLmZpbHRlcigodiwgaSwgcykgPT4gcy5pbmRleE9mKHYpID09PSBpKTtcbiAgICAgICAgICAgICAgd2F5cG9pbnQub3B0aW9ucy5wb3NpdGlvbiA9IHVuaXF1ZU51bWJlcnMuam9pbignIC0gJyk7XG4gICAgICAgICAgICAgIG1hcmtlck5hbWUgPSB1bmlxdWVOdW1iZXJzLmxlbmd0aCA8PSAyID8gd2F5cG9pbnQub3B0aW9ucy5wb3NpdGlvbiA6ICcqKionO1xuICAgICAgICAgICAgICBzbWFsbFNpemUgPSAobWFya3MubGVuZ3RoID4gMSAmJiB1bmlxdWVOdW1iZXJzLmxlbmd0aCA8PSAyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ1JFQVRFIE1BUktFUlxuICAgICAgICAgICAgbGV0IG1hcmtlck9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgIGljb246IHRoaXMuZ2V0RGVmYXVsdE1hcmtlcihtYXJrZXJOYW1lLCB3YXlwb2ludC5vcHRpb25zLmNvbG9yID8gd2F5cG9pbnQub3B0aW9ucy5jb2xvciA6ICcjMDA0NDg3Jywgc21hbGxTaXplKSxcbiAgICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gTWFya2VyIHV1aWRcbiAgICAgICAgICAgIGlmICghd2F5cG9pbnQub3B0aW9ucy51dWlkKSB7XG4gICAgICAgICAgICAgIHdheXBvaW50Lm9wdGlvbnMudXVpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCAxNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXJrZXJPcHRpb25zLnV1aWQgPSB3YXlwb2ludC5vcHRpb25zLnV1aWQ7XG4gICAgICAgICAgICAvLyBNYXJrZXIgdGl0bGVcbiAgICAgICAgICAgIGlmICh3YXlwb2ludC5vcHRpb25zICYmIHdheXBvaW50Lm9wdGlvbnMudGl0bGUpIHtcbiAgICAgICAgICAgICAgbWFya2VyT3B0aW9ucy50aXRsZSA9IHdheXBvaW50Lm9wdGlvbnMudGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDcmVhdGUgbWFya2VyXG4gICAgICAgICAgICBsZXQgbWFya2VyID0gTC5tYXJrZXIoXG4gICAgICAgICAgICAgIFt3YXlwb2ludC5sYXRMbmcubGF0LCB3YXlwb2ludC5sYXRMbmcubG5nXSxcbiAgICAgICAgICAgICAgbWFya2VyT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIE1lcmtlciBwb3B1cCBkZXNjXG4gICAgICAgICAgICBpZiAod2F5cG9pbnQub3B0aW9ucyAmJiB3YXlwb2ludC5vcHRpb25zLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIC8vIENvbnRlbnQgb2YgcG9wdXA6IGhlcmUgdGhlIHN0ZXAgbnVtYmVyIGFuZCBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBtYXJrZXIuYmluZFBvcHVwKCdbJyArIHdheXBvaW50Lm9wdGlvbnMucG9zaXRpb24gKyAnXSAtICcgKyB3YXlwb2ludC5vcHRpb25zLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgLy8gRGlzcGxheS9oaWRlIHBvcHVwIG9uIG1vdXNlIG92ZXIvb3V0XG4gICAgICAgICAgICAgIG1hcmtlci5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKCkgeyB0aGlzLm9wZW5Qb3B1cCgpIH0pO1xuICAgICAgICAgICAgICBtYXJrZXIub24oJ21vdXNlb3V0JywgZnVuY3Rpb24gKCkgeyB0aGlzLmNsb3NlUG9wdXAoKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXI7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSkub24oJ3dheXBvaW50c2NoYW5nZWQnLCB0aGlzLndheXBvaW50c0NoYW5nZWQpO1xuICAgICAgICAvLyBBZGQgdG8gbWFwXG4gICAgICAgIGlmICh0aGlzLnJvdXRpbmdDb250cm9sICYmIHRoaXMubWFwKSB7IHRoaXMucm91dGluZ0NvbnRyb2wuYWRkVG8odGhpcy5tYXApOyB9XG4gICAgICB9LFxuICAgICAgZ2V0RGVmYXVsdE1hcmtlcih0ZXh0ID0gJycsIGNvbG9yID0gJyMwMDQ0ODcnLCBzbWFsbFNpemUpIHtcbiAgICAgICAgcmV0dXJuIEwuZGl2SWNvbih7XG4gICAgICAgICAgaWNvblNpemU6IG51bGwsXG4gICAgICAgICAgaHRtbDonPGRpdiBjbGFzcz1cIm1hcmtlclwiPicgK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiJyArIChzbWFsbFNpemUgPyAncG9zLWN1c3RvbS1zbWFsbCcgOiAncG9zLWN1c3RvbScpICsgJ1wiPicgKyB0ZXh0LnJlcGxhY2VBbGwoJyAtICcsICc8YnI+JykgKyAnPC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwibWFya2VyLWN1c3RvbVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogJyArIGNvbG9yICsgJ1wiPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgJzwvZGl2PidcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuICAvKiBIaWRlIGxlYWZsZXQgaXRpbmVyYXJ5ICovXG4gIGRpdi5sZWFmbGV0LXRvcC5sZWFmbGV0LXJpZ2h0IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgfVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgIDxzbG90IG5hbWU9XCJtYWluXCI+PC9zbG90PlxuICAgIDwvdi1yb3c+XG4gICAgPHYtcm93IG5vLWd1dHRlcnMgY2xhc3M9XCJweC0xXCI+XG4gICAgICA8di1jaGVja2JveCB2LW1vZGVsPVwiaXNQYXJlbnRcIiBsYWJlbD1cIkNlIG1vZHVsZSBlc3QtaWwgdW4gZW5mYW50ID9cIj48L3YtY2hlY2tib3g+XG4gICAgPC92LXJvdz5cbiAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgIDxzbG90IHYtaWY9XCJpc1BhcmVudFwiIG5hbWU9XCJwYXJlbnRcIj48L3Nsb3Q+XG4gICAgPC92LXJvdz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IGxhbmc9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcIm1vZHVsZS1lZGl0LWZvcm1cIixcbiAgcHJvcHM6IFtcIm1vZHVsZVwiXSxcbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy5pc1BhcmVudCA9IHRoaXMubW9kdWxlLnBhcmVudCAhPSBudWxsO1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzUGFyZW50OiBmYWxzZSxcbiAgICB9O1xuICB9LFxufSk7XG5cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmxhYmVsIHtcbiAgd2lkdGg6IDEyMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgaWQ9XCJjYXJkXCI+XG4gICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gICAgPHYtY2FyZCBjbGFzcz1cIm14LWF1dG8gY2FyZFwiIG1heC13aWR0aD1cIjEwMCVcIiBvdXRsaW5lZD5cbiAgICAgIDx2LWltZyBzcmM9XCIvYnVpbGQvaW1hZ2VzL2JsYW5jLmpwZ1wiIGhlaWdodD1cIjE1MFwiIGNvbnRhaW4+PC92LWltZz5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvQ2FyZFwiPlxuICAgICAgICA8c3BhbiBjb2xvcj1cIiNmM2YzZjNcIj57eyBwcm9kdWN0LmNhdGVnb3J5IH19PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBwcm9kdWN0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuPlByaXggcGFyIHt7IHRoaXMucHJpY2UgfX0gOjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1pZj1cInByaWNpbmcgPT09ICdwcmljZTYnXCI+e3sgcHJvZHVjdC5wcmljZTYgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIHYtZWxzZS1pZj1cInByaWNpbmcgPT09ICdwcmljZTM2J1wiPnt7IHByb2R1Y3QucHJpY2UzNiB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1lbHNlLWlmPVwicHJpY2luZyA9PT0gJ3ByaWNlNzInXCI+e3sgcHJvZHVjdC5wcmljZTcyIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiB2LWVsc2UtaWY9XCJwcmljaW5nID09PSAncHJpY2UxMjAnXCI+e3sgcHJvZHVjdC5wcmljZTEyMCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1lbHNlLWlmPVwicHJpY2luZyA9PT0gJ3ByaWNlMTgwJ1wiPnt7IHByb2R1Y3QucHJpY2UxODAgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIHYtZWxzZS1pZj1cInByaWNpbmcgPT09ICdwcmljZTI0MCdcIj57eyBwcm9kdWN0LnByaWNlMjQwIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiB2LWVsc2UtaWY9XCJwcmljaW5nID09PSAncHJpY2UzMDAnXCI+e3sgcHJvZHVjdC5wcmljZTMwMCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1lbHNlLWlmPVwicHJpY2luZyA9PT0gJ3ByaWNlNjAwJ1wiPnt7IHByb2R1Y3QucHJpY2U2MDAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgIDx2LWJ0biB0ZXh0PkTDqXRhaWxzPC92LWJ0bj5cbiAgICAgICAgPHYtYnRuIHRleHQ+PHYtaWNvbj5tZGktaGVhcnQtb3V0bGluZTwvdi1pY29uPjwvdi1idG4+XG4gICAgICAgIDx2LWJ0biBjb2xvcj1cInNlY29uZGFyeVwiIHRleHRcbiAgICAgICAgICA+PHYtaWNvbj5tZGktYmFza2V0LXBsdXMtb3V0bGluZTwvdi1pY29uPjwvdi1idG5cbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgPC92LWNhcmQ+XG4gICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBsYW5nPVwidHNcIj5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogXCJwcm9kdWN0LWNhcmRcIixcbiAgcHJvcHM6IFtcInByb2R1Y3RcIiwgXCJwcmljZVwiXSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0FjdGl2ZTogZmFsc2UsXG4gICAgICBwcmljaW5nOiBcInByaWNlXCIgKyB0aGlzLnByaWNlLFxuICAgIH07XG4gIH0sXG59KTtcbjwvc2NyaXB0PlxuICAgXG48c3R5bGUgc2NvcGVkPlxuI2NhcmQge1xuICB3aWR0aDogMzElO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMHB4IDIwcHggMjBweCAwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi52LWltYWdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMzAlO1xufVxuLmluZm9DYXJkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogNTAlO1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuLmluZm9DYXJkIHNwYW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuLmluZm9DYXJkIHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgY29sb3I6ICM3MDcwNzA7XG59XG4uaW5mb0NhcmQgc3BhbjpudGgtY2hpbGQoMykge1xuICBjb2xvcjogIzcwNzA3MDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cbi5pbmZvQ2FyZCBzcGFuOm50aC1jaGlsZCg0KSB7XG4gIGNvbG9yOiAjZmQ2ZTYwO1xuICBmb250LXNpemU6IDI4cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmJ1dHRvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbn1cbi52LWJ0biB7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2MyYzJjMjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjMmMyYzI7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGhlaWdodDogNjBweDtcbiAgZmxleDogMiAxIDEwMHB4O1xufVxuLnYtYnRuOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8di1jb2wgdi1pZj1cImlzRWRpdFwiPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgIDwvdi1jb2w+XG4gICAgPHYtY29sIHYtZWxzZT5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPk5vbTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCI+e3sgdXNlci5maXJzdG5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC11cHBlcmNhc2VcIj57eyB1c2VyLmxhc3RuYW1lIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5FbWFpbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPnt7IHVzZXIuZW1haWwgfX08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5Uw6lsw6lwaG9uZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPnt7IHVzZXIuYWRkcmVzcyA/IHVzZXIuYWRkcmVzcy5waG9uZSA6ICctJ319PC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+QWRyZXNzZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiIHYtaWY9XCJ1c2VyLmFkZHJlc3NcIj5cbiAgICAgICAgICA8c3Bhbj57eyB1c2VyLmFkZHJlc3MuYWRkcmVzczEgfX0sIHt7IHVzZXIuYWRkcmVzcy5wb3N0Y29kZSB9fSB7eyB1c2VyLmFkZHJlc3MuY2l0eSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyB1c2VyLmFkZHJlc3MuY291bnRyeSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgdi1lbHNlPi08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgPC92LWNvbD5cbiAgICA8di1yb3cgbm8tZ3V0dGVycyA6anVzdGlmeT1cIiR2dWV0aWZ5LmJyZWFrcG9pbnQubWRBbmRVcCA/ICdlbmQnIDogJ2NlbnRlcidcIiB2LWlmPVwiIWlzRWRpdFwiPlxuICAgICAgPHYtYnRuIGNvbG9yPVwic2Vjb25kYXJ5XCIgdi1vbjpjbGljaz1cImlzRWRpdCA9ICFpc0VkaXRcIj5cbiAgICAgICAgPHYtaWNvbiBsZWZ0Pm1kaS1wZW5jaWw8L3YtaWNvbj5cbiAgICAgICAgTW9kaWZpZXIgbGVzIGluZm9ybWF0aW9uc1xuICAgICAgPC92LWJ0bj5cbiAgICA8L3Ytcm93PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwidXNlci1lZGl0LWZvcm1cIixcbiAgcHJvcHM6IFtcInVzZXJcIl0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRlbWl0dGVyLm9uKFwidG9nZ2xlLXVzZXItaW5mb1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzRWRpdCA9ICF0aGlzLmlzRWRpdDtcbiAgICB9KTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0VkaXQ6IGZhbHNlLFxuICAgIH07XG4gIH0sXG59KTtcblxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4ubGFiZWwge1xuICB3aWR0aDogMTIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDx2LWNhcmQ+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPHYtY29sIG1kPVwiMlwiPlxuICAgICAgICAgIDx2LWNoZWNrYm94IGNsYXNzPVwibWwtMyBtdC0zXCIgdi1tb2RlbD1cImZvcm0uaXNDaGFydGVkXCIgOnZhbHVlPVwiZm9ybS5pc0NoYXJ0ZWRcIiBsYWJlbD1cIkFmZnLDqHRlbWVudFwiIGhpZGUtZGV0YWlscyBuYW1lPVwiaXNfY2hhcnRlZFwiPjwvdi1jaGVja2JveD5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIG1kPVwiMlwiPlxuICAgICAgICAgIDx2LWNoZWNrYm94IGNsYXNzPVwibWwtMyBtdC0zXCIgdi1tb2RlbD1cImZvcm0uaXNJbmVydFwiIDp2YWx1ZT1cImZvcm0uaXNJbmVydFwiIGxhYmVsPVwiSW5lcnRlXCIgaGlkZS1kZXRhaWxzIG5hbWU9XCJpc19pbmVydFwiPjwvdi1jaGVja2JveD5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPHYtY29sPlxuICAgICAgICAgIDxhcGktc2VsZWN0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICBzZWxlY3QtY2xhc3M9XCJwYS0yIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgZm9ybU5hbWU9XCJjdXN0b21lclwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiY29kZU5hbWVcIlxuICAgICAgICAgICAgICB2YWx1ZT1cInV1aWRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNsaWVudFwiXG4gICAgICAgICAgICAgIDpmaWx0ZXJzPVwiZm9ybVwiXG4gICAgICAgICAgICAgIGZpbHRlci1uYW1lPVwiY3VzdG9tZXJ1dWlkXCJcbiAgICAgICAgICAgICAgcmVzb3VyY2U9XCJhY2NvdW50c1wiXG4gICAgICAgICAgICAgIDpwYXJhbXM9XCJ7b3JkZXI6IHtjb2RlOiAnYXNjJ30sIHR5cGU6IDEsIGlzQXJjaGl2ZWQ6ICcwJ31cIlxuICAgICAgICAgICAgICA6cmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgQGNoYW5nZT1cInNpdGVLZXkrK1wiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cIm9yaWdpbiA9PT0gJ3F1b3RlJ1wiXG4gICAgICAgICAgICAgIDprZXk9XCJjdXN0b21lcktleVwiXG4gICAgICAgICAgICAgIDpncm91cHM9XCJbJ2FwaTphY2NvdW50J11cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2FwaS1zZWxlY3QtYXV0b2NvbXBsZXRlPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2w+XG4gICAgICAgICAgPGFwaS1zZWxlY3QtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgIHNlbGVjdC1jbGFzcz1cInBhLTIgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICA6a2V5PVwic2l0ZUtleVwiXG4gICAgICAgICAgICAgIGxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICBmb3JtTmFtZT1cInNpdGVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNoYW50aWVyXCJcbiAgICAgICAgICAgICAgOmZpbHRlcnM9XCJmb3JtXCJcbiAgICAgICAgICAgICAgZmlsdGVyLW5hbWU9XCJzaXRlXCJcbiAgICAgICAgICAgICAgcmVzb3VyY2U9XCJzaXRlc1wiXG4gICAgICAgICAgICAgIDpwYXJhbXM9XCJ7J29yZGVyJzogeyBuYW1lOiAnYXNjJyB9LCAnY2xpZW50LnV1aWQnOiBmb3JtLmN1c3RvbWVydXVpZCA/IGZvcm0uY3VzdG9tZXJ1dWlkIDogbnVsbH1cIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJvcmlnaW4gPT09ICdxdW90ZSdcIlxuICAgICAgICAgICAgICA6cmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNpdGVcIlxuICAgICAgICAgICAgICBAY2hhbmdlPVwidXBkYXRlU2l0ZVwiXG4gICAgICAgICAgICAgIDpncm91cHM9XCJbJ2FwaTphY2NvdW50J11cIlxuICAgICAgICAgICAgICA6bGlzdHMuc3luYz1cInNpdGVzXCJcbiAgICAgICAgICA+PC9hcGktc2VsZWN0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sPlxuICAgICAgICAgIDwhLS0gT24gY2xpY2ssIGNyZWF0ZSBldmVudCBcIm9wZW5Nb2RhbFNpdGVcIiBhbmQgcGFzcyBpdCBzdGF0ZSBhbmQgY3VzdG9tZXIgLS0+XG4gICAgICAgICAgPHYtYnRuIHYtaWY9XCIob3JpZ2luID09PSAnbWFudWFsJyB8fCBvcmlnaW4gPT09ICdzcGxpdCcpXCIgY2xhc3M9XCJtdC0yIG1sLTVcIiBjb2xvcj1cInByaW1hcnlcIiA6ZGlzYWJsZWQ9XCIhZm9ybS5jdXN0b21lcnV1aWRcIlxuICAgICAgICAgICAgICAgICBAY2xpY2s9XCIkZW1pdHRlci5lbWl0KCdvcGVuTW9kYWxTaXRlQ3JlYXRlJywgeyBzdGF0ZU1vZGFsOiB0cnVlLCBjdXN0b21lcnV1aWQ6IGZvcm0uY3VzdG9tZXJ1dWlkLCBjdXN0b21lcm5hbWU6IGZvcm0uY3VzdG9tZXJuYW1lfSlcIj5cbiAgICAgICAgICAgIDx2LWljb24gbGVmdD5tZGktcGx1czwvdi1pY29uPlxuICAgICAgICAgICAgQWpvdXRlciB1biBjaGFudGllclxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiM1wiPlxuICAgICAgICAgIDx2LWF1dG9jb21wbGV0ZSB2LW1vZGVsPVwiZm9ybS53YXJlaG91c2VUeXBlXCIgbmFtZT1cIndhcmVob3VzZVR5cGVcIiA6aXRlbXM9XCJ3YXJlaG91c2VUeXBlc1wiIGxhYmVsPVwiVHlwZSBkZSBjYXJyacOocmVcIiBvdXRsaW5lZCBpdGVtLXRleHQ9XCJuYW1lXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cImNvZGVcIiBjbGFzcz1cInBhLTIgcmVxdWlyZWRcIiBkZW5zZSBoaWRlLWRldGFpbHM9XCJhdXRvXCIgY2xlYXJhYmxlIEBjaGFuZ2U9XCJjaGFuZ2VXYXJlaG91c2VUeXBlXCI+XG4gICAgICAgICAgPC92LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIzXCI+XG4gICAgICAgICAgPGFwaS1zZWxlY3QtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgIHNlbGVjdC1jbGFzcz1cInBhLTIgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICBmb3JtTmFtZT1cIndhcmVob3VzZVwiXG4gICAgICAgICAgICAgIGxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwidXVpZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2FycmnDqHJlXCJcbiAgICAgICAgICAgICAgOmZpbHRlcnM9XCJmb3JtXCJcbiAgICAgICAgICAgICAgZmlsdGVyLW5hbWU9XCJ3YXJlaG91c2V1dWlkXCJcbiAgICAgICAgICAgICAgcmVzb3VyY2U9XCJ3YXJlaG91c2VzXCJcbiAgICAgICAgICAgICAgOnBhcmFtcz1cIndhcmVob3VzZVBhcmFtc1wiXG4gICAgICAgICAgICAgIEBjaGFuZ2U9XCJjaGFuZ2VXYXJlaG91c2VcIlxuICAgICAgICAgICAgICA6cmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgOnJlbG9hZD1cIndhcmVob3VzZUtleVwiXG4gICAgICAgICAgICAgIDpncm91cHM9XCJbJ2Zvcm0ucmVhZCddXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9hcGktc2VsZWN0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIzXCI+XG4gICAgICAgICAgPHYtYXV0b2NvbXBsZXRlIHYtbW9kZWw9XCJmb3JtLnByb2R1Y3RcIiBuYW1lPVwicHJvZHVjdFwiIDppdGVtcz1cImZvcm0ucHJvZHVjdHNcIiBsYWJlbD1cIlByb2R1aXRcIiBvdXRsaW5lZCBpdGVtLXRleHQ9XCJuYW1lXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cImlkXCIgY2xhc3M9XCJwYS0yIHJlcXVpcmVkXCIgZGVuc2UgaGlkZS1kZXRhaWxzPVwiYXV0b1wiIGNsZWFyYWJsZVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiM1wiPlxuICAgICAgICAgIDx2LXRleHQtZmllbGQgdi1tb2RlbD1cImZvcm0ucXVhbnRpdHlcIiBsYWJlbD1cIlF1YW50aXTDqVwiIG5hbWU9XCJxdWFudGl0eVwiIHR5cGU9XCJudW1iZXJcIiBwYXR0ZXJuPVwiWzAtOV0qXCIgY2xhc3M9XCJwYS0yIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNlIGhpZGUtZGV0YWlscz1cImF1dG9cIiBvdXRsaW5lZCBjbGVhcmFibGUgcmVxdWlyZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8di1jb2wgY29scz1cIjdcIj5cbiAgICAgICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgICAgIDx2LWNvbCBjbGFzcz1cInBhLTJcIj5cbiAgICAgICAgICAgICAgPHYtdGV4dGFyZWEgcm93cz1cIjJcIiB2LW1vZGVsPVwiZm9ybS5jb21tZW50cGxhbm5pbmdcIiBuYW1lPVwiY29tbWVudHBsYW5uaW5nXCIgbGFiZWw9XCJDb21tZW50YWlyZSBwbGFubmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmVkIGhpZGUtZGV0YWlscyBjbGFzcz1cInBiLTJcIiBwcmVwZW5kLWlubmVyLWljb249XCJtZGktY29tbWVudC1zZWFyY2gtb3V0bGluZVwiIGNsZWFyYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s6cHJlcGVuZC1pbm5lcj1cInNob3dDb21tZW50c01vZGFsKCdzY2hlZHVsZScsICdjb21tZW50UGxhbm5pbmcnKVwiIHJlZj1cImNvbW1lbnRQbGFubmluZ1wiXG4gICAgICAgICAgICAgID48L3YtdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDx2LXRleHRhcmVhIHJvd3M9XCIyXCIgdi1tb2RlbD1cImZvcm0uY29tbWVudHNPcmRlclwiIG5hbWU9XCJjb21tZW50c09yZGVyXCIgbGFiZWw9XCJDb21tZW50YWlyZSBjb21tYW5kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmVkIGhpZGUtZGV0YWlscyBjbGFzcz1cInB0LTJcIiBwcmVwZW5kLWlubmVyLWljb249XCJtZGktY29tbWVudC1zZWFyY2gtb3V0bGluZVwiIGNsZWFyYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s6cHJlcGVuZC1pbm5lcj1cInNob3dDb21tZW50c01vZGFsKCdvcmRlcicsICdjb21tZW50T3JkZXInKVwiIHJlZj1cImNvbW1lbnRPcmRlclwiXG4gICAgICAgICAgICAgID48L3YtdGV4dGFyZWE+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgICA8di10ZXh0YXJlYSByb3dzPVwiNVwiIHYtbW9kZWw9XCJmb3JtLmNvbW1lbnRkcml2ZXJcIiBuYW1lPVwiY29tbWVudGRyaXZlclwiIGxhYmVsPVwiQ29tbWVudGFpcmUgY2hhdWZmZXVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZWQgaGlkZS1kZXRhaWxzIGNsYXNzPVwicGEtMlwiIHByZXBlbmQtaW5uZXItaWNvbj1cIm1kaS1jb21tZW50LXNlYXJjaC1vdXRsaW5lXCIgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljazpwcmVwZW5kLWlubmVyPVwic2hvd0NvbW1lbnRzTW9kYWwoJ2RyaXZlcicsICdjb21tZW50RHJpdmVyJylcIiByZWY9XCJjb21tZW50RHJpdmVyXCJcbiAgICAgICAgICAgICAgPjwvdi10ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIGNvbHM9XCI1XCI+XG4gICAgICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdi1tb2RlbD1cImRlbGl2ZXJ5RGF0ZVwiIGxhYmVsPVwiRGF0ZSBkZSBsaXZyYWlzb25cIiBuYW1lPVwiZGVsaXZlcnlEYXRlXCIgdHlwZT1cImRhdGVcIiBjbGFzcz1cInByLTQgbXItMCBtdC00IHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW5zZSBoaWRlLWRldGFpbHM9XCJhdXRvXCIgb3V0bGluZWQgY2xlYXJhYmxlIHJlcXVpcmVkPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgIDx2LWNvbD5cbiAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB2LW1vZGVsPVwiZm9ybS5leHRlcm5hbENvZGVcIiBsYWJlbD1cIlJlZi4gY2RlLiBjbGllbnRcIiBuYW1lPVwiZXh0ZXJuYWxDb2RlXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cInByLTQgbXItMCBtdC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW5zZSBoaWRlLWRldGFpbHM9XCJhdXRvXCIgb3V0bGluZWQgY2xlYXJhYmxlPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMCB0ZXh0LWNlbnRlciBtdC0yIG1iLTIgZm9udC13ZWlnaHQtYm9sZFwiPnt7IGZvcm0uaXNJbmVydCA/ICdSw6ljZXB0aW9ucycgOiAnTGl2cmFpc29ucycgfX08L3A+XG4gICAgICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgICAgICA8di1jb2wgY29scz1cIjdcIiBjbGFzcz1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKG1vLCBpZHgpIGluIG1vbWVudHNEYXlzXCI+XG4gICAgICAgICAgICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LXNlbGVjdCB2LW1vZGVsPVwibW8uY29kZVwiIGxhYmVsPVwiTW9tZW50cyBkZSBsYSBqb3VybsOpZVwiIDppdGVtcz1cImZvcm0ub3BlbmluZ1RpbWVcIiBkZW5zZSA6ZGlzYWJsZWQ9XCJtby51c2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0aXRsZT1cIm1vLnVzZWQgPyAnQWZmZWN0w6kgw6AgdW4gdG91cicgOiAnJ1wiIGl0ZW0tdmFsdWU9XCJjb2RlXCIgaXRlbS10ZXh0PVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHM9XCJhdXRvXCIgY2xhc3M9XCJtci0xIG10LTJcIiBvdXRsaW5lZCBjbGVhcmFibGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIyXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWJ0biA6ZGlzYWJsZWQ9XCJtby51c2VkXCIgb3V0bGluZWQgY29sb3I9XCJlcnJvclwiIGNsYXNzPVwiYnRuIG1iLTBcIiB4LXNtYWxsIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgOnRpdGxlPVwibW8udXNlZCA/ICdBZmZlY3TDqSDDoCB1biB0b3VyJyA6ICdTdXBwcmltZXIgbGUgbW9tZW50J1wiIEBjbGljaz1cInJlbW92ZU1vbWVudERheShpZHgpXCI+LTwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgIDx2LWJ0biB0aXRsZT1cIkFqb3V0ZXIgdW4gbW9tZW50XCIgdi1pZj1cIihpZHggKyAxKSA9PT0gbW9tZW50c0RheXMubGVuZ3RoXCIgb3V0bGluZWQgeC1zbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJidG4gbXQtMFwiIHR5cGU9XCJidXR0b25cIiBAY2xpY2s9XCJhZGRNb21lbnREYXkoKVwiPis8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJtb21lbnRzRGF5c1wiIDp2YWx1ZT1cIkpTT04uc3RyaW5naWZ5KG1vbWVudHNEYXlzKVwiIC8+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI1XCIgY2xhc3M9XCJtYi00XCI+XG4gICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIih0aW1lSXRlbSwgaWR4KSBpbiB0aW1lc1wiPlxuICAgICAgICAgICAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI4XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgOmRpc2FibGVkPVwidGltZUl0ZW0udXNlZFwiIGhpZGUtZGV0YWlscyB0ZXh0LWFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJjZW50ZXJlZC1pbnB1dCBwLTAgbS0wXCIgdi1tb2RlbD1cInRpbWVJdGVtLnRpbWVcIiB0eXBlPVwidGltZVwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiNFwiPlxuICAgICAgICAgICAgICAgICAgICA8di1idG4gOmRpc2FibGVkPVwidGltZUl0ZW0udXNlZFwiIHRpdGxlPVwiU3VwcHJpbWVyIGwnaG9yYWlyZVwiIG91dGxpbmVkIGNvbG9yPVwiZXJyb3JcIiBjbGFzcz1cImJ0biBtYi0wXCIgeC1zbWFsbCB0eXBlPVwiYnV0dG9uXCIgQGNsaWNrPVwicmVtb3ZlVGltZShpZHgpXCI+LTwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgIDx2LWJ0biB0aXRsZT1cIkFqb3V0ZXIgdW4gaG9yYWlyZVwiIHYtaWY9XCIoaWR4ICsgMSkgPT09IHRpbWVzLmxlbmd0aFwiIG91dGxpbmVkIHgtc21hbGwgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJidG4gbXQtMFwiIHR5cGU9XCJidXR0b25cIiBAY2xpY2s9XCJhZGRUaW1lKClcIj4rPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidGltZXNcIiA6dmFsdWU9XCJKU09OLnN0cmluZ2lmeSh0aW1lcylcIiAvPlxuICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cbiAgICA8L3YtY2FyZD5cbiAgICA8Q29tbWVudHNMaXN0TW9kYWxcbiAgICAgICAgOmlzLW9wZW4tbW9kYWw9XCJpc09wZW5Db21tZW50TW9kYWxcIiA6dHlwZXM9XCJjb21tZW50TW9kYWxUeXBlXCJcbiAgICAgICAgQGNsb3NlPVwiaXNPcGVuQ29tbWVudE1vZGFsID0gZmFsc2VcIiBAdXBkYXRlOmNvbW1lbnQ9XCJ1cGRhdGVDb21tZW50VmFsdWUoJGV2ZW50KVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHR5cGU9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCBDb21tZW50c0xpc3RNb2RhbCBmcm9tIFwiLi4vLi4vY29tbWVudC9jb21wb25lbnQvQ29tbWVudHNMaXN0TW9kYWwudnVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcIm9yZGVyLWl0ZW0tbWFudWFsLWZvcm1cIixcbiAgY29tcG9uZW50czoge0NvbW1lbnRzTGlzdE1vZGFsfSxcbiAgcHJvcHM6IFsnZGlhbG9nJywgJ2N1c3RvbWVydXVpZCcsICdvcmRlckl0ZW0nLCAnb3JpZ2luJywgJ3NpdGUnLCAncXVhbnRpdHknLCAnZGF0ZXRvbW9ycm93JywgJ3NvY05hbWUnXSxcbiAgZGF0YTogKF90aGlzKSA9PiAoe1xuICAgIHRpbWVzOiBbXSwgLy8gVGltZXMgYXJyYXlcbiAgICBtb21lbnRzRGF5czogW10sXG4gICAgZGVmYXVsdFRpbWU6IHsgdGltZTogbnVsbCwgdXNlZDogZmFsc2UgfSxcbiAgICBkZWZhdWx0TW9tZW50RGF5OiB7IGNvZGU6IG51bGwsIHVzZWQ6IGZhbHNlIH0sXG4gICAgZm9ybToge1xuICAgICAgY3VzdG9tZXJ1dWlkOiAnJyxcbiAgICAgIGN1c3RvbWVybmFtZTogJycsXG4gICAgICBzaXRlOiBudWxsLFxuICAgICAgc2l0ZXM6IFtdLFxuICAgICAgd2FyZWhvdXNldXVpZDogbnVsbCxcbiAgICAgIHByb2R1Y3Q6IG51bGwsXG4gICAgICBwcm9kdWN0czogW10sXG4gICAgICBxdWFudGl0eTogMzAsXG4gICAgICBvcGVuaW5nVGltZTogW3tuYW1lOiAnSm91cm7DqWUnLCBjb2RlOiAnZGF5J30sIHtuYW1lOiAnTWF0aW4nLCBjb2RlOiAnbW9ybmluZyd9LCB7bmFtZTogJ0FwcsOocy1NaWRpJywgY29kZTogJ2FmdGVybm9vbid9XSxcbiAgICAgIGNvbW1lbnRwbGFubmluZzogJycsXG4gICAgICBjb21tZW50ZHJpdmVyOiAnJyxcbiAgICAgIGlzQ2hhcnRlZDogZmFsc2UsXG4gICAgICBleHRlcm5hbENvZGU6IG51bGwsXG4gICAgICB3YXJlaG91c2VUeXBlOiAnS00nLFxuICAgICAgaXNJbmVydDogZmFsc2VcbiAgICB9LFxuICAgIGRlbGl2ZXJ5RGF0ZTogbnVsbCxcbiAgICB3YXJlaG91c2VzOiBbXSxcbiAgICBjdXN0b21lcnM6IFtdLFxuICAgIGN1c3RvbWVyS2V5OiAwLFxuICAgIHdhcmVob3VzZUtleTogMCxcbiAgICB3YXJlaG91c2VUeXBlczogW1xuICAgICAgeyBjb2RlOiAnS00nLCBuYW1lOiAoX3RoaXMuc29jTmFtZSA/PyAnLScpLCBwYXJhbXM6IHtvcmRlcjoge25hbWU6ICdhc2MnfSwgaXNUcmFuc3BvcnQ6ICcwJywgaXNUcmFkaW5nOiAnMCd9fSxcbiAgICAgIHsgY29kZTogJ1RSQURJTkcnLCBuYW1lOiAnTsOpZ29jZScsIHBhcmFtczoge29yZGVyOiB7bmFtZTogJ2FzYyd9LCBpc1RyYW5zcG9ydDogJzAnLCBpc1RyYWRpbmc6ICcxJ319LFxuICAgICAgeyBjb2RlOiAnVFJBTlNQT1JUJywgbmFtZTogJ1RyYW5zcG9ydCcsIHBhcmFtczoge29yZGVyOiB7bmFtZTogJ2FzYyd9LCBpc1RyYW5zcG9ydDogJzEnLCBpc1RyYWRpbmc6ICcwJ319LFxuICAgICAgeyBjb2RlOiAnQk9USCcsIG5hbWU6ICdOw6lnb2NlIGV0IHRyYW5zcG9ydCcsIHBhcmFtczoge29yZGVyOiB7bmFtZTogJ2FzYyd9LCBpc1RyYW5zcG9ydDogJzEnLCBpc1RyYWRpbmc6ICcxJ319LFxuICAgIF0sXG4gICAgd2FyZWhvdXNlUGFyYW1zOiBudWxsLFxuICAgIHNpdGVLZXk6IDAsXG4gICAgc2l0ZXM6IFtdLFxuICAgIGlzT3BlbkNvbW1lbnRNb2RhbDogZmFsc2UsXG4gICAgY29tbWVudE1vZGFsVHlwZTogW10sXG4gICAgdXBkYXRhYmxlQ29tbWVudFJlZjogbnVsbFxuICB9KSxcbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy5kZWxpdmVyeURhdGUgPSAhdGhpcy5kYXRldG9tb3Jyb3cgPyB0aGlzLiR0b21vcnJvdy5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IG1vbWVudCh0aGlzLmRhdGV0b21vcnJvdykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cbiAgICAvLyBPcmRlciBmb3JtXG4gICAgaWYgKHRoaXMub3JkZXJJdGVtKSB7XG4gICAgICB0aGlzLmZvcm0gPSB7XG4gICAgICAgIGN1c3RvbWVydXVpZDogdGhpcy5vcmRlckl0ZW0uY3VzdG9tZXIgJiYgdGhpcy5vcmRlckl0ZW0uY3VzdG9tZXIudXVpZCA/IHRoaXMub3JkZXJJdGVtLmN1c3RvbWVyLnV1aWQgOiAnJyxcbiAgICAgICAgY3VzdG9tZXJuYW1lOiB0aGlzLm9yZGVySXRlbS5jdXN0b21lciAmJiB0aGlzLm9yZGVySXRlbS5jdXN0b21lci5uYW1lID8gdGhpcy5vcmRlckl0ZW0uY3VzdG9tZXIubmFtZSA6ICcnLFxuICAgICAgICBvcGVuaW5nVGltZTogW3tuYW1lOiAnSm91cm7DqWUnLCBjb2RlOiAnZGF5J30sIHtuYW1lOiAnTWF0aW4nLCBjb2RlOiAnbW9ybmluZyd9LCB7bmFtZTogJ0FwcsOocy1NaWRpJywgY29kZTogJ2FmdGVybm9vbid9XSxcbiAgICAgICAgY29tbWVudHBsYW5uaW5nOiB0aGlzLm9yZGVySXRlbS5jb21tZW50c1BsYW5uaW5nID8gdGhpcy5vcmRlckl0ZW0uY29tbWVudHNQbGFubmluZyA6ICcnLFxuICAgICAgICBjb21tZW50ZHJpdmVyOiB0aGlzLm9yZGVySXRlbS5jb21tZW50c0RyaXZlciA/IHRoaXMub3JkZXJJdGVtLmNvbW1lbnRzRHJpdmVyIDogJycsXG4gICAgICAgIGNvbW1lbnRzT3JkZXI6IHRoaXMub3JkZXJJdGVtLmNvbW1lbnRzT3JkZXIgPyB0aGlzLm9yZGVySXRlbS5jb21tZW50c09yZGVyIDogJycsXG4gICAgICAgIGlzQ2hhcnRlZDogISF0aGlzLm9yZGVySXRlbS5pc19jaGFydGVkLFxuICAgICAgICBwcm9kdWN0czogW10sXG4gICAgICAgIHNpdGVzOiBbXSxcbiAgICAgICAgc2l0ZTogdGhpcy5vcmRlckl0ZW0uc2l0ZT8uaWQgPz8gbnVsbCxcbiAgICAgICAgZXh0ZXJuYWxDb2RlOiB0aGlzLm9yZGVySXRlbS5leHRlcm5hbENvZGUgPyB0aGlzLm9yZGVySXRlbS5leHRlcm5hbENvZGUgOiAnJyxcbiAgICAgICAgd2FyZWhvdXNlVHlwZTogdGhpcy5vcmRlckl0ZW0ud2FyZWhvdXNlVHlwZSA/PyAodGhpcy4kYXBwVGhlbWUgPT09ICdsdWNoZScgPyAnTHVjaMOpJyA6ICdLTScpLFxuICAgICAgICBpc0luZXJ0OiB0aGlzLm9yZGVySXRlbS5pc0luZXJ0XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNoYW5nZVdhcmVob3VzZVR5cGUoKTtcblxuICAgICAgc3dpdGNoICh0aGlzLm9yaWdpbikge1xuICAgICAgICBjYXNlICdtYW51YWwnOlxuICAgICAgICAgIHRoaXMuZm9ybS53YXJlaG91c2V1dWlkID0gdGhpcy5vcmRlckl0ZW0ud2FyZWhvdXNlICYmIHRoaXMub3JkZXJJdGVtLndhcmVob3VzZS51dWlkID8gdGhpcy5vcmRlckl0ZW0ud2FyZWhvdXNlLnV1aWQgOiBudWxsOyAvLyBXYXJlaG91c2VcbiAgICAgICAgICB0aGlzLmZvcm0uc2l0ZSA9IHRoaXMub3JkZXJJdGVtLnNpdGUgJiYgdGhpcy5vcmRlckl0ZW0uc2l0ZS5pZCA/IHRoaXMub3JkZXJJdGVtLnNpdGUuaWQgOiBudWxsOyAvLyBTaXRlXG4gICAgICAgICAgdGhpcy5mb3JtLnF1YW50aXR5ID0gdGhpcy5vcmRlckl0ZW0ucXVhbnRpdHlPcmRlcmVkID8gdGhpcy5vcmRlckl0ZW0ucXVhbnRpdHlPcmRlcmVkIDogKHRoaXMucXVhbnRpdHkgPyB0aGlzLnF1YW50aXR5IDogbnVsbCk7IC8vIFF0eVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdxdW90ZSc6XG4gICAgICAgIGNhc2UgJ3NwbGl0JzpcbiAgICAgICAgICB0aGlzLmZvcm0ud2FyZWhvdXNldXVpZCA9IHRoaXMub3JkZXJJdGVtLndhcmVob3VzZSAmJiB0aGlzLm9yZGVySXRlbS53YXJlaG91c2UudXVpZCA/IHRoaXMub3JkZXJJdGVtLndhcmVob3VzZS51dWlkIDogbnVsbDsgLy8gV2FyZWhvdXNlXG4gICAgICAgICAgdGhpcy5mb3JtLnNpdGUgPSB0aGlzLnNpdGUgJiYgdGhpcy5zaXRlLmlkID8gdGhpcy5zaXRlLmlkIDogbnVsbDsgLy8gU2l0ZVxuICAgICAgICAgIHRoaXMuZm9ybS5xdWFudGl0eSA9IHRoaXMucXVhbnRpdHkgPyB0aGlzLnF1YW50aXR5IDogbnVsbDsgLy8gUXR5XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybS5wcm9kdWN0ID0gdGhpcy5vcmRlckl0ZW0ucHJvZHVjdCAmJiB0aGlzLm9yZGVySXRlbS5wcm9kdWN0LmlkID8gdGhpcy5vcmRlckl0ZW0ucHJvZHVjdC5pZCA6IG51bGw7XG4gICAgICB0aGlzLnRpbWVzID0gdGhpcy5vcmRlckl0ZW0uZGVsaXZlcnlUaW1lcyA/IHRoaXMub3JkZXJJdGVtLmRlbGl2ZXJ5VGltZXMgOiBbXTtcblxuICAgICAgaWYgKHRoaXMudGltZXMubGVuZ3RoID09PSAwKSB7IHRoaXMuYWRkVGltZSgpOyB9XG5cbiAgICAgIHRoaXMubW9tZW50c0RheXMgPSB0aGlzLm9yZGVySXRlbS5tb21lbnRzRGF5cyA/IHRoaXMub3JkZXJJdGVtLm1vbWVudHNEYXlzLm1hcChtID0+IHsgbGV0IG1vID0gbS5vcGVuaW5nVGltZTsgbW8uaWQgPSBtLmlkOyBtby51c2VkID0gbS51c2VkOyByZXR1cm4gbW87IH0pIDogW107XG4gICAgICBpZiAodGhpcy5tb21lbnRzRGF5cy5sZW5ndGggPT09IDApIHsgdGhpcy5hZGRNb21lbnREYXkoKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyB0aW1lIHNhdmVkXG4gICAgICB0aGlzLmFkZFRpbWUoKTsgLy8gQWRkIGEgZGVmYXVsdCB0aW1lXG4gICAgICB0aGlzLmFkZE1vbWVudERheSgpO1xuICAgICAgLy8gRWxzZSByZXRyaWV2ZSB0aGVtIHdpdGggdGhpcy50aW1lcyA9IC4uLlxuICAgICAgaWYgKHRoaXMuY3VzdG9tZXJ1dWlkKSB7XG4gICAgICAgIHRoaXMuZm9ybS5jdXN0b21lcnV1aWQgPSB0aGlzLmN1c3RvbWVydXVpZDtcbiAgICAgICAgaWYgKHRoaXMuc2l0ZSAmJiB0aGlzLnNpdGUuaWQpIHsgdGhpcy5mb3JtLnNpdGUgPSB0aGlzLnNpdGUuaWQ7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgY3JlYXRlIHNpdGUgdG8gbGlzdCBhbmQgc2VsZWN0IGl0XG4gICAgdGhpcy4kZW1pdHRlci5vbignb3JkZXItbWFudWFsLWFkZC1zaXRlJywgKHNpdGUpID0+IHtcbiAgICAgIHRoaXMuc2l0ZUtleSsrO1xuICAgICAgdGhpcy5mb3JtLnNpdGUgPSBzaXRlLmlkO1xuICAgIH0pO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgY2hhbmdlV2FyZWhvdXNlKGUpIHtcbiAgICAgIGlmIChlICYmIGUubGlzdCAmJiBlLmxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLndhcmVob3VzZXMgPSBlLmxpc3Q7XG4gICAgICAgIGxldCB3YXJlaG91c2UgPSB0aGlzLndhcmVob3VzZXMuZmluZCh3ID0+IHcudXVpZCA9PSB0aGlzLmZvcm0ud2FyZWhvdXNldXVpZCk7XG4gICAgICAgIC8vIFJldHJpZXZlIHByb2R1Y3RzIGxpc3QgZnJvbSB3YXJlaG91c2VcbiAgICAgICAgaWYgKHdhcmVob3VzZSAmJiB3YXJlaG91c2UudXVpZCkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wcm9kdWN0cyA9IFsuLi53YXJlaG91c2UucHJvZHVjdHNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9ybS5wcm9kdWN0cyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm0ucHJvZHVjdHMubWFwKHMgPT4gcy5pZCkuaW5jbHVkZXModGhpcy5mb3JtLnByb2R1Y3QpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnByb2R1Y3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhZGRUaW1lKCkge1xuICAgICAgdGhpcy50aW1lcy5wdXNoKHsuLi50aGlzLmRlZmF1bHRUaW1lfSk7XG4gICAgfSxcbiAgICBhZGRNb21lbnREYXkoKSB7XG4gICAgICB0aGlzLm1vbWVudHNEYXlzLnB1c2goey4uLnRoaXMuZGVmYXVsdE1vbWVudERheX0pO1xuICAgIH0sXG4gICAgcmVtb3ZlVGltZShpZHgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhpcy50aW1lcy5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlTW9tZW50RGF5KGlkeCkge1xuICAgICAgaWYgKHRoaXMubW9tZW50c0RheXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLm1vbWVudHNEYXlzLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSxcbiAgICBjaGFuZ2VXYXJlaG91c2VUeXBlKCkge1xuICAgICAgbGV0IHd0ID0gdGhpcy53YXJlaG91c2VUeXBlcy5maW5kKHcgPT4gdy5jb2RlID09PSB0aGlzLmZvcm0ud2FyZWhvdXNlVHlwZSk7XG4gICAgICB0aGlzLndhcmVob3VzZVBhcmFtcyA9IHd0ID8gd3QucGFyYW1zIDogbnVsbDtcbiAgICAgIHRoaXMud2FyZWhvdXNlS2V5Kys7XG4gICAgfSxcbiAgICB1cGRhdGVTaXRlKHBhcmFtKSB7XG4gICAgICBsZXQgc2l0ZSA9IHBhcmFtLmxpc3QgPyBwYXJhbS5saXN0LmZpbmQocyA9PiBzLmlkID09PSB0aGlzLmZvcm0uc2l0ZSkgOiBudWxsO1xuICAgICAgdGhpcy4kZW1pdHRlci5lbWl0KCdvcmRlckl0ZW0tdXBkYXRlLXNpdGUnLCAoc2l0ZSAmJiBzaXRlLmlkID8gc2l0ZSA6IG51bGwpKTtcbiAgICB9LFxuICAgIHNob3dDb21tZW50c01vZGFsKHR5cGUsIHJlZikge1xuICAgICAgdGhpcy5pc09wZW5Db21tZW50TW9kYWwgPSB0cnVlO1xuICAgICAgdGhpcy5jb21tZW50TW9kYWxUeXBlID0gW3R5cGVdO1xuICAgICAgdGhpcy51cGRhdGFibGVDb21tZW50UmVmID0gcmVmO1xuICAgIH0sXG4gICAgdXBkYXRlQ29tbWVudFZhbHVlKGNvbW1lbnQpIHtcbiAgICAgIHRoaXMuJHJlZnNbdGhpcy51cGRhdGFibGVDb21tZW50UmVmXS5pbnRlcm5hbFZhbHVlICs9IGNvbW1lbnQ7XG4gICAgICB0aGlzLmlzT3BlbkNvbW1lbnRNb2RhbCA9IGZhbHNlXG4gICAgfVxuICB9XG59KTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAuY2VudGVyZWQtaW5wdXQgPj4+IGlucHV0IHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgfVxuPC9zdHlsZT5cbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuI21hcCB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWF4LWhlaWdodDogMTAwJTtcblxuICBwYXRoIHtcbiAgICBmaWxsOiAjMzk1YTZiO1xuICAgIHN0cm9rZTogI2ZmZmZmZjtcbiAgICBzdHJva2Utd2lkdGg6IDAuNjtcbiAgICB0cmFuc2l0aW9uOiBmaWxsIDAuMnMsIHN0cm9rZSAwLjNzO1xuICB9XG4gIHBhdGg6aG92ZXIge1xuICAgIGZpbGw6IHJlZDtcbiAgICBzdHJva2U6IHJlZDtcbiAgfVxuICAuc2VwYXJhdG9yIHtcbiAgICBzdHJva2U6ICNjY2M7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgfVxuICAuc2VwYXJhdG9yOmhvdmVyIHtcbiAgICBzdHJva2U6ICNjY2M7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuICAuYWZmZWN0ZSB7XG4gICAgZmlsbDogI2ZkNmU2MDtcbiAgICBzdHJva2U6ICNmZmZmZmY7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjU7XG4gIH1cbn1cblxuI3Rvb2x0aXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGNvbG9yOiAjMzk1YTZiO1xuICBib3JkZXItc3R5bGU6IGluc2V0O1xuICBwYWRkaW5nOiA0cHg7XG4gIHdpZHRoOiAyMDBweDtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiIsIjx0ZW1wbGF0ZT5cbiAgPGwtbWFwXG4gICAgdi1vbjpjbGljaz1cImFkZE1hcmtlclwiXG4gICAgcmVmPVwibWFwXCJcbiAgICA6em9vbT1cInpvb21cIlxuICAgIDpjZW50ZXI9XCJjZW50ZXJcIlxuICAgIDpvcHRpb25zPVwib3B0aW9uc1wiXG4gICAgc3R5bGU9XCJoZWlnaHQ6IDM1MHB4XCJcbiAgICBAdXBkYXRlOmNlbnRlcj1cImNlbnRlclVwZGF0ZVwiXG4gICAgQHVwZGF0ZTp6b29tPVwiem9vbVVwZGF0ZVwiXG4gID5cbiAgICA8bC1jb250cm9sLWxheWVycyBwb3NpdGlvbj1cInRvcHJpZ2h0XCI+PC9sLWNvbnRyb2wtbGF5ZXJzPlxuICAgIDxsLWNvbnRyb2wtc2NhbGVcbiAgICAgIHBvc2l0aW9uPVwiYm90dG9tbGVmdFwiXG4gICAgICA6aW1wZXJpYWw9XCJmYWxzZVwiXG4gICAgICA6bWV0cmljPVwidHJ1ZVwiXG4gICAgPjwvbC1jb250cm9sLXNjYWxlPlxuICAgIDxsLXRpbGUtbGF5ZXJcbiAgICAgIHYtZm9yPVwidGlsZVByb3ZpZGVyIGluIHRpbGVQcm92aWRlcnNcIlxuICAgICAgOmtleT1cInRpbGVQcm92aWRlci5uYW1lXCJcbiAgICAgIDpuYW1lPVwidGlsZVByb3ZpZGVyLm5hbWVcIlxuICAgICAgOnZpc2libGU9XCJ0aWxlUHJvdmlkZXIudmlzaWJsZVwiXG4gICAgICA6dXJsPVwidGlsZVByb3ZpZGVyLnVybFwiXG4gICAgICBsYXllci10eXBlPVwiYmFzZVwiXG4gICAgPlxuICAgIDwvbC10aWxlLWxheWVyPlxuICAgIDxsLWZlYXR1cmUtZ3JvdXAgcmVmPVwiZmVhdHVyZXNcIj48L2wtZmVhdHVyZS1ncm91cD5cbiAgPC9sLW1hcD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBMIGZyb20gXCJsZWFmbGV0XCI7XG5pbXBvcnQge1xuICBMTWFwLFxuICBMVGlsZUxheWVyLFxuICBMQ29udHJvbExheWVycyxcbiAgTENvbnRyb2xTY2FsZSxcbiAgTEZlYXR1cmVHcm91cCxcbiAgTEljb24sXG4gIExNYXJrZXIsXG59IGZyb20gXCJ2dWUyLWxlYWZsZXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwic2VjdG9yLW1hcC1jcmVhdGlvblwiLFxuICBjb21wb25lbnRzOiB7XG4gICAgTE1hcCxcbiAgICBMVGlsZUxheWVyLFxuICAgIExDb250cm9sTGF5ZXJzLFxuICAgIExDb250cm9sU2NhbGUsXG4gICAgTEZlYXR1cmVHcm91cCxcbiAgICBMSWNvbixcbiAgICBMTWFya2VyLFxuICB9LFxuXG4gIHByb3BzOiBbXCJtYXJrZXJzXCIsIFwiY2VudGVyXCIsIFwiem9vbVwiXSxcbiAgZGF0YTogKCkgPT4gKHtcbiAgICBjdXJyZW50Wm9vbTogMTEuNSxcbiAgICBjdXJyZW50Q2VudGVyOiBudWxsLFxuICAgIG9wdGlvbnM6IHsgem9vbVNuYXA6IDAuNSB9LFxuICAgIG1hcDogbnVsbCxcbiAgICB0aWxlUHJvdmlkZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiUGxhbiBjb3VsZXVyXCIsXG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIHVybDogXCJodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZ1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJQbGFuIG5vaXIgZXQgYmxhbmNcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIHVybDogXCJodHRwczovL3tzfS50aWxlcy53bWZsYWJzLm9yZy9idy1tYXBuaWsve3p9L3t4fS97eX0ucG5nXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIlNhdGVsbGl0ZVwiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vc2VydmVyLmFyY2dpc29ubGluZS5jb20vQXJjR0lTL3Jlc3Qvc2VydmljZXMvV29ybGRfSW1hZ2VyeS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1hcmtlcnNMaXN0OiBbXSxcbiAgICBsYXllcnM6IFtdLFxuICB9KSxcbiAgd2F0Y2g6IHtcbiAgICBtYXJrZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLm1hcmtlcnNMaXN0ID0gdGhpcy5tYXJrZXJzID8gWy4uLnRoaXMubWFya2Vyc10gOiBbXTtcbiAgICAgIHRoaXMuY2xlYXJNYXAoKTtcbiAgICAgIHRoaXMudXBkYXRlTWFwKCk7XG4gICAgfSxcbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLm1hcmtlcnNMaXN0ID0gdGhpcy5tYXJrZXJzID8gWy4uLnRoaXMubWFya2Vyc10gOiBbXTtcblxuICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgIC8vIEluaXQgbGVhZmxldCBtYXBcbiAgICAgIHRoaXMuaW5pdE1hcCgpO1xuICAgICAgdGhpcy4kZW1pdChcImNoaWxkVG9QYXJlbnRcIiwgdGhpcy5tYXJrZXJzTGlzdCk7XG4gICAgICB0aGlzLnVwZGF0ZU1hcCgpO1xuICAgIH0pO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgem9vbVVwZGF0ZSh6b29tKSB7XG4gICAgICB0aGlzLmN1cnJlbnRab29tID0gem9vbTtcbiAgICB9LFxuICAgIGNlbnRlclVwZGF0ZShjZW50ZXIpIHtcbiAgICAgIHRoaXMuY3VycmVudENlbnRlciA9IGNlbnRlcjtcbiAgICB9LFxuICAgIGluaXRNYXAoKSB7XG4gICAgICAvLyBNYXBcbiAgICAgIHRoaXMubWFwID0gdGhpcy4kcmVmcy5tYXAubWFwT2JqZWN0O1xuICAgIH0sXG4gICAgYWRkTWFya2VyKGV2ZW50KSB7XG4gICAgICBsZXQgbWFya2VyT3B0aW9ucyA9IHsgaWNvbjogdGhpcy5nZXREZWZhdWx0TWFya2VyKCkgfTtcblxuICAgICAgdGhpcy5tYXJrZXJzTGlzdC5wdXNoKGV2ZW50LmxhdGxuZyk7XG4gICAgICBpZiAodGhpcy5tYXJrZXJzTGlzdCAmJiB0aGlzLm1hcmtlcnNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5tYXJrZXJzTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGxldCBsYXllciA9IEwubWFya2VyKGl0ZW0sIG1hcmtlck9wdGlvbnMpO1xuICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChcInBvaW50IG7CsFwiICsgKGluZGV4ICsgMSkudG9TdHJpbmcoKSkub3BlblBvcHVwKCk7XG4gICAgICAgICAgdGhpcy5sYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgbGF5ZXIuYWRkVG8odGhpcy5tYXApO1xuICAgICAgICB9KTtcblxuICAgICAgICBMLnBvbHlnb24odGhpcy5tYXJrZXJzTGlzdCkuYWRkVG8odGhpcy5tYXApO1xuICAgICAgfVxuICAgICAgdGhpcy4kZW1pdChcImNoaWxkVG9QYXJlbnRcIiwgdGhpcy5tYXJrZXJzTGlzdCk7XG4gICAgfSxcbiAgICBjbGVhck1hcCgpIHtcbiAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICAvL29uIGNsZWFyIGxlcyBtYXJrZXJzXG4gICAgICAgIHRoaXMubGF5ZXJzLmZvckVhY2goKGl0ZW0pID0+IHsgdGhpcy5tYXAucmVtb3ZlTGF5ZXIoaXRlbSk7IH0pO1xuICAgICAgICAvL29uIGNsZWFyIGxlIHBvbHlnb25cbiAgICAgICAgY29uc3QgbSA9IHRoaXMubWFwO1xuICAgICAgICBmb3IgKGxldCBpIGluIG0uX2xheWVycykge1xuICAgICAgICAgIGlmIChtLl9sYXllcnNbaV0uX3BhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbS5yZW1vdmVMYXllcihtLl9sYXllcnNbaV0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInByb2JsZW0gd2l0aCBcIiArIGUgKyBtLl9sYXllcnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlTWFwKCkge1xuICAgICAgbGV0IG1hcmtlck9wdGlvbnMgPSB7IGljb246IHRoaXMuZ2V0RGVmYXVsdE1hcmtlcigpIH07XG4gICAgICBpZiAodGhpcy5tYXJrZXJzTGlzdCAmJiB0aGlzLm1hcmtlcnNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5tYXJrZXJzTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGxldCBsYXllciA9IEwubWFya2VyKGl0ZW0sIG1hcmtlck9wdGlvbnMpO1xuICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChcInBvaW50IG7CsFwiICsgKGluZGV4ICsgMSkudG9TdHJpbmcoKSkub3BlblBvcHVwKCk7XG4gICAgICAgICAgdGhpcy5sYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgbGF5ZXIuYWRkVG8odGhpcy5tYXApO1xuICAgICAgICB9KTtcblxuICAgICAgICBMLnBvbHlnb24odGhpcy5tYXJrZXJzTGlzdCkuYWRkVG8odGhpcy5tYXApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RGVmYXVsdE1hcmtlcigpIHtcbiAgICAgIHJldHVybiBuZXcgTC5JY29uKHtcbiAgICAgICAgaWNvblVybDogXCIvaW1nL2RlZmF1bHQtbWFya2VyLnBuZ1wiLFxuICAgICAgICBpY29uQW5jaG9yOiBuZXcgTC5Qb2ludCgxNiwgMTYpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSxcbn0pO1xuPC9zY3JpcHQ+XG48c3R5bGU+XG4ud3JhcHBlciB7XG4gIG1heC13aWR0aDogNDAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8di1jb2wgdi1pZj1cImlzRWRpdFwiPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgIDwvdi1jb2w+XG4gICAgPHYtY29sIHYtZWxzZT5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlxuICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLWFjY291bnQ8L3YtaWNvbj5cbiAgICAgICAgICBOb21cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIj57eyB1c2VyLmZpcnN0bmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZVwiPnt7IHVzZXIubGFzdG5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlxuICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLW1haWw8L3YtaWNvbj5cbiAgICAgICAgICBFbWFpbFxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj57eyB1c2VyLmVtYWlsIH19PC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+XG4gICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm1yLTJcIj5tZGktcGhvbmU8L3YtaWNvbj5cbiAgICAgICAgICBUw6lsw6lwaG9uZVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj57eyB1c2VyLmFkZHJlc3MgPyB1c2VyLmFkZHJlc3MucGhvbmUgOiAnLSd9fTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlxuICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLW1hcC1tYXJrZXI8L3YtaWNvbj5cbiAgICAgICAgICBBZHJlc3NlXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiIHYtaWY9XCJ1c2VyLmFkZHJlc3NcIj5cbiAgICAgICAgICA8c3Bhbj57eyB1c2VyLmFkZHJlc3MuYWRkcmVzczEgfX0sIHt7IHVzZXIuYWRkcmVzcy5wb3N0Y29kZSB9fSB7eyB1c2VyLmFkZHJlc3MuY2l0eSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyB1c2VyLmFkZHJlc3MuY291bnRyeSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgdi1lbHNlPi08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5cbiAgICAgICAgICA8di1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwibXItMlwiPm1kaS1zaGllbGQ8L3YtaWNvbj5cbiAgICAgICAgICBQcm9maWwgdXRpbGlzYXRldXJcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+e3sgdXNlci5wcm9maWxlLm5hbWV9fTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICA8L3YtY29sPlxuICAgIDx2LXJvdyBuby1ndXR0ZXJzIDpqdXN0aWZ5PVwiJHZ1ZXRpZnkuYnJlYWtwb2ludC5tZEFuZFVwID8gJ2VuZCcgOiAnY2VudGVyJ1wiIHYtaWY9XCIhaXNFZGl0XCI+XG4gICAgICA8di1idG4gY29sb3I9XCJzZWNvbmRhcnlcIiB2LW9uOmNsaWNrPVwiaXNFZGl0ID0gIWlzRWRpdFwiPlxuICAgICAgICA8di1pY29uIGxlZnQ+bWRpLXBlbmNpbDwvdi1pY29uPlxuICAgICAgICBNb2RpZmllciBsZXMgaW5mb3JtYXRpb25zXG4gICAgICA8L3YtYnRuPlxuICAgIDwvdi1yb3c+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBsYW5nPVwidHNcIj5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogXCJ1c2VyLWVkaXQtZm9ybVwiLFxuICBwcm9wczogW1widXNlclwiXSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGVtaXR0ZXIub24oXCJ0b2dnbGUtdXNlci1pbmZvXCIsICgpID0+IHtcbiAgICAgIHRoaXMuaXNFZGl0ID0gIXRoaXMuaXNFZGl0O1xuICAgIH0pO1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRWRpdDogZmFsc2UsXG4gICAgfTtcbiAgfSxcbn0pO1xuXG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5sYWJlbCB7XG4gIHdpZHRoOiAyMDBweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGwtbWFwXG4gICAgICB2LWlmPVwic2hvd01hcFwiXG4gICAgICByZWY9XCJtYXBcIlxuICAgICAgOnpvb209XCJ6b29tXCJcbiAgICAgIDpjZW50ZXI9XCJjZW50ZXJcIlxuICAgICAgOm9wdGlvbnM9XCJvcHRpb25zXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzNTBweFwiXG4gICAgICBAdXBkYXRlOmNlbnRlcj1cImNlbnRlclVwZGF0ZVwiXG4gICAgICBAdXBkYXRlOnpvb209XCJ6b29tVXBkYXRlXCJcbiAgICA+XG4gICAgICA8bC10aWxlLWxheWVyXG4gICAgICAgIHYtZm9yPVwidGlsZVByb3ZpZGVyIGluIHRpbGVQcm92aWRlcnNcIlxuICAgICAgICA6a2V5PVwidGlsZVByb3ZpZGVyLm5hbWVcIlxuICAgICAgICA6bmFtZT1cInRpbGVQcm92aWRlci5uYW1lXCJcbiAgICAgICAgOnZpc2libGU9XCJ0aWxlUHJvdmlkZXIudmlzaWJsZVwiXG4gICAgICAgIDp1cmw9XCJ0aWxlUHJvdmlkZXIudXJsXCJcbiAgICAgICAgbGF5ZXItdHlwZT1cImJhc2VcIlxuICAgICAgPlxuICAgICAgPC9sLXRpbGUtbGF5ZXI+XG4gICAgICA8bC1mZWF0dXJlLWdyb3VwIHJlZj1cImZlYXR1cmVzXCI+PC9sLWZlYXR1cmUtZ3JvdXA+XG4gICAgPC9sLW1hcD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHR5cGU9XCJ0c1wiPlxuICBpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbiAgaW1wb3J0IEwgZnJvbSBcImxlYWZsZXRcIjtcbiAgaW1wb3J0IExEcmF3IGZyb20gXCJsZWFmbGV0LWRyYXdcIjtcbiAgaW1wb3J0IHsgTE1hcCwgTFRpbGVMYXllciwgTENvbnRyb2xMYXllcnMsIExDb250cm9sU2NhbGUsIExGZWF0dXJlR3JvdXAsIExJY29uLCBMTWFya2VyIH0gZnJvbSBcInZ1ZTItbGVhZmxldFwiO1xuXG4gIGV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICAgIG5hbWU6IFwibWFya2Vycy1vbi1tYXBcIixcbiAgICBwcm9wczogW1wibWFya2Vyc1wiLCBcImNlbnRlclwiLCBcInpvb21cIiwgXCJkcmFnZ2FibGVcIl0sXG4gICAgY29tcG9uZW50czogeyBMTWFwLCBMVGlsZUxheWVyLCBMQ29udHJvbExheWVycywgTENvbnRyb2xTY2FsZSwgTEZlYXR1cmVHcm91cCwgTEljb24sIExNYXJrZXIgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgY3VycmVudFpvb206IDExLjUsXG4gICAgICBjdXJyZW50Q2VudGVyOiBudWxsLFxuICAgICAgb3B0aW9uczogeyB6b29tU25hcDogMC41IH0sXG4gICAgICBtYXA6IG51bGwsXG4gICAgICB0aWxlUHJvdmlkZXJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJQbGFuIGNvdWxldXJcIiwgdmlzaWJsZTogdHJ1ZSwgdXJsOiBcImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIlBsYW4gbm9pciBldCBibGFuY1wiLCB2aXNpYmxlOiBmYWxzZSwgdXJsOiBcImh0dHBzOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL2J3LW1hcG5pay97en0ve3h9L3t5fS5wbmdcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiU2F0ZWxsaXRlXCIsIHZpc2libGU6IGZhbHNlLCB1cmw6IFwiaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9Xb3JsZF9JbWFnZXJ5L01hcFNlcnZlci90aWxlL3t6fS97eX0ve3h9XCIgfSxcbiAgICAgIF0sXG4gICAgICBkcmF3bkl0ZW1zOiBudWxsLFxuICAgICAgbGF5ZXJHcm91cE1hcmtlcnM6IG51bGwsXG4gICAgICBtYXJrZXJzTGlzdDogW10sXG4gICAgICBzaG93TWFwOiBmYWxzZVxuICAgIH0pLFxuICAgIHdhdGNoOiB7XG4gICAgICBtYXJrZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubWFya2Vyc0xpc3QgPSB0aGlzLm1hcmtlcnMgPyBbLi4udGhpcy5tYXJrZXJzXSA6IFtdO1xuICAgICAgICB0aGlzLmRyYXdNYXJrZXJzKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgYmVmb3JlTW91bnQoKSB7XG4gICAgICB0aGlzLm1hcmtlcnNMaXN0ID0gdGhpcy5tYXJrZXJzID8gWy4uLnRoaXMubWFya2Vyc10gOiBbXTtcblxuICAgICAgLy8gV2FpdGluZyBtYXAgaW5pdFxuICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNob3dNYXAgPSB0cnVlO1xuICAgICAgICBfdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIC8vIEluaXQgbGVhZmxldCBtYXBcbiAgICAgICAgICBfdGhpcy5pbml0TWFwKCk7XG4gICAgICAgICAgLy8gRHJhdyBtYXJrZXJzIGFuZCBkaXJlY3Rpb25cbiAgICAgICAgICBfdGhpcy5kcmF3TWFya2VycygpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB6b29tVXBkYXRlKHpvb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IHpvb207XG4gICAgICB9LFxuICAgICAgY2VudGVyVXBkYXRlKGNlbnRlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRDZW50ZXIgPSBjZW50ZXI7XG4gICAgICB9LFxuICAgICAgaW5pdE1hcCgpIHtcbiAgICAgICAgLy8gTWFwXG4gICAgICAgIHRoaXMubWFwID0gdGhpcy4kcmVmcy5tYXAubWFwT2JqZWN0O1xuICAgICAgICAvLyBJdGVtc1xuICAgICAgICB0aGlzLmRyYXduSXRlbXMgPSBMLmZlYXR1cmVHcm91cCgpO1xuICAgICAgICB0aGlzLmRyYXduSXRlbXMuYWRkVG8odGhpcy5tYXApO1xuICAgICAgfSxcbiAgICAgIGRyYXdNYXJrZXJzKCkge1xuICAgICAgICBsZXQgbWFya2Vyc0JvdW5kcyA9IFtdO1xuICAgICAgICAvLyBEZWxldGUgbGF5ZXIgdG8gY3JlYXRlIG5ldyBvbmVcbiAgICAgICAgaWYgKHRoaXMubGF5ZXJHcm91cE1hcmtlcnMpIHsgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLmxheWVyR3JvdXBNYXJrZXJzKTsgfVxuICAgICAgICAvLyBBZGQgbGF5ZXIgd2l0aCBzZWxlY3RlZCBwb2ludHNcbiAgICAgICAgdGhpcy5sYXllckdyb3VwTWFya2VycyA9IG5ldyBMLkxheWVyR3JvdXAoKTtcbiAgICAgICAgLy8gQWRkIG1hcmtlcnNcbiAgICAgICAgdGhpcy5tYXJrZXJzTGlzdC5tYXAoKG0pID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGF0TG5nOiBMLmxhdExuZyhtLmxhdGl0dWRlLCBtLmxvbmdpdHVkZSksXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9uczogeyB0aXRsZTogbS5uYW1lLCBkZXNjcmlwdGlvbjogbS5kZXNjcmlwdGlvbiwgaWQ6IG0uaWQsIHV1aWQ6IG0udXVpZCwgY29sb3I6IG0uY29sb3IgPyBtLmNvbG9yIDogJyMwMDAwMDAnIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSkuZm9yRWFjaCgobSwgaWR4KSA9PiB7XG4gICAgICAgICAgbGV0IG1hcmtlciA9IHRoaXMuY3JlYXRlTWFya2VyKGlkeCwgbSlcbiAgICAgICAgICBtYXJrZXIuYWRkVG8odGhpcy5sYXllckdyb3VwTWFya2Vycyk7XG4gICAgICAgICAgbWFya2Vyc0JvdW5kcy5wdXNoKG1hcmtlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFkZCB0byBtYXBcbiAgICAgICAgaWYgKHRoaXMubGF5ZXJHcm91cE1hcmtlcnMgJiYgdGhpcy5tYXApIHsgdGhpcy5sYXllckdyb3VwTWFya2Vycy5hZGRUbyh0aGlzLm1hcCk7IH1cblxuICAgICAgICB0aGlzLm1hcC5maXRCb3VuZHMoKG5ldyBMLmZlYXR1cmVHcm91cChtYXJrZXJzQm91bmRzKSkuZ2V0Qm91bmRzKCkpO1xuICAgICAgfSxcbiAgICAgIGdldERlZmF1bHRNYXJrZXIocG9zID0gJycsIGNvbG9yID0gJyMwMDQ0ODcnKSB7XG4gICAgICAgIHJldHVybiBMLmRpdkljb24oe1xuICAgICAgICAgIGljb25TaXplOiBudWxsLFxuICAgICAgICAgIGh0bWw6JzxkaXYgY2xhc3M9XCJtYXJrZXJcIj48c3BhbiBjbGFzcz1cIm1hcmtlci1jdXN0b21cIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICcgKyBjb2xvciArICdcIj48L3NwYW4+PC9kaXY+J1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBjcmVhdGVNYXJrZXIoaW5kZXgsIHdheXBvaW50KSB7XG4gICAgICAgIGxldCBtYXJrZXJPcHRpb25zID0ge1xuICAgICAgICAgIGljb246IHRoaXMuZ2V0RGVmYXVsdE1hcmtlcignJywgd2F5cG9pbnQub3B0aW9ucyAmJiB3YXlwb2ludC5vcHRpb25zLmNvbG9yID8gd2F5cG9pbnQub3B0aW9ucy5jb2xvciA6IG51bGwpLFxuICAgICAgICAgIGRyYWdnYWJsZTogdGhpcy5kcmFnZ2FibGUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFNldCBwb3NpdGlvblxuICAgICAgICBpZiAoIXdheXBvaW50Lm9wdGlvbnMpIHsgd2F5cG9pbnQub3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHdheXBvaW50Lm9wdGlvbnMucG9zaXRpb24gPSBpbmRleCArIDE7XG4gICAgICAgIC8vIE1hcmtlciB0aXRsZVxuICAgICAgICBpZiAod2F5cG9pbnQub3B0aW9ucyAmJiB3YXlwb2ludC5vcHRpb25zLnRpdGxlKSB7XG4gICAgICAgICAgbWFya2VyT3B0aW9ucy50aXRsZSA9IHdheXBvaW50Lm9wdGlvbnMudGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFya2VyIHV1aWRcbiAgICAgICAgaWYgKHdheXBvaW50Lm9wdGlvbnMgJiYgd2F5cG9pbnQub3B0aW9ucy51dWlkKSB7XG4gICAgICAgICAgbWFya2VyT3B0aW9ucy51dWlkID0gd2F5cG9pbnQub3B0aW9ucy51dWlkO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBtYXJrZXJcbiAgICAgICAgbGV0IG1hcmtlciA9IEwubWFya2VyKFxuICAgICAgICAgICAgW3dheXBvaW50LmxhdExuZy5sYXQsIHdheXBvaW50LmxhdExuZy5sbmddLFxuICAgICAgICAgICAgbWFya2VyT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyBNZXJrZXIgcG9wdXAgZGVzY1xuICAgICAgICBpZiAod2F5cG9pbnQub3B0aW9ucyAmJiB3YXlwb2ludC5vcHRpb25zLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgLy8gQ29udGVudCBvZiBwb3B1cDogaGVyZSB0aGUgc3RlcCBudW1iZXIgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgICAgbWFya2VyLmJpbmRQb3B1cCh3YXlwb2ludC5vcHRpb25zLnBvc2l0aW9uICsgJyAtICcgKyB3YXlwb2ludC5vcHRpb25zLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAvLyBEaXNwbGF5L2hpZGUgcG9wdXAgb24gbW91c2Ugb3Zlci9vdXRcbiAgICAgICAgICBtYXJrZXIub24oJ21vdXNlb3ZlcicsICgpID0+IHsgdGhpcy5vcGVuUG9wdXAoKTsgfSk7XG4gICAgICAgICAgbWFya2VyLm9uKCdtb3VzZW91dCcsICgpID0+IHsgdGhpcy5jbG9zZVBvcHVwKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSBtYXJrZXIgbG9jYXRpb25cbiAgICAgICAgbWFya2VyLm9uKCdkcmFnZW5kJywgKGUpID0+IHsgdGhpcy51cGRhdGVNYXJrZXJzKGUpOyB9KTtcblxuICAgICAgICByZXR1cm4gbWFya2VyO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZU1hcmtlcnMoZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQpIHtcbiAgICAgICAgICBsZXQgbWFya2VyID0gdGhpcy5tYXJrZXJzTGlzdC5maW5kKG0gPT4gZS50YXJnZXQub3B0aW9ucyAmJiBlLnRhcmdldC5vcHRpb25zLnV1aWQgPyAobS51dWlkID09PSBlLnRhcmdldC5vcHRpb25zLnV1aWQpIDogZmFsc2UpO1xuXG4gICAgICAgICAgaWYgKG1hcmtlciAmJiBlLnRhcmdldC5fbGF0bG5nKSB7XG4gICAgICAgICAgICBtYXJrZXIubGF0aXR1ZGUgPSBlLnRhcmdldC5fbGF0bG5nLmxhdDtcbiAgICAgICAgICAgIG1hcmtlci5sb25naXR1ZGUgPSBlLnRhcmdldC5fbGF0bG5nLmxuZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGVNYXJrZXJzJywgdGhpcy5tYXJrZXJzTGlzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4gIC8qIEhpZGUgbGVhZmxldCBpdGluZXJhcnkgKi9cbiAgZGl2LmxlYWZsZXQtdG9wLmxlYWZsZXQtcmlnaHQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICB9XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDx2LWNhcmQgZWxldmF0aW9uPVwiMlwiIHRpbGU+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycyBjbGFzcz1cInBhLTJcIiB2LWlmPVwiIWhpZGVGaWx0ZXJzXCI+XG4gICAgICAgIDxzbG90IG5hbWU9XCJmaWx0ZXJzXCIgOmZpbHRlcnMuc3luYz1cImZpbHRlcnNcIiA6dHJpZ2dlcj1cImZpbHRlckNoYW5nZVwiPjwvc2xvdD5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1kYXRhLXRhYmxlXG4gICAgICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiXG4gICAgICAgICAgOml0ZW1zPVwiZGF0YVwiXG4gICAgICAgICAgOm9wdGlvbnMuc3luYz1cIm9wdGlvbnNcIlxuICAgICAgICAgIDpzZXJ2ZXItaXRlbXMtbGVuZ3RoPVwiaXRlbUNvdW50XCJcbiAgICAgICAgICA6bG9hZGluZz1cImxvYWRpbmdcIlxuICAgICAgICAgIGxvYWRpbmctdGV4dD1cIkNoYXJnZW1lbnQuLi5cIlxuICAgICAgICAgIGNsYXNzPVwiZWxldmF0aW9uLTFcIlxuICAgICAgICAgIDppdGVtcy1wZXItcGFnZT1cIm5iSXRlbXNQZXJQYWdlXCJcbiAgICAgICAgICA6Zm9vdGVyLXByb3BzPVwieyAnaXRlbXMtcGVyLXBhZ2UtdGV4dCc6J0xpZ25lcyBwYXIgcGFnZScsICdpdGVtcy1wZXItcGFnZS1vcHRpb25zJzogWzEwLCAyMCwgMzAsIDUwLCAtMV0gfVwiXG4gICAgICAgICAgOml0ZW0tY2xhc3M9XCJpdGVtUm93QmFja2dyb3VuZFwiXG4gICAgICAgICAgOnNob3ctc2VsZWN0PVwiY2hlY2thYmxlXCJcbiAgICAgID5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLnRodW1iPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwidGh1bWJcIj5cbiAgICAgICAgICAgIDx2LWltZyA6c3JjPVwiaXRlbS50aHVtYlwiIGhlaWdodD1cIjUwcHhcIiB3aWR0aD1cIjUwcHhcIj48L3YtaW1nPlxuICAgICAgICAgIDwvc2xvdD5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uYWN0aW9ucz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtaWNvbiB2LWlmPVwiKChhY3Rpb24ubmFtZSA9PT0gJ3Jlc2V0JyAmJiAhaXRlbS5pc0FjdGl2ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uLm5hbWUgPT09ICdhcmNoaXZlJyAmJiAhaXRlbS5pc0FyY2hpdmVkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb24ubmFtZSAhPT0gJ3Jlc2V0JyAmJiBhY3Rpb24ubmFtZSAhPT0gJ2FyY2hpdmUnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIWFjdGlvbi5yaWdodHMgfHwgY2hlY2tSaWdodHMoYWN0aW9uLnJpZ2h0cykpXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljaz1cInJvdXRlKGl0ZW0sIGFjdGlvbi5uYW1lLCAoYWN0aW9uLnRhcmdldCA/IGFjdGlvbi50YXJnZXQgOiBudWxsKSwgYWN0aW9uLnVybCwgYWN0aW9uLnBhcmFtLCBhY3Rpb24uY29uZmlybSwgYWN0aW9uLmlzTm90aWZ5RGVsaXZlcnlTY2hlZHVsZSlcIlxuICAgICAgICAgICAgICAgICAgdi1mb3I9XCJhY3Rpb24gaW4gYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICA6a2V5PVwiYWN0aW9uLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgOmNvbG9yPVwiZ2V0Q29sb3IoYWN0aW9uLCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICA6dGl0bGU9XCJnZXRUaXRsZShhY3Rpb24sIGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImFjdGlvbi5pY29uXCI+XG4gICAgICAgICAgICAgIHt7IGFjdGlvbi5pY29uIH19XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZS1pZj1cImFjdGlvbi5pY29ucyAmJiBhY3Rpb24uaWNvbnMudHlwZSA9PT0gJ3Nob3dNYXBNYXJrZXInICYmIGl0ZW0uYWRkcmVzcyAmJiBpdGVtLmFkZHJlc3MubGF0aXR1ZGUgJiYgaXRlbS5hZGRyZXNzLmxvbmdpdHVkZVwiPlxuICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5pY29ucy53aXRoIH19XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZS1pZj1cImFjdGlvbi5pY29ucyAmJiBhY3Rpb24uaWNvbnMudHlwZSA9PT0gJ3Nob3dNYXBNYXJrZXInXCI+XG4gICAgICAgICAgICAgICAge3sgYWN0aW9uLmljb25zLndpdGhvdXQgfX1cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPC92LWljb24+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB0ZW1wbGF0ZXMgdG8gZm9ybWF0IGRhdGUgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5kYXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLmRhdGUgfCBkYXRlIH19XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5zdGFydFZhbGlkaXR5PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLnN0YXJ0VmFsaWRpdHkgfCBkYXRlIH19XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5lbmRWYWxpZGl0eT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAge3sgaXRlbS5lbmRWYWxpZGl0eSB8IGRhdGUgfX1cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmRlbGl2ZXJ5RGF0ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAge3sgaXRlbS5kZWxpdmVyeURhdGUgfCBkYXRlIH19XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5kYXRlV2l0aG91dEhvdXI9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIHt7IGl0ZW0uZGF0ZVdpdGhvdXRIb3VyIHwgZGF0ZSB9fVxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gdGVtcGxhdGUgdG8gZGlzcGxheSBhbGwgZGV0YWlscyBvcmRlcnMgaW4gc2NoZWR1bGUgbGlzdCAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmRldGFpbHM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxvbCBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweCFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJwdC0yXCI+XG4gICAgICAgICAgICA8ZHJhZ2dhYmxlIDpsaXN0PVwiaXRlbS5kZXRhaWxzXCIgOmdyb3VwPVwiJ2RlbGl2ZXJ5U2NoZWR1bGVPcmRlci0nICsgaXRlbS5pZFwiIEBjaGFuZ2U9XCJjaGFuZ2VPcmRlclBvc2l0aW9uKGl0ZW0pXCIgOmRpc2FibGVkPVwiIWNhbkRyYWdnYWJsZShpdGVtLmRldGFpbHMpXCI+XG4gICAgICAgICAgICAgIDxsaSB2LWZvcj1cImRldGFpbCBpbiBpdGVtLmRldGFpbHNcIiA6a2V5PVwiZGV0YWlsLmRlbGl2ZXJ5U2NoZWR1bGVJZFwiPlxuICAgICAgICAgICAgICAgIDx2LXJvdyB2LWlmPVwiZGV0YWlsLmlzQ29tbWVudFwiIGNsYXNzPVwicHJpbWFyeS0tdGV4dFwiIHN0eWxlPVwiZm9udC1zdHlsZTogaXRhbGljO1wiPlxuICAgICAgICAgICAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgICAgICAgICA8di1pY29uIGNvbG9yPVwicHJpbWFyeVwiIHNtYWxsIGNsYXNzPVwibXItMlwiPm1kaS1jb21tZW50LXRleHQtb3V0bGluZTwvdi1pY29uPnt7IGRldGFpbC50ZXh0IH19XG4gICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgPHYtcm93IHYtZWxzZSBuby1ndXR0ZXJzPlxuICAgICAgICAgICAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgICAgICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGRldGFpbC53YXJlaG91c2VDb2xvciA/IGRldGFpbC53YXJlaG91c2VDb2xvciA6ICcnLCAnd2lkdGgnOiAnNXB4JywgJ21hcmdpbi1yaWdodCc6ICc1cHgnfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZFwiPnt7IGRldGFpbC53YXJlaG91c2UgfX08L3NwYW4+IC1cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkZXRhaWwuY3VzdG9tZXIgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZFwiPnt7IGRldGFpbC5zaXRlIH19PC9zcGFuPiAtXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGV0YWlsLnByb2R1Y3QgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZFwiPnt7IGRldGFpbC5xdWFudGl0eSB9fTwvc3Bhbj4gLVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJkZXRhaWwuaG91cnNcIj4ge3sgZGV0YWlsLmhvdXJzIH19IC0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwiJy9hcHAvb3JkZXItaXRlbXMvc2hvdy8nICsgZGV0YWlsLm9yZGVyVXVpZCBcIiB0YXJnZXQ9XCJfYmxhbmtcIj5DZGUuIHt7IGRldGFpbC5vcmRlck51bWJlciB9fSA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImRldGFpbC5uYl9zY2hlZHVsZXMgJiYgZGV0YWlsLm5iX3NjaGVkdWxlcyA+IDFcIiBjbGFzcz1cImZvbnQtaXRhbGljXCIgOnRpdGxlPVwiZGV0YWlsLm5iX3NjaGVkdWxlcyArICcgdG91cm7DqWVzJ1wiPiZuYnNwOygqIHt7IGRldGFpbC5uYl9zY2hlZHVsZXMgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgIDx2LWNvbCBzbT1cIjFcIiBjbGFzcz1cInBhLTAgdGV4dC1jZW50ZXIgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8di1yb3cgbm8tZ3V0dGVycyBjbGFzcz1cIm1hLTAgcGEtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjbGFzcz1cIm1hLTAgcGEtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtY2hlY2tib3ggOmRpc2FibGVkPVwiZGV0YWlsLmRpc2FibGVkIHx8ICFjaGVja1JpZ2h0cyhkZXRhaWwucmlnaHRzICsgJyxwbGFuaWZpZWQ6ZGVsaXZlcnktc2NoZWR1bGUnKVwiIGNsYXNzPVwicGEtMCBtYS0wXCIgaGlkZS1kZXRhaWxzIHNtYWxsIHRpdGxlPVwiUsOpYWxpc8OpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9XCJjaGFuZ2VSZWFsaXNlZE9yZGVyKGRldGFpbCwgaXRlbSlcIiB2LW1vZGVsPVwiZGV0YWlsLmlzX3JlYWxpc2VkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3YtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiY2hlY2tSaWdodHMoZGV0YWlsLnJpZ2h0cylcIiBAY2xpY2s9XCIkZW1pdHRlci5lbWl0KCdvcGVuLW1vZGFsLXRyYW5zZmVyLWRzbycsIHsgZGV0YWlsOiBkZXRhaWwsIGRlbGl2ZXJ5U2NoZWR1bGU6IGl0ZW0gfSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSw6lhZmZlY3RlciBsZSB0b3VyXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiA6Y29sb3I9XCIhY2hlY2tSaWdodHMoZGV0YWlsLnJpZ2h0cykgPyAnJyA6ICdwcmltYXJ5J1wiPm1kaS1mb2xkZXItYXJyb3ctdXAtZG93bi1vdXRsaW5lPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICA8di1kaXZpZGVyPjwvdi1kaXZpZGVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC9kcmFnZ2FibGU+XG4gICAgICAgICAgPC9vbD5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIFBhcnNpbmcgY2hhcnRlZCB0byBzdHJpbmcgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5pc19jaGFydGVkPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLmlzX2NoYXJ0ZWQgPyAnT3VpJyA6ICdOb24nIH19XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB0ZW1wbGF0ZSB0byBkaXNwbGF5IHRydWNrIGRldGFpbHMgZm9yIHBsYW5uaW5nIEorMSByZXN1bWUgdmlldy0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0udHJ1Y2tEZXRhaWxzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwidHJ1Y2tEZXRhaWwgaW4gaXRlbS50cnVja0RldGFpbHNcIiA6a2V5PVwidHJ1Y2tEZXRhaWwuZGVsaXZlcnlTY2hlZHVsZUlkXCIgdi1pZj1cInRydWNrRGV0YWlsICYmIHRydWNrRGV0YWlsICE9PSAnJ1wiPlxuICAgICAgICAgICAgICB7eyB0cnVja0RldGFpbCB9fTxicj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJpdGVtLmRyaXZlciAmJiBpdGVtLmRyaXZlci5waG9uZVwiPlxuICAgICAgICAgICAgICB7eyBpdGVtLmRyaXZlci5waG9uZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gdGVtcGxhdGUgdG8gZGlzcGxheSBjb3N0cyBmb3IgcGxhbm5pbmcgSisxIHJlc3VtZSB2aWV3LS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5jb3N0cz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIiB2LWlmPVwiaXRlbS5jb3N0cyAmJiBpdGVtLmNvc3RzLmtpbG9tZXRlcnNcIj57eyBpdGVtLmNvc3RzLmtpbG9tZXRlcnMgfX0gS208L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHYtaWY9XCJpdGVtLmNvc3RzICYmIGl0ZW0uY29zdHMucHJpY2VcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgdGV4dC1yaWdodFwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImAke2l0ZW0uY29zdHMucHVBdENvbG9yfS0tdGV4dGBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGl0ZW0uY29zdHMucHJpY2UgfX0g4oKsXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB0ZW1wbGF0ZSB0byBkaXNwbGF5IHRvdXJzIGZvciBwbGFubmluZyBKKzEgcmVzdW1lIHZpZXctLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLnRvdXJzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdXJzUXR5XCI+e3sgaXRlbS50b3Vycy5sZW5ndGggLyAyIH19IFRvdXJzPC9zcGFuPjxicj5cbiAgICAgICAgICA8c3BhbiB2LWZvcj1cIih0b3VyLCBpbmRleCkgaW4gaXRlbS50b3Vyc1wiIDprZXk9XCJ0b3VyLmRlbGl2ZXJ5U2NoZWR1bGVJZFwiPlxuICAgICAgICAgICAgICA8c3BhbiA6c3R5bGU9XCJ7Y29sb3I6IGNvbG9yV2FyZWhvdXNlKHRvdXIpfVwiPnt7IHRvdXIgfX08L3NwYW4+PHNwYW4gdi1pZj1cImluZGV4IDwgaXRlbS50b3Vycy5sZW5ndGggLSAxXCI+IC0+IDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB0ZW1wbGF0ZSB0byBkaXNwbGF5IEorMS0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0udG91cnNDdXN0b21zPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8c3BhbiB2LWZvcj1cIihkYXRhLCBpbmRleCkgaW4gaXRlbS50b3Vyc0N1c3RvbXNcIiA6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJkYXRhLmlzQ29tbWVudCAmJiBmaWx0ZXJzLndpdGhfY29tbWVudHNcIiBjbGFzcz1cInByaW1hcnktLXRleHRcIiBzdHlsZT1cImZvbnQtc3R5bGU6IGl0YWxpYztcIiA6dGl0bGU9XCJkYXRhLnRleHRcIj5cbiAgICAgICAgICAgICA8di1pY29uIGNvbG9yPVwicHJpbWFyeVwiIHNtYWxsIGNsYXNzPVwibXItMlwiPm1kaS1jb21tZW50LXRleHQtb3V0bGluZTwvdi1pY29uPnt7IGRhdGEudGV4dCB8IGxpbWl0U3RyaW5nKDQwKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gIHYtaWY9XCIhZGF0YS5pc0NvbW1lbnRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImRhdGEubnVtXCI+e3sgZGF0YS5udW0gfX0uIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImRhdGEuY29sb3JcIiA6c3R5bGU9XCJ7J2JhY2tncm91bmQtY29sb3InOiBkYXRhLmNvbG9yLCAnd2lkdGgnOiAnNXB4JywgJ21hcmdpbi1yaWdodCc6ICc1cHgnfVwiPiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZGF0YS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiaW5kZXggJSAyID09PSAwXCI+PHYtaWNvbiBzbWFsbCBjbGFzcz1cInBiLTEgcHJpbWFyeS0tY2xhc3NcIj5tZGktYXJyb3ctcmlnaHQ8L3YtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZGF0YS5xdWFudGl0eVwiPiAoe3sgZGF0YS5xdWFudGl0eSB9fSBUKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiIWRhdGEucmVhbGlzZWRcIiBjbGFzcz1cInJlZC0tdGV4dCBmb250LWl0YWxpY1wiIHRpdGxlPVwiVG91ciBub24gcsOpYWxpc8OpXCI+IChOUik8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImRhdGEubmJTY2hlZHVsZXMgJiYgZGF0YS5uYlNjaGVkdWxlcyA+IDFcIiBjbGFzcz1cImZvbnQtaXRhbGljXCIgOnRpdGxlPVwiZGF0YS5uYlNjaGVkdWxlcyArICcgdG91cm7DqWVzJ1wiPiAoKiB7eyBkYXRhLm5iU2NoZWR1bGVzIH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5jdXN0b21lckxpc3Q9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxvbCBjbGFzcz1cInBsLTBcIj5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cImN1c3RvbWVyIGluIGl0ZW0uY3VzdG9tZXJMaXN0XCIgPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiY3VzdG9tZXIgJiYgIWN1c3RvbWVyLmlzTWVzc2FnZVwiIDpzdHlsZT1cIidjb2xvcjonICsgKGN1c3RvbWVyLm5hbWUgPT09ICctJyA/ICd0cmFuc3BhcmVudCcgOiAnJylcIiA6dGl0bGU9XCJjdXN0b21lci5uYW1lXCI+XG4gICAgICAgICAgICAgICAge3sgY3VzdG9tZXIubnVtIH19LiB7eyBjdXN0b21lci5uYW1lIHwgbGltaXRTdHJpbmcgfX1cbiAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJyIHYtZWxzZT5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPC9vbD5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLnByb2R1Y3RzTGlzdD1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPG9sIGNsYXNzPVwicGwtMFwiPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwicHJvZHVjdCBpbiBpdGVtLnByb2R1Y3RzTGlzdFwiPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwicHJvZHVjdCAmJiAhcHJvZHVjdC5pc01lc3NhZ2VcIiA6c3R5bGU9XCInY29sb3I6JyArIChwcm9kdWN0Lm5hbWUgPT09ICctJyA/ICd0cmFuc3BhcmVudCcgOiAnJylcIiA6dGl0bGU9XCJwcm9kdWN0Lm5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBwcm9kdWN0Lm51bSB9fS4ge3sgcHJvZHVjdC5uYW1lIHwgbGltaXRTdHJpbmcgfX1cbiAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJyIHYtZWxzZT5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPC9vbD5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmhvdXJzTGlzdD1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPG9sIGNsYXNzPVwicGwtMFwiPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiaG91ciBpbiBpdGVtLmhvdXJzTGlzdFwiPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiaG91ciAmJiAhaG91ci5pc01lc3NhZ2VcIiA6c3R5bGU9XCInY29sb3I6JyArIChob3VyLm5hbWUgPT09ICctJyA/ICd0cmFuc3BhcmVudCcgOiAnJylcIiA6dGl0bGU9XCJob3VyLm51bSArICcuICcgKyBob3VyLm5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBob3VyLm51bSB9fS4ge3sgaG91ci5uYW1lIHwgbGltaXRTdHJpbmcoMTIpIH19XG4gICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxiciB2LWVsc2U+XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIDwvb2w+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5kZWxpdmVyeVRpbWVzQW5kTW9tZW50cz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAge3sgZ2V0RGVsaXZlcnlUaW1lc0FuZE1vbWVudHMoaXRlbSkgfX1cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIGNvbG9ycyAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmNvbG9yPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8di1pY29uIDpjb2xvcj1cIml0ZW0uY29sb3JcIj5tZGktcGFsZXR0ZTwvdi1pY29uPlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gU2l0ZSBuYW1lIGFkZHJlc3MgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5zaXRlLm5hbWVBZGRyZXNzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGRcIj57eyBpdGVtLnNpdGUgPyBpdGVtLnNpdGUubmFtZSA6ICcnIH19PC9zcGFuPjxicj5cbiAgICAgICAgICB7eyBpdGVtLnNpdGUgJiYgaXRlbS5zaXRlLmFkZHJlc3MgPyBpdGVtLnNpdGUuYWRkcmVzcy5hZGRyZXNzMSArICcsICcgKyBpdGVtLnNpdGUuYWRkcmVzcy5wb3N0Y29kZSArICcgJyArIGl0ZW0uc2l0ZS5hZGRyZXNzLmNpdHkgOiAnJyB9fVxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gYWN0aXZlIC0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uaXNBY3RpdmU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWljb24gOmNvbG9yPVwiaXRlbS5pc0FjdGl2ZSA/ICdwcmltYXJ5JyA6ICdlcnJvcidcIj57eyBpdGVtLmlzQWN0aXZlID8gXCJtZGktY2hlY2tcIiA6IFwibWRpLWNsb3NlXCIgfX08L3YtaWNvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmlzV3JpdGVyPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8di1pY29uIDpjb2xvcj1cIml0ZW0uaXNXcml0ZXIgPyAncHJpbWFyeScgOiAnZXJyb3InXCI+e3sgaXRlbS5pc1dyaXRlciA/IFwibWRpLWNoZWNrXCIgOiBcIm1kaS1jbG9zZVwiIH19PC92LWljb24+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5pc19hY3RpdmU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWljb24gOmNvbG9yPVwiaXRlbS5pc19hY3RpdmUgPyAncHJpbWFyeScgOiAnZXJyb3InXCI+e3sgaXRlbS5pc19hY3RpdmUgPyBcIm1kaS1jaGVja1wiIDogXCJtZGktY2xvc2VcIiB9fTwvdi1pY29uPlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gV2FyZWhvdXNlIGNvbG9yIG5hbWUgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5xdWFycnkuY29sb3JOYW1lPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8ZGl2IHYtaWY9XCJpdGVtLnF1YXJyeSAmJiBpdGVtLnF1YXJyeS5jb2xvck5hbWVcIj5cbiAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgPGRpdiA6c3R5bGU9XCJ7J2JhY2tncm91bmQtY29sb3InOiBpdGVtLnF1YXJyeS5jb2xvck5hbWUuY29sb3IsICd3aWR0aCc6ICc1cHgnLCAnbWFyZ2luLXJpZ2h0JzogJzVweCd9XCI+PC9kaXY+XG4gICAgICAgICAgICAgIHt7IGl0ZW0ucXVhcnJ5LnNob3J0X25hbWUgfX1cbiAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS53YXJlaG91c2UuY29sb3JOYW1lPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8ZGl2IHYtaWY9XCJpdGVtLndhcmVob3VzZSAmJiBpdGVtLndhcmVob3VzZS5jb2xvck5hbWVcIj5cbiAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgPGRpdiA6c3R5bGU9XCJ7J2JhY2tncm91bmQtY29sb3InOiBpdGVtLndhcmVob3VzZS5jb2xvck5hbWUuY29sb3IsICd3aWR0aCc6ICc1cHgnLCAnbWFyZ2luLXJpZ2h0JzogJzVweCd9XCI+PC9kaXY+XG4gICAgICAgICAgICAgIHt7IGl0ZW0ud2FyZWhvdXNlLnNob3J0X25hbWUgfX1cbiAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8ZGl2IHYtaWY9XCJpdGVtLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnMgJiYgaXRlbS5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgQGNsaWNrPVwib3BlbkRldGFpbChpdGVtKVwiIDpjbGFzcz1cImdldENsYXNzUXR5Q29sb3IoaXRlbSlcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzLnJlZHVjZSgoc3VtLCB2YWx1ZSkgPT4gc3VtICs9ICh2YWx1ZS5pc19yZWFsaXNlZCA/IHZhbHVlLmRlbGl2ZXJ5X3F1YW50aXR5IDogMCksIDApIH19L3t7IGl0ZW0ucXVhbnRpdHlPcmRlcmVkIH19Jm5ic3A7VFxuICAgICAgICAgICAgICA8di1pY29uIHYtaWY9XCIhJHJpZ2h0cy5oYXNQcm9maWxlKCdiYXNjdWxlJylcIiBjbGFzcz1cIm1sLTFcIiA6aWQ9XCInYXJyb3dfJyArIGl0ZW0udXVpZFwiPm1kaS1jaGV2cm9uLWRvd248L3YtaWNvbj5cbiAgICAgICAgICAgICAgPHYtaWNvbiB2LWVsc2UgY2xhc3M9XCJtbC0xXCIgOmlkPVwiJ2Fycm93XycgKyBpdGVtLnV1aWRcIj5tZGktY2hldnJvbi11cDwvdi1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IDppZD1cIidkZXRhaWxfJyArIGl0ZW0udXVpZFwiIDpjbGFzcz1cIiRyaWdodHMuaGFzUHJvZmlsZSgnYmFzY3VsZScpID8gJycgOiAnZC1ub25lJ1wiPlxuICAgICAgICAgICAgICA8b2w+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiZGVsaXZlcnlzY2hlZHVsZW9yZGVyIGluIGl0ZW0uZGVsaXZlcnlTY2hlZHVsZU9yZGVyc1wiPlxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1uby13cmFwXCIgdi1pZj1cIiFkZWxpdmVyeXNjaGVkdWxlb3JkZXIuZGVsaXZlcnlfc2NoZWR1bGUuaXNDaGFydGVkICYmIGRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5kZWxpdmVyeV9zY2hlZHVsZS50cnVja1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiIWRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5pc19yZWFsaXNlZFwiIGNsYXNzPVwicmVkLS10ZXh0IGZvbnQtaXRhbGljXCIgdGl0bGU9XCJUb3VyIG5vbiByw6lhbGlzw6lcIj4oTlIpIC0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7eyBkZWxpdmVyeXNjaGVkdWxlb3JkZXIuZGVsaXZlcnlfc2NoZWR1bGUudHJ1Y2subnVtYmVycGxhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgKHt7IGRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5kZWxpdmVyeV9xdWFudGl0eSB9fVQpPGJyIC8+e3sgZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmRlbGl2ZXJ5X3NjaGVkdWxlLnRydWNrLnRyYW5zcG9ydGVyLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgdi1lbHNlLWlmPVwiZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmRlbGl2ZXJ5X3NjaGVkdWxlLmlzQ2hhcnRlZCAmJiBkZWxpdmVyeXNjaGVkdWxlb3JkZXIuZGVsaXZlcnlfc2NoZWR1bGUudHJhbnNwb3J0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cIiFkZWxpdmVyeXNjaGVkdWxlb3JkZXIuaXNfcmVhbGlzZWRcIiBjbGFzcz1cInJlZC0tdGV4dCBmb250LWl0YWxpY1wiIHRpdGxlPVwiVG91ciBub24gcsOpYWxpc8OpXCI+KE5SKSAtIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3sgZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmRlbGl2ZXJ5X3NjaGVkdWxlLnRyYW5zcG9ydGVyLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgKHt7IGRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5kZWxpdmVyeV9xdWFudGl0eSB9fVQpXG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpIHYtZWxzZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cIiFkZWxpdmVyeXNjaGVkdWxlb3JkZXIuaXNfcmVhbGlzZWRcIiBjbGFzcz1cInJlZC0tdGV4dCBmb250LWl0YWxpY1wiIHRpdGxlPVwiVG91ciBub24gcsOpYWxpc8OpXCI+KE5SKSAtIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKHt7IGRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5kZWxpdmVyeV9xdWFudGl0eSB9fVQpXG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHYtZWxzZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWQtLXRleHRcIj4wL3t7IGl0ZW0ucXVhbnRpdHlPcmRlcmVkIH19Jm5ic3A7VDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uZGVsaXZlcnlTY2hlZHVsZU9yZGVyc1RpbWVzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8ZGl2IHYtaWY9XCJnZXRUaW1lc1RpdGxlKGl0ZW0pICE9PSAnJ1wiPlxuICAgICAgICAgICAgPHYtdG9vbHRpcCBsZWZ0IGNvbG9yPVwiYmxhY2tcIj5cbiAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphY3RpdmF0b3I9XCJ7IG9uLCBhdHRycyB9XCI+XG4gICAgICAgICAgICAgICAgPHYtaWNvbiB2LWJpbmQ9XCJhdHRyc1wiIHYtb249XCJvblwiIHN0eWxlPVwiY3Vyc29yOiBoZWxwO1wiPm1kaS1jbG9jay1vdXRsaW5lPC92LWljb24+XG4gICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxwcmU+e3sgZ2V0VGltZXNUaXRsZShpdGVtKSB9fTwvcHJlPlxuICAgICAgICAgICAgPC92LXRvb2x0aXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBVc2VyIGluZm8gYXJyYXkgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5kcml2ZXIudXNlckluZm9zQXJyYXk9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiaXRlbS5kcml2ZXIgJiYgaXRlbS5kcml2ZXIudXNlckluZm9zQXJyYXlcIj5cbiAgICAgICAgICAgIDxkaXY+e3sgaXRlbS5kcml2ZXIudXNlckluZm9zQXJyYXkuZmlyc3RuYW1lIH19Jm5ic3A7e3sgaXRlbS5kcml2ZXIudXNlckluZm9zQXJyYXkubGFzdG5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+e3sgaXRlbS5kcml2ZXIudXNlckluZm9zQXJyYXkucGhvbmUgfX08L2Rpdj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gQ3VzdG9tZXIgY29kZSBuYW1lIGZvciBCYXNjdWxlIC0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uY3VzdG9tZXIubmFtZUNvZGU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiaXRlbS5jdXN0b21lclwiPlxuICAgICAgICAgICAgPGRpdj57eyBpdGVtLmN1c3RvbWVyLm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIiRyaWdodHMuaGFzUHJvZmlsZSgnYmFzY3VsZScpXCIgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkXCI+IC0ge3sgaXRlbS5jdXN0b21lci5jb2RlIH19PC9kaXY+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIENyZWF0b3IgaW5pdGlhbHMgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5jcmVhdG9yLmZ1bGxuYW1lPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8c3BhbiB2LWlmPVwiaXRlbS5jcmVhdG9yICYmIGl0ZW0uY3JlYXRvci5pbml0aWFsc1wiIDp0aXRsZT1cIml0ZW0uY3JlYXRvci5mdWxsbmFtZVwiPnt7IGl0ZW0uY3JlYXRvci5pbml0aWFscyB9fTwvc3Bhbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIEluZXJ0IC0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uaXNJbmVydD1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtaWNvbiB2LWlmPVwiaXRlbS5pc0luZXJ0XCIgY29sb3I9XCJwcmltYXJ5XCI+bWRpLWNoZWNrPC92LWljb24+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLnNpdGUuaG91cnNTdHI9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LXRvb2x0aXAgbGVmdCBjb2xvcj1cImJsYWNrXCIgdi1pZj1cIml0ZW0uc2l0ZS5ob3Vyc1N0ciAhPT0gJydcIj5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YWN0aXZhdG9yPVwieyBvbiwgYXR0cnMgfVwiPlxuICAgICAgICAgICAgICA8di1pY29uIHYtYmluZD1cImF0dHJzXCIgdi1vbj1cIm9uXCIgc3R5bGU9XCJjdXJzb3I6IGhlbHA7XCI+bWRpLWNsb2NrLW91dGxpbmU8L3YtaWNvbj5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8cHJlPnt7IGl0ZW0uc2l0ZS5ob3Vyc1N0ciB9fTwvcHJlPlxuICAgICAgICAgIDwvdi10b29sdGlwPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC92LWRhdGEtdGFibGU+XG4gICAgPC92LWNhcmQ+XG4gICAgPG1vZGFsIHYtbW9kZWw6dmFsdWU9XCJkZWxldGVNb2RhbElzT3BlblwiIGNvbmZpcm09XCJDb25maXJtZXJcIiBjYW5jZWw9XCJBbm51bGVyXCIgdGl0bGU9XCJDb25maW1lciBsYSBzdXBwcmVzc2lvblwiXG4gICAgICAgICAgIEBjb25maXJtPVwiZGVsZXRlT2JqZWN0KGN1cnJlbnRJdGVtKVwiIEBjYW5jZWw9XCJkZWxldGVNb2RhbElzT3BlbiA9IGZhbHNlXCIgd2lkdGg9XCI0MCVcIj5cbiAgICAgIDxkaXYgdi1pZj1cImN1cnJlbnRJdGVtXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInRleHQtY2VudGVyIHBhLTYgbWEtMCBmb250LXdlaWdodC1yZWd1bGFyXCI+w4p0ZXMtdm91cyBzw7tyIGRlIHZvdWxvaXIgc3VwcHJpbWVyIDoge3sgY3VycmVudEl0ZW0ubmFtZSB9fSA/PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPHYtcm93IHYtZWxzZSBuby1ndXR0ZXJzIGp1c3RpZnk9XCJjZW50ZXJcIj5cbiAgICAgICAgPHYtcHJvZ3Jlc3MtY2lyY3VsYXIgaW5kZXRlcm1pbmF0ZSBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInBhLTMgbWEtNlwiPjwvdi1wcm9ncmVzcy1jaXJjdWxhcj5cbiAgICAgIDwvdi1yb3c+XG4gICAgPC9tb2RhbD5cbiAgICA8IS0tIENvbmZpcm0gbW9kYWwgLS0+XG4gICAgPG1vZGFsIDp2YWx1ZT1cImNvbmZpcm0ub3BlblwiIGNvbmZpcm09XCJDb25maXJtZXJcIiBjYW5jZWw9XCJBbm51bGVyXCIgOnRpdGxlPVwiY29uZmlybS50aXRsZVwiXG4gICAgICAgICAgIEBjb25maXJtPVwic3VibWl0Q29uZmlybShjb25maXJtKVwiIEBjYW5jZWw9XCJjb25maXJtLm9wZW4gPSBmYWxzZVwiIHdpZHRoPVwiMzAlXCI+XG4gICAgICA8ZGl2IHYtaWY9XCIhY29uZmlybS5sb2FkXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInRleHQtY2VudGVyIHBhLTYgbWEtMCBmb250LXdlaWdodC1yZWd1bGFyXCI+e3sgY29uZmlybS5tZXNzYWdlIH19PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPHYtcm93IHYtZWxzZSBuby1ndXR0ZXJzIGp1c3RpZnk9XCJjZW50ZXJcIj5cbiAgICAgICAgPHYtcHJvZ3Jlc3MtY2lyY3VsYXIgaW5kZXRlcm1pbmF0ZSBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInBhLTMgbWEtNlwiPjwvdi1wcm9ncmVzcy1jaXJjdWxhcj5cbiAgICAgIDwvdi1yb3c+XG4gICAgPC9tb2RhbD5cbiAgICA8IS0tIE5vdGlmeSBtb2RhbCAtLT5cbiAgICA8c2VuZC1kcml2ZXItbW9kYWwgOmlzLW9wZW4uc3luYz1cIm5vdGlmeU1vZGFsLm9wZW5cIiA6aXRlbS5zeW5jPVwibm90aWZ5TW9kYWwuaXRlbVwiIDpyb3V0ZT1cIm5vdGlmeU1vZGFsLnJvdXRlXCI+PC9zZW5kLWRyaXZlci1tb2RhbD5cblxuICAgIDxhbGVydCB2LWlmPVwiYWxlcnQubWVzc2FnZVwiIDptZXNzYWdlPVwiYWxlcnQubWVzc2FnZVwiIDp0eXBlPVwiYWxlcnQudHlwZVwiIDprZXk9XCJhbGVydC5rZXlcIj48L2FsZXJ0PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgdHlwZT1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IGRyYWdnYWJsZSBmcm9tIFwidnVlZHJhZ2dhYmxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcImFwaS1kYXRhLXRhYmxlXCIsXG4gIHByb3BzOiBbXCJyZXNvdXJjZVwiLCBcImhlYWRlcnNcIiwgXCJhY3Rpb25zXCIsIFwiaGlkZUZpbHRlcnNcIiwgXCJ2YWx1ZXNcIiwgXCJkZWZhdWx0RmlsdGVyc1wiLCBcInJlbG9hZFwiLCBcInRhYmxlRmlsdGVyc1wiLCBcImNoZWNrYWJsZVwiLCBcIm5iSXRlbXNcIl0sXG4gIGNvbXBvbmVudHM6IHtkcmFnZ2FibGV9LFxuICBkYXRhOiBmdW5jdGlvbiAoX3RoaXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogW10sXG4gICAgICBuYkl0ZW1zUGVyUGFnZTogX3RoaXMubmJJdGVtcyA/PyAzMCxcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBvcHRpb25zOiB7fSxcbiAgICAgIGl0ZW1Db3VudDogMCxcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgZGVsZXRlTW9kYWxJc09wZW46IGZhbHNlLFxuICAgICAgY3VycmVudEl0ZW06IG51bGwsIC8vIEN1cnJlbnQgc2VsZWN0ZWQgaXRlbS5cbiAgICAgIHdhcmVob3VzZUNvbG9yczoge1xuICAgICAgICAnRDY3QSc6ICcjNjZmZjAwJyxcbiAgICAgICAgJ0Q2OEEnOiAnIzg4OTlkZCcsXG4gICAgICAgICdENjRBJzogJyNmZmNjY2MnLFxuICAgICAgICAnVFJBS00nOiAnI2ZmZmZmZicsXG4gICAgICAgICdENzJBJzogJyNmMGViZTQnLFxuICAgICAgICAnRDY2QSc6ICcjZmY5OTAwJyxcbiAgICAgICAgJ0Q3M0EnOiAnIzAwZmZmZicsXG4gICAgICAgICdENjNBJzogJyNmZjAwMDAnLFxuICAgICAgICAnRDY1QSc6ICcjNjZjYzMzJyxcbiAgICAgICAgJ05FR0RJJzogJyNmZmZmZmYnLFxuICAgICAgICAnRDcwRCc6ICcjZmYzMzk5JyxcbiAgICAgICAgJ0Q2OUEnOiAnI2ZmZmYwMCcsXG4gICAgICAgICdENzBDJzogJyNmZjY2ZmYnLFxuICAgICAgICAnRDcwQSc6ICcjZmY5OTMzJyxcbiAgICAgIH0sXG4gICAgICBhcHBseURlZmF1bHRGaWx0ZXJzOiB0cnVlLFxuICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgYWxlcnQ6IHtcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgdHlwZTogJycsXG4gICAgICAgIGtleTogMFxuICAgICAgfSxcbiAgICAgIGNvbmZpcm06IHsgb3BlbjogZmFsc2UsIG1lc3NhZ2U6IG51bGwsIHRpdGxlOiBudWxsLCBjb2xvcjogbnVsbCwgaWNvbjogbnVsbCwgdGFyZ2V0OiBudWxsLCByb3V0ZTogbnVsbCwgbG9hZDogZmFsc2UgfSxcbiAgICAgIG5vdGlmeU1vZGFsOiB7IG9wZW46IGZhbHNlLCBpdGVtOiBudWxsLCByb3V0ZTogbnVsbCB9LFxuICAgICAgY2hlY2tlZDogW11cbiAgICB9O1xuICB9LFxuICBmaWx0ZXJzOiB7XG4gICAgZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICByZXR1cm4gdmFsdWUgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnREQvTU0vWVknKSA6IHZhbHVlO1xuICAgIH0sXG4gICAgbGltaXRTdHJpbmcoc3RyLCBuID0gMzApIHtcbiAgICAgIHJldHVybiAoc3RyICYmIHN0ci5sZW5ndGggPiBuKSA/IHN0ci5zbGljZSgwLCBuLTEpICsgJy4uLicgOiBzdHI7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHJlbG9hZCgpIHtcbiAgICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgfSxcbiAgICBjaGVja2VkOiB7XG4gICAgICBoYW5kbGVyKCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6Y2hlY2tlZCcsIHRoaXMuY2hlY2tlZCk7XG4gICAgICB9LFxuICAgICAgZGVlcDogdHJ1ZSxcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgIC8vIEFwcGx5IGRlZmF1bHQgZmlsdGVyc1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0RmlsdGVycyAmJiB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRlZmF1bHRGaWx0ZXJzKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnb3JkZXInKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gdGhpcy5kZWZhdWx0RmlsdGVyc1trZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNvcnRCeS5wdXNoKHByb3ApO1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zb3J0RGVzYy5wdXNoKHRoaXMuZGVmYXVsdEZpbHRlcnNba2V5XVtwcm9wXSA9PT0gJ2Rlc2MnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRGaWx0ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzW2tleV0gPSB0aGlzLmRlZmF1bHRGaWx0ZXJzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCBudWxsIGRlZmF1bHQgZmlsdGVycyB3aGVuIGFscmVhZHkgdXNlZFxuICAgICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgICB9LFxuICAgICAgZGVlcDogdHJ1ZSxcbiAgICB9LFxuICAgICdub3RpZnlNb2RhbC5pdGVtLmlzTm90aWZ5JyhzZW5kZWQpIHtcbiAgICAgIGlmICghdGhpcy5ub3RpZnlNb2RhbC5vcGVuTW9kYWwgJiYgc2VuZGVkKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZmlsdGVyQ2hhbmdlKCkge1xuICAgICAgLy8gSW5pdCBwYWdlIHRvIDEsIHRvIGdldCByZXN1bHRzXG4gICAgICB0aGlzLm9wdGlvbnMucGFnZSA9IDE7XG4gICAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIH0sXG4gICAgYXN5bmMgZmV0Y2hEYXRhKCkge1xuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnZhbHVlcycsIG51bGwpO1xuICAgICAgY29uc3QgcGFyYW1zID0geyBvcmRlcjoge30gfTtcbiAgICAgIGNvbnN0IHsgc29ydEJ5LCBzb3J0RGVzYywgcGFnZSwgaXRlbXNQZXJQYWdlIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIC8vIFNvcnRcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydEJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBrZXkgPSBzb3J0QnlbaV07XG4gICAgICAgIC8vIEN1c3RvbSByb3dzXG4gICAgICAgIGlmIChzb3J0QnlbaV0gPT09ICdxdWFycnkuY29sb3JOYW1lJykgeyBrZXkgPSAncXVhcnJ5Lm5hbWUnOyB9XG4gICAgICAgIGlmIChzb3J0QnlbaV0gPT09ICd3YXJlaG91c2UuY29sb3JOYW1lJykgeyBrZXkgPSAnd2FyZWhvdXNlLm5hbWUnOyB9XG4gICAgICAgIGlmIChzb3J0QnlbaV0gPT09ICdzaXRlLm5hbWVBZGRyZXNzJykgeyBrZXkgPSAnc2l0ZS5uYW1lJzsgfVxuICAgICAgICBpZiAoc29ydEJ5W2ldID09PSAnY3VzdG9tZXIubmFtZUNvZGUnKSB7IGtleSA9ICdjdXN0b21lci5uYW1lJzsgfVxuICAgICAgICAvLyBTb3J0XG4gICAgICAgIHBhcmFtcy5vcmRlcltrZXldID0gIXNvcnREZXNjW2ldID8gXCJhc2NcIiA6IFwiZGVzY1wiO1xuICAgICAgfVxuICAgICAgLy8gRmlsdGVyc1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5maWx0ZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcnNba2V5XSkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmlsdGVyc1trZXldKSkge1xuICAgICAgICAgICAgcGFyYW1zW2tleV0gPSB0aGlzLmZpbHRlcnNba2V5XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBbdGhpcy5maWx0ZXJzW2tleV1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gUmV0dXJuIGZpbHRlcnMgdG8gQXBpRGF0YVRhYmxlIGNvbXBvbmVudFxuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnRhYmxlRmlsdGVycycsIHtcbiAgICAgICAgZmlsdGVyczogey4uLnRoaXMuZmlsdGVyc30sXG4gICAgICAgIHBhcmFtczogey4uLnBhcmFtc30sIC8vIFdpdGhvdXQgcGFnaW5hdGlvblxuICAgICAgICBwYWdpbmF0aW9uOiB7IHBhZ2U6IHBhZ2UsIGl0ZW1zUGVyUGFnZTogaXRlbXNQZXJQYWdlIH1cbiAgICAgIH0pO1xuICAgICAgLy8gUGFnaW5hdGlvblxuICAgICAgcGFyYW1zLnBhZ2UgPSBwYWdlO1xuICAgICAgaWYgKGl0ZW1zUGVyUGFnZSA+IDApIHtcbiAgICAgICAgcGFyYW1zLml0ZW1zUGVyUGFnZSA9IGl0ZW1zUGVyUGFnZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuJGh0dHAuZ2V0KHRoaXMucmVzb3VyY2UsIHsgcGFyYW1zOiBwYXJhbXMgfSk7XG5cbiAgICAgICAgdGhpcy5pdGVtQ291bnQgPSByZXN1bHQudG90YWw7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5kYXRhO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLml0ZW1Db3VudCA9IDA7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJldXIgbG9ycyBkZSBsYSByw6ljdXAgZGVzIGRvbm7DqWVzLi4uJywgZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dmFsdWVzJywgdGhpcy5kYXRhKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggbGnDqSBhdXggYWN0aW9ucyBkZSBsYSBncmlsbGUuXG4gICAgICovXG4gICAgcm91dGU6IGFzeW5jIGZ1bmN0aW9uIChpdGVtLCBhY3Rpb24sIG9wZW5UYXJnZXQgPSAnX2JsYW5rJywgdXJsID0gbnVsbCwgcGFyYW0gPSBudWxsLCBjb25maXJtID0gbnVsbCwgaXNOb3RpZnlEZWxpdmVyeVNjaGVkdWxlID0gZmFsc2UpIHtcbiAgICAgIGxldCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UucmVwbGFjZSgvXFw/LiovLCAnJyk7IC8vIERlbGV0ZSBwYXJhbWV0ZXJzXG5cbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgICAgaWYgKCFpdGVtLm5hbWUgJiYgaXRlbS5udW0pIHsgaXRlbS5uYW1lID0gaXRlbS5udW07IH0gLy8gQ2FzZSBvcmRlclxuICAgICAgICAgIGVsc2UgaWYgKCFpdGVtLm5hbWUgJiYgaXRlbS5pZCkgeyBpdGVtLm5hbWUgPSAnIycgKyBpdGVtLmlkOyB9IC8vIENhc2UgZGVsaXZlcnkgc2NoZWR1bGVzXG5cbiAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtID0gaXRlbTtcbiAgICAgICAgICB0aGlzLmRlbGV0ZU1vZGFsSXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnX290aGVyJzpcbiAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICB1cmwgKz0gcGFyYW0gJiYgaXRlbVtwYXJhbV0gPyBpdGVtW3BhcmFtXSA6ICcnO1xuICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCBvcGVuVGFyZ2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnb3Blbi1tb2RhbF8nICsgcGFyYW0sIGl0ZW0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChjb25maXJtKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm0ubWVzc2FnZSA9IGNvbmZpcm0ubWVzc2FnZTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybS50aXRsZSA9IGNvbmZpcm0udGl0bGU7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm0uY29sb3IgPSBjb25maXJtLmNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtLmljb24gPSBjb25maXJtLmljb247XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm0ucm91dGUgPSAnL2FwcC8nICsgcmVzb3VyY2UgKyAnLycgKyBhY3Rpb24gKyAnLycgKyBpdGVtLnV1aWQ7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm0udGFyZ2V0ID0gb3BlblRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTm90aWZ5RGVsaXZlcnlTY2hlZHVsZSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlNb2RhbC5yb3V0ZSA9ICcvJyArIHJlc291cmNlICsgJy8nICsgYWN0aW9uICsgJy8nICsgaXRlbS51dWlkO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlNb2RhbC5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TW9kYWwub3BlbiA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKCcvYXBwLycgKyByZXNvdXJjZSArICcvJyArIGFjdGlvbiArICcvJyArIGl0ZW0udXVpZCwgb3BlblRhcmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3VibWl0Q29uZmlybShjb25maXJtKSB7XG4gICAgICBjb25maXJtLmxvYWQgPSB0cnVlO1xuICAgICAgd2luZG93Lm9wZW4oY29uZmlybS5yb3V0ZSwgY29uZmlybS50YXJnZXQpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGVsZXRlIGFuIG9iamVjdC5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVPYmplY3QoaXRlbSkge1xuICAgICAgdGhpcy5hbGVydC5tZXNzYWdlID0gbnVsbDtcblxuICAgICAgY29uc3QgaWQgPSBpdGVtWydAaWQnXTtcbiAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSBudWxsOyAvLyBUbyBzdGFydCB0aGUgZGVsZXRlIGxvYWRlci5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLiRodHRwLmRlbGV0ZShpZCk7XG4gICAgICAgIC8vIFVwZGF0ZSBsaXN0XG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgICAgIC8vIFN1Y2Nlc3MgbWVzc2FnZVxuICAgICAgICBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuYWxlcnQubWVzc2FnZSA9IHJlcy5kYXRhLnN1Y2Nlc3M7XG4gICAgICAgICAgdGhpcy5hbGVydC50eXBlID0gJ3N1Y2Nlc3MnO1xuICAgICAgICAgIHRoaXMuYWxlcnQua2V5Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUuZGF0YSAmJiBlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0Lm1lc3NhZ2UgPSBlLmRhdGEuZXJyb3I7XG4gICAgICAgICAgdGhpcy5hbGVydC50eXBlID0gJ2Rhbmdlcic7XG4gICAgICAgICAgdGhpcy5hbGVydC5rZXkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5kZWxldGVNb2RhbElzT3BlbiA9IGZhbHNlO1xuICAgIH0sXG4gICAgYXN5bmMgY2hhbmdlUmVhbGlzZWRPcmRlcihkZXRhaWwsIGRlbGl2ZXJ5U2NoZWR1bGUpIHtcbiAgICAgIC8vIERpc2FibGUgY2hhbmdlIGNoZWNrYm94XG4gICAgICBkZXRhaWwuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgLy8gU2F2ZSByZWFsaXNhdGlvbiBvciBub3RcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLiRodHRwLnBvc3QoJy9kZWxpdmVyeS1zY2hlZHVsZS1vcmRlci9yZWFsaXNlZC8nICsgZGV0YWlsLmRlbGl2ZXJ5U2NoZWR1bGVJZCwgZGV0YWlsKTtcbiAgICAgIC8vIENoYW5nZSBkZXRhaWwgZGV0YWlsXG4gICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5kYXRhICYmIHJlc3VsdC5kYXRhLmRldGFpbCAmJiByZXN1bHQuZGF0YS5kZXRhaWwuZGVsaXZlcnlTY2hlZHVsZUlkKSB7XG4gICAgICAgIGRldGFpbC5kZXRhaWwgPSByZXN1bHQuZGF0YS5kZXRhaWwuZGV0YWlsO1xuICAgICAgfVxuICAgICAgLy8gQ2hhbmdlIGRlbGl2ZXJ5IHNjaGVkdWxlIHN0YXR1c1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZGF0YSAmJiByZXN1bHQuZGF0YS5kZWxpdmVyeVNjaGVkdWxlU3RhdHVzKSB7XG4gICAgICAgIGRlbGl2ZXJ5U2NoZWR1bGUuc3RhdHVzID0gcmVzdWx0LmRhdGEuZGVsaXZlcnlTY2hlZHVsZVN0YXR1cztcbiAgICAgIH1cbiAgICAgIC8vIEVuYWJsZSBjaGFuZ2UgY2hlY2tib3hcbiAgICAgIGRldGFpbC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgY29sb3JXYXJlaG91c2UodG91cikge1xuICAgICAgaWYgKHRoaXMud2FyZWhvdXNlQ29sb3JzW3RvdXJdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndhcmVob3VzZUNvbG9yc1t0b3VyXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrUmlnaHRzKHJpZ2h0cykge1xuICAgICAgaWYgKHJpZ2h0cykge1xuICAgICAgICAvLyBJZiBvbmUgb2YgcmlnaHRzIGFyZSB0cnVlLCBjYW4gYWNjZXNzXG4gICAgICAgIHJldHVybiByaWdodHMuc3BsaXQoJywnKS5zb21lKHJpZ2h0ID0+IHtcbiAgICAgICAgICBsZXQgW2FjdGlvbiwgcmVzb3VyY2VdID0gcmlnaHQuc3BsaXQoJzonKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy4kcmlnaHRzLmNhbihyZXNvdXJjZSwgYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgYXN5bmMgY2hhbmdlT3JkZXJQb3NpdGlvbihkZWxpdmVyeVNjaGVkdWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLiRodHRwLnBvc3QoJ2RlbGl2ZXJ5LXNjaGVkdWxlcy8nICsgZGVsaXZlcnlTY2hlZHVsZS5pZCArICcvb3JkZXJzLXBvc2l0aW9ucycsIHtkZXRhaWxzOiBkZWxpdmVyeVNjaGVkdWxlLmRldGFpbHN9KTtcbiAgICB9LFxuICAgIGdldFRpdGxlKGFjdGlvbiwgaXRlbSkge1xuICAgICAgLy8gQ2hhbmdlIGVtYWlsIHRpdGxlXG4gICAgICBpZiAoYWN0aW9uLmlzTm90aWZ5RGVsaXZlcnlTY2hlZHVsZSkge1xuICAgICAgICBpZiAoaXRlbS5pc05vdGlmeSkge1xuICAgICAgICAgIHJldHVybiAnTm90aWZpY2F0aW9uIGVudm95w6llJztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLm5vdGlmaWNhdGlvblJlY2lwaWVudCAmJiBpdGVtLm5vdGlmaWNhdGlvblJlY2lwaWVudCAhPT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gJ05vdGlmaWNhdGlvbiBub24gZW52b3nDqWUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnQXVjdW4gZGVzdGluYXRhaXJlJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uLnRpdGxlID8gYWN0aW9uLnRpdGxlIDogJyc7XG4gICAgfSxcbiAgICBnZXRDb2xvcihhY3Rpb24sIGl0ZW0pIHtcbiAgICAgIC8vIENoYW5nZSBlbWFpbCBjb2xvclxuICAgICAgaWYgKGFjdGlvbi5pc05vdGlmeURlbGl2ZXJ5U2NoZWR1bGUpIHtcbiAgICAgICAgaWYgKGl0ZW0uaXNOb3RpZnkpIHtcbiAgICAgICAgICByZXR1cm4gJ2xpZ2h0LWdyZWVuJztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLm5vdGlmaWNhdGlvblJlY2lwaWVudCAmJiBpdGVtLm5vdGlmaWNhdGlvblJlY2lwaWVudCAhPT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gJ2FtYmVyJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJ3JlZCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIExvY2F0aW9uc1xuICAgICAgaWYgKGFjdGlvbi5pY29ucyAmJiBhY3Rpb24uaWNvbnMudHlwZSA9PT0gJ3Nob3dNYXBNYXJrZXInICYmICghaXRlbS5hZGRyZXNzIHx8ICghaXRlbS5hZGRyZXNzLmxhdGl0dWRlIHx8ICFpdGVtLmFkZHJlc3MubG9uZ2l0dWRlKSkpIHtcbiAgICAgICAgcmV0dXJuICdyZWQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uLmNvbG9yID8gYWN0aW9uLmNvbG9yIDogJyc7XG4gICAgfSxcbiAgICBjYW5EcmFnZ2FibGUoZGV0YWlscykge1xuICAgICAgcmV0dXJuIGRldGFpbHMuc29tZShkZXRhaWwgPT4gIWRldGFpbC5kaXNhYmxlZCAmJiB0aGlzLmNoZWNrUmlnaHRzKGRldGFpbC5yaWdodHMpKTtcbiAgICB9LFxuICAgIG9wZW5EZXRhaWwoaXRlbSkge1xuICAgICAgbGV0IHRvZ2dsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXRhaWxfJyArIGl0ZW0udXVpZCk7XG4gICAgICBpZiAodG9nZ2xlKSB7XG4gICAgICAgIC8vIFRvZ2dsZSBkZXRhaWxcbiAgICAgICAgdG9nZ2xlLmNsYXNzTGlzdC50b2dnbGUoJ2Qtbm9uZScpO1xuICAgICAgICAvLyBDaGFuZ2UgYXJyb3cgY2xhc3NcbiAgICAgICAgbGV0IGFycm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fycm93XycgKyBpdGVtLnV1aWQpO1xuICAgICAgICBpZiAoYXJyb3cpIHtcbiAgICAgICAgICBpZiAodG9nZ2xlLmNsYXNzTGlzdC5jb250YWlucygnZC1ub25lJykpIHtcbiAgICAgICAgICAgIGFycm93LmNsYXNzTGlzdC5yZW1vdmUoJ21kaS1jaGV2cm9uLXVwJyk7XG4gICAgICAgICAgICBhcnJvdy5jbGFzc0xpc3QuYWRkKCdtZGktY2hldnJvbi1kb3duJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycm93LmNsYXNzTGlzdC5yZW1vdmUoJ21kaS1jaGV2cm9uLWRvd24nKTtcbiAgICAgICAgICAgIGFycm93LmNsYXNzTGlzdC5hZGQoJ21kaS1jaGV2cm9uLXVwJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRUaW1lc1RpdGxlKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnMpIHtcbiAgICAgICAgbGV0IHRpbWVzID0gaXRlbS5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzLm1hcCgocywgaWR4KSA9PiB7XG4gICAgICAgICAgbGV0IHRpbWUgPSBudWxsO1xuICAgICAgICAgIGlmIChzLm1vbWVudERheSkge1xuICAgICAgICAgICAgdGltZSA9IChpZHggKyAxKSArICcgLSAnICsgcy5tb21lbnREYXkub3BlbmluZ1RpbWUubmFtZVxuICAgICAgICAgIH0gZWxzZSBpZiAocy5kZWxpdmVyeV9ob3VyKSB7XG4gICAgICAgICAgICB0aW1lID0gKGlkeCArIDEpICsgJyAtICcgKyBzLmRlbGl2ZXJ5X2hvdXI7XG4gICAgICAgICAgfSBlbHNlIGlmIChzLmRlbGl2ZXJ5SG91cikge1xuICAgICAgICAgICAgdGltZSA9IChpZHggKyAxKSArICcgLSAnICsgbW9tZW50KHMuZGVsaXZlcnlIb3VyKS5mb3JtYXQoJ0hIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzLmNvbW1lbnRNb21lbnRzKSB7XG4gICAgICAgICAgICBpZiAoIXRpbWUpIHsgdGltZSA9IChpZHggKyAxKTsgfVxuICAgICAgICAgICAgdGltZSArPSAnIC0gJyArIHMuY29tbWVudE1vbWVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgICAgIH0pLmZpbHRlcihzID0+IHMpO1xuXG4gICAgICAgIHJldHVybiB0aW1lcyA/IHRpbWVzLmpvaW4oXCJcXG5cIikgOiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgZ2V0RGVsaXZlcnlUaW1lc0FuZE1vbWVudHMoaXRlbSkge1xuICAgICAgbGV0IHRpbWVzID0gW107XG4gICAgICAvLyBNb21lbnRzIGRheXNcbiAgICAgIGlmIChpdGVtLm1vbWVudHNEYXlzICYmIGl0ZW0ubW9tZW50c0RheXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgbW9tZW50cyA9IGl0ZW0ubW9tZW50c0RheXMucmVkdWNlKChhY2MsIG0pID0+IGFjYy5zZXQobS5vcGVuaW5nVGltZS5zaG9ydCwgKGFjYy5nZXQobS5vcGVuaW5nVGltZS5zaG9ydCkgfHwgMCkgKyAxKSwgbmV3IE1hcCgpKTtcbiAgICAgICAgdGltZXMucHVzaCguLi4oWy4uLm1vbWVudHMuZW50cmllcygpXS5tYXAobSA9PiBtWzBdICsgJyAoJyArIG1bMV0gKyAnKScpKSk7XG4gICAgICB9XG4gICAgICAvLyBEZWxpdmVyeSB0aW1lc1xuICAgICAgaWYgKGl0ZW0uZGVsaXZlcnlUaW1lcyAmJiBpdGVtLmRlbGl2ZXJ5VGltZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aW1lcy5wdXNoKC4uLml0ZW0uZGVsaXZlcnlUaW1lcy5tYXAodCA9PiB0LnRpbWUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aW1lcy5qb2luKCcsICcpO1xuICAgIH0sXG4gICAgZ2V0Q2xhc3NRdHlDb2xvcihpdGVtKSB7XG4gICAgICBsZXQgc2NoZVF0eSA9IGl0ZW0uZGVsaXZlcnlTY2hlZHVsZU9yZGVycy5yZWR1Y2UoKHN1bSwgdmFsdWUpID0+IHN1bSArPSAodmFsdWUuaXNfcmVhbGlzZWQgPyB2YWx1ZS5kZWxpdmVyeV9xdWFudGl0eSA6IDApLCAwKTtcbiAgICAgIGxldCBvcmRlclF0eSA9IGl0ZW0ucXVhbnRpdHlPcmRlcmVkID8/IDA7XG4gICAgICAvLyBDb2xvcnNcbiAgICAgIGlmIChzY2hlUXR5IDw9IDAgfHwgc2NoZVF0eSA+IG9yZGVyUXR5KSB7IHJldHVybiAncmVkLS10ZXh0JzsgfVxuICAgICAgaWYgKHNjaGVRdHkgPT09IG9yZGVyUXR5KSB7IHJldHVybiAnZ3JlZW4tLXRleHQnOyB9XG4gICAgICByZXR1cm4gJ29yYW5nZS0tdGV4dCc7XG4gICAgfSxcbiAgICBpdGVtUm93QmFja2dyb3VuZChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbSAmJiBpdGVtLmlzQXJjaGl2ZWQgPyAncmVkIGxpZ2h0ZW4tNCcgOiAnJztcbiAgICB9XG4gIH1cbn0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbiAgLmNvc3RzOm50aC1vZi10eXBlKGV2ZW4pIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50b3Vyc1F0eSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudi1kYXRhLXRhYmxlX193cmFwcGVyIHRhYmxlIHRib2R5IHRyIHRkLnRleHQtc3RhcnQge1xuICAgIHBhZGRpbmc6IDAgOHB4IWltcG9ydGFudDtcbiAgfVxuXG4gIC8vIFByaXRhYmxlIHRleHQgc2l6ZVxuICBAbWVkaWEgcHJpbnQge1xuICAgIGh0bWwsIGJvZHksIGRpdiwgc3BhbiwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgcHJlLCBhLCBvbCwgdWwsIGxpLCB0YWJsZSwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCwgaSB7XG4gICAgICBmb250LXNpemU6IDZwdCAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuPC9zdHlsZT5cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/