body {
    background-color: white;
}
input, button, select, optgroup, textarea {
    margin-bottom: 5px;
}

#layout[data-v-38d3c614] {
    height:100vh;
}
.hcontainer[data-v-38d3c614] {
  height:100vh;
}
.input-clearfix[data-v-38d3c614] {
  height:100px;
}
.scrollable[data-v-38d3c614] {
    overflow-y: scroll;
  overflow-x: hidden;
}
.flex-fill[data-v-38d3c614] {
    flex:1;
}
.row[data-v-38d3c614] {
    margin-left:0px;
    margin-right:0px;
}


.h-100p[data-v-4fa2d2c8] {
  height:100%;
}
.card-title[data-v-4fa2d2c8]{
text-align: center;
}


.h-100p[data-v-7bca95a2] {
  height:100%;
}


.h-100p[data-v-aa5ceb28] {
  height:100%;
}
.card-title[data-v-aa5ceb28]{
text-align: center;
}


.chat-image[data-v-45347cce] {  
  display: block;
  margin-left: auto;
  margin-right: auto;
}


.message-content[data-v-76728e4d] {
  border-top-left-radius: 5px;
  border-bottom-left-radius: 5px;
  border-top-right-radius: 5px;
  border-bottom-right-radius: 5px;
  white-space: break-spaces;
}
.message-check[data-v-76728e4d] {
    margin-top:0.25rem;
    float:right;
    font-size:0.75rem
}
.message-date[data-v-76728e4d] {
    margin-top:0.25rem;
    float:right;
    font-size:0.75rem
}


.h-100p {
  height:100%;
}
.rounded {
    
  border-top-left-radius: 5px;
  border-bottom-left-radius: 5px;
  border-top-right-radius: 5px;
  border-bottom-right-radius: 5px;
}
.btn-light{
  margin-bottom:0px!important;
  background: none!important;
  border: none!important;
}
.emoji-btn {
  padding:5px;
  border-top-left-radius: 5px;
  border-bottom-left-radius: 5px;
  margin-right: -1px;
  margin-bottom: 5px!important;
}
.minw-none {
  min-width:3rem!important;
}


.stickyInput[data-v-494ddb16] {
  height:100px;
  padding-left:1em;
  padding-right:1em;
    z-index:1;
    bottom:0px;
    width:100%;
    position: fixed;
    left: 0;
}
.chat-inner-container[data-v-494ddb16]{
  min-height:3rem;
}
.stickyButton[data-v-494ddb16] {
  z-index:1;
  right: 1rem;
  position: fixed;
  top: 3.5rem;
}
hr[data-v-494ddb16] {
margin-bottom:0.5em;margin-top:0.25em;
}
.border-primary[data-v-494ddb16] {
  border: 1px solid #0d6efd;
}
.alert-secondary[data-v-494ddb16]{
  margin-left:8em;
}
textarea[data-v-494ddb16] {
  resize: none;
  border-top-right-radius: 5px;
  border-bottom-right-radius: 5px;
  border-left: 0!important;
}
.rounded[data-v-494ddb16] {
  border-top-left-radius: 5px;
  border-bottom-left-radius: 5px;
  border-top-right-radius: 5px;
  border-bottom-right-radius: 5px;
}
.icon-group[data-v-494ddb16] {
  z-index:2;
  border:1px solid grey;
  padding:5px;
  border-radius:5px;
  background-color:white;
  border-bottom:0px;
  bottom:55px;
}
.row[data-v-494ddb16] {
  margin-left:0px!important;
  margin-right:0px!important;
}
.alert[data-v-494ddb16] {
  margin-bottom:4px!important;
  padding:0.5rem!important;
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsIm1hcHBpbmdzIjoiQUFBQTtJQUNJLHVCQUF1QjtBQUMzQjtBQUNBO0lBQ0ksa0JBQWtCO0FBQ3RCLEM7O0FDNENBO0lBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTtBQUNBO0VBQ0E7QUFDQTtBQUNBO0lBQ0E7RUFDQTtBQUNBO0FBQ0E7SUFDQTtBQUNBO0FBQ0E7SUFDQTtJQUNBO0FBQ0E7OztBQ3pEQTtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7OztBQ29CQTtFQUNBO0FBQ0E7OztBQ25CQTtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7OztBQ25CQTtFQUNBO0VBQ0E7RUFDQTtBQUNBOzs7QUNxQkE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7QUFDQTs7O0FDNEJBO0VBQ0E7QUFDQTtBQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtFQUNBO0FBQ0E7OztBQUlBO0VBQ0E7RUFDQTtFQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0FBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUVBO0FBQ0E7RUFDQTtFQUNBO0FBQ0E7QUFDQTtFQUNBO0VBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvYXBwLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9BcHAudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL0FwcC9Db250YWN0cy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvQXBwL0NoYXRzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9BcHAvU2V0dGluZ3MudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL0FwcC9DaGF0cy9DaGF0L01lc3NhZ2UvRmlsZS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvQXBwL0NoYXRzL0NoYXQvTWVzc2FnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvQXBwL0NoYXRzL0NoYXQudnVlIl0sInNvdXJjZXNDb250ZW50IjpbImJvZHkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuaW5wdXQsIGJ1dHRvbiwgc2VsZWN0LCBvcHRncm91cCwgdGV4dGFyZWEge1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbn0iLCI8IS0tIEF1dGhvcjogU3RlZmFuIFNhbmRlciA8bWFpbEBzdGVmYW4tc2FuZGVyLm9ubGluZT4gLS0+XG48dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cImxheW91dCBcIiBzdHlsZT1cImhlaWdodDoxMDB2aDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBkLWZsZXggaGNvbnRhaW5lciBmbGV4LWNvbHVtbiBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcC0wXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBwLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAgQGNsaWNrPVwiZ28oJ2FwcF9jb250YWN0cycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgIGhyZWY9XCIjXCIgdGFyZ2V0PVwiX3NlbGZcIiBjbGFzcz1cIm5hdi1saW5rXCIgdi1iaW5kOmNsYXNzPVwieyBhY3RpdmU6IGN1cnJlbnRSb3V0ZSgnYXBwX2NvbnRhY3RzJyl9XCIgPiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwiYWRkcmVzcy1ib29rXCIgLz4gQ29udGFjdHMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAgQGNsaWNrPVwiZ28oJ2FwcF9jaGF0cycpXCIgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAgaHJlZj1cIiNcIiB0YXJnZXQ9XCJfc2VsZlwiIGNsYXNzPVwibmF2LWxpbmtcIiB2LWJpbmQ6Y2xhc3M9XCJ7IGFjdGl2ZTogKGN1cnJlbnRSb3V0ZSgnYXBwX2NoYXQnKSB8fCBjdXJyZW50Um91dGUoJ2FwcF9jaGF0cycpKSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwiZWRpdFwiIC8+IENoYXRzIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgIEBjbGljaz1cImdvKCdhcHBfc2V0dGluZ3MnKVwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAgaHJlZj1cIiNcIiB0YXJnZXQ9XCJfc2VsZlwiIGNsYXNzPVwibmF2LWxpbmtcIiB2LWJpbmQ6Y2xhc3M9XCJ7IGFjdGl2ZTogY3VycmVudFJvdXRlKCdhcHBfc2V0dGluZ3MnKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQtYXdlc29tZS1pY29uIGljb249XCJjb2dzXCIgLz4gIFNldHRpbmdzIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmbGV4LWZpbGwgZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBzY3JvbGxhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHBvcnRsZXQtY29udGFpbmVyIHBvcnRsZXQtZHJvcHpvbmUgY29udGVudCBwLTMgcGItMVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPHJvdXRlci12aWV3Pjwvcm91dGVyLXZpZXc+XG4gICAgICAgICAgICAgICBcblxuXG5cblxuICAgICAgICAgICAgICAgICAgPC9kaXY+IDxkaXYgaWQ9XCJib3R0b21cIj5cbiAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgaW5wdXQtY2xlYXJmaXhcIiB2LWlmPVwiY3VycmVudFJvdXRlKCdhcHBfY2hhdCcpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4jbGF5b3V0IHtcbiAgICBoZWlnaHQ6MTAwdmg7XG59XG4uaGNvbnRhaW5lciB7XG4gIGhlaWdodDoxMDB2aDtcbn1cbi5pbnB1dC1jbGVhcmZpeCB7XG4gIGhlaWdodDoxMDBweDtcbn1cbi5zY3JvbGxhYmxlIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbn1cbi5mbGV4LWZpbGwge1xuICAgIGZsZXg6MTtcbn1cbi5yb3cge1xuICAgIG1hcmdpbi1sZWZ0OjBweDtcbiAgICBtYXJnaW4tcmlnaHQ6MHB4O1xufVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0FwcCcsXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGFjdGl2ZTpudWxsLFxuICAgICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgICBjdXJyZW50Um91dGUocm91dGUpIHtcbiAgICAgICByZXR1cm4gcm91dGU9PXRoaXMuJHJvdXRlci5jdXJyZW50Um91dGUubmFtZVxuICAgICAgfSxcbiAgICAgIGdvKHBhZ2UpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiBwYWdlfSlcbiAgICAgIH0sXG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbigpIHtcbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLiRyb290LiRvbignY2hhdDp0eXBpbmcnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoJ0NoYXQ6OmNoYXQ6dHlwaW5nJyxyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiRyb290LiRvbignY2hhdDptZXNzYWdlOnN0YXR1cycsIChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnQ2hhdE1lc3NhZ2U6OmNoYXQ6bWVzc2FnZTpzdGF0dXMnLHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJHJvb3QuJG9uKCd1c2VyOmNoYW5nZTpwYXNzd29yZCcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnQXBwU2V0dGluZ3M6OnVzZXI6Y2hhbmdlOnBhc3N3b3JkJyxyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiRyb290LiRvbignY2hhdDpsb2FkOnVzZXJjaGF0cycsIChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnQXBwQ2hhdHM6OmNoYXQ6bG9hZDp1c2VyY2hhdHMnLHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJHJvb3QuJG9uKCdjb250YWN0OmFkZCcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnQXBwQ29udGFjdHM6OmNvbnRhY3Q6YWRkJyxyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiRyb290LiRvbignY29udGFjdDpzZWFyY2gnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoJ0FwcENvbnRhY3RzOjpjb250YWN0OnNlYXJjaCcscmVzdWx0KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kcm9vdC4kb24oJ3VzZXI6Y29udGFjdHMnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuJHJvb3QuJGVtaXQoJ0FwcENvbnRhY3RzOjp1c2VyOmNvbnRhY3RzJyxyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiRyb290LiRvbignY2hhdDp1bmJsb2NrJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLiRyb290LiRlbWl0KCdBcHBDaGF0czo6Y2hhdDp1bmJsb2NrJyxyZXN1bHQpO1xuICAgICAgICB0aGlzLiRyb290LiRlbWl0KCdDaGF0OjpjaGF0OnVuYmxvY2snLHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJHJvb3QuJG9uKCdjaGF0OmJsb2NrJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLiRyb290LiRlbWl0KCdBcHBDaGF0czo6Y2hhdDpibG9jaycscmVzdWx0KTtcbiAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnQ2hhdDo6Y2hhdDpibG9jaycscmVzdWx0KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kcm9vdC4kb24oJ2NoYXQ6bWVzc2FnZTpzZW5kJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLiRyb290LiRlbWl0KCdDaGF0OjpjaGF0Om1lc3NhZ2U6c2VuZCcscmVzdWx0KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kcm9vdC4kb24oJ2NoYXQ6bG9hZCcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnQ2hhdDo6Y2hhdDpsb2FkJyxyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiRyb290LiRvbignY2hhdDpsb2FkOm1lc3NhZ2VzJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLiRyb290LiRlbWl0KCdDaGF0OjpjaGF0OmxvYWQ6bWVzc2FnZXMnLHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJHJvb3QuJG9uKCdmaWxlOnVwbG9hZCcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy4kcm9vdC4kZW1pdCgnQ2hhdDo6ZmlsZTp1cGxvYWQnLHJlc3VsdCk7XG4gICAgICB9KTtcblxuICAgICAgICBpZiAoIShcIk5vdGlmaWNhdGlvblwiIGluIHdpbmRvdykpIHtcbiAgICAgICAvLyAgYWxlcnQoXCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBkZXNrdG9wIG5vdGlmaWNhdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChOb3RpZmljYXRpb24ucGVybWlzc2lvbiAhPT0gXCJkZW5pZWRcIikge1xuICAgICAgICAgIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4oKHBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGFjY2VwdHMsIGxldCdzIGNyZWF0ZSBhIG5vdGlmaWNhdGlvblxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09IFwiZ3JhbnRlZFwiKSB7XG4gICAgICAgICAgICAgIHRoaXMuJHJvb3Qubm90aWZ5X3Blcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uID09PSBcImdyYW50ZWRcIikge1xuICAgICAgICAgIC8vIElmIGl0J3Mgb2theSBsZXQncyBjcmVhdGUgYSBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgdGhpcy4kcm9vdC5ub3RpZnlfcGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+IiwiPCEtLSBBdXRob3I6IFN0ZWZhbiBTYW5kZXIgPG1haWxAc3RlZmFuLXNhbmRlci5vbmxpbmU+IC0tPlxuPHRlbXBsYXRlPlxuICAgIDxkaXYgaWQ9XCJjb250YWN0c1wiIGNsYXNzPVwiaC0xMDBwXCI+XG5cbiAgICAgIDxpbnB1dCBpZD1cImNvbnRhY3Rfc2VhcmNoXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cInctMTAwXCIgcGxhY2Vob2xkZXI9XCJmaW5kIG5ldyBjb250YWN0c1wiIHYtb246a2V5dXA9XCJmaW5kQ29udGFjdHMoKVwiIHYtbW9kZWw9XCJzZWFyY2hcIiAvPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdi1mb3I9XCJ1c2VyIGluIGNvbnRhY3RzXCIgOmtleT1cInVzZXIuaWRcIiBjbGFzcz1cInctMTAwIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgQGNsaWNrPVwiYWRkQ29udGFjdCh1c2VyKVwiPkFkZCB7e3VzZXIudXNlcm5hbWV9fTwvYnV0dG9uPlxuXG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuLmgtMTAwcCB7XG4gIGhlaWdodDoxMDAlO1xufVxuLmNhcmQtdGl0bGV7XG50ZXh0LWFsaWduOiBjZW50ZXI7XG5cbn1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdBcHBDb250YWN0cycsXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBcbiAgICAgICAgc2VhcmNoOicnLFxuICAgICAgICBjb250YWN0czpudWxsLFxuICAgICAgICBteWNvbnRhY3RzOm51bGxcbiAgICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFkZENvbnRhY3QodXNlcikge1xuICAgICAgICB0aGlzLiRyb290LmNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAnYWN0aW9uJzogJ2NvbnRhY3Q6YWRkJyxcbiAgICAgICAgICAgICAgICAncGFyYW1zJzoge1xuICAgICAgICAgICAgICAgICAgJ3Rva2VuJzogdGhpcy4kcm9vdC50b2tlbixcbiAgICAgICAgICAgICAgICAgICdib2InIDp1c2VyLmlkLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBmaW5kQ29udGFjdHMoKSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2ghPScnKSB7XG4gICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnY29udGFjdDpzZWFyY2gnLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLiRyb290LnRva2VuLFxuICAgICAgICAgICAgICAgICAgICAndXNlcm5hbWUnOiB0aGlzLnNlYXJjaCwgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICB9LFxuICBtb3VudGVkKCkge1xuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFjdF9zZWFyY2gnKS5mb2N1cygpXG4gIH0sXG4gIGJlZm9yZURlc3Ryb3kgKCkge1xuICAgIHRoaXMuJHJvb3QuJG9mZignQXBwQ29udGFjdHM6OmNvbnRhY3Q6YWRkJylcbiAgICB0aGlzLiRyb290LiRvZmYoJ0FwcENvbnRhY3RzOjp1c2VyOmNvbnRhY3RzJylcbiAgICB0aGlzLiRyb290LiRvZmYoJ0FwcENvbnRhY3RzOjpjb250YWN0OnNlYXJjaCcpXG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRyb290LmNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAnYWN0aW9uJzogJ3VzZXI6Y29udGFjdHMnLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgIHRoaXMuJHJvb3QuJG9uKCdBcHBDb250YWN0czo6Y29udGFjdDphZGQnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuY29tbWFuZD09J2NvbnRhY3Q6YWRkJykge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogJ2FwcF9jaGF0JywgcGFyYW1zOiB7IGlkOiByZXN1bHQuZGF0YSB9fSlcbiAgICAgICAgfVxuICAgICB9KTtcbiAgICB0aGlzLiRyb290LiRvbignQXBwQ29udGFjdHM6OnVzZXI6Y29udGFjdHMnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuY29tbWFuZD09J3VzZXI6Y29udGFjdHMnKSB7XG4gICAgICAgICAgICB0aGlzLm15Y29udGFjdHMgPSBKU09OLnBhcnNlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfVxuICAgICB9KTtcbiAgICB0aGlzLiRyb290LiRvbignQXBwQ29udGFjdHM6OmNvbnRhY3Q6c2VhcmNoJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LmNvbW1hbmQ9PSdjb250YWN0OnNlYXJjaCcpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFjdHMgPSBKU09OLnBhcnNlKHJlc3VsdC5kYXRhKS5maWx0ZXIoKHUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHUudXNlcm5hbWU9PXRoaXMuJHJvb3QuY2xhaW0udXNlcm5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yKHZhciBjb250YWN0IG9mIHRoaXMubXljb250YWN0cykge1xuICAgICAgICAgICAgICAgIGlmICh1LnVzZXJuYW1lPT1jb250YWN0LnVzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PiIsIjwhLS0gQXV0aG9yOiBTdGVmYW4gU2FuZGVyIDxtYWlsQHN0ZWZhbi1zYW5kZXIub25saW5lPiAtLT5cbjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaC0xMDBwXCI+XG5cblxuICAgICAgPGRpdiBpZD1cImxvYWRpbmdcIiB2LWlmPVwicmVhZHk9PWZhbHNlXCI+XG4gICAgICAgIGxvYWRpbmdcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cImNoYXRzXCIgdi1pZj1cInJlYWR5PT10cnVlXCI+XG4gICAgICAgIDxkaXYgdi1pZj1cImNoYXRzLmxlbmd0aD09MFwiPlxuICAgICAgICAgIDxwPnlvdSBoYXZlIG5vIGNvbnRhY3RzIGFkZGVkIHlldCB0byBjaGF0IHdpdGguIDwvcD5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3LTEwMCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIEBjbGljaz1cIiRyb3V0ZXIucHVzaCh7IG5hbWU6ICdhcHBfY29udGFjdHMnfSlcIj5GaW5kIENvbnRhY3RzIDxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwiYWRkcmVzcy1ib29rXCIgLz48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB2LWZvcj1cImNoYXQgaW4gY2hhdHNcIiA6a2V5PVwiY2hhdC5pZFwiPiAgXG4gICAgICAgICAgICA8Yi1idXR0b24tZ3JvdXAgY2xhc3M9XCJ3LTEwMFwiICB2LWlmPVwiY2hhdC5ibG9ja2VkQnkhPW51bGxcIiA+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkIGNsYXNzPVwidy03NSBidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgICA+IHt7cmVuZGVyVXNlcm5hbWVzKGNoYXQudXNlcnMpfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3LTI1IGJ0biBidG4tb3V0bGluZS1kYW5nZXJcIiAgQGNsaWNrPVwidW5ibG9ja0NoYXQoY2hhdC5pZClcIlxuICAgICAgICAgICAgICAgIHYtaWY9XCIkcm9vdC5jbGFpbS5pZD09Y2hhdC5ibG9ja2VkQnkuaWRcIiA+XG4gICAgICAgICAgICAgICAgdW5ibG9jayAgPGZvbnQtYXdlc29tZS1pY29uIGljb249XCJ1bmxvY2tcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8IS0tICAgXG4gICAgICAgICAgICAgICAgICA8Yi1kcm9wZG93bi1pdGVtPjxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwiY2FtZXJhXCIgLz48L2ItZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDxiLWRyb3Bkb3duLWRpdmlkZXIgLz4gXG4gICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICA8L2ItYnV0dG9uLWdyb3VwPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdi1pZj1cImNoYXQuYmxvY2tlZEJ5PT1udWxsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0YXJ0Q2hhdChjaGF0LmlkKVwiID5cbiAgICAgICAgICAgICAgICB7e3JlbmRlclVzZXJuYW1lcyhjaGF0LnVzZXJzKX19ICA8Zm9udC1hd2Vzb21lLWljb24gaWNvbj1cImNvbW1lbnRzXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4uaC0xMDBwIHtcbiAgaGVpZ2h0OjEwMCU7XG59XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnQ2hhdHMnLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgY2hhdHM6IFtdXG4gICAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB1bmJsb2NrQ2hhdChjaGF0SWQpIHtcbiAgICAgICAgdGhpcy4kY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB0byB1bmJsb2NrP2AsXG4gICAgICAgICAgYnV0dG9uOiB7XG4gICAgICAgICAgICBubzogJ05vJyxcbiAgICAgICAgICAgIHllczogJ1llcydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNhbGxiYWNrOiBjb25maXJtID0+IHtcbiAgICAgICAgICAgIGlmIChjb25maXJtKSB7XG4gICAgICAgICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnY2hhdDp1bmJsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAncGFyYW1zJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLiRyb290LnRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hhdElkJzogY2hhdElkLCAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICAgICAgICBcbiAgICB9LFxuICAgIHN0YXJ0Q2hhdChjaGF0SWQpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6ICdhcHBfY2hhdCcsIHBhcmFtczogeyBpZDogY2hhdElkIH19KVxuICAgIH0sXG4gICAgcmVuZGVyVXNlcm5hbWVzKHVzZXJzKSB7XG4gICAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICAgIGZvcih2YXIgdXNlciBvZiB1c2Vycykge1xuICAgICAgICBpZiAodXNlci5pZCE9dGhpcy4kcm9vdC5jbGFpbS5pZCkge1xuICAgICAgICAgICAgbmFtZXMucHVzaCh1c2VyLnVzZXJuYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmFtZXMuam9pbignLCAnKVxuICAgIH0sXG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbigpIHtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveSAoKSB7XG4gICAgdGhpcy4kcm9vdC4kb2ZmKCdBcHBDaGF0czo6Y2hhdDp1bmJsb2NrJykgXG4gICAgdGhpcy4kcm9vdC4kb2ZmKCdBcHBDaGF0czo6Y2hhdDpibG9jaycpIFxuICAgIHRoaXMuJHJvb3QuJG9mZignQXBwQ2hhdHM6OmNoYXQ6bG9hZDp1c2VyY2hhdHMnKVxuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgXG4gICAgdGhpcy4kcm9vdC4kb24oJ0FwcENoYXRzOjpjaGF0OmxvYWQ6dXNlcmNoYXRzJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LmNvbW1hbmQ9PSdjaGF0OmxvYWQ6dXNlcmNoYXRzJykge1xuICAgICAgICAgIHRoaXMuY2hhdHMgPSBKU09OLnBhcnNlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICB9KTtcblxuICAgICAgdGhpcy4kcm9vdC4kb24oJ0FwcENoYXRzOjpjaGF0OmJsb2NrJywgKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgIGZvcih2YXIgaSBpbiB0aGlzLmNoYXRzKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdC5kYXRhKVxuICAgICAgICAgIGlmICh0aGlzLmNoYXRzW2ldLmlkID09IGRhdGEuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdjaGF0OmxvYWQ6dXNlcmNoYXRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuJzogdGhpcy4kcm9vdC50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRyb290LiRvbignQXBwQ2hhdHM6OmNoYXQ6dW5ibG9jaycsIChyZXN1bHQpID0+IHtcbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuY2hhdHMpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UocmVzdWx0LmRhdGEpXG4gICAgICAgICAgaWYgKHRoaXMuY2hhdHNbaV0uaWQgPT0gZGF0YS5pZCkge1xuICAgICAgICAgICAgdGhpcy4kcm9vdC5jb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogJ2NoYXQ6bG9hZDp1c2VyY2hhdHMnLFxuICAgICAgICAgICAgICAgICAgICAncGFyYW1zJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLiRyb290LnRva2VuLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnY2hhdDpsb2FkOnVzZXJjaGF0cycsXG4gICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuJzogdGhpcy4kcm9vdC50b2tlbixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICB9XG59XG48L3NjcmlwdD4iLCI8IS0tIEF1dGhvcjogU3RlZmFuIFNhbmRlciA8bWFpbEBzdGVmYW4tc2FuZGVyLm9ubGluZT4gLS0+XG48dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInNldHRpbmdzXCIgIGNsYXNzPVwiIGgtMTAwcFwiPlxuICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgcm93IFwiIHYtaWY9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICB2LWJpbmQ6Y2xhc3M9XCJ7XG4gICAgICAgICAgICAgICAgJ2FsZXJ0LXN1Y2Nlc3MnOiAgbWVzc2FnZS5zdGF0dXM9PTAsXG4gICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlcic6ICBtZXNzYWdlLnN0YXR1cz09MSxcbiAgICAgICAgICAgICAgICB9XCI+e3ttZXNzYWdlLmRhdGF9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwib2xkcGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIm9sZCBwYXNzd29yZFwiIG5hbWU9XCJvbGRwYXNzd29yZFwiIHYtbW9kZWw9XCJvbGRwYXNzd29yZFwiICAgY2xhc3M9XCJ3LTEwMFwiIC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwibmV3IHBhc3N3b3JkXCIgbmFtZT1cInBhc3N3b3JkXCIgdi1tb2RlbD1cInBhc3N3b3JkXCIgICBjbGFzcz1cInctMTAwXCIgLz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJyZXBlYXQgbmV3IHBhc3N3b3JkXCIgbmFtZT1cInBhc3N3b3JkMlwiIHYtbW9kZWw9XCJwYXNzd29yZDJcIiAgIGNsYXNzPVwidy0xMDBcIiAvPlxuICAgICAgICAgIDxidXR0b24gdi1vbjpjbGljaz1cInNhdmUoKVwiICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHctMTAwXCI+Y2hhbmdlIHBhc3N3b3JkIDxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwic2F2ZVwiIC8+PC9idXR0b24+XG5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4uaC0xMDBwIHtcbiAgaGVpZ2h0OjEwMCU7XG59XG4uY2FyZC10aXRsZXtcbnRleHQtYWxpZ246IGNlbnRlcjtcblxufVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1NldHRpbmdzJyxcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb2xkcGFzc3dvcmQ6IG51bGwsXG4gICAgICAgIHBhc3N3b3JkOiBudWxsLFxuICAgICAgICBwYXNzd29yZDI6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBzYXZlOiBmdW5jdGlvbigpIHtcbiAgICBcbiAgICAgICAgdGhpcy4kcm9vdC5jb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgJ2FjdGlvbic6ICd1c2VyOmNoYW5nZTpwYXNzd29yZCcsXG4gICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHtcbiAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAnb2xkcGFzc3dvcmQnOiB0aGlzLm9sZHBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgJ3Bhc3N3b3JkJzogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICdwYXNzd29yZDInOiB0aGlzLnBhc3N3b3JkMixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLiRyb290LiRvbignQXBwU2V0dGluZ3M6OnVzZXI6Y2hhbmdlOnBhc3N3b3JkJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95ICgpIHtcbiAgICB0aGlzLiRyb290LiRvZmYoJ0FwcFNldHRpbmdzOjp1c2VyOmNoYW5nZTpwYXNzd29yZCcpXG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbigpIHtcbiAgfVxufVxuPC9zY3JpcHQ+IiwiPCEtLSBBdXRob3I6IFN0ZWZhbiBTYW5kZXIgPG1haWxAc3RlZmFuLXNhbmRlci5vbmxpbmU+IC0tPlxuPHRlbXBsYXRlPlxuICAgIDxkaXY+XG4gICAgICAgIDxpbWcgY2xhc3M9XCJjaGF0LWltYWdlXCIgOnNyYz1cImNvbnRlbnRcIiAvPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbjxzdHlsZSBzY29wZWQ+XG4uY2hhdC1pbWFnZSB7ICBcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnQ2hhdE1lc3NhZ0ZpbGUnLFxuICBwcm9wczogWydkYXRhJ10sXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOnRoaXMuZGF0YS5pZCxcbiAgICAgICAgdXNlcjp0aGlzLmRhdGEudXNlcixcbiAgICAgICAgZmlsZW5hbWU6dGhpcy5kYXRhLmZpbGVuYW1lLFxuICAgICAgICBjb250ZW50OnRoaXMuZGF0YS5jb250ZW50LFxuICAgICAgICB3aW5kb3dXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIGFsbG93ZWRfZmlsZV90eXBlczpbXG4gICAgICAgICAgJ2ltYWdlL2pwZWcnLFxuICAgICAgICAgICdpbWFnZS9wbmcnXG4gICAgICAgIF0sXG4gICAgICAgIGFsbG93ZWRfZmlsZV9zaXplOjEwMjQgKiAxMDI0ICogMC41LCAvLyAwLjUgbWJcbiAgICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgICAgc2F2ZSgpIHtcbiAgICAgICAgICBcbiAgICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24oKSB7XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICB9LFxuICBiZWZvcmVEZXN0cm95ICgpIHtcbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIFxuICB9XG59XG48L3NjcmlwdD4iLCI8IS0tIEF1dGhvcjogU3RlZmFuIFNhbmRlciA8bWFpbEBzdGVmYW4tc2FuZGVyLm9ubGluZT4gLS0+XG48dGVtcGxhdGU+XG4gICAgPGRpdj4gXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcGItMVwiIHJlZj1cIm1lc3NhZ2VcIiA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgdi1iaW5kOmNsYXNzPVwie1xuICAgICAgICAgICAgICAgICdjb2wtMSc6ICBpc1NlbmRlcigpLFxuICAgICAgICAgICAgICAgICdjb2wtMic6ICAhaXNTZW5kZXIoKSxcbiAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOSBtZXNzYWdlLWNvbnRlbnRcIiB2LWJpbmQ6Y2xhc3M9XCJ7IFxuICAgICAgICAgICAgICAgICdhbGVydC1wcmltYXJ5JzogaXNTZW5kZXIoKSxcbiAgICAgICAgICAgICAgICAnYWxlcnQtc2Vjb25kYXJ5JzogIWlzU2VuZGVyKClcbiAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAge3ttZXNzYWdlfX1cbiAgICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VGaWxlIDpkYXRhPVwiZmlsZVwiIHYtaWY9XCJmaWxlXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2ICBjbGFzcz1cIm1lc3NhZ2UtY2hlY2tcIiB2LWlmPVwiaXNTZW5kZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9udC1hd2Vzb21lLWljb24gY2xhc3M9XCJjaGVjay1pY29uXCIgaWNvbj1cImNoZWNrXCIgdi1pZj1cInNlZW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8Zm9udC1hd2Vzb21lLWljb24gY2xhc3M9XCJjaGVjay1pY29uXCIgaWNvbj1cImNoZWNrXCIgdi1pZj1cInNlbnRcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtZGF0ZVwiPnt7IHNlbnQgfCBtb21lbnQoXCJELk1NLllZWVkgaGg6bW1cIikgfX0gPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgcmVmPVwic2NcIiB2LWJpbmQ6Y2xhc3M9XCJ7XG4gICAgICAgICAgICAgICAgJ2NvbC0xJzogICFpc1NlbmRlcigpLFxuICAgICAgICAgICAgICAgICdjb2wtMic6ICBpc1NlbmRlcigpLFxuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4ubWVzc2FnZS1jb250ZW50IHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG4gIHdoaXRlLXNwYWNlOiBicmVhay1zcGFjZXM7XG59XG4ubWVzc2FnZS1jaGVjayB7XG4gICAgbWFyZ2luLXRvcDowLjI1cmVtO1xuICAgIGZsb2F0OnJpZ2h0O1xuICAgIGZvbnQtc2l6ZTowLjc1cmVtXG59XG4ubWVzc2FnZS1kYXRlIHtcbiAgICBtYXJnaW4tdG9wOjAuMjVyZW07XG4gICAgZmxvYXQ6cmlnaHQ7XG4gICAgZm9udC1zaXplOjAuNzVyZW1cbn1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgIENoYXRNZXNzYWdlRmlsZSAgZnJvbSAnLi9NZXNzYWdlL0ZpbGUudnVlJ1xuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnTWVzc2FnZScsXG4gIGNvbXBvbmVudHM6IHtDaGF0TWVzc2FnZUZpbGV9LFxuICBwcm9wczogWydkYXRhJ10sXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOnRoaXMuZGF0YS5pZCxcbiAgICAgICAgc2VuZGVyOnRoaXMuZGF0YS5zZW5kZXIsXG4gICAgICAgIG1lc3NhZ2U6dGhpcy5kYXRhLm1lc3NhZ2UsXG4gICAgICAgIGZpbGU6dGhpcy5kYXRhLmZpbGUsXG4gICAgICAgIHNlbnQ6dGhpcy5kYXRhLnNlbnQsXG4gICAgICAgIGRlbGl2ZXJlZDp0aGlzLmRhdGEuZGVsaXZlcmVkLFxuICAgICAgICBzZWVuOnRoaXMuZGF0YS5zZWVuLFxuICAgICAgICBzdGF0dXM6dGhpcy5kYXRhLnN0YXR1cyxcbiAgICAgIH1cbiAgfSxcbiAgXG4gIG1ldGhvZHM6IHtcbiAgICAgIGlzU2VuZGVyKCkge1xuICAgICAgICAgIHJldHVybiAgdGhpcy5zZW5kZXIuaWQ9PXRoaXMuJHJvb3QuY2xhaW0uaWRcbiAgICAgIH0sXG4gICAgICBzYXZlKCkge1xuICAgICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAnYWN0aW9uJzogJ2NoYXQ6bWVzc2FnZTpzZW5kJyxcbiAgICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgJ2NoYXRJZCc6IHRoaXMuJHJvdXRlLnBhcmFtcy5pZCwgICAgXG4gICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLCAgICBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbigpIHtcbiAgIC8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdHRvbScpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwiZW5kXCJ9KTsgIFxuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbigpIHtcbiAgIC8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdHRvbScpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwiZW5kXCJ9KTsgIFxuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5zZW5kZXIuaWQhPXRoaXMuJHJvb3QuY2xhaW0uaWQgJiYgdGhpcy5zdGF0dXMhPSdzZWVuJykge1xuICAgICAgICB0aGlzLiRyb290LmNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAnYWN0aW9uJzogJ2NoYXQ6bWVzc2FnZTpzdGF0dXMnLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICdtZXNzYWdlSWQnOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogJ3NlZW4nLCAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgICAgdGhpcy4kcm9vdC4kb24oJ0NoYXRNZXNzYWdlOjpjaGF0Om1lc3NhZ2U6c3RhdHVzJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5jb21tYW5kID09ICdjaGF0Om1lc3NhZ2U6c3RhdHVzJykge1xuICAgICAgICAgICAgICAgIHZhciBfbWVzc2FnZSA9IEpTT04ucGFyc2UocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChfbWVzc2FnZS5pZCA9PSB0aGlzLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWQgPSBfbWVzc2FnZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kZXIgPSBfbWVzc2FnZS5zZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IF9tZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZSA9IF9tZXNzYWdlLmZpbGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VudCA9IF9tZXNzYWdlLnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsaXZlcmVkID0gX21lc3NhZ2UuZGVsaXZlcmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlZW4gPSBfbWVzc2FnZS5zZWVuO1xuICAgICAgICAgICAgICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgfSk7ICBcbiAgICAgIFxuICB9XG59XG48L3NjcmlwdD4iLCI8IS0tIEF1dGhvcjogU3RlZmFuIFNhbmRlciA8bWFpbEBzdGVmYW4tc2FuZGVyLm9ubGluZT4gLS0+XG48dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgaWQ9XCJsb2FkaW5nXCIgdi1pZj1cInJlYWR5PT1mYWxzZVwiPlxuICAgICAgICBsb2FkaW5nXG4gICAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hhdC13cmFwcGVyXCI+XG4gICAgICA8ZGl2IEBkcmFnb3Zlci5wcmV2ZW50IEBkcm9wLnByZXZlbnQ+IFxuICAgICAgPGRpdiBjbGFzcz1cIiBzdGlja3lCdXR0b25cIj5cbiAgICAgICAgPGItZHJvcGRvd24gZHJvcGRvd24gbWVudS1jbGFzcz1cIm1pbnctbm9uZVwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiAgPlxuICAgICAgICAgIDx0ZW1wbGF0ZSAjYnV0dG9uLWNvbnRlbnQ+XG4gICAgICAgICAgICA8Zm9udC1hd2Vzb21lLWljb24gaWNvbj1cImNvZ1wiIC8+IHt7cmVuZGVyVXNlcm5hbWVzKHVzZXJzKX19XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8IS0tICAgXG4gICAgICAgICAgICA8Yi1kcm9wZG93bi1pdGVtICBAY2xpY2s9XCJjbGVhckNoYXQoKVwiPjxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwiZXJhc2VyXCIgLz4gQ2xlYXI8L2ItZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgIDxiLWRyb3Bkb3duLWRpdmlkZXIgLz4gXG4gICAgICAgICAgLS0+XG4gICAgICAgICAgPGItZHJvcGRvd24taXRlbSBjbGFzcz1cImFsZXJ0LWRhbmdlclwiICBAY2xpY2s9XCJibG9ja0NoYXQoKVwiPjxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwiYmFuXCIgLz4gQmxvY2s8L2ItZHJvcGRvd24taXRlbT5cbiAgICAgICAgPC9iLWRyb3Bkb3duPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXQtY29udGFpbmVyXCIgQGRyb3A9XCJkcmFnRmlsZVwiID4gXG4gICAgICAgICAgPGRpdiBAY2xpY2s9XCJoaWRlKCcuaWNvbi1ncm91cCcpXCIgY2xhc3M9XCJjaGF0LWlubmVyLWNvbnRhaW5lclwiID5cbiAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoY2hhdE1lc3NhZ2UsaW5kZXgpIGluIGNoYXRNZXNzYWdlc1wiIDprZXk9XCJjaGF0TWVzc2FnZS5pZFwiPlxuICAgICAgICAgICAgICAgIDxDaGF0TWVzc2FnZSA6ZGF0YT1cImNoYXRNZXNzYWdlXCIgdi1pZj1cImNoYXRNZXNzYWdlcy5sZW5ndGgtdmlzaWJsZTxpbmRleFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwidGltZXJDb3VudD4wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcGItMVwiIHJlZj1cIm1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGFsZXJ0IGFsZXJ0LWluZm8gcm91bmRlZFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9udC1hd2Vzb21lLWljb24gaWNvbj1cImtleWJvYXJkXCIgLz4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0eXBpbmdVc2VyfX0gaXMgdHlwaW5nIDxmb250LWF3ZXNvbWUtaWNvbiBpY29uPVwic3Bpbm5lclwiIHNwaW4gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5SW5wdXRcIj5cbiAgICAgICAgICAgIDxiLWJ1dHRvbi1ncm91cCBjbGFzcz1cInctMTAwXCIgPlxuICAgICAgICAgICAgICA8Yi1kcm9wZG93biBkcm9wdXAgbWVudS1jbGFzcz1cIm1pbnctbm9uZVwiIGNsYXNzPVwiZW1vamktYnRuIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgdmFyaWFudD1cImxpZ2h0XCIgPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjYnV0dG9uLWNvbnRlbnQ+8J+YijwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGItZHJvcGRvd24taXRlbSB2LWZvcj1cImssZ3JvdXAgaW4gdGhpcy5lbW9qaXNcIiA6a2V5PVwiZ3JvdXBcIiBAY2xpY2s9XCJzaG93Z3JvdXAoZ3JvdXApXCI+IHt7Z3JvdXB9fTwvYi1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICA8L2ItZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWZvcj1cImFycixncm91cCBpbiB0aGlzLmVtb2ppc1wiIDprZXk9XCJncm91cFwiIDpjbGFzcz1cImdyb3VwKycgaWNvbi1ncm91cCB3LTEwMCdcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCJrLHYgaW4gYXJyXCIgOmtleT1cImtcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lO1wiIHJvbGU9J2J1dHRvbicgQGNsaWNrPVwiYWRkU21pbGV5KHYpXCI+e3t2fX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIxXCIgaWQ9XCJjaGF0X2lucHV0XCIgY2xhc3M9XCJkaXNhYmxlZCBib3JkZXItcHJpbWFyeSB3LTEwMCBcIiBwbGFjZWhvbGRlcj1cIndyaXRlIGEgbWVzc2FnZVwiIHYtb246a2V5ZG93bj1cImlzVHlwaW5nKClcIiB2LW9uOmtleXVwPVwicmVwbGFjZUVtb2ppXCIgQGNsaWNrPVwiaGlkZSgnLmljb24tZ3JvdXAnKVwiIC8+XG4gICAgICAgICAgICA8L2ItYnV0dG9uLWdyb3VwPlxuICAgICAgICAgICAgPGRpdiAgQGNsaWNrPVwiaGlkZSgnLmljb24tZ3JvdXAnKVwiPlxuICAgICAgICAgICAgICA8Yi1idXR0b24tZ3JvdXAgY2xhc3M9XCJ3LTEwMFwiICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3LTEwMCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBcIiBAY2xpY2s9XCJzZW5kKClcIiA+c2VuZCA8Zm9udC1hd2Vzb21lLWljb24gaWNvbj1cInBhcGVyLXBsYW5lXCIgLz48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Yi1kcm9wZG93biBkcm9wdXAgbWVudS1jbGFzcz1cIm1pbnctbm9uZVwiIHZhcmlhbnQ9XCJwcmltYXJ5XCIgPlxuICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNidXR0b24tY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGZvbnQtYXdlc29tZS1pY29uIGljb249XCJmaWxlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8IS0tICAgXG4gICAgICAgICAgICAgICAgICAgIDxiLWRyb3Bkb3duLWl0ZW0+PGZvbnQtYXdlc29tZS1pY29uIGljb249XCJjYW1lcmFcIiAvPjwvYi1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8Yi1kcm9wZG93bi1kaXZpZGVyIC8+IFxuICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICA8Yi1kcm9wZG93bi1pdGVtICBAY2xpY2s9XCIkcmVmcy5maWxlLmNsaWNrKClcIj48Zm9udC1hd2Vzb21lLWljb24gaWNvbj1cImltYWdlXCIgLz48L2ItZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgICA8L2ItZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvYi1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIHJlZj1cImZpbGVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBAY2hhbmdlPVwiZmlsZUFkZGVkXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGU+XG4uaC0xMDBwIHtcbiAgaGVpZ2h0OjEwMCU7XG59XG4ucm91bmRlZCB7XG4gICAgXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xufVxuLmJ0bi1saWdodHtcbiAgbWFyZ2luLWJvdHRvbTowcHghaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kOiBub25lIWltcG9ydGFudDtcbiAgYm9yZGVyOiBub25lIWltcG9ydGFudDtcbn1cbi5lbW9qaS1idG4ge1xuICBwYWRkaW5nOjVweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG4gIG1hcmdpbi1yaWdodDogLTFweDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4IWltcG9ydGFudDtcbn1cbi5taW53LW5vbmUge1xuICBtaW4td2lkdGg6M3JlbSFpbXBvcnRhbnQ7XG59XG48L3N0eWxlPlxuXG48c3R5bGUgc2NvcGVkPlxuLnN0aWNreUlucHV0IHtcbiAgaGVpZ2h0OjEwMHB4O1xuICBwYWRkaW5nLWxlZnQ6MWVtO1xuICBwYWRkaW5nLXJpZ2h0OjFlbTtcbiAgICB6LWluZGV4OjE7XG4gICAgYm90dG9tOjBweDtcbiAgICB3aWR0aDoxMDAlO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBsZWZ0OiAwO1xufVxuLmNoYXQtaW5uZXItY29udGFpbmVye1xuICBtaW4taGVpZ2h0OjNyZW07XG59XG4uc3RpY2t5QnV0dG9uIHtcbiAgei1pbmRleDoxO1xuICByaWdodDogMXJlbTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDMuNXJlbTtcbn1cbmhyIHtcbm1hcmdpbi1ib3R0b206MC41ZW07bWFyZ2luLXRvcDowLjI1ZW07XG59XG4uYm9yZGVyLXByaW1hcnkge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMGQ2ZWZkO1xufVxuLmFsZXJ0LXNlY29uZGFyeXtcbiAgbWFyZ2luLWxlZnQ6OGVtO1xufVxudGV4dGFyZWEge1xuICByZXNpemU6IG5vbmU7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1sZWZ0OiAwIWltcG9ydGFudDtcbn1cbi5yb3VuZGVkIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG59XG4uaWNvbi1ncm91cCB7XG4gIHotaW5kZXg6MjtcbiAgYm9yZGVyOjFweCBzb2xpZCBncmV5O1xuICBwYWRkaW5nOjVweDtcbiAgYm9yZGVyLXJhZGl1czo1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6d2hpdGU7XG4gIGJvcmRlci1ib3R0b206MHB4O1xuICBib3R0b206NTVweDtcblxufVxuLnJvdyB7XG4gIG1hcmdpbi1sZWZ0OjBweCFpbXBvcnRhbnQ7XG4gIG1hcmdpbi1yaWdodDowcHghaW1wb3J0YW50O1xufVxuLmFsZXJ0IHtcbiAgbWFyZ2luLWJvdHRvbTo0cHghaW1wb3J0YW50O1xuICBwYWRkaW5nOjAuNXJlbSFpbXBvcnRhbnQ7XG59XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0ICBDaGF0TWVzc2FnZSAgZnJvbSAnLi9DaGF0L01lc3NhZ2UudnVlJ1xuaW1wb3J0IHsgZW1vamlzIH0gZnJvbSAnLi9DaGF0L2Vtb2ppcy5qc29uJ1xuICBpbXBvcnQgJCBmcm9tICdqcXVlcnknXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnQ2hhdCcsXG4gICAgY29tcG9uZW50czoge0NoYXRNZXNzYWdlfSxcbiAgICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7ICAgICAgIFxuICAgICAgICB2aXNpYmxlOjk5OTk5LFxuICAgICAgICBwYWdlOjAsXG4gICAgICAgIHR5cGluZ1VzZXI6bnVsbCxcbiAgICAgICAgdGltZXJDb3VudDowLFxuICAgICAgICByZWFkeTpmYWxzZSxcbiAgICAgICAgaWQ6bnVsbCxcbiAgICAgICAgdXNlcnM6W10sXG4gICAgICAgIGNoYXRNZXNzYWdlczpbXSxcbiAgICAgICAgYmxvY2tlZEJ5Om51bGwsXG4gICAgICAgIGVtb2ppcyxcbiAgICAgICAgd2luZG93V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICBhbGxvd2VkX2ZpbGVfdHlwZXM6W1xuICAgICAgICAgICdpbWFnZS9qcGVnJyxcbiAgICAgICAgICAnaW1hZ2UvcG5nJ1xuICAgICAgICBdLFxuICAgICAgICBhbGxvd2VkX2ZpbGVfc2l6ZToxMDI0ICogMTAyNCAqIDUsIC8vIDAuNSBtYlxuICAgICAgfVxuICAgIH0sICAgIFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldE1lc3NhZ2UobXNnSWQpIHtcbiAgICAgICBmb3IgKHZhciBtc2cgaW4gbWVzc2FnZXMpIHtcbiAgICAgICAgIGlmIChtc2cuaWQgPT0gbXNnSWQpIHtcbiAgICAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGlkZShncm91cCkge1xuICAgICAgICAkKGdyb3VwKS5oaWRlKCk7XG4gICAgICB9LFxuICAgICAgYWRkU21pbGV5KHNtaWxleSkge1xuICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0X2lucHV0JykudmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdF9pbnB1dCcpLnZhbHVlICsgc21pbGV5XG4gICAgICB9LFxuICAgICAgc2hvd2dyb3VwKGdyb3VwKSB7XG4gICAgICAgICQoJy5pY29uLWdyb3VwJykuaGlkZSgpO1xuICAgICAgICAkKCcuJyArIGdyb3VwKS5zaG93KCk7XG4gICAgICB9LFxuICAgICAgaXNUeXBpbmcoKSB7XG4gICAgICAgICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnY2hhdDp0eXBpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdjaGF0SWQnOiB0aGlzLmlkLCAgIFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICB9LFxuICAgICAgcmVwbGFjZUVtb2ppKCkge1xuICAgICAgIHZhciB0eHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdF9pbnB1dCcpLnZhbHVlXG4gICAgICAgZm9yICh2YXIgZ3JvdXAgaW4gdGhpcy5lbW9qaXMpIHtcbiAgICAgICAgZm9yICh2YXIgW2NvZGUsc21pbGV5XSBpbiB0aGlzLmVtb2ppc1tncm91cF0pIHtcbiAgICAgICAgICAgIHR4dCA9IHR4dC5yZXBsYWNlKHRoaXMuZW1vamlzW2dyb3VwXVtjb2RlXSwgY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0X2lucHV0JykudmFsdWUgPSB0eHRcbiAgICAgIH0sXG4gICAgICBjbGVhckNoYXQoKSB7XG4gICAgICAgIHRoaXMuJGNvbmZpcm0oe1xuICAgICAgICAgIG1lc3NhZ2U6IGBBcmUgeW91IHN1cmUgdG8gZGVsZXRlIGFsbCBwcmV2aW91cyBtZXNzYWdlcz9gLFxuICAgICAgICAgIGJ1dHRvbjoge1xuICAgICAgICAgICAgbm86ICdObycsXG4gICAgICAgICAgICB5ZXM6ICdZZXMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYWxsYmFjazogY29uZmlybSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgfSxcbiAgICAgIGJsb2NrQ2hhdCgpIHtcbiAgICAgICAgdGhpcy4kY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB0byBjbG9zZSBhbmQgYmxvY2sgdGhpcyBjaGF0P2AsXG4gICAgICAgICAgYnV0dG9uOiB7XG4gICAgICAgICAgICBubzogJ05vJyxcbiAgICAgICAgICAgIHllczogJ1llcydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNhbGxiYWNrOiBjb25maXJtID0+IHtcbiAgICAgICAgICAgIGlmIChjb25maXJtKSB7XG4gICAgICAgICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnY2hhdDpibG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuJzogdGhpcy4kcm9vdC50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYXRJZCc6IHRoaXMuaWQsICAgIFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICB9LFxuICAgICAgICBvblJlc2l6ZSgpIHtcbiAgICAgICAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgICAgICAgJCgnLmNoYXQtaW1hZ2UnKS5jc3MoJ21heFdpZHRoJyx3aW5kb3cuaW5uZXJXaWR0aC0xNTApO1xuICAgICAgICAgIH0sXG4gICAgICAgIGZpbGVBZGRlZChlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy4kcmVmcy5maWxlLmZpbGVzO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVwbG9hZEZpbGUoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dlZF9maWxlX3R5cGVzLmluY2x1ZGVzKHRoaXMuZmlsZXNbMF1bJ3R5cGUnXSkpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNbMF0uc2l6ZTx0aGlzLmFsbG93ZWRfZmlsZV9zaXplKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm9vdC5jb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdmaWxlOnVwbG9hZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuJzogdGhpcy4kcm9vdC50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnOiByZWFkZXIucmVzdWx0LCAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogdGhpcy5maWxlc1swXS5uYW1lLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGhpcy5maWxlc1swXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7IGFsZXJ0IChcInRoZSBmaWxlIGlzIHRvbyBiaWcuXCIpfVxuICAgICAgICAgIH0gZWxzZSB7IGFsZXJ0IChcInRoZSBmaWxldHlwZSBpcyBub3QgYWxsb3dlZC5cIil9XG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdGaWxlKGUpIHtcbiAgICAgICAgICB0aGlzLmZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGUoKTtcbiAgICAgICAgfSxcbiAgICAgIHNldFN0YXR1cyhtc2csc3RhdHVzKSB7XG4gICAgICAgIGlmIChtc2cuc3RhdHVzIT1zdGF0dXMpIHtcbiAgICAgICAgICB0aGlzLiRyb290LmNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdjaGF0Om1lc3NhZ2U6c3RhdHVzJyxcbiAgICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VJZCc6IG1zZy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogc3RhdHVzLCAgICBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2VuZCgpIHtcbiAgICAgICAgdmFyICBtc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdF9pbnB1dCcpLnZhbHVlXG4gICAgICAgIGlmIChtc2cpIHtcbiAgICAgICAgICB0aGlzLiRyb290LmNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdjaGF0Om1lc3NhZ2U6c2VuZCcsXG4gICAgICAgICAgICAgICAgICAncGFyYW1zJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLiRyb290LnRva2VuLCBcbiAgICAgICAgICAgICAgICAgICAgICAnY2hhdElkJzogdGhpcy4kcm91dGUucGFyYW1zLmlkLCAgICBcbiAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IG1zZywgICAgXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdF9pbnB1dCcpLnZhbHVlID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlbmRlclVzZXJuYW1lcyh1c2Vycykge1xuICAgICAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICAgICAgZm9yKHZhciB1c2VyIG9mIHVzZXJzKSB7XG4gICAgICAgICAgaWYgKHVzZXIuaWQhPXRoaXMuJHJvb3QuY2xhaW0uaWQpIHtcbiAgICAgICAgICAgICAgbmFtZXMucHVzaCh1c2VyLnVzZXJuYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZXMuam9pbignLCAnKVxuICAgICAgfSwgICAgXG4gICAgfSxcbiAgICB1cGRhdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXNpemUoKTtcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vblJlc2l6ZSk7XG4gICAgfSwgXG4gICAgICBiZWZvcmVEZXN0cm95ICgpIHtcbiAgICAgICAgdGhpcy4kcm9vdC4kb2ZmKCdDaGF0OjpjaGF0OmxvYWQnKVxuICAgICAgICB0aGlzLiRyb290LiRvZmYoJ0NoYXQ6OmZpbGU6dXBsb2FkJylcbiAgICAgICAgdGhpcy4kcm9vdC4kb2ZmKCdDaGF0OjpjaGF0Om1lc3NhZ2U6c2VuZCcpXG4gICAgICAgIHRoaXMuJHJvb3QuJG9mZignQ2hhdDo6Y2hhdDpibG9jaycpXG4gICAgICAgIHRoaXMuJHJvb3QuJG9mZignQ2hhdDo6Y2hhdDp0eXBpbmcnKVxuICAgICAgICB0aGlzLiRyb290LiRvZmYoJ0NoYXQ6OmNoYXQ6dW5ibG9jaycpXG4gICAgICAgIHRoaXMuJHJvb3QuJG9mZignQ2hhdDo6Y2hhdDpsb2FkOm1lc3NhZ2VzJylcbiAgICB9LFxuICAgIFxuICAgICAgICB3YXRjaDoge1xuICAgICAgICAgICAgdGltZXJDb3VudDoge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVyQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kcm9vdC5jb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdjaGF0OmxvYWQnLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICdjaGF0SWQnOiB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB0aGlzLiRyb290LiRvbignQ2hhdDo6Y2hhdDp0eXBpbmcnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuY2hhdC5pZD09dGhpcy5pZCkge1xuICAgICAgICAgICAgaWYgKGRhdGEudXNlci5pZCE9dGhpcy4kcm9vdC5jbGFpbS5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJDb3VudCA9IDUwO1xuICAgICAgICAgICAgICAgIHRoaXMudHlwaW5nVXNlciA9IGRhdGEudXNlci51c2VybmFtZTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgICAgXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdHRvbScpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwiZW5kXCJ9KTsgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLiRyb290LiRvbignQ2hhdDo6Y2hhdDp1bmJsb2NrJywgKHJlc3VsdCkgPT4ge1xuICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIGlmIChkYXRhLmlkPT10aGlzLmlkKSB7XG4gICAgICAgICAgdGhpcy4kcm9vdC5jb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnY2hhdDpsb2FkJyxcbiAgICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgJ2NoYXRJZCc6IHRoaXMuJHJvdXRlLnBhcmFtcy5pZCwgICAgXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRyb290LiRvbignQ2hhdDo6Y2hhdDpibG9jaycsIChyZXN1bHQpID0+IHtcbiAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UocmVzdWx0LmRhdGEpO1xuICAgICAgICBpZiAoZGF0YS5pZD09dGhpcy5pZCkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogXCJhcHBfY2hhdHNcIn0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy4kcm9vdC4kb24oJ0NoYXQ6OmNoYXQ6bG9hZCcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHZhciBjaGF0ID0gSlNPTi5wYXJzZShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmlkID0gY2hhdC5pZDtcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmNoYXRNZXNzYWdlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy51c2VycyA9IGNoYXQudXNlcnM7XG4gICAgICAgICAgICB0aGlzLnJlYWR5PXRydWU7ICAgXG4gICAgICAgICAgICB0aGlzLiRyb290LmNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnY2hhdDpsb2FkOm1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuJzogdGhpcy4kcm9vdC50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdjaGF0SWQnOiB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQsICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAncGFnZSc6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGVwcyc6IDEsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kcm9vdC4kb24oJ0NoYXQ6OmNoYXQ6bG9hZDptZXNzYWdlcycsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IEpTT04ucGFyc2UocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aD09MSkge1xuICAgICAgICAgICAgICB0aGlzLnBhZ2UrKztcbiAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlc1swXTtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TWVzc2FnZXMudW5zaGlmdChtZXNzYWdlKTsgICAgIFxuICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90dG9tJykuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiBcImF1dG9cIiwgYmxvY2s6IFwiZW5kXCJ9KTsgXG4gICAgICAgICAgICAgICAgICB0aGlzLiRyb290LmNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdjaGF0OmxvYWQ6bWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuJzogdGhpcy4kcm9vdC50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hhdElkJzogdGhpcy4kcm91dGUucGFyYW1zLmlkLCAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWdlJzogdGhpcy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGVwcyc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiRyb290LiRvbignQ2hhdDo6Y2hhdDptZXNzYWdlOnNlbmQnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbXNnID0gSlNPTi5wYXJzZShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmNoYXRNZXNzYWdlcy5wdXNoKG1zZyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgICAgXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdHRvbScpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwiZW5kXCJ9KTsgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgIGlmIChtc2cuc2VuZGVyLmlkIT10aGlzLiRyb290LmNsYWltLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kcm9vdC5ub3RpZnkobXNnLnNlbmRlci51c2VybmFtZSArIFwiOiBcIiArIG1zZy5tZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJHJvb3QuJG9uKCdDaGF0OjpmaWxlOnVwbG9hZCcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuJHJvb3QuY29ubmVjdGlvbi5zZW5kKFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdjaGF0Om1lc3NhZ2U6c2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IHRoaXMuJHJvb3QudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAnY2hhdElkJzogdGhpcy4kcm91dGUucGFyYW1zLmlkLCAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJycsICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAnZmlsZSc6IEpTT04ucGFyc2UocmVzdWx0LmRhdGEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG48L3NjcmlwdD4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/