
.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFjay1zY3JpcHQuY3NzIiwibWFwcGluZ3MiOiI7QUF5REE7RUFDQTtFQUNBO0FBQ0E7OztBQ1FBO0VBQ0E7RUFDQTtBQUNBOzs7QUNDQTtFQUNBO0VBQ0E7QUFDQTs7O0FDakRBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBOzs7QUNpRUE7RUFDQTtBQUNBOzs7QUNpRkE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7QUFDQTs7OztBQ21GQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTtBQUVBOztFQUVBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7RUFDQTtBQUNBOzs7O0FDN05BO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBOzs7O0FDdkVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBRUE7RUFDQTtBQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTtBQUVBO0VBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNnR0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBOzs7QUMzTEE7RUFDQTtFQUNBO0FBQ0E7OztBQ1VBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTs7O0FDakNBO0VBQ0E7RUFDQTtBQUNBOzs7QUNvUkE7RUFDQTtBQUNBOztBQytJQTtFQUNFO0VBQ0E7QUFuZUY7QUFxZUU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtBQW5lSjtBQXFlRTtFQUNFO0VBQ0E7QUFuZUo7QUFxZUU7RUFDRTtFQUNBO0VBQ0E7QUFuZUo7QUFxZUU7RUFDRTtFQUNBO0FBbmVKO0FBcWVFO0VBQ0U7RUFDQTtFQUNBO0FBbmVKO0FBdWVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQXBlRixDOztBQytIQTtFQUNBO0VBQ0E7QUFDQTs7O0FDekZBO0VBQ0E7RUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcUZBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFDQTs7O0FDOGhCQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0FBQ0E7QUFFQTtFQUNBO0FBQ0E7QUFFQTs7QUFFQTtJQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL0FjY291bnRFZGl0Rm9ybS52dWUiLCJ3ZWJwYWNrOi8vLy4vQWRkcmVzc0VkaXRGb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9DdXN0b21lckFjY291bnRJbmZvLnZ1ZSIsIndlYnBhY2s6Ly8vLi9DYXRhbG9nSXRlbUxpc3QudnVlIiwid2VicGFjazovLy8uL1B1YmxpY0hvbGlkYXlzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9EZWxpdmVyeVNjaGVkdWxlQ2hhcnRlclByaW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9EZWxpdmVyeVNjaGVkdWxlRHJpdmVyUHJpbnQudnVlIiwid2VicGFjazovLy8uL0RlbGl2ZXJ5U2NoZWR1bGVXYXJlaG91c2VDaGFydGVyUHJpbnQudnVlIiwid2VicGFjazovLy8uL0RlbGl2ZXJ5U2NoZWR1bGVXYXJlaG91c2VQcmludC52dWUiLCJ3ZWJwYWNrOi8vLy4vTWFrZUl0aW5lcmFyeU1hcC52dWUiLCJ3ZWJwYWNrOi8vLy4vTW9kdWxlRWRpdEZvcm0udnVlIiwid2VicGFjazovLy8uL1Byb2R1Y3RDYXJkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9SZXBsZW5pc2htZW50RWRpdEZvcm0udnVlIiwid2VicGFjazovLy8uL09yZGVySXRlbU1hbnVhbEZvcm0udnVlIiwid2VicGFjazovLy8uL01hcFN2Zy52dWUiLCJ3ZWJwYWNrOi8vLy4vU2VjdG9yTWFwQ3JlYXRpb24udnVlIiwid2VicGFjazovLy8uL1VzZXJFZGl0Rm9ybS52dWUiLCJ3ZWJwYWNrOi8vLy4vTWFya2Vyc09uTWFwLnZ1ZSIsIndlYnBhY2s6Ly8vLi9BcGlEYXRhVGFibGUudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8di1jb2wgdi1pZj1cImlzRWRpdFwiPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgIDwvdi1jb2w+XG4gICAgPHYtY29sIHYtZWxzZT5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPk5vbTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPnt7IHVzZXIubmFtZSB9fTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPkVtYWlsPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+e3sgdXNlci5lbWFpbCB9fTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlTDqWzDqXBob25lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+e3sgdXNlci5hZGRyZXNzID8gdXNlci5hZGRyZXNzLnBob25lIDogJy0nfX08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5BZHJlc3NlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCIgdi1pZj1cInVzZXIuYWRkcmVzc1wiPlxuICAgICAgICAgIDxzcGFuPnt7IHVzZXIuYWRkcmVzcy5hZGRyZXNzXzEgfX0sIHt7IHVzZXIuYWRkcmVzcy5wb3N0Y29kZSB9fSB7eyB1c2VyLmFkZHJlc3MuY2l0eSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyB1c2VyLmFkZHJlc3MuY291bnRyeSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgdi1lbHNlPi08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgPC92LWNvbD5cbiAgICA8di1yb3cgbm8tZ3V0dGVycyA6anVzdGlmeT1cIiR2dWV0aWZ5LmJyZWFrcG9pbnQubWRBbmRVcCA/ICdlbmQnIDogJ2NlbnRlcidcIiB2LWlmPVwiIWlzRWRpdFwiPlxuICAgICAgPHYtYnRuIGNvbG9yPVwic2Vjb25kYXJ5XCIgdi1vbjpjbGljaz1cImlzRWRpdCA9ICFpc0VkaXRcIj5cbiAgICAgICAgPHYtaWNvbiBsZWZ0Pm1kaS1wZW5jaWw8L3YtaWNvbj5cbiAgICAgICAgTW9kaWZpZXIgbGVzIGluZm9ybWF0aW9uc1xuICAgICAgPC92LWJ0bj5cbiAgICA8L3Ytcm93PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwidXNlci1lZGl0LWZvcm1cIixcbiAgcHJvcHM6IFtcInVzZXJcIl0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRlbWl0dGVyLm9uKFwidG9nZ2xlLXVzZXItaW5mb1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzRWRpdCA9ICF0aGlzLmlzRWRpdDtcbiAgICB9KTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0VkaXQ6IGZhbHNlLFxuICAgIH07XG4gIH0sXG59KTtcblxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4ubGFiZWwge1xuICB3aWR0aDogMTIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8di1jb2wgdi1pZj1cImlzRWRpdFwiPlxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgIDwvdi1jb2w+XG4gICAgPHYtY29sIHYtZWxzZSBjbGFzcz1cInBhLTAgbWEtMFwiPlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnMgY2xhc3M9XCJweS0xXCI+XG4gICAgICAgIDx2LWNoaXAgY2xhc3M9XCJtYS0yIHByaW1hcnkgd2hpdGUtLXRleHRcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInBhLTAgbWEtMFwiPkFkcmVzc2UgZGUgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxvd2VyY2FzZVwiPnt7IGFkZHJlc3MudHlwZS5uYW1lIH19PC9zcGFuPjwvcD5cbiAgICAgICAgPC92LWNoaXA+XG4gICAgICAgIDx2LXNwYWNlcj48L3Ytc3BhY2VyPlxuICAgICAgICA8di1idG4gY29sb3I9XCJzZWNvbmRhcnlcIiB2LW9uOmNsaWNrPVwiaXNFZGl0ID0gIWlzRWRpdFwiIGljb24+XG4gICAgICAgICAgPHYtaWNvbiBzaXplPVwiMjVcIj5tZGktcGVuY2lsPC92LWljb24+XG4gICAgICAgIDwvdi1idG4+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+XG4gICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm1yLTJcIj5tZGktYWNjb3VudDwvdi1pY29uPlxuICAgICAgICAgIE5vbVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZVwiPnt7IGFkZHJlc3MubmFtZSB9fSA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlxuICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLW1hcC1tYXJrZXI8L3YtaWNvbj5cbiAgICAgICAgICBBZHJlc3NlXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPlxuICAgICAgICAgIDxzcGFuPnt7IGFkZHJlc3MuYWRkcmVzczEgfX0sIHt7IGFkZHJlc3MucG9zdGNvZGUgfX0ge3sgYWRkcmVzcy5jaXR5IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7IGFkZHJlc3MuY291bnRyeSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+XG4gICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm1yLTJcIj5tZGktcGhvbmU8L3YtaWNvbj5cbiAgICAgICAgICBUw6lsw6lwaG9uZVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj57eyBhZGRyZXNzLnBob25lIH19PC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgIDwvdi1jb2w+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBsYW5nPVwidHNcIj5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogXCJhZGRyZXNzLWVkaXQtZm9ybVwiLFxuICBwcm9wczogW1wiYWRkcmVzc1wiLCBcImV2ZW50X2tleVwiXSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGVtaXR0ZXIub24oXCJ0b2dnbGUtYWRkcmVzcy1pbmZvXCIsIChyZWYpID0+IHtcbiAgICAgIGlmICh0aGlzLmV2ZW50X2tleSA9PSByZWYpIHtcbiAgICAgICAgdGhpcy5pc0VkaXQgPSAhdGhpcy5pc0VkaXQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNFZGl0OiBmYWxzZSxcbiAgICB9O1xuICB9LFxufSk7XG5cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmxhYmVsIHtcbiAgd2lkdGg6IDEyNXB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGg0IGNsYXNzPVwicHktNCBwYi0yIHB4LTJcIj5JbmZvcm1hdGlvbnMgZ8OpbsOpcmFsZXM8L2g0PlxuICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgPHNsb3QgbmFtZT1cIm1haW5cIj48L3Nsb3Q+XG4gICAgPC92LXJvdz5cbiAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgIDxzbG90IG5hbWU9XCJ0eXBlXCI+PC9zbG90PlxuICAgIDwvdi1yb3c+XG5cbiAgICA8di1kaXZpZGVyIGNsYXNzPVwibWEtMiBtdC0xXCI+PC92LWRpdmlkZXI+XG4gICAgPHYtcm93IG5vLWd1dHRlcnM+IDwvdi1yb3c+XG4gICAgPHYtcm93IG5vLWd1dHRlcnMgdi1pZj1cInR5cGUgPT09ICdBZ2VudCBjb21tZXJjaWFsJ1wiPlxuICAgICAge3sgdGhpcy5kZXBhcnRlbWVudHMgfX1cbiAgICAgIDxzZWN0b3JpemF0aW9uLW1hcCA6ZGVwYXJ0ZW1lbnRzPVwiZGVwYXJ0ZW1lbnRzXCI+PC9zZWN0b3JpemF0aW9uLW1hcD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgbmFtZT1cImRlcGFydG1lbnRzXCJcbiAgICAgICAgOnZhbHVlPVwiSlNPTi5zdHJpbmdpZnkoeyBkZXBhcnRlbWVudHMgfSlcIlxuICAgICAgLz5cbiAgICA8L3Ytcm93PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwiY3VzdG9tZXItYWNjb3VudC1pbmZvXCIsXG4gIHByb3BzOiBbXCJtb2R1bGVcIl0sXG4gIG1ldGhvZHM6IHt9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiXCIsXG4gICAgICBkZXBhcnRlbWVudHM6IFtdLFxuICAgIH07XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgdHlwZTogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMudHlwZSAhPSBcIkFnZW50IGNvbW1lcmNpYWxcIikge1xuICAgICAgICB0aGlzLmRlcGFydGVtZW50cyA9IFtdO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAvL2EgY2hhcXVlIG5vdXZlbGxlIGFjdGlvblxuICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgIC8vb24gcsOpY3Vww6lyZSBsJ8OpbMOpbWVudCB2LXNlbGVjdCBkdSB0eXBlIGRlIGNvbXRwZVxuICAgICAgY29uc3QgZWw6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2LXNlbGVjdF9fc2VsZWN0aW9uc1wiKTtcbiAgICAgIC8vIG9uIGVjb3V0ZSBsZXMgY2xpY2tcbiAgICAgIGVsWzBdPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGU6IGFueSkgPT4ge1xuICAgICAgICAvL29uIGF0dGVuZCBxdWUgbGEgbGlzdGUgc2UgY2hhcmdlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vb24gcmVjdXDDqHJlIGwnZWxlbWVudCBsaXN0ZVxuICAgICAgICAgIGNvbnN0IHRlc3Q6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2LW1lbnVfX2NvbnRlbnRcIik7XG4gICAgICAgICAgLy9vbiBlY291dGUgbGVzIGNsaWNrXG4gICAgICAgICAgdGVzdFswXT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlYjogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBvbiByw6ljdXDDqHJlIGxhIHZhbGV1ciBkdSB0eXBlIGRlIGNvbXB0ZVxuICAgICAgICAgICAgY29uc3QgdGV4dDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAgICAgXCJ2LXNlbGVjdF9fc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIClbMF0uaW5uZXJIVE1MO1xuICAgICAgICAgICAgLy9vbiBsJ2FmZmVjdGUgYSBsYSBwcm9wcyB0eXBlIHBvdXIgZmFpcmUgZm9uY3Rpb25uZXIgbGUgdi1pZiBkdSBib3V0b24gYWZmZWN0YXRpb24gZGVzIGTDqXBhcnRlbWVudHNcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHRleHQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59KTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmxhYmVsIHtcbiAgd2lkdGg6IDEyMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBpZD1cImNhcmRcIj5cbiAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgICA8di1jYXJkIGNsYXNzPVwibXgtYXV0byBjYXJkXCIgbWF4LXdpZHRoPVwiMTAwJVwiIG91dGxpbmVkPlxuICAgICAgPHYtaWNvbiBsYXJnZSBjb2xvcj1cInNlY29uZGFyeVwiPm1kaS17eyBjYXRhbG9nLmljb24gfX08L3YtaWNvbj5cbiAgICAgIDxoMiBjbGFzcz1cIm1sLTJcIj57eyBjYXRhbG9nLm5hbWUgfX08L2gyPlxuICAgIDwvdi1jYXJkPlxuICAgIDx2LXNwYWNlcj48L3Ytc3BhY2VyPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwiY2F0YWxvZy1pdGVtLWxpc3RcIixcbiAgcHJvcHM6IFtcImNhdGFsb2dcIl0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgIH07XG4gIH0sXG59KTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLnJvdyB7XG4gIGhlaWdodDogMTAlO1xufVxuaDIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uY2FyZCB7XG4gIHdpZHRoOiA4MCU7XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gIHBhZGRpbmc6IDI1cHggMzVweCAzNXB4O1xufVxuLmNhcmRfdG9wIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgICZuYnNwOy0mbmJzcDtcbiAgICA8c21hbGxcbiAgICAgICAgY2xhc3M9XCJmb250LWl0YWxpY1wiXG4gICAgICAgIDpjbGFzcz1cIm5leHREZWxpdmVyeURhdGUuaXNQdWJsaWNIb2xpZGF5ID8gJ29yYW5nZS0tdGV4dCBjdXJzb3ItaGVscCcgOiAnJ1wiXG4gICAgICAgIDp0aXRsZT1cIm5leHREZWxpdmVyeURhdGUudGl0bGVcIlxuICAgID5cbiAgICAgIFByb2NoYWluZSBsaXZyYWlzb24gOiB7eyBuZXh0RGVsaXZlcnlEYXRlLmRhdGUgfCBkYXRlIH19XG5cbiAgICAgIDx2LXRvb2x0aXAgYm90dG9tIGNvbG9yPVwiZ3JleVwiPlxuICAgICAgICA8dGVtcGxhdGUgdi1zbG90OmFjdGl2YXRvcj1cInsgb24sIGF0dHJzIH1cIj5cbiAgICAgICAgICA8di1pY29uXG4gICAgICAgICAgICAgIHYtYmluZD1cImF0dHJzXCJcbiAgICAgICAgICAgICAgdi1vbj1cIm9uXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwibmV4dERlbGl2ZXJ5RGF0ZS5pc1B1YmxpY0hvbGlkYXkgPyAnb3JhbmdlLS10ZXh0JyA6ICcnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBtZGktaGVscC1jaXJjbGUtb3V0bGluZVxuICAgICAgICAgIDwvdi1pY29uPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6ICMwMDA7XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1ib2xkXCI+Sm91cnMgZsOpcmnDqXMgZGFucyBsZXMgMiBwcm9jaGFpbnMgbW9pcyA6PC9zcGFuPlxuICAgICAgICAgIDxkaXYgdi1mb3I9XCJob2xpIGluIHB1YmxpY0hvbGlkYXlzXCI+XG4gICAgICAgICAgICB7eyBob2xpLnN0YXJ0RGF0ZSB8IGRhdGUgfX0gOiB7eyBob2xpLm5hbWUuZmluZChuID0+IG4ubGFuZ3VhZ2UgPT09ICdGUicpLnRleHQgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3YtdG9vbHRpcD5cbiAgICA8L3NtYWxsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogXCJwdWJsaWMtaG9saWRheXNcIixcbiAgcHJvcHM6IFtdLFxuICBkYXRhOiAoKSA9PiAoe1xuICAgIG5leHREZWxpdmVyeURhdGU6IHtcbiAgICAgIGRhdGU6IG51bGwsXG4gICAgICBpc1B1YmxpY0hvbGlkYXk6IGZhbHNlLFxuICAgICAgdGl0bGU6ICcnXG4gICAgfSxcbiAgICBwdWJsaWNIb2xpZGF5czogW11cbiAgfSksXG4gIGZpbHRlcnM6IHtcbiAgICBkYXRlKGRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlID8gbW9tZW50KGRhdGUpLmZvcm1hdCgnREQvTU0vWVlZWScpIDogJyc7XG4gICAgfVxuICB9LFxuICBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLm5leHREZWxpdmVyeURhdGUuZGF0ZSA9IHRoaXMuJHRvbW9ycm93O1xuICAgIHRoaXMuZmV0Y2hQdWJsaWNIb2xpZGF5cygpO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgZmV0Y2hQdWJsaWNIb2xpZGF5cygpIHtcbiAgICAgIHRoaXMucHVibGljSG9saWRheXMgPSBudWxsO1xuICAgICAgY29uc3Qgc3RvcmFnZUhvbGlkYXlzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1YmxpYy1ob2xpZGF5cycpO1xuXG4gICAgICAvLyBHZXQgcHVibGljIGhvbGlkYXlzIGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICBpZiAoc3RvcmFnZUhvbGlkYXlzICYmIHN0b3JhZ2VIb2xpZGF5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRvZGF5UEggPSBKU09OLnBhcnNlKHN0b3JhZ2VIb2xpZGF5cyk7XG4gICAgICAgIC8vIElmIGFscmVhZHkgZmV0Y2ggdG9kYXksIGdldCB0aGVtXG4gICAgICAgIGlmIChtb21lbnQodG9kYXlQSC5kYXRlKS5pc1NhbWUobW9tZW50KCksICdkYXknKSAmJiB0b2RheVBILnB1YmxpY0hvbGlkYXlzKSB7XG4gICAgICAgICAgdGhpcy5wdWJsaWNIb2xpZGF5cyA9IHRvZGF5UEgucHVibGljSG9saWRheXNcbiAgICAgICAgfVxuICAgICAgICAvLyBFbHNlIGRlbGV0ZSBjYXVzZSBhbm90aGVyIGRheVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncHVibGljLWhvbGlkYXlzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXNlIGV4dGVybmFsIGFwaSB0byBnZXQgcHVibGljIGhvbGlkYXlzXG4gICAgICBpZiAobnVsbCA9PT0gdGhpcy5wdWJsaWNIb2xpZGF5cykge1xuICAgICAgICBsZXQgZGF0ZXMgPSBbXG4gICAgICAgICAgICAndmFsaWRGcm9tPScgKyBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcbiAgICAgICAgICAgICd2YWxpZFRvPScgKyBtb21lbnQoKS5hZGQoMiwgJ21vbnRoJykuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vb3BlbmhvbGlkYXlzYXBpLm9yZy9QdWJsaWNIb2xpZGF5cz9jb3VudHJ5SXNvQ29kZT1GUiZsYW5ndWFnZUlzb0NvZGU9RlImc3ViZGl2aXNpb25Db2RlPUZSLUZSJicgKyBkYXRlcy5qb2luKCcmJykpXG4gICAgICAgIHRoaXMucHVibGljSG9saWRheXMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIC8vIFNldCBwdWJsaWMgaG9saWRheXMgdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwdWJsaWMtaG9saWRheXMnLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZGF0ZTogbW9tZW50KCksXG4gICAgICAgICAgcHVibGljSG9saWRheXM6IHRoaXMucHVibGljSG9saWRheXNcbiAgICAgICAgfSkpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvbW9ycm93UEggPSB0aGlzLnB1YmxpY0hvbGlkYXlzLmZpbmQocGggPT4gbW9tZW50KHBoLnN0YXJ0RGF0ZSkuaXNTYW1lKHRoaXMuJHRvbW9ycm93LCAnZGF5JykpO1xuICAgICAgdGhpcy5uZXh0RGVsaXZlcnlEYXRlLmlzUHVibGljSG9saWRheSA9IHRvbW9ycm93UEggJiYgdG9tb3Jyb3dQSC5pZDtcbiAgICAgIHRoaXMubmV4dERlbGl2ZXJ5RGF0ZS50aXRsZSA9IHRvbW9ycm93UEggPyB0b21vcnJvd1BILm5hbWUuZmluZChuID0+IG4ubGFuZ3VhZ2UgPT09ICdGUicpPy50ZXh0IDogJyc7XG5cbiAgICAgIC8vIElmIHRvbW9ycm93IGlzIFBILCBhZGQgb25lIGRheSAob3IgbW9yZSBpZiB3ZWVrZW5kKVxuICAgICAgaWYgKHRvbW9ycm93UEggJiYgdG9tb3Jyb3dQSC5pZCkge1xuICAgICAgICB0aGlzLiR0b21vcnJvdy5hZGQoMSwgJ2RheXMnKVxuICAgICAgICB3aGlsZSAoWzYsIDBdLmluY2x1ZGVzKHRoaXMuJHRvbW9ycm93LmRheSgpKSkge1xuICAgICAgICAgIHRoaXMuJHRvbW9ycm93ID0gdGhpcy4kdG9tb3Jyb3cuYWRkKDEsICdkYXlzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlPlxuICAuY3Vyc29yLWhlbHAge1xuICAgIGN1cnNvcjogaGVscDtcbiAgfVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICA8ZGlWPlxuICAgICAgPHRhYmxlIGNsYXNzPVwibXQtNFwiID5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5FWFBFRElURVVSPC90aD5cbiAgICAgICAgICAgIDx0aD5ERVNUSU5BVEFJUkU8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQ+PHN0cm9uZz5Tb2Npw6l0w6k8L3N0cm9uZz4gOiBDQVJSSUVSRVM8L3RkPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+U29jacOpdMOpPC9zdHJvbmc+IDoge3sgZGVsaXZlcnlTY2hlZHVsZS50cmFuc3BvcnRlci5uYW1lIH19XG4gICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyICYmIGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzc1wiPlxuICAgICAgICAgICAgICAgICh7eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3MucG9zdGNvZGVbMF19fXt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzcy5wb3N0Y29kZVsxXX19KVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+QWRyZXNzZTwvc3Ryb25nPiA6IEJQIDIgLSBSb3V0ZSBkZSBOaW9ydDxicj43OTMxMCBNQVpJRVJFUyBFTiBHQVRJTkU8L3RkPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+QWRyZXNzZTwvc3Ryb25nPiA6IDxzcGFuIHYtaWY9XCJkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyICYmIGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzc1wiPnt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzcy5hZGRyZXNzMSB9fTwvc3Bhbj48YnI+XG4gICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyICYmIGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzc1wiPlxuICAgICAgICAgICAgICAgIHt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzcy5wb3N0Y29kZSB9fSB7eyBkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyLmFkZHJlc3MuY2l0eSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+Tm9tPC9zdHJvbmc+IDoge3sgZGVsaXZlcnlTY2hlZHVsZS51c2VyLmZ1bGxuYW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZD48c3Ryb25nPk5vbTwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIubmFtZSB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQ+PHN0cm9uZz5Uw6lsw6lwaG9uZTwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5waG9uZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+PHN0cm9uZz5Uw6lsw6lwaG9uZTwvc3Ryb25nPiA6IDxzcGFuIHYtaWY9XCJkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyICYmIGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzc1wiPnt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzcy5waG9uZSB9fTwvc3Bhbj48L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkPjxzdHJvbmc+RS1tYWlsPC9zdHJvbmc+IDoge3sgZGVsaXZlcnlTY2hlZHVsZS51c2VyLmVtYWlsIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZD48c3Ryb25nPkUtbWFpbDwvc3Ryb25nPiA6IDxzcGFuIHYtaWY9XCJkZWxpdmVyeVNjaGVkdWxlLnRyYW5zcG9ydGVyICYmIGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzc1wiPnt7IGRlbGl2ZXJ5U2NoZWR1bGUudHJhbnNwb3J0ZXIuYWRkcmVzcy5lbWFpbCB9fTwvc3Bhbj48L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDx0Ym9keSB2LWZvcj1cInRvdXIgaW4gdG91cnNcIj5cbiAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInRvdXIuaXNfbWVzc2FnZVwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwicmVkLS1ib3JkZXJcIj5cbiAgICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCIgc3R5bGU9XCJjb2xvcjogb3JhbmdlO1wiPlxuICAgICAgICAgICAgICAgIDx2LWljb24gY29sb3I9XCJvcmFuZ2VcIiBzbWFsbCBjbGFzcz1cIm1yLTJcIj5tZGktY29tbWVudC10ZXh0LW91dGxpbmU8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLm1lc3NhZ2UgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXJcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj1cIjJcIiBzdHlsZT1cImJvcmRlci10b3A6IDJweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OClcIj5ERVNDUklQVElPTiBNQVJDSEFORElTRSBBIFRSQU5TUE9SVEVSPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlJFRiBDT01NQU5ERTwvc3Ryb25nPiA6IHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5maXJzdG5hbWUgfX0ge3sgZGVsaXZlcnlTY2hlZHVsZS51c2VyLmxhc3RuYW1lIH19PGJyPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+UkVGIFBMQU5OSU5HPC9zdHJvbmc+IDoge3sgZGVsaXZlcnlTY2hlZHVsZS5pZCB9fTxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPk5BVFVSRSBQUk9EVUlUPC9zdHJvbmc+IDoge3sgdG91ci5kZWxpdmVyeV9vcmRlci5wcm9kdWN0ID8gdG91ci5kZWxpdmVyeV9vcmRlci5wcm9kdWN0Lm5hbWUgOiAnJyB9fTxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlFVQU5USVRFIEEgTElWUkVSPC9zdHJvbmc+IDoge3sgdG91ci5kZWxpdmVyeV9xdWFudGl0eSArICcmbmJzcFQnfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+Q0FSQUNURVJJU1RJUVVFUyBQQVJUSUNVTElFUkVTPC9zdHJvbmc+IDo8YnI+XG4gICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgPGxpPkJhY2jDomdlIG9ibGlnYXRvaXJlPC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaT5CZW5uZXMgcHJvcHJlczwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aD5DSEFSR0VNRU5UPC90aD5cbiAgICAgICAgICAgICAgPHRoPkRFQ0hBUkdFTUVOVDwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5MSUVVPC9zdHJvbmc+IDoge3sgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UubmFtZSB9fTxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkNPT1JET05ORUVTPC9zdHJvbmc+IDo8YnI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC00XCI+PHN0cm9uZz5Uw6lsw6lwaG9uZTwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLmFkZHJlc3MucGhvbmUgfX08L3NwYW4+PGJyPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtNFwiPjxzdHJvbmc+RS1tYWlsPC9zdHJvbmc+IDoge3sgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UuYWRkcmVzcy5lbWFpbCB9fTwvc3Bhbj48YnI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5BRFJFU1NFPC9zdHJvbmc+IDoge3sgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UuYWRkcmVzcy5hZGRyZXNzMSB9fSAtXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXIgJiYgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UgJiYgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UuYWRkcmVzc1wiPlxuICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UuYWRkcmVzcy5wb3N0Y29kZSB9fSB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5hZGRyZXNzLmNpdHkgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+PGJyPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+KGhvcmFpcmVzIGQnb3V2ZXJ0dXJlcyA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm9wZW5Ib3VycyB9fSk8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+Tk9NIENMSUVOVDwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuY3VzdG9tZXIubmFtZSB9fTxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkxJRVU8L3N0cm9uZz4gOiB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5hZGRyZXNzMSAhPT0gJy4nID8gdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MuYWRkcmVzczEgKyAnIC0gJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXIgJiYgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlICYmIHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5hZGRyZXNzXCI+XG4gICAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5wb3N0Y29kZSB9fSB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5jaXR5IH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPjxicj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkhPUkFJUkVTPC9zdHJvbmc+IDpcbiAgICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lU3RhcnQgfCBob3VyIH19IC0ge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVFbmQgfCBob3VyIH19IGV0XG4gICAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZTdGFydCB8IGhvdXIgfX0gLSB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZFbmQgfCBob3VyIH19PGJyPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwidG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVTdGFydEZyaWRheSAmJiB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUVuZEZyaWRheSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZTdGFydEZyaWRheSAmJiB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZFbmRGcmlkYXlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+SE9SQUlSRVMgRFUgVkVORFJFREk8L3N0cm9uZz4gOlxuICAgICAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZVN0YXJ0RnJpZGF5IHwgaG91ciB9fSAtIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lRW5kRnJpZGF5IHwgaG91ciB9fSBldFxuICAgICAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZTdGFydEZyaWRheSB8IGhvdXIgfX0gLSB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZFbmRGcmlkYXkgfCBob3VyIH19PGJyPlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5OT00gQ0hFRiBERSBDSEFOVElFUjwvc3Ryb25nPiA6IHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jaGllZiB9fTxicj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmNvbnRhY3RDbGllbnQgfHwgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnBob25lQ2xpZW50XCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkNPTlRBQ1QgQ09NTUFOREU8L3N0cm9uZz4gOlxuICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmNvbnRhY3RDbGllbnQgPyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuY29udGFjdENsaWVudCA6ICcnIH19XG4gICAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUucGhvbmVDbGllbnQgPyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUucGhvbmVDbGllbnQgOiAnJyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj48YnI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5EQVRFPC9zdHJvbmc+IDoge3sgZGVsaXZlcnlTY2hlZHVsZS5kYXRlIHwgZGF0ZX19PGJyPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+SEVVUkU8L3N0cm9uZz4gOiB7eyB0b3VyLmRlbGl2ZXJ5SG91ciB8IGhvdXIgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkNvbmRpdGlvbnMgUGFydGljdWxpw6hyZXM8L3N0cm9uZz4gOlxuICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgIDxsaT5QYXMgZGUgc3VyY2hhcmdlPC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaT5SZXNwZWN0IHByb3RvY29sZSBkZSBjaGFyZ2VtZW50PC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaT5SZXNwZWN0IGR1IHBsYW4gZGUgY2lyY3VsYXRpb248L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkNvbmRpdGlvbnMgUGFydGljdWxpw6hyZXM8L3N0cm9uZz4gOjxicj5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRyaXZlcl9jb21tZW50fX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiMlwiPlBSSVggUFJFU1RBVElPTiBERSBUUkFOU1BPUlQ8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlclwiPlxuICAgICAgICAgICAgICBQVSBBVCA6IHt7IHRvdGFsUHVhdCB9fSDigqw8YnI+XG4gICAgICAgICAgICAgIFwiSW5kZXhhdGlvbiBjYXJidXJhbnQgY29tcHJpc2VcIjxicj5cbiAgICAgICAgICAgICAgXCJJbnRlcmRpY3Rpb24gZGUgc291cy10cmFpdGVyIGNldHRlIHByZXN0YXRpb25cIlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCI+U0lHTkFUVVJFUzwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+XG4gICAgICAgICAgICAgIFNpbmPDqHJlcyBzYWx1dGF0aW9ucyw8YnI+XG4gICAgICAgICAgICAgIFNpZ25hdGFpcmUgOiB7eyBkZWxpdmVyeVNjaGVkdWxlLnVzZXIuZnVsbG5hbWUgfX0sPGJyPlxuICAgICAgICAgICAgICBGb25jdGlvbiA6IExvZ2lzdGlxdWUgTWF6acOocmVzXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDcwcHg7XCI+PC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgdHlwZT1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogJ2RlbGl2ZXJ5LXNjaGVkdWxlLWNoYXJ0ZXItcHJpbnQnLFxuICBwcm9wczogWyd0b3VycycsICdkZWxpdmVyeVNjaGVkdWxlJ10sXG4gIGRhdGE6ICgpID0+ICh7XG4gICAgcHVBdEFycmF5OiBbXSxcbiAgICB0b3RhbFB1YXQ6IG51bGwsXG4gIH0pLFxuICBmaWx0ZXJzOiB7XG4gICAgZGF0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuICh2YWx1ZSAmJiBtb21lbnQodmFsdWUpKSA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdERC9NTS9ZWVlZJykgOiB2YWx1ZTtcbiAgICB9LFxuICAgIGhvdXIodmFsdWUpIHtcbiAgICAgIHJldHVybiAodmFsdWUgJiYgbW9tZW50KHZhbHVlKSkgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKSA6IHZhbHVlO1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6e1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy50b3Vycy5mb3JFYWNoKCh0b3VyKSA9PiB7IHRoaXMucHVBdEFycmF5LnB1c2godG91ci5wdUF0KX0pO1xuICAgIC8vIFN1bSBvZiBwdUF0IGZyb20gZWFjaCB0b3VyXG4gICAgdGhpcy50b3RhbFB1YXQgPSB0aGlzLnB1QXRBcnJheS5yZWR1Y2UoKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkgPT4gcHJldmlvdXNWYWx1ZSArIGN1cnJlbnRWYWx1ZSwgMCk7XG4gICAgLy8gUHJpbnQgc2NoZWR1bGVcbiAgICB3aW5kb3cucHJpbnQoKTtcbiAgICAvLyBDbG9zZSB3aW5kb3cgYWZ0ZXIgcHJpbnRcbiAgICB3aW5kb3cub25hZnRlcnByaW50ID0gKCkgPT4geyB3aW5kb3cuY2xvc2UoKTsgfTtcbiAgfSxcbn0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG5cbnRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLWNvbGxhcHNlOiAgY29sbGFwc2U7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cblxudGgge1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXRvcDogMnB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbnRkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG50aCwgdGQge1xuICBwYWRkaW5nOiAycHggNXB4O1xuICB3aWR0aDogMSU7XG59XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtdC01XCI+XG4gICAgPGRpdj5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzIGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8di1jb2wgY2xhc3M9XCJtbC0xMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBwcmltYXJ5LS10ZXh0XCI+RGF0ZSBkZSBsaXZyYWlzb24gOjwvc3Bhbj4ge3sgZGVsaXZlcnlTY2hlZHVsZS5kYXRlIHwgZGF0ZSB9fVxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2wgY2xhc3M9XCJtbC0xMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBwcmltYXJ5LS10ZXh0XCI+UsOpZGFjdGV1ciA6PC9zcGFuPlxuICAgICAgICAgIHt7IGRlbGl2ZXJ5U2NoZWR1bGUudXNlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnVzZXIuZmlyc3RuYW1lID8gZGVsaXZlcnlTY2hlZHVsZS51c2VyLmZpcnN0bmFtZSA6ICcnIH19XG4gICAgICAgICAge3sgZGVsaXZlcnlTY2hlZHVsZS51c2VyICYmIGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5sYXN0bmFtZSA/IGRlbGl2ZXJ5U2NoZWR1bGUudXNlci5sYXN0bmFtZSA6ICcnIH19XG4gICAgICAgICAgPHNwYW4gdi1pZj1cImRlbGl2ZXJ5U2NoZWR1bGUudXNlciAmJiBkZWxpdmVyeVNjaGVkdWxlLnVzZXIucGhvbmVcIj4mbmJzcDsoe3sgZGVsaXZlcnlTY2hlZHVsZS51c2VyLnBob25lIH19KTwvc3Bhbj5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPHYtY29sPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBwcmltYXJ5LS10ZXh0XCI+VHJhbnNwb3J0ZXVyIDo8L3NwYW4+XG4gICAgICAgICAge3sgZGVsaXZlcnlTY2hlZHVsZS50cnVjayAmJiBkZWxpdmVyeVNjaGVkdWxlLnRydWNrLnRyYW5zcG9ydGVyLm5hbWUgPyBkZWxpdmVyeVNjaGVkdWxlLnRydWNrLnRyYW5zcG9ydGVyLm5hbWUgOiAnJyB9fVxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2wgY2xhc3M9XCJtbC02XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIHByaW1hcnktLXRleHRcIj5DYW1pb24gOjwvc3Bhbj5cbiAgICAgICAgICB7eyBkZWxpdmVyeVNjaGVkdWxlLnRydWNrICYmIGRlbGl2ZXJ5U2NoZWR1bGUudHJ1Y2subnVtYmVycGxhdGUgPyBkZWxpdmVyeVNjaGVkdWxlLnRydWNrLm51bWJlcnBsYXRlIDogJycgfX1cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBwcmltYXJ5LS10ZXh0XCI+Q2hhdWZmZXVyOjwvc3Bhbj5cbiAgICAgICAgICB7eyBkZWxpdmVyeVNjaGVkdWxlLmRyaXZlciA/IGRlbGl2ZXJ5U2NoZWR1bGUuZHJpdmVyLmZpcnN0bmFtZSArICcgJyArIGRlbGl2ZXJ5U2NoZWR1bGUuZHJpdmVyLmxhc3RuYW1lOiAnJyB9fVxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIE9yZGVycyAtLT5cbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzPVwibXQtNFwiID5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+T3JpZ2luZTwvdGg+XG4gICAgICAgICAgICAgIDx0aD5DbGllbnQ8L3RoPlxuICAgICAgICAgICAgICA8dGg+RGVzdGluYXRpb248L3RoPlxuICAgICAgICAgICAgICA8dGg+Q29tbWVudGFpcmVzPC90aD5cbiAgICAgICAgICAgICAgPHRoPlByw6l2aXNpb25zIC8gT2JzZXJ2LjwvdGg+XG4gICAgICAgICAgICAgIDx0aD5UZWwuIENoZWYgY2hhbnRpZXI8L3RoPlxuICAgICAgICAgICAgICA8dGg+UHJvZHVpdDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5RdMOpPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHIgdi1mb3I9XCJ0b3VyIGluIHRvdXJzXCI+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInRvdXIuaXNfbWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjhcIiBzdHlsZT1cImNvbG9yOiBvcmFuZ2U7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC13ZWlnaHQ6IGJvbGQ7XCI+XG4gICAgICAgICAgICAgICAgPHYtaWNvbiBjb2xvcj1cIm9yYW5nZVwiIHNtYWxsIGNsYXNzPVwibXItMlwiPm1kaS1jb21tZW50LXRleHQtb3V0bGluZTwvdi1pY29uPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIubWVzc2FnZSB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwidG91ci5kZWxpdmVyeV9vcmRlclwiPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UubmFtZSB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5jdXN0b21lci5uYW1lIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5jaXR5IH19IC1cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5wb3N0Y29kZS5zbGljZSgwLCAyKSB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLm5hbWUgfX0gLVxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5hZGRyZXNzLmFkZHJlc3MxIH19PGJyPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZVN0YXJ0ICYmIHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lRW5kXCI+XG4gICAgICAgICAgICAgICAgICBPdXZlcnR1cmUgZGUge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVTdGFydCB8IGhvdXIgfX0gw6Age3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVFbmQgfCBob3VyIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZTdGFydCAmJiB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZFbmRcIj5cbiAgICAgICAgICAgICAgICAgIGV0IGRlIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lSGFsZlN0YXJ0IHwgaG91ciB9fSDDoCB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUhhbGZFbmQgfCBob3VyIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZVN0YXJ0RnJpZGF5ICYmIHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lRW5kRnJpZGF5XCI+XG4gICAgICAgICAgICAgICAgICBldCBsZSB2ZW5kcmVkaSBkZSB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZVN0YXJ0RnJpZGF5IHwgaG91ciB9fSDDoCB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUudGltZUVuZEZyaWRheSB8IGhvdXIgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lSGFsZlN0YXJ0RnJpZGF5ICYmIHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lSGFsZkVuZEZyaWRheVwiPlxuICAgICAgICAgICAgICAgICAgZXQgZGUge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnRpbWVIYWxmU3RhcnRGcmlkYXkgfCBob3VyIH19IMOgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS50aW1lSGFsZkVuZEZyaWRheSB8IGhvdXIgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kcml2ZXJfY29tbWVudCB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRvdXIubW9tZW50RGF5IHx8dG91ci5kZWxpdmVyeUhvdXIgfHwgdG91ci5jb21tZW50TW9tZW50c1wiPkhvcmFpcmVzIDo8L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgdG91ci5tb21lbnREYXkgPyB0b3VyLm1vbWVudERheS5vcGVuaW5nVGltZS5uYW1lIDogJycgfX0gLSB7eyB0b3VyLmNvbW1lbnRNb21lbnRzID8gdG91ci5jb21tZW50TW9tZW50cyA6ICcnIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInRvdXIuZGVsaXZlcnlIb3VyXCI+IMOgIHt7IHRvdXIuZGVsaXZlcnlIb3VyIHwgZmlsdGVyRGF0ZVRvSG91ciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJ0b3VyLmhpZ2h3YXlcIiBjbGFzcz1cIm1hLTAgcGEtMFwiPlxuICAgICAgICAgICAgICAgICAgPHYtYmFkZ2UgY29sb3I9XCJwcmltYXJ5XCIgOmNvbnRlbnQ9XCJ0b3VyLmhpZ2h3YXlcIiBib3JkZXJlZCBib3R0b20gaW5saW5lIG92ZXJsYXAgY2xhc3M9XCJtYS0wIHBhLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5tZGktaGlnaHdheTwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgPC92LWJhZGdlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmNoaWVmIH19XG4gICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MucGhvbmUgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmNvbnRhY3RDbGllbnQgfHx0b3VyLmRlbGl2ZXJ5X29yZGVyLnNpdGUucGhvbmVDbGllbnRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHRvdXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50ID8gdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLmNvbnRhY3RDbGllbnQgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAge3sgdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnBob25lQ2xpZW50ID8gdG91ci5kZWxpdmVyeV9vcmRlci5zaXRlLnBob25lQ2xpZW50IDogJycgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnByb2R1Y3QgPyB0b3VyLmRlbGl2ZXJ5X29yZGVyLnByb2R1Y3QubmFtZSA6ICcnIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRlbGl2ZXJ5X3F1YW50aXR5ICsgJyZuYnNwVCd9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwib2JsaWdhdGlvbnMgbXQtMSBtYi0xIHB0LTIgcGItMlwiID5cbiAgICAgIDxoNj5PQkxJR0FUSU9OUyBEVSBDSEFVRkZFVVI8L2g2PlxuICAgICAgPHVsIGNsYXNzPVwibWwtM1wiPlxuICAgICAgICA8bGk+UG9ydGVyIGxlcyBFUEkgb2JsaWdhdG9pcmVzIChjYXNxdWUsIGJhdWRyaWVyLCBjaGF1c3N1cmVzIGRlIHPDqWN1cml0w6kpPC9saT5cbiAgICAgICAgPGxpPkZhaXJlIHNpZ25lciBsZXMgQkw8L2xpPlxuICAgICAgICA8bGk+UmVzcGVjdGVyIGxlcyBwcm90b2NvbGVzIGRlIGNoYXJnZW1lbnQvZMOpY2hhcmdlbWVudCBjaGV6IG5vcyBjbGllbnRzIGV0IHN1ciBub3Mgc2l0ZXM8L2xpPlxuICAgICAgICA8bGk+QsOiY2hhZ2Ugb2JsaWdhdG9pcmU8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwib2JsaWdhdGlvbnMgcHQtMiBwYi0yXCIgPlxuICAgICAgPGg2PkEgUkVNUExJUiBQQVIgTEUgQ0hBVUZGRVVSPC9oNj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyc1wiPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCI1XCI+S2lsb23DqXRyYWdlIETDqXBhcnQgOjwvdGg+XG4gICAgICAgICAgICA8dGggY29sc3Bhbj1cIjVcIj5LaWxvbcOpdHJhZ2UgQXJyaXbDqWUgOjwvdGg+XG4gICAgICAgICAgICA8dGggY29sc3Bhbj1cIjVcIj5LaWxvbcOpdHJhZ2UgdG90YWwgam91ciA6PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIzXCIgcm93c3Bhbj1cIjJcIj5MaWV1IGRlIGNoYXJnZW1lbnQ8L3RoPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCIgY2xhc3M9XCJob3Vyc1wiPkhldXJlczwvdGg+XG4gICAgICAgICAgICA8dGggY29sc3Bhbj1cIjNcIiByb3dzcGFuPVwiMlwiPkxpZXUgZGUgZMOpY2hhcmdlbWVudDwvdGg+XG4gICAgICAgICAgICA8dGggY29sc3Bhbj1cIjJcIiBjbGFzcz1cImhvdXJzXCI+SGV1cmVzPC90aD5cbiAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiM1wiIHJvd3NwYW49XCIyXCIgY2xhc3M9XCJjbGllbnRcIj5DbGllbnQ8L3RoPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCIgcm93c3Bhbj1cIjJcIiBjbGFzcz1cInRvbm5hZ2VcIj5Ub25uYWdlPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5BcnJpdsOpZTwvdGg+XG4gICAgICAgICAgICA8dGg+RMOpcGFydDwvdGg+XG4gICAgICAgICAgICA8dGg+QXJyaXbDqWU8L3RoPlxuICAgICAgICAgICAgPHRoPkTDqXBhcnQ8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHI+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+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidG9ubmFnZVwiPiZuYnNwPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQ+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgICAgPHRkPiZuYnNwPC90ZD5cbiAgICAgICAgICAgIDx0ZD4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj4mbmJzcDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0b25uYWdlXCI+Jm5ic3A8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8dGFibGUgaWQ9XCJmb290ZXJUYWJsZVwiPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNvbHNwYW49XCI2XCIgcm93c3Bhbj1cIjJcIj5PYnNlcnZhdGlvbnMgY2hhdWZmZXVyIDo8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIFNpZ25hdHVyZSBkdSBjaGF1ZmZldXIgOiA8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoPlRlbXBzIGRlIGNvbmR1aXRlIDo8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPlRlbXBzIGRlIHRyYXZhaWwgOjxicj5cbiAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm9ibGlnYXRpb25zIG10LTEgbWItMSBwdC0yIHBiLTJcIiA+XG4gICAgICA8aDY+QSB0cmFuc21ldHRyZSBjaGFxdWUgc29pciDDoCBsYSBiYXNjdWxlIGF2ZWMgbGVzIEJMIGNvbmNlcm7DqXMgKGV4ZW1wbGFpcmVzIHZlcnQpPC9oNj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHR5cGU9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuVnVlLmZpbHRlcignZmlsdGVyRGF0ZVRvSG91cicsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBtb21lbnQoU3RyaW5nKHZhbHVlKSkuZm9ybWF0KCdISDptbScpXG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogJ2RlbGl2ZXJ5LXNjaGVkdWxlLWRyaXZlci1wcmludCcsXG4gIHByb3BzOiBbJ3RvdXJzJywgJ2RlbGl2ZXJ5U2NoZWR1bGUnXSxcbiAgZmlsdGVyczoge1xuICAgIGRhdGUodmFsdWUpIHsgcmV0dXJuICh2YWx1ZSAmJiBtb21lbnQodmFsdWUpKSA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdERC9NTS9ZWVlZJykgOiB2YWx1ZTsgfSxcbiAgICBob3VyKHZhbHVlKSB7IHJldHVybiAodmFsdWUgJiYgbW9tZW50KHZhbHVlKSkgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKSA6IHZhbHVlOyB9LFxuICB9LFxuICBtb3VudGVkKCkge1xuLy8gUHJpbnQgc2NoZWR1bGVcbiAgICB3aW5kb3cucHJpbnQoKTtcbi8vIENsb3NlIHdpbmRvdyBhZnRlciBwcmludFxuICAgIHdpbmRvdy5vbmFmdGVycHJpbnQgPSAoKSA9PiB7IHdpbmRvdy5jbG9zZSgpOyB9O1xuICB9LFxufSk7XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cblxudGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sbGFwc2U6ICBjb2xsYXBzZTtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuXG50aCB7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbnRoLmNsaWVudCB7XG4gIHdpZHRoOiAyMCU7XG59XG5cbnRoLnRvbm5hZ2UsXG50aC5ob3VycyB7XG4gIHdpZHRoOjQlO1xufVxuXG50ZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxudGgsIHRkIHtcbiAgcGFkZGluZzogMnB4IDVweDtcbn1cblxuLmhlYWRlcnMge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG5oNiB7XG4gIHRleHQtYWxpZ246IGNlbnRlclxufVxuXG5saSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cblxuLm9ibGlnYXRpb25zIHtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NiwgMTU2LCAxOTksIDAuOTgpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuXG4jZm9vdGVyVGFibGUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICA8ZGl2PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnMgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgIDx2LWNvbCBjbGFzcz1cIm1sLTEwXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIHByaW1hcnktLXRleHRcIj57eyB3YXJlaG91c2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIGNsYXNzPVwibWwtMTBcIj5BIHBhcnRpciBkdSA6IHt7IGRhdGVmcm9tc3RyaW5nIHwgZmlsdGVyRGF0ZSB9fTwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8dGFibGUgY2xhc3M9XCJtdC00XCIgPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aD5Db2RlPC90aD5cbiAgICAgICAgICAgICAgPHRoPkRhdGU8L3RoPlxuICAgICAgICAgICAgICA8dGg+UsOpZi4gY29tbS4gY2xpZW50PC90aD5cbiAgICAgICAgICAgICAgPHRoPkNsaWVudDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5MaWV1IGRlIGxpdnJhaXNvbjwvdGg+XG4gICAgICAgICAgICAgIDx0aD5Ob20gZXQgdMOpbC4gZHUgY2hlZiBkZSBjaGFudGllcjwvdGg+XG4gICAgICAgICAgICAgIDx0aD5Ew6lzaWduYXRpb248L3RoPlxuICAgICAgICAgICAgICA8dGg+Q29kZSBTQVA8L3RoPlxuICAgICAgICAgICAgICA8dGg+UXTDqSBlbiBULjwvdGg+XG4gICAgICAgICAgICAgIDx0aD5TaXRlIGRlIGTDqXBhcnQ8L3RoPlxuICAgICAgICAgICAgICA8dGg+VHJhbnNwb3J0ZXVyPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHIgdi1mb3I9XCJ0b3VyIGluIHRvdXJzXCI+XG4gICAgICAgICAgICA8dGQ+e3sgdG91ci5pZCB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgdG91ci5kYXRlV2l0aG91dEhvdXIgfCBmaWx0ZXJEYXRlIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57eyB0b3VyLnVzZXIuZmlyc3RuYW1lIH19IHt7IHRvdXIudXNlci5sYXN0dG5hbWUgfX08L3RkPlxuICAgICAgICAgICAgPHRkPnt7IHRvdXIuZGVsaXZlcnlTY2hlZHVsZU9yZGVyc1swXS5kZWxpdmVyeV9vcmRlci5jdXN0b21lci5uYW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCJzY2hlZHVsZU9yZGVyIGluIHRvdXIuZGVsaXZlcnlTY2hlZHVsZU9yZGVyc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyICYmICBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLndhcmVob3VzZS5uYW1lID09IHdhcmVob3VzZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5uYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5hZGRyZXNzMSB9fSB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5wb3N0Y29kZSB9fVxuICAgICAgICAgICAgICAgICAge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5zaXRlLmFkZHJlc3MuY2l0eSB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIubW9tZW50RGF5IHx8IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlIb3VyIHx8IHNjaGVkdWxlT3JkZXIuY29tbWVudE1vbWVudHNcIj4gLVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5tb21lbnREYXlcIiAgY2xhc3M9XCJyZWQtLXRleHRcIj57eyBzY2hlZHVsZU9yZGVyLm1vbWVudERheS5vcGVuaW5nVGltZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZC0tdGV4dFwiPiAtIHt7IHNjaGVkdWxlT3JkZXIuY29tbWVudE1vbWVudHMgPyBzY2hlZHVsZU9yZGVyLmNvbW1lbnRNb21lbnRzIDogJycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5SG91clwiIGNsYXNzPVwicmVkLS10ZXh0XCI+e3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeUhvdXIgfCBmaWx0ZXJEYXRlVG9Ib3VyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuc2NoZWR1bGVfY29tbWVudFwiPiAtIHt7IHNjaGVkdWxlT3JkZXIuc2NoZWR1bGVfY29tbWVudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwic2NoZWR1bGVPcmRlciBpbiB0b3VyLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlciAmJiAgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UubmFtZSA9PSB3YXJlaG91c2UubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuY2hpZWYgfX08L3N0cm9uZz4gOiB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X29yZGVyLnNpdGUuYWRkcmVzcy5waG9uZSB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50IHx8IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5waG9uZUNsaWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5jb250YWN0Q2xpZW50ID8gc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5zaXRlLmNvbnRhY3RDbGllbnQgOiAnJyB9fTwvc3Ryb25nPiA6XG4gICAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5waG9uZUNsaWVudCA/IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIuc2l0ZS5waG9uZUNsaWVudCA6ICcnIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiB2LWZvcj1cInNjaGVkdWxlT3JkZXIgaW4gdG91ci5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIgJiYgIHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgPT0gd2FyZWhvdXNlLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIucHJvZHVjdC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiB2LWZvcj1cInNjaGVkdWxlT3JkZXIgaW4gdG91ci5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIgJiYgIHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgPT0gd2FyZWhvdXNlLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIucHJvZHVjdC5jb2RlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiB2LWZvcj1cInNjaGVkdWxlT3JkZXIgaW4gdG91ci5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIgJiYgIHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgPT0gd2FyZWhvdXNlLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfcXVhbnRpdHkgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwic2NoZWR1bGVPcmRlciBpbiB0b3VyLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlciAmJiAgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UubmFtZSA9PSB3YXJlaG91c2UubmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci53YXJlaG91c2UubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAge3sgdG91ci50cmFuc3BvcnRlci5uYW1lIH19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgdHlwZT1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG4vLyBLZWVwIG9ubHkgaG91ciBmcm9tIGRhdGV0aW1lXG5WdWUuZmlsdGVyKCdmaWx0ZXJEYXRlVG9Ib3VyJywgZnVuY3Rpb24oZGF0ZSkge1xuICBpZiAoZGF0ZSkge1xuICAgIHJldHVybiBtb21lbnQoU3RyaW5nKGRhdGUpKS5mb3JtYXQoJ0hIOm1tJylcbiAgfVxufSk7XG5cbi8vIEZvcm1hdCBkYXRldGltZSBpbiBmcmVuY2ggZGlzcGxheVxuVnVlLmZpbHRlcignZmlsdGVyRGF0ZScsIGZ1bmN0aW9uKGRhdGUpIHtcbiAgaWYgKGRhdGUpIHtcbiAgICByZXR1cm4gbW9tZW50KFN0cmluZyhkYXRlKSkuZm9ybWF0KCdERC9NTS9ZWVlZJylcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiAnZGVsaXZlcnktc2NoZWR1bGUtd2FyZWhvdXNlLWNoYXJ0ZXItcHJpbnQnLFxuICBwcm9wczogWyd3YXJlaG91c2UnLCAnZGF0ZWZyb21zdHJpbmcnLCAndG91cnMnXSxcbiAgZGF0YTogKCkgPT4gKHtcbiAgfSksXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gUHJpbnQgc2NoZWR1bGVcbiAgICB3aW5kb3cucHJpbnQoKTtcbiAgICAvLyBDbG9zZSB3aW5kb3cgYWZ0ZXIgcHJpbnRcbiAgICB3aW5kb3cub25hZnRlcnByaW50ID0gKCkgPT4geyB3aW5kb3cuY2xvc2UoKTsgfTtcbiAgfSxcbn0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG5cbnRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLWNvbGxhcHNlOiAgY29sbGFwc2U7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cblxudGgge1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzYsIDE1NiwgMTk5LCAwLjk4KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG50ZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ucmVkIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICAgICA8IS0tIE9yZGVycyAtLT5cbiAgICA8ZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzPVwibXQtNCBtYi04XCIgPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAxMDBweFwiPkRhdGU8L3RoPlxuICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMTAwcHhcIj5OwrAgaW1tYXQuPC90aD5cbiAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDIwMHB4XCI+Tm9tIGNoYXVmZmV1cjwvdGg+XG4gICAgICAgICAgICAgIDx0aD5UcmF2YWlsIMOgIHLDqWFsaXNlcjwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm9ic2VydmF0aW9uc1wiPk9ic2VydmF0aW9uczwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIHYtZm9yPVwidG91ciBpbiB0b3Vyc1wiPlxuICAgICAgICAgICAgPHRkPnt7IHRvdXIuZGF0ZVdpdGhvdXRIb3VyIHwgZmlsdGVyRGF0ZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+PHN0cm9uZz57eyB0b3VyLnRydWNrLm51bWJlcnBsYXRlIH19PC9zdHJvbmc+PC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICB7eyB0b3VyLmRyaXZlci5maXJzdG5hbWUgfX08YnI+XG4gICAgICAgICAgICAgICAge3sgdG91ci5kcml2ZXIubGFzdG5hbWUgfX08YnI+XG4gICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZC0tdGV4dFwiPlxuICAgICAgICAgICAgICAgIHt7IHRvdXIuZHJpdmVyLnBob25lfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHVsIHYtZm9yPVwic2NoZWR1bGVPcmRlciBpbiB0b3VyLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnNcIiBzdHlsZT1cImxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcIj5cbiAgICAgICAgICAgICAgICA8bGkgdi1pZj1cInNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIgJiYgIHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgPT0gd2FyZWhvdXNlLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIC0mbmJzcDs8c3Ryb25nPnt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlfb3JkZXIud2FyZWhvdXNlLm5hbWUgfX08L3N0cm9uZz4gOlxuICAgICAgICAgICAgICAgICAge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5wcm9kdWN0Lm5hbWUgfX0gLSB7eyBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5X3F1YW50aXR5IH19IFQgLVxuICAgICAgICAgICAgICAgICAge3sgc2NoZWR1bGVPcmRlci5kZWxpdmVyeV9vcmRlci5zaXRlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLm1vbWVudERheSB8fCBzY2hlZHVsZU9yZGVyLmRlbGl2ZXJ5SG91clwiPiAtXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLm1vbWVudERheVwiICBjbGFzcz1cInJlZC0tdGV4dFwiPnt7IHNjaGVkdWxlT3JkZXIubW9tZW50RGF5Lm9wZW5pbmdUaW1lLm5hbWUgfX0ge3sgc2NoZWR1bGVPcmRlci5jb21tZW50X21vbWVudHMgPyBzY2hlZHVsZU9yZGVyLmNvbW1lbnRfbW9tZW50cyA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwic2NoZWR1bGVPcmRlci5kZWxpdmVyeUhvdXJcIiBjbGFzcz1cInJlZC0tdGV4dFwiPnt7IHNjaGVkdWxlT3JkZXIuZGVsaXZlcnlIb3VyIHwgZmlsdGVyRGF0ZVRvSG91ciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJzY2hlZHVsZU9yZGVyLnNjaGVkdWxlX2NvbW1lbnRcIj4gLSB7eyBzY2hlZHVsZU9yZGVyLnNjaGVkdWxlX2NvbW1lbnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgdHlwZT1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG4vLyBLZWVwIG9ubHkgaG91ciBmcm9tIGRhdGV0aW1lXG5WdWUuZmlsdGVyKCdmaWx0ZXJEYXRlVG9Ib3VyJywgZnVuY3Rpb24oZGF0ZSkge1xuICBpZiAoZGF0ZSkge1xuICAgIHJldHVybiBtb21lbnQoU3RyaW5nKGRhdGUpKS5mb3JtYXQoJ0hIOm1tJylcbiAgfVxufSk7XG5cbi8vIEZvcm1hdCBkYXRldGltZSBpbiBmcmVuY2ggZGlzcGxheVxuVnVlLmZpbHRlcignZmlsdGVyRGF0ZScsIGZ1bmN0aW9uKGRhdGUpIHtcbiAgaWYgKGRhdGUpIHtcbiAgICByZXR1cm4gbW9tZW50KFN0cmluZyhkYXRlKSkuZm9ybWF0KCdERC9NTS9ZWVlZJylcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiAnZGVsaXZlcnktc2NoZWR1bGUtd2FyZWhvdXNlLXByaW50JyxcbiAgcHJvcHM6IFsnd2FyZWhvdXNlJywgJ2RhdGVmcm9tc3RyaW5nJywgJ3RvdXJzJ10sXG4gIGRhdGE6ICgpID0+ICh7XG4gIH0pLFxuICBtb3VudGVkKCkge1xuICAgIC8vIFByaW50IHNjaGVkdWxlXG4gICAgd2luZG93LnByaW50KCk7XG4gICAgLy8gQ2xvc2Ugd2luZG93IGFmdGVyIHByaW50XG4gICAgd2luZG93Lm9uYWZ0ZXJwcmludCA9ICgpID0+IHsgd2luZG93LmNsb3NlKCk7IH07XG4gIH0sXG59KTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuXG50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1jb2xsYXBzZTogIGNvbGxhcHNlO1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbnRoIHtcbiAgY29sb3I6IGJsYWNrO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxudGgub2JzZXJ2YXRpb25zIHtcbiAgd2lkdGg6MjUlO1xufVxuXG50ZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc2LCAxNTYsIDE5OSwgMC45OCk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxudGgsIHRkIHtcbiAgcGFkZGluZzogMnB4IDVweDtcbn1cblxuaDQge1xuICB0ZXh0LWFsaWduOiBjZW50ZXJcbn1cblxuLnJlZCB7XG4gIGNvbG9yOiByZWQ7XG59XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIj5cbiAgICA8bC1tYXBcbiAgICAgIHYtaWY9XCJzaG93TWFwXCJcbiAgICAgIHJlZj1cIm1hcFwiXG4gICAgICA6em9vbT1cInpvb21cIlxuICAgICAgOmNlbnRlcj1cImNlbnRlclwiXG4gICAgICA6b3B0aW9ucz1cIm9wdGlvbnNcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxuICAgICAgQHVwZGF0ZTpjZW50ZXI9XCJjZW50ZXJVcGRhdGVcIlxuICAgICAgQHVwZGF0ZTp6b29tPVwiem9vbVVwZGF0ZVwiXG4gICAgPlxuICAgICAgPGwtY29udHJvbC1sYXllcnMgcG9zaXRpb249XCJ0b3ByaWdodFwiPjwvbC1jb250cm9sLWxheWVycz5cbiAgICAgIDxsLWNvbnRyb2wtc2NhbGUgcG9zaXRpb249XCJib3R0b21sZWZ0XCIgOmltcGVyaWFsPVwiZmFsc2VcIiA6bWV0cmljPVwidHJ1ZVwiPjwvbC1jb250cm9sLXNjYWxlPlxuICAgICAgPGwtdGlsZS1sYXllclxuICAgICAgICB2LWZvcj1cInRpbGVQcm92aWRlciBpbiB0aWxlUHJvdmlkZXJzXCJcbiAgICAgICAgOmtleT1cInRpbGVQcm92aWRlci5uYW1lXCJcbiAgICAgICAgOm5hbWU9XCJ0aWxlUHJvdmlkZXIubmFtZVwiXG4gICAgICAgIDp2aXNpYmxlPVwidGlsZVByb3ZpZGVyLnZpc2libGVcIlxuICAgICAgICA6dXJsPVwidGlsZVByb3ZpZGVyLnVybFwiXG4gICAgICAgIGxheWVyLXR5cGU9XCJiYXNlXCJcbiAgICAgID5cbiAgICAgIDwvbC10aWxlLWxheWVyPlxuICAgICAgPGwtZmVhdHVyZS1ncm91cCByZWY9XCJmZWF0dXJlc1wiPjwvbC1mZWF0dXJlLWdyb3VwPlxuICAgIDwvbC1tYXA+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCB0eXBlPVwidHNcIj5cbiAgaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG4gIGltcG9ydCBMIGZyb20gXCJsZWFmbGV0XCI7XG4gIGltcG9ydCBMRHJhdyBmcm9tIFwibGVhZmxldC1kcmF3XCI7XG4gIGltcG9ydCBMUm91dGluZyBmcm9tIFwibGVhZmxldC1yb3V0aW5nLW1hY2hpbmVcIjtcbiAgaW1wb3J0IHsgTE1hcCwgTFRpbGVMYXllciwgTENvbnRyb2xMYXllcnMsIExDb250cm9sU2NhbGUsIExGZWF0dXJlR3JvdXAsIExJY29uLCBMTWFya2VyIH0gZnJvbSBcInZ1ZTItbGVhZmxldFwiO1xuICAvLyBpbXBvcnQgJ2xlYWZsZXQubWFya2VyY2x1c3Rlcic7XG5cbiAgZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gICAgbmFtZTogXCJtYWtlLWl0aW5lcmFyeS1tYXBcIixcbiAgICBwcm9wczogW1wibWFya2Vyc1wiLCBcImNlbnRlclwiLCBcInpvb21cIl0sXG4gICAgY29tcG9uZW50czogeyBMTWFwLCBMVGlsZUxheWVyLCBMQ29udHJvbExheWVycywgTENvbnRyb2xTY2FsZSwgTEZlYXR1cmVHcm91cCwgTEljb24sIExNYXJrZXIgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgY3VycmVudFpvb206IDExLjUsXG4gICAgICBjdXJyZW50Q2VudGVyOiBudWxsLFxuICAgICAgb3B0aW9uczogeyB6b29tU25hcDogMC41IH0sXG4gICAgICBtYXA6IG51bGwsXG4gICAgICB0aWxlUHJvdmlkZXJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJQbGFuIGNvdWxldXJcIiwgdmlzaWJsZTogdHJ1ZSwgdXJsOiBcImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIlBsYW4gbm9pciBldCBibGFuY1wiLCB2aXNpYmxlOiBmYWxzZSwgdXJsOiBcImh0dHBzOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL2J3LW1hcG5pay97en0ve3h9L3t5fS5wbmdcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiU2F0ZWxsaXRlXCIsIHZpc2libGU6IGZhbHNlLCB1cmw6IFwiaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9Xb3JsZF9JbWFnZXJ5L01hcFNlcnZlci90aWxlL3t6fS97eX0ve3h9XCIgfSxcbiAgICAgIF0sXG4gICAgICBkcmF3bkl0ZW1zOiBudWxsLFxuICAgICAgcm91dGluZ0NvbnRyb2w6IG51bGwsXG4gICAgICBtYXJrZXJzTGlzdDogW10sXG4gICAgICBzaG93TWFwOiBmYWxzZVxuICAgIH0pLFxuICAgIHdhdGNoOiB7XG4gICAgICBtYXJrZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubWFya2Vyc0xpc3QgPSB0aGlzLm1hcmtlcnMgPyBbLi4udGhpcy5tYXJrZXJzXSA6IFtdO1xuICAgICAgICB0aGlzLmRyYXdNYXJrZXJzRGlyZWN0aW9uKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMubWFya2Vyc0xpc3QgPSB0aGlzLm1hcmtlcnMgPyBbLi4udGhpcy5tYXJrZXJzXSA6IFtdO1xuXG4gICAgICAvLyBXYWl0aW5nIG1hcCBpbml0XG4gICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2hvd01hcCA9IHRydWU7XG4gICAgICAgIF90aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgLy8gSW5pdCBsZWFmbGV0IG1hcFxuICAgICAgICAgIF90aGlzLmluaXRNYXAoKTtcbiAgICAgICAgICAvLyBEcmF3IG1hcmtlcnMgYW5kIGRpcmVjdGlvblxuICAgICAgICAgIF90aGlzLmRyYXdNYXJrZXJzRGlyZWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgMjAwKTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHpvb21VcGRhdGUoem9vbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gem9vbTtcbiAgICAgIH0sXG4gICAgICBjZW50ZXJVcGRhdGUoY2VudGVyKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENlbnRlciA9IGNlbnRlcjtcbiAgICAgIH0sXG4gICAgICBpbml0TWFwKCkge1xuICAgICAgICAvLyBNYXBcbiAgICAgICAgdGhpcy5tYXAgPSB0aGlzLiRyZWZzLm1hcC5tYXBPYmplY3Q7XG4gICAgICAgIC8vIEl0ZW1zXG4gICAgICAgIHRoaXMuZHJhd25JdGVtcyA9IEwuZmVhdHVyZUdyb3VwKCk7XG4gICAgICAgIHRoaXMuZHJhd25JdGVtcy5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICB9LFxuICAgICAgd2F5cG9pbnRzQ2hhbmdlZChlKSB7XG4gICAgICAgIHRoaXMubWFya2Vyc0xpc3QgPSB0aGlzLnJvdXRpbmdDb250cm9sLmdldFdheXBvaW50cygpLm1hcCgodykgPT4ge1xuICAgICAgICAgIGlmICh3LmxhdExuZykgeyAvLyBPbmx5IG1hcmtlcnMgd2l0aCBjb29yZGluYXRlc1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IHcubGF0TG5nLmxhdCxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiB3LmxhdExuZy5sbmcsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB3Lm9wdGlvbnMgJiYgdy5vcHRpb25zLmRlc2NyaXB0aW9uID8gdy5vcHRpb25zLmRlc2NyaXB0aW9uIDogXCJcIixcbiAgICAgICAgICAgICAgdGl0bGU6IHcub3B0aW9ucyAmJiB3Lm9wdGlvbnMudGl0bGUgPyB3Lm9wdGlvbnMudGl0bGUgOiBcIlwiLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogdy5vcHRpb25zICYmIHcub3B0aW9ucy5wb3NpdGlvbiA/IHcub3B0aW9ucy5wb3NpdGlvbiA6IG51bGwsXG4gICAgICAgICAgICAgIGNvbG9yOiB3Lm9wdGlvbnMgJiYgdy5vcHRpb25zLmNvbG9yID8gdy5vcHRpb25zLmNvbG9yIDogbnVsbCxcbiAgICAgICAgICAgICAgdHlwZTogdy5vcHRpb25zICYmIHcub3B0aW9ucy50eXBlID8gdy5vcHRpb25zLnR5cGUgOiBudWxsLFxuICAgICAgICAgICAgICBhZGRpdGlvbm5hbHM6ICEody5vcHRpb25zICYmIHcub3B0aW9ucy5pZCksXG4gICAgICAgICAgICAgIHV1aWQ6IHcub3B0aW9ucyAmJiB3Lm9wdGlvbnMudXVpZCA/IHcub3B0aW9ucy51dWlkIDogTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDE1KSxcbiAgICAgICAgICAgICAgaWQ6IHcub3B0aW9ucy5pZCxcbiAgICAgICAgICAgICAgaXNOZXc6IHcub3B0aW9ucyAmJiB3Lm9wdGlvbnMuaXNOZXdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KS5maWx0ZXIodyA9PiB3KTsgLy8gTm90IGVtcHR5IG9yIG51bGwgbWFya2Vyc1xuXG4gICAgICAgIHRoaXMuJGVtaXQoXCJ1cGRhdGVNYXJrZXJzXCIsIHRoaXMubWFya2Vyc0xpc3QpO1xuICAgICAgfSxcbiAgICAgIGRyYXdNYXJrZXJzRGlyZWN0aW9uKCkge1xuICAgICAgICBsZXQgbWFya2VycyA9IHRoaXMubWFya2Vyc0xpc3QubWFwKG0gPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYXRMbmc6IEwubGF0TG5nKG0ubGF0aXR1ZGUsIG0ubG9uZ2l0dWRlKSxcbiAgICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIHRpdGxlOiBtLm5hbWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBpZDogbS5pZCxcbiAgICAgICAgICAgICAgdXVpZDogbS51dWlkLFxuICAgICAgICAgICAgICBjb2xvcjogbS5jb2xvcixcbiAgICAgICAgICAgICAgdHlwZTogKG0udHlwZSA/PyBudWxsKSxcbiAgICAgICAgICAgICAgcG9zaXRpb246IChtLnBvc2l0aW9uID8/ICcnKSxcbiAgICAgICAgICAgICAgaXNOZXc6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBtYW51YWw6IHRydWUsXG4gICAgICAgICAgICBhZGRpdGlvbm5hbHM6IG0uYWRkaXRpb25uYWxzXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBEZWxldGUgY29udHJvbCB0byBjcmVhdGUgbmV3IG9uZVxuICAgICAgICBpZiAodGhpcy5yb3V0aW5nQ29udHJvbCkgeyB0aGlzLm1hcC5yZW1vdmVDb250cm9sKHRoaXMucm91dGluZ0NvbnRyb2wpOyB9XG4gICAgICAgIC8vIEFkZCByb3V0aW5nIHdpdGggc2VsZWN0ZWQgcG9pbnRzXG4gICAgICAgIHRoaXMucm91dGluZ0NvbnRyb2wgPSBMLlJvdXRpbmcuY29udHJvbCh7XG4gICAgICAgICAgc2hvdzogZmFwbGFubmluZ2xzZSxcbiAgICAgICAgICB3YXlwb2ludHM6IG1hcmtlcnMsXG4gICAgICAgICAgbGluZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHN0eWxlcyA6IFt7Y29sb3I6ICcjMDA0NDg3Jywgb3BhY2l0eTogMC42LCB3ZWlnaHQ6IDd9XVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3JlYXRlTWFya2VyOiAoaW5kZXgsIHdheXBvaW50LCBuYldwcykgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7IG1hcmtlcnMuZm9yRWFjaCgobSkgPT4gbS51c2VkID0gZmFsc2UpOyB9XG5cbiAgICAgICAgICAgIGxldCBzbWFsbFNpemUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIFNldCBwb3NpdGlvblxuICAgICAgICAgICAgaWYgKCF3YXlwb2ludC5vcHRpb25zKSB7IHdheXBvaW50Lm9wdGlvbnMgPSB7fTsgfVxuICAgICAgICAgICAgd2F5cG9pbnQub3B0aW9ucy5pc05ldyA9ICF3YXlwb2ludC5tYW51YWwgPyAhd2F5cG9pbnQub3B0aW9ucy5pc05ldyA6IGZhbHNlO1xuICAgICAgICAgICAgbGV0IG1hcmtlck5hbWUgPSB3YXlwb2ludC5vcHRpb25zLnBvc2l0aW9uO1xuICAgICAgICAgICAgLy8gQmx1ZSBjb2xvciBmb3IgZGV0b3VyXG4gICAgICAgICAgICBpZiAod2F5cG9pbnQub3B0aW9ucy5pc05ldykgeyB3YXlwb2ludC5vcHRpb25zLmNvbG9yID0gJyNBQ0Y0RkYnOyB9XG5cbiAgICAgICAgICAgIC8vIE1hcmtlciBhbHJlYWR5IGV4aXN0ID9cbiAgICAgICAgICAgIGxldCBtYXJrcyA9IG1hcmtlcnMuZmlsdGVyKGQgPT4gZC5sYXRMbmcubGF0ID09PSB3YXlwb2ludC5sYXRMbmcubGF0ICYmIGQubGF0TG5nLmxuZyA9PT0gd2F5cG9pbnQubGF0TG5nLmxuZyk7XG4gICAgICAgICAgICAvLyBNZXJnZSBtYXJrZXJzIHBvc2l0aW9uc1xuICAgICAgICAgICAgaWYgKG1hcmtzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gU3RvcCBjcmVhdGUgbWFya2Vyc1xuICAgICAgICAgICAgICBpZiAobWFya3Muc29tZShtID0+IG0udXNlZCkpIHsgcmV0dXJuIG51bGw7IH1cbiAgICAgICAgICAgICAgLy8gQ3JlYXRlIG1hcmtlclxuICAgICAgICAgICAgICBtYXJrcy5mb3JFYWNoKG0gPT4gbS51c2VkID0gdHJ1ZSk7XG4gICAgICAgICAgICAgIC8vIFNldCBwb3NpdGlvbiB3aXRoIHVuaXF1ZSBudW1iZXJzXG4gICAgICAgICAgICAgIGxldCBwb3NOdW1iZXJzID0gW10uY29uY2F0KC4uLm1hcmtzLm1hcChtID0+IG0ub3B0aW9ucy5wb3NpdGlvbi5zcGxpdCgnIC0gJykpKVxuICAgICAgICAgICAgICBsZXQgdW5pcXVlTnVtYmVycyA9IHBvc051bWJlcnMuZmlsdGVyKCh2LCBpLCBzKSA9PiBzLmluZGV4T2YodikgPT09IGkpO1xuICAgICAgICAgICAgICB3YXlwb2ludC5vcHRpb25zLnBvc2l0aW9uID0gdW5pcXVlTnVtYmVycy5qb2luKCcgLSAnKTtcbiAgICAgICAgICAgICAgbWFya2VyTmFtZSA9IHVuaXF1ZU51bWJlcnMubGVuZ3RoIDw9IDIgPyB3YXlwb2ludC5vcHRpb25zLnBvc2l0aW9uIDogJyoqKic7XG4gICAgICAgICAgICAgIHNtYWxsU2l6ZSA9IChtYXJrcy5sZW5ndGggPiAxICYmIHVuaXF1ZU51bWJlcnMubGVuZ3RoIDw9IDIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDUkVBVEUgTUFSS0VSXG4gICAgICAgICAgICBsZXQgbWFya2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgaWNvbjogdGhpcy5nZXREZWZhdWx0TWFya2VyKG1hcmtlck5hbWUsIHdheXBvaW50Lm9wdGlvbnMuY29sb3IgPyB3YXlwb2ludC5vcHRpb25zLmNvbG9yIDogJyMwMDQ0ODcnLCBzbWFsbFNpemUpLFxuICAgICAgICAgICAgICBkcmFnZ2FibGU6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBNYXJrZXIgdXVpZFxuICAgICAgICAgICAgaWYgKCF3YXlwb2ludC5vcHRpb25zLnV1aWQpIHtcbiAgICAgICAgICAgICAgd2F5cG9pbnQub3B0aW9ucy51dWlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDE1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hcmtlck9wdGlvbnMudXVpZCA9IHdheXBvaW50Lm9wdGlvbnMudXVpZDtcbiAgICAgICAgICAgIC8vIE1hcmtlciB0aXRsZVxuICAgICAgICAgICAgaWYgKHdheXBvaW50Lm9wdGlvbnMgJiYgd2F5cG9pbnQub3B0aW9ucy50aXRsZSkge1xuICAgICAgICAgICAgICBtYXJrZXJPcHRpb25zLnRpdGxlID0gd2F5cG9pbnQub3B0aW9ucy50aXRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSBtYXJrZXJcbiAgICAgICAgICAgIGxldCBtYXJrZXIgPSBMLm1hcmtlcihcbiAgICAgICAgICAgICAgW3dheXBvaW50LmxhdExuZy5sYXQsIHdheXBvaW50LmxhdExuZy5sbmddLFxuICAgICAgICAgICAgICBtYXJrZXJPcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gTWVya2VyIHBvcHVwIGRlc2NcbiAgICAgICAgICAgIGlmICh3YXlwb2ludC5vcHRpb25zICYmIHdheXBvaW50Lm9wdGlvbnMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgLy8gQ29udGVudCBvZiBwb3B1cDogaGVyZSB0aGUgc3RlcCBudW1iZXIgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIG1hcmtlci5iaW5kUG9wdXAoJ1snICsgd2F5cG9pbnQub3B0aW9ucy5wb3NpdGlvbiArICddIC0gJyArIHdheXBvaW50Lm9wdGlvbnMuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAvLyBEaXNwbGF5L2hpZGUgcG9wdXAgb24gbW91c2Ugb3Zlci9vdXRcbiAgICAgICAgICAgICAgbWFya2VyLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoKSB7IHRoaXMub3BlblBvcHVwKCkgfSk7XG4gICAgICAgICAgICAgIG1hcmtlci5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAoKSB7IHRoaXMuY2xvc2VQb3B1cCgpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlcjtcbiAgICAgICAgICB9LFxuICAgICAgICB9KS5vbignd2F5cG9pbnRzY2hhbmdlZCcsIHRoaXMud2F5cG9pbnRzQ2hhbmdlZCk7XG4gICAgICAgIC8vIEFkZCB0byBtYXBcbiAgICAgICAgaWYgKHRoaXMucm91dGluZ0NvbnRyb2wgJiYgdGhpcy5tYXApIHsgdGhpcy5yb3V0aW5nQ29udHJvbC5hZGRUbyh0aGlzLm1hcCk7IH1cbiAgICAgIH0sXG4gICAgICBnZXREZWZhdWx0TWFya2VyKHRleHQgPSAnJywgY29sb3IgPSAnIzAwNDQ4NycsIHNtYWxsU2l6ZSkge1xuICAgICAgICByZXR1cm4gTC5kaXZJY29uKHtcbiAgICAgICAgICBpY29uU2l6ZTogbnVsbCxcbiAgICAgICAgICBodG1sOic8ZGl2IGNsYXNzPVwibWFya2VyXCI+JyArXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCInICsgKHNtYWxsU2l6ZSA/ICdwb3MtY3VzdG9tLXNtYWxsJyA6ICdwb3MtY3VzdG9tJykgKyAnXCI+JyArIHRleHQucmVwbGFjZUFsbCgnIC0gJywgJzxicj4nKSArICc8L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtYXJrZXItY3VzdG9tXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAnICsgY29sb3IgKyAnXCI+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAnPC9kaXY+J1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4gIC8qIEhpZGUgbGVhZmxldCBpdGluZXJhcnkgKi9cbiAgZGl2LmxlYWZsZXQtdG9wLmxlYWZsZXQtcmlnaHQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICB9XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgPHNsb3QgbmFtZT1cIm1haW5cIj48L3Nsb3Q+XG4gICAgPC92LXJvdz5cbiAgICA8di1yb3cgbm8tZ3V0dGVycyBjbGFzcz1cInB4LTFcIj5cbiAgICAgIDx2LWNoZWNrYm94IHYtbW9kZWw9XCJpc1BhcmVudFwiIGxhYmVsPVwiQ2UgbW9kdWxlIGVzdC1pbCB1biBlbmZhbnQgP1wiPjwvdi1jaGVja2JveD5cbiAgICA8L3Ytcm93PlxuICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgPHNsb3Qgdi1pZj1cImlzUGFyZW50XCIgbmFtZT1cInBhcmVudFwiPjwvc2xvdD5cbiAgICA8L3Ytcm93PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwibW9kdWxlLWVkaXQtZm9ybVwiLFxuICBwcm9wczogW1wibW9kdWxlXCJdLFxuICBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLmlzUGFyZW50ID0gdGhpcy5tb2R1bGUucGFyZW50ICE9IG51bGw7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNQYXJlbnQ6IGZhbHNlLFxuICAgIH07XG4gIH0sXG59KTtcblxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4ubGFiZWwge1xuICB3aWR0aDogMTIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBpZD1cImNhcmRcIj5cbiAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgICA8di1jYXJkIGNsYXNzPVwibXgtYXV0byBjYXJkXCIgbWF4LXdpZHRoPVwiMTAwJVwiIG91dGxpbmVkPlxuICAgICAgPHYtaW1nIHNyYz1cIi9idWlsZC9pbWFnZXMvYmxhbmMuanBnXCIgaGVpZ2h0PVwiMTUwXCIgY29udGFpbj48L3YtaW1nPlxuICAgICAgPGRpdiBjbGFzcz1cImluZm9DYXJkXCI+XG4gICAgICAgIDxzcGFuIGNvbG9yPVwiI2YzZjNmM1wiPnt7IHByb2R1Y3QuY2F0ZWdvcnkgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7IHByb2R1Y3QubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+UHJpeCBwYXIge3sgdGhpcy5wcmljZSB9fSA6PC9zcGFuPlxuICAgICAgICA8c3BhbiB2LWlmPVwicHJpY2luZyA9PT0gJ3ByaWNlNidcIj57eyBwcm9kdWN0LnByaWNlNiB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1lbHNlLWlmPVwicHJpY2luZyA9PT0gJ3ByaWNlMzYnXCI+e3sgcHJvZHVjdC5wcmljZTM2IH19PC9zcGFuPlxuICAgICAgICA8c3BhbiB2LWVsc2UtaWY9XCJwcmljaW5nID09PSAncHJpY2U3MidcIj57eyBwcm9kdWN0LnByaWNlNzIgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIHYtZWxzZS1pZj1cInByaWNpbmcgPT09ICdwcmljZTEyMCdcIj57eyBwcm9kdWN0LnByaWNlMTIwIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiB2LWVsc2UtaWY9XCJwcmljaW5nID09PSAncHJpY2UxODAnXCI+e3sgcHJvZHVjdC5wcmljZTE4MCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1lbHNlLWlmPVwicHJpY2luZyA9PT0gJ3ByaWNlMjQwJ1wiPnt7IHByb2R1Y3QucHJpY2UyNDAgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIHYtZWxzZS1pZj1cInByaWNpbmcgPT09ICdwcmljZTMwMCdcIj57eyBwcm9kdWN0LnByaWNlMzAwIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiB2LWVsc2UtaWY9XCJwcmljaW5nID09PSAncHJpY2U2MDAnXCI+e3sgcHJvZHVjdC5wcmljZTYwMCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cbiAgICAgICAgPHYtYnRuIHRleHQ+RMOpdGFpbHM8L3YtYnRuPlxuICAgICAgICA8di1idG4gdGV4dD48di1pY29uPm1kaS1oZWFydC1vdXRsaW5lPC92LWljb24+PC92LWJ0bj5cbiAgICAgICAgPHYtYnRuIGNvbG9yPVwic2Vjb25kYXJ5XCIgdGV4dFxuICAgICAgICAgID48di1pY29uPm1kaS1iYXNrZXQtcGx1cy1vdXRsaW5lPC92LWljb24+PC92LWJ0blxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L3YtY2FyZD5cbiAgICA8di1zcGFjZXI+PC92LXNwYWNlcj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IGxhbmc9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcInByb2R1Y3QtY2FyZFwiLFxuICBwcm9wczogW1wicHJvZHVjdFwiLCBcInByaWNlXCJdLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICAgIHByaWNpbmc6IFwicHJpY2VcIiArIHRoaXMucHJpY2UsXG4gICAgfTtcbiAgfSxcbn0pO1xuPC9zY3JpcHQ+XG4gICBcbjxzdHlsZSBzY29wZWQ+XG4jY2FyZCB7XG4gIHdpZHRoOiAzMSU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAwcHggMjBweCAyMHB4IDBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnYtaW1hZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAzMCU7XG59XG4uaW5mb0NhcmQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiA1MCU7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4uaW5mb0NhcmQgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmb250LXNpemU6IDE4cHg7XG59XG4uaW5mb0NhcmQgc3BhbjpudGgtY2hpbGQoMSkge1xuICBjb2xvcjogIzcwNzA3MDtcbn1cbi5pbmZvQ2FyZCBzcGFuOm50aC1jaGlsZCgzKSB7XG4gIGNvbG9yOiAjNzA3MDcwO1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAxMXB4O1xufVxuLmluZm9DYXJkIHNwYW46bnRoLWNoaWxkKDQpIHtcbiAgY29sb3I6ICNmZDZlNjA7XG4gIGZvbnQtc2l6ZTogMjhweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uYnV0dG9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnYtYnRuIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYzJjMmMyO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2MyYzJjMjtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgaGVpZ2h0OiA2MHB4O1xuICBmbGV4OiAyIDEgMTAwcHg7XG59XG4udi1idG46bnRoLWNoaWxkKDEpIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDx2LWNvbCB2LWlmPVwiaXNFZGl0XCI+XG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPC92LWNvbD5cbiAgICA8di1jb2wgdi1lbHNlPlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+Tm9tPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIj57eyB1c2VyLmZpcnN0bmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZVwiPnt7IHVzZXIubGFzdG5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPkVtYWlsPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+e3sgdXNlci5lbWFpbCB9fTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlTDqWzDqXBob25lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCI+e3sgdXNlci5hZGRyZXNzID8gdXNlci5hZGRyZXNzLnBob25lIDogJy0nfX08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5BZHJlc3NlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCIgdi1pZj1cInVzZXIuYWRkcmVzc1wiPlxuICAgICAgICAgIDxzcGFuPnt7IHVzZXIuYWRkcmVzcy5hZGRyZXNzMSB9fSwge3sgdXNlci5hZGRyZXNzLnBvc3Rjb2RlIH19IHt7IHVzZXIuYWRkcmVzcy5jaXR5IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7IHVzZXIuYWRkcmVzcy5jb3VudHJ5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiB2LWVsc2U+LTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICA8L3YtY29sPlxuICAgIDx2LXJvdyBuby1ndXR0ZXJzIDpqdXN0aWZ5PVwiJHZ1ZXRpZnkuYnJlYWtwb2ludC5tZEFuZFVwID8gJ2VuZCcgOiAnY2VudGVyJ1wiIHYtaWY9XCIhaXNFZGl0XCI+XG4gICAgICA8di1idG4gY29sb3I9XCJzZWNvbmRhcnlcIiB2LW9uOmNsaWNrPVwiaXNFZGl0ID0gIWlzRWRpdFwiPlxuICAgICAgICA8di1pY29uIGxlZnQ+bWRpLXBlbmNpbDwvdi1pY29uPlxuICAgICAgICBNb2RpZmllciBsZXMgaW5mb3JtYXRpb25zXG4gICAgICA8L3YtYnRuPlxuICAgIDwvdi1yb3c+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBsYW5nPVwidHNcIj5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogXCJ1c2VyLWVkaXQtZm9ybVwiLFxuICBwcm9wczogW1widXNlclwiXSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGVtaXR0ZXIub24oXCJ0b2dnbGUtdXNlci1pbmZvXCIsICgpID0+IHtcbiAgICAgIHRoaXMuaXNFZGl0ID0gIXRoaXMuaXNFZGl0O1xuICAgIH0pO1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRWRpdDogZmFsc2UsXG4gICAgfTtcbiAgfSxcbn0pO1xuXG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5sYWJlbCB7XG4gIHdpZHRoOiAxMjBweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHYtY2FyZD5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8di1jb2wgbWQ9XCIyXCI+XG4gICAgICAgICAgPHYtY2hlY2tib3ggY2xhc3M9XCJtbC0zIG10LTNcIiB2LW1vZGVsPVwiZm9ybS5pc0NoYXJ0ZWRcIiA6dmFsdWU9XCJmb3JtLmlzQ2hhcnRlZFwiIGxhYmVsPVwiQWZmcsOodGVtZW50XCIgaGlkZS1kZXRhaWxzIG5hbWU9XCJpc19jaGFydGVkXCI+PC92LWNoZWNrYm94PlxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2wgbWQ9XCIyXCI+XG4gICAgICAgICAgPHYtY2hlY2tib3ggY2xhc3M9XCJtbC0zIG10LTNcIiB2LW1vZGVsPVwiZm9ybS5pc0luZXJ0XCIgOnZhbHVlPVwiZm9ybS5pc0luZXJ0XCIgbGFiZWw9XCJJbmVydGVcIiBoaWRlLWRldGFpbHMgbmFtZT1cImlzX2luZXJ0XCI+PC92LWNoZWNrYm94PlxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8di1jb2w+XG4gICAgICAgICAgPGFwaS1zZWxlY3QtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgIHNlbGVjdC1jbGFzcz1cInBhLTIgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICBmb3JtTmFtZT1cImN1c3RvbWVyXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJjb2RlTmFtZVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwidXVpZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2xpZW50XCJcbiAgICAgICAgICAgICAgOmZpbHRlcnM9XCJmb3JtXCJcbiAgICAgICAgICAgICAgZmlsdGVyLW5hbWU9XCJjdXN0b21lcnV1aWRcIlxuICAgICAgICAgICAgICByZXNvdXJjZT1cImFjY291bnRzXCJcbiAgICAgICAgICAgICAgOnBhcmFtcz1cIntvcmRlcjoge2NvZGU6ICdhc2MnfSwgdHlwZTogMSwgaXNBcmNoaXZlZDogJzAnfVwiXG4gICAgICAgICAgICAgIDpyZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICBAY2hhbmdlPVwic2l0ZUtleSsrXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwib3JpZ2luID09PSAncXVvdGUnXCJcbiAgICAgICAgICAgICAgOmtleT1cImN1c3RvbWVyS2V5XCJcbiAgICAgICAgICAgICAgOmdyb3Vwcz1cIlsnYXBpOmFjY291bnQnXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXBpLXNlbGVjdC1hdXRvY29tcGxldGU+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICAgIDx2LWNvbD5cbiAgICAgICAgICA8YXBpLXNlbGVjdC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgc2VsZWN0LWNsYXNzPVwicGEtMiByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIDprZXk9XCJzaXRlS2V5XCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGZvcm1OYW1lPVwic2l0ZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2hhbnRpZXJcIlxuICAgICAgICAgICAgICA6ZmlsdGVycz1cImZvcm1cIlxuICAgICAgICAgICAgICBmaWx0ZXItbmFtZT1cInNpdGVcIlxuICAgICAgICAgICAgICByZXNvdXJjZT1cInNpdGVzXCJcbiAgICAgICAgICAgICAgOnBhcmFtcz1cInsnb3JkZXInOiB7IG5hbWU6ICdhc2MnIH0sICdjbGllbnQudXVpZCc6IGZvcm0uY3VzdG9tZXJ1dWlkID8gZm9ybS5jdXN0b21lcnV1aWQgOiBudWxsfVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cIm9yaWdpbiA9PT0gJ3F1b3RlJ1wiXG4gICAgICAgICAgICAgIDpyZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICBuYW1lPVwic2l0ZVwiXG4gICAgICAgICAgICAgIEBjaGFuZ2U9XCJ1cGRhdGVTaXRlXCJcbiAgICAgICAgICAgICAgOmdyb3Vwcz1cIlsnYXBpOmFjY291bnQnXVwiXG4gICAgICAgICAgICAgIDpsaXN0cy5zeW5jPVwic2l0ZXNcIlxuICAgICAgICAgID48L2FwaS1zZWxlY3QtYXV0b2NvbXBsZXRlPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2w+XG4gICAgICAgICAgPCEtLSBPbiBjbGljaywgY3JlYXRlIGV2ZW50IFwib3Blbk1vZGFsU2l0ZVwiIGFuZCBwYXNzIGl0IHN0YXRlIGFuZCBjdXN0b21lciAtLT5cbiAgICAgICAgICA8di1idG4gdi1pZj1cIihvcmlnaW4gPT09ICdtYW51YWwnIHx8IG9yaWdpbiA9PT0gJ3NwbGl0JylcIiBjbGFzcz1cIm10LTIgbWwtNVwiIGNvbG9yPVwicHJpbWFyeVwiIDpkaXNhYmxlZD1cIiFmb3JtLmN1c3RvbWVydXVpZFwiXG4gICAgICAgICAgICAgICAgIEBjbGljaz1cIiRlbWl0dGVyLmVtaXQoJ29wZW5Nb2RhbFNpdGVDcmVhdGUnLCB7IHN0YXRlTW9kYWw6IHRydWUsIGN1c3RvbWVydXVpZDogZm9ybS5jdXN0b21lcnV1aWQsIGN1c3RvbWVybmFtZTogZm9ybS5jdXN0b21lcm5hbWV9KVwiPlxuICAgICAgICAgICAgPHYtaWNvbiBsZWZ0Pm1kaS1wbHVzPC92LWljb24+XG4gICAgICAgICAgICBBam91dGVyIHVuIGNoYW50aWVyXG4gICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIzXCI+XG4gICAgICAgICAgPHYtYXV0b2NvbXBsZXRlIHYtbW9kZWw9XCJmb3JtLndhcmVob3VzZVR5cGVcIiBuYW1lPVwid2FyZWhvdXNlVHlwZVwiIDppdGVtcz1cIndhcmVob3VzZVR5cGVzXCIgbGFiZWw9XCJUeXBlIGRlIGNhcnJpw6hyZVwiIG91dGxpbmVkIGl0ZW0tdGV4dD1cIm5hbWVcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiY29kZVwiIGNsYXNzPVwicGEtMiByZXF1aXJlZFwiIGRlbnNlIGhpZGUtZGV0YWlscz1cImF1dG9cIiBjbGVhcmFibGUgQGNoYW5nZT1cImNoYW5nZVdhcmVob3VzZVR5cGVcIj5cbiAgICAgICAgICA8L3YtYXV0b2NvbXBsZXRlPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2wgY29scz1cIjNcIj5cbiAgICAgICAgICA8YXBpLXNlbGVjdC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgc2VsZWN0LWNsYXNzPVwicGEtMiByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGZvcm1OYW1lPVwid2FyZWhvdXNlXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJ1dWlkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDYXJyacOocmVcIlxuICAgICAgICAgICAgICA6ZmlsdGVycz1cImZvcm1cIlxuICAgICAgICAgICAgICBmaWx0ZXItbmFtZT1cIndhcmVob3VzZXV1aWRcIlxuICAgICAgICAgICAgICByZXNvdXJjZT1cIndhcmVob3VzZXNcIlxuICAgICAgICAgICAgICA6cGFyYW1zPVwid2FyZWhvdXNlUGFyYW1zXCJcbiAgICAgICAgICAgICAgQGNoYW5nZT1cImNoYW5nZVdhcmVob3VzZVwiXG4gICAgICAgICAgICAgIDpyZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICA6cmVsb2FkPVwid2FyZWhvdXNlS2V5XCJcbiAgICAgICAgICAgICAgOmdyb3Vwcz1cIlsnZm9ybS5yZWFkJ11cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2FwaS1zZWxlY3QtYXV0b2NvbXBsZXRlPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2wgY29scz1cIjNcIj5cbiAgICAgICAgICA8di1hdXRvY29tcGxldGUgdi1tb2RlbD1cImZvcm0ucHJvZHVjdFwiIG5hbWU9XCJwcm9kdWN0XCIgOml0ZW1zPVwiZm9ybS5wcm9kdWN0c1wiIGxhYmVsPVwiUHJvZHVpdFwiIG91dGxpbmVkIGl0ZW0tdGV4dD1cIm5hbWVcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiaWRcIiBjbGFzcz1cInBhLTIgcmVxdWlyZWRcIiBkZW5zZSBoaWRlLWRldGFpbHM9XCJhdXRvXCIgY2xlYXJhYmxlXG4gICAgICAgICAgLz5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIzXCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCB2LW1vZGVsPVwiZm9ybS5xdWFudGl0eVwiIGxhYmVsPVwiUXVhbnRpdMOpXCIgbmFtZT1cInF1YW50aXR5XCIgdHlwZT1cIm51bWJlclwiIHBhdHRlcm49XCJbMC05XSpcIiBjbGFzcz1cInBhLTIgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2UgaGlkZS1kZXRhaWxzPVwiYXV0b1wiIG91dGxpbmVkIGNsZWFyYWJsZSByZXF1aXJlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiN1wiPlxuICAgICAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICAgICAgPHYtY29sIGNsYXNzPVwicGEtMlwiPlxuICAgICAgICAgICAgICA8di10ZXh0YXJlYSByb3dzPVwiMlwiIHYtbW9kZWw9XCJmb3JtLmNvbW1lbnRwbGFubmluZ1wiIG5hbWU9XCJjb21tZW50cGxhbm5pbmdcIiBsYWJlbD1cIkNvbW1lbnRhaXJlIHBsYW5uaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZWQgaGlkZS1kZXRhaWxzIGNsYXNzPVwicGItMlwiIHByZXBlbmQtaW5uZXItaWNvbj1cIm1kaS1jb21tZW50LXNlYXJjaC1vdXRsaW5lXCIgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljazpwcmVwZW5kLWlubmVyPVwic2hvd0NvbW1lbnRzTW9kYWwoJ3NjaGVkdWxlJywgJ2NvbW1lbnRQbGFubmluZycpXCIgcmVmPVwiY29tbWVudFBsYW5uaW5nXCJcbiAgICAgICAgICAgICAgPjwvdi10ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPHYtdGV4dGFyZWEgcm93cz1cIjJcIiB2LW1vZGVsPVwiZm9ybS5jb21tZW50c09yZGVyXCIgbmFtZT1cImNvbW1lbnRzT3JkZXJcIiBsYWJlbD1cIkNvbW1lbnRhaXJlIGNvbW1hbmRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZWQgaGlkZS1kZXRhaWxzIGNsYXNzPVwicHQtMlwiIHByZXBlbmQtaW5uZXItaWNvbj1cIm1kaS1jb21tZW50LXNlYXJjaC1vdXRsaW5lXCIgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljazpwcmVwZW5kLWlubmVyPVwic2hvd0NvbW1lbnRzTW9kYWwoJ29yZGVyJywgJ2NvbW1lbnRPcmRlcicpXCIgcmVmPVwiY29tbWVudE9yZGVyXCJcbiAgICAgICAgICAgICAgPjwvdi10ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgIDx2LXRleHRhcmVhIHJvd3M9XCI1XCIgdi1tb2RlbD1cImZvcm0uY29tbWVudGRyaXZlclwiIG5hbWU9XCJjb21tZW50ZHJpdmVyXCIgbGFiZWw9XCJDb21tZW50YWlyZSBjaGF1ZmZldXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lZCBoaWRlLWRldGFpbHMgY2xhc3M9XCJwYS0yXCIgcHJlcGVuZC1pbm5lci1pY29uPVwibWRpLWNvbW1lbnQtc2VhcmNoLW91dGxpbmVcIiBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrOnByZXBlbmQtaW5uZXI9XCJzaG93Q29tbWVudHNNb2RhbCgnZHJpdmVyJywgJ2NvbW1lbnREcml2ZXInKVwiIHJlZj1cImNvbW1lbnREcml2ZXJcIlxuICAgICAgICAgICAgICA+PC92LXRleHRhcmVhPlxuICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICA8L3YtY29sPlxuICAgICAgICA8di1jb2wgY29scz1cIjVcIj5cbiAgICAgICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgICAgIDx2LWNvbD5cbiAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB2LW1vZGVsPVwiZGVsaXZlcnlEYXRlXCIgbGFiZWw9XCJEYXRlIGRlIGxpdnJhaXNvblwiIG5hbWU9XCJkZWxpdmVyeURhdGVcIiB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwicHItNCBtci0wIG10LTQgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNlIGhpZGUtZGV0YWlscz1cImF1dG9cIiBvdXRsaW5lZCBjbGVhcmFibGUgcmVxdWlyZWQ+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHYtbW9kZWw9XCJmb3JtLmV4dGVybmFsQ29kZVwiIGxhYmVsPVwiUmVmLiBjZGUuIGNsaWVudFwiIG5hbWU9XCJleHRlcm5hbENvZGVcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwicHItNCBtci0wIG10LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNlIGhpZGUtZGV0YWlscz1cImF1dG9cIiBvdXRsaW5lZCBjbGVhcmFibGU+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIHRleHQtY2VudGVyIG10LTIgbWItMiBmb250LXdlaWdodC1ib2xkXCI+e3sgZm9ybS5pc0luZXJ0ID8gJ1LDqWNlcHRpb25zJyA6ICdMaXZyYWlzb25zJyB9fTwvcD5cbiAgICAgICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiN1wiIGNsYXNzPVwibWItNFwiPlxuICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIobW8sIGlkeCkgaW4gbW9tZW50c0RheXNcIj5cbiAgICAgICAgICAgICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtc2VsZWN0IHYtbW9kZWw9XCJtby5jb2RlXCIgbGFiZWw9XCJNb21lbnRzIGRlIGxhIGpvdXJuw6llXCIgOml0ZW1zPVwiZm9ybS5vcGVuaW5nVGltZVwiIGRlbnNlIDpkaXNhYmxlZD1cIm1vLnVzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnRpdGxlPVwibW8udXNlZCA/ICdBZmZlY3TDqSDDoCB1biB0b3VyJyA6ICcnXCIgaXRlbS12YWx1ZT1cImNvZGVcIiBpdGVtLXRleHQ9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlscz1cImF1dG9cIiBjbGFzcz1cIm1yLTEgbXQtMlwiIG91dGxpbmVkIGNsZWFyYWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC92LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtYnRuIDpkaXNhYmxlZD1cIm1vLnVzZWRcIiBvdXRsaW5lZCBjb2xvcj1cImVycm9yXCIgY2xhc3M9XCJidG4gbWItMFwiIHgtc21hbGwgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA6dGl0bGU9XCJtby51c2VkID8gJ0FmZmVjdMOpIMOgIHVuIHRvdXInIDogJ1N1cHByaW1lciBsZSBtb21lbnQnXCIgQGNsaWNrPVwicmVtb3ZlTW9tZW50RGF5KGlkeClcIj4tPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgPHYtYnRuIHRpdGxlPVwiQWpvdXRlciB1biBtb21lbnRcIiB2LWlmPVwiKGlkeCArIDEpID09PSBtb21lbnRzRGF5cy5sZW5ndGhcIiBvdXRsaW5lZCB4LXNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBtdC0wXCIgdHlwZT1cImJ1dHRvblwiIEBjbGljaz1cImFkZE1vbWVudERheSgpXCI+Kzwvdi1idG4+XG4gICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIm1vbWVudHNEYXlzXCIgOnZhbHVlPVwiSlNPTi5zdHJpbmdpZnkobW9tZW50c0RheXMpXCIgLz5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICA8di1jb2wgY29scz1cIjVcIiBjbGFzcz1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKHRpbWVJdGVtLCBpZHgpIGluIHRpbWVzXCI+XG4gICAgICAgICAgICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCA6ZGlzYWJsZWQ9XCJ0aW1lSXRlbS51c2VkXCIgaGlkZS1kZXRhaWxzIHRleHQtYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cImNlbnRlcmVkLWlucHV0IHAtMCBtLTBcIiB2LW1vZGVsPVwidGltZUl0ZW0udGltZVwiIHR5cGU9XCJ0aW1lXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWJ0biA6ZGlzYWJsZWQ9XCJ0aW1lSXRlbS51c2VkXCIgdGl0bGU9XCJTdXBwcmltZXIgbCdob3JhaXJlXCIgb3V0bGluZWQgY29sb3I9XCJlcnJvclwiIGNsYXNzPVwiYnRuIG1iLTBcIiB4LXNtYWxsIHR5cGU9XCJidXR0b25cIiBAY2xpY2s9XCJyZW1vdmVUaW1lKGlkeClcIj4tPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgPHYtYnRuIHRpdGxlPVwiQWpvdXRlciB1biBob3JhaXJlXCIgdi1pZj1cIihpZHggKyAxKSA9PT0gdGltZXMubGVuZ3RoXCIgb3V0bGluZWQgeC1zbWFsbCBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBtdC0wXCIgdHlwZT1cImJ1dHRvblwiIEBjbGljaz1cImFkZFRpbWUoKVwiPis8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0aW1lc1wiIDp2YWx1ZT1cIkpTT04uc3RyaW5naWZ5KHRpbWVzKVwiIC8+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuICAgIDwvdi1jYXJkPlxuICAgIDxDb21tZW50c0xpc3RNb2RhbFxuICAgICAgICA6aXMtb3Blbi1tb2RhbD1cImlzT3BlbkNvbW1lbnRNb2RhbFwiIDp0eXBlcz1cImNvbW1lbnRNb2RhbFR5cGVcIlxuICAgICAgICBAY2xvc2U9XCJpc09wZW5Db21tZW50TW9kYWwgPSBmYWxzZVwiIEB1cGRhdGU6Y29tbWVudD1cInVwZGF0ZUNvbW1lbnRWYWx1ZSgkZXZlbnQpXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgdHlwZT1cInRzXCI+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IENvbW1lbnRzTGlzdE1vZGFsIGZyb20gXCIuLi8uLi9jb21tZW50L2NvbXBvbmVudC9Db21tZW50c0xpc3RNb2RhbC52dWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwib3JkZXItaXRlbS1tYW51YWwtZm9ybVwiLFxuICBjb21wb25lbnRzOiB7Q29tbWVudHNMaXN0TW9kYWx9LFxuICBwcm9wczogWydkaWFsb2cnLCAnY3VzdG9tZXJ1dWlkJywgJ29yZGVySXRlbScsICdvcmlnaW4nLCAnc2l0ZScsICdxdWFudGl0eScsICdkYXRldG9tb3Jyb3cnLCAnc29jTmFtZSddLFxuICBkYXRhOiAoX3RoaXMpID0+ICh7XG4gICAgdGltZXM6IFtdLCAvLyBUaW1lcyBhcnJheVxuICAgIG1vbWVudHNEYXlzOiBbXSxcbiAgICBkZWZhdWx0VGltZTogeyB0aW1lOiBudWxsLCB1c2VkOiBmYWxzZSB9LFxuICAgIGRlZmF1bHRNb21lbnREYXk6IHsgY29kZTogbnVsbCwgdXNlZDogZmFsc2UgfSxcbiAgICBmb3JtOiB7XG4gICAgICBjdXN0b21lcnV1aWQ6ICcnLFxuICAgICAgY3VzdG9tZXJuYW1lOiAnJyxcbiAgICAgIHNpdGU6IG51bGwsXG4gICAgICBzaXRlczogW10sXG4gICAgICB3YXJlaG91c2V1dWlkOiBudWxsLFxuICAgICAgcHJvZHVjdDogbnVsbCxcbiAgICAgIHByb2R1Y3RzOiBbXSxcbiAgICAgIHF1YW50aXR5OiAzMCxcbiAgICAgIG9wZW5pbmdUaW1lOiBbe25hbWU6ICdKb3VybsOpZScsIGNvZGU6ICdkYXknfSwge25hbWU6ICdNYXRpbicsIGNvZGU6ICdtb3JuaW5nJ30sIHtuYW1lOiAnQXByw6hzLU1pZGknLCBjb2RlOiAnYWZ0ZXJub29uJ31dLFxuICAgICAgY29tbWVudHBsYW5uaW5nOiAnJyxcbiAgICAgIGNvbW1lbnRkcml2ZXI6ICcnLFxuICAgICAgaXNDaGFydGVkOiBmYWxzZSxcbiAgICAgIGV4dGVybmFsQ29kZTogbnVsbCxcbiAgICAgIHdhcmVob3VzZVR5cGU6ICdLTScsXG4gICAgICBpc0luZXJ0OiBmYWxzZVxuICAgIH0sXG4gICAgZGVsaXZlcnlEYXRlOiBudWxsLFxuICAgIHdhcmVob3VzZXM6IFtdLFxuICAgIGN1c3RvbWVyczogW10sXG4gICAgY3VzdG9tZXJLZXk6IDAsXG4gICAgd2FyZWhvdXNlS2V5OiAwLFxuICAgIHdhcmVob3VzZVR5cGVzOiBbXG4gICAgICB7IGNvZGU6ICdLTScsIG5hbWU6IChfdGhpcy5zb2NOYW1lID8/ICctJyksIHBhcmFtczoge29yZGVyOiB7bmFtZTogJ2FzYyd9LCBpc1RyYW5zcG9ydDogJzAnLCBpc1RyYWRpbmc6ICcwJ319LFxuICAgICAgeyBjb2RlOiAnVFJBRElORycsIG5hbWU6ICdOw6lnb2NlJywgcGFyYW1zOiB7b3JkZXI6IHtuYW1lOiAnYXNjJ30sIGlzVHJhbnNwb3J0OiAnMCcsIGlzVHJhZGluZzogJzEnfX0sXG4gICAgICB7IGNvZGU6ICdUUkFOU1BPUlQnLCBuYW1lOiAnVHJhbnNwb3J0JywgcGFyYW1zOiB7b3JkZXI6IHtuYW1lOiAnYXNjJ30sIGlzVHJhbnNwb3J0OiAnMScsIGlzVHJhZGluZzogJzAnfX0sXG4gICAgICB7IGNvZGU6ICdCT1RIJywgbmFtZTogJ07DqWdvY2UgZXQgdHJhbnNwb3J0JywgcGFyYW1zOiB7b3JkZXI6IHtuYW1lOiAnYXNjJ30sIGlzVHJhbnNwb3J0OiAnMScsIGlzVHJhZGluZzogJzEnfX0sXG4gICAgXSxcbiAgICB3YXJlaG91c2VQYXJhbXM6IG51bGwsXG4gICAgc2l0ZUtleTogMCxcbiAgICBzaXRlczogW10sXG4gICAgaXNPcGVuQ29tbWVudE1vZGFsOiBmYWxzZSxcbiAgICBjb21tZW50TW9kYWxUeXBlOiBbXSxcbiAgICB1cGRhdGFibGVDb21tZW50UmVmOiBudWxsXG4gIH0pLFxuICBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLmRlbGl2ZXJ5RGF0ZSA9ICF0aGlzLmRhdGV0b21vcnJvdyA/IHRoaXMuJHRvbW9ycm93LmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogbW9tZW50KHRoaXMuZGF0ZXRvbW9ycm93KS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcblxuICAgIC8vIE9yZGVyIGZvcm1cbiAgICBpZiAodGhpcy5vcmRlckl0ZW0pIHtcbiAgICAgIHRoaXMuZm9ybSA9IHtcbiAgICAgICAgY3VzdG9tZXJ1dWlkOiB0aGlzLm9yZGVySXRlbS5jdXN0b21lciAmJiB0aGlzLm9yZGVySXRlbS5jdXN0b21lci51dWlkID8gdGhpcy5vcmRlckl0ZW0uY3VzdG9tZXIudXVpZCA6ICcnLFxuICAgICAgICBjdXN0b21lcm5hbWU6IHRoaXMub3JkZXJJdGVtLmN1c3RvbWVyICYmIHRoaXMub3JkZXJJdGVtLmN1c3RvbWVyLm5hbWUgPyB0aGlzLm9yZGVySXRlbS5jdXN0b21lci5uYW1lIDogJycsXG4gICAgICAgIG9wZW5pbmdUaW1lOiBbe25hbWU6ICdKb3VybsOpZScsIGNvZGU6ICdkYXknfSwge25hbWU6ICdNYXRpbicsIGNvZGU6ICdtb3JuaW5nJ30sIHtuYW1lOiAnQXByw6hzLU1pZGknLCBjb2RlOiAnYWZ0ZXJub29uJ31dLFxuICAgICAgICBjb21tZW50cGxhbm5pbmc6IHRoaXMub3JkZXJJdGVtLmNvbW1lbnRzUGxhbm5pbmcgPyB0aGlzLm9yZGVySXRlbS5jb21tZW50c1BsYW5uaW5nIDogJycsXG4gICAgICAgIGNvbW1lbnRkcml2ZXI6IHRoaXMub3JkZXJJdGVtLmNvbW1lbnRzRHJpdmVyID8gdGhpcy5vcmRlckl0ZW0uY29tbWVudHNEcml2ZXIgOiAnJyxcbiAgICAgICAgY29tbWVudHNPcmRlcjogdGhpcy5vcmRlckl0ZW0uY29tbWVudHNPcmRlciA/IHRoaXMub3JkZXJJdGVtLmNvbW1lbnRzT3JkZXIgOiAnJyxcbiAgICAgICAgaXNDaGFydGVkOiAhIXRoaXMub3JkZXJJdGVtLmlzX2NoYXJ0ZWQsXG4gICAgICAgIHByb2R1Y3RzOiBbXSxcbiAgICAgICAgc2l0ZXM6IFtdLFxuICAgICAgICBzaXRlOiB0aGlzLm9yZGVySXRlbS5zaXRlPy5pZCA/PyBudWxsLFxuICAgICAgICBleHRlcm5hbENvZGU6IHRoaXMub3JkZXJJdGVtLmV4dGVybmFsQ29kZSA/IHRoaXMub3JkZXJJdGVtLmV4dGVybmFsQ29kZSA6ICcnLFxuICAgICAgICB3YXJlaG91c2VUeXBlOiB0aGlzLm9yZGVySXRlbS53YXJlaG91c2VUeXBlID8/ICh0aGlzLiRhcHBUaGVtZSA9PT0gJ2x1Y2hlJyA/ICdMdWNow6knIDogJ0tNJyksXG4gICAgICAgIGlzSW5lcnQ6IHRoaXMub3JkZXJJdGVtLmlzSW5lcnRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2hhbmdlV2FyZWhvdXNlVHlwZSgpO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMub3JpZ2luKSB7XG4gICAgICAgIGNhc2UgJ21hbnVhbCc6XG4gICAgICAgICAgdGhpcy5mb3JtLndhcmVob3VzZXV1aWQgPSB0aGlzLm9yZGVySXRlbS53YXJlaG91c2UgJiYgdGhpcy5vcmRlckl0ZW0ud2FyZWhvdXNlLnV1aWQgPyB0aGlzLm9yZGVySXRlbS53YXJlaG91c2UudXVpZCA6IG51bGw7IC8vIFdhcmVob3VzZVxuICAgICAgICAgIHRoaXMuZm9ybS5zaXRlID0gdGhpcy5vcmRlckl0ZW0uc2l0ZSAmJiB0aGlzLm9yZGVySXRlbS5zaXRlLmlkID8gdGhpcy5vcmRlckl0ZW0uc2l0ZS5pZCA6IG51bGw7IC8vIFNpdGVcbiAgICAgICAgICB0aGlzLmZvcm0ucXVhbnRpdHkgPSB0aGlzLm9yZGVySXRlbS5xdWFudGl0eU9yZGVyZWQgPyB0aGlzLm9yZGVySXRlbS5xdWFudGl0eU9yZGVyZWQgOiAodGhpcy5xdWFudGl0eSA/IHRoaXMucXVhbnRpdHkgOiBudWxsKTsgLy8gUXR5XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3F1b3RlJzpcbiAgICAgICAgY2FzZSAnc3BsaXQnOlxuICAgICAgICAgIHRoaXMuZm9ybS53YXJlaG91c2V1dWlkID0gdGhpcy5vcmRlckl0ZW0ud2FyZWhvdXNlICYmIHRoaXMub3JkZXJJdGVtLndhcmVob3VzZS51dWlkID8gdGhpcy5vcmRlckl0ZW0ud2FyZWhvdXNlLnV1aWQgOiBudWxsOyAvLyBXYXJlaG91c2VcbiAgICAgICAgICB0aGlzLmZvcm0uc2l0ZSA9IHRoaXMuc2l0ZSAmJiB0aGlzLnNpdGUuaWQgPyB0aGlzLnNpdGUuaWQgOiBudWxsOyAvLyBTaXRlXG4gICAgICAgICAgdGhpcy5mb3JtLnF1YW50aXR5ID0gdGhpcy5xdWFudGl0eSA/IHRoaXMucXVhbnRpdHkgOiBudWxsOyAvLyBRdHlcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtLnByb2R1Y3QgPSB0aGlzLm9yZGVySXRlbS5wcm9kdWN0ICYmIHRoaXMub3JkZXJJdGVtLnByb2R1Y3QuaWQgPyB0aGlzLm9yZGVySXRlbS5wcm9kdWN0LmlkIDogbnVsbDtcbiAgICAgIHRoaXMudGltZXMgPSB0aGlzLm9yZGVySXRlbS5kZWxpdmVyeVRpbWVzID8gdGhpcy5vcmRlckl0ZW0uZGVsaXZlcnlUaW1lcyA6IFtdO1xuXG4gICAgICBpZiAodGhpcy50aW1lcy5sZW5ndGggPT09IDApIHsgdGhpcy5hZGRUaW1lKCk7IH1cblxuICAgICAgdGhpcy5tb21lbnRzRGF5cyA9IHRoaXMub3JkZXJJdGVtLm1vbWVudHNEYXlzID8gdGhpcy5vcmRlckl0ZW0ubW9tZW50c0RheXMubWFwKG0gPT4geyBsZXQgbW8gPSBtLm9wZW5pbmdUaW1lOyBtby5pZCA9IG0uaWQ7IG1vLnVzZWQgPSBtLnVzZWQ7IHJldHVybiBtbzsgfSkgOiBbXTtcbiAgICAgIGlmICh0aGlzLm1vbWVudHNEYXlzLmxlbmd0aCA9PT0gMCkgeyB0aGlzLmFkZE1vbWVudERheSgpOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHRpbWUgc2F2ZWRcbiAgICAgIHRoaXMuYWRkVGltZSgpOyAvLyBBZGQgYSBkZWZhdWx0IHRpbWVcbiAgICAgIHRoaXMuYWRkTW9tZW50RGF5KCk7XG4gICAgICAvLyBFbHNlIHJldHJpZXZlIHRoZW0gd2l0aCB0aGlzLnRpbWVzID0gLi4uXG4gICAgICBpZiAodGhpcy5jdXN0b21lcnV1aWQpIHtcbiAgICAgICAgdGhpcy5mb3JtLmN1c3RvbWVydXVpZCA9IHRoaXMuY3VzdG9tZXJ1dWlkO1xuICAgICAgICBpZiAodGhpcy5zaXRlICYmIHRoaXMuc2l0ZS5pZCkgeyB0aGlzLmZvcm0uc2l0ZSA9IHRoaXMuc2l0ZS5pZDsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBjcmVhdGUgc2l0ZSB0byBsaXN0IGFuZCBzZWxlY3QgaXRcbiAgICB0aGlzLiRlbWl0dGVyLm9uKCdvcmRlci1tYW51YWwtYWRkLXNpdGUnLCAoc2l0ZSkgPT4ge1xuICAgICAgdGhpcy5zaXRlS2V5Kys7XG4gICAgICB0aGlzLmZvcm0uc2l0ZSA9IHNpdGUuaWQ7XG4gICAgfSk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBjaGFuZ2VXYXJlaG91c2UoZSkge1xuICAgICAgaWYgKGUgJiYgZS5saXN0ICYmIGUubGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMud2FyZWhvdXNlcyA9IGUubGlzdDtcbiAgICAgICAgbGV0IHdhcmVob3VzZSA9IHRoaXMud2FyZWhvdXNlcy5maW5kKHcgPT4gdy51dWlkID09IHRoaXMuZm9ybS53YXJlaG91c2V1dWlkKTtcbiAgICAgICAgLy8gUmV0cmlldmUgcHJvZHVjdHMgbGlzdCBmcm9tIHdhcmVob3VzZVxuICAgICAgICBpZiAod2FyZWhvdXNlICYmIHdhcmVob3VzZS51dWlkKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnByb2R1Y3RzID0gWy4uLndhcmVob3VzZS5wcm9kdWN0c107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnByb2R1Y3RzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5wcm9kdWN0cy5tYXAocyA9PiBzLmlkKS5pbmNsdWRlcyh0aGlzLmZvcm0ucHJvZHVjdCkpIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucHJvZHVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZFRpbWUoKSB7XG4gICAgICB0aGlzLnRpbWVzLnB1c2goey4uLnRoaXMuZGVmYXVsdFRpbWV9KTtcbiAgICB9LFxuICAgIGFkZE1vbWVudERheSgpIHtcbiAgICAgIHRoaXMubW9tZW50c0RheXMucHVzaCh7Li4udGhpcy5kZWZhdWx0TW9tZW50RGF5fSk7XG4gICAgfSxcbiAgICByZW1vdmVUaW1lKGlkeCkge1xuICAgICAgaWYgKHRoaXMudGltZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnRpbWVzLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVNb21lbnREYXkoaWR4KSB7XG4gICAgICBpZiAodGhpcy5tb21lbnRzRGF5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMubW9tZW50c0RheXMuc3BsaWNlKGlkeCwgMSlcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoYW5nZVdhcmVob3VzZVR5cGUoKSB7XG4gICAgICBsZXQgd3QgPSB0aGlzLndhcmVob3VzZVR5cGVzLmZpbmQodyA9PiB3LmNvZGUgPT09IHRoaXMuZm9ybS53YXJlaG91c2VUeXBlKTtcbiAgICAgIHRoaXMud2FyZWhvdXNlUGFyYW1zID0gd3QgPyB3dC5wYXJhbXMgOiBudWxsO1xuICAgICAgdGhpcy53YXJlaG91c2VLZXkrKztcbiAgICB9LFxuICAgIHVwZGF0ZVNpdGUocGFyYW0pIHtcbiAgICAgIGxldCBzaXRlID0gcGFyYW0ubGlzdCA/IHBhcmFtLmxpc3QuZmluZChzID0+IHMuaWQgPT09IHRoaXMuZm9ybS5zaXRlKSA6IG51bGw7XG4gICAgICB0aGlzLiRlbWl0dGVyLmVtaXQoJ29yZGVySXRlbS11cGRhdGUtc2l0ZScsIChzaXRlICYmIHNpdGUuaWQgPyBzaXRlIDogbnVsbCkpO1xuICAgIH0sXG4gICAgc2hvd0NvbW1lbnRzTW9kYWwodHlwZSwgcmVmKSB7XG4gICAgICB0aGlzLmlzT3BlbkNvbW1lbnRNb2RhbCA9IHRydWU7XG4gICAgICB0aGlzLmNvbW1lbnRNb2RhbFR5cGUgPSBbdHlwZV07XG4gICAgICB0aGlzLnVwZGF0YWJsZUNvbW1lbnRSZWYgPSByZWY7XG4gICAgfSxcbiAgICB1cGRhdGVDb21tZW50VmFsdWUoY29tbWVudCkge1xuICAgICAgdGhpcy4kcmVmc1t0aGlzLnVwZGF0YWJsZUNvbW1lbnRSZWZdLmludGVybmFsVmFsdWUgKz0gY29tbWVudDtcbiAgICAgIHRoaXMuaXNPcGVuQ29tbWVudE1vZGFsID0gZmFsc2VcbiAgICB9XG4gIH1cbn0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC5jZW50ZXJlZC1pbnB1dCA+Pj4gaW5wdXQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlclxuICB9XG48L3N0eWxlPlxuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4jbWFwIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuXG4gIHBhdGgge1xuICAgIGZpbGw6ICMzOTVhNmI7XG4gICAgc3Ryb2tlOiAjZmZmZmZmO1xuICAgIHN0cm9rZS13aWR0aDogMC42O1xuICAgIHRyYW5zaXRpb246IGZpbGwgMC4ycywgc3Ryb2tlIDAuM3M7XG4gIH1cbiAgcGF0aDpob3ZlciB7XG4gICAgZmlsbDogcmVkO1xuICAgIHN0cm9rZTogcmVkO1xuICB9XG4gIC5zZXBhcmF0b3Ige1xuICAgIHN0cm9rZTogI2NjYztcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICB9XG4gIC5zZXBhcmF0b3I6aG92ZXIge1xuICAgIHN0cm9rZTogI2NjYztcbiAgICBmaWxsOiBub25lO1xuICB9XG4gIC5hZmZlY3RlIHtcbiAgICBmaWxsOiAjZmQ2ZTYwO1xuICAgIHN0cm9rZTogI2ZmZmZmZjtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgfVxufVxuXG4jdG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgY29sb3I6ICMzOTVhNmI7XG4gIGJvcmRlci1zdHlsZTogaW5zZXQ7XG4gIHBhZGRpbmc6IDRweDtcbiAgd2lkdGg6IDIwMHB4O1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBub25lO1xufVxuIiwiPHRlbXBsYXRlPlxuICA8bC1tYXBcbiAgICB2LW9uOmNsaWNrPVwiYWRkTWFya2VyXCJcbiAgICByZWY9XCJtYXBcIlxuICAgIDp6b29tPVwiem9vbVwiXG4gICAgOmNlbnRlcj1cImNlbnRlclwiXG4gICAgOm9wdGlvbnM9XCJvcHRpb25zXCJcbiAgICBzdHlsZT1cImhlaWdodDogMzUwcHhcIlxuICAgIEB1cGRhdGU6Y2VudGVyPVwiY2VudGVyVXBkYXRlXCJcbiAgICBAdXBkYXRlOnpvb209XCJ6b29tVXBkYXRlXCJcbiAgPlxuICAgIDxsLWNvbnRyb2wtbGF5ZXJzIHBvc2l0aW9uPVwidG9wcmlnaHRcIj48L2wtY29udHJvbC1sYXllcnM+XG4gICAgPGwtY29udHJvbC1zY2FsZVxuICAgICAgcG9zaXRpb249XCJib3R0b21sZWZ0XCJcbiAgICAgIDppbXBlcmlhbD1cImZhbHNlXCJcbiAgICAgIDptZXRyaWM9XCJ0cnVlXCJcbiAgICA+PC9sLWNvbnRyb2wtc2NhbGU+XG4gICAgPGwtdGlsZS1sYXllclxuICAgICAgdi1mb3I9XCJ0aWxlUHJvdmlkZXIgaW4gdGlsZVByb3ZpZGVyc1wiXG4gICAgICA6a2V5PVwidGlsZVByb3ZpZGVyLm5hbWVcIlxuICAgICAgOm5hbWU9XCJ0aWxlUHJvdmlkZXIubmFtZVwiXG4gICAgICA6dmlzaWJsZT1cInRpbGVQcm92aWRlci52aXNpYmxlXCJcbiAgICAgIDp1cmw9XCJ0aWxlUHJvdmlkZXIudXJsXCJcbiAgICAgIGxheWVyLXR5cGU9XCJiYXNlXCJcbiAgICA+XG4gICAgPC9sLXRpbGUtbGF5ZXI+XG4gICAgPGwtZmVhdHVyZS1ncm91cCByZWY9XCJmZWF0dXJlc1wiPjwvbC1mZWF0dXJlLWdyb3VwPlxuICA8L2wtbWFwPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IEwgZnJvbSBcImxlYWZsZXRcIjtcbmltcG9ydCB7XG4gIExNYXAsXG4gIExUaWxlTGF5ZXIsXG4gIExDb250cm9sTGF5ZXJzLFxuICBMQ29udHJvbFNjYWxlLFxuICBMRmVhdHVyZUdyb3VwLFxuICBMSWNvbixcbiAgTE1hcmtlcixcbn0gZnJvbSBcInZ1ZTItbGVhZmxldFwiO1xuXG5leHBvcnQgZGVmYXVsdCBWdWUuZXh0ZW5kKHtcbiAgbmFtZTogXCJzZWN0b3ItbWFwLWNyZWF0aW9uXCIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBMTWFwLFxuICAgIExUaWxlTGF5ZXIsXG4gICAgTENvbnRyb2xMYXllcnMsXG4gICAgTENvbnRyb2xTY2FsZSxcbiAgICBMRmVhdHVyZUdyb3VwLFxuICAgIExJY29uLFxuICAgIExNYXJrZXIsXG4gIH0sXG5cbiAgcHJvcHM6IFtcIm1hcmtlcnNcIiwgXCJjZW50ZXJcIiwgXCJ6b29tXCJdLFxuICBkYXRhOiAoKSA9PiAoe1xuICAgIGN1cnJlbnRab29tOiAxMS41LFxuICAgIGN1cnJlbnRDZW50ZXI6IG51bGwsXG4gICAgb3B0aW9uczogeyB6b29tU25hcDogMC41IH0sXG4gICAgbWFwOiBudWxsLFxuICAgIHRpbGVQcm92aWRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJQbGFuIGNvdWxldXJcIixcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgdXJsOiBcImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIlBsYW4gbm9pciBldCBibGFuY1wiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgdXJsOiBcImh0dHBzOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL2J3LW1hcG5pay97en0ve3h9L3t5fS5wbmdcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiU2F0ZWxsaXRlXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9Xb3JsZF9JbWFnZXJ5L01hcFNlcnZlci90aWxlL3t6fS97eX0ve3h9XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbWFya2Vyc0xpc3Q6IFtdLFxuICAgIGxheWVyczogW10sXG4gIH0pLFxuICB3YXRjaDoge1xuICAgIG1hcmtlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMubWFya2Vyc0xpc3QgPSB0aGlzLm1hcmtlcnMgPyBbLi4udGhpcy5tYXJrZXJzXSA6IFtdO1xuICAgICAgdGhpcy5jbGVhck1hcCgpO1xuICAgICAgdGhpcy51cGRhdGVNYXAoKTtcbiAgICB9LFxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMubWFya2Vyc0xpc3QgPSB0aGlzLm1hcmtlcnMgPyBbLi4udGhpcy5tYXJrZXJzXSA6IFtdO1xuXG4gICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgLy8gSW5pdCBsZWFmbGV0IG1hcFxuICAgICAgdGhpcy5pbml0TWFwKCk7XG4gICAgICB0aGlzLiRlbWl0KFwiY2hpbGRUb1BhcmVudFwiLCB0aGlzLm1hcmtlcnNMaXN0KTtcbiAgICAgIHRoaXMudXBkYXRlTWFwKCk7XG4gICAgfSk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB6b29tVXBkYXRlKHpvb20pIHtcbiAgICAgIHRoaXMuY3VycmVudFpvb20gPSB6b29tO1xuICAgIH0sXG4gICAgY2VudGVyVXBkYXRlKGNlbnRlcikge1xuICAgICAgdGhpcy5jdXJyZW50Q2VudGVyID0gY2VudGVyO1xuICAgIH0sXG4gICAgaW5pdE1hcCgpIHtcbiAgICAgIC8vIE1hcFxuICAgICAgdGhpcy5tYXAgPSB0aGlzLiRyZWZzLm1hcC5tYXBPYmplY3Q7XG4gICAgfSxcbiAgICBhZGRNYXJrZXIoZXZlbnQpIHtcbiAgICAgIGxldCBtYXJrZXJPcHRpb25zID0geyBpY29uOiB0aGlzLmdldERlZmF1bHRNYXJrZXIoKSB9O1xuXG4gICAgICB0aGlzLm1hcmtlcnNMaXN0LnB1c2goZXZlbnQubGF0bG5nKTtcbiAgICAgIGlmICh0aGlzLm1hcmtlcnNMaXN0ICYmIHRoaXMubWFya2Vyc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLm1hcmtlcnNMaXN0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgbGV0IGxheWVyID0gTC5tYXJrZXIoaXRlbSwgbWFya2VyT3B0aW9ucyk7XG4gICAgICAgICAgbGF5ZXIuYmluZFBvcHVwKFwicG9pbnQgbsKwXCIgKyAoaW5kZXggKyAxKS50b1N0cmluZygpKS5vcGVuUG9wdXAoKTtcbiAgICAgICAgICB0aGlzLmxheWVycy5wdXNoKGxheWVyKTtcbiAgICAgICAgICBsYXllci5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEwucG9seWdvbih0aGlzLm1hcmtlcnNMaXN0KS5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KFwiY2hpbGRUb1BhcmVudFwiLCB0aGlzLm1hcmtlcnNMaXN0KTtcbiAgICB9LFxuICAgIGNsZWFyTWFwKCkge1xuICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgIC8vb24gY2xlYXIgbGVzIG1hcmtlcnNcbiAgICAgICAgdGhpcy5sYXllcnMuZm9yRWFjaCgoaXRlbSkgPT4geyB0aGlzLm1hcC5yZW1vdmVMYXllcihpdGVtKTsgfSk7XG4gICAgICAgIC8vb24gY2xlYXIgbGUgcG9seWdvblxuICAgICAgICBjb25zdCBtID0gdGhpcy5tYXA7XG4gICAgICAgIGZvciAobGV0IGkgaW4gbS5fbGF5ZXJzKSB7XG4gICAgICAgICAgaWYgKG0uX2xheWVyc1tpXS5fcGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBtLnJlbW92ZUxheWVyKG0uX2xheWVyc1tpXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHJvYmxlbSB3aXRoIFwiICsgZSArIG0uX2xheWVyc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVNYXAoKSB7XG4gICAgICBsZXQgbWFya2VyT3B0aW9ucyA9IHsgaWNvbjogdGhpcy5nZXREZWZhdWx0TWFya2VyKCkgfTtcbiAgICAgIGlmICh0aGlzLm1hcmtlcnNMaXN0ICYmIHRoaXMubWFya2Vyc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLm1hcmtlcnNMaXN0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgbGV0IGxheWVyID0gTC5tYXJrZXIoaXRlbSwgbWFya2VyT3B0aW9ucyk7XG4gICAgICAgICAgbGF5ZXIuYmluZFBvcHVwKFwicG9pbnQgbsKwXCIgKyAoaW5kZXggKyAxKS50b1N0cmluZygpKS5vcGVuUG9wdXAoKTtcbiAgICAgICAgICB0aGlzLmxheWVycy5wdXNoKGxheWVyKTtcbiAgICAgICAgICBsYXllci5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEwucG9seWdvbih0aGlzLm1hcmtlcnNMaXN0KS5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXREZWZhdWx0TWFya2VyKCkge1xuICAgICAgcmV0dXJuIG5ldyBMLkljb24oe1xuICAgICAgICBpY29uVXJsOiBcIi9pbWcvZGVmYXVsdC1tYXJrZXIucG5nXCIsXG4gICAgICAgIGljb25BbmNob3I6IG5ldyBMLlBvaW50KDE2LCAxNiksXG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxufSk7XG48L3NjcmlwdD5cbjxzdHlsZT5cbi53cmFwcGVyIHtcbiAgbWF4LXdpZHRoOiA0MDBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDx2LWNvbCB2LWlmPVwiaXNFZGl0XCI+XG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPC92LWNvbD5cbiAgICA8di1jb2wgdi1lbHNlPlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+XG4gICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm1yLTJcIj5tZGktYWNjb3VudDwvdi1pY29uPlxuICAgICAgICAgIE5vbVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZVwiPnt7IHVzZXIuZmlyc3RuYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdXBwZXJjYXNlXCI+e3sgdXNlci5sYXN0bmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+XG4gICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm1yLTJcIj5tZGktbWFpbDwvdi1pY29uPlxuICAgICAgICAgIEVtYWlsXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPnt7IHVzZXIuZW1haWwgfX08L2Rpdj5cbiAgICAgIDwvdi1yb3c+XG4gICAgICA8di1yb3cgbm8tZ3V0dGVycz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTEgbGFiZWxcIj5cbiAgICAgICAgICA8di1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwibXItMlwiPm1kaS1waG9uZTwvdi1pY29uPlxuICAgICAgICAgIFTDqWzDqXBob25lXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMVwiPnt7IHVzZXIuYWRkcmVzcyA/IHVzZXIuYWRkcmVzcy5waG9uZSA6ICctJ319PC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgICAgPHYtcm93IG5vLWd1dHRlcnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xIGxhYmVsXCI+XG4gICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm1yLTJcIj5tZGktbWFwLW1hcmtlcjwvdi1pY29uPlxuICAgICAgICAgIEFkcmVzc2VcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0xXCIgdi1pZj1cInVzZXIuYWRkcmVzc1wiPlxuICAgICAgICAgIDxzcGFuPnt7IHVzZXIuYWRkcmVzcy5hZGRyZXNzMSB9fSwge3sgdXNlci5hZGRyZXNzLnBvc3Rjb2RlIH19IHt7IHVzZXIuYWRkcmVzcy5jaXR5IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7IHVzZXIuYWRkcmVzcy5jb3VudHJ5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiB2LWVsc2U+LTwvZGl2PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMSBsYWJlbFwiPlxuICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLXNoaWVsZDwvdi1pY29uPlxuICAgICAgICAgIFByb2ZpbCB1dGlsaXNhdGV1clxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTFcIj57eyB1c2VyLnByb2ZpbGUubmFtZX19PC9kaXY+XG4gICAgICA8L3Ytcm93PlxuICAgIDwvdi1jb2w+XG4gICAgPHYtcm93IG5vLWd1dHRlcnMgOmp1c3RpZnk9XCIkdnVldGlmeS5icmVha3BvaW50Lm1kQW5kVXAgPyAnZW5kJyA6ICdjZW50ZXInXCIgdi1pZj1cIiFpc0VkaXRcIj5cbiAgICAgIDx2LWJ0biBjb2xvcj1cInNlY29uZGFyeVwiIHYtb246Y2xpY2s9XCJpc0VkaXQgPSAhaXNFZGl0XCI+XG4gICAgICAgIDx2LWljb24gbGVmdD5tZGktcGVuY2lsPC92LWljb24+XG4gICAgICAgIE1vZGlmaWVyIGxlcyBpbmZvcm1hdGlvbnNcbiAgICAgIDwvdi1idG4+XG4gICAgPC92LXJvdz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IGxhbmc9XCJ0c1wiPlxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZS5leHRlbmQoe1xuICBuYW1lOiBcInVzZXItZWRpdC1mb3JtXCIsXG4gIHByb3BzOiBbXCJ1c2VyXCJdLFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kZW1pdHRlci5vbihcInRvZ2dsZS11c2VyLWluZm9cIiwgKCkgPT4ge1xuICAgICAgdGhpcy5pc0VkaXQgPSAhdGhpcy5pc0VkaXQ7XG4gICAgfSk7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNFZGl0OiBmYWxzZSxcbiAgICB9O1xuICB9LFxufSk7XG5cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmxhYmVsIHtcbiAgd2lkdGg6IDIwMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8bC1tYXBcbiAgICAgIHYtaWY9XCJzaG93TWFwXCJcbiAgICAgIHJlZj1cIm1hcFwiXG4gICAgICA6em9vbT1cInpvb21cIlxuICAgICAgOmNlbnRlcj1cImNlbnRlclwiXG4gICAgICA6b3B0aW9ucz1cIm9wdGlvbnNcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDM1MHB4XCJcbiAgICAgIEB1cGRhdGU6Y2VudGVyPVwiY2VudGVyVXBkYXRlXCJcbiAgICAgIEB1cGRhdGU6em9vbT1cInpvb21VcGRhdGVcIlxuICAgID5cbiAgICAgIDxsLXRpbGUtbGF5ZXJcbiAgICAgICAgdi1mb3I9XCJ0aWxlUHJvdmlkZXIgaW4gdGlsZVByb3ZpZGVyc1wiXG4gICAgICAgIDprZXk9XCJ0aWxlUHJvdmlkZXIubmFtZVwiXG4gICAgICAgIDpuYW1lPVwidGlsZVByb3ZpZGVyLm5hbWVcIlxuICAgICAgICA6dmlzaWJsZT1cInRpbGVQcm92aWRlci52aXNpYmxlXCJcbiAgICAgICAgOnVybD1cInRpbGVQcm92aWRlci51cmxcIlxuICAgICAgICBsYXllci10eXBlPVwiYmFzZVwiXG4gICAgICA+XG4gICAgICA8L2wtdGlsZS1sYXllcj5cbiAgICAgIDxsLWZlYXR1cmUtZ3JvdXAgcmVmPVwiZmVhdHVyZXNcIj48L2wtZmVhdHVyZS1ncm91cD5cbiAgICA8L2wtbWFwPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgdHlwZT1cInRzXCI+XG4gIGltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuICBpbXBvcnQgTCBmcm9tIFwibGVhZmxldFwiO1xuICBpbXBvcnQgTERyYXcgZnJvbSBcImxlYWZsZXQtZHJhd1wiO1xuICBpbXBvcnQgeyBMTWFwLCBMVGlsZUxheWVyLCBMQ29udHJvbExheWVycywgTENvbnRyb2xTY2FsZSwgTEZlYXR1cmVHcm91cCwgTEljb24sIExNYXJrZXIgfSBmcm9tIFwidnVlMi1sZWFmbGV0XCI7XG5cbiAgZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gICAgbmFtZTogXCJtYXJrZXJzLW9uLW1hcFwiLFxuICAgIHByb3BzOiBbXCJtYXJrZXJzXCIsIFwiY2VudGVyXCIsIFwiem9vbVwiLCBcImRyYWdnYWJsZVwiXSxcbiAgICBjb21wb25lbnRzOiB7IExNYXAsIExUaWxlTGF5ZXIsIExDb250cm9sTGF5ZXJzLCBMQ29udHJvbFNjYWxlLCBMRmVhdHVyZUdyb3VwLCBMSWNvbiwgTE1hcmtlciB9LFxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICBjdXJyZW50Wm9vbTogMTEuNSxcbiAgICAgIGN1cnJlbnRDZW50ZXI6IG51bGwsXG4gICAgICBvcHRpb25zOiB7IHpvb21TbmFwOiAwLjUgfSxcbiAgICAgIG1hcDogbnVsbCxcbiAgICAgIHRpbGVQcm92aWRlcnM6IFtcbiAgICAgICAgeyBuYW1lOiBcIlBsYW4gY291bGV1clwiLCB2aXNpYmxlOiB0cnVlLCB1cmw6IFwiaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmdcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiUGxhbiBub2lyIGV0IGJsYW5jXCIsIHZpc2libGU6IGZhbHNlLCB1cmw6IFwiaHR0cHM6Ly97c30udGlsZXMud21mbGFicy5vcmcvYnctbWFwbmlrL3t6fS97eH0ve3l9LnBuZ1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJTYXRlbGxpdGVcIiwgdmlzaWJsZTogZmFsc2UsIHVybDogXCJodHRwczovL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL1dvcmxkX0ltYWdlcnkvTWFwU2VydmVyL3RpbGUve3p9L3t5fS97eH1cIiB9LFxuICAgICAgXSxcbiAgICAgIGRyYXduSXRlbXM6IG51bGwsXG4gICAgICBsYXllckdyb3VwTWFya2VyczogbnVsbCxcbiAgICAgIG1hcmtlcnNMaXN0OiBbXSxcbiAgICAgIHNob3dNYXA6IGZhbHNlXG4gICAgfSksXG4gICAgd2F0Y2g6IHtcbiAgICAgIG1hcmtlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tYXJrZXJzTGlzdCA9IHRoaXMubWFya2VycyA/IFsuLi50aGlzLm1hcmtlcnNdIDogW107XG4gICAgICAgIHRoaXMuZHJhd01hcmtlcnMoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBiZWZvcmVNb3VudCgpIHtcbiAgICAgIHRoaXMubWFya2Vyc0xpc3QgPSB0aGlzLm1hcmtlcnMgPyBbLi4udGhpcy5tYXJrZXJzXSA6IFtdO1xuXG4gICAgICAvLyBXYWl0aW5nIG1hcCBpbml0XG4gICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2hvd01hcCA9IHRydWU7XG4gICAgICAgIF90aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgLy8gSW5pdCBsZWFmbGV0IG1hcFxuICAgICAgICAgIF90aGlzLmluaXRNYXAoKTtcbiAgICAgICAgICAvLyBEcmF3IG1hcmtlcnMgYW5kIGRpcmVjdGlvblxuICAgICAgICAgIF90aGlzLmRyYXdNYXJrZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgMjAwKTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHpvb21VcGRhdGUoem9vbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gem9vbTtcbiAgICAgIH0sXG4gICAgICBjZW50ZXJVcGRhdGUoY2VudGVyKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENlbnRlciA9IGNlbnRlcjtcbiAgICAgIH0sXG4gICAgICBpbml0TWFwKCkge1xuICAgICAgICAvLyBNYXBcbiAgICAgICAgdGhpcy5tYXAgPSB0aGlzLiRyZWZzLm1hcC5tYXBPYmplY3Q7XG4gICAgICAgIC8vIEl0ZW1zXG4gICAgICAgIHRoaXMuZHJhd25JdGVtcyA9IEwuZmVhdHVyZUdyb3VwKCk7XG4gICAgICAgIHRoaXMuZHJhd25JdGVtcy5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICB9LFxuICAgICAgZHJhd01hcmtlcnMoKSB7XG4gICAgICAgIGxldCBtYXJrZXJzQm91bmRzID0gW107XG4gICAgICAgIC8vIERlbGV0ZSBsYXllciB0byBjcmVhdGUgbmV3IG9uZVxuICAgICAgICBpZiAodGhpcy5sYXllckdyb3VwTWFya2VycykgeyB0aGlzLm1hcC5yZW1vdmVDb250cm9sKHRoaXMubGF5ZXJHcm91cE1hcmtlcnMpOyB9XG4gICAgICAgIC8vIEFkZCBsYXllciB3aXRoIHNlbGVjdGVkIHBvaW50c1xuICAgICAgICB0aGlzLmxheWVyR3JvdXBNYXJrZXJzID0gbmV3IEwuTGF5ZXJHcm91cCgpO1xuICAgICAgICAvLyBBZGQgbWFya2Vyc1xuICAgICAgICB0aGlzLm1hcmtlcnNMaXN0Lm1hcCgobSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYXRMbmc6IEwubGF0TG5nKG0ubGF0aXR1ZGUsIG0ubG9uZ2l0dWRlKSxcbiAgICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zOiB7IHRpdGxlOiBtLm5hbWUsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uLCBpZDogbS5pZCwgdXVpZDogbS51dWlkLCBjb2xvcjogbS5jb2xvciA/IG0uY29sb3IgOiAnIzAwMDAwMCcgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KS5mb3JFYWNoKChtLCBpZHgpID0+IHtcbiAgICAgICAgICBsZXQgbWFya2VyID0gdGhpcy5jcmVhdGVNYXJrZXIoaWR4LCBtKVxuICAgICAgICAgIG1hcmtlci5hZGRUbyh0aGlzLmxheWVyR3JvdXBNYXJrZXJzKTtcbiAgICAgICAgICBtYXJrZXJzQm91bmRzLnB1c2gobWFya2VyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHRvIG1hcFxuICAgICAgICBpZiAodGhpcy5sYXllckdyb3VwTWFya2VycyAmJiB0aGlzLm1hcCkgeyB0aGlzLmxheWVyR3JvdXBNYXJrZXJzLmFkZFRvKHRoaXMubWFwKTsgfVxuXG4gICAgICAgIHRoaXMubWFwLmZpdEJvdW5kcygobmV3IEwuZmVhdHVyZUdyb3VwKG1hcmtlcnNCb3VuZHMpKS5nZXRCb3VuZHMoKSk7XG4gICAgICB9LFxuICAgICAgZ2V0RGVmYXVsdE1hcmtlcihwb3MgPSAnJywgY29sb3IgPSAnIzAwNDQ4NycpIHtcbiAgICAgICAgcmV0dXJuIEwuZGl2SWNvbih7XG4gICAgICAgICAgaWNvblNpemU6IG51bGwsXG4gICAgICAgICAgaHRtbDonPGRpdiBjbGFzcz1cIm1hcmtlclwiPjxzcGFuIGNsYXNzPVwibWFya2VyLWN1c3RvbVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogJyArIGNvbG9yICsgJ1wiPjwvc3Bhbj48L2Rpdj4nXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZU1hcmtlcihpbmRleCwgd2F5cG9pbnQpIHtcbiAgICAgICAgbGV0IG1hcmtlck9wdGlvbnMgPSB7XG4gICAgICAgICAgaWNvbjogdGhpcy5nZXREZWZhdWx0TWFya2VyKCcnLCB3YXlwb2ludC5vcHRpb25zICYmIHdheXBvaW50Lm9wdGlvbnMuY29sb3IgPyB3YXlwb2ludC5vcHRpb25zLmNvbG9yIDogbnVsbCksXG4gICAgICAgICAgZHJhZ2dhYmxlOiB0aGlzLmRyYWdnYWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gU2V0IHBvc2l0aW9uXG4gICAgICAgIGlmICghd2F5cG9pbnQub3B0aW9ucykgeyB3YXlwb2ludC5vcHRpb25zID0ge307IH1cbiAgICAgICAgd2F5cG9pbnQub3B0aW9ucy5wb3NpdGlvbiA9IGluZGV4ICsgMTtcbiAgICAgICAgLy8gTWFya2VyIHRpdGxlXG4gICAgICAgIGlmICh3YXlwb2ludC5vcHRpb25zICYmIHdheXBvaW50Lm9wdGlvbnMudGl0bGUpIHtcbiAgICAgICAgICBtYXJrZXJPcHRpb25zLnRpdGxlID0gd2F5cG9pbnQub3B0aW9ucy50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrZXIgdXVpZFxuICAgICAgICBpZiAod2F5cG9pbnQub3B0aW9ucyAmJiB3YXlwb2ludC5vcHRpb25zLnV1aWQpIHtcbiAgICAgICAgICBtYXJrZXJPcHRpb25zLnV1aWQgPSB3YXlwb2ludC5vcHRpb25zLnV1aWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIG1hcmtlclxuICAgICAgICBsZXQgbWFya2VyID0gTC5tYXJrZXIoXG4gICAgICAgICAgICBbd2F5cG9pbnQubGF0TG5nLmxhdCwgd2F5cG9pbnQubGF0TG5nLmxuZ10sXG4gICAgICAgICAgICBtYXJrZXJPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIC8vIE1lcmtlciBwb3B1cCBkZXNjXG4gICAgICAgIGlmICh3YXlwb2ludC5vcHRpb25zICYmIHdheXBvaW50Lm9wdGlvbnMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAvLyBDb250ZW50IG9mIHBvcHVwOiBoZXJlIHRoZSBzdGVwIG51bWJlciBhbmQgZGVzY3JpcHRpb25cbiAgICAgICAgICBtYXJrZXIuYmluZFBvcHVwKHdheXBvaW50Lm9wdGlvbnMucG9zaXRpb24gKyAnIC0gJyArIHdheXBvaW50Lm9wdGlvbnMuZGVzY3JpcHRpb24pO1xuICAgICAgICAgIC8vIERpc3BsYXkvaGlkZSBwb3B1cCBvbiBtb3VzZSBvdmVyL291dFxuICAgICAgICAgIG1hcmtlci5vbignbW91c2VvdmVyJywgKCkgPT4geyB0aGlzLm9wZW5Qb3B1cCgpOyB9KTtcbiAgICAgICAgICBtYXJrZXIub24oJ21vdXNlb3V0JywgKCkgPT4geyB0aGlzLmNsb3NlUG9wdXAoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIG1hcmtlciBsb2NhdGlvblxuICAgICAgICBtYXJrZXIub24oJ2RyYWdlbmQnLCAoZSkgPT4geyB0aGlzLnVwZGF0ZU1hcmtlcnMoZSk7IH0pO1xuXG4gICAgICAgIHJldHVybiBtYXJrZXI7XG4gICAgICB9LFxuICAgICAgdXBkYXRlTWFya2VycyhlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCkge1xuICAgICAgICAgIGxldCBtYXJrZXIgPSB0aGlzLm1hcmtlcnNMaXN0LmZpbmQobSA9PiBlLnRhcmdldC5vcHRpb25zICYmIGUudGFyZ2V0Lm9wdGlvbnMudXVpZCA/IChtLnV1aWQgPT09IGUudGFyZ2V0Lm9wdGlvbnMudXVpZCkgOiBmYWxzZSk7XG5cbiAgICAgICAgICBpZiAobWFya2VyICYmIGUudGFyZ2V0Ll9sYXRsbmcpIHtcbiAgICAgICAgICAgIG1hcmtlci5sYXRpdHVkZSA9IGUudGFyZ2V0Ll9sYXRsbmcubGF0O1xuICAgICAgICAgICAgbWFya2VyLmxvbmdpdHVkZSA9IGUudGFyZ2V0Ll9sYXRsbmcubG5nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZU1hcmtlcnMnLCB0aGlzLm1hcmtlcnNMaXN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbiAgLyogSGlkZSBsZWFmbGV0IGl0aW5lcmFyeSAqL1xuICBkaXYubGVhZmxldC10b3AubGVhZmxldC1yaWdodCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIH1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHYtY2FyZCBlbGV2YXRpb249XCIyXCIgdGlsZT5cbiAgICAgIDx2LXJvdyBuby1ndXR0ZXJzIGNsYXNzPVwicGEtMlwiIHYtaWY9XCIhaGlkZUZpbHRlcnNcIj5cbiAgICAgICAgPHNsb3QgbmFtZT1cImZpbHRlcnNcIiA6ZmlsdGVycy5zeW5jPVwiZmlsdGVyc1wiIDp0cmlnZ2VyPVwiZmlsdGVyQ2hhbmdlXCI+PC9zbG90PlxuICAgICAgPC92LXJvdz5cbiAgICAgIDx2LWRhdGEtdGFibGVcbiAgICAgICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICAgICAgOmhlYWRlcnM9XCJoZWFkZXJzXCJcbiAgICAgICAgICA6aXRlbXM9XCJkYXRhXCJcbiAgICAgICAgICA6b3B0aW9ucy5zeW5jPVwib3B0aW9uc1wiXG4gICAgICAgICAgOnNlcnZlci1pdGVtcy1sZW5ndGg9XCJpdGVtQ291bnRcIlxuICAgICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1wiXG4gICAgICAgICAgbG9hZGluZy10ZXh0PVwiQ2hhcmdlbWVudC4uLlwiXG4gICAgICAgICAgY2xhc3M9XCJlbGV2YXRpb24tMVwiXG4gICAgICAgICAgOml0ZW1zLXBlci1wYWdlPVwibmJJdGVtc1BlclBhZ2VcIlxuICAgICAgICAgIDpmb290ZXItcHJvcHM9XCJ7ICdpdGVtcy1wZXItcGFnZS10ZXh0JzonTGlnbmVzIHBhciBwYWdlJywgJ2l0ZW1zLXBlci1wYWdlLW9wdGlvbnMnOiBbMTAsIDIwLCAzMCwgNTAsIC0xXSB9XCJcbiAgICAgICAgICA6aXRlbS1jbGFzcz1cIml0ZW1Sb3dCYWNrZ3JvdW5kXCJcbiAgICAgICAgICA6c2hvdy1zZWxlY3Q9XCJjaGVja2FibGVcIlxuICAgICAgPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0udGh1bWI9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJ0aHVtYlwiPlxuICAgICAgICAgICAgPHYtaW1nIDpzcmM9XCJpdGVtLnRodW1iXCIgaGVpZ2h0PVwiNTBweFwiIHdpZHRoPVwiNTBweFwiPjwvdi1pbWc+XG4gICAgICAgICAgPC9zbG90PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5hY3Rpb25zPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8di1pY29uIHYtaWY9XCIoKGFjdGlvbi5uYW1lID09PSAncmVzZXQnICYmICFpdGVtLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb24ubmFtZSA9PT0gJ2FyY2hpdmUnICYmICFpdGVtLmlzQXJjaGl2ZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKGFjdGlvbi5uYW1lICE9PSAncmVzZXQnICYmIGFjdGlvbi5uYW1lICE9PSAnYXJjaGl2ZScpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICghYWN0aW9uLnJpZ2h0cyB8fCBjaGVja1JpZ2h0cyhhY3Rpb24ucmlnaHRzKSlcIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwicm91dGUoaXRlbSwgYWN0aW9uLm5hbWUsIChhY3Rpb24udGFyZ2V0ID8gYWN0aW9uLnRhcmdldCA6IG51bGwpLCBhY3Rpb24udXJsLCBhY3Rpb24ucGFyYW0sIGFjdGlvbi5jb25maXJtLCBhY3Rpb24uaXNOb3RpZnlEZWxpdmVyeVNjaGVkdWxlKVwiXG4gICAgICAgICAgICAgICAgICB2LWZvcj1cImFjdGlvbiBpbiBhY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgIDprZXk9XCJhY3Rpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgICA6Y29sb3I9XCJnZXRDb2xvcihhY3Rpb24sIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgIDp0aXRsZT1cImdldFRpdGxlKGFjdGlvbiwgaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiYWN0aW9uLmljb25cIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmljb24gfX1cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlLWlmPVwiYWN0aW9uLmljb25zICYmIGFjdGlvbi5pY29ucy50eXBlID09PSAnc2hvd01hcE1hcmtlcicgJiYgaXRlbS5hZGRyZXNzICYmIGl0ZW0uYWRkcmVzcy5sYXRpdHVkZSAmJiBpdGVtLmFkZHJlc3MubG9uZ2l0dWRlXCI+XG4gICAgICAgICAgICAgICAge3sgYWN0aW9uLmljb25zLndpdGggfX1cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlLWlmPVwiYWN0aW9uLmljb25zICYmIGFjdGlvbi5pY29ucy50eXBlID09PSAnc2hvd01hcE1hcmtlcidcIj5cbiAgICAgICAgICAgICAgICB7eyBhY3Rpb24uaWNvbnMud2l0aG91dCB9fVxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8L3YtaWNvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIHRlbXBsYXRlcyB0byBmb3JtYXQgZGF0ZSAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmRhdGU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIHt7IGl0ZW0uZGF0ZSB8IGRhdGUgfX1cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLnN0YXJ0VmFsaWRpdHk9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIHt7IGl0ZW0uc3RhcnRWYWxpZGl0eSB8IGRhdGUgfX1cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmVuZFZhbGlkaXR5PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLmVuZFZhbGlkaXR5IHwgZGF0ZSB9fVxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uZGVsaXZlcnlEYXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICB7eyBpdGVtLmRlbGl2ZXJ5RGF0ZSB8IGRhdGUgfX1cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmRhdGVXaXRob3V0SG91cj1cInsgaXRlbSB9XCI+XG4gICAgICAgICAge3sgaXRlbS5kYXRlV2l0aG91dEhvdXIgfCBkYXRlIH19XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGFsbCBkZXRhaWxzIG9yZGVycyBpbiBzY2hlZHVsZSBsaXN0IC0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uZGV0YWlscz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPG9sIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMHB4IWltcG9ydGFudDtcIiBjbGFzcz1cInB0LTJcIj5cbiAgICAgICAgICAgIDxkcmFnZ2FibGUgOmxpc3Q9XCJpdGVtLmRldGFpbHNcIiA6Z3JvdXA9XCInZGVsaXZlcnlTY2hlZHVsZU9yZGVyLScgKyBpdGVtLmlkXCIgQGNoYW5nZT1cImNoYW5nZU9yZGVyUG9zaXRpb24oaXRlbSlcIiA6ZGlzYWJsZWQ9XCIhY2FuRHJhZ2dhYmxlKGl0ZW0uZGV0YWlscylcIj5cbiAgICAgICAgICAgICAgPGxpIHYtZm9yPVwiZGV0YWlsIGluIGl0ZW0uZGV0YWlsc1wiIDprZXk9XCJkZXRhaWwuZGVsaXZlcnlTY2hlZHVsZUlkXCI+XG4gICAgICAgICAgICAgICAgPHYtcm93IHYtaWY9XCJkZXRhaWwuaXNDb21tZW50XCIgY2xhc3M9XCJwcmltYXJ5LS10ZXh0XCIgc3R5bGU9XCJmb250LXN0eWxlOiBpdGFsaWM7XCI+XG4gICAgICAgICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgc21hbGwgY2xhc3M9XCJtci0yXCI+bWRpLWNvbW1lbnQtdGV4dC1vdXRsaW5lPC92LWljb24+e3sgZGV0YWlsLnRleHQgfX1cbiAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICA8di1yb3cgdi1lbHNlIG5vLWd1dHRlcnM+XG4gICAgICAgICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDx2LXJvdyBuby1ndXR0ZXJzPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgOnN0eWxlPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogZGV0YWlsLndhcmVob3VzZUNvbG9yID8gZGV0YWlsLndhcmVob3VzZUNvbG9yIDogJycsICd3aWR0aCc6ICc1cHgnLCAnbWFyZ2luLXJpZ2h0JzogJzVweCd9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1ib2xkXCI+e3sgZGV0YWlsLndhcmVob3VzZSB9fTwvc3Bhbj4gLVxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRldGFpbC5jdXN0b21lciB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1ib2xkXCI+e3sgZGV0YWlsLnNpdGUgfX08L3NwYW4+IC1cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkZXRhaWwucHJvZHVjdCB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1ib2xkXCI+e3sgZGV0YWlsLnF1YW50aXR5IH19PC9zcGFuPiAtXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImRldGFpbC5ob3Vyc1wiPiB7eyBkZXRhaWwuaG91cnMgfX0gLSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCInL2FwcC9vcmRlci1pdGVtcy9zaG93LycgKyBkZXRhaWwub3JkZXJVdWlkIFwiIHRhcmdldD1cIl9ibGFua1wiPkNkZS4ge3sgZGV0YWlsLm9yZGVyTnVtYmVyIH19IDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZGV0YWlsLm5iX3NjaGVkdWxlcyAmJiBkZXRhaWwubmJfc2NoZWR1bGVzID4gMVwiIGNsYXNzPVwiZm9udC1pdGFsaWNcIiA6dGl0bGU9XCJkZXRhaWwubmJfc2NoZWR1bGVzICsgJyB0b3VybsOpZXMnXCI+Jm5ic3A7KCoge3sgZGV0YWlsLm5iX3NjaGVkdWxlcyB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgPHYtY29sIHNtPVwiMVwiIGNsYXNzPVwicGEtMCB0ZXh0LWNlbnRlciBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LXJvdyBuby1ndXR0ZXJzIGNsYXNzPVwibWEtMCBwYS0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNsYXNzPVwibWEtMCBwYS0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1jaGVja2JveCA6ZGlzYWJsZWQ9XCJkZXRhaWwuZGlzYWJsZWQgfHwgIWNoZWNrUmlnaHRzKGRldGFpbC5yaWdodHMgKyAnLHBsYW5pZmllZDpkZWxpdmVyeS1zY2hlZHVsZScpXCIgY2xhc3M9XCJwYS0wIG1hLTBcIiBoaWRlLWRldGFpbHMgc21hbGwgdGl0bGU9XCJSw6lhbGlzw6lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cImNoYW5nZVJlYWxpc2VkT3JkZXIoZGV0YWlsLCBpdGVtKVwiIHYtbW9kZWw9XCJkZXRhaWwuaXNfcmVhbGlzZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjaGVja1JpZ2h0cyhkZXRhaWwucmlnaHRzKVwiIEBjbGljaz1cIiRlbWl0dGVyLmVtaXQoJ29wZW4tbW9kYWwtdHJhbnNmZXItZHNvJywgeyBkZXRhaWw6IGRldGFpbCwgZGVsaXZlcnlTY2hlZHVsZTogaXRlbSB9KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlLDqWFmZmVjdGVyIGxlIHRvdXJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8di1pY29uIDpjb2xvcj1cIiFjaGVja1JpZ2h0cyhkZXRhaWwucmlnaHRzKSA/ICcnIDogJ3ByaW1hcnknXCI+bWRpLWZvbGRlci1hcnJvdy11cC1kb3duLW91dGxpbmU8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgIDx2LWRpdmlkZXI+PC92LWRpdmlkZXI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L2RyYWdnYWJsZT5cbiAgICAgICAgICA8L29sPlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gUGFyc2luZyBjaGFydGVkIHRvIHN0cmluZyAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmlzX2NoYXJ0ZWQ9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIHt7IGl0ZW0uaXNfY2hhcnRlZCA/ICdPdWknIDogJ05vbicgfX1cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIHRlbXBsYXRlIHRvIGRpc3BsYXkgdHJ1Y2sgZGV0YWlscyBmb3IgcGxhbm5pbmcgSisxIHJlc3VtZSB2aWV3LS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS50cnVja0RldGFpbHM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCJ0cnVja0RldGFpbCBpbiBpdGVtLnRydWNrRGV0YWlsc1wiIDprZXk9XCJ0cnVja0RldGFpbC5kZWxpdmVyeVNjaGVkdWxlSWRcIiB2LWlmPVwidHJ1Y2tEZXRhaWwgJiYgdHJ1Y2tEZXRhaWwgIT09ICcnXCI+XG4gICAgICAgICAgICAgIHt7IHRydWNrRGV0YWlsIH19PGJyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cIml0ZW0uZHJpdmVyICYmIGl0ZW0uZHJpdmVyLnBob25lXCI+XG4gICAgICAgICAgICAgIHt7IGl0ZW0uZHJpdmVyLnBob25lIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGNvc3RzIGZvciBwbGFubmluZyBKKzEgcmVzdW1lIHZpZXctLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmNvc3RzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiIHYtaWY9XCJpdGVtLmNvc3RzICYmIGl0ZW0uY29zdHMua2lsb21ldGVyc1wiPnt7IGl0ZW0uY29zdHMua2lsb21ldGVycyB9fSBLbTwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgdi1pZj1cIml0ZW0uY29zdHMgJiYgaXRlbS5jb3N0cy5wcmljZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiYCR7aXRlbS5jb3N0cy5wdUF0Q29sb3J9LS10ZXh0YFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgaXRlbS5jb3N0cy5wcmljZSB9fSDigqxcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIHRlbXBsYXRlIHRvIGRpc3BsYXkgdG91cnMgZm9yIHBsYW5uaW5nIEorMSByZXN1bWUgdmlldy0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0udG91cnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG91cnNRdHlcIj57eyBpdGVtLnRvdXJzLmxlbmd0aCAvIDIgfX0gVG91cnM8L3NwYW4+PGJyPlxuICAgICAgICAgIDxzcGFuIHYtZm9yPVwiKHRvdXIsIGluZGV4KSBpbiBpdGVtLnRvdXJzXCIgOmtleT1cInRvdXIuZGVsaXZlcnlTY2hlZHVsZUlkXCI+XG4gICAgICAgICAgICAgIDxzcGFuIDpzdHlsZT1cIntjb2xvcjogY29sb3JXYXJlaG91c2UodG91cil9XCI+e3sgdG91ciB9fTwvc3Bhbj48c3BhbiB2LWlmPVwiaW5kZXggPCBpdGVtLnRvdXJzLmxlbmd0aCAtIDFcIj4gLT4gPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIHRlbXBsYXRlIHRvIGRpc3BsYXkgSisxLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS50b3Vyc0N1c3RvbXM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxzcGFuIHYtZm9yPVwiKGRhdGEsIGluZGV4KSBpbiBpdGVtLnRvdXJzQ3VzdG9tc1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cImRhdGEuaXNDb21tZW50ICYmIGZpbHRlcnMud2l0aF9jb21tZW50c1wiIGNsYXNzPVwicHJpbWFyeS0tdGV4dFwiIHN0eWxlPVwiZm9udC1zdHlsZTogaXRhbGljO1wiIDp0aXRsZT1cImRhdGEudGV4dFwiPlxuICAgICAgICAgICAgIDx2LWljb24gY29sb3I9XCJwcmltYXJ5XCIgc21hbGwgY2xhc3M9XCJtci0yXCI+bWRpLWNvbW1lbnQtdGV4dC1vdXRsaW5lPC92LWljb24+e3sgZGF0YS50ZXh0IHwgbGltaXRTdHJpbmcoNDApIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAgdi1pZj1cIiFkYXRhLmlzQ29tbWVudFwiPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZGF0YS5udW1cIj57eyBkYXRhLm51bSB9fS4gPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZGF0YS5jb2xvclwiIDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGRhdGEuY29sb3IsICd3aWR0aCc6ICc1cHgnLCAnbWFyZ2luLXJpZ2h0JzogJzVweCd9XCI+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBkYXRhLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJpbmRleCAlIDIgPT09IDBcIj48di1pY29uIHNtYWxsIGNsYXNzPVwicGItMSBwcmltYXJ5LS1jbGFzc1wiPm1kaS1hcnJvdy1yaWdodDwvdi1pY29uPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJkYXRhLnF1YW50aXR5XCI+ICh7eyBkYXRhLnF1YW50aXR5IH19IFQpPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCIhZGF0YS5yZWFsaXNlZFwiIGNsYXNzPVwicmVkLS10ZXh0IGZvbnQtaXRhbGljXCIgdGl0bGU9XCJUb3VyIG5vbiByw6lhbGlzw6lcIj4gKE5SKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZGF0YS5uYlNjaGVkdWxlcyAmJiBkYXRhLm5iU2NoZWR1bGVzID4gMVwiIGNsYXNzPVwiZm9udC1pdGFsaWNcIiA6dGl0bGU9XCJkYXRhLm5iU2NoZWR1bGVzICsgJyB0b3VybsOpZXMnXCI+ICgqIHt7IGRhdGEubmJTY2hlZHVsZXMgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmN1c3RvbWVyTGlzdD1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPG9sIGNsYXNzPVwicGwtMFwiPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiY3VzdG9tZXIgaW4gaXRlbS5jdXN0b21lckxpc3RcIiA+XG4gICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjdXN0b21lciAmJiAhY3VzdG9tZXIuaXNNZXNzYWdlXCIgOnN0eWxlPVwiJ2NvbG9yOicgKyAoY3VzdG9tZXIubmFtZSA9PT0gJy0nID8gJ3RyYW5zcGFyZW50JyA6ICcnKVwiIDp0aXRsZT1cImN1c3RvbWVyLm5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBjdXN0b21lci5udW0gfX0uIHt7IGN1c3RvbWVyLm5hbWUgfCBsaW1pdFN0cmluZyB9fVxuICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8YnIgdi1lbHNlPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8L29sPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0ucHJvZHVjdHNMaXN0PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8b2wgY2xhc3M9XCJwbC0wXCI+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJwcm9kdWN0IGluIGl0ZW0ucHJvZHVjdHNMaXN0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJwcm9kdWN0ICYmICFwcm9kdWN0LmlzTWVzc2FnZVwiIDpzdHlsZT1cIidjb2xvcjonICsgKHByb2R1Y3QubmFtZSA9PT0gJy0nID8gJ3RyYW5zcGFyZW50JyA6ICcnKVwiIDp0aXRsZT1cInByb2R1Y3QubmFtZVwiPlxuICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QubnVtIH19LiB7eyBwcm9kdWN0Lm5hbWUgfCBsaW1pdFN0cmluZyB9fVxuICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8YnIgdi1lbHNlPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8L29sPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uaG91cnNMaXN0PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8b2wgY2xhc3M9XCJwbC0wXCI+XG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJob3VyIGluIGl0ZW0uaG91cnNMaXN0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJob3VyICYmICFob3VyLmlzTWVzc2FnZVwiIDpzdHlsZT1cIidjb2xvcjonICsgKGhvdXIubmFtZSA9PT0gJy0nID8gJ3RyYW5zcGFyZW50JyA6ICcnKVwiIDp0aXRsZT1cImhvdXIubnVtICsgJy4gJyArIGhvdXIubmFtZVwiPlxuICAgICAgICAgICAgICAgIHt7IGhvdXIubnVtIH19LiB7eyBob3VyLm5hbWUgfCBsaW1pdFN0cmluZygxMikgfX1cbiAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJyIHYtZWxzZT5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPC9vbD5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmRlbGl2ZXJ5VGltZXNBbmRNb21lbnRzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICB7eyBnZXREZWxpdmVyeVRpbWVzQW5kTW9tZW50cyhpdGVtKSB9fVxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gY29sb3JzIC0tPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uY29sb3I9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWljb24gOmNvbG9yPVwiaXRlbS5jb2xvclwiPm1kaS1wYWxldHRlPC92LWljb24+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBTaXRlIG5hbWUgYWRkcmVzcyAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLnNpdGUubmFtZUFkZHJlc3M9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZFwiPnt7IGl0ZW0uc2l0ZSA/IGl0ZW0uc2l0ZS5uYW1lIDogJycgfX08L3NwYW4+PGJyPlxuICAgICAgICAgIHt7IGl0ZW0uc2l0ZSAmJiBpdGVtLnNpdGUuYWRkcmVzcyA/IGl0ZW0uc2l0ZS5hZGRyZXNzLmFkZHJlc3MxICsgJywgJyArIGl0ZW0uc2l0ZS5hZGRyZXNzLnBvc3Rjb2RlICsgJyAnICsgaXRlbS5zaXRlLmFkZHJlc3MuY2l0eSA6ICcnIH19XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBhY3RpdmUgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5pc0FjdGl2ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtaWNvbiA6Y29sb3I9XCJpdGVtLmlzQWN0aXZlID8gJ3ByaW1hcnknIDogJ2Vycm9yJ1wiPnt7IGl0ZW0uaXNBY3RpdmUgPyBcIm1kaS1jaGVja1wiIDogXCJtZGktY2xvc2VcIiB9fTwvdi1pY29uPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uaXNXcml0ZXI9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDx2LWljb24gOmNvbG9yPVwiaXRlbS5pc1dyaXRlciA/ICdwcmltYXJ5JyA6ICdlcnJvcidcIj57eyBpdGVtLmlzV3JpdGVyID8gXCJtZGktY2hlY2tcIiA6IFwibWRpLWNsb3NlXCIgfX08L3YtaWNvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmlzX2FjdGl2ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtaWNvbiA6Y29sb3I9XCJpdGVtLmlzX2FjdGl2ZSA/ICdwcmltYXJ5JyA6ICdlcnJvcidcIj57eyBpdGVtLmlzX2FjdGl2ZSA/IFwibWRpLWNoZWNrXCIgOiBcIm1kaS1jbG9zZVwiIH19PC92LWljb24+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBXYXJlaG91c2UgY29sb3IgbmFtZSAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLnF1YXJyeS5jb2xvck5hbWU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cIml0ZW0ucXVhcnJ5ICYmIGl0ZW0ucXVhcnJ5LmNvbG9yTmFtZVwiPlxuICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICA8ZGl2IDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0ucXVhcnJ5LmNvbG9yTmFtZS5jb2xvciwgJ3dpZHRoJzogJzVweCcsICdtYXJnaW4tcmlnaHQnOiAnNXB4J31cIj48L2Rpdj5cbiAgICAgICAgICAgICAge3sgaXRlbS5xdWFycnkuc2hvcnRfbmFtZSB9fVxuICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLndhcmVob3VzZS5jb2xvck5hbWU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cIml0ZW0ud2FyZWhvdXNlICYmIGl0ZW0ud2FyZWhvdXNlLmNvbG9yTmFtZVwiPlxuICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICA8ZGl2IDpzdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0ud2FyZWhvdXNlLmNvbG9yTmFtZS5jb2xvciwgJ3dpZHRoJzogJzVweCcsICdtYXJnaW4tcmlnaHQnOiAnNXB4J31cIj48L2Rpdj5cbiAgICAgICAgICAgICAge3sgaXRlbS53YXJlaG91c2Uuc2hvcnRfbmFtZSB9fVxuICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cIml0ZW0uZGVsaXZlcnlTY2hlZHVsZU9yZGVycyAmJiBpdGVtLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBAY2xpY2s9XCJvcGVuRGV0YWlsKGl0ZW0pXCIgOmNsYXNzPVwiZ2V0Q2xhc3NRdHlDb2xvcihpdGVtKVwiPlxuICAgICAgICAgICAgICB7eyBpdGVtLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnMucmVkdWNlKChzdW0sIHZhbHVlKSA9PiBzdW0gKz0gKHZhbHVlLmlzX3JlYWxpc2VkID8gdmFsdWUuZGVsaXZlcnlfcXVhbnRpdHkgOiAwKSwgMCkgfX0ve3sgaXRlbS5xdWFudGl0eU9yZGVyZWQgfX0mbmJzcDtUXG4gICAgICAgICAgICAgIDx2LWljb24gdi1pZj1cIiEkcmlnaHRzLmhhc1Byb2ZpbGUoJ2Jhc2N1bGUnKVwiIGNsYXNzPVwibWwtMVwiIDppZD1cIidhcnJvd18nICsgaXRlbS51dWlkXCI+bWRpLWNoZXZyb24tZG93bjwvdi1pY29uPlxuICAgICAgICAgICAgICA8di1pY29uIHYtZWxzZSBjbGFzcz1cIm1sLTFcIiA6aWQ9XCInYXJyb3dfJyArIGl0ZW0udXVpZFwiPm1kaS1jaGV2cm9uLXVwPC92LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgOmlkPVwiJ2RldGFpbF8nICsgaXRlbS51dWlkXCIgOmNsYXNzPVwiJHJpZ2h0cy5oYXNQcm9maWxlKCdiYXNjdWxlJykgPyAnJyA6ICdkLW5vbmUnXCI+XG4gICAgICAgICAgICAgIDxvbD5cbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJkZWxpdmVyeXNjaGVkdWxlb3JkZXIgaW4gaXRlbS5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW5vLXdyYXBcIiB2LWlmPVwiIWRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5kZWxpdmVyeV9zY2hlZHVsZS5pc0NoYXJ0ZWQgJiYgZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmRlbGl2ZXJ5X3NjaGVkdWxlLnRydWNrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCIhZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmlzX3JlYWxpc2VkXCIgY2xhc3M9XCJyZWQtLXRleHQgZm9udC1pdGFsaWNcIiB0aXRsZT1cIlRvdXIgbm9uIHLDqWFsaXPDqVwiPihOUikgLSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5kZWxpdmVyeV9zY2hlZHVsZS50cnVjay5udW1iZXJwbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAoe3sgZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmRlbGl2ZXJ5X3F1YW50aXR5IH19VCk8YnIgLz57eyBkZWxpdmVyeXNjaGVkdWxlb3JkZXIuZGVsaXZlcnlfc2NoZWR1bGUudHJ1Y2sudHJhbnNwb3J0ZXIubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaSB2LWVsc2UtaWY9XCJkZWxpdmVyeXNjaGVkdWxlb3JkZXIuZGVsaXZlcnlfc2NoZWR1bGUuaXNDaGFydGVkICYmIGRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5kZWxpdmVyeV9zY2hlZHVsZS50cmFuc3BvcnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiIWRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5pc19yZWFsaXNlZFwiIGNsYXNzPVwicmVkLS10ZXh0IGZvbnQtaXRhbGljXCIgdGl0bGU9XCJUb3VyIG5vbiByw6lhbGlzw6lcIj4oTlIpIC0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7eyBkZWxpdmVyeXNjaGVkdWxlb3JkZXIuZGVsaXZlcnlfc2NoZWR1bGUudHJhbnNwb3J0ZXIubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAoe3sgZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmRlbGl2ZXJ5X3F1YW50aXR5IH19VClcbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgdi1lbHNlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiIWRlbGl2ZXJ5c2NoZWR1bGVvcmRlci5pc19yZWFsaXNlZFwiIGNsYXNzPVwicmVkLS10ZXh0IGZvbnQtaXRhbGljXCIgdGl0bGU9XCJUb3VyIG5vbiByw6lhbGlzw6lcIj4oTlIpIC0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAoe3sgZGVsaXZlcnlzY2hlZHVsZW9yZGVyLmRlbGl2ZXJ5X3F1YW50aXR5IH19VClcbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9vbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgdi1lbHNlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZC0tdGV4dFwiPjAve3sgaXRlbS5xdWFudGl0eU9yZGVyZWQgfX0mbmJzcDtUPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzVGltZXM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cImdldFRpbWVzVGl0bGUoaXRlbSkgIT09ICcnXCI+XG4gICAgICAgICAgICA8di10b29sdGlwIGxlZnQgY29sb3I9XCJibGFja1wiPlxuICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OmFjdGl2YXRvcj1cInsgb24sIGF0dHJzIH1cIj5cbiAgICAgICAgICAgICAgICA8di1pY29uIHYtYmluZD1cImF0dHJzXCIgdi1vbj1cIm9uXCIgc3R5bGU9XCJjdXJzb3I6IGhlbHA7XCI+bWRpLWNsb2NrLW91dGxpbmU8L3YtaWNvbj5cbiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHByZT57eyBnZXRUaW1lc1RpdGxlKGl0ZW0pIH19PC9wcmU+XG4gICAgICAgICAgICA8L3YtdG9vbHRpcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIFVzZXIgaW5mbyBhcnJheSAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmRyaXZlci51c2VySW5mb3NBcnJheT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJpdGVtLmRyaXZlciAmJiBpdGVtLmRyaXZlci51c2VySW5mb3NBcnJheVwiPlxuICAgICAgICAgICAgPGRpdj57eyBpdGVtLmRyaXZlci51c2VySW5mb3NBcnJheS5maXJzdG5hbWUgfX0mbmJzcDt7eyBpdGVtLmRyaXZlci51c2VySW5mb3NBcnJheS5sYXN0bmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdj57eyBpdGVtLmRyaXZlci51c2VySW5mb3NBcnJheS5waG9uZSB9fTwvZGl2PlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBDdXN0b21lciBjb2RlIG5hbWUgZm9yIEJhc2N1bGUgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5jdXN0b21lci5uYW1lQ29kZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJpdGVtLmN1c3RvbWVyXCI+XG4gICAgICAgICAgICA8ZGl2Pnt7IGl0ZW0uY3VzdG9tZXIubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiB2LWlmPVwiJHJpZ2h0cy5oYXNQcm9maWxlKCdiYXNjdWxlJylcIiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGRcIj4gLSB7eyBpdGVtLmN1c3RvbWVyLmNvZGUgfX08L2Rpdj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gQ3JlYXRvciBpbml0aWFscyAtLT5cbiAgICAgICAgPHRlbXBsYXRlICNpdGVtLmNyZWF0b3IuZnVsbG5hbWU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgIDxzcGFuIHYtaWY9XCJpdGVtLmNyZWF0b3IgJiYgaXRlbS5jcmVhdG9yLmluaXRpYWxzXCIgOnRpdGxlPVwiaXRlbS5jcmVhdG9yLmZ1bGxuYW1lXCI+e3sgaXRlbS5jcmVhdG9yLmluaXRpYWxzIH19PC9zcGFuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gSW5lcnQgLS0+XG4gICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5pc0luZXJ0PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICA8di1pY29uIHYtaWY9XCJpdGVtLmlzSW5lcnRcIiBjb2xvcj1cInByaW1hcnlcIj5tZGktY2hlY2s8L3YtaWNvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uc2l0ZS5ob3Vyc1N0cj1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgPHYtdG9vbHRpcCBsZWZ0IGNvbG9yPVwiYmxhY2tcIiB2LWlmPVwiaXRlbS5zaXRlLmhvdXJzU3RyICE9PSAnJ1wiPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphY3RpdmF0b3I9XCJ7IG9uLCBhdHRycyB9XCI+XG4gICAgICAgICAgICAgIDx2LWljb24gdi1iaW5kPVwiYXR0cnNcIiB2LW9uPVwib25cIiBzdHlsZT1cImN1cnNvcjogaGVscDtcIj5tZGktY2xvY2stb3V0bGluZTwvdi1pY29uPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxwcmU+e3sgaXRlbS5zaXRlLmhvdXJzU3RyIH19PC9wcmU+XG4gICAgICAgICAgPC92LXRvb2x0aXA+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L3YtZGF0YS10YWJsZT5cbiAgICA8L3YtY2FyZD5cbiAgICA8bW9kYWwgdi1tb2RlbDp2YWx1ZT1cImRlbGV0ZU1vZGFsSXNPcGVuXCIgY29uZmlybT1cIkNvbmZpcm1lclwiIGNhbmNlbD1cIkFubnVsZXJcIiB0aXRsZT1cIkNvbmZpbWVyIGxhIHN1cHByZXNzaW9uXCJcbiAgICAgICAgICAgQGNvbmZpcm09XCJkZWxldGVPYmplY3QoY3VycmVudEl0ZW0pXCIgQGNhbmNlbD1cImRlbGV0ZU1vZGFsSXNPcGVuID0gZmFsc2VcIiB3aWR0aD1cIjQwJVwiPlxuICAgICAgPGRpdiB2LWlmPVwiY3VycmVudEl0ZW1cIj5cbiAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1jZW50ZXIgcGEtNiBtYS0wIGZvbnQtd2VpZ2h0LXJlZ3VsYXJcIj7DinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBzdXBwcmltZXIgOiB7eyBjdXJyZW50SXRlbS5uYW1lIH19ID88L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8di1yb3cgdi1lbHNlIG5vLWd1dHRlcnMganVzdGlmeT1cImNlbnRlclwiPlxuICAgICAgICA8di1wcm9ncmVzcy1jaXJjdWxhciBpbmRldGVybWluYXRlIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwicGEtMyBtYS02XCI+PC92LXByb2dyZXNzLWNpcmN1bGFyPlxuICAgICAgPC92LXJvdz5cbiAgICA8L21vZGFsPlxuICAgIDwhLS0gQ29uZmlybSBtb2RhbCAtLT5cbiAgICA8bW9kYWwgOnZhbHVlPVwiY29uZmlybS5vcGVuXCIgY29uZmlybT1cIkNvbmZpcm1lclwiIGNhbmNlbD1cIkFubnVsZXJcIiA6dGl0bGU9XCJjb25maXJtLnRpdGxlXCJcbiAgICAgICAgICAgQGNvbmZpcm09XCJzdWJtaXRDb25maXJtKGNvbmZpcm0pXCIgQGNhbmNlbD1cImNvbmZpcm0ub3BlbiA9IGZhbHNlXCIgd2lkdGg9XCIzMCVcIj5cbiAgICAgIDxkaXYgdi1pZj1cIiFjb25maXJtLmxvYWRcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1jZW50ZXIgcGEtNiBtYS0wIGZvbnQtd2VpZ2h0LXJlZ3VsYXJcIj57eyBjb25maXJtLm1lc3NhZ2UgfX08L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8di1yb3cgdi1lbHNlIG5vLWd1dHRlcnMganVzdGlmeT1cImNlbnRlclwiPlxuICAgICAgICA8di1wcm9ncmVzcy1jaXJjdWxhciBpbmRldGVybWluYXRlIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwicGEtMyBtYS02XCI+PC92LXByb2dyZXNzLWNpcmN1bGFyPlxuICAgICAgPC92LXJvdz5cbiAgICA8L21vZGFsPlxuICAgIDwhLS0gTm90aWZ5IG1vZGFsIC0tPlxuICAgIDxzZW5kLWRyaXZlci1tb2RhbCA6aXMtb3Blbi5zeW5jPVwibm90aWZ5TW9kYWwub3BlblwiIDppdGVtLnN5bmM9XCJub3RpZnlNb2RhbC5pdGVtXCIgOnJvdXRlPVwibm90aWZ5TW9kYWwucm91dGVcIj48L3NlbmQtZHJpdmVyLW1vZGFsPlxuXG4gICAgPGFsZXJ0IHYtaWY9XCJhbGVydC5tZXNzYWdlXCIgOm1lc3NhZ2U9XCJhbGVydC5tZXNzYWdlXCIgOnR5cGU9XCJhbGVydC50eXBlXCIgOmtleT1cImFsZXJ0LmtleVwiPjwvYWxlcnQ+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCB0eXBlPVwidHNcIj5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgZHJhZ2dhYmxlIGZyb20gXCJ2dWVkcmFnZ2FibGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgVnVlLmV4dGVuZCh7XG4gIG5hbWU6IFwiYXBpLWRhdGEtdGFibGVcIixcbiAgcHJvcHM6IFtcInJlc291cmNlXCIsIFwiaGVhZGVyc1wiLCBcImFjdGlvbnNcIiwgXCJoaWRlRmlsdGVyc1wiLCBcInZhbHVlc1wiLCBcImRlZmF1bHRGaWx0ZXJzXCIsIFwicmVsb2FkXCIsIFwidGFibGVGaWx0ZXJzXCIsIFwiY2hlY2thYmxlXCIsIFwibmJJdGVtc1wiXSxcbiAgY29tcG9uZW50czoge2RyYWdnYWJsZX0sXG4gIGRhdGE6IGZ1bmN0aW9uIChfdGhpcykge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBbXSxcbiAgICAgIG5iSXRlbXNQZXJQYWdlOiBfdGhpcy5uYkl0ZW1zID8/IDMwLFxuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgaXRlbUNvdW50OiAwLFxuICAgICAgZmlsdGVyczogW10sXG4gICAgICBkZWxldGVNb2RhbElzT3BlbjogZmFsc2UsXG4gICAgICBjdXJyZW50SXRlbTogbnVsbCwgLy8gQ3VycmVudCBzZWxlY3RlZCBpdGVtLlxuICAgICAgd2FyZWhvdXNlQ29sb3JzOiB7XG4gICAgICAgICdENjdBJzogJyM2NmZmMDAnLFxuICAgICAgICAnRDY4QSc6ICcjODg5OWRkJyxcbiAgICAgICAgJ0Q2NEEnOiAnI2ZmY2NjYycsXG4gICAgICAgICdUUkFLTSc6ICcjZmZmZmZmJyxcbiAgICAgICAgJ0Q3MkEnOiAnI2YwZWJlNCcsXG4gICAgICAgICdENjZBJzogJyNmZjk5MDAnLFxuICAgICAgICAnRDczQSc6ICcjMDBmZmZmJyxcbiAgICAgICAgJ0Q2M0EnOiAnI2ZmMDAwMCcsXG4gICAgICAgICdENjVBJzogJyM2NmNjMzMnLFxuICAgICAgICAnTkVHREknOiAnI2ZmZmZmZicsXG4gICAgICAgICdENzBEJzogJyNmZjMzOTknLFxuICAgICAgICAnRDY5QSc6ICcjZmZmZjAwJyxcbiAgICAgICAgJ0Q3MEMnOiAnI2ZmNjZmZicsXG4gICAgICAgICdENzBBJzogJyNmZjk5MzMnLFxuICAgICAgfSxcbiAgICAgIGFwcGx5RGVmYXVsdEZpbHRlcnM6IHRydWUsXG4gICAgICBkcmFnZ2luZzogZmFsc2UsXG4gICAgICBhbGVydDoge1xuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAga2V5OiAwXG4gICAgICB9LFxuICAgICAgY29uZmlybTogeyBvcGVuOiBmYWxzZSwgbWVzc2FnZTogbnVsbCwgdGl0bGU6IG51bGwsIGNvbG9yOiBudWxsLCBpY29uOiBudWxsLCB0YXJnZXQ6IG51bGwsIHJvdXRlOiBudWxsLCBsb2FkOiBmYWxzZSB9LFxuICAgICAgbm90aWZ5TW9kYWw6IHsgb3BlbjogZmFsc2UsIGl0ZW06IG51bGwsIHJvdXRlOiBudWxsIH0sXG4gICAgICBjaGVja2VkOiBbXVxuICAgIH07XG4gIH0sXG4gIGZpbHRlcnM6IHtcbiAgICBkYXRlOiAodmFsdWUpID0+IHtcbiAgICAgIHJldHVybiB2YWx1ZSA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdERC9NTS9ZWScpIDogdmFsdWU7XG4gICAgfSxcbiAgICBsaW1pdFN0cmluZyhzdHIsIG4gPSAzMCkge1xuICAgICAgcmV0dXJuIChzdHIgJiYgc3RyLmxlbmd0aCA+IG4pID8gc3RyLnNsaWNlKDAsIG4tMSkgKyAnLi4uJyA6IHN0cjtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgcmVsb2FkKCkge1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9LFxuICAgIGNoZWNrZWQ6IHtcbiAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpjaGVja2VkJywgdGhpcy5jaGVja2VkKTtcbiAgICAgIH0sXG4gICAgICBkZWVwOiB0cnVlLFxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgLy8gQXBwbHkgZGVmYXVsdCBmaWx0ZXJzXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRGaWx0ZXJzICYmIHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmYXVsdEZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdvcmRlcicpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiB0aGlzLmRlZmF1bHRGaWx0ZXJzW2tleV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc29ydEJ5LnB1c2gocHJvcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNvcnREZXNjLnB1c2godGhpcy5kZWZhdWx0RmlsdGVyc1trZXldW3Byb3BdID09PSAnZGVzYycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdEZpbHRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlcnNba2V5XSA9IHRoaXMuZGVmYXVsdEZpbHRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2V0IG51bGwgZGVmYXVsdCBmaWx0ZXJzIHdoZW4gYWxyZWFkeSB1c2VkXG4gICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICAgIH0sXG4gICAgICBkZWVwOiB0cnVlLFxuICAgIH0sXG4gICAgJ25vdGlmeU1vZGFsLml0ZW0uaXNOb3RpZnknKHNlbmRlZCkge1xuICAgICAgaWYgKCF0aGlzLm5vdGlmeU1vZGFsLm9wZW5Nb2RhbCAmJiBzZW5kZWQpIHtcbiAgICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBmaWx0ZXJDaGFuZ2UoKSB7XG4gICAgICAvLyBJbml0IHBhZ2UgdG8gMSwgdG8gZ2V0IHJlc3VsdHNcbiAgICAgIHRoaXMub3B0aW9ucy5wYWdlID0gMTtcbiAgICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgfSxcbiAgICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dmFsdWVzJywgbnVsbCk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IG9yZGVyOiB7fSB9O1xuICAgICAgY29uc3QgeyBzb3J0QnksIHNvcnREZXNjLCBwYWdlLCBpdGVtc1BlclBhZ2UgfSA9IHRoaXMub3B0aW9ucztcblxuICAgICAgLy8gU29ydFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0QnkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGtleSA9IHNvcnRCeVtpXTtcbiAgICAgICAgLy8gQ3VzdG9tIHJvd3NcbiAgICAgICAgaWYgKHNvcnRCeVtpXSA9PT0gJ3F1YXJyeS5jb2xvck5hbWUnKSB7IGtleSA9ICdxdWFycnkubmFtZSc7IH1cbiAgICAgICAgaWYgKHNvcnRCeVtpXSA9PT0gJ3dhcmVob3VzZS5jb2xvck5hbWUnKSB7IGtleSA9ICd3YXJlaG91c2UubmFtZSc7IH1cbiAgICAgICAgaWYgKHNvcnRCeVtpXSA9PT0gJ3NpdGUubmFtZUFkZHJlc3MnKSB7IGtleSA9ICdzaXRlLm5hbWUnOyB9XG4gICAgICAgIGlmIChzb3J0QnlbaV0gPT09ICdjdXN0b21lci5uYW1lQ29kZScpIHsga2V5ID0gJ2N1c3RvbWVyLm5hbWUnOyB9XG4gICAgICAgIC8vIFNvcnRcbiAgICAgICAgcGFyYW1zLm9yZGVyW2tleV0gPSAhc29ydERlc2NbaV0gPyBcImFzY1wiIDogXCJkZXNjXCI7XG4gICAgICB9XG4gICAgICAvLyBGaWx0ZXJzXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyc1trZXldKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5maWx0ZXJzW2tleV0pKSB7XG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IHRoaXMuZmlsdGVyc1trZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IFt0aGlzLmZpbHRlcnNba2V5XV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBSZXR1cm4gZmlsdGVycyB0byBBcGlEYXRhVGFibGUgY29tcG9uZW50XG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dGFibGVGaWx0ZXJzJywge1xuICAgICAgICBmaWx0ZXJzOiB7Li4udGhpcy5maWx0ZXJzfSxcbiAgICAgICAgcGFyYW1zOiB7Li4ucGFyYW1zfSwgLy8gV2l0aG91dCBwYWdpbmF0aW9uXG4gICAgICAgIHBhZ2luYXRpb246IHsgcGFnZTogcGFnZSwgaXRlbXNQZXJQYWdlOiBpdGVtc1BlclBhZ2UgfVxuICAgICAgfSk7XG4gICAgICAvLyBQYWdpbmF0aW9uXG4gICAgICBwYXJhbXMucGFnZSA9IHBhZ2U7XG4gICAgICBpZiAoaXRlbXNQZXJQYWdlID4gMCkge1xuICAgICAgICBwYXJhbXMuaXRlbXNQZXJQYWdlID0gaXRlbXNQZXJQYWdlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQodGhpcy5yZXNvdXJjZSwgeyBwYXJhbXM6IHBhcmFtcyB9KTtcblxuICAgICAgICB0aGlzLml0ZW1Db3VudCA9IHJlc3VsdC50b3RhbDtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuaXRlbUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5kYXRhID0gW107XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2VycmV1ciBsb3JzIGRlIGxhIHLDqWN1cCBkZXMgZG9ubsOpZXMuLi4nLCBlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTp2YWx1ZXMnLCB0aGlzLmRhdGEpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN3aXRjaCBsacOpIGF1eCBhY3Rpb25zIGRlIGxhIGdyaWxsZS5cbiAgICAgKi9cbiAgICByb3V0ZTogYXN5bmMgZnVuY3Rpb24gKGl0ZW0sIGFjdGlvbiwgb3BlblRhcmdldCA9ICdfYmxhbmsnLCB1cmwgPSBudWxsLCBwYXJhbSA9IG51bGwsIGNvbmZpcm0gPSBudWxsLCBpc05vdGlmeURlbGl2ZXJ5U2NoZWR1bGUgPSBmYWxzZSkge1xuICAgICAgbGV0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZS5yZXBsYWNlKC9cXD8uKi8sICcnKTsgLy8gRGVsZXRlIHBhcmFtZXRlcnNcblxuICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICBpZiAoIWl0ZW0ubmFtZSAmJiBpdGVtLm51bSkgeyBpdGVtLm5hbWUgPSBpdGVtLm51bTsgfSAvLyBDYXNlIG9yZGVyXG4gICAgICAgICAgZWxzZSBpZiAoIWl0ZW0ubmFtZSAmJiBpdGVtLmlkKSB7IGl0ZW0ubmFtZSA9ICcjJyArIGl0ZW0uaWQ7IH0gLy8gQ2FzZSBkZWxpdmVyeSBzY2hlZHVsZXNcblxuICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSBpdGVtO1xuICAgICAgICAgIHRoaXMuZGVsZXRlTW9kYWxJc09wZW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdfb3RoZXInOlxuICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXJhbSAmJiBpdGVtW3BhcmFtXSA/IGl0ZW1bcGFyYW1dIDogJyc7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsIG9wZW5UYXJnZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgdGhpcy4kZW1pdHRlci5lbWl0KCdvcGVuLW1vZGFsXycgKyBwYXJhbSwgaXRlbSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybS5tZXNzYWdlID0gY29uZmlybS5tZXNzYWdlO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtLnRpdGxlID0gY29uZmlybS50aXRsZTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybS5jb2xvciA9IGNvbmZpcm0uY29sb3I7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm0uaWNvbiA9IGNvbmZpcm0uaWNvbjtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybS5yb3V0ZSA9ICcvYXBwLycgKyByZXNvdXJjZSArICcvJyArIGFjdGlvbiArICcvJyArIGl0ZW0udXVpZDtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybS50YXJnZXQgPSBvcGVuVGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5jb25maXJtLm9wZW4gPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb3RpZnlEZWxpdmVyeVNjaGVkdWxlKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeU1vZGFsLnJvdXRlID0gJy8nICsgcmVzb3VyY2UgKyAnLycgKyBhY3Rpb24gKyAnLycgKyBpdGVtLnV1aWQ7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeU1vZGFsLml0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlNb2RhbC5vcGVuID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93Lm9wZW4oJy9hcHAvJyArIHJlc291cmNlICsgJy8nICsgYWN0aW9uICsgJy8nICsgaXRlbS51dWlkLCBvcGVuVGFyZ2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdWJtaXRDb25maXJtKGNvbmZpcm0pIHtcbiAgICAgIGNvbmZpcm0ubG9hZCA9IHRydWU7XG4gICAgICB3aW5kb3cub3Blbihjb25maXJtLnJvdXRlLCBjb25maXJtLnRhcmdldCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBEZWxldGUgYW4gb2JqZWN0LlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZU9iamVjdChpdGVtKSB7XG4gICAgICB0aGlzLmFsZXJ0Lm1lc3NhZ2UgPSBudWxsO1xuXG4gICAgICBjb25zdCBpZCA9IGl0ZW1bJ0BpZCddO1xuICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IG51bGw7IC8vIFRvIHN0YXJ0IHRoZSBkZWxldGUgbG9hZGVyLlxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuJGh0dHAuZGVsZXRlKGlkKTtcbiAgICAgICAgLy8gVXBkYXRlIGxpc3RcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaERhdGEoKTtcbiAgICAgICAgLy8gU3VjY2VzcyBtZXNzYWdlXG4gICAgICAgIGlmIChyZXMuZGF0YSAmJiByZXMuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5hbGVydC5tZXNzYWdlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICB0aGlzLmFsZXJ0LnR5cGUgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgdGhpcy5hbGVydC5rZXkrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5kYXRhICYmIGUuZGF0YS5lcnJvcikge1xuICAgICAgICAgIHRoaXMuYWxlcnQubWVzc2FnZSA9IGUuZGF0YS5lcnJvcjtcbiAgICAgICAgICB0aGlzLmFsZXJ0LnR5cGUgPSAnZGFuZ2VyJztcbiAgICAgICAgICB0aGlzLmFsZXJ0LmtleSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRlbGV0ZU1vZGFsSXNPcGVuID0gZmFsc2U7XG4gICAgfSxcbiAgICBhc3luYyBjaGFuZ2VSZWFsaXNlZE9yZGVyKGRldGFpbCwgZGVsaXZlcnlTY2hlZHVsZSkge1xuICAgICAgLy8gRGlzYWJsZSBjaGFuZ2UgY2hlY2tib3hcbiAgICAgIGRldGFpbC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAvLyBTYXZlIHJlYWxpc2F0aW9uIG9yIG5vdFxuICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuJGh0dHAucG9zdCgnL2RlbGl2ZXJ5LXNjaGVkdWxlLW9yZGVyL3JlYWxpc2VkLycgKyBkZXRhaWwuZGVsaXZlcnlTY2hlZHVsZUlkLCBkZXRhaWwpO1xuICAgICAgLy8gQ2hhbmdlIGRldGFpbCBkZXRhaWxcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmRhdGEgJiYgcmVzdWx0LmRhdGEuZGV0YWlsICYmIHJlc3VsdC5kYXRhLmRldGFpbC5kZWxpdmVyeVNjaGVkdWxlSWQpIHtcbiAgICAgICAgZGV0YWlsLmRldGFpbCA9IHJlc3VsdC5kYXRhLmRldGFpbC5kZXRhaWw7XG4gICAgICB9XG4gICAgICAvLyBDaGFuZ2UgZGVsaXZlcnkgc2NoZWR1bGUgc3RhdHVzXG4gICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5kYXRhICYmIHJlc3VsdC5kYXRhLmRlbGl2ZXJ5U2NoZWR1bGVTdGF0dXMpIHtcbiAgICAgICAgZGVsaXZlcnlTY2hlZHVsZS5zdGF0dXMgPSByZXN1bHQuZGF0YS5kZWxpdmVyeVNjaGVkdWxlU3RhdHVzO1xuICAgICAgfVxuICAgICAgLy8gRW5hYmxlIGNoYW5nZSBjaGVja2JveFxuICAgICAgZGV0YWlsLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfSxcbiAgICBjb2xvcldhcmVob3VzZSh0b3VyKSB7XG4gICAgICBpZiAodGhpcy53YXJlaG91c2VDb2xvcnNbdG91cl0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FyZWhvdXNlQ29sb3JzW3RvdXJdO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2hlY2tSaWdodHMocmlnaHRzKSB7XG4gICAgICBpZiAocmlnaHRzKSB7XG4gICAgICAgIC8vIElmIG9uZSBvZiByaWdodHMgYXJlIHRydWUsIGNhbiBhY2Nlc3NcbiAgICAgICAgcmV0dXJuIHJpZ2h0cy5zcGxpdCgnLCcpLnNvbWUocmlnaHQgPT4ge1xuICAgICAgICAgIGxldCBbYWN0aW9uLCByZXNvdXJjZV0gPSByaWdodC5zcGxpdCgnOicpO1xuICAgICAgICAgIHJldHVybiB0aGlzLiRyaWdodHMuY2FuKHJlc291cmNlLCBhY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBhc3luYyBjaGFuZ2VPcmRlclBvc2l0aW9uKGRlbGl2ZXJ5U2NoZWR1bGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuJGh0dHAucG9zdCgnZGVsaXZlcnktc2NoZWR1bGVzLycgKyBkZWxpdmVyeVNjaGVkdWxlLmlkICsgJy9vcmRlcnMtcG9zaXRpb25zJywge2RldGFpbHM6IGRlbGl2ZXJ5U2NoZWR1bGUuZGV0YWlsc30pO1xuICAgIH0sXG4gICAgZ2V0VGl0bGUoYWN0aW9uLCBpdGVtKSB7XG4gICAgICAvLyBDaGFuZ2UgZW1haWwgdGl0bGVcbiAgICAgIGlmIChhY3Rpb24uaXNOb3RpZnlEZWxpdmVyeVNjaGVkdWxlKSB7XG4gICAgICAgIGlmIChpdGVtLmlzTm90aWZ5KSB7XG4gICAgICAgICAgcmV0dXJuICdOb3RpZmljYXRpb24gZW52b3nDqWUnO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubm90aWZpY2F0aW9uUmVjaXBpZW50ICYmIGl0ZW0ubm90aWZpY2F0aW9uUmVjaXBpZW50ICE9PSAnJykge1xuICAgICAgICAgIHJldHVybiAnTm90aWZpY2F0aW9uIG5vbiBlbnZvecOpZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICdBdWN1biBkZXN0aW5hdGFpcmUnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY3Rpb24udGl0bGUgPyBhY3Rpb24udGl0bGUgOiAnJztcbiAgICB9LFxuICAgIGdldENvbG9yKGFjdGlvbiwgaXRlbSkge1xuICAgICAgLy8gQ2hhbmdlIGVtYWlsIGNvbG9yXG4gICAgICBpZiAoYWN0aW9uLmlzTm90aWZ5RGVsaXZlcnlTY2hlZHVsZSkge1xuICAgICAgICBpZiAoaXRlbS5pc05vdGlmeSkge1xuICAgICAgICAgIHJldHVybiAnbGlnaHQtZ3JlZW4nO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubm90aWZpY2F0aW9uUmVjaXBpZW50ICYmIGl0ZW0ubm90aWZpY2F0aW9uUmVjaXBpZW50ICE9PSAnJykge1xuICAgICAgICAgIHJldHVybiAnYW1iZXInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAncmVkJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gTG9jYXRpb25zXG4gICAgICBpZiAoYWN0aW9uLmljb25zICYmIGFjdGlvbi5pY29ucy50eXBlID09PSAnc2hvd01hcE1hcmtlcicgJiYgKCFpdGVtLmFkZHJlc3MgfHwgKCFpdGVtLmFkZHJlc3MubGF0aXR1ZGUgfHwgIWl0ZW0uYWRkcmVzcy5sb25naXR1ZGUpKSkge1xuICAgICAgICByZXR1cm4gJ3JlZCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY3Rpb24uY29sb3IgPyBhY3Rpb24uY29sb3IgOiAnJztcbiAgICB9LFxuICAgIGNhbkRyYWdnYWJsZShkZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZGV0YWlscy5zb21lKGRldGFpbCA9PiAhZGV0YWlsLmRpc2FibGVkICYmIHRoaXMuY2hlY2tSaWdodHMoZGV0YWlsLnJpZ2h0cykpO1xuICAgIH0sXG4gICAgb3BlbkRldGFpbChpdGVtKSB7XG4gICAgICBsZXQgdG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldGFpbF8nICsgaXRlbS51dWlkKTtcbiAgICAgIGlmICh0b2dnbGUpIHtcbiAgICAgICAgLy8gVG9nZ2xlIGRldGFpbFxuICAgICAgICB0b2dnbGUuY2xhc3NMaXN0LnRvZ2dsZSgnZC1ub25lJyk7XG4gICAgICAgIC8vIENoYW5nZSBhcnJvdyBjbGFzc1xuICAgICAgICBsZXQgYXJyb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXJyb3dfJyArIGl0ZW0udXVpZCk7XG4gICAgICAgIGlmIChhcnJvdykge1xuICAgICAgICAgIGlmICh0b2dnbGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdkLW5vbmUnKSkge1xuICAgICAgICAgICAgYXJyb3cuY2xhc3NMaXN0LnJlbW92ZSgnbWRpLWNoZXZyb24tdXAnKTtcbiAgICAgICAgICAgIGFycm93LmNsYXNzTGlzdC5hZGQoJ21kaS1jaGV2cm9uLWRvd24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyb3cuY2xhc3NMaXN0LnJlbW92ZSgnbWRpLWNoZXZyb24tZG93bicpO1xuICAgICAgICAgICAgYXJyb3cuY2xhc3NMaXN0LmFkZCgnbWRpLWNoZXZyb24tdXAnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFRpbWVzVGl0bGUoaXRlbSkge1xuICAgICAgaWYgKGl0ZW0uZGVsaXZlcnlTY2hlZHVsZU9yZGVycykge1xuICAgICAgICBsZXQgdGltZXMgPSBpdGVtLmRlbGl2ZXJ5U2NoZWR1bGVPcmRlcnMubWFwKChzLCBpZHgpID0+IHtcbiAgICAgICAgICBsZXQgdGltZSA9IG51bGw7XG4gICAgICAgICAgaWYgKHMubW9tZW50RGF5KSB7XG4gICAgICAgICAgICB0aW1lID0gKGlkeCArIDEpICsgJyAtICcgKyBzLm1vbWVudERheS5vcGVuaW5nVGltZS5uYW1lXG4gICAgICAgICAgfSBlbHNlIGlmIChzLmRlbGl2ZXJ5X2hvdXIpIHtcbiAgICAgICAgICAgIHRpbWUgPSAoaWR4ICsgMSkgKyAnIC0gJyArIHMuZGVsaXZlcnlfaG91cjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHMuZGVsaXZlcnlIb3VyKSB7XG4gICAgICAgICAgICB0aW1lID0gKGlkeCArIDEpICsgJyAtICcgKyBtb21lbnQocy5kZWxpdmVyeUhvdXIpLmZvcm1hdCgnSEg6bW0nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMuY29tbWVudE1vbWVudHMpIHtcbiAgICAgICAgICAgIGlmICghdGltZSkgeyB0aW1lID0gKGlkeCArIDEpOyB9XG4gICAgICAgICAgICB0aW1lICs9ICcgLSAnICsgcy5jb21tZW50TW9tZW50cztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGltZTtcbiAgICAgICAgfSkuZmlsdGVyKHMgPT4gcyk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVzID8gdGltZXMuam9pbihcIlxcblwiKSA6ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSxcbiAgICBnZXREZWxpdmVyeVRpbWVzQW5kTW9tZW50cyhpdGVtKSB7XG4gICAgICBsZXQgdGltZXMgPSBbXTtcbiAgICAgIC8vIE1vbWVudHMgZGF5c1xuICAgICAgaWYgKGl0ZW0ubW9tZW50c0RheXMgJiYgaXRlbS5tb21lbnRzRGF5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxldCBtb21lbnRzID0gaXRlbS5tb21lbnRzRGF5cy5yZWR1Y2UoKGFjYywgbSkgPT4gYWNjLnNldChtLm9wZW5pbmdUaW1lLnNob3J0LCAoYWNjLmdldChtLm9wZW5pbmdUaW1lLnNob3J0KSB8fCAwKSArIDEpLCBuZXcgTWFwKCkpO1xuICAgICAgICB0aW1lcy5wdXNoKC4uLihbLi4ubW9tZW50cy5lbnRyaWVzKCldLm1hcChtID0+IG1bMF0gKyAnICgnICsgbVsxXSArICcpJykpKTtcbiAgICAgIH1cbiAgICAgIC8vIERlbGl2ZXJ5IHRpbWVzXG4gICAgICBpZiAoaXRlbS5kZWxpdmVyeVRpbWVzICYmIGl0ZW0uZGVsaXZlcnlUaW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRpbWVzLnB1c2goLi4uaXRlbS5kZWxpdmVyeVRpbWVzLm1hcCh0ID0+IHQudGltZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRpbWVzLmpvaW4oJywgJyk7XG4gICAgfSxcbiAgICBnZXRDbGFzc1F0eUNvbG9yKGl0ZW0pIHtcbiAgICAgIGxldCBzY2hlUXR5ID0gaXRlbS5kZWxpdmVyeVNjaGVkdWxlT3JkZXJzLnJlZHVjZSgoc3VtLCB2YWx1ZSkgPT4gc3VtICs9ICh2YWx1ZS5pc19yZWFsaXNlZCA/IHZhbHVlLmRlbGl2ZXJ5X3F1YW50aXR5IDogMCksIDApO1xuICAgICAgbGV0IG9yZGVyUXR5ID0gaXRlbS5xdWFudGl0eU9yZGVyZWQgPz8gMDtcbiAgICAgIC8vIENvbG9yc1xuICAgICAgaWYgKHNjaGVRdHkgPD0gMCB8fCBzY2hlUXR5ID4gb3JkZXJRdHkpIHsgcmV0dXJuICdyZWQtLXRleHQnOyB9XG4gICAgICBpZiAoc2NoZVF0eSA9PT0gb3JkZXJRdHkpIHsgcmV0dXJuICdncmVlbi0tdGV4dCc7IH1cbiAgICAgIHJldHVybiAnb3JhbmdlLS10ZXh0JztcbiAgICB9LFxuICAgIGl0ZW1Sb3dCYWNrZ3JvdW5kKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtICYmIGl0ZW0uaXNBcmNoaXZlZCA/ICdyZWQgbGlnaHRlbi00JyA6ICcnO1xuICAgIH1cbiAgfVxufSk7XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuICAuY29zdHM6bnRoLW9mLXR5cGUoZXZlbikge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRvdXJzUXR5IHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC52LWRhdGEtdGFibGVfX3dyYXBwZXIgdGFibGUgdGJvZHkgdHIgdGQudGV4dC1zdGFydCB7XG4gICAgcGFkZGluZzogMCA4cHghaW1wb3J0YW50O1xuICB9XG5cbiAgLy8gUHJpdGFibGUgdGV4dCBzaXplXG4gIEBtZWRpYSBwcmludCB7XG4gICAgaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLCBwcmUsIGEsIG9sLCB1bCwgbGksIHRhYmxlLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLCBpIHtcbiAgICAgIGZvbnQtc2l6ZTogNnB0ICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG48L3N0eWxlPlxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/